An IDL "Cheat Sheet"
by Chris Salter
On-Line Monitoring:
On the "observer" workstation:
1. To monitor individual spectra (e.g. 1-sec dumps)
observer% gousr
observer% cd a1763,
If your project number is a1763
observer% idl
To monitor each 1-sec record, get a channel-by-channel rms of records
in each
scan, to get a record # v frequency image and finally, for Standard ON/OFF
data,
a display of (ON-OFF/OFF), type;
IDL> cormonall,1
To get out of monitoring loop:
IDL> ctrl-c
IDL> retall
To get back in monitoring loop:
IDL> cormonall,1
If you would like the data to be Hanning smoothed
before display,
use;
IDL> cormonall,1,/han
If you just wish to see the data displayed
record-by-record, use;
IDL>
cormon,1
or,
IDL> cormon,1,/han
2. To display a strip-chart recording of the total power by 1-sec
records:
observer% idl
IDL> @phil
IDL> @corinit
IDL> lun=coronl()
IDL> corstripch,lun,maxpnt=500,v1=[.8,2]
maxpnt is the number of 1-sec records displayed before the
record rolls off the display edge.
v1 defines the minimum and maximum values to display for the
y-axis.
To get out of this loop:
IDL> ctrl-c
IDL> retall
To restart with a different vertical scale:
IDL> rew,lun
IDL> corstripch,lun,maxpnt=500,v1=[.7,1.5]
(However, this is better achieved without leaving the program.
Try hitting a return, and then changing the v1 parameters.)
If on "observer" you would like to start corstripch
from
the UNIX command line, obtaining the display in the
screen
to your upper right, obtain details on what to
enter by typing;
observer% corstripch -h
and proceed as described there.
Reducing Data in IDL for the Interim Correlator
To start IDL, and make Phil's analysis
routines available;
observer% idl
IDL>@phil
IDL>@corinit
1. To open files and list scans within them
IDL> openr,lun,'/share/olcor/corfile',/get_lun
The above file location applies to data while it is being
acquired.
To open corfile for access after you "move"
your data at the end of a run,
corfile will have the format, corfile.ddmmmyy.axxxx.n
dd is the day number, mmm is the first three letters of the month,
and yy is the last two digits of the year
axxxx is your project code and n is the file sequence.
If your data is not in /share/olcor, then try
/proj/axxxx, e.g. /proj/a1763
IDL> corlist,lun
To list all scans in corfile
If you have finished working with a particular file, and wish to
proceed to work with another, then it is good practice to release the
previous "lun", as only a relatively small number can be opened before
being told you cannot open any more! Do this as follows;
IDL> free_lun, lun
2. To reduce standard ON-OFF data
IDL> io=corposonoff(lun,b,scan=scan#,/han,/scljy)
(ON-OFF/OFF) scaled into Jy, Hanning smoothed.
Resulting spectrum placed in b.
IDL> io=corposonoff(lun,b,scan=scan#,/han,/sclcal)
(ON-OFF/OFF) scaled into K, Hanning smoothed.
Resulting spectrum placed in structure b.
3. Plotting data
IDL> corplot,b Plot the result against frequency
IDL> corplot,b,/vel Plot the result against velocity
IDL> corplot,b,/chn Plot the result against channel
IDL> corplot,b,m=2 Plot second sbc v freq: m=1 is 1st sbc
m=2 is 2nd sbc, m=4 is 3rd sbc,
m=8 is 4th sbc.
You will often want to restrict the range displayed for the x-
and/or y-axis,
You can do this via;
IDL> hor, x_low,
x_high to
restrict the x-axis display between x_low and x_high
and/or
IDL> ver, y_low,
y_high to
restrict the y-axis display between y_low and y_high
To return the axes to plotting the full ranges of x and y values, use;
IDL> hor
and/or
IDL> ver
4. Reducing single scans (e.g. ON only)
IDL> istat=corinpscan(lun,b,scan=scan#,/han,/sum)
Reduce single scan, records summed, Hanning
smoothed, uncalibrated.
Resulting spectrum placed in structure b.
5. Mathematical operations
IDL> c=cormath(a,b,/sum)
IDL> c=cormath(a,b,/sub)
IDL> c=cormath(a,b,/mult)
IDL> c=cormath(a,b,/div)
Operate on structures a & b, producing c
IDL> bout=cormath(b1,sadd=1.34)
IDL> bout=cormath(b1,ssub=1.34)
IDL> bout=cormath(b1,smul=1.34)
IDL> bout=cormath(b1,sdiv=1.34)
Add, subtract, multiply or divide the data by 1.34
(i.e. a scalar).
6. Accumulating more than a single scan
IDL> coraccum,inp_struct,out_struct,/new
Accumulate structures. Use /new only first time
IDL> corplot,out_struct
First normalise by dividing by b.b1.accum
7. Averaging orthogonal polarizations
IDL> bpol=coravg(b,/pol)
Average the 2 polns of structure b, placing result
in structure, bpol
8. Smoothing spectra
IDL> corsmo, b_in,b_out,smo=n
To boxcar smooth your data by n channels
9. Reading values off of a plot
To use a cursor, and return the values beneath this;
IDL> cursor, x, y, /down
IDL> print, x, y
Plot the spectrum you wish to deal with on its own
before using the cursors.
10. Making a PostScript plot
To output a plot to a postscript file. First refine a set of IDL
instructions that will produce the plot you would like as a .ps file.
Then;
IDL> set_plot,'ps'
IDL> device,filename='name.ps', ysize=12
IDL> {set of instructions to make desired plot}
IDL> device, /close
IDL> set_plot,'x'
11. To save and restore from your current IDL session
To save your current working session -- including all IDL data
structures - type;
IDL> save,file='3c258b.sav'
To restore this to resume your IDL session;
IDL> restore,file='3c258b.sav'
To save a number of variables, including IDL data structures - type;
IDL> save, var1, var2, var3, .... varn, file='saveset.sav'
12. Fitting baselines
For baseline fitting, the most straightforward way is as follows;
IDL> is=corbl(b_in,b_out,/sub)
The program will ask for input from you, and here is an example of
the
most basic input parameters;
b 2 to work on the second spectrum in the structure "b_in"
m to set a mask within which to make the fit.
Mark region
to
fit using the "left button" on the mouse,
and
signal completion of mask setting using the "right
button".
f 5 will fit a 5th order polynomial, and (via "/sub")
subtract
this from the input scan.
q to exit, placing the "fit subtracted" scan in "b_out".
If you feel the polynomial fitting in not doing a good job, try an
alternative fitting procedure via;
IDL>is=corbl(b_in,b_out,/sub,/svd)
If you wish to "roll your own", baseline fitting can be achieved via
the routine bluser, see Phil's documentation for details. As a
simple
example as to how this might be used;
1) One needs to first of all copy out the data from the structure of
interest into a 1-d array;
IDL>y=bpol.b1.d[*]
2) Then create an array of the same no. of elements as the data;
IDL>x=findgen(N)
Where N is the number of pixels in the array, y.
3) Then to set a mask, fit a polynomial, etc.;
IDL>is=bluser(x,y,coeff,mask,yfit)
4) This will allow you to fit a maskover which to fit the data using
instruction 'm'. Use left button of your mouse to set the mask, and
the right button to "sign off" from mask setting.
5) Fit an nth order polynomial by the 'f n' instruction.
6) There are also commands for setting the display range, looking at
the fitted polynomial, etc.
7) Then correct and copy the corrected data back into the structure
with something like,
IDL> newy=y-yfit
IDL> bpol.b1.d[*]=newy[*]
Working with WAPP data in a single data file
% idl
IDL> @phil
IDL> @wasinit2
IDL> file='file_spec'
(At present, and provisionally, on-line data file are written into;
e.g. /share/pserverf.sdb1/wappdata, which the cima dialog will
report as /export/sdb1/wappdata, where the "sdb1" can
change, e.g. could be sda2, sda3, etc.
These on-line files are later moved to, e.g.,
/proj/aNNNN/wapp.yyyymmdd.aNNNN.000n.fits)
IDL> is=wasopen(file,desc)
(You will need to rerun this after each new source for the on-line
case.)
IDL> waslist, desc
(To list the scans in the file)
Then use corxxxx procedures, as in;
IDL> is=corposonoff(desc, b, scan=.........,/han,/scljy)