|
Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://www.naic.edu/~phil/psrfdoc.html
Дата изменения: Wed Feb 3 00:47:18 2016 Дата индексирования: Sat Apr 9 23:35:21 2016 Кодировка: |
NAME:
apsrfexample - Using ao psrfit idl routines.
The pdev/mock spectrometers can generate psrfits fits files. The
psrfxxxx idl routines let you input and look at the data in idl.
USING the routines.
0. If not at AO, install phil's idl routines at your site
http://www.naic.edu/~phil/download/download.html
--> idlroutines to analyz ao data.
1. start idl
- at ao idl or idl70
@phil .. to include path to phil's routine in the search path
@psrfinit .. include the psrf and mas routines.
2. Open a single file and look at it:
filename='dir/x107.20090607.b0531+21.b0s1g0.03500.fits'
istat=psrfopen(filename,desc,fnmI=fnmi)
; look at contents of descriptor structure:
help, desc,/st
** Structure , 14 tags, length=3129776, data length=3129721, refs=1:
LUN LONG 101
FILENAME STRING '/share/pdata1/pdev/x107.20090607.b0531+21.b0s'...
NEEDSWAP BYTE 1
BYTESROW LONG 1052268
TOTROWS LONG 60
CURROW LONG 32
BYTEOFFREC1 LONG 28800
BYTEOFFNAXIS2 LONG 20400
HPRI STRUCT -> Array[1] .. primary fits header
HAOGEN STRUCT -> Array[1] .. ao generic header
HPDEV STRUCT -> Array[1] .. pdev header
HSUBINT STRUCT -> Array[1] .. subint header
ROWSTR STRUCT -> Array[1]
ROWSTRF STRUCT -> Array[1]
3. input 1 row of file:
istat=psrfget(desc,b)
; look at contents of b
help,b,/st
IDL> help,b,/st
TSUBINT DOUBLE 1.0000000
OFFS_SUB DOUBLE 0.50000000
LST_SUB DOUBLE 18175.386
RA_SUB DOUBLE 83.632679
DEC_SUB DOUBLE 22.014512
GLON_SUB DOUBLE 184.55724
GLAT_SUB DOUBLE -5.7846698
FD_ANG FLOAT 0.00000
POS_ANG FLOAT 0.00000
PAR_ANG FLOAT -65.5061
TEL_AZ FLOAT 242.726
TEL_ZEN FLOAT 8.38640
DAT_FREQ FLOAT Array[512]
DAT_WTS FLOAT Array[512]
DAT_OFFS FLOAT Array[512]
DAT_SCL FLOAT Array[512]
DATA INT Array[512, 1000]
STAT STRUCT -> PDEV_HDRDUMP Array[1000]
; Notes:
; - each row has multiple spectra (in this case 1000).
; - the freq is stored in data_freq (these are the centers of each bin)
; - stat structure has info on each spectra. In particular the number of
; integrations that went into the accummulated spectra (stat.fftaccum)
;
; 4. plot 1 spectra
plot,b.dat_freq,b.data[*,0]
5. monitor set of files with dynamic spectra
- Use psrfmonimg()
.. the routine can automatically cycle through a set of files for one project
in 1 day..
- specifying where the files are at..
.. At AO the data files are stored by default in
/share/pdataN/pdev where N is 1..7 for beams 0..6
The routine can find these files by default, all you specify is the
date and projid.
.. If files are somewhere else (or another institution) then:
- files for different beams need the following directory structure:
/xx/yyyN/ where N is beamnumber +1
- then use the dirI[2] keyword
dirI[0] is the prefix, dirI[1] is the suffix of the directory
path with N 1..7 stuck in between:
suppose data in /data/ao/psrf/beam[1..7]
dirI[0]='/data/ao/psrf/beam'
dirI[1]='/'
This will generate searches in /data/ao/psrf/beam[1-7]/ for the datafiles
- calling the routine:
date=20090607
projid='x107'
; If at ao
psrfmonimg,projid=projid,date=date
; If not at ao..
dirI[0]='/data/ao/psrf/beam'
dirI[1]='/'
psrfmonimg,projid=projid,date=date,dirI=dirI
- In the routine.
- hitting a key brings up a menu to choose from
- It starts with the last file of a day.
Using the l keyword in the menu list the files for this beam
Using the fnum keyword moves to another file for the day
Using the date keyword changes date
Using the band keyword switches between the 2 bands
Using the beam keword swithces between the 2 beams.
- Misc notes.
- by default the routine maps the number of spectra in a row to the image using
congrid which resamples the data set (interpolation, not averaging).
- You can stretch the image (by grabbing an edge) to get more pixels in the image
- Using the zx=-n,zy=-m keyword on the call ti psrfmonimg() will shrink the image by
factors m,n using averaging so you get an increased signal to noise.
- check out some of the other keyword calls and menu items in psrfmonimg()
6. Closing a file
psrfclose,desc,/all
.. using the /all keyword closes all open files
(See /pkg/rsi/local/libao/phil/psrfits/apsrfexample.pro)
NAME:
psrfavgfile - avg spectra in a file
SYNTAX: n=psrfavgfile(fname,bavg,brms=brms,desc=desc,fnmI=fnmI,$
maxrows=maxrows,minrows=minrows)
ARGS:
fname: string name of file
KEYWORDS:
maxrows: long max number of rows to input
minrows: long if file has less then minrows, then donot process it
(use to skip cals)
fnmI: {} structure from masfilelist for file to use
In this case ignore fname
RETURNS:
bavg: struct standard struct from psrfget() with data replaced by the averaged data.
the other elements come from the first record of the file
brms: struct if present then return rms for the file.
this is computed on the avg of each row.
The rms is normalized by the number of rows (it is not divided
by the avgspectra).
desc : struct from psrfopen(). This contains the various headers.
the will have been aleady closed.
n: >=0 number of spectra avged
< 0 error
DESCRIPTION:
average the spectra in a file. Return the averaged spectra in b.
It will be the standard structure returned from psrfget on the first reccord except
that the .data element will contain the averaged data.
Note: currenly blanking is ignored..
- the rms on u,v is a factor of 2 low.. this is from the mock
scaling of the u,v differently then pola,B
(See /pkg/rsi/local/libao/phil/psrfits/psrfavgfile.pro)
NAME:
psrfclose - close a psrfits file for i/o
SYNTAX: psrfclose,desc,all=all
ARGS:
desc: {psrfdescr} - descriptor to close (returned by psrfopen)
KEYWORDS:
all: if set then close all open descriptors.
DESCRIPTION:
Files opened with psrfopen() need to be closed with psrfclose() so that
the resources are freed up.
EXAMPLE:
filename='/share/pdata/pdev/phil/071106//testfits.20071107.b0s0.00000.fits'
istat=psrfopen(filename,desc)
.. process the data in the file
psrfclose,desc .. this closes the file when done with the processing.
(See /pkg/rsi/local/libao/phil/psrfits/psrfclose.pro)
NAME:
psrffilesum - get summary info for psrfits files
SYNTAX: nsum=psrffilesum(flist,sumI,desc=desc,fnmI=fnmI,list=list)
ARGS:
flist[n]:strarr filenames for summary. Includes directory.
KEYWORDS:
desc :{} descriptor returned from psrfopen. If supplied then ignore flist
and use desc as the file to look at.
fnmI[n]:{} structure returned by masfilelist. If this keyword is
present then ignore flist and use fnmI for the files
to use.
list : if set then output oneline summary to stdout of file
RETURNS:
nsum: long number of summaries we return. Don't count files that had trouble being read
sumI[n]: {} summary info for mas files.
DESCRIPTION:
Return summary info for a list of files. You can specify the files with
the argument flist or the keyword fnmI.
The returned summary info contiains:
help,sumI,/st
OK INT 1
FILENAME STRING '/share/pdata1/pdev/a2675.20120311.J0651+28.b0s1g0.00000.fits'
NEEDSWAP BYTE 1
BYTESROW LONG 4136556
TOTROWS LONG 85
CURROW LONG 0
BYTEOFFREC1 LONG 28800
BYTEOFFNAXIS2 LONG 20400
HPRI STRUCT psrfits primary header
HAOGEN STRUCT ao generic header
HPDEV STRUCT pdev header
HSUBINT STRUCT psrfits subint header
hrow struct header from first row
excludes the array info (freq,wts,off,scl,data,stat)
EXAMPLE:
1. get 1 file
fname='/share/pdata1/pdev/a2675.20120311.B0611+22.b0s1g0.00000.fits'
nsum=psrffilesum(fname,sumI)
2. Get all the a2675 files under /share/pdata1 (online files) for 11mar2012
list a 1 line summary of each file as they are read
n=masfilelist(junk,fnmI,projid="a2675",yymmdd=20120311,/appbm,/psrfits)
nsum=psrffilesum(junk,sumI,fnmI=fnmI,/list)
NOTE:
nsum will always equal the number of elements in flist or fnmI. You need
to check sumI.ok eq 1 to see if the data is ok. This lets you keep track
of bad files (say with 0 rows).
(See /pkg/rsi/local/libao/phil/psrfits/psrffilesum.pro)
NAME:
psrfget - input next psrfits row from disc
SYNTAX: istat=psrfget(des,b,row=row,hdronly=hdronly,blankcor=blankcor,avg=avg,$
tp=tp)
ARGS:
desc:{descpsrf} from psrfopen();
RETURNS:
b: structure holding the hdr and data input
tp[ndump,npol]: float if tp provided (and averge set) then also
return the total power for each time sample
istat: 1 ok
: 0 hiteof
:-1 i/o error..bad hdr, etc..
KEYWORDS:
row : if set then position to row before reading (count from 1)
if row=0 then ignore row keyword
hdronly : if set then just return the row header. no status or data.
blankcor : if set then correct for any blanking.. the forces the
returned dataset to be floats
avg : if set then average the spectra in 1 row before returning.
This forces the returned datatype to be float.
this will automatically do the blankcor (since it normalizes
the sum to the total number of ffts accumulated * the
integration period std value.
DESCRIPTION:
Read the next row from a psrf fits datafile pointed to by desc.
If keyword row is present, position to row before reading.
(See /pkg/rsi/local/libao/phil/psrfits/psrfget.pro)
NAME:
psrfimgdisp - display a set of psrfits records as an image
SYNTAX: img=psrfimgdisp(desc,b,nsigclip=nsigclip,clip=clip,pollist=pollist,col=col,$
toavg=toavg,median=median,bpc=bpc,ravg=ravg,nobpc=nobpc,$
win=win,wxlen=wxlen,wylen=wylen,wxpos=wxpos,wypos=wypos,$
samewin=samewin,zx=zx,zy=zy,$
rddesc=rddesc,maxrecs=maxrecs,mytitle=mytitle,$
hlind=hlind,hlval=hlval,hldash=hldash,hlvlines=hlvlines,$
useind=useind,ln=ln,chn=chn,cs=cs)
ARGS:
desc : {} from psrfopen open
b[nrecs]: {corget} correlator data to make image of
RETURNS:
img[nchns,nrecs]: float image of last sbc displayed (before clipping).
KEYWORDS:
nsigClip:float if suppled then clip data to [-sig,sig]*nsigClip
This is done after any averaging for -zx,-zy.
If this is supplied, then clip= is ignored.
clip[]: float value to clip the normalized data to. Default is
.02 (of Tsys). If clip has 1 value then
normalize to (img > (-clip)) < clip. If two value are
provided, then they will the [min,max].
pollist: long A single number whose decimal digits specify the pols
to display. eg 1,12,1234 .. pols,3,4 are stokes u,v
The default is pola,polb.
win: int window number to plot in. default is 1.
wxlen: int xlen of window. default 700
wylen: int ylen of window. default 870
wxpos: int xpos of lower left edge of window.default 445
wypos: int ypos of lower left edge of window.default:35
samewin: if set then use the current dimension for the image win.
If you are calling psrfimgdisp in a loop then setting this
(after the first call) lets the user dynamically adjust the
window size,position.
zx: int ..-3,-2,2,3,4 zoom factor x dimension. Negative numbers
shrink the image positive numbers expand. Negative number
must divide evenly into the number of channels.
zy: int ..-3,-2,2,3,4 zoom factor y dimension (same format as zx)
rddesc: if true then read data using descrtipor. returns
data read in in b.
col[2]: int .. x columns to use to flatten the image in the time
direction. count 0..numberoflags-1. If multiple sbc
plotted then the same cols are used for all sbc. The
default is no flattening in the time direction.
chn: if set then plot vs channel number rather than freq
bpc:{masget} if supplied then this data will be used to do the
bandpass correction. The default is to average over
all of the nrecs.
nobpc: if set then no bandpass correction is done.
median: if set and bpc not provided, then bandpass correct using
the median of the nrecs rather than the average.
ravg: long bandpass correct with a running average of ravg spectra
for polB). You can change this with the numspc keyword
numspc: int number of spectra to display from b (or to read from the
file. The default if b is provided is the entire array.
If reading from the file then we will use about 600 spc.
This will be the count prior to any averaging (see toavg)
toavg: long average this many spectra together before making image.
(zy will to the averaged array).
mytitle:string user supplied tittle instead of scan,srcname,az,za
az,za at top of the plot.
hlind[]: ind index into img array (2nd dimension) to draw
horizontal lines.
hlval : float value to use for horizontal lines (in img units)
default is clip value.
hldash : int The dash lengths to used for the horizontal lines.
2*ldash must divide into x dimension.default is 4
hlvlines:int Number of engths to used for the horizontal lines.
default=1
useind[2]:int if provided then use these indices from data array
0 .. lengthsbc -1
default=1
ln :int linenumber for title..0..33 def:3
extra_=e this allows you to input keywords that will be
passed to the plotting routine. eg title=title..
DESCRIPTION:
psrfimgdisp will display a set of psrf spectra as an image.
By default it will make a separate image for each polA and polB.
The polList keyword lets you specify polA or polB (and someday maybe
stokes U,V.
You can input the data outside of this routine (eg with psrfget) by
setting the keyword rddesc=1 (by default the user passes the data in
in b.
By default, the image is bandpass normalized by the average of all the
records (sbc/avg(pol) - 1). If the median keyword is used then
avg(sbc) is replaced by median(pol). The bpc keyword allows you to input
a separate mas record to use as the normalization.
The col keyword lets you also flatten the image in the time
dimension by specifying the first/last columns to average and then divide
into all of the other columns (the columns are counted from 0). By default
this is not done.
After bandpass correction and flattening in the time dimension, the
image is clipped (by default) to +/- .02 (tsys) and then scaled
from 0 to 256 for the image display. The clip keyword lets you change the
clipping value.
The zx,zy keywords let you scale the image in the x and y dimensions by
integral amounts. Negative numbers will shrink it by that amount (Note:
the negative numbers must divide evenly into the number of channels in
each sbc). -1,0,1 do no scaling. This scaling is only applied for the single
pol displays. The multiple pol displays are always scaled to fit
inside the window (700 by 870 pixels).
The desc and numspc keywords can be used to input the data directly from
a file. In this case the desc comes from the psrfopen() routine and numspc
is the number of spectra to put in the image.
After displaying the image, use xloadct to manipulate the color table.
The routine returns the last image displayed (before clipping).
EXAMPLES:
input data and make an image
istat=masgetm(desc,30,b,/han0 .. input 30 rows with hanning smoothing
.. assume there are 10 spec/row
1. display the image of pola and polB
img=psrfimgdisp(b)
2. display only polB, scale y by 2, and x by -2
img=psrfimgdisp(b,pol=0,zx=-2,zy=2)
3. display pola,polB, clip to .015 Tsys , median filter the
bandpass correction:
img=psrfimgdisp(b,/median,clip=[.015])
This routine calls imgflat, and imgdisp for the image scaling and display.
NOTE:
SEE ALSO:
imgdisp,imgflat
(See /pkg/rsi/local/libao/phil/psrfits/psrfimgdisp.pro)
NAME:
psrfmonimg - monitor psrfits files via dynamic spectra.
SYNTAX: psrfmonimg,bsg=bsg,num=num,projid=projid,date=date,dirI=dirI,$
nspc=nspc,pollist=pollist,desc=desc,zx=zx,zy=zy,$
blankcor=blankcor,pixwin=pixwin
ARGS: none
KEYWORDS:
bsg: string beam,band,group to monitor. Format is bBsSgG where:
B =0..6 is the beam
S =0..1 is the band (0=1450 band, 1=1300 band)
G =0..1 is the group.
default:'b0s0g0'
num: int the file number to start with. (The default is the most recent)
projid: string project id (first part of filename) to monitor. The default
is the most recent one written.
date : long The date (in the filename) to start monitoring. The
default is the most current (and still matches the other
criteria.) The format is yyyymmdd.
dirI : strarr(2): directory info. If the files are in a non standard place
then pass in location in dirI
dirI[0]=prefix for dir: /share/pdata
Num 1..n goes here
dirI[1]=postfix for dir: /pdev
IMAGE:
nspc: int the number of spectra for each image. The default is
500 (or the max number in the file). It will try and
round the number to a multiple of spectra per row.
pollist: int pols for image. 1,2,12, -1 --> all pols available
if stokes, it does not plot u,v
zx : int if single pol then zoom (=n) or contract (-n) x axis by this
amount.
zy : int if single pol then zoom (=n) or contract (-n) y axis by this
amount.
blankcor: if set then correct for adc blanking.
pixwin : if set then use a pixwin to switch between images (
stops the flashing.
RETURNS:
desc : {} You can return from masmon with the current file still
open (using the x command from the menu). The file descriptor
will be returned here (this is actually a structure used by the
masxx routines). It is then your responsibility to close the
file via masclose,desc or masclose,/all.
-----------------------------------------------------------------------------
DESCRIPTION:
Monitor online and offline psrfitst files by making a dynamic spectra of
the data. The files to monitor can be selected by:
1. if no arguments are supplied, use the most recent files from
beam0,band0,group0.
2. Specify the projid,date using the startup keywords.
3. Use the menu inside masmon to select a different set of files to monitor.
- Enter the menu once masmon is started by hitting any key.
-----------------------------------------------------------------------------
EXAMPLES:
psrfmonimg - start monitoring most recent file for b0s0g0
psrfmonimg,bsg=b0s1g0 .. start with beam0, band1 , group0
psrfmonimg,projid='a2130' .. use a2130 files
psrfmonimg,pollist=1 .. images of only polA
-----------------------------------------------------------------------------
USING THE INTERNAL MENU:
Enter the internal memory by hitting any key.
The menu is:
Cmd CurVal function
--> IMAGES:
p 12 pols for images (1,2,12)
h low high set horizontal range for images (freq low,hihg), blank --> all
nspc 500 number of spectra per image. blank--> auto
c .02 clip value for data
delay secs secs to delay between images..
--> FILE POSITIONING:
bsg b0s0g0 beam,band,grp to use (change all at once)
bm 0 beam to plot
band 0 band to display (0 = 1450, 1=1300)
d 20081011 date to use. First number of data displayed
num 00801 number.. file number to display
r 1 position to row. maxRows: 99
l (all) list files this date (all --> all dates)
--> MISC:
hdr display last header read
s 0 step mode. 1-on,0-off
z stop in procedure (for debugging)
q to quit
x quit leaving the current file open. return description in desc keyword
otherKeys continue plotting
Enter the cmd and a possible value. The program will then continue.
The menu options are:
p 12 .. pols for image. By default both pols are used (but in stokes mode
u,v are note used.
.. The pols are numbered: 1-polA,2-polB. Any combination
.. of the pols can be displayed (entered as a one number eg 12..)
Example:
p 12 .. use pols a and polB.
h .. change the frequency range of the image. Units are Mhz. The default
is the entire frequency range.
Example:
h 1400 1450 display frequencies 1400 thru 1450 (if they are in the band)
delay .. secs to delay between plots. Use if the plotting is going
too fast.
Example:
delay .1 Delay .1 seconds between plots
bsg b0s0g0 .. Select the beam,band,group to display.
.. By default beam0,band0,grp0 is displayed.
Example:
bsg b0s1g0 .. will display the band centered at 1300 Mhz.
d 20080826 .. Move to first file on this date using the current
project id.
n 100 .. Move to this filenumber for the current date and project id.
If the number does not exist, you remain on the current file.
l (all) .. list files for this projid, data. If all is included then
list files for this projid for all dates.
r 1 .. position to a row in the current file (count from 1)
hdr .. print last header read
s 0/1 .. step mode will stop and display the menu after each spectra is
plotted. s 1 turns on step mode. s 0 turns it off.
z .. stop in masmon routine (for debugging)
q .. exit masmon.
(See /pkg/rsi/local/libao/phil/psrfits/psrfmonimg.pro)
NAME:
psrfopen - open psrfits file for reading
SYNTAX: istat=psrfopen(filename,desc,fnmI=fnmI)
ARGS:
filename: string filename to open (unless fnmI is specified)
KEYWORDS:
fnmI : {] returned from psrffilelist. if provided,
then ignore filename and use this as the
file to open.
RETURNS:
istat: 0 ok
-1 could not open file.
desc : {} file descriptor to pass to the i/o routines.
DESCRIPTION:
open an ao psrfits file.
(See /pkg/rsi/local/libao/phil/psrfits/psrfopen.pro)
NAME:
psrftpfile - compute total power for file
SYNTAX: n=psrftpfile(fname,tp,fnmI=fnmI,hdr=hdr,maxrows=maxrows,blankcor=blankcor)
ARGS:
fname: string name of file
fname: string name of file
KEYWORDS:
maxrows: long max number of rows to input
fnmI: {} structure from masfilelist for file to use
In this case ignore fname
blankcor: If set the correct for adc blanking
RETURNS:
tp[n,npols]: float total power
hdr : struct primary and extension headers
n: >=0 number of sample points returned
< 0 error
DESCRIPTION:
Read in a file and compute the total power
(See /pkg/rsi/local/libao/phil/psrfits/psrftpfile.pro)