IDL Routines IDL data reduction instructions:. Other tools:. – a tool for accessing the ALFA spectral parameters and calibration This is a wrapper script for a number of Phil's routines, automating much of the processing that would be carried out if following Chris's.
Dependencies: Requires and (if called). Format: onoffred, input, b, ball, bpbl, bpol, bbl, scan=scanno, scljy=scljy, sclcal=sclcal, han=han, deg=deg, smo=smo, box=box, savgol=savgol. input - input file name.
This is analysed to see if it is a wapp file or a corfile in order to read it into IDL correctly. Note that this may fail if the filename has been changed - the script looks for ‘wapp’ and ‘corfile’ in the filename. Reading will fail if the correct @corinit or @wasinit setup has not been run in advance to load the reading routines. b - structure that will hold the reduced data as output by, without any further processing.
Ok, then forget about this answer. I'd suggest you update your post to clarify that you talk about binary files, not save-file and that you cannot use module IDL save referenced in a comment. – gecco Jan 4 '12 at 12:34.
ball - structure that will hold the polarization-averaged, baseline-subtracted, smoothed data. bpbl - structure that will hold the polarization-averaged, baseline-subtracted data.
No further smoothing is applied (but see han below). bpol - structure that will hold the polarization-averaged data.
No baseline-subtraction of further smoothing is applied (but see han below). bbl - structure that will hold the baseline-subtracted data. No polarization-averaging or further smoothing is applied (but see han below). scan - scan number of the starting scan in the input file. This is passed to. scljy - set to scale the output in Jy. This is passed to.
![Viewing fits files Viewing fits files](/uploads/1/2/5/5/125504899/991029039.png)
sclcal - set to scale the output in K. This is passed to. han - set to Hanning smooth the output with a width of 3. This is passed to and is independent from (and should probably not be used with) the other smoothing options. deg - this defines the degree of the polynomial that will be fitted in the baseline subtraction. This is passed to.
smo - this defines the width (in channels) of the smoothing kernal applied by either. This is passed to which ever of the routines is called. box - if set, calls with to do boxcar smoothing with a width of smo, if unset then (if smo has a non-zero value) will be called. savgol - perform savitzky-golay smoothing filter.
This is passed to as so only applies if box is set. A wrapper for for IC and WAPP data files. Only parameters used directly by cormeasure and not passed to mbmeasure are described below. Dependencies: Requires. Format: cormeasure, b, board=board, profile=profile, xlabel=xstring, ylabel=ystring, xrange=xrange, hann=hann, niter=niter, file=file, psfile=psfile, velcor=velcor, boxwidth=boxwidth, mask=mask, log=log, eps=eps, hidelines=hidelines, medsub=medsub. b - input cor structure. board = board - board to be extracted from the structure.
If no board is given, then the first board is used. velcor = velcor - correction to be subtracted from the velocity prior to it being passed to mbmeasure. A wrapper for for Mock data files. Only parameters used directly by cormeasure and not passed to mbmeasure are described below. Dependencies: Requires. Format: masmeasure, b, profile=profile, xlabel=xstring, ylabel=ystring, xrange=xrange, hann=hann, niter=niter, file=file, psfile=psfile, boxwidth=boxwidth, mask=mask, log=log, eps=eps, hidelines=hidelines, restfreq=restfreq, velcrdsys=velcrdsys, medsub=medsub.
b - input mas structure. For a multi-board structure, bN should be given, otherwise the first board (b0) will be used.
restfreq=restfreq - rest frequency passed to to retrive the velocity. If not given, the value in the header (normally the central frequency of the board prior to redshifting) will be used.
velcrdsys=velcrdsys - velocity coordinate system ('T', 'G', 'B' or 'L') passed to masfreq to retrive the velocity if a different coordinate system from the header is wanted. Measure profiles given variables containing the velocity and flux and a profile window. Based on and IDL implementation of the the MIRIAD routine.
Reports errors based on the error equations from Koribalski et al. (2004) - these are dependent on the user supplying the correct factor to convert from channel separation to velocity resolution. It is generally recommended that spectra are baseline-subtracted and polarization-combined prior to analysis, but it is possible to subtract a DC level from the spectrum to allow the program to work on spectra not centred around zero (i.e. Ones with continuum). Dependencies: (if hann is set),.
Format: mbmeasure, allvel, allflux, profile=profile, xlabel=xstring, ylabel=ystring, xrange=xrange, hann=hann, niter=niter, file=file, psfile=psfile, boxwidth=boxwidth, mask=mask, source=source, hidelines=hidelines, medsub=medsub. allvel - x axis (velocity) variable. This is filled in if using. allflux - y axis (flux) variable. This is filled in if using cormeasure or masmeasure. profile=profile - set the profile window. Takes a pair of values, e.g.
If not given, the user will be prompted to supply this graphically. xlabel=xstring - label for the x-axis. ylable=ystring - label for the y-axis. xrange=xrange - range of the spectrum to display and use for the general analysis. If not given, this is assumed to be the full range of velocities in the spectrum. hann=hann - do Hanning smoothing before analysis (can be useful on noisy spectra).
Value should be an odd number. niter=niter - maximum number of iterations in the robust moment (default is 20).
file=file - log file that will duplicate output written to the IDL window. psfile=psfile - postscript file that will duplicate output written to the X-window. boxwidth=boxwidth - ratio between channel width and velocity resolution - used for estimating the errors. This should be 1 (or unset) for unsmoothed Mock spectrometer data, 1.2 for unsmoothed IC and WAPP data (this is entered automatically by cormeasure if boxwidth is not set), 2 for Hanning smoothing with a width of 3, etc.
This should not be used with hann. mask=mask - pairs of velocities to be masked out when calculating the rms, e.g. Mask=-200,200,900,950 will maske -200 to 200 and 900 to 950. The profile window is automatically added to the mask. source=source - the source name, used to label the spectrum. This is filled in if using cormeasure or masmeasure.
hidelines=hidelines - hide the lines showing the profile and robust profile windows on the ps plot (they will still be shown on the X-window plot). medsub=medsub - subtract a DC level (the median of the spectrum outside the profile and mask windows) from the spectrum prior to fitting. Large elements copied from Phil's routine, but setup to do Hanning moothing rather than Boxcar. Also, requires bsmo rather than returning in b if no bsmo given. Dependencies: Requires. Format: corhann, b, bsmo, smo=smo. b - input data structure.
bsmo - output (smoothed) data structure. smo - smoothing kernal width (default 3). This is a wrapper for a number of routines: Phil's, Phil's, and my. Many of the parameters are passed to those routines - please see Phil's documentation for details of how these work.
The other parameters are mainly concerned with setting up the filenames correctly for input to the called routines. The routine returns a 14-element mas structure that can be displayed using. Dependencies: Requires, and (if called). Format: masonoffall, flist, projid, date, b, sclcal=sclcal, sclJy=sclJy, avg=avg, median=median, side=side, dateroll=dateroll, verbose=verbose, nonorm=nonorm, dps=dps, flux=flux, board=board.
flist.can be either a 4-element list of the numbers of the files (either as integers, e.g. 100,200,300,400 or as the final string of the file, including the extension, e.g. '00100.fits','00200.fits','00300.fits','00400.fits' ). These should be in the order On, Off, CalOn, CalOff or a single-element equal to the number of the first file.in the sequence.
If a single-element flist is given, masmakeflist is called to build the list of the files. projid - project ID. date - the dates (YYYYMMDD), supplied either as a 4-element list of dates corresponding to the files given in flist or as a single date corresponding to the first file in the sequence. If supplied as a 4-element list, will override any setting in dateroll - this can be used to cope with a month roll-over.
b - mas structure that will be returned. This will be 14 elements, with each element containing one Mock board's reduced data. sclcal - scale to K using the cal - passed to masposonoff. Ignored if dps is set. sclJy - scale to Jy using the cal and gain curve - passed to masposonoff.
Ignored if dps is set. avg - average records together (set by default). Averaging is always done if dps is set. median - median filter rather than everaging - passed to masposonoff. Ignored if dps is set.
side - set which side of the Mock spectrometer is in use (defaults to 1). This should always be one for single-pixel Mock observations. dateroll - four-element array identifying which files were shifted to the next date, e.g. Use dateroll = 0,1,1,1 for an o bservation where the On was before midnight and the Of, CalOn, and CalOff were after midnight.
This will not cope with month roll-overs (use a 4-element date). If date is 4-element or flist is single element, dateroll is ignored. verbose - prints out details of the flist assembled by masmakeflist.
This is passed to masmakeflist, and has no effect if a 4-element flist is provided (and thus masmakeflist is not called). If nonorm is set, this will also be massed to masbpcal, causing the calibration factors and gains used to be reported. nonorm - Does On - Off rather than (On - Off)/Off. This is useful for pseudo-DPS observations. Calls masbpcal instead of masposonoff. If dps is set, nonorm is ignored.
dps - Does T-On - T-off / B-on - B-off by calling masdpsp. flux - the flux of the bandpass calibrator source.
If supplied, this is passed to masdpsp and will be used to give an absolute (as opposed to relative) calibration of the output. Ignored if dps is not set. board - do a single-board reduction using board = N where N is a number from 0 to 13 identifying the board to be reduced. This is mainly used for the single-board mode of maspseudodps, but can be used for any reudction. A wrapper for Phil's routine, designed to plot the 14-element mas structures returned. Inputs are as for masplot, except that off is not accepted by masplotall as it would be pointless in this context. Please see Phil's documentation for details.
Before plotting, and should be used to set the axes as usual in AOIDL, otherwise the axes will be taken from the first board plotted. Dependencies: Requires. Format: masplotall, b, freq=freq, over=over, pollist=pollist, norm=norm, median=median, retvel=retvel, restFreq=restFreq, velCrdsys=velCrdSys, colar=colar A wrapper for Phil's routine for reducing DPS observations. It returns data in b, along with the inidividual parts (as described in masdpsp) in srcOn, srcOff, bpon, bpoff, srconoff. Parameters that are the s ame as masonoffall or masdpsp are.not repeated here. Dependencies: Requires, and (if called).
Format: masdpsall, flist, projid, date, b, srcOn=srcOn, srcOff=srcOff, bpon=bpon, bpoff=bpoff, srconoff=srconoff, side=side, flux=flux, dateroll=dateroll, verbose=verbose A wrapper for, designed to make and accumulate bpcal files for pseudo-DPS observations. It calls masonoffall with the /nonorm switch and returns data both in b and accumulated data in baccum. Most of the parameters are passed to masonoffall and are not repeated here. Dependencies: Requires along with and all subsequent dependencies.
Format: masmakebpcal, fnum, projid, date, b, baccum, sclcal=sclcal, sclJy=sclJy, avg=avg, median=median, side=side, dateroll=dateroll, verbose=verbose. fnum - passed to masonoffall as flist, but (unlike masonoffall) does not overwrite a variable passed in, making it more suitable for calling from a loop. baccum - mas structure that will hold the accumulation. If the variable passed does not exist, it will be created.
If it does exist and is not a mas structure, then it will probably crash! Do On - Off reduction without normalising by dividing by the Off scan. This is useful for reducing pseudo-DPS observations where an on-off is taken on both the target and the bandpass calibrator (e.g. A2463 observations).
It is normally called from and many of the parameters are described there. Dependencies: Requires. Format: masbpcal, files, bout, sclcal=sclcal,s clJy=sclJy, median=median, avg=avg, verbose=verbose. Files - list of filenames with full paths in the order On, Off, CalOn, CalOff (the latter two are only necessary if calibration is requested, probably). bout - mas structure that will contain the returned data.
verbose - report the calibration factor and gain applied. normcal - normalize the calibration using the 'off' and Phil's routine. This returns a bandpass calibrator with the calibration taken to the band edges (so you don't see the bandpass rolloff) but adds noise and can induce ripple. It can be called from masonoffcal, masmakebpcal or maspseudodps. If doing pseudo-dps, you should make sure both the bandpass and the target are reduced with the same normcal setting. It appears that setting /normcal gives the same result as ON/OFF - 1.
Form (and optionally accumulate) a DPS reduced mas structure from an on-off and a supplied bandpass calibrator mas structure. Most of the parameters are passed to masonoffall and are not repeated here. It should be noted, however that sclJy and sclcal refer to the calibration of the target on-off, not the DPS reduced data, which is is relative units (unless flux is supplied). These should be set to match the calibration of the input bandpass calibrator to get meaningful results.
Dependencies: Requires along with and all subsequent dependencies. Format: maspseudodps, flist, projid, date, b, bpcal, baccum, sclcal=sclcal, sclJy=sclJy, median=median, side=side, dateroll=dateroll, verbose=verbose, flux=flux, target=target, board=board. b - mas structure that will contain the reduced DPS data. bpcal - input mas structure containing the bandpass calibrator to be used. baccum - mas structure that will hold the accumulation.
If the variable passed does not exist, it will be created. If it does exist and is not a mas structure, then it will probably crash!. flux - the flux of the bandpass calibrator source. If supplied, this is used to give an absolute (asopposed to relative) calibration of the output. target - mas structure that will contain the on-off reduction of the target source - not divided by the bandpass calibrator. board - specify a single-board to reduce using board = N where M is a number from 0 to 13. This is useful if RFI has made some boards bad in the bandpass but not others.
Average together the two polarizations of a mas struct and return a single-polarization mas struct. If you put in a mas struct that doesn't have two polarizations, I won't be responsible for the consequences. Dependencies: Requires. Format: bpolavg = maspolavg(b). bpolavg - polarization-averaged mas struct. b - inpur mas struct.
Smooth a mas struct with a tophat (a.k.a. Boxcar average) function, using the IDL ‘smooth’ routine, or using a boxcar median or a Hann function.
Dependencies: Required if /han is used. Format: bsmo = massmo(b, width, median=median, han=han). bsmo - smoothed mas struct. b - input mas struct. width - width of smoothing function.
/median - use a boxcar median function. /han - use a Hann function. Transform (and resample) a mas struct between topocentric, barycentric and LSR frequencies in order to allow the accumulation of observations taken without doppler tracking. Note that different transformed observations made at different times without doppler tracking will not have the same barycentric or LSR frequencies, so will need further resampling onto a standard frequency grid prior to accumulation (this can be done with - but at least the frequencies will refer to the same velocities, unlike topocentric frequencies. Masveltrans uses header values for the barycentric velocity of the observatory, the LSR velocity of the observatory is calculated from this using Phil's routine with the barycentric velocity, RA and Dec values from the header.
Conversion of the values in the file is done using the relativistic equations of. Resampling is done using the standard IDL ‘interpol’ routine. Will recognise specsys = TOPOCENT, BARYCENT and LSRK from the header and use these as the starting frame for the conversion.
All mas structs produced by the telescope should have specsys = TOPOCENT. Masveltrans will write specsys = BARYCENT or specsys = LSRK (as appropriate) into the header of the output struct. Use of the /rest switch (either on its own, or associated with redshift and possibly the /vel switch) will transform the spectrum into rest frequency using the header information or supplied redshifts. This should be used with the appropriate /bary or /lsr switch, depending on the velocity frame of the redshift, e.g.: masveltrans,ic8603500b2aps,test,/bary,/rest,reds=0.0129089 will transform the spectrum in the mas structure ic8603500b2aps into rest frequency using a supplied barycentric redshift of z = 0.0129089 (overriding the redshift in the header) and write the result into the mas structure test.
Dependencies: Requires. Format: masveltrans, b, bout,bary=bary, lsr=lsr, resamp=resamp, spline=spline, lsquadratic=lsquadratic, quadratic=quadratic, errcode=errcode, rest=rest, redshift=redshift, vel=vel.
![Reading Fits Files Into Idl Reading Fits Files Into Idl](/uploads/1/2/5/5/125504899/294782682.jpg)
b - input mas struct. bout - output mas struct. bary - set /bary to transform to BARYCENT. lsr - set /lsr to transform to LSRK. topo - set /topo to tranform to TOPOCENT. resamp - resample as well as changing header values.
When the velocity is transformed, the grid is shifted by the relativistic transform of the reference velocity (CRVAL1). If resampis set (the default), the relativistic transform is calculated for every frequency on the original frequency grid and the data are then resampled onto the transformed grid. If not set ( resamp = 0), then the data are simply shifted along with the grid. This avoids any resampling artefacts, but the match between data and frequencies becomes less accurate at distances further away from the reference value. spline, lsquadratic, quadratic - optional inputs to IDL's ‘interpol’ routine. If none is given, it does a linear interpolation.
Spline is given as an option, but is likely to muck up your data! These switches have no effect if resamp = 0. errcode - return the errorcode from masveltrans.
This will be 1 if something triggered a warning, 0 otherwise (which might mean it ran okay). This can be useful if calling masveltrans from another procedure. rest - use the /rest switch to return the spectrum shifted to rest frequencies. redshift - set redshift to the redshift or velocity (with /vel) of the source to override the velocity/redshift information given in the reqvel header item. vel - set /vel to give redshift in km/s (optical velocity) rather than redshift. Find Mock spectrometer fits files meeting certain parameters, uses Phil's. The output of masfilesum is then processed with the selection criteria given and the results are returned.
A number of the parameters are passed to massfilelistp for file selection, please see Phil's documentation for details of how these work. Dependencies: Requires. Format: masfindfiles, projid, filesum, srcname=srcname, obsmode=obsmode, scantype=scantype, band=band, num=num, freqrange=freqrange, rarange=rarange, decrange=decrange, year=year, month=month, day=day, beam=beam, side=side, group=group, onoff=onoff, dps=dps, alfa=alfa, zoa=zoa, allbm=allbm.
projid - the project ID, passed to masfilelistp. filesum - the struct that will contain the summary of the files found.
Format is as for the summary info returned by masfilesum. srcname - source name to search for (OBJECT). obsmode - obsmode to search for in the header (OBSMODE). scantype - scantype to search for in the header (SCANTYPE).
band - receiver band to search for in the header (FRONTEND: Options include: ‘lbw’ ‘sbw’, ‘sbh’, ‘cb’, ‘cbh’, ‘xb’. num - file number to select (passed to masfilelistp).
freqrange - frequency range (in MHz) to search for in the header (CRVAL1). This should be a two-element array. rarange - RA range (in decimal degrees) to search for in the header (CRVAL2). This should be a two-element array. decrange - Dec range (in decimal degrees) to search for in the header (CRVAL3). This should be a two-element array. year - year to select (passed to masfilelistp).
month - month to select (passed to masfilelistp). day - day to select (passed to masfilelistp). beam - beam to select (passed to masfilelistp). Default is to search for all beams - this will return lots of files and will thus take a long time to run. side - side of the Mock spectrometers to select (passed to masfilelistp). group - Mock spectrometer group to select (passed to masfilelistp). onoff - defaults for single-pixel on-off observing (obsmode = 'ONOFF', scantype = 'ON', groupdef = 0, beamdef = 3, sidedef = 1).
dps - defaults for single-pixel DPS observing (scantype = 'ON-T', group = 0, beam = 3, side = 1). Note this will find the target-on scan, not necessarily the first scan of the sequence.
alfa - defaults for generic ALFA observing (group = 0, beam = 0, side = 0). Can be used with /onoff or /dps to set up defaults for observing those pattersn with ALFA. Can be used with /allbm to search for all ALFA beams rather than just beam 0. zoa - defaults for ZOA observing (scantype = 'ON', obsmode = 'ON', group = 1, beam = 0, side = 0). Can be used with /allbm to search fo all ALFA beams rather than just beam 0.
allbm - use with /alfa and /zoa to not set beam = 0, meaning that all beams will be searched. Accumulates mas structs, shifting them first so that the frequencies agree. Uses Phil's for the actual accumulation. Resampling can be nearest neighbour (if the grids are compatible) or interpolated. If the baccum does not exist, it is created (masaccum is called with /new) and no shifting is done.
If the spectra do not have the same frequency spacing (CRVAL1), then nearest-neighbour will refuse to work but the spectra can be accumulated using interpolation. Dependencies: Requires. Format: masshiftaccum, bIn, baccum, interp=interp, spline=spline, lsquadratic=lsquadratic, quadratic=quadratic, nonan=nonan. bIn - mas structure to be added to the accumulation. baccum - mas structure that will hold the accumulation.
If the variable passed does not exist, it will be created. If it does exist and is not a mas structure, then it will probably crash!. interp - set this to do interpolation, otherwise default is to use nearest-neighbour to resample the shifted spectrum. spline, lsquadratic, quadratic - optional inputs to IDL's ‘interpol’ routine.
If none is given, it does a linear interpolation. Spline is given as an option, but is likely to muck up your data! These switches have no effect if /interp is not given. nonan - when doing nearest-neighbour resampling, use the value of the last data point for areas off the end of the spectrum rather than NaN. This switch has no effect if /interp is given, when points off the end of the spectrum will be filled in by the interpolation routine. This weights mas structs by changing the value of ACCUM.
This is particularly useful where ACCUM has been set to zero during the reduction process. Whether ACCUM is zeroed is not consistent: masgetfile with /avg, for instance, will set ACCUM correctly, while masdpsp and masgetfile with /median will not. Setting ACCUM to correctly reflect the number of records that were reduced into the struct will allow the strcut to be correctly accumulated using and procedures that call masaccum, such as. Dependencies: None. Format: masaddwgt, b, weight. b - mas structure to be modified.
weight - weighting to be applied. ACCUM will be set to -1. weight. This is a modification of Phil's routine to monitor all 14 boards in use during a Mock single-pixel observation. It is normally called with simply the project id, and will then find and display the most recent files. If not scaling is given, masmonall will autoscale the x-axos tp cover the full frequency range of the observation and the y-axis to go from median/3 to median×3 (where ‘median’ is the median of the data, normally a good approximation to Tsys). If the observation includes both radar-like shifted boards and noise-like shifted boards, then a logarithmic y-scale can be applied to help to see all the data at once.
As with Phil's masmon routine, a menu inside the program (called by hitting any key) allows further control of the scaling and a number of other functions. This menu also allows the user to quit the program or to interrupt it for debugging. The menu appears in the IDL terminal window (not the graphics window) and focus must be on the IDl terminal window to interrupt plotting and bring up the menu.
Cmd CurVal function - PLOTTING: p -1 pol to use (1.4,-1=all) h low high set horizontal plot range.no args - autoscale v low high set vertical plot range.no args - autoscale delay 0.25 plot delay secs l 0 logarithmic y-axis. 1-on,0-off - POSITIONING: d 20121217 move to first file of date dn 2010 move to date and filenum num 00000 number of file to use r 11 row of file to position. MaxRows: 60 f ('all'/date) list project files for this date ('all' - all dates, date - that date) - MISC: cur track cursor position hdr print current header s 0 step mode. 1-on,0-off z stop in procedure (for debugging) q to quit otherKeys continue plotting: The menu prompts the user for input, then carries out the operation requested and returns to the display of the spectra. If an invalid input is given, it returns to the spectra without carrying out an operation. Note that keys will not register until the menu appears - this can take a short while, depending on when in the program cycle a key is pressed to interrupt plotting.
Polarisations should be supplied as p 1234, etc., not p 0123. Known issues: There may be a lun leak somewhere in the program. If it crashes, try masclose,/all and then restart (after retall of course). Dependencies: Requires,. Format: masmonall, projid, num=num, date=date, noavg=noavg, pollist=pollist, dirI=dirI, col=col, auto=auto, ylog=ylog.
RDFITSSTRUCT Name RDFITSSTRUCT Purpose Read an entire FITS file (all extensions) into a single IDL structure. Explanation Each header, image or table array is placed in a separate structure tag. Calling Sequence RDFITSSTRUCT, filename, struct, /SILENT, /HEADERONLY, EXTEN= Input FILENAME = Scalar string giving the name of the FITS file. One can also specify a gzip (.gz) compressed file Optional Keyword /HEADERONLY - If set, then only the FITS headers (and not the data) are read into the structure.
/SILENT - Set this keyword to suppress informational displays at the terminal. Output struct = structure into which FITS data is read. The primary header and image are placed into tag names HDR0 and IM0. The ith extension is placed into the tag names HDRi, and either TABi (if it is a binary or ASCII table) or IMi (if it is an image extension) If /HEADERONLY is set, then struct will contain tags HDR0, HDR1.HDRn containing all the headers of a FITS file with n extensions Optional Input Keyword EXTEN - positive integer array specifying which extensions to read. Default is to read all extensions. Procedures Used FITSOPEN, FITSREAD, FITSCLOSE Method The file is opened with FITSOPEN which return information on the number and type of each extension. The CREATESTRUCT function is used iteratively, with FITSREAD calls to build the final structure.
Example Read the FITS file 'm33.fits' into an IDL structure, st IDL rdfitsstruct, 'm33.fits', st IDL help, /str, st;Display info about the structure To just read the second and fourth extensions IDL rdfitsstruct, 'm33.fits', st, exten=2,4 Restrictions Does not handle random groups or variable length binary tables Modification History Written K. Venkatakrishna, STX April 1992 Code cleaned up a bit W. Landsman STX October 92 Modified for MacOS I. Freedman HSTX April 1994 Work under Windows 95 W. Landsman HSTX January 1996 Use anonymous structures, skip extensions without data WBL April 1998 Converted to IDL V5.0, W.
Landsman, April 1998 OS-independent deletion of temporary file W. Landsman Jan 1999 Major rewrite to use FITSOPEN and CREATESTRUCT W. Landsman Sep 2002 Added /HEADERONLY keyword W. Landsman October 2003 Do not copy primary header into extension headers W. Landsman Dec 2004 Do not modify NAXIS when using /HEADERONLY W. Landsman Jan 2005 Added EXTEN keyword W.
Landsman July 2009.