NAME: 0imdoc - interference mon documentation. These routines will access the hilltop monitor rfi data. It uses a frontend ( antenna, amps, filter bank) as well as an hp spectraum analyzer to record the data. There are 20 bands covering 0 to 10 GHz. The system does a 1 minute peak hold at each band, cycling through all of the bands. Each spectra has 401 points (the bandwidths of the bands are not all the same). The band center frequencies are (in MHz): 70.0000 165.000 235.000 330.000 430.000 550.000 725.000 955.000 1075.00 1325.00 1400.00 2200.00 3600.00 4500.00 5500.00 6500.00 7500.00 8500.00 9500.00 To use these routines: idl @phil @iminit A days worth of data (at all freq) can be input with: iminpday,yymmdd,d IDL> help,d,/st - the data is returned in the structure d ** Structure <18c3dd8>, 6 tags, length=1982636, data length=1982634, refs=1: YYMMDD LONG 180101 NRECS LONG 1203 FRQL FLOAT Array[19] ..this contains a list of all bands in this data set R STRUCT -> IMDREC Array[1203] ..this holds the 1 minute peak hold spectra for the day CREC INT 0 CFRQ FLOAT -1.00000 The spectra are stored in r[] IDL> help,d.r,/st ** Structure IMDREC, 2 tags, length=1648, data length=1648: H STRUCT -> IMHDR Array[1] D FLOAT Array[401] IDL> help,d.r.h,/st ** Structure IMHDR, 11 tags, length=44, data length=44: HDRMARKER BYTE Array[4] HDRLEN LONG 44 RECLEN LONG 846 VERSION BYTE Array[4] DATE LONG 2021060 SECMID LONG 43 CFRDATAMHZ FLOAT 1325.00 CFRANAMHZ FLOAT 1325.00 SPANMHZ FLOAT 250.000 INTEGTIME LONG 60 SRCAZDEG LONG -1 You can select a single freq for the d struct with imgfrq,d,frq,d1freq - where frq is one of the hilltop monitor freq bands - d1frq is the same format at d but only contains the specified freq. To plot 1 spectra Use - implot,d.r[10] or xfrq=immkfrq(d.r[10]) plot,xfrq,d.r[10].d A number of routines do not show up in the documetaton list. the table below is a short summary (until the more complete documentation is written] *DAY----------------------- imgfrq,{imday},frq,{imday} - extract 1 freq subset from {imday} iminpday,yymmdd ,{imday} - input the days worth of data imls - ls current im files online imopen ,yymmdd ,lun - open file, return lun in lun {imdrec}=imavg ,{imday1frq} -return average rec for day. use imgfrq 1st *PLOTTING_----------------- implot ,{imdrec} - plot a an im data structure implloop,{imday} ,delay - loop plotting imd with delay secs between each x[401]=immkfrq ,{imdrec} - return x array holding the freq for the rec immktm ,{imday} ,y - return y array holding the times(hour)for the rec *PLOTTING SEQUENTIAL------- imfreq ,{imday} ,freq - freq to plot or -1 freq any freq imd ,{imday} ,recnum - plot recnumber imc ,{imday} - replot current rec imn ,{imday} - plot next rec of selected freq *MISC---------------------- iminprec,lun,{imdrec} - input the next record from the file imlin ,{imday} - convert data from db to linear scale imdb ,{imday} - convert data from linear to db tsys=imtsys,freq - return tsys for this freq. 0 if not known davg=imavg(imday) - compute average 1 freq, 1 day drms=imrms(imday) - rms by channel 1 freq, 1 day *STRUCTURES---------------- d:{imday} - returned by iminpday d:yymmdd - int d.nrecs - how many records in day d.frql[int] - list of frequencies for this day d.r[imdrec] - array of data records. hdr and data d.crec - current rec for plotting 1..nrecs d.cfrq - current rec for plotting (or -1). d.r.d[12] - data record 12, 401 points r:{imdrec} - one integration in {imday} r.h - {imhdr} header r.d - [float 401] data h:{imhdr} - header routine for each record h.hdrMarker - bytarr(4) h.hdrlen - 0L h.reclen - 0L h.versionj - bytarr(4) h.date - yyyyddd h.secMid - 0L h.cfrDataMhz - float h.cfrAnaMhz - float h.spanMhz - float h.integTime - long, seconds h.srcAzDeg: - 0L
(See /pkg/rsi/local/libao/phil/im/new/0imdoc.pro)
NAME: im1img - input and plot an image of 1 frequency for 1 day. SYNTAX: im1img,yymmdd,freq,img,xrange,yrange,win=win,zx=zx,zy=zy ARGS : INPUTS: yymmdd: long year,month,day to display freq : float frequency band to display OUTPUTS: img[401,n]:float 2-d image displayed. dbm units. xrange[2] :float min,max frequency (for x labeling). yrange[2] :float min,max hour of day (for y labeling). KEYWORDS: win : int window to write to.default is window,1 zx : int zoom in x direction (by pixel replication). default : 2 zy : int zoom in y direction (by pixel replication). default : 4 DESCRIPTION: Input a days worth of rfi monitoring data for a particular frequency band. Create a 2-d image and display it. Return the image and the x,y label values. Also print out the imgdisp line that was used to display the image (copy and paste this line to redo the image). The frequency bands are: 70 ,165 , 235, 330, 430, 550, 725, 955,1075,1325,1400,2200, 3600,4500,5500,6500,7500,8500,9500 The image is scaled to db's. The display routine limits the data range to -1 sigma and +2 sigma about the median. You can recall the display routine with different values. imgdisp,(img>(-61.0))<(-50.9),xrange=xrange,yrange=yrange,zx= 2,zy= 4,win= 1 In the above line the image is clipped below at -61, and clipped from above at -50.9. To get an idea of the range of data values you can: window,0 .. so you don't overwrite the image plot,img .. plot out the whole image. EXAMPLE: .. do the following 3 lines when starting idl. .. the routines are setup to work from an xterm. idl @phil @iminit then you enter: im1img,10423,1325,img,xrange,yrange, .. the routine will display the image and then print the lines: average:-56.9 median:-57.6 rms: 3.35 call: imgdisp,(img>(-61.0))<(-50.9),xrange=xrange,yrange=yrange,zx= 2,zy= 4,win= 1 You can use the cursor left button to grab the 2nd line and re-execute it (this also puts it in idl's history buffer so the up arrow can then re-execute it). xloadct .. to start the color table editor. window,0 plot,img .. to get an idea of the data range imgdisp,(img>(-61.0))<(-55),xrange=xrange,yrange=yrange,zx= 2,zy= 4,win= 1 .. redo the image with a different scaling. cp .. position the cursor and then hit a button to read the freq, and time off of the image.
(See /pkg/rsi/local/libao/phil/im/new/im1img.pro)
NAME: imavg - compute daily average SYNTAX: davg=imavg(d1frq) ARGS: d1frq:{iminpday} single freq data for 1 day (see imgfrq()) RETURNS: davg:{imdrec} Holds the averaged data. KEYWORDS: DESCRIPTION: Average a days worth of data at 1 frequency. The user should call: iminpday,yymmdd,d and then imgfrq,d,freq,d1frq and then pass d1frq to this routine. The data is first converted from db to linear, averaged, and then converted back to db.
(See /pkg/rsi/local/libao/phil/im/new/imavg.pro)
NAME: imbpc - bandpass correct a days worth of data SYNTAX: dbpc=imbpc(d) ARGS: d :{imday} days worth of data already input dbpc:{imday} same data after bandpass correction.
(See /pkg/rsi/local/libao/phil/im/new/imbpc.pro)
NAME: imbpc1 - bandpass correct 1 freq range SYNTAX: imbpc1,d1 ARGS: d1 :{imday} 1 freq range, update in place
(See /pkg/rsi/local/libao/phil/im/new/imbpc.pro)
NAME: imc - replot the current current SYNTAX: imc,d ARGS: d:{iminpday} data input from iminpday. RETURNS: KEYWORDS: DESCRIPTION: Replot the current record. This is part of the sequential plotting package. SEE ALSO: imd,imn,imfreq
(See /pkg/rsi/local/libao/phil/im/new/imc.pro)
NAME: imdb - compute data from line to db format SYNTAX: imdb,d ARGS: d:{iminpday} data input via iminpday. All of the data will be converted from a linear to db scale. The converted data is returned in place. RETURNS: d:{iminpday} data returned in place. DESCRIPTION: Convert the data from linear to db format. It is the users responsibility to keep track of the current data format (linear or db). This routine is normaly used when averaging a days data: (imlin,imavg,imdb).
(See /pkg/rsi/local/libao/phil/im/new/imdb.pro)
NAME: imgfrq - get a single frequency subset of a days data. SYNTAX: imgfrq,d,frq,d1frq ARGS: d:{iminpday} data for entire day from iminpday(). frq:float Center frequency of band to return. The list of frequencies can be found in d.frql RETURNS: d1frq:{iminpday} single freq data for 1 day. DESCRIPTION: Create a subset of a days data that contains only the band centered at frq.
(See /pkg/rsi/local/libao/phil/im/new/imgfrq.pro)
NAME: iminpday - input one days worth of data SYNTAX: iminpday,yymmdd,d[{iminprec}] ,recsfound=recsfound ARGS: yymmdd: long day to input. RETURNS: recsfound: long number of records found d:{imday}: structure holding data DESCRPITION: Read in a complete days worth of the im data. The date is specifed by the argument yymmdd. The d data structure contains: help,d,/st YYMMDD LONG 60309 the date used NRECS LONG 586 the number of records found FRQL FLOAT Array[19] the list of frequencies in use R struct IMDREC[586] array of structures holding the ind records. CREC INT 15 current record we're displaying CFRQ FLOAT -1.00000 current frequency we are displaying The indidividual record formats are: help,d.r,/st H STRUCT -> IMHDR Array[1] .. the header for this record .HDRMARKER BYTE Array[4] the string HDR_ .HDRLEN LONG 44 bytes in this header .RECLEN LONG 846 record length (hdr,data) in bytes) .VERSION BYTE Array[4] version strin .DATE LONG 2006068 date yyyyddd year, daynumber .SECMID LONG 60 seconds from midnite for this record .CFRDATAMHZ FLOAT 165.000 center freq data Mhz .CFRANAMHZ FLOAT 165.000 center freq specAnalyzer Mhz (dif if mixed). .SPANMHZ FLOAT 70.0000 span of spectrum analyzer in Mhz .INTEGTIME LONG 60 peak hold time for this record in secs .SRCAZDEG LONG -1 not implemented D FLOAT Array[401] .. the 401 freq points for this rec (in dbm)
(See /pkg/rsi/local/libao/phil/im/new/iminpday.pro)
NAME: iminpdaymulti - input 1 freq band, multiple days SYNTAX:n=iminpdaymulti(yymmdd1,freq,dret,yymmdd2=yymmdd2,ndays=ndays,verb=verb) ARGS: yymmdd1: long first day to input freq : float freq band to input: The frequecies are: 70 ,165 , 235, 330, 430,$ 550, 725, 955,1075,1325,1400, 2200,3600,4500,5500,6500,7500,8500,9500. KEYWORDS: yymmdd2: long last day to input. def=1 day ndays : long number of days to input (overrides yymmdd2) maxrec : long max number of recs we return default = 150*ndays verb : if set then output each 100 days we process RETURNS n : long number of records found dret : {} struct holding the data DESCRIPTION: Input multiple days of a single frequency band from the hilltop monitoring data. The data is returned in the standard hilltop monitoring struct: DL> help,dret,/st ** Structure length=2325420, data length=2325418, refs=1: YYMMDD LONG 140701 .. this is the start date NRECS LONG 1411 FRQL FLOAT Array[1] R STRUCT -> IMDREC Array[1411] CREC INT 0 CFRQ FLOAT -1.00000 The only difference is that the struct will only contain a single freq band.
(See /pkg/rsi/local/libao/phil/im/new/iminpdaymulti.pro)
NAME: iminprec - input 1 record from the data file SYNTAX: iminprec,lun,r ARGS: lun: int logical unit not for file we are reading RETURNS: r:{imdrec} record of data input DESCRIPTION: Read in the next record from the data file. This routine is normally called from the routine iminpday. The returned record contains r.h the record header r.d the frequency data See iminpday for a descrption of the header/data.
(See /pkg/rsi/local/libao/phil/im/new/iminprec.pro)
NAME: imlin - compute data from db to linear format SYNTAX: imlin,d ARGS: d:{iminpday} data input via iminpday. All of the data will be converted from a db to a linear scale. The converted data is returned in place. RETURNS: d:{iminpday} data returned in place. DESCRIPTION: Convert the data from db to linear format. It is the users responsibility to keep track of the current data format (linear or db). This routine is normaly used when averaging a days data: (imlin,imavg,imdb).
(See /pkg/rsi/local/libao/phil/im/new/imlin.pro)
NAME: immkfrq - make the frequency array for a set of data. SYNTAX: frq=immkfrq(d1frq) ARGS: d1frq:{imdrec} a single data record. RETURNS: frq[401]:float the frequency array that corresponds to the 401 data points in the record. DESCRIPTION: Compute the frequency array for a single data record. There are 401 data points in each data record. The routine uses the band center frequency, bandwidth, and number of points to compute the array.
(See /pkg/rsi/local/libao/phil/im/new/immkfrq.pro)
NAME: immktm - make the time array array for a days worth of data. SYNTAX: hr=immktm(d) ARGS: d:{iminpday} days worth of data input using iminpday. RETURNS: hr[n]:float hour of day for each record in d. DESCRIPTION: Compute the time array for a days worth of data. The data is returned in hours from midnite (ast).
(See /pkg/rsi/local/libao/phil/im/new/immktm.pro)
NAME: immosimg1frq - image mosaic of multiple days, 1 freq. SYNTAX: immosimg1frq,year,mon,day1,dohardcopy,freq=freq,nplts=nplts,$ bpc=bpc,win=win,_extra=e ARGS : INPUTS: year : long year to start with (4 digits) mon : long month to start with (1 to 12) day1 : long day of month to start with dohardcopy: int if hardcopy is not equal to 0, write to the file idl.ps and then spool to printer via lpr. The default is to write to the screen. KEYWORDS: freq : float The rfi monitoring band center frequency to use for the images. The frequecies are: 70 ,165 , 235, 330, 430,$ 550, 725, 955,1075,1325,1400,2200,3600,4500,5500,6500,$ 7500,8500,9500. The default is the 1400 mhz band. nplts : int the number of days to put in the mosaic. bpc : if set then do a bandpass correction before creating the mosaic (min value in channel over day). win : int window to write to.default is window,1 Extra keywords that are passed to immosimgscl: stretch[2]: float scale stretch[0],stretch[1] to 0 to 255 before plotting. nohisteq : if set then don't do histogram equalization on each freq img. linear : if set then convert db to linear before scaling and histogram equalizing the image. DESCRIPTION: immosimg1frq will make a mosaic of spectral density images for a single frequency band on consecutive days starting at the day specified by year,mon,day. The keyword freq= selects the freq band to use. There will be nplts days in the mosaic. All of the images will be placed on a single page. Each image in the mosaic will be spectral density with axes freq vs hour. The image is made from db units (the linear keyword can change this). By default each image is histogram normalized to cover the dynamic range of the data. EXAMPLE: .. do the following 3 lines when starting idl. idl @phil @iminit make a mosaic of 6 days starting 01aug03 for the 1325 band. immosimg1frq,2003,8,1,0,freq=1325,nplts=6 The routine uses the current value of the lookup table for display. You can adjust the lookup table with xloadct after running the routine. For hardcopy you should run the routine to the screen, adjust the lookup table, and then rerun the routine with hardcopy set to 1. hardcopy=0 immosimg1frq,2003,8,1,hardcopy,freq=1325,nplts=6 xloadct .. then play with sliders hardcopy=1 immosimg1frq,2003,8,1,hardcopy,freq=1325,nplts=6 SEE ALSO: IM1IMG - mosaic 1 day 1 freq.
(See /pkg/rsi/local/libao/phil/im/new/immosimg1frq.pro)
NAME: immultiday - make multi day plots (spc or imgs) of hilltop data at 1 freq. SYNTAX: stat=immultiday(yymmdd,freq,outfile,daysPerPage=daysPerPage,$ ndays=ndays,spc=spc,singleCol=singleCol) ARGS: yymmdd: long date to start on freq : long freq of intm mon to use outfile: string filename for output. You don't need to supply the .pdf suffix. a temp file outfile.ps will be created and deleted during the processing. KEYWORDS: daysPerPage: int number of days per page. def=8 ndays : int number of days to plot. def=daysPerPage spc : int if set then output average spectra. def=dynamic spectra def="img" singleCol : if set then force 1 column output RETURNS: stat: 1 ok, 0 we had trouble
(See /pkg/rsi/local/libao/phil/im/new/immultiday.pro)
NAME: imrms - compute rms for 1 frequency for a given day. SYNTAX: drms=imrms(d1) ARGS: d1frq[] : {imday} where you've extracted just 1 freq via imfrq() and passed it thru imlin so it is a linear scale. drms: {imdrec} return rms here DESCRIPTION: compute rms/Mean by channel for a single frequency. d1 should contain a single frequency and be linear. You can do this via: iminpday,yymmdd,d imlin,d imgfrq,d,d.frql[i],d1 drms=imrms(d1) You could then loop on i
(See /pkg/rsi/local/libao/phil/im/new/imrms.pro)