NAME: ricross2dfit - fit 2d gaussian to a cross pattern. SYNTAX: coef=ricross2dfit(baz,bza,coefinit,azfit=azfit,zafit=zafit,$ covar=covar,chisq=chisq,sigma=sigma,sigCoef=sigCoef,$ trouble=trouble,weights=weights ARGS: baz :{ricrossinp} azimuuth input info bza :{ricrossinp} za input info coefinit[10]:floats initial values for coef. [0] - offset [1] - amplitude [2] - xoffset [3] - yoffset [4] - fwhm az (amin) [5] - fwhm za (amin) [6] - theta rotate unprimed to primed aligned along ellipsoid of beam, degrees. [7] - linear term in za deltaTsys/deltaZa (K/Amin) KEYWORDS: pol : int 0 (def) return polA, 1 --> return polB RETURNS: azfit[npts]: fit evaluated along az strip zafit[npts]: fit evaluated along za strip covar[n,n]:float covariance matrix chisq:float chisq of fit sigma :float sigma of fit sigCoef[n]:float sigmas for coefficients weights[npts,2]: weights to use az,za smaller number, less important NOTES: Set fwhm az,za to slightly different values. The routine lets curvefit (in idl) compute the derivatives). If the fwhm are the same, then the rotation angle theta has no affect. The derivative comes out to be 0 and it divides by the partial derivative array when doing the fit.. If you enter 8 coefinit values then it will all fit for a linear term in za
(See /pkg/rsi/local/libao/phil/ri/ricross2dfit.pro)
NAME: ricrosscal - compute the cal scaling factor for ri cross patterns SYNTAX: ncal=ricrosscal(bcal,bscale,calval) ARGS: bcal[n]: {cross} cal scans input from ricrossinp. RETURNS: bscale[2,n]:float scale factor to convert counts to kelvins calval[2,n]:float cal value used (pola,polB)used ncal : int number of cal records processed DESCRIPTION: The ricrossinp routine returns the data and cal records for a cross pattern. This routine will compute the conversion factor from a/d counts to Kelvins using the cal record and the cal value (in kelvins). The input data structure returned from ricrossinp is: bcal.h[nrecs] {hdr} header from each rec of strip bcal.don[npts,2] float cal On samples bcal.doff[npts,2] float cal off samples b.d[npts,2] - the data polA,b Normally then second index is polA, or polB (since the ricrossinp routine uses detected data). The routine will lookup the cal value using calget(). the conversion factor from kelevins
(See /pkg/rsi/local/libao/phil/ri/ricrosscal.pro)
NAME: ricrossinp - get 1 or more ri cross patterns SYNTAX: patInp=ricrossinp(lun,baz,bza,bcal,patreq,scan=scan) ARGS: lun : long lun to read from patreq: long the number of patterns to read in RETURNS: baz : {} return az strips bza : {} return za strips bcal : {} return cals here if we find them patInp: long number of patterns input DESCRIPTION: Read in 1 or more ricross patterns. The pattern has an az strip and a za strip. These are return in baz and bza. If cals were taken then they will be returned in bcal. By default, the routine starts reading from the current position in the file. If the scan keyword is supplied then it will position to scan before reading the data. The format of the returned data for a single pattern is (either baz or bza): b.h[nrecs] - header from each rec of az or za strip b.d[npts,2] - all the data for 1 strip. The second dimension is polA,B
(See /pkg/rsi/local/libao/phil/ri/ricrossinp.pro)
NAME: ricrossinp1 - get 1 strip of a cross pattern SYNTAX: istat=ricrossinp1(lun,b) ARGS: lun : long lun to read from b.{ }: structure from the cross pattern (either az or za strip) b.d[npts,2] - the data polA,b DESCRIPTION: This routine is call by ricrossinp to input a single strip of the ricross pattern.
(See /pkg/rsi/local/libao/phil/ri/ricrossinp1.pro)
NAME: ricrossplt - plot the data from a cross SYNTAX: ricrossplt,baz,bza,az=az,za=za,step=step,pol=pol ARGS: baz[n]: {anoncross} hold az info bza[n]: {anoncross} hold za info KEYWORDS: az if set then include az in plots za if set then include za in plots pol: string "a", or "b" if not provided, then plot both step=step if n>1 then do a strip plot with this step between strips default is 0. DESCRIPTION: plot the data input from ricrossinp. The default is to plot both az and za. If only az is set or only za is set, then just that axis will be plotted. If n is > 1 then the strips will be overplotted with a step between each strip.
(See /pkg/rsi/local/libao/phil/ri/ricrossplt.pro)
NAME: rigethdr - input an ri header SYNTAX: istat=rigethdr(lun,hdr,scan=scan,pos=pos) ARGS: lun : unit number for file (already opened) hdr : {hdr} return data here. KEYWORDS: scan : long . position to start of this scan before reading pos : int . 1 - position to start of this header before returning RETURNS: istat : int 1 - gotit 0 - hit eof -1 - could not position to requested scan -2 - bad data in hdr DESCRIPTION: Read the next ri header and return it. Optionally position to the start of this header before returning. This routine is used to peak at the header to decide how to process the record before calling riget. The caller should have already defined the {hdr} structure before calling this routine (usually done in the xxriinit routine for the particular datataking program).
(See /pkg/rsi/local/libao/phil/ri/rigethdr.pro)
NAME: rimonimg - monitor ri data SYNTAX: img=rimonimg(fbase,num,lun=lun,tmtoavg=tmtoavg, numx=numx,numy=numy,usefifo2=usefifo2,d=d,val=val, pixwin=pixwin,ilim=ilim) ARGS: fbase: string Base filename to read from (eg '/share/aeron5/24jul03'). Do not include the . or file number. num : int file number of file to start on. KEYWORDS: lun : int If provided, then process this file from the current position. When done with the file return. In this case fbase and num are ignored. You also can not jump to other files from the internal menu. ipptoavg:long number of ipps to average together. The default is none tmtoavg: long number of time points to average. default is none numDisp: long The number of averaged ipps to display in the image. The default is 900 averaged ipps. usefifo2: If set then use fifo 2. The default is fifo 1. val[2]: float Clip the power (a/d levels squared) to [min,max] and then scale to the full range of the display device ( 0 to 255). The default is to clip the power at 6 sigma (as measured from the first image). pixwin: if set then use a pixwin when drawing a new image. This cuts down on the flashing. It is useful when you are averaging only 1 or 2 ipps. ilim : long if supplied then limit image to these indices of the data rec (0 based). RETURNS: img[m,numDisp]:float the last image displayed. d[n] if this keyword is provided then the data read for the last image is returned here. DESCRIPTION: rimonimg will make continuous images of meteor data. The mean is removed from the voltages, power is computed, and then toavg ipps are averaged together. numDisp averaged ipps are then displayed as height versus time. When the end of file is hit, the routine will advance to the next filenumber. If no data is available, the routine will wait until it becomes available. The user can modify things by hitting any key and bringing up an internal menu: Cmd CurVal function a dome antenna ch, dome f 70 move to new fileNum l list all files n next file (or quit if 1 file) q to quit r rewind current file s 0 single step 0,1 (off,on) otherkey continue The commands are: a dome/ch This lets you switch between dome and carriage house display f filenum You can start displaying at the start of a different filenumber. If the new filenumber is illegal then no change is made. l This will list all of the available files starting with fbase. The last file will also contain its size. n move to the next file number. q quit the routine. r rewind and start over in the current file. s 0,1 turn on,off single step mode.When it is on, the routine will pause after every image waiting for the user to enter return. otherKey any other key will cause the display to continue. This allows you to pause the display to look at it for a while.
(See /pkg/rsi/local/libao/phil/ri/rimonimg.pro)
NAME: rispc - input and compute spectra from ri data SYNTAX: istat=rispc(lun,freqRes,spc,dc=dc,pwrof2=pwrof2,hdr=hdr,chan=chan, rawd=rawd,freq=freq) ARGS: lun : unit number for file (already opened) freqRes : float freq resolution Hz we want in the spectra KEYWORDS: pwrOf2 : if set then force the output spectra to be the closest power of 2 hdr : {hdr} pass in a header for this file so we don't have to read the first record to get 1. dc : complex remove this before computing spectra chan : int Which channel to use dec : int decimate input data by this amount. 0=1 is no decimation RETURNS: istat : 1 got spectra 0 hit eof -1 error spc[n] : float spectra rawd[] : {ri} return input records here. freq[n] : float freq array for the spectra DESCRIPTION: Read in ri data and compute the power spectra. The routine will optionally remove dc and smooth/decimate before computing the spectra. The computed power spectra will be returned. The routine can also return a copy of the input raw data (keyword rawd=) and a freq array (freq=) that corresponds to the computed spectra. The routine assumes that the data is taken as complex data. If more that 1 channel was taken, then the chan= keyword can select between chan 1 and chan 2 (chan 1 is the default). By default the routine will read the first record to get the header info. To save time, you can pass in a header for this file using the hdr= keyword. The dec= keyword allows averaging/decimation in time before computing the spectra. The processing is: 1. grab a header from the file if hdr= keyword not used.. 2. compute the spectral length: 1./(freqRes*smpTm*dec) make this the closest power of 2 if pwrof2 is set. 3. compute the number of input recs needed for this data. 4. input the data, smooth and decimate by dec if requested. 5. remove dc if supplied 6. compute the spectra: spc=abs(fft(d))^2 7. rotate the spectra to put dc in the middle: spc=shift(spc,smpSpc/2) Example: openr,lun,file,/get_lun ; compute dc first over the 1st 100 recs istat=riget(lun,d,numrecs=100) dc=total(d.d1) rew,lun ; rewind file ; use the header read in to pass to routine hdr=d[0].h ; decimate by 128, force spectra to be a power of 2 ; return the freq array on the first call ; compute 100 spectra freqRes=1. ; 1 hz resolution toSmo =128L ; decimate by 128.. numSpc = 100 for i=0,numSpc-1 do begin if i eq 0 then begin istat=rispc(lun,freqRes,spc,dec=toSmo,freq=freq,hdr=hdr,dc=dc) spcAr=fltarr(n_elements(spc),numSpc) ; be sure you have mem for this. endif else begin istat=rispc(lun,freqRes,spc,dec=toSmo,hdr=hdr,dc=dc) endelse spcAr[*,i]=spc endfor
(See /pkg/rsi/local/libao/phil/ri/rispc.pro)
NAME: ristripch - stripchart recording of total power SYNTAX: ristripch,lun,maxpnt=maxpnt,v1=v1,v2=v2,mean=mean,$ scan=scan,rec=rec,rdDelay=rdDelay,pltDelay=pltDelay,$ rdStep=rdStep,win=win,nwin=nwin ARGS: lun: int to read power from KEYWORDS: maxpnt: long max number of points to display at once. default: 1000 v1[2] : float min,max value for top plot v2[2] : float min,max value for bottom plot (polA-polB) mean : long if set then remove mean from both plots. scan : long position to scan before starting. The default is the current position rec : long record of scan to position to before starting. default: if scan present then:1 else current rec. rdDelay: float number of seconds to wait between reads if no new data available. pltDelay: float number of seconds to wait after each plot. Use this to slowly scan a file that already exists. rdStep: long max number of points to try and read at a time. Plot will increment by this amount when you read a file. win : long window number to plot in. Default is 0 nwin : long number of window to plot. def:2 . if nwin=1 only plot top window skip 2nd pola - polb window DESCRIPTION: The routine makes a stripchart recording of the total power and power difference polA-polB. It will step through the data file displaying up to MAXPNT pnts on the screen. When this value is reached, the plot will start scolling to the left. When the end of file is hit, the routine will wait rdDelay seconds (default of 1 second) and then try to read any new data in the file. This allows you to monitor data as it is being taken. If you are scrolling through a file offline, use PLTDELAY to slow down the plotting rate (if it is too fast). At the end of the file hit any key and the enter q to quit (see below). The top plot is the 0lag total power. The units are linear in power and the definition is measured/optimum power (for statistics of 3/9level sampling). You can change the vertical scale with the v1[min,max] keyword or from the menu displayed you hit any key. The line colors correspond to the 8 subcorrelators available on the interim correlator. The bottom plot is the power difference PolA-PolB for each correlator board (NOTE: currently this only works if polA,polB are on the same board). The vertical scale can be changed with the v2=v2[min,max] keyword or from the menu displayed when you hit any key. You can stop the plotting by touching any key on the keyboard. A menu will be presented that lets you modify some parameters and then continue. The menu is: command function q to quit r rewind file v1 min max new min,max for top window v2 min max new min,max for bottom window blank line ..continue You can quit, rewind the file and continue, change the vertical scale of the top plot with v1 min max, or change the vertical scale of the bottom plot. Any other inputline will let you continue from where you are (unlike cormonall, you have to enter return for the program to read the inputline. EXAMPLES: 1. monitor the online datataking: lun=coronl() corstripch,lun 2. set fewer points per plot for better resolution. Set the top vertical scale to .8,2. and the bottom plot to -.4,.4. corstripch,lun,maxpnt=600,v1=[.8,2],v2=[-.4,.4] 3. If you want to restart from the begining of the file: hit any character r and it will rewind an continue 4. If you want to monitor a file offline, with no wait between updates, and 500 points plotted: openr,lun,'/share/olcor/corfile.30apr03.x102.1',/get_lun corstripch,lun,maxpnt=500,v1=[.5,3] 5. Do the same thing but wait 1 second between plots and read 200 points at a time: corstripch,lun,maxpnt=500,v1=[.5,3],pltDelay=1,rdstep=200 NOTE: You can change the size of the plot by expanding or contracting the plot window. The plot will rescale itself.
(See /pkg/rsi/local/libao/phil/ri/ristripch.pro)