This page was created by the IDL library routine
make_html_help. For more information on
this routine, refer to the IDL Online Help Navigator
or type:
? make_html_help
at the IDL command line prompt.
Last modified: Mon Feb 20 19:35:18 2006.
NAME:
ABSCAL
PURPOSE:
Apply the FITS BZERO and BSCALE keyword values to a data array
CALLING SEQUENCE:
RESULT = ABSCAL( Value, Header, /DEBUG)
INPUTS:
VALUE - Any scalar, vector, or array (usually an integer type giving a
relative intensity).
HEADER - A FITS header array containing the absolute calibration
keyword BSCALE, and optionally BZERO and BUNIT.
OUTPUT:
RESULT = BSCALE*VALUE + BZERO, where the BSCALE and BZERO scalars
are taken from the FITS header.
If the absolute calibration keywords do not exist, then
RESULT = VALUE, and !ERR = -1.
OPTIONAL INPUT KEYWORD:
/DEBUG - If DEBUG is set, then ABSCAL will print the
calibration units given by the BUNIT keyword.
REVISION HISTORY:
Written W. Landsman, STX Corporation January 1987
Use DEBUG keyword instead of !DEBUG September 1995
Converted to IDL V5.0 W. Landsman September 1997
(See goddard/pro/astrom/abscal.pro)
NAME:
AD2XY
PURPOSE:
Compute X and Y from native coordinates and a FITS astrometry structure
EXPLANATION:
If a WCS projection (Calabretta & Greisen 2002, A&A, 395, 1077) is
present, then the procedure WCSXY2SPH is used to compute native
coordinates. If distortion is present then this is corrected.
In all cases, the inverse of the CD matrix is applied and offset
from the reference pixel to obtain X and Y.
AD2XY is generally meant to be used internal to other procedures. For
interactive purposes, use ADXY.
CALLING SEQUENCE:
AD2XY, a ,d, astr, x, y
INPUTS:
A - R.A. or longitude in DEGREES, scalar or vector
D - Dec. or longitude in DEGREES, scalar or vector
ASTR - astrometry structure, output from EXTAST procedure containing:
.CD - 2 x 2 array containing the astrometry parameters CD1_1 CD1_2
in DEGREES/PIXEL CD2_1 CD2_2
.CDELT - 2 element vector giving increment at reference point in
DEGREES/PIXEL
.CRPIX - 2 element vector giving X and Y coordinates of reference pixel
(def = NAXIS/2) in FITS convention (first pixel is 1,1)
.CRVAL - 2 element vector giving coordinates of the reference pixel
in DEGREES
.CTYPE - 2 element vector giving projection types
.LONGPOLE - scalar longitude of north pole (default = 180)
.PV2 - Vector of additional parameter (e.g. PV2_1, PV2_2) needed in
some projections
.DISTORT - Optional substructure specifying distortion parameters
OUTPUTS:
X - row position in pixels, scalar or vector
Y - column position in pixels, scalar or vector
X,Y will be in the standard IDL convention (first pixel is 0), and
*not* the FITS convention (first pixel is 1)
NOTES:
AD2XY tests for presence of WCS coordinates by the presence of a dash
in the 5th character position in the value of CTYPE (e.g 'DEC--SIN').
PROCEDURES USED:
TAG_EXIST(), WCSSPH2XY
REVISION HISTORY:
Converted to IDL by B. Boothman, SASC Tech, 4/21/86
Use astrometry structure, W. Landsman Jan. 1994
Do computation correctly in degrees W. Landsman Dec. 1994
Only pass 2 CRVAL values to WCSSPH2XY W. Landsman June 1995
Don't subscript CTYPE W. Landsman August 1995
Converted to IDL V5.0 W. Landsman September 1997
Understand reversed X,Y (X-Dec, Y-RA) axes, W. Landsman October 1998
Consistent conversion between CROTA and CD matrix W. Landsman October 2000
No special case for tangent projection W. Landsman June 2003
Work for non-WCS coordinate transformations W. Landsman Oct 2004
(See goddard/pro/astrom/ad2xy.pro)
NAME:
ADSTRING
PURPOSE:
Return RA and Dec as character string(s) in sexigesimal format.
EXPLANATION:
RA and Dec may be entered as either a 2 element vector or as
two separate vectors (or scalars). One can also specify the precision
of the declination in digits after the decimal point.
CALLING SEQUENCE
result = ADSTRING( ra_dec, precision, /TRUNCATE )
or
result = ADSTRING( ra,dec,[ precision, /TRUNCATE ] )
INPUTS:
RA_DEC - 2 element vector giving the Right Ascension and declination
in decimal degrees.
or
RA - Right ascension in decimal degrees, numeric scalar or vector
DEC - Declination in decimal degrees, numeric scalar or vector
OPTIONAL INPUT:
PRECISION - Integer scalar (0-4) giving the number of digits after the
decimal of DEClination. The RA is automatically 1 digit more.
This parameter may either be the third parameter after RA,DEC
or the second parameter after [RA,DEC]. It is not available
for just DEC. If no PRECISION parameter is passed, a
precision of 1 for both RA and DEC is returned to maintain
compatibility with past ADSTRING functions. Values of
precision larger than 4 will be truncated to 4. If
PRECISION is 3 or 4, then RA and Dec should be input as
double precision.
OPTIONAL INPUT KEYWORD:
/TRUNCATE - if set, then the last displayed digit in the output is
truncated in precision rather than rounded. This option is
useful if ADSTRING() is used to form an official IAU name
(see http://vizier.u-strasbg.fr/Dic/iau-spec.htx) with
coordinate specification. The IAU name will typically be
be created by applying STRCOMPRESS/REMOVE) after the ADSTRING()
call, e.g.
strcompress( adstring(ra,dec,0,/truncate), /remove) ;IAU format
OUTPUT:
RESULT - Character string(s) containing HR,MIN,SEC,DEC,MIN,SEC formatted
as ( 2I3,F5.(p+1),2I3,F4.p ) where p is the PRECISION
parameter. If only a single scalar is supplied it is
converted to a sexigesimal string (2I3,F5.1).
EXAMPLE:
(1) Display CRVAL coordinates in a FITS header, H
IDL> crval = sxpar(h,'CRVAL*') ;Extract 2 element CRVAL vector (degs)
IDL> print, adstring(crval) ;Print CRVAL vector sexigesimal format
(2) print,adstring(30.42,-1.23,1) ==> ' 02 01 40.80 -01 13 48.0'
print,adstring(30.42,+0.23) ==> ' 02 01 40.8 +00 13 48.0'
print,adstring(+0.23) ==> '+00 13 48.0'
(3) The first two calls in (2) can be combined in a single call using
vector input
print,adstring([30.42,30.42],[-1.23,0.23], 1)
PROCEDURES CALLED:
FSTRING(), RADEC, SIXTY()
REVISION HISTORY:
Written W. Landsman June 1988
Addition of variable precision and DEC seconds precision fix.
ver. Aug. 1990 [E. Deutsch]
Output formatting spiffed up October 1991 [W. Landsman]
Remove ZPARCHECK call, accept 1 element vector April 1992 [W. Landsman]
Call ROUND() instead of NINT() February 1996 [W. Landsman]
Check roundoff past 60s October 1997 [W. Landsman]
Work for Precision =4 November 1997 [W. Landsman]
Converted to IDL V5.0 W. Landsman 24-Nov-1997
Major rewrite to allow vector inputs W. Landsman February 2000
Fix possible error in seconds display when Precision=0
P. Broos/W. Landsman April 2002
Added /TRUNCATE keyword, put leading zeros in seconds display
P. Broos/W. Landsman September 2002
Hours values always less than 24 W. Landsman September 2002
Fix zero declinations for vector processing W. Landsman February 2004
Fix possible problem in leading zero display W. Landsman June 2004
(See goddard/pro/astro/adstring.pro)
NAME:
ADXY
PURPOSE:
Use a FITS header to convert astronomical to pixel coordinates
EXPLANATION:
Use an image header to compute X and Y positions, given the
RA and Dec (or longitude, latitude) in decimal degrees.
CALLING SEQUENCE:
ADXY, HDR ;Prompt for Ra and DEC
ADXY, hdr, a, d, x, y, [ /PRINT, ALT= ]
INPUTS:
HDR - FITS Image header containing astrometry parameters
OPTIONAL INPUTS:
A - Right ascension in decimal DEGREES, scalar or vector
D - Declination in decimal DEGREES, scalar or vector
If A and D are not supplied, user will be prompted to supply
them in either decimal degrees or HR,MIN,SEC,DEG,MN,SC format.
OPTIONAL OUTPUT:
X - row position in pixels, same number of elements as A and D
Y - column position in pixels
X and Y will be in standard IDL convention (first pixel is 0) and not
the FITS convention (first pixel is 1). As in FITS an integral
value corresponds to the center of a pixel.
OPTIONAL KEYWORD INPUT:
/PRINT - If this keyword is set and non-zero, then results are displayed
at the terminal.
ALT - single character 'A' through 'Z' or ' ' specifying an alternate
astrometry system present in the FITS header. The default is
to use the primary astrometry or ALT = ' '. If /ALT is set,
then this is equivalent to ALT = 'A'. See Section 3.3 of
Greisen & Calabretta (2002, A&A, 395, 1061) for information about
alternate astrometry keywords.
OPERATIONAL NOTES:
If less than 5 parameters are supplied, or if the /PRINT keyword is
set, then the X and Y positions are displayed at the terminal.
If the procedure is to be used repeatedly with the same header,
then it would be faster to use AD2XY.
PROCEDURES CALLED:
AD2XY, ADSTRING(), EXTAST, GETOPT(), TEN()
REVISION HISTORY:
W. Landsman HSTX January, 1988
Use astrometry structure W. Landsman January, 1994
Changed default ADSTRING format W. Landsman September, 1995
Converted to IDL V5.0 W. Landsman September 1997
Check if latitude/longitude reversed in CTYPE keyword W. L. Feb. 2004
Added ALT keyword W. Landsman September 2004
Work for non-spherical coordinate transformation W. Landsman May 2005
(See goddard/pro/astrom/adxy.pro)
NAME:
AFhread
PURPOSE:
Subroutine of WFPCREAD to read a GEIS header from an HST STSDAS image.
EXPLANATION:
This procedure reads a GEIS header from an HST image. It then looks
if a .SHH file is present for FOC images to calculate better
astrometry by getting the current PSANGLV3 from this file. Called by
WFPCREAD.PRO
CALLING SEQUENCE:
AFhread, HdrFile, hdr
INPUTS:
HdrFile - scalar string giving name of STSDAS header for an FOC image
OUTPUTS:
hdr - string array, FITS header for the FOC image. The position
angle of the V3 axis of HST (PSANGLV3) is added, if it could
be found in the .SHH file
PROCEDURE CALLS:
STRN(), SXADDPAR, SXHREAD, SXPAR()
REVISION HISTORY:
Written Eric W. Deutsch (U. of Washington) June, 1994
Documentation update W. Landsman (HSTX) July, 1994
Converted to IDL V5.0 W. Landsman September 1997
Removed call to EXIST() function W. Landsman April 1999
(See goddard/pro/sdas/afhread.pro)
NAME:
AIRTOVAC
PURPOSE:
Convert air wavelengths to vacuum wavelengths
EXPLANATION:
Wavelengths are corrected for the index of refraction of air under
standard conditions. Wavelength values below 2000 A will not be
altered. Uses the IAU standard for conversion given in Morton
(1991 Ap.J. Suppl. 77, 119)
CALLING SEQUENCE:
AIRTOVAC, WAVE
INPUT/OUTPUT:
WAVE - Wavelength in Angstroms, scalar or vector
WAVE should be input as air wavelength(s), it will be
returned as vacuum wavelength(s). WAVE is always converted to
double precision upon return.
EXAMPLE:
If the air wavelength is W = 6056.125 (a Krypton line), then
AIRTOVAC, W yields an vacuum wavelength of W = 6057.8019
METHOD:
See Morton (Ap. J. Suppl. 77, 119) for the formula used
REVISION HISTORY
Written W. Landsman November 1991
Converted to IDL V5.0 W. Landsman September 1997
(See goddard/pro/astro/airtovac.pro)
NAME:
AITOFF
PURPOSE:
Convert longitude, latitude to X,Y using an AITOFF projection.
EXPLANATION:
This procedure can be used to create an all-sky map in Galactic
coordinates with an equal-area Aitoff projection. Output map
coordinates are zero longitude centered.
CALLING SEQUENCE:
AITOFF, L, B, X, Y
INPUTS:
L - longitude - scalar or vector, in degrees
B - latitude - same number of elements as L, in degrees
OUTPUTS:
X - X coordinate, same number of elements as L. X is normalized to
be between -180 and 180
Y - Y coordinate, same number of elements as L. Y is normalized to
be between -90 and 90.
NOTES:
See AIPS memo No. 46, page 4, for details of the algorithm. This
version of AITOFF assumes the projection is centered at b=0 degrees.
REVISION HISTORY:
Written W.B. Landsman STX December 1989
Modified for Unix:
J. Bloch LANL SST-9 5/16/91 1.1
Converted to IDL V5.0 W. Landsman September 1997
(See goddard/pro/astro/aitoff.pro)
NAME:
AITOFF_GRID
PURPOSE:
Produce an overlay of latitude and longitude lines over a plot or image
EXPLANATION:
The grid is plotted on the current graphics device. AITOFF_GRID
assumes that the ouput plot coordinates span the x-range of
-180 to 180 and the y-range goes from -90 to 90.
CALLING SEQUENCE:
AITOFF_GRID [,DLONG,DLAT, LABEL=, /NEW, CHARTHICK=, CHARSIZE=, _EXTRA=]
OPTIONAL INPUTS:
DLONG = Optional input longitude line spacing in degrees. If left
out, defaults to 30.
DLAT = Optional input latitude line spacing in degrees. If left
out, defaults to 30.
OPTIONAL INPUT KEYWORDS:
LABEL = Optional keyword specifying that the latitude and
longitude lines on the prime meridian and the
equator should be labeled in degrees. If LABELS is
given a value of 2, i.e. LABELS=2, then the longitude
labels will be in hours instead of degrees.
CHARSIZE = If /LABEL is set, then CHARSIZE specifies the size
of the label characters (passed to XYOUTS)
CHARTHICK = If /LABEL is set, then CHARTHICK specifies the
thickness of the label characters (passed to XYOUTS)
/NEW = If this keyword is set, then AITOFF_GRID will create
a new plot grid, rather than overlay an existing plot.
Any valid keyword to OPLOT such as COLOR, LINESTYLE, THICK can be
passed to AITOFF_GRID (though the _EXTRA facility) to to specify the
color, style, or thickness of the grid lines.
OUTPUTS:
Draws grid lines on current graphics device.
EXAMPLE:
Create a labeled Aitoff grid of the Galaxy, and overlay stars at
specified Galactic longitudes, glong and latitudes, glat
IDL> aitoff_grid,/label,/new ;Create labeled grid
IDL> aitoff, glong, glat, x,y ;Convert to X,Y coordinates
IDL> plots,x,y,psym=2 ;Overlay "star" positions
PROCEDURES USED:
AITOFF
NOTES:
If labeling in hours (LABEL=2) then the longitude spacing should be
a multiple of 15 degrees
AUTHOR AND MODIFICATIONS:
J. Bloch 1.2 6/2/91
Converted to IDL V5.0 W. Landsman September 1997
Create default plotting coords, if needed W. Landsman August 2000
Added _EXTRA, CHARTHICK, CHARSIZE keywords W. Landsman March 2001
Several tweaks, plot only hours not minutes W. Landsman January 2002
(See goddard/pro/astro/aitoff_grid.pro)
NAME:
APER
PURPOSE:
Compute concentric aperture photometry (adapted from DAOPHOT)
EXPLANATION:
APER can compute photometry in several user-specified aperture radii.
A separate sky value is computed for each source using specified inner
and outer sky radii.
CALLING SEQUENCE:
APER, image, xc, yc, [ mags, errap, sky, skyerr, phpadu, apr, skyrad,
badpix, /NAN, /EXACT, /FLUX, PRINT = , /SILENT,
SETSKYVAL = ]
INPUTS:
IMAGE - input image array
XC - vector of x coordinates.
YC - vector of y coordinates
OPTIONAL INPUTS:
PHPADU - Photons per Analog Digital Units, numeric scalar. Converts
the data numbers in IMAGE to photon units. (APER assumes
Poisson statistics.)
APR - Vector of up to 12 REAL photometry aperture radii.
SKYRAD - Two element vector giving the inner and outer radii
to be used for the sky annulus. Ignored if the SETSKYVAL
keyword is set.
BADPIX - Two element vector giving the minimum and maximum value
of a good pixel. If badpix is not supplied or if BADPIX[0] is
equal to BADPIX[1] then it is assumed that there are no bad
pixels. Note that fluxes will not be computed for any star
with a bad pixel within the aperture area, but that bad pixels
will be simply ignored for the sky computation. The BADPIX
parameter is ignored if the /NAN keyword is set.
OPTIONAL KEYWORD INPUTS:
/EXACT - By default, APER counts subpixels, but uses a polygon
approximation for the intersection of a circular aperture with
a square pixel (and normalize the total area of the sum of the
pixels to exactly match the circular area). If the /EXACT
keyword, then the intersection of the circular aperture with a
square pixel is computed exactly. The /EXACT keyword is much
slower and is only needed when small (~2 pixels) apertures are
used with very undersampled data.
/FLUX - By default, APER uses a magnitude system where a magnitude of
25 corresponds to 1 flux unit. If set, then APER will keep
results in flux units instead of magnitudes.
/NAN - If set then APER will check for NAN values in the image. /NAN
takes precedence over the BADPIX parameter. Note that fluxes
will not be computed for any star with a NAN pixel within the
aperture area, but that NAN pixels will be simply ignored for
the sky computation.
PRINT - if set and non-zero then APER will also write its results to
a file aper.prt. One can specify the output file name by
setting PRINT = 'filename'.
READNOISE - Scalar giving the read noise (or minimum noise for any
pixel. This value is passed to the procedure mmm.pro when
computing the sky, and is only need for images where
the noise is low, and pixel values are quantized.
/SILENT - If supplied and non-zero then no output is displayed to the
terminal.
SETSKYVAL - Use this keyword to force the sky to a specified value
rather than have APER compute a sky value. SETSKYVAL
can either be a scalar specifying the sky value to use for
all sources, or a 3 element vector specifying the sky value,
the sigma of the sky value, and the number of elements used
to compute a sky value. The 3 element form of SETSKYVAL
is needed for accurate error budgeting.
OUTPUTS:
MAGS - NAPER by NSTAR array giving the magnitude for each star in
each aperture. (NAPER is the number of apertures, and NSTAR
is the number of stars). If the /FLUX keyword is not set, then
a flux of 1 digital unit is assigned a zero point magnitude of
25.
ERRAP - NAPER by NSTAR array giving error for each star. If a
magnitude could not be determined then ERRAP = 9.99 (if in
magnitudes) or ERRAP = !VALUES.F_NAN (if /FLUX is set).
SKY - NSTAR element vector giving sky value for each star in
flux units
SKYERR - NSTAR element vector giving error in sky values
EXAMPLE:
Determine the flux and error for photometry radii of 3 and 5 pixels
surrounding the position 234.2,344.3 on an image array, im. Compute
the partial pixel area exactly. Assume that the flux units are in
Poisson counts, so that PHPADU = 1, and the sky value is already known
to be 1.3, and that the range [-32767,80000] for bad low and bad high
pixels
IDL> aper, im, 234.2, 344.3, flux, eflux, sky,skyerr, 1, [3,5], -1, $
[-32767,80000],/exact, /flux, setsky = 1.3
PROCEDURES USED:
GETOPT, MMM, PIXWT(), STRN(), STRNUMBER()
NOTES:
Reasons that a valid magnitude cannot be computed include the following:
(1) Star position is too close (within 0.5 pixels) to edge of the frame
(2) Less than 20 valid pixels available for computing sky
(3) Modal value of sky could not be computed by the procedure MMM
(4) *Any* pixel within the aperture radius is a "bad" pixel
(5) The total computed flux is negative
APER was modified in June 2000 in two ways: (1) the /EXACT keyword was
added (2) the approximation of the intersection of a circular aperture
with square pixels was improved (i.e. when /EXACT is not used)
REVISON HISTORY:
Adapted to IDL from DAOPHOT June, 1989 B. Pfarr, STX
Adapted for IDL Version 2, J. Isensee, July, 1990
Code, documentation spiffed up W. Landsman August 1991
TEXTOUT may be a string W. Landsman September 1995
FLUX keyword added J. E. Hollis, February, 1996
SETSKYVAL keyword, increase maxsky W. Landsman, May 1997
Work for more than 32767 stars W. Landsman, August 1997
Don't abort for insufficient sky pixels W. Landsman May 2000
Added /EXACT keyword W. Landsman June 2000
Allow SETSKYVAL = 0 W. Landsman December 2000
Set BADPIX[0] = BADPIX[1] to ignore bad pixels W. L. January 2001
Fix chk_badpixel problem introduced Jan 01 C. Ishida/W.L. February 2001
Set bad fluxes and error to NAN if /FLUX is set W. Landsman Oct. 2001
Remove restrictions on maximum sky radius W. Landsman July 2003
Added /NAN keyword W. Landsman November 2004
Set badflux=0 if neither /NAN nor badpix is set M. Perrin December 2004
Added READNOISE keyword W. Landsman January 2005
(See goddard/pro/idlphot/aper.pro)
NAME:
ARCBAR
PURPOSE:
Draw an arc bar on an image showing the astronomical plate scale
CALLING SEQUENCE:
ARCBAR, hdr, arclen,[ COLOR= , /DATA, LABEL= , /NORMAL, POSITION =,
/SECONDS, SIZE=, THICK= ]
INPUTS:
hdr - image FITS header with astrometry, string array
arclen - numeric scalar giving length of bar in arcminutes (default)
or arcseconds (if /SECONDS is set)
OPTIONAL KEYWORD INPUTS:
COLOR - integer scalar specifying the color to draw the arcbar (using
PLOTS), default = !P.COLOR
/DATA - if set and non-zero, then the POSITION keyword is given in data
units
LABEL - string giving user defined label for bar. Default label is size
of bar in arcminutes
/NORMAL - if this keyword is set and non-zero, then POSITION is given in
normalized units
POSITION - 2 element vector giving the (X,Y) position in device units
(or normalized units if /NORMAL is set, or data units if /DATA
is set) at which to place the scale bar. If not supplied,
then the user will be prompted to place the cursor at the
desired position
/SECONDS - if set, then arlen is specified in arcseconds rather than
arcminutes
SIZE - scalar specifying character size of label, default = 1.0
THICK - Character thickness of the label, default = !P.THICK
EXAMPLE:
Place a 3' arc minute scale bar, at position 300,200 of the current
image window, (which is associated with a FITS header, HDR)
IDL> arcbar, HDR, 3, pos = [300,200]
RESTRICTIONS:
When using using a device with scalable pixels (e.g. postscript)
the data coordinate system must be established before calling ARCBAR.
If data coordinates are not set, then ARCBAR assumes that the displayed
image size is given by the NAXIS1 keyword in the FITS header.
PROCEDURE CALLS:
AD2XY, EXTAST, GSSSADXY, SXPAR()
REVISON HISTORY:
written by L. Taylor (STX) from ARCBOX (Boothman)
modified for Version 2 IDL, B. Pfarr, STX, 4/91
New ASTROMETRY structures W.Landsman, HSTX, Jan 94
Recognize a GSSS header W. Landsman June 94
Added /NORMAL keyword W. Landsman Feb. 96
Use NAXIS1 for postscript if data coords not set, W. Landsman Aug 96
Fixed typo for postscript W. Landsman Oct. 96
Account for zeropoint offset in postscript W. Landsman Apr 97
Converted to IDL V5.0 W. Landsman September 1997
Added /DATA, /SECONDS keywords W. Landsman July 1998
Use device-independent label offset W. Landsman August 2001
(See goddard/pro/astro/arcbar.pro)
NAME:
ARROWS
PURPOSE:
To display "weathervane" directional arrows on an astronomical image
EXPLANATION:
Overlays a graphic showing orientation of North and East.
CALLING SEQUENCE:
ARROWS,h, [ xcen, ycen, ARROWLEN= , CHARSIZE= COLOR= , /DATA
FONT=, /NORMAL, /NOTVERTEX, THICK= ]
INPUTS:
h - FITS or STSDAS header array, must include astrometry
OPTIONAL INPUTS:
xcen,ycen - numeric scalars, specifying the center position of
arrows. Position in device units unless the /NORMALIZED
keyword is specified. If not supplied, then ARROWS
will prompt for xcen and ycen
OPTIONAL KEYWORD INPUTS:
arrowlen - length of arrows in terms of normal Y size of vector-drawn
character, default = 3.5, floating point scalar
charsize - character size, default = 2.0, floating point scalar
color - color that the arrows and NE letters should be. Default
value is !P.COLOR
Data - if this keyword is set and nonzero, the input center (xcen,
ycen) is understood to be in data coordinates
font - IDL vector font number (1-20) to use to display NE letters.
For example, set font=13 to use complex italic font.
NotVertex - Normally (historically) the specified xcen,ycen indicated
the position of the vertex of the figure. If this
keyword is set, the xcen,ycen coordinates refer to a sort
of 'center of mass' of the figure. This allows the
figure to always appear with the area irregardless of
the rotation angle.
Normal - if this keyword is set and nonzero, the input center
(xcen,ycen) is taken to be in normalized coordinates. The
default is device coordinates.
thick - line thickness, default = 2.0, floating point scalar
OUTPUTS:
none
EXAMPLE:
Draw a weathervane at (400,100) on the currently active window,
showing the orientation of the image associated with a FITS header, hdr
IDL> arrows, hdr, 400, 100
METHOD:
Uses EXTAST to EXTract ASTrometry from the FITS header. The
directions of North and East are computed and the procedure
ONE_ARROW called to create the "weathervane".
PROCEDURES USED:
GETROT - Computes rotation from the FITS header
ONE_ARROW - Draw a labeled arrow
ZPARCHECK
REVISON HISTORY:
written by B. Boothman 2/5/86
Recoded with new procedures ONE_ARROW, ONE_RAY. R.S.Hill,HSTX,5/20/92
Added separate determination for N and E arrow to properly display
arrows irregardless of handedness or other peculiarities and added
/NotVertex keyword to improve positioning of figure. E.Deutsch 1/10/93
Added /DATA and /NORMAL keywords W. Landsman July 1993
Recognize GSSS header W. Landsman June 1993
Added /FONT keyword W. Landsman April 1995
Modified to work correctly for COLOR=0 J.Wm.Parker, HITC 1995 May 25
Work correctly for negative CDELT values W. Landsman Feb. 1996
Converted to IDL V5.0 W. Landsman September 1997
Use GETROT to compute rotation W. Landsman June 2003
Restored /NotVertex keyword which was not working after June 2003 change
W. Landsman January 2004
(See goddard/pro/astro/arrows.pro)
NAME:
ASINH
PURPOSE:
Return the inverse hyperbolic sine of the argument
EXPLANATION:
The inverse hyperbolic sine is used for the calculation of asinh
magnitudes, see Lupton et al. (1999, AJ, 118, 1406)
CALLING SEQUENCE
result = asinh( x)
INPUTS:
X - hyperbolic sine, numeric scalar or vector or multidimensional array
(not complex)
OUTPUT:
result - inverse hyperbolic sine, same number of elements as X
double precision if X is double, otherwise floating pt.
METHOD:
Expression given in Numerical Recipes, Press et al. (1992), eq. 5.6.7
Note that asinh(-x) = -asinh(x) and that asinh(0) = 0. and that
if y = asinh(x) then x = sinh(y).
REVISION HISTORY:
Written W. Landsman February, 2001
Work for multi-dimensional arrays W. Landsman August 2002
Simplify coding, and work for scalars again W. Landsman October 2003
(See goddard/pro/math/asinh.pro)
NAME: ASTDISP PURPOSE: Print astronomical and pixel coordinates in a standard format EXPLANATION: This procedure (ASTrometry DISPlay) prints the astronomical and pixel coordinates in a standard format. X,Y must be supplied. RA,DEC may also be supplied, and a data number (DN) may also be supplied. With use of the Coords= keyword, a string containing the formatted data can be returned in addition or instead (with /silent) of printing. CALLING SEQUENCE: ASTDISP, x, y, [Ra, Dec, DN, COORD = , /SILENT ] INPUT: X - The X pixel coordinate(s), scalar or vector Y - The Y pixel coordinate(s), scalar or vector OPTIONAL INPUTS: RA - Right Ascention in *degrees*, scalar or vector DEC - DEClination in *degrees*, scalar or vector (if RA is supplied, DEC must also be supplied) DN - Data Number or Flux values Each of the inputs X,Y, RA, DEC, DN should have the same number of elements OPTIONAL INPUT KEYWORDS: SILENT Prevents printing. Only useful when used with Coords= OUTPUT: Printed positions in both degrees and sexigesimal format All passed variables remain unchanged OPTIONAL KEYWORD OUTPUT: COORDS Returns the formatted coordinates in a string PROCEDURES CALLED: ADSTRING - used to format the RA and Dec HISTORY: 10-AUG-90 Version 1 written by Eric W. Deutsch 20-AUG-91 Converted to standard header. Vectorized Code. E. Deutsch 20-NOV-92 Added Coords= and /silent. E.Deutsch Converted to IDL V5.0 W. Landsman September 1997
(See goddard/pro/astro/astdisp.pro)
NAME:
ASTRMFIX
PURPOSE:
Calculate a rough HST WFPC or FOC astrometry solution
EXPLANATION:
This program will calculate a rough HST WFPC or FOC astrometry solution
using the keyword PSANGLEV3 which gives the angle of the V3 axis of
HST. Called by WFPCREAD.
CALLING SEQUENCE:
AstrmFix, hdr, chip
INPUT - OUTPUT:
hdr - FITS header (string array) from either WFPC or FOC. Header will
be updated with rough astrometry
INPUT:
chip - Scalar (typically 0-3) giving the WFPC chip to read.
PROCEDURES CALLED:
EXTAST, SXPAR(), SXADDPAR
HISTORY:
??-???-???? Written by Eric W. Deutsch
22-OCT-1992 Changed all calculations to double precision. (E. Deutsch)
22-OCT-1992 Updated PC Pixel size of 0.04389 from WFPC IDT OV/SV manual(EWD)
22-OCT-1992 Updated WF Pixel size of 0.1016 from WFPC IDT OV/SV manual(EWD)
11-JAN-1993 Added warning message and changed CD001001... to CD1_1... (EWD)
Converted to IDL V5.0 W. Landsman September 1997
Remove calls to obsolete !ERR variable W. Landsman December 2000
(See goddard/pro/sdas/astrmfix.pro)
NAME:
ASTRO
PURPOSE:
Interactive utility for precession and coordinate conversion.
CALLING SEQUENCE:
ASTRO, [ selection, EQUINOX =, /FK4]
OPTIONAL INPUT:
SELECTION - Scalar Integer (0-6) giving the the particular astronomical
utility to be used. (0) Precession, (1) RA, Dec (2000) to Galactic
coordinates, (2) Galactic to RA,Dec (2000) (3) RA,Dec (2000) to
Ecliptic, (4) Ecliptic to RA, Dec, (5) Ecliptic to Galactic, (6) Galactic
to Ecliptic. Program will prompt for SELECTION if this
parameter is omitted.
OPTIONAL KEYWORD INPUT:
EQUINOX - numeric scalar specifying the equinox to use when converting
between celestial and other coordinates. If not supplied,
then the RA and Dec will be assumed to be in EQUINOX J2000.
This keyword is ignored by the precession utility. For
example, to convert from RA and DEC (J1975) to Galactic
coordinates:
IDL> astro, 1, E=1975
/FK4 - If this keyword is set and nonzero, then calculations are done
in the FK4 system. For example, to convert from RA and Dec
(B1975) to Galactic coordinates
IDL> astro,1, E=1975,/FK4
METHOD:
ASTRO uses PRECESS to compute precession, and EULER to compute
coordinate conversions. The procedure GET_COORDS is used to
read the coordinates, and ADSTRING to format the RA,Dec output.
NOTES:
(1) ASTRO temporarily sets !QUIET to suppress compilation messages and
keep a pretty screen display.
(2) ASTRO was changed in December 1998 to use J2000 as the default
equinox, **and may be incompatible with earlier calls.***
(3) A nice online page for coordinate conversions is available at
http://heasarc.gsfc.nasa.gov/cgi-bin/Tools/convcoord/convcoord.pl
PROCEDURES USED:
Procedures: GET_COORDS, EULER Function: ADSTRING
REVISION HISTORY
Written, W. Landsman November 1987
Code cleaned up W. Landsman October 1991
Added Equinox keyword, call to GET_COORDS, W. Landsman April, 1992
Allow floating point equinox input J. Parker/W. Landsman July 1996
Make FK5 the default, add FK4 keyword
(See goddard/pro/astro/astro.pro)
NAME:
ASTROLIB
PURPOSE:
Add the non-standard system variables used by the IDL Astronomy Library
EXPLANATION:
Also defines the environment variable or VMS
logical ASTRO_DATA pointing to the directory containing data files
associated with the IDL Astronomy library (system dependent).
CALLING SEQUENCE:
ASTROLIB
INPUTS:
None.
OUTPUTS:
None.
METHOD:
The non-standard system variables !PRIV, !DEBUG, !TEXTUNIT, and
!TEXTOUT are added using DEFSYSV.
REVISION HISTORY:
Written, Wayne Landsman, July 1986.
Use DEFSYSV instead of ADDSYSVAR December 1990
Converted to IDL V5.0 W. Landsman September 1997
Test for system variable existence before definition July 2001
(See goddard/pro/misc/astrolib.pro)
NAME:
AUTOHIST
PURPOSE:
Draw a histogram using automatic bin-sizing.
EXPLANATION
AUTOHIST chooses a number of bins (initially, SQRT(2*N). If this leads
to a histogram in which > 1/5 of the central 50% of the bins are empty,
it decreases the number of bins and tries again. The minimum # bins is
5. The max=199. Called by HISTOGAUSS and HALFAGAUSS.
CALLING SEQUENCE:
AUTOHIST, Sample, XLines, Ylines, XCenters, YCenters, [/NOPLOT, ]
...Plotting Keywords
INPUT:
Sample = the vector to be histogrammed
OUTPUT:
XLINES = vector of x coordinates of the points that trace the rectangular
histogram bins
YLINES = vector of y coordinates. To draw the histogram plot YLINES vs
XLINES
XCENTERS = the x values of the bin centers
YCENTERS = the corresponding y values
OPTIONAL INPUT KEYWORDS:
/NOPLOT If set, nothing is drawn
Any plotting keywords (e.g. XTITLE) may be supplied to AUTOHIST through
the _EXTRA facility.
REVISION HISTORY:
Written, H. Freudenreich, STX, 1/91
1998 March 17 - Changed shading of histogram. RSH, RSTX
V5.0 update, _EXTRA keywords W. Landsman April 2002
Added NOCLIP keyword for POLYFILL call C. Paxson/W. Landsman July 2003
(See goddard/pro/robust/autohist.pro)
NAME:
AVG
PURPOSE:
Return the average value of an array, or 1 dimension of an array
EXPLANATION:
Calculate the average value of an array (in which case AVG is identical
to the RSI procedure mean.pro), or calculate the average
value over one dimension of an array as a function of all the other
dimensions.
CALLING SEQUENCE:
RESULT = AVG( ARRAY, [ DIMENSION, /NAN, /DOUBLE ] )
INPUTS:
ARRAY = Input array. May be any type except string.
OPTIONAL INPUT PARAMETERS:
DIMENSION = Optional dimension to do average over, integer scalar
OPTIONAL KEYWORD INPUT:
/NAN - Set this keyword to cause the routine to check for occurrences of
the IEEE floating-point value NaN in the input data. Elements with
the value NaN are treated as missing data.
/DOUBLE - By default, if the input Array is double-precision, complex,
or double complex, the result is of the same type; 64 bit
integers are also returned as double. Otherwise the result
the result is floating-point. Use of the /DOUBLE keyword
forces a double precision output. Note that internal
computations are always done in double precision.
OUTPUTS:
The average value of the array when called with one parameter.
If DIMENSION is passed, then the result is an array with all the
dimensions of the input array except for the dimension specified,
each element of which is the average of the corresponding vector
in the input array.
For example, if A is an array with dimensions of (3,4,5), then the
command B = AVG(A,1) is equivalent to
B = FLTARR(3,5)
FOR J = 0,4 DO BEGIN
FOR I = 0,2 DO BEGIN
B[I,J] = TOTAL( A[I,*,J] ) / 4.
ENDFOR
ENDFOR
RESTRICTIONS:
Dimension specified must be valid for the array passed; otherwise the
input array is returned as the output array.
PROCEDURE:
AVG(ARRAY) = TOTAL(ARRAY, /DOUBLE)/N_ELEMENTS(ARRAY) when called with
one parameter.
MODIFICATION HISTORY:
William Thompson Applied Research Corporation
July, 1986 8201 Corporate Drive
Landover, MD 20785
Converted to Version 2 July, 1990
Replace SUM call with TOTAL W. Landsman May, 1992
Converted to IDL V5.0 W. Landsman September 1997
Added /NAN keyword W. Landsman July 2000
Accept a scalar input value W. Landsman/jimm@berkeley November 2000
Internal calculations always in double precision W. Landsman March 2002
Return NAN if all values in array are NAN W. Landsman April 2002
Fixed coding bug if all values in array are NAN W. Landsman Jan 2004
(See goddard/pro/math/avg.pro)
NAME:
A_b
PURPOSE:
Compute B band interstellar extinction according to the RC2.
EXPLANATION:
The predicted B band extinction is computed as a function of
Galactic position using the 21 parameter function given by
deVaucouleurs in the 2nd Reference Catalog of Galaxies (RC2). Note
that this formula was not used for the RC3 and that reddenings
were instead obtained from the Burstein-Heiles 21 cm maps.
CALLING SEQUENCE:
result = A_b( l2, b2)
INPUT PARAMETERS
l2 = Galactic longitude (degrees), scalar or vector
b2 = Galactic latitude (degrees), scalar or vector
OUTPUT PARAMETERS
RESULT - Interstellar extinction Ab in magnitudes, same number of
elements as input l2 and b2 parameters
NOTES:
The controversial aspect of the deVaucouleurs reddening curve
is that it predicts an extinction of about 0.2 at the poles
The parameters used here differ from the ones printed in the RC2
but are the ones actually used for entries in the catalog
(see Rowan-Robinson 1985)
This procedure is mainly of historical interest only, and reddening
is now better determined using dust maps, such as those available at
http://astro.berkeley.edu/davis/dust/index.html
REVISION HISTORY
Written by R. Cornett and W. Landsman, STX October 1987
Vectorized code W. Landsman STX December 1992
Converted to IDL V5.0 W. Landsman September 1997
(See goddard/pro/astro/a_b.pro)
NAME:
BARYVEL
PURPOSE:
Calculates heliocentric and barycentric velocity components of Earth.
EXPLANATION:
BARYVEL takes into account the Earth-Moon motion, and is useful for
radial velocity work to an accuracy of ~1 m/s.
CALLING SEQUENCE:
BARYVEL, dje, deq, dvelh, dvelb, [ JPL = ]
INPUTS:
DJE - (scalar) Julian ephemeris date.
DEQ - (scalar) epoch of mean equinox of dvelh and dvelb. If deq=0
then deq is assumed to be equal to dje.
OUTPUTS:
DVELH: (vector(3)) heliocentric velocity component. in km/s
DVELB: (vector(3)) barycentric velocity component. in km/s
The 3-vectors DVELH and DVELB are given in a right-handed coordinate
system with the +X axis toward the Vernal Equinox, and +Z axis
toward the celestial pole.
OPTIONAL KEYWORD SET:
JPL - if /JPL set, then BARYVEL will call the procedure JPLEPHINTERP
to compute the Earth velocity using the full JPL ephemeris.
The JPL ephemeris FITS file JPLEPH.405 must exist in either the
current directory, or in the directory specified by the
environment variable ASTRO_DATA. Alternatively, the JPL keyword
can be set to the full path and name of the ephemeris file.
A copy of the JPL ephemeris FITS file is available in
http://idlastro.gsfc.nasa.gov/ftp/data/
PROCEDURES CALLED:
Function PREMAT() -- computes precession matrix
JPLEPHREAD, JPLEPHINTERP, TDB2TDT - if /JPL keyword is set
NOTES:
Algorithm taken from FORTRAN program of Stumpff (1980, A&A Suppl, 41,1)
Stumpf claimed an accuracy of 42 cm/s for the velocity. A
comparison with the JPL FORTRAN planetary ephemeris program PLEPH
found agreement to within about 65 cm/s between 1986 and 1994
If /JPL is set (using JPLEPH.405 ephemeris file) then velocities are
given in the ICRS system; otherwise in the FK4 system.
EXAMPLE:
Compute the radial velocity of the Earth toward Altair on 15-Feb-1994
using both the original Stumpf algorithm and the JPL ephemeris
IDL> jdcnv, 1994, 2, 15, 0, jd ;==> JD = 2449398.5
IDL> baryvel, jd, 2000, vh, vb ;Original algorithm
==> vh = [-17.07809, -22.80063, -9.885281] ;Heliocentric km/s
==> vb = [-17.08083, -22.80471, -9.886582] ;Barycentric km/s
IDL> baryvel, jd, 20000, vh, vb, /jpl ;JPL ephemeris
==> vh = [-17.10746, -22.78912, -9.879800] ;Heliocentric km/s
==> vb = [-17.11591, -22.78269, -9.876785] ;Barycentric km/s
IDL> ra = ten(19,50,46.77)*15/!RADEG ;RA in radians
IDL> dec = ten(08,52,3.5)/!RADEG ;Dec in radians
IDL> v = vb(0)*cos(dec)*cos(ra) + $ ;Project velocity toward star
vb(1)*cos(dec)*sin(ra) + vb(2)*sin(dec)
REVISION HISTORY:
Jeff Valenti, U.C. Berkeley Translated BARVEL.FOR to IDL.
W. Landsman, Cleaned up program sent by Chris McCarthy (SfSU) June 1994
Converted to IDL V5.0 W. Landsman September 1997
Added /JPL keyword W. Landsman July 2001
(See goddard/pro/astro/baryvel.pro)
NAME:
BIWEIGHT_MEAN
PURPOSE:
Calculate the center and dispersion (like mean and sigma) of a
distribution using bisquare weighting.
CALLING SEQUENCE:
Mean = BIWEIGHT_MEAN( Vector, [ Sigma, Weights ] )
INPUTS:
Vector = Distribution in vector form
OUTPUT:
Mean - The location of the center.
OPTIONAL OUTPUT ARGUMENTS:
Sigma = An outlier-resistant measure of the dispersion about the
center, analogous to the standard deviation.
Weights = The weights applied to the data in the last iteration,
floating point vector
NOTES:
Since a sample mean scaled by sigma/sqrt(N), has a Student's T
distribution, the half-width of the 95% confidence interval for
the sample mean can be determined as follows:
ABS( T_CVF( .975, .7*(N-1) )*SIGMA/SQRT(N) )
where N = number of points, and 0.975 = 1 - (1 - 0.95)/2.
PROCEDURES USED:
ROBUST_SIGMA()
REVISION HISTORY
Written, H. Freudenreich, STX, 12/89
Modified 2/94, H.T.F.: use a biweighted standard deviation rather than
median absolute deviation.
Modified 2/94, H.T.F.: use the fractional change in SIGMA as the
convergence criterion rather than the change in center/SIGMA.
Modified May 2002 Use MEDIAN(/EVEN)
Modified October 2002, Faster computation of weights
Corrected documentation on 95% confidence interval of mean
P.Broos/W. Landsman July 2003
(See goddard/pro/robust/biweight_mean.pro)
NAME: BLINK PURPOSE: To allow the user to alternatively examine two or more windows within a single window. CALLING SEQUENCE: BLINK, Wndw [, T] INPUTS: Wndw A vector containing the indices of the windows to blink. T The time to wait, in seconds, between blinks. This is optional and set to 1 if not present. OUTPUTS: None. PROCEDURE: The images contained in the windows given are written to a pixmap. The contents of the the windows are copied to a display window, in order, until a key is struck. EXAMPLE: Blink windows 0 and 2 with a wait time of 3 seconds IDL> blink, [0,2], 3 MODIFICATION HISTORY: Written by Michael R. Greason, STX, 2 May 1990. Allow different size windows Wayne Landsman August, 1991 Converted to IDL V5.0 W. Landsman September 1997
(See goddard/pro/tv/blink.pro)
NAME:
BLKSHIFT
AUTHOR:
Craig B. Markwardt, NASA/GSFC Code 662, Greenbelt, MD 20770
craigm@lheamail.gsfc.nasa.gov
PURPOSE:
Shift a block of data to a new position in a file (possibly overlapping)
MAJOR TOPICS:
File I/O
CALLING SEQUENCE:
BLKSHIFT, UNIT, POS, [ DELTA, TO=TO, /NOZERO, ERRMSG=ERRMSG,
BUFFERSIZE=BUFFERSIZE ]
DESCRIPTION:
BLKSHIFT moves a block of data forward or backward, to a new
position in a data file. The old and new positions of the block
can overlap safely.
The new position can be specified with either the DELTA parameter,
which gives the number of bytes to move forward (positive delta) or
backward (negative delta); or the TO keyword, which give the new
absolute starting position of the block.
The block can be moved beyond the current end of file point, in
which case the intervening gap is filled with zeros (optionally).
The gap left at the old position of the block is also optionally
zero-filled. If a set of data up to the end of the file is being
moved forward (thus making the file smaller) and the IDL version is
5.6 or larger (so that the TRUNCATE_LUN procedure is available) then
the file is truncated at the new end.
INPUTS:
UNIT - a logical unit number, opened for reading and writing.
POS - POS[0] is the position of the block in the file, in bytes,
before moving. POS[1], if present, is the size of the block
in bytes. If POS[1] is not given, then the block is from
POS[0] to the end of the file.
DELTA - the (optional) offset in bytes between the old and new
positions, from the start of the block. Positive values
indicate moving the data forward (toward the end of file),
and negative values indicate moving the data backward
(toward the beginning of the file). One of DELTA and TO
must be specified; DELTA overrides the TO keyword.
Attempts to move the block beyond the end of the file will
succeed. A block can never be moved beyond the beginning
of the file; it will be moved to the beginning instead.
KEYWORD PARAMETERS:
TO - the absolute file offset in bytes for the new start of the
block. One of DELTA and TO must be specified; DELTA
overrides the TO keyword.
NOZERO - if set, then newly created gaps will not be explicitly
zeroed. However, for some operating systems (Mac and
VMS), zeroing is required and will be done anyway.
ERRMSG - If defined and passed, then any error messages will be
returned to the user in this parameter rather than
depending on the MESSAGE routine in IDL. If no errors
are encountered, then a null string is returned. In
order to use this feature, ERRMSG must be defined first,
e.g.
ERRMSG = ''
FXBGROW, ERRMSG=ERRMSG, ...
IF ERRMSG NE '' THEN ...
BUFFERSIZE - the maximum buffer size for transfers, in bytes.
Larger values of this keyword impose larger memory
requirements on the application; smaller values will
lead to more transfer operations.
Default: 32768 (bytes)
MODIFICATION HISTORY:
Written, CM, Apr 2000
Documented and re-written, CM, 20 Jul 2000
Renamed from FXSHIFT to BLKSHIFT, CM, 21 Jul 2000
Documentation, CM, 12 Dec 2002
Truncate if moving data block forward from the end of file
using TRUNCATE_LUN W. Landsman Feb. 2005
(See goddard/pro/misc/blkshift.pro)
NAME: BOOST_ARRAY PURPOSE: Append one array onto a destination array EXPLANATION: Add array APPEND to array DESTINATION, allowing the dimensions of DESTINATION to adjust to accomodate it. If both input arrays have the same number of dimensions, then the output array will have one additional dimension. Otherwise, the last dimension of DESTINATION will be incremented by one. CATEGORY: Utility CALLING SEQUENCE: BOOST_ARRAY, DESTINATION, APPEND INPUT: DESTINATION = Array to be expanded. APPEND = Array to append to DESTINATION. OUTPUTS: DESTINATION = Expanded output array. RESTRICTIONS: DESTINATION and APPEND have to be either both of type string or both of numerical types. APPEND cannot have more dimensions than DESTINATION. MODIFICATION HISTOBY: Written Aug'88 (DMZ, ARC) Modified Sep'89 to handle byte arrays (DMZ) Modifed to version 2, Paul Hick (ARC), Feb 1991 Removed restriction to 2D arrays, William Thompson (ARC), Feb 1992. Converted to IDL V5.0 W. Landsman September 1997
(See goddard/pro/misc/boost_array.pro)
NAME:
BOXAVE
PURPOSE:
Box-average a 1 or 2 dimensional array.
EXPLANATION:
This procedure differs from the intrinsic REBIN function in the
following 2 ways:
(1) the box size parameter is specified rather than the output
array size
(2) for INTEGER arrays, BOXAVE computes intermediate steps using REAL*4
arithmetic. This is considerably slower than REBIN but avoids
integer truncation
A version of BOXAVE() that supports 64 bit integers is available for
V5.4 or later in http://idlastro.gsfc.nasa.gov/ftp/v54/
CALLING SEQUENCE:
result = BOXAVE( Array, Xsize,[ Ysize ] )
INPUTS:
ARRAY - Two dimensional input Array to be box-averaged. Array may be
one or 2 dimensions and of any type except character.
OPTIONAL INPUTS:
XSIZE - Size of box in the X direction, over which the array is to
be averaged. If omitted, program will prompt for this
parameter.
YSIZE - For 2 dimensional arrays, the box size in the Y direction.
If omitted, then the box size in the X and Y directions are
assumed to be equal
OUTPUT:
RESULT - Output array after box averaging. If the input array has
dimensions XDIM by YDIM, then RESULT has dimensions
XDIM/NBOX by YDIM/NBOX. The type of RESULT is the same as
the input array. However, the averaging is always computed
using REAL arithmetic, so that the calculation should be exact.
If the box size did not exactly divide the input array, then
then not all of the input array will be boxaveraged.
PROCEDURE:
BOXAVE boxaverages all points simultaneously using vector subscripting
NOTES:
If im_int is a 512 x 512 integer array, then the two statements
IDL> im = fix(round(rebin(float(im_int), 128, 128)))
IDL> im = boxave( im_int,4)
give equivalent results. The use of REBIN is faster, but BOXAVE is
is less demanding on virtual memory, since one does not need to make
a floating point copy of the entire array.
REVISION HISTORY:
Written, W. Landsman, October 1986
Call REBIN for REAL*4 and REAL*8 input arrays, W. Landsman Jan, 1992
Removed /NOZERO in output array definition W. Landsman 1995
Fixed occasional integer overflow problem W. Landsman Sep. 1995
Allow unsigned data types W. Landsman Jan. 2000
(See goddard/pro/image/boxave.pro)
NAME:
BPRECESS
PURPOSE:
Precess positions from J2000.0 (FK5) to B1950.0 (FK4)
EXPLANATION:
Calculates the mean place of a star at B1950.0 on the FK4 system from
the mean place at J2000.0 on the FK5 system.
CALLING SEQUENCE:
bprecess, ra, dec, ra_1950, dec_1950, [ MU_RADEC = , PARALLAX =
RAD_VEL =, EPOCH = ]
INPUTS:
RA,DEC - Input J2000 right ascension and declination in *degrees*.
Scalar or N element vector
OUTPUTS:
RA_1950, DEC_1950 - The corresponding B1950 right ascension and
declination in *degrees*. Same number of elements as
RA,DEC but always double precision.
OPTIONAL INPUT-OUTPUT KEYWORDS
MU_RADEC - 2xN element double precision vector containing the proper
motion in seconds of arc per tropical *century* in right
ascension and declination.
PARALLAX - N_element vector giving stellar parallax (seconds of arc)
RAD_VEL - N_element vector giving radial velocity in km/s
The values of MU_RADEC, PARALLAX, and RADVEL will all be modified
upon output to contain the values of these quantities in the
B1950 system. The parallax and radial velocity will have a very
minor influence on the B1950 position.
EPOCH - scalar giving epoch of original observations, default 2000.0d
This keyword value is only used if the MU_RADEC keyword is not set.
NOTES:
The algorithm is taken from the Explanatory Supplement to the
Astronomical Almanac 1992, page 186.
Also see Aoki et al (1983), A&A, 128,263
BPRECESS distinguishes between the following two cases:
(1) The proper motion is known and non-zero
(2) the proper motion is unknown or known to be exactly zero (i.e.
extragalactic radio sources). In this case, the reverse of
the algorithm in Appendix 2 of Aoki et al. (1983) is used to
ensure that the output proper motion is exactly zero. Better
precision can be achieved in this case by inputting the EPOCH
of the original observations.
The error in using the IDL procedure PRECESS for converting between
B1950 and J1950 can be up to 1.5", mainly in right ascension. If
better accuracy than this is needed then BPRECESS should be used.
An unsystematic comparison of BPRECESS with the IPAC precession
routine (http://nedwww.ipac.caltech.edu/forms/calculator.html) always
gives differences less than 0.15".
EXAMPLE:
The SAO2000 catalogue gives the J2000 position and proper motion for
the star HD 119288. Find the B1950 position.
RA(2000) = 13h 42m 12.740s Dec(2000) = 8d 23' 17.69''
Mu(RA) = -.0257 s/yr Mu(Dec) = -.090 ''/yr
IDL> mu_radec = 100D* [ -15D*.0257, -0.090 ]
IDL> ra = ten(13, 42, 12.740)*15.D
IDL> dec = ten(8, 23, 17.69)
IDL> bprecess, ra, dec, ra1950, dec1950, mu_radec = mu_radec
IDL> print, adstring(ra1950, dec1950,2)
===> 13h 39m 44.526s +08d 38' 28.63"
REVISION HISTORY:
Written, W. Landsman October, 1992
Vectorized, W. Landsman February, 1994
Treat case where proper motion not known or exactly zero November 1994
Handling of arrays larger than 32767 Lars L. Christensen, march, 1995
Converted to IDL V5.0 W. Landsman September 1997
Fixed bug where A term not initialized for vector input
W. Landsman February 2000
(See goddard/pro/astro/bprecess.pro)
NAME:
BREAK_PATH()
PURPOSE:
Breaks up a path string into its component directories.
CALLING SEQUENCE:
Result = BREAK_PATH( PATHS [ /NoCurrent])
INPUTS:
PATHS = A string containing one or more directory paths. The
individual paths are separated by commas, although in UNIX,
colons can also be used. In other words, PATHS has the same
format as !PATH, except that commas can be used as a separator
regardless of operating system.
A leading $ can be used in any path to signal that what follows
is an environmental variable, but the $ is not necessary. (In
VMS the $ can either be part of the path, or can signal logical
names for compatibility with Unix.) Environmental variables
can themselves contain multiple paths.
OUTPUT:
The result of the function is a string array of directories.
Unless the NOCURRENT keyword is set, the first element of the array is
always the null string, representing the current directory. All the
other directories will end in the correct separator character for the
current operating system.
OPTIONAL INPUT KEYWORD:
/NOCURRENT = If set, then the current directory (represented by
the null string) will not automatically be prepended to the
output.
PROCEDURE CALLS:
None.
REVISION HISTORY:
Version 1, William Thompson, GSFC, 6 May 1993.
Added IDL for Windows compatibility.
Version 2, William Thompson, GSFC, 16 May 1995
Added keyword NOCURRENT
Version 3, William Thompson, GSFC, 29 August 1995
Modified to use OS_FAMILY
Version 4, Zarro, GSFC, 4 August 1997
Added trim to input
Converted to IDL V5.0 W. Landsman 25-Nov-1997
Fix directory character on Macintosh system A. Ferro February 2000
Use STRSPLIT instead of STR_SEP() W. Landsman July 2002
(See goddard/pro/misc/break_path.pro)
NAME:
BSORT
PURPOSE:
Function to sort data into ascending order, like a simple bubble sort.
EXPLANATION:
Original subscript order is maintained when values are equal (FIFO).
(This differs from the IDL SORT routine alone, which may rearrange
order for equal values)
CALLING SEQUENCE:
result = bsort( array, [ asort, /INFO, /REVERSE ] )
INPUT:
Array - array to be sorted
OUTPUT:
result - sort subscripts are returned as function value
OPTIONAL OUTPUT:
Asort - sorted array
OPTIONAL KEYWORD INPUTS:
/REVERSE - if this keyword is set, and non-zero, then data is sorted
in descending order instead of ascending order.
/INFO = optional keyword to cause brief message about # equal values.
HISTORY
written by F. Varosi Oct.90:
uses WHERE to find equal clumps, instead of looping with IF ( EQ ).
compatible with string arrays, test for degenerate array
20-MAY-1991 JKF/ACC via T AKE- return indexes if the array to
be sorted has all equal values.
Aug - 91 Added REVERSE keyword W. Landsman
Always return type LONG W. Landsman August 1994
Converted to IDL V5.0 W. Landsman September 1997
(See goddard/pro/misc/bsort.pro)
NAME:
CALZ_UNRED
PURPOSE:
Deredden a galaxy spectrum using the Calzetti et al. (2000) recipe
EXPLANATION:
Calzetti et al. (2000, ApJ 533, 682) developed a recipe for dereddening
the spectra of galaxies where massive stars dominate the radiation output,
valid between 0.12 to 2.2 microns. (CALZ_UNRED extrapolates between
0.12 and 0.0912 microns.)
CALLING SEQUENCE:
CALZ_UNRED, wave, flux, ebv, [ funred, R_V = ]
INPUT:
WAVE - wavelength vector (Angstroms)
FLUX - calibrated flux vector, same number of elements as WAVE
If only 3 parameters are supplied, then this vector will
updated on output to contain the dereddened flux.
EBV - color excess E(B-V), scalar. If a negative EBV is supplied,
then fluxes will be reddened rather than deredenned.
Note that the supplied color excess should be that derived for
the stellar continuum, EBV(stars), which is related to the
reddening derived from the gas, EBV(gas), via the Balmer
decrement by EBV(stars) = 0.44*EBV(gas)
OUTPUT:
FUNRED - unreddened flux vector, same units and number of elements
as FLUX. FUNRED values will be zeroed outside valid domain
Calz_unred (0.0912 - 2.2 microns).
OPTIONAL INPUT KEYWORD:
R_V - Ratio of total to selective extinction, default = 4.05.
Calzetti et al. (2000) estimate R_V = 4.05 +/- 0.80 from optical
-IR observations of 4 starbursts.
EXAMPLE:
Estimate how a flat galaxy spectrum (in wavelength) between 1200 A
and 3200 A is altered by a reddening of E(B-V) = 0.1.
IDL> w = 1200 + findgen(40)*50 ;Create a wavelength vector
IDL> f = w*0 + 1 ;Create a "flat" flux vector
IDL> calz_unred, w, f, -0.1, fnew ;Redden (negative E(B-V)) flux vector
IDL> plot,w,fnew
NOTES:
Use the 4 parameter calling sequence if you wish to save the
original flux vector.
PROCEDURE CALLS:
POLY()
REVISION HISTORY:
Written W. Landsman Raytheon ITSS December, 2000
(See goddard/pro/astro/calz_unred.pro)
NAME:
CCM_UNRED
PURPOSE:
Deredden a flux vector using the CCM 1989 parameterization
EXPLANATION:
The reddening curve is that of Cardelli, Clayton, and Mathis (1989 ApJ.
345, 245), including the update for the near-UV given by O'Donnell
(1994, ApJ, 422, 158). Parameterization is valid from the IR to the
far-UV (3.5 microns to 0.1 microns).
Users might wish to consider using the alternate procedure FM_UNRED
which uses the extinction curve of Fitzpatrick (1999).
CALLING SEQUENCE:
CCM_UNRED, wave, flux, ebv, funred, [ R_V = ]
or
CCM_UNRED, wave, flux, ebv, [ R_V = ]
INPUT:
WAVE - wavelength vector (Angstroms)
FLUX - calibrated flux vector, same number of elements as WAVE
If only 3 parameters are supplied, then this vector will
updated on output to contain the dereddened flux.
EBV - color excess E(B-V), scalar. If a negative EBV is supplied,
then fluxes will be reddened rather than deredenned.
OUTPUT:
FUNRED - unreddened flux vector, same units and number of elements
as FLUX
OPTIONAL INPUT KEYWORD
R_V - scalar specifying the ratio of total selective extinction
R(V) = A(V) / E(B - V). If not specified, then R_V = 3.1
Extreme values of R(V) range from 2.75 to 5.3
EXAMPLE:
Determine how a flat spectrum (in wavelength) between 1200 A and 3200 A
is altered by a reddening of E(B-V) = 0.1. Assume an "average"
reddening for the diffuse interstellar medium (R(V) = 3.1)
IDL> w = 1200 + findgen(40)*50 ;Create a wavelength vector
IDL> f = w*0 + 1 ;Create a "flat" flux vector
IDL> ccm_unred, w, f, -0.1, fnew ;Redden (negative E(B-V)) flux vector
IDL> plot,w,fnew
NOTES:
(1) The CCM curve shows good agreement with the Savage & Mathis (1979)
ultraviolet curve shortward of 1400 A, but is probably
preferable between 1200 and 1400 A.
(2) Many sightlines with peculiar ultraviolet interstellar extinction
can be represented with a CCM curve, if the proper value of
R(V) is supplied.
(3) Curve is extrapolated between 912 and 1000 A as suggested by
Longo et al. (1989, ApJ, 339,474)
(4) Use the 4 parameter calling sequence if you wish to save the
original flux vector.
(5) Valencic et al. (2004, ApJ, 616, 912) revise the ultraviolet CCM
curve (3.3 -- 8.0 um-1). But since their revised curve does
not connect smoothly with longer and shorter wavelengths, it is
not included here.
REVISION HISTORY:
Written W. Landsman Hughes/STX January, 1992
Extrapolate curve for wavelengths between 900 and 1000 A Dec. 1993
Use updated coefficients for near-UV from O'Donnell Feb 1994
Allow 3 parameter calling sequence April 1998
Converted to IDLV5.0 April 1998
(See goddard/pro/astro/ccm_unred.pro)
NAME:
CHECKSUM32
PURPOSE:
To compute the 32bit checksum of an array (ones-complement arithmetic)
EXPLANATION:
The 32bit checksum is adopted in the FITS Checksum convention
http://heasarc.gsfc.nasa.gov/docs/heasarc/fits/checksum.html
CALLING SEQUENCE:
CHECKSUM32, array, checksum, [/FROM_IEEE, /NoSAVE]
INPUTS:
array - any numeric idl array. If the number of bytes in the array is
not a multiple of four then it is padded with zeros internally
(the array is returned unchanged). Convert a string array
(e.g. a FITS header) to bytes prior to calling CHECKSUM32.
OUTPUTS:
checksum - unsigned long scalar, giving sum of array elements using
ones-complement arithmetic
OPTIONAL INPUT KEYWORD:
/FROM_IEEE - If this keyword is set, then the input is assumed to be in
big endian format (e.g. an untranslated FITS array). This keyword
only has an effect on little endian machines (e.g. Linux boxes).
/NoSAVE - if set, then the input array is not saved upon exiting. Use
the /NoSave keyword to save time if the input array is not needed
in further computations.
METHOD:
Uses TOTAL() to sum the array into a double precision variable. The
overflow bits beyond 2^32 are then shifted back to the least significant
bits. Due to the limited precision of a DOUBLE variable, the summing
is done in chunks determined by MACHAR(). Adapted from FORTRAN code in
heasarc.gsfc.nasa.gov/docs/heasarc/ofwg/docs/general/checksum/node30.html
Could probably be done in a cleverer way (similar to the C
implementation) but then the array-oriented TOTAL() function could not
be used.
RESTRICTIONS:
(1) Requires V5.2 or later (uses unsigned integers)
(2) Not valid for object or pointer data types
EXAMPLE:
Find the 32 bit checksum of the array x = findgen(35)
IDL> checksum32, x, s ===> s = 2920022024
FUNCTION CALLED:
IS_IEEE_BIG(), N_BYTES()
MODIFICATION HISTORY:
Written W. Landsman June 2001
Work correctly on little endian machines, added /FROM_IEEE and /NoSave
W. Landsman November 2002
Pad with zeros when array size not a multiple of 4 W.Landsman Aug 2003
Always copy to new array, somewhat slower but more robust algorithm
especially for Linux boxes W. Landsman Sep. 2004
Sep. 2004 update not implemented correctly (sigh) W. Landsman Dec 2004
(See goddard/pro/misc/checksum32.pro)
NAME:
CHECK_FITS
PURPOSE:
Check that keywords in a FITS header array match the associated data
EXPLANATION:
Given a FITS array IM, and a associated FITS or STSDAS header HDR, this
procedure will check that
(1) HDR is a string array, and IM is defined and numeric
(2) The NAXISi values in HDR are appropriate to the dimensions
of IM
(3) The BITPIX value in HDR is appropriate to the datatype of IM
If HDR contains a DATATYPE keyword (as in STSDAS headers), then this is
also checked against the datatype of of IM
If the /UPDATE keyword is present, then the FITS header will be
modified, if necessary, to force agreement with the image array
CALLING SEQUENCE:
check_FITS, im, hdr, [ dimen, idltype, /UPDATE, /NOTYPE, /SDAS, /SILENT
ERRMSG = ]'
INPUT PARAMETERS:
IM - FITS (or STSDAS) array, e.g. as read by READFITS
HDR - FITS (or STSDAS) header (string array) associated with IM
OPTIONAL OUTPUTS:
dimen - vector containing actual array dimensions
idltype- data type of the FITS array as specified in the IDL SIZE
function (1 for BYTE, 2 for INTEGER*2, 3 for INTEGER*4, etc.)
OPTIONAL KEYWORD INPUTS:
/NOTYPE - If this keyword is set, then only agreement of the array
dimensions with the FITS header are checked, and not the
data type.
/UPDATE - If this keyword is set then the BITPIX, NAXIS and DATATYPE
FITS keywords will be updated to agree with the array
/SDAS - If this keyword is set then the header is assumed to be from
an SDAS (.hhh) file. CHECK_FITS will then ensure that (1)
a DATATYPE keyword is included in the header and (2) BITPIX
is always written with positive values.
/FITS - If this keyword is present then CHECK_FITS assumes that it is
dealing with a FITS header and not an SDAS header, see notes
below.
/SILENT - If keyword is set and nonzero, the informational messages
will not be printed
OPTIONAL KEYWORD OUTPUT:
ERRMSG = If this keyword is present, then any error messages will be
returned to the user in this parameter rather than
depending on the MESSAGE routine in IDL. If no errors are
encountered, then a null string is returned.
;
PROCEDURE:
Program checks the NAXIS1 and NAXIS2 parameters in the header to
see if they match the image array dimensions.
NOTES:
An important distinction between an STSDAS header and a FITS header
is that the BITPIX value in an STSDAS header is always positive,
e.g. BITPIX=32 for REAL*4 data. Users should use either the /SDAS
or the /FITS keyword if it is important whether the STSDAS or FITS
convention for REAL*4 data is used. Otherwise, CHECK_FITS assumes
that if a DATATYPE keyword is present then it is dealing with an
STSDAS header.
PROCEDURE CALLS:
STRN(),FXADDPAR, fxpar()
MODIFICATION HISTORY:
Written, December 1991 W. Landsman Hughes/STX to replace CHKIMHD
No error returned if NAXIS=0 and IM is a scalar W. Landsman Feb 93
Fixed bug for REAL*8 STSDAS data W. Landsman July 93
Make sure NAXIS agrees with NAXISi W. Landsman October 93
Converted to IDL V5.0 W. Landsman September 1997
Allow unsigned data types W. Landsman December 1999
Allow BZERO = 0 for unsigned data types W. Landsman January 2000
Added ERRMSG keyword, W. Landsman February 2000
Use FXADDPAR to put NAXISi in proper order W. Landsman August 2000
Improper FXADDPAR call for DATATYPE keyword W. Landsman December 2000
Remove explicit setting of obsolete !err W. Landsman February 2004
(See goddard/pro/fits/check_fits.pro)
NAME:
CIC
PURPOSE:
Interpolate an irregularly sampled field using Cloud in Cell method
EXPLANATION:
This function interpolates an irregularly sampled field to a
regular grid using Cloud In Cell (nearest grid point gets
weight 1-dngp, point on other side gets weight dngp, where
dngp is the distance to the nearest grid point in units of the
cell size).
CATEGORY:
Mathematical functions, Interpolation
CALLING SEQUENCE:
Result = CIC, VALUE, POSX, NX[, POSY, NY, POSZ, NZ,
AVERAGE = average, WRAPAROUND = wraparound,
ISOLATED = isolated, NO_MESSAGE = no_message]
INPUTS:
VALUE: Array of sample weights (field values). For e.g. a
temperature field this would be the temperature and the
keyword AVERAGE should be set. For e.g. a density field
this could be either the particle mass (AVERAGE should
not be set) or the density (AVERAGE should be set).
POSX: Array of X coordinates of field samples, unit indices: [0,NX>.
NX: Desired number of grid points in X-direction.
OPTIONAL INPUTS:
POSY: Array of Y coordinates of field samples, unit indices: [0,NY>.
NY: Desired number of grid points in Y-direction.
POSZ: Array of Z coordinates of field samples, unit indices: [0,NZ>.
NZ: Desired number of grid points in Z-direction.
KEYWORD PARAMETERS:
AVERAGE: Set this keyword if the nodes contain field samples
(e.g. a temperature field). The value at each grid
point will then be the weighted average of all the
samples allocated to it. If this keyword is not
set, the value at each grid point will be the
weighted sum of all the nodes allocated to it
(e.g. for a density field from a distribution of
particles). (D=0).
WRAPAROUND: Set this keyword if you want the first grid point
to contain samples of both sides of the volume
(see below).
ISOLATED: Set this keyword if the data is isolated, i.e. not
periodic. In that case total `mass' is not conserved.
This keyword cannot be used in combination with the
keyword WRAPAROUND.
NO_MESSAGE: Suppress informational messages.
Example of default allocation of nearest grid points: n0=4, *=gridpoint.
0 1 2 3 Index of gridpoints
* * * * Grid points
|---|---|---|---| Range allocated to gridpoints ([0.0,1.0> --> 0, etc.)
0 1 2 3 4 posx
Example of ngp allocation for WRAPAROUND: n0=4, *=gridpoint.
0 1 2 3 Index of gridpoints
* * * * Grid points
|---|---|---|---|-- Range allocated to gridpoints ([0.5,1.5> --> 1, etc.)
0 1 2 3 4=0 posx
OUTPUTS:
Prints that a CIC interpolation is being performed of x
samples to y grid points, unless NO_MESSAGE is set.
RESTRICTIONS:
Field data is assumed to be periodic with the sampled volume
the basic cell, unless ISOLATED is set.
All input arrays must have the same dimensions.
Postition coordinates should be in `index units' of the
desired grid: POSX=[0,NX>, etc.
Keywords ISOLATED and WRAPAROUND cannot both be set.
PROCEDURE:
Nearest grid point is determined for each sample.
CIC weights are computed for each sample.
Samples are interpolated to the grid.
Grid point values are computed (sum or average of samples).
NOTES:
Use tsc.pro for a higher-order interpolation scheme, ngp.pro for a lower
order interpolation scheme. A standard reference for these
interpolation methods is: R.W. Hockney and J.W. Eastwood, Computer
Simulations Using Particles (New York: McGraw-Hill, 1981).
EXAMPLE:
nx=20
ny=10
posx=randomu(s,1000)
posy=randomu(s,1000)
value=posx^2+posy^2
field=cic(value,posx*nx,nx,posy*ny,ny,/average)
surface,field,/lego
MODIFICATION HISTORY:
Written by Joop Schaye, Feb 1999.
Avoid integer overflow for large dimensions P.Riley/W.Landsman Dec. 1999
(See goddard/pro/math/cic.pro)
NAME:
CIRRANGE
PURPOSE:
To force an angle into the range 0 <= ang < 360.
CALLING SEQUENCE:
CIRRANGE, ang, [/RADIANS]
INPUTS/OUTPUT:
ang - The angle to modify, in degrees. This parameter is
changed by this procedure. Can be a scalar or vector.
The type of ANG is always converted to double precision
on output.
OPTIONAL INPUT KEYWORDS:
/RADIANS - If present and non-zero, the angle is specified in
radians rather than degrees. It is forced into the range
0 <= ang < 2 PI.
PROCEDURE:
The angle is transformed between -360 and 360 using the MOD operator.
Negative values (if any) are then transformed between 0 and 360
MODIFICATION HISTORY:
Written by Michael R. Greason, Hughes STX, 10 February 1994.
Get rid of WHILE loop, W. Landsman, Hughes STX, May 1996
Converted to IDL V5.0 W. Landsman September 1997
(See goddard/pro/misc/cirrange.pro)
NAME:
CLEANPLOT
PURPOSE:
Reset all plotting system variables (!P,!X,!Y,!Z) to their default values
EXPLANATION:
Reset all system variables (!P,!X,!Y,!Z) which are set by the user
and which affect plotting to their default values.
CALLING SEQUENCE:
Cleanplot, [ /Silent, /ShowOnly]
INPUTS:
None
OPTIONAL KEYWORD INPUT:
/SHOWONLY - If set, then CLEANPLOT will display the plotting system
variables with nondefault values, but it will not reset them.
/SILENT - If set, then CLEANPLOT will not display a message giving the
the system variables tags being reset. One cannot set
both /SILENT and /SHOWONLY
OUTPUTS:
None
SIDE EFFECTS:
The system variables that concern plotting are reset to their default
values. A message is output for each variable changed.
The !P.CLIP and CRANGE, S, WINDOW, and REGION fields of the
!X, !Y, and !Z system variables are not checked since these are
set by the graphics device and not by the user.
PROCEDURE:
This does NOT reset the plotting device.
This does not change any system variables that don't control plotting.
RESTRICTIONS:
If user default values for !P, !X, !Y and !Z are different from
the defaults adopted below, user should change P_old etc accordingly
MODIFICATION HISTORY:
Written IDL Version 2.3.0 W. Landsman & K. Venkatakrishna May '92
Handle new system variables in V3.0.0 W. Landsman Dec 92
Assume user has at least V3.0.0 W. Landsman August 95
V5.0 has 60 instead of 30 TICKV values W. Landsman Sep. 97
Change !D.N_COLORS to !D.TABLE_SIZE for 24 bit displays
W. Landsman April 1998
Added silent keyword to supress output & modified X_old to
handle the new !X and !Y tags in IDL 5.4 S. Penton July 2000
Test for visual depth if > V5.1 W. Landsman July 2000
Macs can report a visual depth of 32 W. Landsman March 2001
Call device,get_visual_depth only for device which allow it
W. Landsman June 2001
Default !P.color is 16777215 for 16 bit systems
W. Landsman/M. Hadfield November 2001
Added ShowOnly keyword W. Landsman April 2002
(See goddard/pro/plot/cleanplot.pro)
NAME:
CNTRD
PURPOSE:
Compute the centroid of a star using a derivative search
EXPLANATION:
CNTRD uses an early DAOPHOT "FIND" centroid algorithm by locating the
position where the X and Y derivatives go to zero. This is usually a
more "robust" determination than a "center of mass" or fitting a 2d
Gaussian if the wings in one direction are affected by the presence
of a neighboring star.
CALLING SEQUENCE:
CNTRD, img, x, y, xcen, ycen, [ fwhm , /KEEPCENTER, /SILENT, /DEBUG
EXTENDBOX = ]
INPUTS:
IMG - Two dimensional image array
X,Y - Scalar or vector integers giving approximate integer stellar
center
OPTIONAL INPUT:
FWHM - floating scalar; Centroid is computed using a box of half
width equal to 1.5 sigma = 0.637* FWHM. CNTRD will prompt
for FWHM if not supplied
OUTPUTS:
XCEN - the computed X centroid position, same number of points as X
YCEN - computed Y centroid position, same number of points as Y,
floating point
Values for XCEN and YCEN will not be computed if the computed
centroid falls outside of the box, or if the computed derivatives
are non-decreasing. If the centroid cannot be computed, then a
message is displayed and XCEN and YCEN are set to -1.
OPTIONAL OUTPUT KEYWORDS:
/SILENT - Normally CNTRD prints an error message if it is unable
to compute the centroid. Set /SILENT to suppress this.
/DEBUG - If this keyword is set, then CNTRD will display the subarray
it is using to compute the centroid.
EXTENDBOX = {non-negative positive integer}. CNTRD searches a box with
a half width equal to 1.5 sigma = 0.637* FWHM to find the
maximum pixel. To search a larger area, set EXTENDBOX to
the number of pixels to enlarge the half-width of the box.
Default is 0; prior to June 2004, the default was EXTENDBOX= 3
/KeepCenter = By default, CNTRD finds the maximum pixel in a box
centered on the input X,Y coordinates, and then extracts a new
box about this maximum pixel. Set the /KeepCenter keyword
to skip then step of finding the maximum pixel, and instead use
a box centered on the input X,Y coordinates.
PROCEDURE:
Maximum pixel within distance from input pixel X, Y determined
from FHWM is found and used as the center of a square, within
which the centroid is computed as the value (XCEN,YCEN) at which
the derivatives of the partial sums of the input image over (y,x)
with respect to (x,y) = 0. In order to minimize contamination from
neighboring stars stars, a weighting factor W is defined as unity in
center, 0.5 at end, and linear in between
RESTRICTIONS:
(1) Does not recognize (bad) pixels. Use the procedure GCNTRD.PRO
in this situation.
(2) DAOPHOT now uses a newer algorithm (implemented in GCNTRD.PRO) in
which centroids are determined by fitting 1-d Gaussians to the
marginal distributions in the X and Y directions.
(3) The default behavior of CNTRD changed in June 2004 (from EXTENDBOX=3
to EXTENDBOX = 0).
(4) Stone (1989, AJ, 97, 1227) concludes that the derivative search
algorithm in CNTRD is not as effective (though faster) as a
Gaussian fit (used in GCNTRD.PRO).
MODIFICATION HISTORY:
Written 2/25/86, by J. K. Hill, S.A.S.C., following
algorithm used by P. Stetson in DAOPHOT.
Allowed input vectors G. Hennessy April, 1992
Fixed to prevent wrong answer if floating pt. X & Y supplied
W. Landsman March, 1993
Convert byte, integer subimages to float W. Landsman May 1995
Converted to IDL V5.0 W. Landsman September 1997
Better checking of edge of frame David Hogg October 2000
Avoid integer wraparound for unsigned arrays W.Landsman January 2001
Handle case where more than 1 pixel has maximum value W.L. July 2002
Added /KEEPCENTER, EXTENDBOX (with default = 0) keywords WL June 2004
(See goddard/pro/idlphot/cntrd.pro)
NAME:
COMPARE_STRUCT
PURPOSE:
Compare all matching tag names and return differences
EXPLANATION:
Compare all matching Tags names (except for "except_Tags")
between two structure arrays (may have different struct.definitions),
and return a structured List of fields found different.
CALLING SEQUENCE:
diff_List = compare_struct( struct_A, struct_B [ EXCEPT=, /BRIEF,
/FULL, /NaN, /RECUR_A, /RECUR_B )
INPUTS:
struct_A, struct_B : the two structure arrays to compare.
Struct_Name : for internal recursion use only.
OPTIONAL INPUT KEYWORDS:
EXCEPT = string array of Tag names to ignore (NOT to compare).
/BRIEF = number of differences found for each matching field
of two structures is printed.
/FULL = option to print even if zero differences found.
/NaN = if set, then tag values are considered equal if they
are both set to NaN
/RECUR_A = option to search for Tag names
in sub-structures of struct_A,
and then call compare_struct recursively
for those nested sub-structures.
/RECUR_B = search for sub-structures of struct_B,
and then call compare_struct recursively
for those nested sub-structures.
Note:
compare_struct is automatically called recursively
for those nested sub-structures in both struct_A and struct_B
(otherwise cannot take difference)
OUTPUT:
Returns a structure array describing differences found,
which can be examined using print,diff_List or help,/st,diff_List.
PROCEDURE:
Match Tag names and then use where function on tags.
EXAMPLE:
Find the tags in the !X system variable which are changed after a
simple plot.
IDL> x = !X ;Save original values
IDL> plot, indgen(25) ;Make a simple plot
IDL> help,/str,compare_struct(x,!X) ;See how structure has changed
and one will see that the tags !X.crange and !X.S are changed
by the plot.
MODIFICATION HISTORY:
written 1990 Frank Varosi STX @ NASA/GSFC (using copy_struct)
modif Aug.90 by F.V. to check and compare same # of elements only.
Converted to IDL V5.0 W. Landsman September 1997
Added /NaN keyword W. Landsman March 2004
(See goddard/pro/structure/compare_struct.pro)
NAME:
CONCAT_DIR
PURPOSE:
To concatenate directory and file names for current OS.
EXPLANATION:
The given file name is appended to the given directory name with the
format appropriate to the current operating system.
CALLING SEQUENCE:
result = concat_dir( directory, file)
INPUTS:
directory - the directory path (string)
file - the basic file name and extension (string)
can be an array of filenames.
OUTPUTS:
The function returns the concatenated string. If the file input
is a string array then the output will be a string array also.
EXAMPLES:
IDL> pixfile = concat_dir('$DIR_GIS_MODEL','pixels.dat')
IDL> file = ['f1.dat','f2.dat','f3.dat']
IDL> dir = '$DIR_NIS_CAL'
IDL> f = concat_dir(dir,file)
RESTRICTIONS:
Assumes Unix type format if os is not vms, MacOS or Windows.
The version of CONCAT_DIR available at
http://sohowww.nascom.nasa.gov/solarsoft/gen/idl/system/concat_dir.pro
includes (mostly) additional VMS-specific keywords.
CATEGORY
Utilities, Strings
REVISION HISTORY:
Prev Hist. : Yohkoh routine by M. Morrison
Written : CDS version by C D Pike, RAL, 19/3/93
Version : Version 1 19/3/93
Documentation modified Nov-94 W. Landsman
Add V4.0 support for Windows W. Landsman Aug 95
Converted to IDL V5.0 W. Landsman September 1997
Changed loops to long integer W. Landsman December 1998
Added Mac support, translate Windows environment variables,
& treat case where dirname ends in '/' W. Landsman Feb. 2000
(See goddard/pro/misc/concat_dir.pro)
NAME:
CONS_DEC
PURPOSE:
Obtain the X and Y coordinates of a line of constant declination
EXPLANATION:
Returns a set of Y pixels values, given an image with astrometry, and
either
(1) A set of X pixel values, and a scalar declination value, or
(2) A set of declination values, and a scalar X value
Form (1) can be used to find the (X,Y) values of a line of constant
declination. Form (2) can be used to find the Y positions of a set
declinations, along a line of constant X.
CALLING SEQUENCE:
Y = CONS_DEC( DEC, X, ASTR, [ ALPHA ])
INPUTS:
DEC - Declination value(s) in DEGREES (-!PI/2 < DEC < !PI/2).
If X is a vector, then DEC must be a scalar.
X - Specified X pixel value(s) for line of constant declination
If DEC is a vector, then X must be a scalar.
ASTR - Astrometry structure, as extracted from a FITS header by the
procedure EXTAST
OUTPUT:
Y - Computed set of Y pixel values. The number of Y values is the
same as either DEC or X, whichever is greater.
OPTIONAL OUTPUT:
ALPHA - the right ascensions (DEGREES) associated with the (X,Y) points
RESTRICTIONS:
Implemented only for the TANgent, SIN and CAR projections
NOTES:
The algorithm (and notation) is based on AIPS Memo 27 by Eric Greisen,
with modifications for a coordinate description (CD) matrix as
described in Paper II of Greisen & Calabretta (2002, A&A, 395, 1077).
These documents are available from
http://www.cv.nrao.edu/fits/documents/wcs/wcs.html
REVISION HISTORY:
Written, Wayne Landsman STX Co. April 1988
Use new astrometry structure, W. Landsman HSTX Jan. 1994
Use CD matrix, add SIN projection W. Landsman HSTX April, 1996
Converted to IDL V5.0 W. Landsman September 1997
Fix case where DEC is scalar, X is vector W. Landsman RITSS Feb. 2000
Fix possible sign error introduced Jan. 2000 W. Landsman May 2000
Work for the CARee' projection W. Landsman May 2003
(See goddard/pro/astrom/cons_dec.pro)
NAME:
CONS_RA
PURPOSE:
Obtain the X and Y coordinates of a line of constant right ascension
EXPLANATION:
Return a set of X pixel values given an image with astrometry,
and either
(1) a set of Y pixel values, and a scalar right ascension (or
longitude), or
(2) a set of right ascension values, and a scalar Y value.
In usage (1), CONS_RA can be used to determine the (X,Y) values
of a line of constant right ascension. In usage (2), CONS_RA can
used to determine the X positions of specified RA values, along a
line of constant Y.
CALLING SEQUENCE:
X = CONS_RA( RA, Y, ASTR, [ DEC] )
INPUTS:
RA - Right Ascension value in DEGREES (0 < RA < 360.). If Y is a
vector, then RA must be a scalar
Y - Specified Y pixel value(s) for line of constant right ascension
If RA is a vector, then Y must be a scalar
ASTR - Astrometry structure as extracted from a FITS header by the
procedure EXTAST
OUTPUTS
X - Computed set of X pixel values. The number of elements of X
is the maximum of the number of elements of RA and Y.
OPTIONAL OUTPUT:
DEC - Computed set of declinations (in DEGREES) for X,Y, coordinates
NOTES:
The algorithm (and notation) is based on AIPS Memo 27 by Eric Greisen,
with modifications for a coordinate description (CD) matrix as
described in Paper II of Calabretta & Greisen (2002, A&A, 395, 1077).
These documents are available from
http://www.cv.nrao.edu/fits/documents/wcs/wcs.html
RESTRICTIONS:
Implemented only for the TANgent, SIN and CARtesian projections
REVISION HISTORY:
Written, Wayne Landsman STX Co. April, 1988
Algorithm adapted from AIPS memo No. 27 by Eric Griessen
New astrometry structure
Converted to IDL V5.0 W. Landsman September 1997
Added SIN projection W. Landsman January 2000
Fix possible sign error introduced Jan. 2000 W. Landsman May 2000
Work for the CARee' projection W. Landsman May 2003
(See goddard/pro/astrom/cons_ra.pro)
NAME: CONVOLVE PURPOSE: Convolution of an image with a Point Spread Function (PSF) EXPLANATION: The default is to compute the convolution using a product of Fourier transforms (for speed). CALLING SEQUENCE: imconv = convolve( image1, psf, FT_PSF = psf_FT ) or: correl = convolve( image1, image2, /CORREL ) or: correl = convolve( image, /AUTO ) INPUTS: image = 2-D array (matrix) to be convolved with psf psf = the Point Spread Function, (size < or = to size of image). OPTIONAL INPUT KEYWORDS: FT_PSF = passes out/in the Fourier transform of the PSF, (so that it can be re-used the next time function is called). FT_IMAGE = passes out/in the Fourier transform of image. /CORRELATE uses the conjugate of the Fourier transform of PSF, to compute the cross-correlation of image and PSF, (equivalent to IDL function convol() with NO rotation of PSF) /AUTO_CORR computes the auto-correlation function of image using FFT. /NO_FT overrides the use of FFT, using IDL function convol() instead. (then PSF is rotated by 180 degrees to give same result) METHOD: When using FFT, PSF is centered & expanded to size of image. HISTORY: written, Frank Varosi, NASA/GSFC 1992. Converted to IDL V5.0 W. Landsman September 1997
(See goddard/pro/image/convolve.pro)
NAME:
CONV_STSDAS
PURPOSE:
Convert internal format of an STSDAS image to host machine architecture
EXPLANATION:
Converts the internal format of an STSDAS image (.hhh and .hhd file)
to the host machine architecture. Useful for copying STSDAS files
between different machines. If the host is not a VMS machine, then
by default CONV_STSDAS assumes the image originated on VMS. If the
host is VMS, then CONV_STSDAS assumes that the image originated on
an IEEE machine (e.g. SparcStation).
CALLING SEQUENCE:
CONV_STSDAS, sdas_name, [ /FROM_IEEE]
INPUTS:
sdas_name - scalar string giving name of the STSDAS image
CONV_STSDAS assumes a default header extension of .hhh --
otherwise the header extension should be included in sdas_name.
The internal format of the file will be modified by CONV_STSDAS.
OPTIONAL KEYWORD INPUT:
/FROM_IEEE - On little endian machines (OSF, windows) this keyword
indicates that the STSDAS file originated on an IEEE machine
(e.g SparcStation) rather than a VMS machine
EXAMPLE:
Suppose files test.hhd and test.hhh have been copied with FTP from
a Vax to a Sparcstation. Convert these files to the SparcStation
internal format.
IDL> conv_stsdas, 'test'
METHOD:
CONV_STSDAS reads each group image and parameter block and uses
IEEE_TO_HOST or CONV_VAX_UNIX to convert the internal format. The
converted images and parameter blocks are written back to the orginal
file.
PROCEDURE CALLS
sxopen, fdecomp, sxgpar(), sxpar(), ieee_to_host, conv_vax_unix()
NOTES:
(1) When copying STSDAS files to VMS, be sure the .hhh file is
formatted as fixed block 80 byte.
(2) CONV_STSDAS has no way of knowing if a file really came from
a different machine architecture. If it is applied to a file
that already has the correct internal format, then CONV_STSDAS
will "convert" this file and corrupt the internal format.
(3) Note that CONV_STSDAS currently does not support conversion *from*
a little-endian machine (OSF, windows)
REVISION HISTORY:
Written W. Landsman January, 1993
Don't require .hhh extension April, 1993
Increase speed by calling SXGINFO May, 1993
Converted to IDL V5.0 W. Landsman September 1997
Replace DATATYPE() with size(/TNAME) W. Landsman November 2001
(See goddard/pro/sdas/conv_stsdas.pro)
NAME:
CONV_UNIX_VAX
PURPOSE:
To convert Unix IDL data types to Vax IDL data types.
EXPLANATION:
CONV_UNIX_VAX assumes the Unix IDL data type is IEEE standard in either
big-endian or little-endian format.
CALLING SEQUENCE:
CONV_UNIX_VAX, variable, [ SOURCE_ARCH = ]
PARAMETERS:
variable - The data variable to be converted. This may be a scalar
or an array. Valid datatypes are integer, longword,
floating point, and double precision. The result of the
conversion is passed back in the original variable.
OPTIONAL INPUT KEYWORD:
SOURCE_ARCH = name (string) of source architecture
if using this function on a VAX, otherwise
!VERSION.ARCH is used to determine the conversion.
**If run on a VAX, the default is to assume the source to be
a little-endian machine with IEEE floating point
(e.g. MIPSEL or Alpha***).
RESTRICTIONS:
Requires that data be from IEEE standard Unix machines
(e.g. SUN, MIPSEL, or Alpha).
EXAMPLE:
Read a 100 by 100 matrix of floating point numbers from a data
file created on a Sun. Then convert the matrix values into
VAX format.
IDL> openr,1,'vax_float.dat
IDL> data = fltarr(100,100)
IDL> forrd,1,data
IDL> CONV_UNIX_VAX,data,SOURCE_ARCH='sparc'
MODIFICATION HISTORY:
Version 1 By John Hoegy 13-Jun-88
04-May-90 - WTT: Created CONV_UNIX_VAX from VAX2SUN,
reversing floating point procedure.
Modified P. Keegstra September 1994
Implemented MIPSEL and ALPHA architecture,
distinguishing VMS and OSF
Modified P. Keegstra February 1995
Added 386 PC based architectures
If since V5.1 then VMS is always little endian June 1998
Convert to IDL V5.0 W. Landsman June 1998
(See goddard/pro/misc/conv_unix_vax.pro)
NAME:
CONV_VAX_UNIX
PURPOSE:
To convert VAX IDL data types to UNIX (Sun,MIPS,etc.) IDL data types.
EXPLANTION:
Generally used on non-Vax machines to parse data created on Vaxes.
The architecture is obtained from IDL sys.var. !VERSION.ARCH.
CALLING SEQUENCE:
var_unix = conv_vax_unix( var_vax, [TARGET_ARCH = ] )
INPUT PARAMETER:
var_vax - The data variable to be converted. This may be a scalar
or an array. All IDL datatypes are valid (including
structures). The result of the conversion is returned by the
function.
OPTIONAL INPUT KEYWORD:
TARGET_ARCH = name (string) of desired target architecture
(e.g. 'sparc' or 'mipsel'). If not supplied, then
!VERSION.ARCH is used to determine the target architecture.
Note that CONV_VAX_UNIX will leave variables unchanged on a
VMS machine, unless the TARGET_ARCH keyword is set.
EXAMPLE:
Read a 100 by 100 matrix of floating point numbers from a data
file created on a VAX. Then convert the matrix values into Sun format.
IDL> openr,1,'vax_float.dat'
IDL> data = fltarr(100,100)
IDL> readu,1,data
IDL> data = conv_vax_unix( data )
NOTE:
Prior to IDL V5.1, the architecture "alpha" was ambiguous, since VMS
alpha IDL used VAX D-float while OSF/1 alpha IDL uses little-endian
IEEE. The program uses !VERSION.OS to do the right thing when
converting to a representation appropriate for the current
platform. To convert to a representation appropriate for
an OSF/1 alpha on a VAX or (pre V5.1) VMS alpha, please specify
the "mipsel" (or "i386") architecture.
MODIFICATION HISTORY:
Written F. Varosi August 1990
Modified P. Keegstra April 1992
Implemented MIPSEL architecture
Modified P. Keegstra July 1994
Implemented ALPHA architecture, distinguishing VMS and OSF
Modified P. Keegstra February 1995
Added 386 PC based architectures
Modified P. Keegstra March 1995
Added note, restored and fixed old specifiers
for 386 PC based architectures
Modified W. Landsman for VAX problems in V4.0 August 1995
Work for double complex variables August 1995
Remove informational messages under VMS August 1997
Since V5.1, IDL VMS uses little endian IEEE June 1998
Convert to IDL V5.0 June 1998
(See goddard/pro/misc/conv_vax_unix.pro)
NAME:
COPY_STRUCT
PURPOSE:
Copy all fields with matching tag names from one structure to another
EXPLANATION:
COPY_STRUCT is similar to the intrinisc STRUCT_ASSIGN procedure but
has optional keywords to exclude or specify specific tags.
Fields with matching tag names are copied from one structure array to
another structure array of different type.
This allows copying of tag values when equating the structures of
different types is not allowed, or when not all tags are to be copied.
Can also recursively copy from/to structures nested within structures.
Note that the number of elements in the output structure array
is automatically adjusted to equal the length of input structure array.
If this not desired then use pro copy_struct_inx which allows
specifying via subscripts which elements are copied where in the arrays.
CALLING SEQUENCE:
copy_struct, struct_From, struct_To, NT_copied
copy_struct, struct_From, struct_To, EXCEPT=["image","misc"]
copy_struct, struct_From, struct_To, /RECUR_TANDEM
INPUTS:
struct_From = structure array to copy from.
struct_To = structure array to copy values to.
KEYWORDS:
EXCEPT_TAGS = string array of tag names to ignore (to NOT copy).
Used at all levels of recursion.
SELECT_TAGS = tag names to copy (takes priority over EXCEPT).
This keyword is not passed to recursive calls in order
to avoid the confusion of not copying tags in sub-structures.
/RECUR_FROM = search for sub-structures in struct_From, and then
call copy_struct recursively for those nested structures.
/RECUR_TO = search for sub-structures of struct_To, and then
call copy_struct recursively for those nested structures.
/RECUR_TANDEM = call copy_struct recursively for the sub-structures
with matching Tag names in struct_From and struct_To
(for use when Tag names match but sub-structure types differ).
OUTPUTS:
struct_To = structure array to which new tag values are copied.
NT_copied = incremented by total # of tags copied (optional)
INTERNAL:
Recur_Level = # of times copy_struct calls itself.
This argument is for internal recursive execution only.
The user call is 1, subsequent recursive calls increment it,
and the counter is decremented before returning.
The counter is used just to find out if argument checking
should be performed, and to set NT_copied = 0 first call.
EXTERNAL CALLS:
pro match (when keyword SELECT_TAGS is specified)
PROCEDURE:
Match Tag names and then use corresponding Tag numbers.
HISTORY:
written 1989 Frank Varosi STX @ NASA/GSFC
mod Jul.90 by F.V. added option to copy sub-structures RECURSIVELY.
mod Aug.90 by F.V. adjust # elements in TO (output) to equal
# elements in FROM (input) & count # of fields copied.
mod Jan.91 by F.V. added Recur_Level as internal argument so that
argument checking done just once, to avoid confusion.
Checked against Except_Tags in RECUR_FROM option.
mod Oct.91 by F.V. added option SELECT_TAGS= selected field names.
mod Aug.95 by W. Landsman to fix match of a single selected tag.
mod Mar.97 by F.V. do not pass the SELECT_TAGS keyword in recursion.
Converted to IDL V5.0 W. Landsman September 1997
mod May 01 by D. Schlegel use long integers
(See goddard/pro/structure/copy_struct.pro)
NAME:
COPY_STRUCT_INX
PURPOSE:
Copy matching tags & specified indices from one structure to another
EXPLANATION:
Copy all fields with matching tag names (except for "except_Tags")
from one structure array to another structure array of different type.
This allows copying of tag values when equating the structures of
different types is not allowed, or when not all tags are to be copied.
Can also recursively copy from/to structures nested within structures.
This procedure is same as copy_struct with option to
specify indices (subscripts) of which array elements to copy from/to.
CALLING SEQUENCE:
copy_struct_inx, struct_From, struct_To, NT_copied, INDEX_FROM=subf
copy_struct_inx, struct_From, struct_To, INDEX_FROM=subf, INDEX_TO=subto
INPUTS:
struct_From = structure array to copy from.
struct_To = structure array to copy values to.
KEYWORDS:
INDEX_FROM = indices (subscripts) of which elements of array to copy.
(default is all elements of input structure array)
INDEX_TO = indices (subscripts) of which elements to copy to.
(default is all elements of output structure array)
EXCEPT_TAGS = string array of Tag names to ignore (to NOT copy).
Used at all levels of recursion.
SELECT_TAGS = Tag names to copy (takes priority over EXCEPT).
This keyword is not passed to recursive calls in order
to avoid the confusion of not copying tags in sub-structures.
/RECUR_FROM = search for sub-structures in struct_From, and then
call copy_struct recursively for those nested structures.
/RECUR_TO = search for sub-structures of struct_To, and then
call copy_struct recursively for those nested structures.
/RECUR_TANDEM = call copy_struct recursively for the sub-structures
with matching Tag names in struct_From and struct_To
(for use when Tag names match but sub-structure types differ).
OUTPUTS:
struct_To = structure array to which new tag values are copied.
NT_copied = incremented by total # of tags copied (optional)
INTERNAL:
Recur_Level = # of times copy_struct_inx calls itself.
This argument is for internal recursive execution only.
The user call is 1, subsequent recursive calls increment it,
and the counter is decremented before returning.
The counter is used just to find out if argument checking
should be performed, and to set NT_copied = 0 first call.
EXTERNAL CALLS:
pro match (when keyword SELECT_TAGS is specified)
PROCEDURE:
Match Tag names and then use corresponding Tag numbers,
apply the sub-indices during = and recursion.
HISTORY:
adapted from copy_struct: 1991 Frank Varosi STX @ NASA/GSFC
mod Aug.95 by F.V. to fix match of a single selected tag.
mod Mar.97 by F.V. do not pass the SELECT_TAGS keyword in recursion,
and check validity of INDEX_FROM and INDEX_TO in more detail.
Converted to IDL V5.0 W. Landsman September 1997
Use long integers W. Landsman May 2001
(See goddard/pro/structure/copy_struct_inx.pro)
NAME:
CORREL_IMAGES
PURPOSE:
Compute the 2-D cross-correlation function of two images
EXPLANATION:
Computes the 2-D cross-correlation function of two images for
a range of (x,y) shifting by pixels of one image relative to the other.
CALLING SEQUENCE:
Result = CORREL_IMAGES( image_A, image_B,
[XSHIFT=, YSHIFT=, XOFFSET_B=, YOFFSET_B=, REDUCTION=,
MAGNIFICATION=, /NUMPIX, /MONITOR )
INPUTS:
image_A, image_B = the two images of interest.
OPTIONAL INPUT KEYWORDS:
XSHIFT = the + & - shift to be applied in X direction, default=7.
YSHIFT = the Y direction + & - shifting, default=7.
XOFFSET_B = initial X pixel offset of image_B relative to image_A.
YOFFSET_B = Y pixel offset, defaults are (0,0).
REDUCTION = optional reduction factor causes computation of
Low resolution correlation of bin averaged images,
thus faster. Can be used to get approximate optimal
(x,y) offset of images, and then called for successive
lower reductions in conjunction with CorrMat_Analyze
until REDUCTION=1, getting offset up to single pixel.
MAGNIFICATION = option causes computation of high resolution correlation
of magnified images, thus much slower.
Shifting distance is automatically = 2 + Magnification,
and optimal pixel offset should be known and specified.
Optimal offset can then be found to fractional pixels
using CorrMat_Analyze( correl_images( ) ).
/NUMPIX - if set, causes the number of pixels for each correlation
to be saved in a second image, concatenated to the
correlation image, so Result is fltarr( Nx, Ny, 2 ).
/MONITOR causes the progress of computation to be briefly printed.
OUTPUTS:
Result is the cross-correlation function, given as a matrix.
PROCEDURE:
Loop over all possible (x,y) shifts, compute overlap and correlation
for each shift. Correlation set to zero when there is no overlap.
MODIFICATION HISTORY:
Written, July,1991, Frank Varosi, STX @ NASA/GSFC
Use ROUND instead of NINT, June 1995, Wayne Landsman HSTX
Avoid divide by zero errors, W. Landsman HSTX April 1996
Remove use of !DEBUG W. Landsman June 1997
Subtract mean of entire image before computing correlation, not just
mean of overlap region H. Ebeling/W. Landsman June 1998
(See goddard/pro/image/correl_images.pro)
NAME: CORREL_OPTIMIZE PURPOSE: Find the optimal (x,y) pixel offset of image_B relative to image_A EXPLANATION" Optimal offset is computed by means of maximizing the correlation function of the two images. CALLING SEQUENCE: CORREL_OPTIMIZE, image_A, image_B, xoffset_optimum, yoffset_optimum [ XOFF_INIT=, YOFF_INIT=, MAGNIFICATION=, /PRINT, /NUMPIX, /MONITOR, PLATEAU_THRESH= ] INPUTS: image_A, image_B = the two images of interest. OPTIONAL INPUT KEYWORDS: XOFF_INIT = initial X pixel offset of image_B relative to image_A, YOFF_INIT = Y pixel offset, (default offsets are 0 and 0). MAGNIFICATION = option to determine offsets up to fractional pixels, (example: MAG=2 means 1/2 pixel accuracy, default=1). /NUMPIX: sqrt( sqrt( # pixels )) used as correlation weighting factor. /MONITOR causes the progress of computation to be briefly printed. /PRINT causes the results of analysis to be printed. PLATEAU_THRESH = threshold used for detecting plateaus in the cross-correlation matrix near maximum, (default=0.01), used only if MAGNIFICATION > 1. Decrease this value for high signal-to-noise data OUTPUTS: xoffset_optimum = optimal X pixel offset of image_B relative to image_A. yoffset_optimum = optimal Y pixel offset. CALLS: function correl_images( image_A, image_B ) pro corrmat_analyze PROCEDURE: The combination of function correl_images( image_A, image_B ) and corrmat_analyze of the result is used to obtain the (x,y) offset yielding maximal correlation. The combination is first executed at large REDUCTION factors to speed up computation, then zooming in recursively on the optimal (x,y) offset by factors of 2. Finally, the MAGNIFICATION option (if specified) is executed to determine the (x,y) offset up to fractional pixels. MODIFICATION HISTORY: Written, July,1991, Frank Varosi, STX @ NASA/GSFC Added PLATEAU_THRESH keyword June 1997, Wayne Landsman STX Converted to IDL V5.0 W. Landsman September 1997
(See goddard/pro/image/correl_optimize.pro)
NAME: CORRMAT_ANALYZE PURPOSE: Find the optimal (x,y) offset to maximize correlation of 2 images EXPLANATION: Analyzes the 2-D cross-correlation function of two images and finds the optimal(x,y) pixel offsets. Intended for use with function CORREL_IMAGES. CALLING SEQUENCE: corrmat_analyze, correl_mat, xoffset_optimum, yoffset_optimum, max_corr, edge, plateau, [XOFF_INIT=, YOFF_INIT=, REDUCTION=, MAGNIFICATION=, PLATEAU_THRESH=, /PRINT] INPUTS: correl_mat = the cross-correlation matrix of 2 images. (as computed by function CORREL_IMAGES( imA, imB ) ). NOTE: If correl_mat(*,*,1) is the number of pixels for each correlation, (the case when /NUMPIX was specified in call to CORREL_IMAGES) then sqrt( sqrt( # pixels )) is used as correlation weighting factor. OPTIONAL INPUT KEYWORDS: XOFF_INIT = initial X pixel offset of image_B relative to image_A. YOFF_INIT = Y pixel offset, (both as specified to correl_images). REDUCTION = reduction factor used in call to CORREL_IMAGES. MAGNIFICATION = magnification factor used in call to CORREL_IMAGES, this allows determination of offsets up to fractions of a pixel. PLATEAU_THRESH = threshold used for detecting plateaus in the cross-correlation matrix near maximum, (default=0.01), used only if MAGNIFICATION > 1 /PRINT causes the result of analysis to be printed. OUTPUTS: xoffset_optimum = optimal X pixel offset of image_B relative to image_A. yoffset_optimum = optimal Y pixel offset. max_corr = the maximal correlation corresponding to optimal offset. edge = 1 if maximum is at edge of correlation domain, otherwise=0. plateau = 1 if maximum is in a plateua of correlation function, else=0. PROCEDURE: Find point of maximum cross-correlation and calc. corresponding offsets. If MAGNIFICATION > 1: the correl_mat is checked for plateau near maximum, and if found, the center of plateau is taken as point of maximum cross-correlation. MODIFICATION HISTORY: Written, July-1991, Frank Varosi, STX @ NASA/GSFC Use ROUND instead of NINT, June 1995 Wayne Landsman HSTX Remove use of non-standard !DEBUG system variable W.L. HSTX Converted to IDL V5.0 W. Landsman September 1997
(See goddard/pro/image/corrmat_analyze.pro)
NAME:
COSMO_PARAM
PURPOSE:
Derive full set of cosmological density parameters from a partial set
EXPLANATION:
This procedure is called by LUMDIST and GALAGE to allow the user a choice
in defining any two of four cosmological density parameters.
Given any two of the four input parameters -- (1) the normalized matter
density Omega_m (2) the normalized cosmolgical constant, Omega_lambda (2) the normalized
curvature term, Omega_k and (4) the deceleration parameter q0 -- this
program will derive the remaining two. Here "normalized" means divided by the closure
density so that Omega_m + Omega_lambda + Omega_k = 1. For a more
precise definition see Caroll, Press, & Turner (1992, ArAA, 30, 499).
If less than two parameters are defined, this procedure sets default
values of Omega_k=0 (flat space), Omega_lambda = 0.7, Omega_m = 0.3
and q0 = -0.5
CALLING SEQUENCE:
COSMO_PARAM, Omega_m, Omega_lambda, Omega_k, q0
INPUT-OUTPUTS:
Omega_M - normalized matter energy density, non-negative numeric scalar
Omega_Lambda - Normalized cosmological constant, numeric scalar
Omega_k - normalized curvature parmeter, numeric scalar. This is zero
for a flat universe
q0 - Deceleration parameter, numeric scalar = -R*(R'')/(R')^2
= 0.5*Omega_m - Omega_lambda
NOTES:
If more than two parameters are defined upon input (overspecification),
then the first two defined parameters in the ordered list Omega_m,
Omega_lambda, Omega_k, q0 are used to define the cosmology.
EXAMPLE:
Suppose one has Omega_m = 0.3, and Omega_k = 0.5 then to determine
Omega_lambda and q0
IDL> cosmo_param, 0.3, omega_lambda, 0.5, q0
which will return omega_lambda = 0.2 and q0 = -2.45
REVISION HISTORY:
W. Landsman Raytheon ITSS April 2000
(See goddard/pro/astro/cosmo_param.pro)
NAME:
CO_ABERRATION
PURPOSE:
Calculate changes to Ra and Dec due to "the effect of aberration",
EXPLANATION:
as described in Meeus, Chap 23.
CALLING SEQUENCE:
co_aberration, jd, ra, dec, d_ra, d_dec, [EPS = ]
INPUTS
jd : Julian Date [scalar or vector]
ra, dec : Arrays (or scalars) of the ra and dec's in degrees
Note: if jd is a vector, ra and dec MUST be vectors of the same length.
OUTPUTS
d_ra, d_dec: the corrections to ra and dec due to aberration (must then
be added to ra and dec to get corrected values).
OPTIONAL INPUT KEYWORD:
eps : set this to the true obliquity of the ecliptic (in radians), or
it will be set for you if you don't know it (in that case, set it to
an empty variable).
EXAMPLE:
Compute the change in RA and Dec of Theta Persei (RA = 2h46m,11.331s, Dec =
49d20',54.54" on 2028 Nov 13.19 TD
IDL> jdcnv,2028,11,13,.19*24,jd ;Get Julian date
IDL> co_aberration,jd,ten(2,46,11.331)*15,ten(49,20,54.54),d_ra,d_dec
==> d_ra = 30.045" d_dec = 6.697"
NOTES:
These formula are from Meeus, Chapters 23. Accuracy is much better than 1
arcsecond.
REVISION HISTORY:
Written, June 2002, Chris O'Dell, U. of Wisconsin
(See goddard/pro/astro/co_aberration.pro)
NAME:
CO_NUTATE
PURPOSE:
Calculate changes in RA and Dec due to nutation of the Earth's rotation
EXPLANATION:
Calculates necessary changes to ra and dec due to
the nutation of the Earth's rotation axis, as described in Meeus, Chap 23.
Uses formulae from Astronomical Almanac, 1984, and does the calculations
in equatorial rectangular coordinates to avoid singularities at the
celestial poles.
CALLING SEQUENCE:
CO_NUTATE, jd, ra, dec, d_ra, d_dec, [EPS=, D_PSI =, D_EPS = ]
INPUTS
JD: Julian Date [scalar or vector]
RA, DEC : Arrays (or scalars) of the ra and dec's of interest
Note: if jd is a vector, ra and dec MUST be vectors of the same length.
OUTPUTS:
d_ra, d_dec: the corrections to ra and dec due to nutation (must then
be added to ra and dec to get corrected values).
OPTIONAL OUTPUT KEYWORDS:
EPS: set this to a named variable that will contain the obliquity of the
ecliptic.
D_PSI: set this to a named variable that will contain the nutation in the
longitude of the ecliptic
D_EPS: set this to a named variable that will contain the nutation in the
obliquity of the ecliptic
EXAMPLE:
(1) Example 23a in Meeus: On 2028 Nov 13.19 TD the mean position of Theta
Persei is 2h 46m 11.331s 49d 20' 54.54". Determine the shift in
position due to the Earth's nutation.
IDL> jd = JULDAY(11,13,2028,.19*24) ;Get Julian date
IDL> CO_NUTATE, jd,ten(2,46,11.331)*15.,ten(49,20,54.54),d_ra,d_dec
====> d_ra = 15.843" d_dec = 6.217"
PROCEDURES USED:
NUTATE
REVISION HISTORY:
Written Chris O'Dell, 2002
Vector call to NUTATE W. Landsman June 2002
(See goddard/pro/astro/co_nutate.pro)
NAME:
CO_REFRACT()
PURPOSE:
Calculate correction to altitude due to atmospheric refraction.
DESCRIPTION:
CO_REFRACT can calculate both apparent altitude from observed altitude and
vice-versa.
CALLING SEQUENCE:
new_alt = CO_REFRACT(old_alt, [ ALTITUDE= , PRESSURE= , $
TEMPERATURE= , /TO_OBSERVED , EPSILON= ])
INPUT:
old_alt - Observed (apparent) altitude, in DEGREES. (apparent if keyword
/TO_OBSERVED set). May be scalar or vector.
OUTPUT:
Function returns apparent (observed) altitude, in DEGREES. (observed if
keyword /TO_OBSERVED set). Will be of same type as input
altitude(s).
OPTIONAL KEYWORD INPUTS:
ALTITUDE : The height of the observing location, in meters. This is
only used to determine an approximate temperature and pressure,
if these are not specified separately. [default=0, i.e. sea level]
PRESSURE : The pressure at the observing location, in millibars.
TEMPERATURE: The temperature at the observing location, in Kelvin.
EPSILON: When keyword /TO_OBSERVED has been set, this is the accuracy
to obtain via the iteration, in arcseconds [default = 0.25
arcseconds].
/TO_OBSERVED: Set this keyword to go from Apparent->Observed altitude,
using the iterative technique.
Note, if altitude is set, but temperature or pressure are not, the
program will make an intelligent guess for the temperature and pressure.
DESCRIPTION:
Because the index of refraction of air is not precisely 1.0, the atmosphere
bends all incoming light, making a star or other celestial object appear at
a slightly different altitude (or elevation) than it really is. It is
important to understand the following definitions:
Observed Altitude: The altitude that a star is SEEN to BE, with a telescope.
This is where it appears in the sky. This is always
GREATER than the apparent altitude.
Apparent Altitude: The altitude that a star would be at, if *there were no
atmosphere* (sometimes called "true" altitude). This is
usually calculated from an object's celestial coordinates.
Apparent altitude is always LOWER than the observed
altitude.
Thus, for example, the Sun's apparent altitude when you see it right on the
horizon is actually -34 arcminutes.
This program uses couple simple formulae to estimate the effect for most
optical and radio wavelengths. Typically, you know your observed altitude
(from an observation), and want the apparent altitude. To go the other way,
this program uses an iterative approach.
EXAMPLE:
The lower limb of the Sun is observed to have altitude of 0d 30'.
Calculate the the true (=apparent) altitude of the Sun's lower limb using
mean conditions of air pressure and temperature
IDL> print, co_refract(0.5) ===> 0.025degrees (1.55')
WAVELENGTH DEPENDENCE:
This correction is 0 at zenith, about 1 arcminute at 45 degrees, and 34
arcminutes at the horizon FOR OPTICAL WAVELENGTHS. The correction is
NON-NEGLIGIBLE at all wavelengths, but is not very easily calculable.
These formulae assume a wavelength of 550 nm, and will be accurate to
about 4 arcseconds for all visible wavelengths, for elevations of 10
degrees and higher. Amazingly, they are also ACCURATE FOR RADIO
FREQUENCIES LESS THAN ~ 100 GHz.
It is important to understand that these formulae really can't do better
than about 30 arcseconds of accuracy very close to the horizon, as
variable atmospheric effects become very important.
REFERENCES:
1. Meeus, Astronomical Algorithms, Chapter 15.
2. Explanatory Supplement to the Astronomical Almanac, 1992.
3. Methods of Experimental Physics, Vol 12 Part B, Astrophysics,
Radio Telescopes, Chapter 2.5, "Refraction Effects in the Neutral
Atmosphere", by R.K. Crane.
DEPENDENCIES:
CO_REFRACT_FORWARD (contained in this file and automatically compiled).
AUTHOR:
Chris O'Dell
Univ. of Wisconsin-Madison
Observational Cosmology Laboratory
Email: odell@cmb.physics.wisc.edu
REVISION HISTORY:
version 1 (May 31, 2002)
Update iteration formula, W. Landsman June 2002
Corrected slight bug associated with scalar vs. vector temperature and
pressure inputs. 6/10/2002
(See goddard/pro/astro/co_refract.pro)
NAME:
CREATE_STRUCT
PURPOSE:
Create an IDL structure from a list of tag names and dimensions
EXPLANATION:
Dynamically create an IDL structure variable from list of tag names
and data types of arbitrary dimensions. Useful when the type of
structure needed is not known until run time.
Unlike the intrinsic function CREATE_STRUCT(), this procedure does not
require the user to know the number of tags before run time. (Note
there is no name conflict since the intrinsic CREATE_STRUCT is a
function, and this file contains a procedure.)
CALLING SEQUENCE:
CREATE_STRUCT, STRUCT, strname, tagnames, tag_descript,
[ DIMEN = , /CHATTER, /NODELETE ]
INPUTS:
STRNAME - name to be associated with structure (string)
Must be unique for each structure created. Set
STRNAME = '' to create an anonymous structure
TAGNAMES - tag names for structure elements
(string or string array)
TAG_DESCRIPT - String descriptor for the structure, containing the
tag type and dimensions. For example, 'A(2),F(3),I', would
be the descriptor for a structure with 3 tags, strarr(2),
fltarr(3) and Integer scalar, respectively.
Allowed types are 'A' for strings, 'B' or 'L' for unsigned byte
integers, 'I' for integers, 'J' for longword integers,
'F' or 'E' for floating point, 'D' for double precision
'C' for complex, and 'M' for double complex
Uninterpretable characters in a format field are ignored.
For vectors, the tag description can also be specified by
a repeat count. For example, '16E,2J' would specify a
structure with two tags, fltarr(16), and lonarr(2)
OPTIONAL KEYWORD INPUTS:
DIMEN - number of dimensions of structure array (default is 1)
CHATTER - If /CHATTER is set, then CREATE_STRUCT will display
the dimensions of the structure to be created, and prompt
the user whether to continue. Default is no prompt.
NODELETE - If /NODELETE is set, then the temporary file created
CREATE_STRUCT will not be deleted upon exiting. See below
OUTPUTS:
STRUCT - IDL structure, created according to specifications
EXAMPLES:
IDL> create_struct, new, 'name',['tag1','tag2','tag3'], 'D(2),F,A(1)'
will create a structure variable new, with structure name NAME
To see the structure of new:
IDL> help,new,/struc
** Structure NAME, 3 tags, 20 length:
TAG1 DOUBLE Array(2)
TAG2 FLOAT 0.0
TAG3 STRING Array(1)
PROCEDURE:
Generates a temporary procedure file using input information with
the desired structure data types and dimensions hard-coded.
This file is then executed with CALL_PROCEDURE.
NOTES:
If CREATE_STRUCT cannot write a temporary .pro file in the current
directory, then it will write the temporary file in the getenv('HOME')
directory.
At present, can fail if a tag_name cannot be used as a proper
structure component definition, e.g., '0.10' will not
work, but a typical string like 'RA' or 'DEC' will.
A partial workaround checks for characters '\' and '/'
and '.' and converts them to '_'. in a tag_name.
Note that 'L' now specifies a LOGICAL (byte) data type and not a
a LONG data type for consistency with FITS binary tables
RESTRICTIONS:
The name of the structure must be unique, for each structure created.
Otherwise, the new variable will have the same structure as the
previous definition (because the temporary procedure will not be
recompiled). ** No error message will be generated ***
SUBROUTINES CALLED:
FDECOMP, REPCHR()
MODIFICATION HISTORY:
Version 1.0 RAS January 1992
Modified 26 Feb 1992 for Rosat IDL Library (GAR)
Modified Jun 1992 to accept arrays for tag elements -- KLV, Hughes STX
Accept anonymous structures W. Landsman HSTX Sep. 92
Accept 'E' and 'J' format specifications W. Landsman Jan 93
'L' format now stands for logical and not long array
Accept repeat format for vectors W. Landsman Feb 93
Accept complex and double complex (for V4.0) W. Landsman Jul 95
Work for long structure definitions W. Landsman Aug 97
Converted to IDL V5.0 W. Landsman September 1997
Write temporary file in HOME directory if necessary W. Landsman Jul 98
Use OPENR,/DELETE for OS-independent file removal W. Landsman Jan 99
Use STRSPLIT() instead of GETTOK() W. Landsman July 2002
Assume since V5.3 W. Landsman Feb 2004
Added RESOLVE_ROUTINE to ensure recompilation W. Landsman Sep. 2004
(See goddard/pro/structure/create_struct.pro)
NAME:
CR_REJECT
PURPOSE:
General, iterative cosmic ray rejection using two or more input images.
EXPLANATION:
Uses a noise model input by the user, rather than
determining noise empirically from the images themselves.
The image returned has the combined exposure time of all the input
images, unless the bias flag is set, in which case the mean is
returned. This image is computed by summation (or taking mean)
regardless of loop and initialization options (see below).
CALLING SEQUENCE:
cr_reject, input_cube, rd_noise_dn, dark_dn, gain, mult_noise, $
combined_image, combined_npix, combined_noise
MODIFIED ARGUMENT:
input_cube - Cube in which each plane is an input image.
If the noise model is used (rd_noise_dn, dark_dn,
gain), then input_cube must be in units of DN.
If an input noise cube is supplied (rd_noise_dn
<0), then the units of input_cube and noise_cube
merely need to be consistent.
This array is used as a buffer and its contents
are not guaranteed on output (although for now,
weighting=0 with /restore_sky should give you back
your input unaltered).
INPUT ARGUMENTS:
rd_noise_dn - Read noise per pixel. Units are DN.
If negative, then the user supplies an error cube
via the keyword noise_cube. In the latter case,
mult_noise still applies, since it is basically a fudge.
dark_dn - Dark rate in DN per pixel per s. This can be a scalar,
or it can be a dark image divided by the exposure
time.
gain - Electrons per DN.
mult_noise - Coefficient for multiplicative noise term -- helps
account for differing PSFs or subpixel image shifts.
INPUT KEYWORDS:
exptime - If the images have different exposure times, pass
them in a vector. You can leave this off for
frames with the same exposure time, but dark counts
won't be treated correctly.
verbose - If set, lots of output.
nsig - Rejection limit in units of pixel-to-pixel noise
(sigma) on each input image. Can be specified as
an array, in which case the dimension gives the
maximum number of iterations to run. (Default =
[8, 6, 4]
dilation - With dfactor, provides functionality similar to the
expansion of the CR with pfactor and radius in STSDAS
crrej. Dilate gives the size of the border to be
tested around each initially detected CR pixel.
E.g., dilate=1 searches a 9 X 9 area centered on the
original pixel. If dfactor is set, the default is 1.
dfactor - See dilation. This parameter is equivalent to pfactor
in STSDAS crrej. The current threshold for rejection
is multiplied by this factor when doing the search
with the dilated mask. If dilation is set, the default
for this parameter is 0.5.
bias - Set if combining biases (divides through by number
of images at end, since exposure time is 0).
tracking_set - Subscripts of pixels to be followed through the
computation.
noskyadjust - Sky not to be subtracted before rejection tests. Default
is to do the subtraction.
xmedsky - Flag. If set, the sky is computed as a 1-d array
which is a column-by-column median. This is intended
for STIS slitless spectra. If sky adjustment is
disabled, this keyword has no effect.
input_mask - Mask cube input by the user. Should be byte data
because it's boolean. 1 means use the pixel,
and 0 means reject the pixel - these rejections
are in addition to those done by the CR rejection
algorithm as such.
The following keywords control how the current guess at a CR-free
"check image" is recomputed on each iteration:
median_loop - If set, the check image for each iteration is
the pixel-by-pixel median. THE MEAN IS
RETURNED in combined_image even if you set
this option. (Default is mean_loop.)
minimum_loop - If set, the check image for each iteration is
the pixel-by-pixel minimum. THE MEAN IS
RETURNED in combined_image even if you set
this option. (Default is mean_loop.)
mean_loop - If set, the check image for each iteration is
the pixel-by-pixel mean. (Same as the default.)
noclearmask - By default, the mask of CR flags is reset before
every iteration, and a pixel that has been
rejected has a chance to get back in the game
if the average migrates toward its value. If this
keyword is set, then any rejected pixel stays
rejected in subsequent iterations. Note that what
stsdas.hst_calib.wfpc.crrej does is the same
as the default. For this procedure, the default
was NOT to clear the flags, until 20 Oct. 1997.
restore_sky - Flag. If set, the routine adds the sky back into
input_cube before returning. Works only if
weighting=0.
null_value - Value to be used for output pixels to which no
input pixels contribute. Default=0
weighting - Selects weighting scheme in final image
combination:
0 (default) - Poissonian weighting - co-add
detected DN from non-CR pixels. (Pixel-by-
pixel scaling up to total exposure time,
for pixels in stack where some rejected.)
Equivalent to exptime weighting of rates.
1 or more - Sky and read noise weighting of rates.
Computed as weighted average of DN rates,
with total exp time multiplied back in
afterward.
In all cases, the image is returned as a sum in
DN with the total exposure time of the image
stack, and with total sky added back in.
The following keywords allow the initial guess at a CR-free "check
image" to be of a different kind from the iterative guesses:
init_med - If set, the initial check image is
the pixel-by-pixel median. (Not permitted if
input_cube has fewer than 3 planes; default is minimum.)
init_mean - If set, the initial check image is
the pixel-by-pixel mean. (Default is minimum.)
init_min - If set, the initial check image is
the pixel-by-pixel minimum. (Same as the default.)
OUTPUT ARGUMENTS::
combined_image - Mean image with CRs removed.
combined_npix - Byte (or integer) image of same dimensions as
combined_image, with each element containing
the number of non-CR stacked pixels that
went into the result.
combined_noise - Noise in combined image according to noise model
or supplied noise cube.
OUTPUT KEYWORDS:
mask_cube - CR masks for each input image. 1 means
good pixel; 0 means CR pixel.
skyvals - Sky value array. For an image cube with N planes,
this array is fltarr(N) if the sky is a scalar per
image plane, and fltarr(XDIM, N), is the XMEDSKY
is set.
INPUT/OUTPUT KEYWORD:
noise_cube - Estimated noise in each pixel of input_cube as
returned (if rd_noise_dn ge 0), or input noise
per pixel of image_cube (if rd_noise_dn lt 0).
skybox - X0, X1, Y0, Y1 bounds of image section used
to compute sky. If supplied by user, this
region is used. If not supplied, the
image bounds are returned. This parameter might
be used (for instance) if the imaging area
doesn't include the whole chip.
COMMON BLOCKS: none
SIDE EFFECTS: none
METHOD:
COMPARISON WITH STSDAS
Cr_reject emulates the crrej routine in stsdas.hst_calib.wfpc.
The two routines have been verified to give identical results
(except for some pixels along the edge of the image) under the
following conditions:
no sky adjustment
no dilation of CRs
initialization of trial image with minimum
taking mean for each trial image after first (no choice
in crrej)
Dilation introduces a difference between crrej and this routine
around the very edge of the image, because the IDL mask
manipulation routines don't handle the edge the same way as crrej
does. Away from the edge, crrej and cr_reject are the same with
respect to dilation.
The main difference between crrej and cr_reject is in the sky
computation. Cr_reject does a DAOPHOT I sky computation on a
subset of pixels grabbed from the image, whereas crrej searches
for a histogram mode.
REMARKS ON USAGE
The default is that the initial guess at a CR-free image is the
pixel-by-pixel minimum of all the input images. The pixels
cut from each component image are the ones more than nsig(0) sigma
from this minimum image. The next iteration is based on the
mean of the cleaned-up component images, and the cut is taken
at nsig(1) sigma. The next iteration is also based on the mean with
the cut taken at nsig(2) sigma.
The user can specify an arbitrary sequence of sigma cuts, e.g.,
nsig=[6,2] or nsig=[10,9,8,7]. The user can also specify that
the initial guess is the median (/init_med) rather than the
minimum, or even the mean. The iterated cleaned_up images after
the first guess can be computed as the mean or the median
(/mean_loop or /median_loop). The minimum_loop option is also
specified, but this is a trivial case, and you wouldn't want
to use it except perhaps for testing.
The routine takes into account exposure time if you want it to,
i.e., if the pieces of the CR-split aren't exactly the same.
For bias frames (exposure time 0), set /bias to return the mean
rather than the total of the cleaned-up component images.
The crrej pfactor and radius to propagate the detected CRs
outward from their initial locations have been implemented
in slightly different form using the IDL DILATE function.
It is possible to end up with output pixels to which no valid
input pixels contribute. These end up with the value
NULL_VALUE, and the corresponding pixels of combined_npix are
also returned as 0. This result can occur when the pixel is
very noisy across the whole image stack, i.e., if all the
values are, at any step of the process, far from the stack
average at that position even after rejecting the real
outliers. Because pixels are flagged symmetrically N sigma
above and below the current combined image (see code), all
the pixels at a given position can end up getting flagged.
(At least, that's how I think it happens.)
MODIFICATION HISTORY:
5 Mar. 1997 - Written. R. S. Hill
14 Mar. 1997 - Changed to masking approach to keep better
statistics and return CR-affected pixels to user.
Option to track subset of pixels added.
Dilation of initially detected CRs added.
Other small changes. RSH
17 Mar. 1997 - Arglist and treatment of exposure times fiddled
to mesh better with stis_cr. RSH
25 Mar. 1997 - Fixed bug if dilation finds nothing. RSH
4 Apr. 1997 - Changed name to cr_reject. RSH
15 Apr. 1997 - Restyled with emacs, nothing else done. RSH
18 Jun. 1997 - Input noise cube allowed. RSH
19 Jun. 1997 - Multiplicative noise deleted from final error. RSH
20 Jun. 1997 - Fixed error in using input noise cube. RSH
12 July 1997 - Sky adjustment option. RSH
27 Aug. 1997 - Dilation kernel made round, not square, and
floating-point radius allowed. RSH
16 Sep. 1997 - Clearmask added. Intermediate as well as final
mean is exptime weighted. RSH
17 Sep. 1997 - Redundant zeroes around dilation kernel trimmed. RSH
1 Oct. 1997 - Bugfix in preceding. RSH
21 Oct. 1997 - Clearmask changed to noclearmask. Bug in robust
array division fixed (misplaced parens). Sky as
a function of X (option). RSH
30 Jan. 1998 - Restore_sky keyword added. RSH
5 Feb. 1998 - Quick help corrected and updated. RSH
6 Feb. 1998 - Fixed bug in execution sequence for tracking_set
option. RSH
18 Mar. 1998 - Eliminated confusing maxiter spec. Added
null_value keyword. RSH
15 May 1998 - Input_mask keyword. RSH
27 May 1998 - Initialization of minimum image corrected. NRC, RSH
9 June 1998 - Input mask cube processing corrected. RSH
21 Sep. 1998 - Weighting keyword added. RSH
7 Oct. 1998 - Fixed bug in input_mask processing (introduced
in preceding update). Input_mask passed to
skyadj_cube. RSH
5 Mar. 1999 - Force init_min for 2 planes. RSH
1 Oct. 1999 - Make sure weighting=1 not given with noise cube. RSH
1 Dec. 1999 - Corrections to doc; restore_sky needs weighting=0. RSH
17 Mar. 2000 - SKYBOX added. RSH
(See goddard/pro/image/cr_reject.pro)
NAME:
CSPLINE
PURPOSE:
Function to evaluate a natural cubic spline at specified data points
EXPLANATION:
Combines the Numerical Recipes functions SPL_INIT and SPL_INTERP
CALLING SEQUENCE:
result = cspline( x, y, t, [ DERIV = ])
INPUTS:
x - vector of spline node positions, must be monotonic increasing or
decreasing
y - vector of node values
t - x-positions at which to evaluate the spline, scalar or vector
INPUT-OUTPUT KEYWORD:
DERIV - values of the second derivatives of the interpolating function
at the node points. This is an intermediate step in the
computation of the natural spline that requires only the X and
Y vectors. If repeated interpolation is to be applied to
the same (X,Y) pair, then some computation time can be saved
by supplying the DERIV keyword on each call. On the first call
DERIV will be computed and returned on output.
OUTPUT:
the values for positions t are returned as the function value
If any of the input variables are double precision, then the output will
also be double precision; otherwise the output is floating point.
EXAMPLE:
The following uses the example vectors from the SPL_INTERP documentation
IDL> x = (findgen(21)/20.0)*2.0*!PI ;X vector
IDL> y = sin(x) ;Y vector
IDL> t = (findgen(11)/11.0)*!PI ;Values at which to interpolate
IDL> plot,x,y,psym=1 ;Plot original grid
IDL> oplot, t,cspline(x,y,t),psym=2 ;Overplot interpolated values
METHOD:
The "Numerical Recipes" implementation of the natural cubic spline is
used, by calling the intrinsic IDL functions SPL_INIT and SPL_INTERP.
HISTORY:
version 1 D. Lindler May, 1989
version 2 W. Landsman April, 1997
Rewrite using the intrinsic SPL_INIT & SPL_INTERP functions
Converted to IDL V5.0 W. Landsman September 1997
Work for monotonic decreasing X vector W. Landsman February 1999
(See goddard/pro/math/cspline.pro)
NAME:
CT2LST
PURPOSE:
To convert from Local Civil Time to Local Mean Sidereal Time.
CALLING SEQUENCE:
CT2LST, Lst, Lng, Tz, Time, [Day, Mon, Year]
or
CT2LST, Lst, Lng, dummy, JD
INPUTS:
Lng - The longitude in degrees (east of Greenwich) of the place for
which the local sidereal time is desired, scalar. The Greenwich
mean sidereal time (GMST) can be found by setting Lng = 0.
Tz - The time zone of the site in hours. Use this to easily account
for Daylight Savings time (e.g. 4=EDT, 5 = EST/CDT), scalar
This parameter is not needed (and ignored) if Julian date is
supplied.
Time or JD - If more than four parameters are specified, then this is
the time of day of the specified date in decimal hours. If
exactly four parameters are specified, then this is the
Julian date of time in question, scalar or vector
OPTIONAL INPUTS:
Day - The day of the month (1-31),integer scalar or vector
Mon - The month, in numerical format (1-12), integer scalar or
Year - The year (e.g. 1987)
OUTPUTS:
Lst The Local Sidereal Time for the date/time specified in hours.
RESTRICTIONS:
If specified, the date should be in numerical form. The year should
appear as yyyy.
PROCEDURE:
The Julian date of the day and time is question is used to determine
the number of days to have passed since 0 Jan 2000. This is used
in conjunction with the GST of that date to extrapolate to the current
GST; this is then used to get the LST. See Astronomical Algorithms
by Jean Meeus, p. 84 (Eq. 11-4) for the constants used.
EXAMPLE:
Find the Greenwich mean sidereal time (GMST) on 1987 April 10, 19h21m UT
For GMST, we set lng=0, and for UT we set Tz = 0
IDL> CT2LST, lst, 0, 0,ten(19,21), 10, 4, 1987
==> lst = 8.5825249 hours (= 8h 34m 57.0896s)
The Web site http://tycho.usno.navy.mil/sidereal.html contains more
info on sidereal time, as well as an interactive calculator.
PROCEDURES USED:
jdcnv - Convert from year, month, day, hour to julian date
MODIFICATION HISTORY:
Adapted from the FORTRAN program GETSD by Michael R. Greason, STX,
27 October 1988.
Use IAU 1984 constants Wayne Landsman, HSTX, April 1995, results
differ by about 0.1 seconds
Converted to IDL V5.0 W. Landsman September 1997
Longitudes measured *east* of Greenwich W. Landsman December 1998
(See goddard/pro/astro/ct2lst.pro)
NAME:
CURS
PURPOSE:
Selects an X windows cursor shape
CALLING SEQUENCE:
curs ;Interactively select a cursor shape.
curs, sel ;Make the given CURSOR_STANDARD value the cursor
shape.
OPTIONAL INPUT:
sel - Either an integer giving the CURSOR_STANDARD value (usually an
even value between 0 and 152) indicating the cursor shape, or
a string from the following menu
a -- Up arrow
b -- Left-angled arrow
c -- Right-angled arrow
d -- Crosshair
e -- Finger pointing left
f -- Finger pointing right
g -- Narrow crosshair
h -- Cycle through all possible standard cursor shapes
OUTPUTS:
None.
RESTRICTIONS:
Uses the CURSOR_STANDARD keyword of the DEVICE procedure. Although
this keyword is available under Macintosh and Windows IDL, the values
used by this procedure are specific to the X windows device.
PROCEDURE:
If the user supplies a valid cursor shape value, it is set. Otherwise,
an interactive command loop is entered; it will continue until a valid
value is given.
MODIFICATION HISTORY:
Converted to VAX 3100 workstations / IDL V2. M. Greason, STX, May 1990.
Avoid bad cursor parameter values W. Landsman February, 1991
Don't change value of input param W. Landsman August 1995
Converted to IDL V5.0 W. Landsman September 1997
Use SIZE(/TNAME) instead of DATATYPE() W. Landsman October 2001
(See goddard/pro/tv/curs.pro)
NAME:
CURVAL
PURPOSE:
Cursor controlled display of image intensities and astronomical coords
EXPLANATION
CURVAL displays different information depending whether the user
supplied an image array, and/or a FITS header array
CALLING SEQUENCE(S):
curval ;Display x,y and byte intensity (inten)
curval, im ;Display x,y,inten, and also pixel value (from image array)
curval, hdr, [ im, OFFSET = , ZOOM =, FILEIMAGE =]
OPTIONAL INPUTS:
Hdr = FITS Header array
Im = Array containing values that are displayed. Any type.
OPTIONAL KEYWORD INPUTS:
ALT - single character 'A' through 'Z' or ' ' specifying an alternate
astrometry system present in the FITS header. The default is
to use the primary astrometry or ALT = ' '. If /ALT is set,
then this is equivalent to ALT = 'A'. See Section 3.3 of
Greisen & Calabretta (2002, A&A, 395, 1061) for information about
alternate astrometry keywords.
OFFSET - 2 element vector giving the location of the image pixel (0,0)
on the window display. OFFSET can be positive (e.g if the
image is centered in a larger window) or negative (e.g. if the
only the central region of an image much larger than the window
is being displayed.
Default value is [0,0], or no offset.
ZOOM - Scalar specifying the magnification of the window with respect
to the image variable. Use, for example, if image has been
REBINed before display.
FILENAME = name of file to where CURVAL data can be saved.
Data will only be saved if left or center mouse button
are pressed.
OUTPUTS:
None.
SIDE EFFECTS:
X and Y values, etc., of the pixel under the cursor are constantly
displayed.
Pressing left or center mouse button prints a line of output, and
starts a new line.
Pressing right mouse button exits the procedure.
If the keyword FILENAME is defined, the date and time, and a heading
will be printed in the file before the data.
MINIMUM IDL VERSION:
V5.0 (uses !MOUSE, square brackets)
PROCEDURES CALLED:
ADSTRING(), EXTAST, GSSSXYAD, RADEC, SXPAR(), UNZOOM_XY, XY2AD
REVISION HISTORY:
Written, K. Rhode, STX May 1990
Added keyword FILENAME D. Alexander June 1991
Don't write to Journal file W. Landsman March 1993
Use astrometry structure W. Landsman Feb 1994
Modified for Mac IDL I. Freedman April 1994
Allow for zoomed or offset image W. Landsman Mar 1996
Proper rounding of zoomed pixel values W. Landsman/R. Hurt Dec. 1997
Converted to IDL V5.0 W. Landsman 10-Dec-1997
Remove unneeded calls to obsolete !ERR W. Landsman December 2000
Replace remaining !ERR calls with !MOUSE.BUTTON W. Landsman Jan 2001
Allow for non-celestial (e.g. Galactic) coordinates W. Landsman Apr 2003
Work if RA/Dec reversed in CTYPE keyword W. Landsman Feb. 2004
Always call UNZOOM_XY for MOUSSE compatibility W. Landsman Sep. 2004
Added ALT keyword W. Landsman October 2004
(See goddard/pro/tv/curval.pro)
NAME: DAOERF PURPOSE: Calulates the intensity, and derivatives, of a 2-d Gaussian PSF EXPLANATION: Corrects for the finite size of a pixel by integrating the Gaussian over the size of the pixel. Used in the IDL-DAOPHOT sequence. CALLING SEQUENCE: DAOERF, XIN, YIN, A, F, [ PDER ] INPUTS: XIN - input scalar, vector or array, giving X coordinate values YIN - input scalar, vector or array, giving Y coordinate values, must have same number of elements as XIN. A - 5 element parameter array describing the Gaussian A(0) - peak intensity A(1) - X position of peak intensity (centroid) A(2) - Y position of peak intensity (centroid) A(3) - X sigma of the gaussian (=FWHM/2.345) A(4) - Y sigma of gaussian OUTPUTS: F - array containing value of the function at each (XIN,YIN) The number of output elements in F and PDER is identical with the number of elements in X and Y OPTIONAL OUTPUTS: PDER - 2 dimensional array of size (NPTS,5) giving the analytic derivative at each value of F with respect to each parameter A. REVISION HISTORY: Written: W. Landsman October, 1987 Converted to IDL V5.0 W. Landsman September 1997
(See goddard/pro/idlphot/daoerf.pro)
NAME:
DAO_VALUE
PURPOSE:
Returns the value of a DAOPHOT point-spread function at a set of points.
EXPLANATION:
The value of the point-spread function is the sum of a
two-dimensional integral under a bivariate Gaussian function, and
a value obtained by interpolation in a look-up table. DAO_VALUE will
optionally compute the derivatives wrt X and Y
CALLING SEQUENCE:
Result = DAO_VALUE( xx, yy, gauss, psf, [ dvdx, dvdy ] )
INPUTS:
XX,YY - the real coordinates of the desired point relative
to the centroid of the point-spread function.
GAUSS - 5 element vector describing the bivariate Gaussian
GAUSS(0)- the peak height of the best-fitting Gaussian profile.
GAUSS(1,2) - x and y offsets from the centroid of the point-spread
function to the center of the best-fitting Gaussian.
GAUSS(3,4) - the x and y sigmas of the best-fitting Gaussian.
PSF - a NPSF by NPSF array containing the look-up table.
OUTPUTS:
RESULT - the computed value of the point-spread function at
a position XX, YY relative to its centroid (which
coincides with the center of the central pixel of the
look-up table).
OPTIONAL OUTPUTS:
DVDX,DVDY - the first derivatives of the composite point-spread
function with respect to x and y.
NOTES
although the arguments XX,YY of the function DAO_VALUE
are relative to the centroid of the PSF, the function RINTER which
DAO_VALUE calls requires coordinates relative to the corner of the
array (see code).
PROCEDURES CALLED:
DAOERF, RINTER()
REVISON HISTORY:
Adapted to IDL by B. Pfarr, STX, 11/17/87 from 1986 STSDAS version
of DAOPHOT
Converted to IDL V5.0 W. Landsman September 1997
(See goddard/pro/idlphot/dao_value.pro)
NAME:
DATE
PURPOSE:
Convert day-of-year to a DD-MMM-YYYY string
CALLING SEQUENCE:
D_String = DATE(Year, day )
INPUTS:
Year - Integer scalar specifying the year. If the year contains only
two digits, then it is assumed to indicate the number of
years after 1900.
Day - Integer scalar giving number of days after Jan 0 of the
specified year. Can be larger than 366
OUTPUTS:
D_String - String giving date in format '13-MAR-1986'
RESTRICTIONS:
Will not work for years before 100 AD
EXAMPLE:
IDL> print, date(1997,279)
'6-Oct-1997'
MODIFICATION HISTORY:
D.M. fecit 24 October,1983
Work for years outside of the 19th century W. Landsman September 1997
Converted to IDL V5.0 W. Landsman September 1997
(See goddard/pro/astro/date.pro)
NAME:
DATE_CONV
PURPOSE:
Procedure to perform conversion of dates to one of three possible formats.
EXPLANATION:
The following date formats are allowed
format 1: real*8 scalar encoded as:
year*1000 + day + hour/24. + min/24./60 + sec/24./60/60
where day is the day of year (1 to 366)
format 2: Vector encoded as:
date[0] = year (eg. 1987)
date[1] = day of year (1 to 366)
date[2] = hour
date[3] = minute
date[4] = second
format 3: string (ascii text) encoded as
DD-MON-YEAR HH:MM:SS.SS
(eg. 14-JUL-1987 15:25:44.23)
OR
YYYY-MM-DD HH:MM:SS.SS (ISO standard)
(eg. 1987-07-14 15:25:44.23 or 1987-07-14T15:25:44.23)
format 4: three element vector giving spacecraft time words
from a Hubble Space Telescope (HST) telemetry packet.
CALLING SEQUENCE
results = DATE_CONV( DATE, TYPE )
INPUTS:
DATE - input date in one of the three possible formats.
TYPE - type of output format desired. If not supplied then
format 3 (real*8 scalar) is used.
valid values:
'REAL' - format 1
'VECTOR' - format 2
'STRING' - format 3
'FITS' - YYYY-MM-DDTHH:MM:SS.SS'
TYPE can be abbreviated to the single character strings 'R',
'V', 'S' and 'F'.
Nobody wants to convert TO spacecraft time (I hope!)
OUTPUTS:
The converted date is returned as the function value.
NOTES:
Prior to Oct 1998, the returned real*8 date (format 1) was given as
(year-1900)*1000 + day + hour/24. + min/24./60 + sec/24./60/60
This output is ambiguous with respect to the year 2000. Note that the
current version of DATE_CONV() may not be backwards compatible with
versions prior to Oct 1998.
HISTORY:
version 1 D. Lindler July, 1987
adapted for IDL version 2 J. Isensee May, 1990
Made year 2000 compliant; allow ISO format input jls/acc Oct 1998
DJL/ACC Jan 1998, Modified to work with dates such as 6-JAN-1996 where
day of month has only one digit.
DJL, Nov. 2000, Added input/output format YYYY-MM-DDTHH:MM:SS.SS
(See goddard/pro/astro/date_conv.pro)
NAME:
DAYCNV
PURPOSE:
Converts Julian dates to Gregorian calendar dates
CALLING SEQUENCE:
DAYCNV, XJD, YR, MN, DAY, HR
INPUTS:
XJD = Julian date, positive double precision scalar or vector
OUTPUTS:
YR = Year (Integer)
MN = Month (Integer)
DAY = Day (Integer)
HR = Hours and fractional hours (Real). If XJD is a vector,
then YR,MN,DAY and HR will be vectors of the same length.
EXAMPLE:
IDL> DAYCNV, 2440000.D, yr, mn, day, hr
yields yr = 1968, mn =5, day = 23, hr =12.
WARNING:
Be sure that the Julian date is specified as double precision to
maintain accuracy at the fractional hour level.
METHOD:
Uses the algorithm of Fliegel and Van Flandern (1968) as reported in
the "Explanatory Supplement to the Astronomical Almanac" (1992), p. 604
Works for all Gregorian calendar dates with XJD > 0, i.e., dates after
-4713 November 23.
REVISION HISTORY:
Converted to IDL from Yeoman's Comet Ephemeris Generator,
B. Pfarr, STX, 6/16/88
Converted to IDL V5.0 W. Landsman September 1997
(See goddard/pro/astro/daycnv.pro)
NAME:
DBBUILD
PURPOSE:
Build a database by appending new values for every item.
EXPLANATION:
The database must be opened for update (with DBOPEN) before calling
DBBUILD.
CALLING SEQUENCE:
DBBUILD, [ v1, v2, v3, v4......v30, /NOINDEX, /SILENT, STATUS = ]
INPUTS:
v1,v2....v30 - vectors containing values for all items in the database.
V1 contains values for the first item, V2 for the second, etc.
The number of vectors supplied must equal the number of items
(excluding entry number) in the database. The number of elements
in each vector should be the same. A multiple valued item
should be dimensioned NVALUE by NENTRY, where NVALUE is the number
of values, and NENTRY is the number of entries.
OPTIONAL INPUT KEYWORDS:
NOINDEX - If this keyword is supplied and non-zero then DBBUILD will
*not* create an indexed file. Useful to save time if
DBBUILD is to be called several times and the indexed file need
only be created on the last call
SILENT - If the keyword SILENT is set and non-zero, then DBBUILD
will not print a message when the index files are generated
OPTIONAL OUTPUT KEYWORD:
STATUS - Returns a status code denoting whether the operation was
successful (1) or unsuccessful (0). Useful when DBBUILD is
called from within other applications.
EXAMPLE:
Suppose a database named STARS contains the four items NAME,RA,DEC, and
FLUX. Assume that one already has the four vectors containing the
values, and that the database definition (.DBD) file already exists.
IDL> !PRIV=2 ;Writing to database requires !PRIV=2
IDL> dbcreate,'stars',1,1 ;Create database (.DBF) & index (.DBX) file
IDL> dbopen,'stars',1 ;Open database for update
IDL> dbbuild,name,ra,dec,flux ;Write 4 vectors into the database
NOTES:
Do not call DBCREATE before DBBUILD if you want to append entries to
an existing database
DBBUILD checks that each value vector matches the idl type given in the
database definition (.DBD) file, and that character strings are the
proper length.
REVISION HISTORY:
Written W. Landsman March, 1989
Added /NOINDEX keyword W. Landsman November, 1992
User no longer need supply all items W. Landsman December, 1992
Added STATUS keyword, William Thompson, GSFC, 1 April 1994
Added /SILENT keyword, William Thompson, GSFC, October 1995
Allow up to 30 items, fix problem if first item was multiple value
W. Landsman GSFC, July 1996
Faster build of external databases on big endian machines
W. Landsman GSFC, November 1997
Converted to IDL V5.0 W. Landsman 24-Nov-1997
Use SIZE(/TNAME) for error mesage display W.Landsman July 2001
Fix message display error introduced July 2001 W. Landsman Oct. 2001
(See goddard/pro/database/dbbuild.pro)
NAME:
DBCIRCLE
PURPOSE:
Find sources in a database within specified radius of specified center
EXPLANATION:
Database must include items named 'RA' (in hours) and 'DEC' (in degrees)
and must have previously been opened with DBOPEN
CALLING SEQUENCE:
list = DBCIRCLE( ra_cen, dec_cen, [radius, dis, sublist, /SILENT,
TO_B1950, /TO_J2000 ] )
INPUTS:
RA_CEN - Right ascension of the search center in decimal HOURS, scalar
DEC_CEN - Declination of the search center in decimal DEGREES, scalar
RA_CEN and DEC_CEN should be in the same equinox as the
currently opened catalog.
OPTIONAL INPUT:
RADIUS - Radius of the search field in arc minutes, scalar.
DBCIRCLE prompts for RADIUS if not supplied.
SUBLIST - Vector giving entry numbers in currently opened database
to be searched. Default is to search all entries
OUTPUTS:
LIST - Vector giving entry numbers in the currently opened catalog
which have positions within the specified search circle
LIST is set to -1 if no sources fall within the search circle
!ERR is set to the number sources found.
OPTIONAL OUTPUT
DIS - The distance in arcminutes of each entry specified by LIST
to the search center (given by RA_CEN and DEC_CEN)
OPTIONAL KEYWORD INPUT:
/SILENT - If this keyword is set, then DBCIRCLE will not print the
number of entries found at the terminal
/TO_J2000 - If this keyword is set, then the entered coordinates are
assumed to be in equinox B1950, and will be converted to
J2000 before searching the database
/TO_B1950 - If this keyword is set, then the entered coordinates are
assumed to be in equinox J2000, and will be converted to
B1950 before searching the database
NOTE: The user must determine on his own whether the database
is in B1950 or J2000 coordinates.
METHOD:
A DBFIND search is first performed on a square area of given radius.
The list is the restricted to a circular area by using GCIRC to
compute the distance of each object to the field center.
EXAMPLE:
Find all Hipparcos stars within 40' of the nucleus of M33
(at J2000 1h 33m 50.9s 30d 39' 36.7'')
IDL> dbopen,'hipparcos'
IDL> list = dbcircle( ten(1,33,50.9), ten(3,39,36.7), 40)
PROCEDURE CALLS:
BPRECESS, DBFIND(), DBEXT, DB_INFO(), GCIRC, JPRECESS
REVISION HISTORY:
Written W. Landsman STX January 1990
Fixed search when crossing 0h July 1990
Spiffed up code a bit October, 1991
Converted to IDL V5.0 W. Landsman September 1997
Leave DIS vector unchanged if no entries found W. Landsman July 1999
Use maximum declination, rather than declination at field center to
correct RA for latitude effect W. Landsman September 1999
(See goddard/pro/database/dbcircle.pro)
NAME:
DBCLOSE
PURPOSE:
procedure to close a data base file
CALLING SEQUENCE:
dbclose
INPUTS:
None
OUTPUTS
None
SIDE EFFECTS:
the data base files currently opened are closed
PROCEDURE CALLS:
DB_INFO(), HOST_TO_IEEE
HISTORY:
version 2 D. Lindler Oct. 1987
For IDL version 2 August 1990
William Thompson, GSFC/CDS (ARC), 30 May 1994
Added support for external (IEEE) data format
Converted to IDL V5.0 W. Landsman September 1997
(See goddard/pro/database/dbclose.pro)
NAME:
DBCOMPARE
PURPOSE:
Display two entries in an IDL database side by side in a column format
CALLING SEQUENCE:
dbcompare, list1, list2, [items, TEXTOUT= , /DIFF]
INPUTS:
list1 - Integer scalar giving first entry number to be compared.
list2 - Integer scalar giving second entry number to be compared.
OPTIONAL INPUT-OUTPUT:
items - items to be compared, if not supplied then all items will be
compared. The items can be specified in any of the following ways:
form 1 scalar string giving item(s) as list of names
separated by commas
form 2 string array giving list of item names
form 3 string of form '$filename' giving name
of text file containing items (one item per line) line)
form 4 integer scalar giving single item number or
integer vector list of item numbers
form 5 Null string specifying interactive selection. This
is the default if 'items' is not supplied
form 6 '*' select all items (= default)
If items was undefined or a null string on input, then
on output it will contain the items interactively selected.
OPTIONAL INPUT KEYWORDS:
/DIFF - If this keyword is set and non-zero, then only the items
in the database that differ will be printed
TEXTOUT - Scalar Integer (1-7) Used to determine output device. See
TEXTOPEN for more info.
SYSTEM VARIABLES:
Output device controlled by non-standard system variable !TEXTOUT, if
TEXTOUT keyword is not used.
EXAMPLE:
Display entries 3624 and 3625 in column form showing only the items
that differ.
IDL> dbcompare,3624,3625,/diff
PROCEDURES USED:
DB_INFO(), DB_ITEM, DB_ITEM_INFO(), DBRD, DBXVAL()
TEXTOPEN, TEXTCLOSE
HISTORY:
Written, W. Landsman July 1996
Converted to IDL V5.0 W. Landsman September 1997
Fix documentation, add Syntax display W. Landsman November 1998
Replace DATATYPE() with size(/TNAME) W. Landsman November 2001
(See goddard/pro/database/dbcompare.pro)
NAME:
DBCOMPRESS
PURPOSE:
Compress a .dbf database file after a call to DBDELETE
EXPLANATION:
The procedure DBDELETE will remove specified entries from a database
but it will not free the unused space. DBCOMPRESS will compress
the .dbf file so that it only contains valid entries.
CALLING SEQUENCE:
DBCOMPRESS, dbname
INPUT PARAMETERS:
dbname - Name of the database to be compressed, scalar string
NOTES:
(1) Will not compress the index (.dbx) file. The size of the .dbx file
is controlled by the MaxEntries value in the database definition
(.dbd) file
(2) The updated .dbf file is written in the current directory.
This may need to be moved into the ZDBASE directory.
PROCEDURE CALLS:
DBOPEN, DB_INFO(), FIND_WITH_DEF()
REVISION HISTORY:
Written, W. Landsman Raytheon STX May 1998
Converted to IDL V5.0 June 1998
(See goddard/pro/database/dbcompress.pro)
NAME:
DBCREATE
PURPOSE:
Create a new data base (.dbf), index (.dbx) or description (.dbh) file
EXPLANATION:
A database definition (.dbd) file must already exist.
The default directory must be a ZDBASE: directory.
CALLING SEQUENCE:
dbcreate, name,[ newindex, newdb, maxitems] [,/EXTERNAL]
INPUTS:
name- name of the data base (with no qualifier), scalar string.
The description will be read from the file "NAME".dbd
OPTIONAL INPUTS:
newindex - if non-zero then a new index file is created,
otherwise it is assumed that changes do not affect the
index file. (default=0)
newdb - if non-zero then a new data base file (.dbf) will
be created. Otherwise changes are assumed not to affect
the file's present format.
maxitems - maximum number of items in data base.
If not supplied then the number of items is
limited to 200.
OUTPUTS:
NONE.
OPTIONAL INPUT KEYWORD:
external - If set, then the database is written with an external data
representation. This allows the database files to be used on
any computer platform, e.g. through NFS mounts, but some
overhead is added to reading the files. The default is to
write the data in the native format of the computer being used.
This keyword is only paid attention to if NEWDB or NEWINDEX
are nonzero. Otherwise, the database is opened to find
out if it uses external representation or not.
Extreme caution should be used if this keyword is used with
only NEWINDEX set to a nonzero value. This mode is allowed so
that databases written on machines which already use the
external data representation format, e.g. Sun workstations, to
be marked external so that other machines can read them.
PROCEDURE CALLS:
GETTOK(), FIND_WITH_DEF(), HOST_TO_IEEE, ZPARCHECK
RESTRICTIONS:
If newdb=0 is not specified, the changes to the .dbd file can
not alter the length of the records in the data base file.
and may not alter positions of current fields in the file.
permissible changes are:
1) utilization of spares to create a item or field
2) change in field name(s)
3) respecification of index items
4) changes in default print formats
5) change in data base title
6) changes in pointer specification to other data
data bases
!priv must be 2 or greater to execute this routine.
SIDE EFFECTS:
data base description file ZDBASE:name.dbh is created
and optionally ZDBASE:name.dbf (data file) and
ZDBASE.dbx (index file) if it is a new data base.
REVISION HISTORY:
D. Lindler, GSFC/HRS, October 1987
Modified: Version 1, William Thompson, GSFC, 29 March 1994
Version 2, William Thompson, GSFC/CDS (ARC), 28 May 1994
Added EXTERNAL keyword.
Version 4, William Thompson, GSFC, 3 November 1994
Modified to allow ZDBASE to be a path string.
8/14/95 JKF/ACC - allow EXTERNAL data for newindex OR newdb modes.
Make sure all databases closed before starting W. Landsman June 1997
Converted to IDL V5.0 W. Landsman September 1997
Added new unsigned and 64 bit integer datatypes W. Landsman July 2001
(See goddard/pro/database/dbcreate.pro)
NAME:
DBDELETE
PURPOSE:
Deletes specified entries from data base
CALLING SEQUENCE:
DBDELETE, list, [ name, /DEBUG ]
INPUTS:
list - list of entries to be deleted, scalar or vector
name - optional name of data base, scalar string. If not specified
then the data base file must be previously opened for update
by DBOPEN.
OPERATIONAL NOTES:
!PRIV must be at least 3 to execute.
SIDE EFFECTS:
The data base file (ZDBASE:name.DBF) is modified by removing the
specified entries and reordering the remaining entry numbers
accordingly (ie. if you delete entry 100, it will be replaced
by entry 101 and the database will contain 1 less entry.
EXAMPLE:
Delete entries in a database STARS where RA=DEC = 0.0
IDL> !PRIV= 3 ;Set privileges
IDL> dbopen,'STARS',1 ;Open for update
IDL> list = dbfind('ra=0.0,dec=0.0') ;Obtain LIST vector
IDL> dbdelete, list ;Delete specified entries from db
NOTES:
The procedure is rather slow because the entire database is re-
created with the specified entries deleted.
OPTIONAL KEYWORD INPUT:
DEBUG - if this keyword is set and non-zero, then additional
diagnostics will be printed as each entry is deleted.
COMMON BLOCKS:
DBCOM
PROCEDURE CALLS:
DBINDEX, DB_INFO(), DBOPEN, DBPUT, ZPARCHECK
HISTORY
Version 2 D. Lindler July, 1989
Updated documentation W. Landsman December 1992
William Thompson, GSFC, 28 February 1995
Fixed bug when external representation used.
Fixed for case where second parameter supplied W. Landsman April 1996
Use keyword DEBUG rather than !DEBUG W. Landsman May 1997
Converted to IDL V5.0 W. Landsman September 1997
(See goddard/pro/database/dbdelete.pro)
NAME:
DBEDIT
PURPOSE:
Interactively edit specified fields in a database.
EXPLANATION:
The value of each field is displayed, and the user has the option
of changing or keeping the value. Widgets will be used if they
are available.
CALLING SEQUENCE:
dbedit, list, [ items ]
INPUTS:
list - scalar or vector of database entry numbers. Set list = 0 to
interactively add a new entry to a database. Set list = -1 to edit
all entries.
OPTIONAL INPUTS:
items - list of items to be edited. If omitted, all fields can be
edited.
COMMON BLOCKS:
DB_COM -- contains information about the opened database.
DBW_C -- contains information intrinsic to this program.
SIDE EFFECTS:
Will update the database files.
RESTRICTIIONS:
Database must be opened for update prior to running
this program. User must be running DBEDIT from an
account that has write privileges to the databases.
If one is editing an indexed item, then after all edits are complete,
DBINDEX will be called to reindex the entire item. This may
be time consuming.
Cannot be used to edit items with multiple values
EXAMPLE:
Suppose one had new parallaxes for all stars fainter than 5th magnitude
in the Yale Bright Star Catalog and wanted to update the PRLAX and
PRLAX_CODE fields with these new numbers
IDL> !priv=2
IDL> dbopen, 'yale_bs', 1 ;Open catalog for update
IDL> list = dbfind( 'v>5') ;Find fainter than 5th magnitude
IDL> dbedit, list, 'prlax, prlax_code' ;Manual entry of new values
PROCEDURE:
(1) Use the cursor and point to the value you want to edit.
(2) Type the new field value over the old field value.
(3) When you are done changing all of the field values for each entry
save the entry to the databases by pressing 'SAVE ENTRY TO DATABASES'.
Here all of the values will be checked to see if they are the correct
data type. If a field value is not of the correct data type, it will
not be saved.
Use the buttons "PREV ENTRY" and "NEXT ENTRY" to move between entry
numbers. You must save each entry before going on to another entry in
order for your changes to be saved.
Pressing "RESET THIS ENTRY" will remove any unsaved changes to the
current entry.
REVISION HISTORY:
Adapted from Landsman's DBEDIT
added widgets, Melissa Marsh, HSTX, August 1993
do not need to press return after entering each entry,
fixed layout problem on SUN,
Melissa Marsh, HSTX, January 1994
Only updates the fields which are changed. Joel Offenberg, HSTX, Mar 94
Corrected test for changed fields Wayne Landsman HSTX, Mar 94
Removed a couple of redundant statements W. Landsman HSTX Jan 96
Converted to IDL V5.0 W. Landsman September 1997
Replace DATAYPE() with size(/TNAME) W. Landsman November 2001
Work for entry numbers > 32767 W. Landsman December 2001
(See goddard/pro/database/dbedit.pro)
NAME:
DBEDIT_BASIC
PURPOSE:
Subroutine of DBEDIT_BASIC to edit a database on a dumb terminal.
EXPLANATION:
Interactively edit specified fields in a database. The
value of each field is displayed, and the user has the option
of changing or keeping the value.
CALLING SEQUENCE:
dbedit_basic, list, [ items ]
INPUTS:
list - scalar or vector of database entry numbers. Set LIST=0
to interactively add a new entry to a database.
OPTIONAL INPUTS
items - list of items to be edited. If not supplied, then the
value of every field will be displayed.
NOTES:
(1) Database must be opened for update (dbopen,<dbname>,1) before
calling DBEDIT_BASIC. User must have write privileges on the database
files.
(2) User gets a second chance to look at edited values, before
they are actually written to the database
PROMPTS:
The item values for each entry to be edited are first displayed
User is the asked "EDIT VALUES IN THIS ENTRY (Y(es), N(o), or Q(uit))?
If user answers 'Y' or hits RETURN, then each item is displayed
with its current value, which the user can update. If user answered
'N' then DBEDIT_BASIC skips to the next entry. If user answers 'Q'
then DBEDIT will exit, saving all previous changes.
EXAMPLE:
Suppose V magnitudes (V_MAG) in a database STARS with unknown values
were assigned a value of 99.9. Once the true values become known, the
database can be edited
IDL> !PRIV=2 & dbopen,'STARS',1 ;Open database for update
IDL> list = dbfind('V_MAG=99.9') ;Get list of bad V_MAG values
IDL> dbedit,list,'V_MAG' ;Interactively insert good V_MAG values
REVISION HISTORY:
Written W. Landsman STX April, 1989
Rename DBEDIT_BASIC from DBEDIT July, 1993
Converted to IDL V5.0 W. Landsman September 1997
Change DATATYPE() to size(/TNAME) W. Landsman November 2001
(See goddard/pro/database/dbedit_basic.pro)
NAME:
DBEXT
PURPOSE:
Extract values of up to 12 items from an IDL database
EXPLANATION:
Procedure to extract values of up to 12 items from
data base file, and place into IDL variables
CALLING SEQUENCE:
dbext,list,items,v1,[v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,v12]
INPUTS:
list - list of entry numbers to be printed, vector or scalar
If list = -1, then all entries will be extracted.
list may be converted to a vector by DBEXT
items - standard item list specification. See DBPRINT for
the 6 different ways that items may be specified.
OUTPUTS:
v1...v12 - the vectors of values for up to 12 items.
EXAMPLE:
Extract all RA and DEC values from the currently opened database, and
place into the IDL vectors, IDLRA and IDLDEC.
IDL> DBEXT,-1,'RA,DEC',idlra,idldec
HISTORY
version 2 D. Lindler NOV. 1987
check for INDEXED items W. Landsman Feb. 1989
Converted to IDL V5.0 W. Landsman September 1997
(See goddard/pro/database/dbext.pro)
NAME:
DBEXT_DBF
PURPOSE:
Subroutine of DBEXT to extract values of up to 18 items from a database
EXPLANATION:
This is a subroutine of DBEXT, which is the routine a user should
normally use.
CALLING SEQUENCE:
dbext_dbf,list,dbno,sbyte,nbytes,idltype,nval,v1,[ v2,v3,v4,v5,v6,v7,
v8,v9,v10,v11,v12,v13,v14,v15,v16,v17,v18 ITEM_DBNO = ]
INPUTS:
list - list of entry numbers to extract desired items. It is the
entry numbers in the primary data base unless dbno is greater
than or equal to -1. In that case it is the entry number in
the specified data base.
dbno - number of the opened db file
if set to -1 then all data bases are included
sbyte - starting byte in the entry. If single data base then it must
be the starting byte for that data base only and not the
concatenation of db records
nbytes - number of bytes in the entry
idltype - idl data type of each item to be extracted
nval - number of values per entry of each item to be extracted
OUTPUTS:
v1...v18 - the vectors of values for up to 18 items
OPTIONAL INPUT KEYWORD:
item_dbno - A vector of the individual database numbers for each item.
Simplifies the code for linked databases
PROCEDURE CALLS:
DB_INFO(), DB_ITEM_INFO(), DBRD, DBXVAL(), IS_IEEE_BIG(), IEEE_TO_HOST
HISTORY
version 1 D. Lindler Nov. 1987
Extract multiple valued entries W. Landsman May 1989
William Thompson, GSFC/CDS (ARC), 1 June 1994
Added support for external (IEEE) representation.
Work with multiple element string items W. Landsman August 1995
Increase speed for external databases on IEEE machines WBL August 1996
IEEE conversion implemented on blocks of entries using BIG
Added keyword ITEM_DBNO R. Schwartz, GSFC/SDAC, August 1996
Return a vector even if only 1 value W. Thompson October 1996
Change variable name of BYTESWAP to BSWAP W. Thompson Mar 1997
Use /OVERWRITE with reform W. Landsman May 1997
Converted to IDL V5.0 W. Landsman September 1997
Increase maximum number of items to 18 W. Landsman November 1999
2 May 2003, W. Thompson, Use DBXVAL with BSWAP instead of IEEE_TO_HOST.
(See goddard/pro/database/dbext_dbf.pro)
NAME:
DBEXT_IND
PURPOSE:
routine to read a indexed item values from index file
CALLING SEQUENCE:
dbext_ind,list,item,dbno,values
INPUTS:
list - list of entry numbers to extract values for
(if it is a scalar, values for all entries are extracted)
item - item to extract
dbno - number of the opened data base
OUTPUT:
values - vector of values returned as function value
HISTORY:
version 1 D. Lindler Feb 88
Faster processing of string values W. Landsman April, 1992
William Thompson, GSFC/CDS (ARC), 30 May 1994
Added support for external (IEEE) data format
Converted to IDL V5.0 W. Landsman September 1997
Allow multiple valued (nonstring) index items W. Landsman November 2000
Use 64bit integer index for large databases W. Landsman February 2001
Fix sublisting of multiple valued index items W. Landsamn March 2001
(See goddard/pro/database/dbext_ind.pro)
NAME:
DBFIND()
PURPOSE:
Search data base for entries with specified characteristics
EXPLANATION:
Function to search data base for entries with specified
search characteristics.
CALLING SEQUENCE:
result = dbfind(spar,[ listin, /SILENT, /FULLSTRING, ERRMSG=, Count = ])
INPUTS:
spar - search_parameters (string)...each search parameter
is of the form:
option 1) min_val < item_name < max_val
option 2) item_name = value
option 3) item_name = [value_1, value_10]
Note: option 3 is also the slowest.
option 4) item_name > value
option 5) item_name < value
option 6) item_name = value(tolerance) ;eg. temp=25.0(5.2)
option 7) item_name ;must be non-zero
Multiple search parameters are separated by a comma.
eg. 'cam_no=2,14<ra<20'
Note: < is interpreted as less than or equal.
> is interpreted as greater than or equal.
RA and DEC keyfields are stored as floating point numbers
in the data base may be entered as HH:MM:SEC and
DEG:MIN:SEC. Where:
HH:MM:SEC equals HH + MM/60.0 + SEC/3600.
DEG:MIN:SEC equals DEG + MIN/60.0 + SEC/3600.
For example:
40:34:10.5 < dec < 43:25:19 , 8:22:1.0 < ra < 8:23:23.0
Specially encoded date/time in the data base may
be entered by CCYY/DAY:hr:min:sec which is
interpreted as
CCYY*1000+DAY+hr/24.0+min/24.0/60.+sec/24.0/3600.
If a two digit year is supplied and YY GE 40 then it is
understood to refer to year 1900 +YY; if YY LT 40 then it is
understood to refer to year 2000 +YY
For example
1985/201:10:35:30<date_time<1985/302:10:33:33.4
would specify all entries between:
year 1985 day 201 at 10:35:30 to
day 302 at 10:33:33.4
The date/time may also be encoded as:
DD-MMM-YEAR HH::MM:SS.SS
eg. 12-JUL-86 10:23:33.45
(this is the format of system variable !stime)
Multiple search parameters may be stored in a string
array (one parameter per array element) instead of
concatenating them with commas in a single string.
Example:
input_array = strarr(2)
input_array(0) = '14<ra<16' ; 14-16 hrs of ra.
input_array(1) = '8<dec<20' ; + 8-20 deg. decl.
OPTIONAL INPUT:
listin - gives list of entries to be searched. If not supplied or
set to -1 then all entries are searched.
OUTPUT:
List of ENTRY numbers satisfying search characteristics
is returned as the function value.
OPTIONAL INPUT KEYWORDS:
/SILENT - If the keyword SILENT is set and non-zero, then DBFIND
will not print the number of entries found.
/FULLSTRING - By default, one has a match if a search string is
included in any part of a database value (substring match).
But if /FULLSTRING is set, then all characters in the database
value must match the search string (excluding leading and
trailing blanks). Both types of string searches are case
insensitive.
ERRMSG = If defined and passed, then any error messages will
be returned to the user in this parameter rather
than depending on the MESSAGE routine in IDL. If no
errors are encountered, then a null string is
returned. In order to use this feature, ERRMSG must
be defined first, e.g.
ERRMSG = ''
DB_ITEM, ERRMSG=ERRMSG, ...
IF ERRMSG NE '' THEN ...;
OPTIONAL OUTPUT KEYWORD:
COUNT - Integer scalar giving the number of valid matches
PROCEDURE CALLS:
DB_INFO, DB_ITEM, DB_ITEM_INFO, DBEXT, DBEXT_IND, DBFIND_ENTRY,
DBFIND_SORT, DBFPARSE, DBRD, DBSEARCH, ZPARCHECK,IS_IEEE_BIG
RESTRICTIONS:
The data base must be previously opened with DBOPEN.
SIDE EFFECTS:
The obsolete system variable !ERR is set to number of entries found
REVISION HISTORY:
Written : D. Lindler, GSFC/HRS, November 1987
Version 2, Wayne Landsman, GSFC/UIT (STX), 1 April 1994
Added FULLSTRING keyword.
Version 3, William Thompson, GSFC, 1 April 1994
Added check for empty database
Version 4, William Thompson, GSFC, 5 April 1994
Changed so that !ERR is zero when database is empty,
and LISTIN is returned, based on discussion with Wayne
Landsman.
Version 5, Wayne Landsman, GSFC/UIT (STX), 26 May 1994
Added error message when database is empty.
Version 6, William Thompson, GSFC, 14 March 1995
Added FULLSTRING keyword to DBFIND_SORT call
Version 7, Richard Schwartz, GSFC/SDAC 23 August 1996
Move external to host conversion from DBRD to
operation on extracted values only.
Version 8, William Thompson, GSFC, 3 December 1996
Renamed BYTESWAP variable to BSWAP--appeared to be
conflicting with function of same name.
Version 9, William Thompson, GSFC, 17-Mar-1997
Added keyword ERRMSG
Version 10, July, 1997 W. Landsman, added CATCH errors
Converted to IDL V5.0 W. Landsman October 1997
Update documentation for new Y2K compliant DBFPARSE W. Landsman Nov 1998
Suppress empty database message with /SILENT, W. Landsman Jan 1999
Added COUNT keyword, deprecate !ERR W. Landsman March 2000
Added new unsigned & 64bit datatypes W. Landsman July 2001
(See goddard/pro/database/dbfind.pro)
NAME:
DBFIND_ENTRY
PURPOSE:
Subroutine of DBFIND to perform an entry number search
EXPLANATION:
This is a subroutine of dbfind and is not a standalone procedure
It performs a entry number search.
CALLING SEQUENCE:
dbfind_entry, type, svals, nentries, values, [COUNT = ]
INPUTS:
type - type of search (output from dbfparse)
svals - search values (output from dbfparse)
values - array of values to search
OUTPUT:
good - indices of good values
OPTIONAL OUTPUT KEYWORD:
Count - integer scalar giving the number of valid matches
SIDE EFFECTS"
The obsolete system variable !err is set to number of good values
REVISION HISTORY:
D. Lindler July,1987
Fixed test for final entry number W. Landsman Sept. 95
Converted to IDL V5.0 W. Landsman September 1997
Added COUNT keyword, deprecate !ERR W. Landsman March 2000
Better checking of out of range values W. Landsman February 2002
(See goddard/pro/database/dbfind_entry.pro)
NAME:
DBFIND_SORT
PURPOSE:
Subroutine of DBFIND to perform a search using sorted values
EXPLANATION:
This is a subroutine of dbfind and is not a standalone procedure
It is used to limit the search using sorted values V5.2 or later!
CALLING SEQUENCE:
dbfind_sort, it, type, svals, list, [/FULLSTRING, COUNT = ]
INPUT:
it - item number, scalar
type - type of search (output from dbfparse)
svals - search values (output from dbfparse)
INPUT/OUTPUT:
list - found entries
OPTIONAL INPUT KEYWORD:
/FULLSTRING - By default, one has a match if a search string is
included in any part of a database value (substring match).
But if /FULLSTRING is set, then all characters in the database
value must match the search string (excluding leading and
trailing blanks). Both types of string searches are case
insensitive.
OPTIONAL OUTPUT KEYWORD
Count - Integer scalar giving the number of matches found
SYSTEM VARIABLES:
The obsolete system variable !err is set to number of good values
!ERR = -2 for an invalid search
REVISION HISTORY:
D. Lindler July,1987
William Thompson, GSFC/CDS (ARC), 30 May 1994
Added support for external (IEEE) data format
William Thompson, GSFC, 14 March 1995 Added keyword FULLSTRING
Converted to IDL V5.0 W. Landsman September 1997
Minimize use of obsolete !ERR variable W. Landsman February 2000
Added COUNT keyword, deprecate !ERR W. Landsman March 2000
Use 64 bit integers V5.2 or later
Include new IDL unsigned & 64 bit integer datatypes W.Landsman July 2001
Make sure returned list vector is LONG W. Landsman August 2001
(See goddard/pro/database/dbfind_sort.pro)
NAME:
DBFPARSE
PURPOSE:
Parse the search string supplied to DBFIND. Not a standalone routine
CALLING SEQUENCE:
DBFPARSE, [ spar, items, stype, values ]
INPUTS:
spar - search parameter specification, scalar string
OUTPUTS:
items - list of items to search on
stype - search type, numeric scalar
0 item=values(j,0)
-1 item>values(j,0)
-2 item<values(j,1)
-3 values(j,0)<item<values(j,1)
-4 item is non zero
-5 item=values(j,0) within tolerance values(j,1)
0< items in list values(j,i) for i=0,stype-1
values - search values, 20 x 10 string array, can parse a string
with up to 20 items specifications, each item can have 10
values
REVISION HISTORY:
D. Lindler NOV, 1987
Check for valid numeric values before assuming a date string
W. Landsman July, 1993
Converted to IDL V5.0 W. Landsman September 1997
Accept four digit years when in ccyy/doy format W. Landsman October 1998
(See goddard/pro/database/dbfparse.pro)
NAME:
DBGET
PURPOSE:
Find entry numbers which contain specified values of a given item.
EXPLANATION:
DBGET() is useful as an alternative to DBFIND() when the desired
search values are not easily expressed as a string.
CALLING SEQUENCE:
list = dbget( item, values, [ listin ], /SILENT, /FULLSTRING )
INPUTS:
item - Item name or number
values - scalar or vector containing item values to search for.
OPTIONAL INPUTS:
listin - list of entries to be searched. If not supplied, or
set to -1, then all entries are searched
OUTPUT:
list - vector giving the entry number of entries containing desired
item values. The number of elements in LIST may be different
from that of VALUE, since a value might be located zero, once,
or many times in the database. Use the function DBMATCH if a
one to one correspondence is desired between VALUES and LIST.
OPTIONAL INPUT KEYWORDS:
/SILENT - If this keyword is set, then DBGET will not display
the number of entries found
/FULLSTRING - By default, one has a match if a search string is
included in any part of a database value (substring match).
But if /FULLSTRING is set, then all characters in the database
value must match the search string (excluding leading and
trailing blanks). Both types of string searches are case
insensitive.
OPTIONAL OUTPUT KEYWORD:
COUNT - Integer scalar giving the number of valid matches
RESTRICTIONS:
When linked databases are opened together, DBGET can only be used to
search on items in the primary database.
EXAMPLE:
Get info on selected HD stars in Bright Star catalogue
IDL> dbopen, 'YALE_BS'
IDL> hdno = [1141,2363,3574,4128,6192,6314,6668] ;Desired HD numbers
IDL> list = dbget( 'HD', hdno ) ;Get corresponding entry numbers
SYSTEM VARIABLES:
The obsolete system variable !ERR is set to number of entries found
REVISION HISTORY:
Written, W. Landsman STX February, 1989
William Thompson, GSFC, 14 March 1995 Added keyword FULLSTRING
Converted to IDL V5.0 W. Landsman September 1997
Added COUNT keyword, deprecate !ERR W. Landsman March 2000
Fix bug introduced March 2000 W. Landsman November 2000
(See goddard/pro/database/dbget.pro)
NAME:
DBHELP
PURPOSE:
List available databases or items in the currently open database
EXPLANATION:
Procedure to either list available databases (if no database is
currently open) or the items in the currently open database.
CALLING SEQUENCE:
dbhelp, [ flag , TEXTOUT=, /SORT ]
INPUT:
flag - (optional) if set to nonzero then item or database
descriptions are also printed
default=0
If flag is a string, then it is interpreted as the
name of a data base (if no data base is opened) or a name
of an item in the opened data base. In this case, help
is displayed only for the particular item or database
OUTPUTS:
None
OPTIONAL INPUT KEYWORDS:
TEXTOUT - Used to determine output device. If not present, the
value of !TEXTOUT system variable is used (see TEXTOPEN )
textout=0 Nowhere
textout=1 if a TTY then TERMINAL using /more option
otherwise standard (Unit=-1) output
textout=2 if a TTY then TERMINAL without /more option
otherwise standard (Unit=-1) output
textout=3 <program>.prt
textout=4 laser.tmp
textout=5 user must open file
textout=7 same as 3 but text is appended to <program>.prt
file if it already exists.
textout = filename (default extension of .prt)
/SORT - If set and non-zero, then the help items will be displayed
sorted alphabetically. If more than one database is open,
then this keyword does nothing.
METHOD:
If no data base is opened then a list of data bases are
printed, otherwise the items in the open data base are printed.
If a string is supplied for flag and a data base is opened
flag is assumed to be an item name. The information for that
item is printed along with contents in a optional file
zdbase:dbname_itemname.hlp
if a string is supplied for flag and no data base is opened,
then string is assumed to be the name of a data base file.
only information for that file is printed along with an
optional file zdbase:dbname.hlp.
PROCEDURES USED:
DB_INFO(),DB_ITEM_INFO(),FIND_WITH_DEF(), TEXTOPEN, TEXTCLOSE, UNIQ()
IDL VERSION:
V5.3 or later (uses vectorized FDECOMP)
HISTORY:
Version 2 D. Lindler Nov 1987 (new db format)
Faster printing of title desc. W. Landsman May 1989
Keyword textout added, J. Isensee, July, 1990
Modified to work on Unix, D. Neill, ACC, Feb 1991.
William Thompson, GSFC/CDS (ARC), 1 June 1994
Added support for external (IEEE) representation.
William Thompson, GSFC, 3 November 1994
Modified to allow ZDBASE to be a path string.
Remove duplicate database names Wayne Landsman December 1994
8/17/95 jkf/acc - force lowercase filenames for .hlp files.
Converted to IDL V5.0 W. Landsman September 1997
Added /SORT keyword J. Sandoval/W. Landsman October 1998
V5.3 version use vectorized FDECOMP W. Landsman February 2001
Recognize 64 bit, unsigned integer datatypes W. Landsman September 2001
Fix display of number of bytes with /SORT W. Landsman February 2002
Assume since V5.2 W. Landsman February 2002
(See goddard/pro/database/dbhelp.pro)
NAME:
DBINDEX
PURPOSE:
Procedure to create index file for data base (V5.2 or later)
CALLING SEQUENCE:
dbindex, [ items ]
OPTIONAL INPUT:
items - names or numbers of items to be index -- if not supplied,
then all indexed fields will be processed.
OUTPUT:
Index file <name>.dbx is created on disk location ZDBASE:
OPERATIONAL NOTES:
(1) Data base must have been previously opened for update
by DBOPEN
(2) Only 18 items can be indexed at one time. If the database has
more than 18 items, then two separate calls to DBINDEX are needed.
PROCEDURES CALLED:
DBINDEX_BLK, DB_INFO(), DB_ITEM, DB_ITEM_INFO(), IEEE_TO_HOST,
IS_IEEE_BIG()
HISTORY:
version 2 D. Lindler Nov 1987 (new db format)
W. Landsman added optional items parameter Feb 1989
M. Greason converted to IDL version 2. June 1990.
William Thompson, GSFC/CDS (ARC), 30 May 1994
Added support for external (IEEE) data format
Test if machine is bigendian W. Landsman May, 1996
Change variable name of BYTESWAP to BSWAP W. Thompson Mar, 1997
Increased number of fields to 15 W. Landsman June, 1997
Converted to IDL V5.0 W. Landsman September 1997
Increase number of items to 18 W. Landsman November 1999
Allow multiple valued (nonstring) index items W. Landsman November 2000
Use 64 bit integers for V5.2 or later W. Landsman February 2001
(See goddard/pro/database/dbindex.pro)
NAME:
DBINDEX_BLK
PURPOSE:
Subroutine of DBINDEX to create associated variable of correct datatype
EXPLANATION:
DBINDEX_BLK will offset into the file by a specified amount in
preparation for writing to the file. V5.2 or later
CALLING SEQUENCE:
res = dbindex_blk(unit, nb, bsz, ofb, dtype)
INPUTS:
unit The unit number assigned to the file.
nb The number of blocks to offset into the file.
bsz The size of each block, in bytes, to offset into the file.
ofb The offset into the block, in bytes.
dtype The IDL datatype as defined in the SIZE function
OUTPUTS:
res The returned variable. This is an associated variable.
RESTRICTIONS:
The file must have been previously opened.
MODIFICATION HISTORY:
Written by Michael R. Greason, STX, 14 June 1990.
Converted to IDL V5.0 W. Landsman September 1997
Use 64 bit integer for very large databases W. Landsman February 2001
Added new unsigned & 64bit integer datatypes W. Landsman July 2001
(See goddard/pro/database/dbindex_blk.pro)
NAME:
DBMATCH
PURPOSE:
Find the entry number in a database for each element of item values
EXPLANATION:
DBMATCH() is especially useful for finding a one-to-one
correspondence between entries in different databases, and thus to
create the vector needed for database pointers.
CALLING SEQUENCE:
list = DBMATCH( item, values, [ listin, /FULLSTRING ] )
INPUTS:
ITEM - Item name or number, scalar
VALUES - scalar or vector containing item values to search for.
OPTIONAL INPUTS:
LISTIN - list of entries to be searched. If not supplied, or
set to -1, then all entries are searched
OUTPUT:
LIST - vector of entry numbers with the same number of elements as
VALUES. Contains a value of 0 wherever the corresponding item
value was not found.
OPTIONAL INPUT:
/FULLSTRING - By default, one has a match if a search string is
included in any part of a database value (substring match).
But if /FULLSTRING is set, then all characters in the database
value must match the search string (excluding leading and
trailing blanks). Both types of string searches are case
insensitive.
NOTES:
DBMATCH is meant to be used for items which do not have duplicate values
in a database (e.g. catalog numbers). If more than one entry is found
for a particular item value, then only the first one is stored in LIST.
When linked databases are opened together, DBMATCH can only be
used to search on items in the primary database.
EXAMPLE:
Make a vector which points from entries in the Yale Bright Star catalog
to those in the Hipparcos catalog, using the HD number
IDL> dbopen, 'yale_bs' ;Open the Yale Bright star catalog
IDL> dbext, -1, 'HD', hd ;Get the HD numbers
IDL> dbopen, 'hipparcos' ;Open the Hipparcos catalog
IDL> list = dbmatch( 'HD', HD) ;Get entries in Hipparcos catalog
;corresponding to each HD number.
PROCEDURE CALLS:
DB_ITEM, DB_ITEM_INFO(), DBEXT, DBFIND_SORT()
REVISION HISTORY:
Written, W. Landsman STX February, 1990
Fixed error when list in parameter used May, 1992
Faster algorithm with sorted item when listin parameter supplied
Added keyword FULLSTRING,check for empty database, William Thompson,
GSFC, 15 March 1995
Work for more than 32767 values, added CATCH W. Landsman July 1997
Converted to IDL V5.0 W. Landsman 25-Nov-1997
Change some loop variables to type LONG, W. Landsman July 1999
Remove loop for substring searches (faster) W. landsman August 1999
Replace DATATYPE() with size(/TNAME) W. Landsman November 2001
Fixed typo when search on sorted items W. Landsman February 2002
(See goddard/pro/database/dbmatch.pro)
NAME:
DBOPEN
PURPOSE:
Routine to open an IDL database
CALLING SEQUENCE:
dbopen, name, update
INPUTS:
name - (Optional) name or names of the data base files to open.
It has one of the following forms:
'name' -open single data base file
'name1,name2,...,nameN' - open N files which are
connected via pointers.
'name,*' -Open the data base with all data
bases connected via pointers
'' -Interactively allow selection of
the data base files.
If not supplied then '' is assumed.
name may optionally be a string array with one name
per element.
update - (Optional) Integer flag specifing openning for update.
0 - Open for read only
1 - Open for update
2 - Open index file for update only
!PRIV must be 2 or greater to open a file for update.
If a file is opened for update only a single data base
can be specified.
OUTPUTS:
none
KEYWORDS:
UNAVAIL - If present, a "database doesn't exit" flag is returned
through it. 0 = the database exists and was opened (if
no other errors arose). 1 = the database doesn't exist.
Also if present, the error message for non-existent databases
is suppressed. The action, however, remains the same. If
specifiying this, be sure that the variable passed exists
before the call to DBOPEN.
SIDE EFFECTS:
The .DBF and .dbx files are opened using unit numbers obtained by
GET_LUN. Descriptions of the files are placed in the common block
DB_COM.
HISTORY:
Version 2, D. Lindler, Nov. 1987
For IDL Version 2 W. Landsman May 1990 -- Will require further
modfication once SCREEN_SELECT is working
Modified to work under Unix, D. Neill, ACC, Feb 1991.
UNAVAIL keyword added. M. Greason, Hughes STX, Feb 1993.
William Thompson, GSFC/CDS (ARC), 1 June 1994
Added support for external (IEEE) representation.
William Thompson, GSFC, 3 November 1994
Modified to allow ZDBASE to be a path string.
8/29/95 JKF/ACC - forces lowercase for input database names.
W. Landsman, Use CATCH to catch errors July, 1997
Converted to IDL V5.0 W. Landsman September 1997
(See goddard/pro/database/dbopen.pro)
NAME:
DBPRINT
PURPOSE:
Procedure to print specified items from a list of database entries
CALLING SEQUENCE:
dbprint, list, [items, FORMS= , TEXTOUT= , /AdjustFormat, /NoHeader]
INPUTS:
list - list of entry numbers to be printed, vector or scalar
if list = -1, then all entries will be printed.
An error message is returned if any entry number is larger
than the number of entries in the database
OPTIONAL INPUT-OUTPUT:
items - items to be printed, specified in any of the following ways:
form 1 scalar string giving item(s) as list of names
separated by commas
form 2 string array giving list of item names
form 3 string of form '$filename' giving name
of text file containing items (one item per
line)
form 4 integer scalar giving single item number or
integer vector list of item numbers
form 5 Null string specifying interactive selection. This
is the default if 'items' is not supplied
form 6 '*' select all items, printout will be in
table format.
If items was undefined or a null string on input, then
on output it will contain the items interactively selected.
OPTIONAL INPUT KEYWORDS:
/ADJUSTFORMAT - If set, then the format length for string items will
be adjusted to the maximum length for the entries to be printed.
This option will slow down DBPRINT because it requires the
string items be extracted and their maximum length determined
prior to any printing. However, it enables the display of
string items without any truncation or wasted space.
FORMS - The number of printed lines per page. If forms is not
present, output assumed to be in PORTRAIT form, and
a heading and 47 lines are printed on each page, with
a page eject between each page. For LANDSCAPE form with
headings on each page, and a page eject between pages, set
forms = 34. For a heading only on the first page, and no
page eject, set forms = 0. This is the default for output
to the terminal.
TEXTOUT - Integer (0-7) or string used to determine output device (see
TEXTOPEN for more info). If not present, the !TEXTOUT system
variable is used.
textout=0 Nowhere
textout=1 if a TTY then TERMINAL using /more option
otherwise standard (Unit=-1) output
textout=2 if a TTY then TERMINAL without /more option
otherwise standard (Unit=-1) output
textout=3 dbprint.prt (file)
textout=4 laser.tmp
textout=5 user must open file
textout=7 same as 3 but text is appended to <program>.prt
textout = filename (default extension of .prt)
/NOHEADER - If this keyword is set, then the column headers will not
be printed
EXAMPLE:
The following example shows how a multiple valued item DATAMAX can be
printed as separate columns. In the WFPC2 target database, DATAMAX
is an item with 4 values, one for each of the 4 chips
IDL> dbopen,'wflog'
IDL> dbprint,list,'entry,datamax(0),datamax(1),datamax(2),datamax(3)'
SYSTEM VARIABLES:
Output device controlled by non-standard system varaible !TEXTOUT, if
TEXTOUT keyword is not used.
NOTES:
Users may want to adjust the default lines_per_page value given at
the beginning of the program for their own particular printer.
PROCEDURE CALLS:
db_info(), db_item_info(), dbtitle(), dbxval(), textopen, textclose
zparcheck
HISTORY:
version 2 D. Lindler Nov. 1987 (new db format)
Test if user pressed 'Q' in response to /MORE W. Landsman Sep 1991
Apply STRTRIM to free form (table) output W. Landsman Dec 1992
Test for string value of TEXTOUT W. Landsman Feb 1994
William Thompson, GSFC, 3 November 1994
Modified to allow ZDBASE to be a path string.
W. Landsman, GSFC, July, 1997, Use CATCH to catch errors
Converted to IDL V5.0 W. Landsman September 1997
Removed STRTRIM in table format output to handle byte values April 1999
Fixed occasional problem when /NOHEADER is supplied Sep. 1999
Only byteswap when necessary for improved performance Feb. 2000
Change loop index for table listing to type LONG W. Landsman Aug 2000
Entry vector can be any integer type W. Landsman Aug. 2001
Replace DATATYPE() with size(/TNAME) W. Landsman Nov. 2001
No page eject for TEXTOUT =5 W. Landsman Nov. 2001
No initial page eject W. Landsman Jan. 2002
Added AdjustFormat keyword W. Landsman Sep. 2002
Assume since V5.3 (STRJOIN) W. Landsman Feb. 2004
(See goddard/pro/database/dbprint.pro)
NAME:
DBPUT
PURPOSE:
Procedure to place a new value for a specified item into
a data base file entry.
CALLING SEQUENCE:
dbput, item, val, entry
INPUTS:
item - item name or number
val - item value(s)
INPUT/OUTPUT:
entry - entry (byte array) or scalar entry number.
if entry is a scalar entry number then the data
base file will be updated. Otherwise the change
will be only made to the entry array which must
be written latter using DBWRT.
OPERATIONAL NOTES:
If entry is a scalar entry number or the input file name
is supplied, the entry in the data base will be updated
instead of a supplied entry variable. In this case, !priv
must be greater than 1.
EXAMPLE:
IDL> dbput,'WAVELEN',1215.6,entry
PROCEDURES USED:
DB_ITEM, DBRD, DBXPUT, DBWRT
HISTORY:
version 2 D. Lindler Feb 1988 (new db formats)
modified to convert blanks into zeros correctly D. Neill Jan 1991
Converted to IDL V5.0 W. Landsman September 1997
V5.2 version support unsigned, 64bit integers W. Landsman Sep. 2001
(See goddard/pro/database/dbput.pro)
NAME:
DBRD
PURPOSE:
procedure to read an entry from a data base file or from
linked multiple databases.
CALLING SEQUENCE:
dbrd, enum, entry, [available, dbno, /NoConvert]
INPUTS:
enum - entry number to read, integer scalar
OUTPUT:
entry - byte array containing the entry
OPTIONAL OUTPUT:
available - byte array with length equal to number of data
bases opened. available(i) eq 1 if an entry (pointed
to) is available. It always equals 1 for the first
data base, otherwise it is an error condition.
OPTIONAL INPUT:
dbno - specification of the data base number to return. If
supplied, only the record for the requested data base
number is returned in entry. Normally this input should
not be supplied. dbno is numbered for 0 to n-1 and gives
the number of the data base opened. The data bases are
numbered in the order supplied to dbopen. If dbno is supplied
then the entry number refers to that data base and not the
primary or first data base. If set to -1, then it means all
data bases opened (same as not supplying it)
OPTIONAL INPUT KEYWORD:
noconvert - if set then don't convert external to host format.
Assumes that calling program will take care of this
requirement.
OPERATIONAL NOTES:
If multiple data base files are opened, the records are
concatenated with each other
HISTORY
version 2 D. Lindler Nov. 1987
William Thompson, GSFC/CDS (ARC), 1 June 1994
Added support for external (IEEE) representation.
Version 3, Richard Schwartz, GSFC/SDAC, 23-Aug-1996
Add noconvert keyword
Converted to IDL V5.0 W. Landsman September 1997
Version 4, 2 May 2003, W. Thompson
Use BSWAP keyword to DBXVAL instead of calling IEEE_TO_HOST.
(See goddard/pro/database/dbrd.pro)
NAME:
DBSEARCH
PURPOSE:
Subroutine of DBFIND() to search a vector for specified values
CALLING SEQUENCE:
dbsearch, type, svals, values, good, [ /FULLSTRING, COUNT = ]
INPUT:
type - type of search (output from dbfparse)
svals - search values (output from dbfparse)
values - array of values to search
OUTPUT:
good - indices of good values
OPTIONAL INPUT KEYWORD:
/FULLSTRING - By default, one has a match if a search string is
included in any part of a database value (substring match).
But if /FULLSTRING is set, then all characters in the database
value must match the search string (excluding leading and
trailing blanks). Both types of string searches are case
insensitive.
OPTIONAL OUTPUT KEYWORD:
COUNT - Integer scalar giving the number of valid matches
SIDE EFFECTS:
The obsolete system variable !ERR is set to number of good values
REVISION HISTORY:
D. Lindler July,1987
Converted to IDL V5.0 W. Landsman September 1997
Added COUNT keyword, deprecate !ERR W. Landsman March 2000
(See goddard/pro/database/dbsearch.pro)
NAME:
DBSORT
PURPOSE:
Routine to sort list of entries in data base
CALLING SEQUENCE:
result = dbsort( list, items , [ REVERSE = ])
INPUTS:
list - list of entry numbers to sort
-1 to sort all entries
items - list of items to sort (up to 9 items)
OUTPUT:
result - numeric vector giving input list sorted by items
OPTIONAL KEYWORD INPUT:
REVERSE - scalar or vector with the same number of elements as the
the number of items to sort. If the corresponding element of REVERSE
is non-zero then that item is sorted in descending rather than
ascending order.
EXAMPLE:
Sort an astronomical catalog with RA as primary sort, and declination
as secondary sort (used when RA values are equal)
IDL> NEWLIST = DBSORT( -1, 'RA,DEC' )
If for some reason, one wanted the DEC sorted in descending order, but
the RA in ascending order
IDL> NEWLIST = DBSORT( -1, 'RA,DEC', REV = [ 0, 1 ] )
METHOD:
The list is sorted such that each item is sorted into
asscending order starting with the last item.
COMMON BLOCKS:
DBCOM
PROCEDURES USED:
ZPARCHECK, BSORT, DB_ITEM
HISTORY
VERSION 1 D. Lindler Oct. 86
Added REVERSE keyword W. Landsman August, 1991
Converted to IDL V5.0 W. Landsman September 1997
(See goddard/pro/database/dbsort.pro)
NAME:
DBTARGET
PURPOSE:
Find sources in a database within specified radius of specified target
EXPLANATION:
Uses QuerySimbad to translate target name to RA and Dec, and then uses
DBCIRCLE() to find any entries within specified radius. Database must
include items named 'RA' (in hours) and 'DEC' (in degrees) and must
have previously been opened with DBOPEN
Requires IDL V5.4 or later, Unix and Windows only
CALLING SEQUENCE:
list = DBTARGET(target, [radius, sublist, /SILENT, DIS= ,/TO_B1950 ] )
INPUTS:
TARGET - A scalar string giving an astronomical target name, which
will be translated into J2000 celestial coordinates by QuerySimbad
OPTIONAL INPUT:
RADIUS - Radius of the search field in arc minutes, scalar.
Default is 5 arc minutes
SUBLIST - Vector giving entry numbers in currently opened database
to be searched. Default is to search all entries
OUTPUTS:
LIST - Vector giving entry numbers in the currently opened catalog
which have positions within the specified search circle
LIST is set to -1 if no sources fall within the search circle
!ERR is set to the number sources found.
OPTIONAL OUTPUT
DIS - The distance in arcminutes of each entry specified by LIST
to the search center specified by the target.
OPTIONAL KEYWORD INPUT:
/SILENT - If this keyword is set, then DBTARGET will not print the
number of entries found at the terminal
/TO_B1950 - If this keyword is set, then the SIMBAD J2000 coordinates
are converted to B1950 before searching the database
NOTE: The user must determine on his own whether the database
is in B1950 or J2000 coordinates.
EXAMPLE:
(1) Use the HST_CATALOG database to find all HST observations within
5' (the default) of M33
IDL> dbopen,'hst_catalog'
IDL> list = dbtarget('M33')
(2) As above but restrict targets within 2' of the nucleus using the
WFPC2 camara
IDL> dbopen,'hst_catalog'
IDL> sublist = dbfind('config=WFPC2')
IDL> list = dbtarget('M33',2,sublist)
PROCEDURE CALLS:
QuerySimbad, DBCIRCLE()
REVISION HISTORY:
Written W. Landsman SSAI September 2002
(See goddard/pro/database/dbtarget.pro)
NAME: DBTITLE PURPOSE: function to create title line for routine dbprint CALLING SEQUENCE: result = dbtitle( c, f ) INPUTS: c = string array of titles for each item f = field length of each item OUTPUT: header string returned as function value OPERATIONAL NOTES: this is a subroutine of DBPRINT. HISTORY: version 1 D. Lindler Sept 86 Converted to IDL V5.0 W. Landsman September 1997
(See goddard/pro/database/dbtitle.pro)
NAME:
DBUPDATE
PURPOSE:
Update columns of data in a database -- inverse of DBEXT
EXPLANATION:
Database must be open for update before calling DBUPDATE
CALLING SEQUENCE:
dbupdate, list, items, v1, [ v2, v3, v4......v14 ]
INPUTS:
list - entries in database to be updated, scalar or vector
If list=-1 then all entries will be updated
items -standard list of items that will be updated.
v1,v2....v14 - vectors containing values for specified items. The
number of vectors supplied must equal the number of items
specified. The number of elements in each vector should be
the same.
OPTIONAL KEYWORD INPUT:
/NOINDEX - If set, then DBUPDATE will not update the index file. This
keyword is useful to save if additional updates will occur,
and the index file need only be updated on the last call.
EXAMPLES:
A database STAR contains RA and DEC in radians, convert to degrees
IDL> !PRIV=2 & dbopen,'STAR',1 ;Open database for update
IDL> dbext,-1,'RA,DEC',ra,dec ;Extract RA and DEC, all entries
IDL> ra = ra*!RADEG & dec=dec*!RADEG ;Convert to degrees
IDL> dbupdate,-1,'RA,DEC',ra,dec ;Update database with new values
NOTES:
It is quicker to update several items simultaneously rather than use
repeated calls to DBUPDATE.
It is possible to update multiple valued items. In this case, the
input vector should be of dimension (NVAL,NLIST) where NVAL is the
number of values per item, and NLIST is the number of entries to be
updated. This vector will be temporarily transposed by DBUPDATE but
will be restored before DBUPDATE exits.
REVISION HISTORY
Written W. Landsman STX March, 1989
Work for multiple valued items May, 1991
String arrays no longer need to be fixed length December 1992
Transpose multiple array items back on output December 1993
Faster update of external databases on big endian machines November 1997
Converted to IDL V5.0 W. Landsman 24-Nov-1997
Added /NOINDEX keyword W. Landsman July 2001
(See goddard/pro/database/dbupdate.pro)
NAME: DBVAL PURPOSE: procedure to extract value(s) of the specified item from a data base file entry. CALLING SEQUENCE: result = dbval( entry, item ) INPUTS: entry - byte array containing the entry, or a scalar entry number item - name (string) or number (integer) of the item OUTPUT: the value(s) will be returned as the function value EXAMPLE: Extract a flux vector from entry 28 of the database FARUV ==> flux = dbval(28,'FLUX') HISTORY: version 2 D. Lindler Nov, 1987 (new db format) Converted to IDL V5.0 W. Landsman September 1997
(See goddard/pro/database/dbval.pro)
NAME: DBWRT PURPOSE: procedure to update or add a new entry to a data base CALLING SEQUENCE: dbwrt, entry, [ index, append, /NoConvert ] INPUTS: entry - entry record to be updated or added if first item (entry number=0) OPTIONAL INPUTS: index - optional integer flag, if set to non zero then index file is updated. (default=0, do not update index file) (Updating the index file is time-consuming, and should normally be done after all changes have been made. append - optional integer flag, if set to non-zero the record is appended as a new entry, regardless of what the entry number in the record is. The entry number will be reset to the next entry number in the file. OUTPUTS: data base file is updated. If index is non-zero then the index file is updated. OPTIONAL INPUT KEYWORD: NoConvert - If set then don't convert to host format with an external database. Useful when the calling program decides that conversion isn't needed (i.e. on a big-endian machine), or takes care of the conversion itself. OPERATIONAL NOTES: !PRIV must be greater than 1 to execute HISTORY: version 2 D. Lindler Feb. 1988 (new db format) converted to IDL Version 2. M. Greason, STX, June 1990. William Thompson, GSFC/CDS (ARC), 28 May 1994 Added support for external (IEEE) representation. Converted to IDL V5.0 W. Landsman 24-Nov-1997
(See goddard/pro/database/dbwrt.pro)
NAME: DBXPUT PURPOSE: routine to replace value of an item in a data base entry CALLING SEQUENCE: dbxput, val, entry, idltype, sbyte, nbytes INPUT: val - value(s) to be placed into entry, string values might be truncated to fit number of allowed bytes in item entry - entry or entries to be updated idltype - idl data type for item (1-7) sbyte - starting byte in record nbytes - total number of bytes in value added OUTPUT: entry - (updated) OPERATIONAL NOTES: This routine assumes that the calling procedure or user knows what he or she is doing. String items are truncated or padded to the fixed size specified by the database but otherwise no validity checks are made. HISTORY: version 1, D. Lindler Aug, 1986 converted to IDL Version 2. M. Greason, STX, June 1990. Work with multiple element string items W. Landsman August 1995 Really work with multiple element string items R. Bergman/W. Landsman July 1996 Work with multiple entries, R. Schwartz, GSFC/SDAC August 1996 Use /overwrite with REFORM() W. Landsman May 1997 Converted to IDL V5.0 W. Landsman September 1997
(See goddard/pro/database/dbxput.pro)
NAME:
DBXVAL
PURPOSE:
Quickly return a value of the specified item number
EXPLANATION:
Procedure to quickly return a value of the specified item number
from the entry.
CALLING SEQUENCE:
result = dbxval( entry, idltype, nvalues, sbyte, nbytes )
INPUTS
entry - entry or entries from data base (bytarr)
idltype - idl data type (obtained with db_item_info)
nvalues - number of values to return (obtained with db_item)
sbyte - starting byte in the entry (obtained with db_item)
nbytes - number of bytes (needed only for string type)
(obtained with db_item)
OUTPUTS:
function value is value of the specified item in entry
KEYWORDS:
bswap - If set, then IEEE_TO_HOST is called.
RESTRICTIONS:
To increase speed the routine assumes that entry and item are
valid and that the data base is already opened using dbopen.
REVISION HISTORY:
version 0 D. Lindler Nov. 1987 (for new db format)
Version 1, William Thompson, GSFC, 28 March 1994.
Incorporated into CDS library.
Version 2, Richard Schwartz, GSFC/SDAC, 23 August 1996
Allowed Entry to have 2 dimensions
Version 2.1, 22 Feb 1997, JK Feggans,
avoid reform for strings arrays.
Version 2.2 Use overwrite with REFORM(), W. Landsman, May 1997
Converted to IDL V5.0 W. Landsman September 1997
Work for multiple-valued strings W. Landsman October 2000
Add new 64bit & unsigned integer datatypes W.Landsman July 2001
Version 3, 2-May-2003, JK Feggans/Sigma, W.T. Thompson
Added BSWAP keyword to avoid floating errors on some platforms.
(See goddard/pro/database/dbxval.pro)
NAME: DB_ENT2EXT PURPOSE: Convert a database entry to external (IEEE) data format EXPLANATION: Converts a database entry to external (IEEE) data format prior to writing it. Called from DBWRT. CALLING SEQUENCE: DB_ENT2EXT, ENTRY INPUTS: ENTRY = Byte array containing a single record to be written to the database file. OUTPUTS: ENTRY = The converted array is returned in place of the input array. COMMON BLOCKS: DB_COM HISTORY: Version 1, William Thompson, GSFC/CDS (ARC), 1 June 1994 Version 2, William Thompson, GSFC/CDS (ARC), 15 September 1995 Fixed bug where only the first element in a multidimensional array was converted. Converted to IDL V5.0 W. Landsman September 1997
(See goddard/pro/database/db_ent2ext.pro)
NAME:
DB_ENT2HOST
PURPOSE:
Converts a database entry from external data format to host format.
EXPLANATION:
All items are extracted from the entry, and then converted to host
format, and placed back into the entry. Called from DBRD and DBEXT_DBF.
CALLING SEQUENCE:
DB_ENT2HOST, ENTRY, DBNO
INPUTS:
ENTRY = Byte array containing a single record read from the
database file.
DBNO = Number of the opened database file.
OUTPUTS:
ENTRY = The converted array is returned in place of the input array.
COMMON BLOCKS:
DB_COM
HISTORY:
Version 1, William Thompson, GSFC/CDS (ARC), 1 June 1994
Version 2, William Thompson, GSFC/CDS (ARC), 15 September 1995
Fixed bug where only the first element in a
multidimensional array was converted.
Version 3, Richard Schwartz, GSFC/SDAC, 23 August 1996
Allow 2 dimensional byte arrays for entries to facilitate
multiple entry processing. Pass IDLTYPE onto IEEE_TO_HOST
Converted to IDL V5.0 W. Landsman September 1997
Version 4, 2 May 2003, W. Thompson
Use BSWAP keyword to DBXVAL instead of calling IEEE_TO_HOST.
(See goddard/pro/database/db_ent2host.pro)
NAME:
DB_INFO
PURPOSE:
Function to obtain information on opened data base file(s)
CALLING SEQUENCES:
1) result = db_info(request)
2) result = db_info(request,dbname)
INPUTS (calling sequence 1):
request - string specifying requested value(s)
value of request value returned in result
'open' Flag set to 1 if data base(s) are opened
'number' Number of data base files opened
'items' Total number of items (all db's opened)
'update' update flag (1 if opened for update)
'unit_dbf' Unit number of the .dbf files
'unit_dbx' Unit number of the .dbx files
'entries' Number of entries in the db's
'length' Record lengths for the db's
'external' True if the db's are in external format
INPUTS (calling sequence 2):
request - string specifying requested value(s)
value of request value returned in result
'name' Name of the data base
'number' Sequential number of the db
'items' Number of items for this db
'item1' Position of item1 for this db
in item list for all db's
'item2' Position of last item for this db.
'pointer' Number of the item which points
to this db. 0 for first or primary
db. -1 if link file pointers.
'length' Record length for this db.
'title' Title of the data base
'unit_dbf' Unit number of the .dbf file
'unit_dbx' Unit number of the .dbx file
'entries' Number of entries in the db
'seqnum' Last sequence number used
'alloc' Allocated space (# entries)
'update' 1 if data base opened for update
'external' True if data base in external format
dbname - data base name or number
OUTPUTS:
Requested value(s) are returned as the function value.
HISTORY:
version 1 D. Lindler Oct. 1987
changed type from 1 to 7 for IDLV2, J. Isensee, Nov., 1990
William Thompson, GSFC/CDS (ARC), 30 May 1994
Added EXTERNAL request type.
Converted to IDL V5.0 W. Landsman September 1997
(See goddard/pro/database/db_info.pro)
NAME:
DB_ITEM
PURPOSE:
Returns the item numbers and other info. for an item name.
EXPLANATION:
Procedure to return the item numbers and other information
of a specified item name
CALLING SEQUENCE:
db_item, items, itnum, ivalnum, idltype, sbyte, numvals, nbytes
INPUTS:
items - item name or number
form 1 scalar string giving item(s) as list of names
separated by commas
form 2 string array giving list of item names
form 3 string of form '$filename' giving name
of text file containing items (one item per
line)
form 4 integer scalar giving single item number or
integer vector list of item numbers
form 5 Null string specifying interactive selection
Upon return items will contain selected items
in form 1
form 6 '*' select all items
OUTPUTS:
itnum - item number
ivalnum - value(s) number from multiple valued item
idltype - data type(s) (1=string,2=byte,4=i*4,...)
sbyte - starting byte(s) in entry
numvals - number of data values for item(s)
It is the full length of a vector item unless
a subscript was supplied
nbytes - number of bytes for each value
All outputs are vectors even if a single item is requested
OPTIONAL INPUT KEYWORDS:
ERRMSG = If defined and passed, then any error messages will
be returned to the user in this parameter rather than depending
on the MESSAGE routine in IDL. If no errors are encountered,
then a null string is returned. In order to use this feature,
ERRMSG must be defined first, e.g.
ERRMSG = ''
DB_ITEM, ERRMSG=ERRMSG, ...
IF ERRMSG NE '' THEN ...
PROCEDURE CALLS:
DB_INFO, GETTOK, SCREEN_SELECT, SPEC_DIR
REVISION HISTORY:
Written: D. Lindler, GSFC/HRS, October 1987
Version 2, William Thompson, GSFC, 17-Mar-1997
Added keyword ERRMSG
Converted to IDL V5.0 W. Landsman October 1997
Use STRSPLIT instead of GETTOK to parse form 1, W. Landsman July 2002
(See goddard/pro/database/db_item.pro)
NAME: DB_ITEM_INFO PURPOSE: routine to return information on selected item(s) in the opened data bases. CALLING SEQUENCE: result = db_item_info( request, itnums) INPUTS: request - string giving the requested information. 'name' - item names 'idltype' - IDL data type (integers) see documentation of intrinsic SIZE funtion 'nvalues' - vector item length (1 for scalar) 'sbyte' - starting byte in .dbf record (use bytepos to get starting byte in record returned by dbrd) 'nbytes' - bytes per data value 'index' - index types 'description' - description of the item 'pflag' - pointer item flags 'pointer' - data bases the items point to 'format' - print formats 'flen' - print field length 'headers' - print headers 'bytepos' - starting byte in dbrd record for the items 'dbnumber' - number of the opened data base 'pnumber' - number of db it points to (if the db is opened) 'itemnumber' - item number in the file itnums -(optional) Item numbers. If not supplied info on all items are returned. OUTPUT: Requested information is returned as a vector. Its type depends on the item requested. HISTORY: version 1 D. Lindler Nov. 1987 Converted to IDL V5.0 W. Landsman September 1997
(See goddard/pro/database/db_item_info.pro)
NAME: DB_OR PURPOSE: Combine two vectors of entry numbers, removing duplicate values. EXPLANATION: DB_OR can also be used to remove duplicate values from any longword vector CALLING SEQUENCE: LIST = DB_OR( LIST1 ) ;Remove duplicate values from LIST1 or LIST = DB_OR( LIST1, LIST2 ) ;Concatenate LIST1 and LIST2, remove dups INPUTS: LIST1, LIST2 - Vectors containing entry numbers, must be non-negative integers or longwords. OUTPUT: LIST - Vector containing entry numbers in either LIST1 or LIST2 METHOD DB_OR returns where the histogram of the entry vectors is non-zero PROCEDURE CALLS ZPARCHECK - checks parameters REVISION HISTORY: Written, W. Landsman February, 1989 Check for degenerate values W.L. February, 1993 Converted to IDL V5.0 W. Landsman September 1997
(See goddard/pro/database/db_or.pro)
NAME: DB_TITLES PURPOSE: Print database name and title. Called by DBHELP CALLING SEQUENCE: db_titles, fnames, titles INPUT: fnames - string array of data base names SIDE EFFECT: Database name is printed along with the description in the .dbh file HISTORY: version 2 W. Landsman May, 1989 modified to work under Unix, D. Neill, ACC, Feb 1991. William Thompson, GSFC/CDS (ARC), 1 June 1994 Added support for external (IEEE) representation. William Thompson, GSFC, 3 November 1994 Modified to allow ZDBASE to be a path string. Converted to IDL V5.0 W. Landsman September 1997
(See goddard/pro/database/db_titles.pro)
NAME:
DEF_DIRLIST
PURPOSE:
Define directory list using setenv or setlog
EXPLANATION:
Environment variables which point to a list of directories can
end up to be very long. In VMS this can be a problem, because logical
names cannot be longer than 256 characters. However, it is possible to
get around this in VMS by assigning multiple values to a single logical
name--a facility that does not exist in Unix.
This routine will define the environment variable as either a delimited
string, or as a series of values, whichever is most appropriate.
CALLING SEQUENCE:
DEF_DIRLIST, EVAR, VALUE
INPUTD:
EVAR = The name of the environment variable to define.
VALUE = The value to give to EVAR. This can be either a single,
delimited string, or it can be an array of directory names.
The routine will choose for itself how to use this to define the
environment variable.
EXAMPLES:
DIRS = FIND_ALL_DIR('+/data/fits')
DEF_DIRLIST, 'FITS_DATA', DIRS
PROCEDURE CALLS:
SETENV, STR_SEP()
Note: The intrinsic SETENV command is available under Unix & Windows
only. However, it is available as a Library procedure for VMS.
REVISION HISTORY:
Version 1, 06-Aug-1996, William Thompson, GSFC
Converted to IDL V5.0 June 1998 W. Landsman
Use STRSPLIT instead of STR_SEP if V5.3 or later W.L. July 2002
(See goddard/pro/misc/def_dirlist.pro)
NAME:
DELVARX
PURPOSE:
Delete variables for memory management (can call from routines)
EXPLANATION:
Like intrinsic DELVAR function, but can be used from any calling level
CALLING SEQUENCE:
DELVARX, a [,b,c,d,e,f,g,h,i,j, /FREE_MEM]
INPUTS:
p0, p1...p9 - variables to delete
OPTIONAL KEYWORD:
/FREE_MEM - If set, then free memory associated with pointers
and objects.
RESTRICTIONS:
Can't use recursively due to EXECUTE function
METHOD:
Uses EXECUTE and TEMPORARY function
REVISION HISTORY:
Copied from the Solar library, written by slf, 25-Feb-1993
Added to Astronomy Library, September 1995
Converted to IDL V5.0 W. Landsman September 1997
Modified, 26-Mar-2003, Zarro (EER/GSFC) 26-Mar-2003
- added FREE_MEM to free pointer/objects
(See goddard/pro/misc/delvarx.pro)
NAME:
DEREDD
PURPOSE:
Deredden stellar Stromgren parameters given for a value of E(b-y)
EXPLANATION:
See the procedure UVBYBETA for more info.
CALLING SEQUENCE:
deredd, eby, by, m1, c1, ub, by0, m0, c0, ub0, /UPDATE
INPUTS:
Eby - color index E(b-y),scalar (E(b-y) = 0.73*E(B-V) )
by - b-y color (observed)
m1 - Stromgren line blanketing parameter (observed)
c1 - Stromgren Balmer discontinuity parameter (observed)
ub - u-b color (observed)
These input values are unaltered unless the /UPDATE keyword is set
OUTPUTS:
by0 - b-y color (dereddened)
m0 - Line blanketing index (dereddened)
c0 - Balmer discontinuity parameter (dereddened)
ub0 - u-b color (dereddened)
OPTIONAL INPUT KEYWORDS:
/UPDATE - If set, then input parameters are updated with the dereddened
values (and output parameters are not used).
REVISION HISTORY:
Adapted from FORTRAN routine DEREDD by T.T. Moon
W. Landsman STX Co. April, 1988
Converted to IDL V5.0 W. Landsman September 1997
(See goddard/pro/astro/deredd.pro)
NAME: DETABIFY PURPOSE: Replaces tabs in character strings with appropriate number of spaces EXPLANATION: The number of space characters inserted is calculated to space out to the next effective tab stop, each of which is eight characters apart. CALLING SEQUENCE: Result = DETABIFY( CHAR_STR ) INPUT PARAMETERS: CHAR_STR = Character string variable (or array) to remove tabs from. OUTPUT: Result of function is CHAR_STR with tabs replaced by spaces. RESTRICTIONS: CHAR_STR must be a character string variable. MODIFICATION HISTORY: William Thompson, Feb. 1992. Converted to IDL V5.0 W. Landsman September 1997
(See goddard/pro/misc/detabify.pro)
NAME:
DIST_CIRCLE
PURPOSE:
Form a square array where each value is its distance to a given center.
EXPLANATION:
Returns a square array in which the value of each element is its
distance to a specified center. Useful for circular aperture photometry.
CALLING SEQUENCE:
DIST_CIRCLE, IM, N, [ XCEN, YCEN, /DOUBLE ]
INPUTS:
N = either a scalar specifying the size of the N x N square output
array, or a 2 element vector specifying the size of the
N x M rectangular output array.
OPTIONAL INPUTS:
XCEN,YCEN = Scalars designating the X,Y pixel center. These need
not be integers, and need not be located within the
output image. If not supplied then the center of the output
image is used (XCEN = YCEN = (N-1)/2.).
OUTPUTS:
IM - N by N (or M x N) floating array in which the value of each
pixel is equal to its distance to XCEN,YCEN
OPTIONAL INPUT KEYWORD:
/DOUBLE - If this keyword is set and nonzero, the output array will
be of type DOUBLE rather than floating point.
EXAMPLE:
Total the flux in a circular aperture within 3' of a specified RA
and DEC on an 512 x 512 image IM, with a header H.
IDL> adxy, H, RA, DEC, x, y ;Convert RA and DEC to X,Y
IDL> getrot, H, rot, cdelt ;CDELT gives plate scale deg/pixel
IDL> cdelt = cdelt*3600. ;Convert to arc sec/pixel
IDL> dist_circle, circle, 512, x, y ;Create a distance circle image
IDL> circle = circle*abs(cdelt[0]) ;Distances now given in arcseconds
IDL> good = where(circle LT 180) ;Within 3 arc minutes
IDL> print,total( IM[good] ) ;Total pixel values within 3'
RESTRICTIONS:
The speed of DIST_CIRCLE decreases and the the demands on virtual
increase as the square of the output dimensions. Users should
dimension the output array as small as possible, and re-use the
array rather than re-calling DIST_CIRCLE
MODIFICATION HISTORY:
Adapted from DIST W. Landsman March 1991
Allow a rectangular output array W. Landsman June 1994
Converted to IDL V5.0 W. Landsman September 1997
Add /DOUBLE keyword, make XCEN,YCEN optional W. Landsman Jun 1998
(See goddard/pro/image/dist_circle.pro)
NAME:
DIST_ELLIPSE
PURPOSE:
Create a mask array useful for elliptical aperture photemetry
EXPLANATION:
Form an array in which the value of each element is equal to the
semi-major axis of the ellipse of specified center, axial ratio, and
position angle, which passes through that element. Useful for
elliptical aperture photometry.
CALLING SEQUENCE:
DIST_ELLIPSE, IM, N, XC, YC, RATIO, POS_ANG, /DOUBLE
INPUTS:
N = either a scalar specifying the size of the N x N square output
array, or a 2 element vector specifying the size of the
M x N rectangular output array.
XC,YC - Scalars giving the position of the ellipse center. This does
not necessarily have to be within the image
RATIO - Scalar giving the ratio of the major to minor axis. This
should be greater than 1 for postion angle to have its
standard meaning.
OPTIONAL INPUTS:
POS_ANG - Position angle of the major axis, measured counter-clockwise
from the Y axis. For an image in standard orientation
(North up, East left) this is the astronomical position angle.
OPTIONAL INPUT KEYWORD:
/DOUBLE - If this keyword is set and nonzero, the output array will
be of type DOUBLE rather than floating point.
OUTPUT:
IM - REAL*4 elliptical mask array, of size M x N. THe value of each
pixel is equal to the semi-major axis of the ellipse of center
XC,YC, axial ratio RATIO, and position angle POS_ANG, which
passes through the pixel.
EXAMPLE:
Total the flux in a elliptical aperture with a major axis of 3', an
axial ratio of 2.3, and a position angle of 25 degrees centered on
a specified RA and DEC. The image array, IM is 200 x 200, and has
an associated FITS header H.
ADXY, H, ra, dec, x, y ;Get X and Y corresponding to RA and Dec
GETROT, H, rot, cdelt ;CDELT gives plate scale degrees/pixel
cdelt = abs( cdelt)*3600. ;CDELT now in arc seconds/pixel
DIST_ELLIPSE, ell, 200, x, y, 2.3, 25 ;Create a elliptical image mask
ell = ell*cdelt(0) ;Distances now given in arcseconds
good = where( ell lt 180 ) ;Within 3 arc minutes
print,total( im(good) ) ;Total pixel values within 3'
RESTRICTIONS:
The speed of DIST_ELLIPSE decreases and the the demands on virtual
increase as the square of the output dimensions. Users should
dimension the output array as small as possible, and re-use the
array rather than re-calling DIST_ELLIPSE
REVISION HISTORY:
Written W. Landsman April, 1991
Somewhat faster algorithm August, 1992
Allow rectangular output array June, 1994
Converted to IDL V5.0 W. Landsman September 1997
Added /DOUBLE keyword W. Landsman July 2000
(See goddard/pro/image/dist_ellipse.pro)
NAME:
ECI2GEO
PURPOSE:
Convert Earth-centered inertial coordinates to geographic spherical coords
EXPLANATION:
Converts from ECI (Earth-Centered Inertial) (X,Y,Z) rectangular
coordinates to geographic spherical coordinates (latitude, longitude,
altitude). JD time is also needed as input.
ECI coordinates are in km from Earth center.
Geographic coordinates are in degrees/degrees/km
Geographic coordinates assume the Earth is a perfect sphere, with radius
equal to its equatorial radius.
CALLING SEQUENCE:
gcoord=eci2geo(ECI_XYZ,JDtime)
INPUT:
ECI_XYZ : the ECI [X,Y,Z] coordinates (in km), can be an array [3,n]
of n such coordinates.
JDtime: the Julian Day time, double precision. Can be a 1-D array of n
such times.
KEYWORD INPUTS:
None
OUTPUT:
a 3-element array of geographic [latitude,longitude,altitude], or an
array [3,n] of n such coordinates, double precision
COMMON BLOCKS:
None
PROCEDURES USED:
CT2LST - Convert Local Civil Time to Local Mean Sidereal Time
EXAMPLE:
IDL> gcoord=eci2geo([6378.137+600,0,0], 2452343.38982663D)
IDL> print,gcoord
0.0000000 232.27096 600.00000
(The above is the geographic direction of the vernal point on
2002/03/09 21:21:21.021, in geographic coordinates. The chosen
altitude was 600 km.)
gcoord can be further transformed into geodetic coordinates (using
geo2geodetic.pro) or into geomagnetic coordinates (using geo2mag.pro)
MODIFICATION HISTORY:
Written by Pascal Saint-Hilaire (Saint-Hilaire@astro.phys.ethz.ch) on
2001/05/13
Modified on 2002/05/13, PSH : vectorization + use of JD times
(See goddard/pro/astro/eci2geo.pro)
NAME:
EQ2HOR
PURPOSE:
Convert celestial (ra-dec) coords to local horizon coords (alt-az).
CALLING SEQUENCE:
eq2hor, ra, dec, jd, alt, az, [ha, LAT= , LON= , /WS, OBSNAME= , $
/B1950 , PRECESS_= 0, NUTATE_= 0, REFRACT_= 0, $
ABERRATION_= 0, ALTITUDE= , /VERBOSE, _EXTRA= ]
DESCRIPTION:
This is a nice code to calculate horizon (alt,az) coordinates from equatorial
(ra,dec) coords. It is typically accurate to about 1 arcsecond or better (I
have checked the output against the publicly available XEPHEM software). It
performs precession, nutation, aberration, and refraction corrections. The
perhaps best thing about it is that it can take arrays as inputs, in all
variables and keywords EXCEPT Lat, lon, and Altitude (the code assumes these
aren't changing), and uses vector arithmetic in every calculation except
when calculating the precession matrices.
INPUT VARIABLES:
RA : Right Ascension of object (J2000) in degrees (FK5); scalar or
vector.
Dec : Declination of object (J2000) in degrees (FK5), scalar or vector.
JD : Julian Date [scalar or vector]
Note: if RA and DEC are arrays, then alt and az will also be arrays.
If RA and DEC are arrays, JD may be a scalar OR an array of the
same dimensionality.
OPTIONAL INPUT KEYWORDS:
lat : north geodetic latitude of location in degrees
lon : EAST longitude of location in degrees (Specify west longitude
with a negative sign.)
/WS : Set this to get the azimuth measured westward from south (not
East of North).
obsname: Set this to a valid observatory name to be used by the
astrolib OBSERVATORY procedure, which will return the latitude
and longitude to be used by this program.
/B1950 : Set this if your ra and dec are specified in B1950, FK4
coordinates (instead of J2000, FK5)
precess_ : Set this to 1 to force precession [default], 0 for no
precession correction
nutate_ : Set this to 1 to force nutation [default], 0 for no nutation.
aberration_ : Set this to 1 to force aberration correction [default],
0 for no correction.
refract_ : Set to 1 to force refraction correction [default], 0 for no
correction.
altitude: The altitude of the observing location, in meters. [default=0].
verbose: Set this for verbose output. The default is verbose=0.
_extra: This is for setting TEMPERATURE or PRESSURE explicity, which are
used by CO_REFRACT to calculate the refraction effect of the
atmosphere. If you don't set these, the program will make an
intelligent guess as to what they are (taking into account your
altitude). See CO_REFRACT for more details.
OUTPUT VARIABLES: (all double precision)
alt : altitude (in degrees)
az : azimuth angle (in degrees, measured EAST from NORTH, but see
keyword WS above.)
ha : hour angle (in degrees) (optional)
DEPENDENCIES:
NUTATE, PRECESS, OBSERVATORY, SUNPOS, ADSTRING() (from the astrolib)
CO_NUTATE, CO_ABERRATION, CO_REFRACT, ALTAZ2HADEC
BASIC STEPS
Apply refraction correction to find apparent Alt.
Calculate Local Mean Sidereal Time
Calculate Local Apparent Sidereal Time
Do Spherical Trig to find apparent hour angle, declination.
Calculate Right Ascension from hour angle and local sidereal time.
Nutation Correction to Ra-Dec
Aberration correction to Ra-Dec
Precess Ra-Dec to current equinox.
CORRECTIONS I DO NOT MAKE:
* Deflection of Light by the sun due to GR. (typically milliarcseconds,
can be arseconds within one degree of the sun)
* The Effect of Annual Parallax (typically < 1 arcsecond)
* and more (see below)
TO DO
* Better Refraction Correction. Need to put in wavelength dependence,
and integrate through the atmosphere.
* Topocentric Parallax Correction (will take into account elevation of
the observatory)
* Proper Motion (but this will require crazy lookup tables or something).
* Difference between UTC and UT1 in determining LAST -- is this
important?
* Effect of Annual Parallax (is this the same as topocentric Parallax?)
* Polar Motion
* Better connection to Julian Date Calculator.
EXAMPLE
Find the position of the open cluster NGC 2264 at the Effelsburg Radio
Telescope in Germany, on June 11, 2023, at local time 22:00 (METDST).
The inputs will then be:
Julian Date = 2460107.250
Latitude = 50d 31m 36s
Longitude = 06h 51m 18s
Altitude = 369 meters
RA (J2000) = 06h 40m 58.2s
Dec(J2000) = 09d 53m 44.0s
IDL> eq2hor, ten(6,40,58.2)*15., ten(9,53,44), 2460107.250d, alt, az, $
lat=ten(50,31,36), lon=ten(6,51,18), altitude=369.0, /verb, $
pres=980.0, temp=283.0
The program produces this output (because the VERBOSE keyword was set)
Latitude = +50 31 36.0 Longitude = +06 51 18.0
Julian Date = 2460107.250000
Ra, Dec: 06 40 58.2 +09 53 44.0 (J2000)
Ra, Dec: 06 42 15.7 +09 52 19.2 (J2023.4422)
Ra, Dec: 06 42 13.8 +09 52 26.9 (fully corrected)
LMST = +11 46 42.0
LAST = +11 46 41.4
Hour Angle = +05 04 27.6 (hh:mm:ss)
Az, El = 17 42 25.6 +16 25 10.3 (Apparent Coords)
Az, El = 17 42 25.6 +16 28 22.8 (Observer Coords)
Compare this with the result from XEPHEM:
Az, El = 17h 42m 25.6s +16d 28m 21s
This 1.8 arcsecond discrepancy in elevation arises primarily from slight
differences in the way I calculate the refraction correction from XEPHEM, and
is pretty typical.
AUTHOR:
Chris O'Dell
Univ. of Wisconsin-Madison
Observational Cosmology Laboratory
Email: odell@cmb.physics.wisc.edu
(See goddard/pro/astro/eq2hor.pro)
NAME:
EQPOLE
PURPOSE:
Convert RA and Dec to X,Y using an equal-area polar projection.
EXPLANATION:
The output X and Y coordinates are scaled to be between
-90 and +90 to go from equator to pole to equator. Output map points
can be centered on the north pole or south pole.
CALLING SEQUENCE:
EQPOLE, L, B, X, Y, [ /SOUTHPOLE ]
INPUTS:
L - longitude - scalar or vector, in degrees
B - latitude - same number of elements as RA, in degrees
OUTPUTS:
X - X coordinate, same number of elements as RA. X is normalized to
be between -90 and 90.
Y - Y coordinate, same number of elements as DEC. Y is normalized to
be between -90 and 90.
KEYWORDS:
/SOUTHPOLE - Keyword to indicate that the plot is to be centered
on the south pole instead of the north pole.
REVISION HISTORY:
J. Bloch LANL, SST-9 1.1 5/16/91
Converted to IDL V5.0 W. Landsman September 1997
(See goddard/pro/astro/eqpole.pro)
NAME:
EQPOLE_GRID
PURPOSE:
Produce an equal area polar projection grid overlay
EXPLANATION:
Grid is written on the current graphics device using the equal area
polar projection. EQPOLE_GRID assumes that the output plot
coordinates span the x and y ranges of -90 to 90 for a region that
covers the equator to the chosen pole. The grid is assumed to go from
the equator to the chosen pole.
CALLING SEQUENCE:
EQPOLE_GRID[,DLONG,DLAT,[/SOUTHPOLE, LABEL = , /NEW, _EXTRA=]
INPUTS:
DLONG = Optional input longitude line spacing in degrees. If left
out, defaults to 30.
DLAT = Optional input lattitude line spacing in degrees. If left
out, defaults to 30.
INPUT KEYWORDS:
/SOUTHPOLE = Optional flag indicating that the output plot is
to be centered on the south rather than the north
pole.
LABEL = Optional flag for creating labels on the output
grid on the prime meridian and the equator for
lattitude and longitude lines. If set =2, then
the longitude lines are labeled in hours and minutes.
CHARSIZE = If /LABEL is set, then CHARSIZE specifies the size
of the label characters (passed to XYOUTS)
CHARTHICK = If /LABEL is set, then CHARTHICK specifies the
thickness of the label characters (passed to XYOUTS)
/NEW = If this keyword is set, then EQPOLE_GRID will create
a new plot, rather than overlay an existing plot.
Any valid keyword to OPLOT such as COLOR, LINESTYLE, THICK can be
passed to AITOFF_GRID (though the _EXTRA facility) to to specify the
color, style, or thickness of the grid lines.
OUTPUTS:
Draws grid lines on current graphics device.
EXAMPLE:
Create a labeled equal area projection grid of the Galaxy, centered on
the South pole, and overlay stars at specified Galactic longitudes,
glong and latitudes, glat
IDL> eqpole_grid,/label,/new,/south ;Create labeled grid
IDL> eqpole, glong, glat, x,y ;Convert to X,Y coordinates
IDL> plots,x,y,psym=2 ;Overplot "star" positions.
COPYRIGHT NOTICE:
Copyright 1992, The Regents of the University of California. This
software was produced under U.S. Government contract (W-7405-ENG-36)
by Los Alamos National Laboratory, which is operated by the
University of California for the U.S. Department of Energy.
The U.S. Government is licensed to use, reproduce, and distribute
this software. Neither the Government nor the University makes
any warranty, express or implied, or assumes any liability or
responsibility for the use of this software.
AUTHOR AND MODIFICATIONS:
J. Bloch 1.4 10/28/92
Converted to IDL V5.0 W. Landsman September 1997
Create default plotting coords, if needed W. Landsman August 2000
Added _EXTRA, CHARTHICK, CHARSIZE keywords W. Landsman March 2001
(See goddard/pro/astro/eqpole_grid.pro)
NAME:
EULER
PURPOSE:
Transform between Galactic, celestial, and ecliptic coordinates.
EXPLANATION:
Use the procedure ASTRO to use this routine interactively
CALLING SEQUENCE:
EULER, AI, BI, AO, BO, [ SELECT, /FK4, SELECT = ]
INPUTS:
AI - Input Longitude in DEGREES, scalar or vector. If only two
parameters are supplied, then AI and BI will be modified to
contain the output longitude and latitude.
BI - Input Latitude in DEGREES
OPTIONAL INPUT:
SELECT - Integer (1-6) specifying type of coordinate transformation.
SELECT From To | SELECT From To
1 RA-Dec (2000) Galactic | 4 Ecliptic RA-Dec
2 Galactic RA-DEC | 5 Ecliptic Galactic
3 RA-Dec Ecliptic | 6 Galactic Ecliptic
If not supplied as a parameter or keyword, then EULER will prompt for
the value of SELECT
Celestial coordinates (RA, Dec) should be given in equinox J2000
unless the /FK4 keyword is set.
OUTPUTS:
AO - Output Longitude in DEGREES
BO - Output Latitude in DEGREES
INPUT KEYWORD:
/FK4 - If this keyword is set and non-zero, then input and output
celestial and ecliptic coordinates should be given in equinox
B1950.
/SELECT - The coordinate conversion integer (1-6) may alternatively be
specified as a keyword
NOTES:
EULER was changed in December 1998 to use J2000 coordinates as the
default, ** and may be incompatible with earlier versions***.
REVISION HISTORY:
Written W. Landsman, February 1987
Adapted from Fortran by Daryl Yentis NRL
Converted to IDL V5.0 W. Landsman September 1997
Made J2000 the default, added /FK4 keyword W. Landsman December 1998
Add option to specify SELECT as a keyword W. Landsman March 2003
(See goddard/pro/astro/euler.pro)
NAME:
EXPAND_TILDE()
PURPOSE:
Expand tilde in UNIX directory names
CALLING SEQUENCE:
IDL> output=expand_tilde(input)
INPUTS:
INPUT = input file or directory name, scalar string
OUTPUT:
Returns expanded filename, scalar string
EXAMPLES:
output=expand_tilde('~zarro/test.doc')
---> output='/usr/users/zarro'
NOTES:
This version of EXPAND_TILDE differs from the version in the Solar
Library in that it does not call the functions EXIST and IDL_RELEASE.
However, it should work identically.
PROCEDURE CALLS:
None.
REVISION HISTORY:
Version 1, 17-Feb-1997, D M Zarro. Written
Transfered from Solar Library W. Landsman Sep. 1997
Made more robust D. Zarro/W. Landsman Sep. 2000
Made even more robust (since things like ~zarro weren't being expanded)
Zarro (EITI/GSFC, Mar 2001)
(See goddard/pro/misc/expand_tilde.pro)
NAME:
EXTAST
PURPOSE:
Extract ASTrometry parameters from a FITS image header.
EXPLANATION:
The astrometry in the header can be in either CD (Coordinate
description) format, or CROTA and CDELT (AIPS-type) format.
However, the output astrometry will always be in CD format.
CALLING SEQUENCE:
EXTAST, hdr, [ astr, noparams, ALT= ]
INPUT:
HDR - variable containing the FITS header (string array)
OUTPUTS:
ASTR - Anonymous structure containing astrometry info from the FITS
header ASTR always contains the following tags (even though
some projections do not require all the parameters)
.CD - 2 x 2 array containing the astrometry parameters CD1_1 CD1_2
in DEGREES/PIXEL CD2_1 CD2_2
.CDELT - 2 element vector giving physical increment at reference pixel
.CRPIX - 2 element vector giving X and Y coordinates of reference pixel
(def = NAXIS/2) in FITS convention (first pixel is 1,1)
.CRVAL - 2 element double precision vector giving R.A. and DEC of
reference pixel in DEGREES
.CTYPE - 2 element string vector giving projection types, default
['RA---TAN','DEC--TAN']
.LONGPOLE - scalar giving native longitude of the celestial pole
(default = 180 for zenithal projections)
.LATPOLE - scalar giving native latitude of the celestial pole default=0)
.PV2 - Vector of projection parameter associated with latitude axis
PV2 will have up to 21 elements for the ZPN projection, up to 3
for the SIN projection and no more than 2 for any other
projection
.DISTORT - optional substructure specifying any distortion parameters
currently implemented only for "SIP" (Spitzer Imaging
Polynomial) distortion parameters
NOPARAMS - Scalar indicating the results of EXTAST
-1 = Failure - Header missing astrometry parameters
1 = Success - Header contains CROTA + CDELT (AIPS-type) astrometry
2 = Success - Header contains CDn_m astrometry, rec.
3 = Success - Header contains PCn_m + CDELT astrometry.
4 = Success - Header contains ST Guide Star Survey astrometry
(see gsssextast.pro )
OPTIONAL INPUT KEYWORDS:
ALT - single character 'A' through 'Z' or ' ' specifying an alternate
astrometry system present in the FITS header. The default is
to use the primary astrometry or ALT = ' '. If /ALT is set,
then this is equivalent to ALT = 'A'. See Section 3.3 of
Greisen & Calabretta (2002, A&A, 395, 1061) for information about
alternate astrometry keywords.
PROCEDURE:
EXTAST checks for astrometry parameters in the following order:
(1) the CD matrix PC1_1,PC1_2...plus CDELT*, CRPIX and CRVAL
(3) the CD matrix CD1_1,CD1_2... plus CRPIX and CRVAL.
(3) CROTA2 (or CROTA1) and CDELT plus CRPIX and CRVAL.
All three forms are valid FITS according to the paper "Representations
of World Coordinates in FITS by Greisen and Calabretta (2002, A&A, 395,
1061 http://www.aoc.nrao.edu/~egreisen) although form (1) is preferred/
NOTES:
An anonymous structure is created to avoid structure definition
conflicts. This is needed because some projection systems
require additional dimensions (i.e. spherical cube
projections require a specification of the cube face).
PROCEDURES CALLED:
GSSSEXTAST, ZPARCHECK
REVISION HISTORY
Written by B. Boothman 4/15/86
Accept CD001001 keywords 1-3-88
Accept CD1_1, CD2_1... keywords W. Landsman Nov. 92
Recognize GSSS FITS header W. Landsman June 94
Converted to IDL V5.0 W. Landsman September 1997
Get correct sign, when converting CDELT* to CD matrix for right-handed
coordinate system W. Landsman November 1998
Consistent conversion between CROTA and CD matrix October 2000
CTYPE = 'PIXEL' means no astrometry params W. Landsman January 2001
Don't choke if only 1 CTYPE value given W. Landsman August 2001
Recognize PC00n00m keywords again (sigh...) W. Landsman December 2001
Recognize GSSS in ctype also D. Finkbeiner Jan 2002
Introduce ALT keyword W. Landsman June 2003
Fix error introduced June 2003 where free-format values would be
truncated if more than 20 characters. W. Landsman Aug 2003
Further fix to free-format values -- slash need not be present Sep 2003
Default value of LATPOLE is 90.0 W. Landsman February 2004
Allow for distortion substructure, currently implemented only for
SIP (Spitzer Imaging Polynomial) W. Landsman February 2004
Correct LONGPOLE computation if CTYPE = ['*DEC','*RA'] W. L. Feb. 2004
Assume since V5.3 (vector STRMID) W. Landsman Feb 2004
Yet another fix to free-format values W. Landsman April 2004
Introduce PV2 tag to replace PROJP1, PROJP2.. etc. W. Landsman May 2004
Convert NCP projection to generalized SIN W. Landsman Aug 2004
(See goddard/pro/astrom/extast.pro)
NAME: EXTGRP PURPOSE: Extract the group parameter information out of SXREAD output EXPLANATION: This procedure extracts the group parameter information out of a header and parameter variable obtained from SXREAD. This allows astrometry, photometry and other parameters to be easily SXPARed by conventional methods and allows the image and header to be saved in a SIMPLE format. CALLING SEQUENCE: ExtGrp, hdr, par INPUT: HDR - The header which is to be converted (input and output) PAR - The Parameter string returned from a call to SXREAD OUTPUT: HDR - The converted header, string array OTHER PROCEDURES CALLED: SXPAR(), SXADDPAR, SXGPAR(), STRN() HISTORY: 25-JUN-90 Version 1 written 13-JUL-92 Header finally added to this ancient procedure, code spiffed up a bit. Now 3 times faster. Added PTYPE comment inclusion. E. Deutsch Converted to IDL V5.0 W. Landsman September 1997
(See goddard/pro/sdas/extgrp.pro)
NAME:
EXTRAP
PURPOSE:
This procedure fills in the ends of a one-dimensional array from
interior portions using polynomial extrapolation.
CATEGORY:
Image processing
CALLING SEQUENCE:
EXTRAP, Deg, X, Y, Y2
INPUT POSITIONAL PARAMETERS:
Deg: Degree of polynomial
X: Independent variable
Y: Dependent variable
KEYWORD PARAMETERS:
LIMS: 3-element array giving range of X to be used to fit
polynomial and starting point where extrapolation is
to be substituted; if not given, you click on a plot;
order of elements is [xmin, xmax, xstart]; if LIMS is
specified, then program is silent
OUTPUT POSITIONAL PARAMETERS:
Y2: Dependent variable with extrapolated portion filled in
SIDE EFFECTS:
May pop a window for selecting range.
MODIFICATION HISTORY:
Written by RSH, RITSS, 14 Aug 98
Spiffed up for library. RSH, 6 Oct 98
(See goddard/pro/image/skyadj_cube.pro)
NAME:
FACTOR
PURPOSE:
Find prime factors of a given number.
CATEGORY:
CALLING SEQUENCE:
factor, x, p, n
INPUTS:
x = Number to factor (>1). in
KEYWORD PARAMETERS:
Keywords:
/QUIET means do not print factors.
/DEBUG Means list steps as they happen.
/TRY Go beyond 20000 primes.
OUTPUTS:
p = Array of prime numbers. out
n = Count of each element of p. out
COMMON BLOCKS:
NOTES:
Note: see also prime, numfactors, print_fact.
MODIFICATION HISTORY:
R. Sterner. 4 Oct, 1988.
RES 25 Oct, 1990 --- converted to IDL V2.
R. Sterner, 1999 Jun 30 --- Improved (faster, bigger).
R. Sterner, 1999 Jul 7 --- Bigger values (used unsigned).
R. Sterner, 1999 Jul 9 --- Tried to make backward compatable.
R. Sterner, 2000 Jan 06 --- Fixed to ignore non-positive numbers.
Johns Hopkins University Applied Physics Laboratory.
Copyright (C) 1988, Johns Hopkins University/Applied Physics Laboratory
This software may be used, copied, or redistributed as long as it is not
sold and this copyright notice is reproduced on each copy made. This
routine is provided as is without any express or implied warranties
whatsoever. Other limitations apply as described in the file disclaimer.txt.
(See goddard/pro/jhuapl/factor.pro)
NAME:
FDECOMP
PURPOSE:
Routine to decompose file name(s) for any operating system. V5.3 or later
CALLING SEQUENCE:
FDECOMP, filename, disk, dir, name, qual, version, [OSFamily = ]
INPUT:
filename - string file name(s), scalar or vector
OUTPUTS:
All the output parameters will have the same number of elements as
input filename
disk - disk name, always '' on a Unix machine, scalar or vector string
dir - directory name, scalar or vector string
name - file name, scalar or vector string
qual - qualifier, set equal to the characters beyond the last "."
version - version number, always '' on a non-VMS machine, scalar string
OPTIONAL INPUT KEYWORD:
OSFamily - one of the four scalar strings specifying the operating
system: 'vms','Windows','MacOS' or 'unix'. If not supplied,
then !VERSION.OS_FAMILY is used to determine the OS.
EXAMPLES:
Consider the following file names
unix: file = '/rsi/idl40/avg.pro'
vms: file = '$1$dua5:[rsi.idl40]avg.pro;3
MacOS: file = 'Macintosh HD:Programs:avg.pro'
Windows: file = 'd:\rsi\idl40\avg.pro'
then IDL> FDECOMP, file, disk, dir, name, qual, version
will return the following
Disk Dir Name Qual Version
Unix: '' '/rsi/idl40/' 'avg' 'pro' ''
VMS: '$1$dua5' '[RSI.IDL40]' 'avg' 'pro' '3'
Mac: 'Macintosh HD' ':Programs:' 'avg' 'pro' ''
Windows: 'd:' \rsi\idl40\ 'avg' 'pro' ''
NOTES:
(1) All tokens are removed between
1) name and qual (i.e period is removed)
2) qual and ver (i.e. VMS semicolon is removed)
(2) On VMS the filenames "MOTD" and "MOTD." are distinguished by the
fact that qual = '' for the former and qual = ' ' for the latter.
ROUTINES CALLED:
None.
HISTORY
version 1 D. Lindler Oct 1986
Include VMS DECNET machine name in disk W. Landsman HSTX Feb. 94
Converted to Mac IDL, I. Freedman HSTX March 1994
Converted to IDL V5.0 W. Landsman September 1997
Major rewrite to accept vector filenames V5.3 W. Landsman June 2000
Fix cases where disk name not always present W. Landsman Sep. 2000
Make sure version defined for Windows W. Landsman April 2004
(See goddard/pro/misc/fdecomp.pro)
NAME:
FILTER_IMAGE
PURPOSE:
Identical to MEDIAN or SMOOTH but handle edges and allow iterations.
EXPLANATION:
Computes the average and/or median of pixels in moving box,
replacing center pixel with the computed average and/or median,
(using the IDL SMOOTH() or MEDIAN() functions).
The main reason for using this function is the options to
also process the pixels at edges and corners of image, and,
to apply iterative smoothing simulating convolution with Gaussian,
and/or to convolve image with a Gaussian kernel.
CALLING SEQUENCE:
Result = filter_image( image, SMOOTH=width, MEDIAN = width, /ALL_PIXELS
/ITERATE, FWHM =, /NO_FT_CONVOL)
INPUT:
image = 2-D array (matrix)
OPTIONAL INPUT KEYWORDS:
SMOOTH = scalar (odd) integer specifying the width of a square box
for moving average, in # pixels. /SMOOTH means use box
width = 3 pixels for smoothing.
MEDIAN = scalar (usually odd) integer specifying the width of square
moving box for median filter, in # pixels. /MEDIAN means use
box width = 3 pixels for median filter.
/ALL_PIXELS causes the edges of image to be filtered as well. This
is accomplished by reflecting pixels adjacent to edges outward
(similar to the /EDGE_WRAP keyword in CONVOL).
Note that this is a different algorithm from the /EDGE_TRUCATE
keyword to SMOOTH or CONVOL, which duplicates the nearest pixel.
/ITERATE means apply smooth(image,3) iteratively for a count of
(box_width-1)/2 times (=radius), when box_width >= 5.
This is equivalent to convolution with a Gaussian PSF
of FWHM = 2 * sqrt( radius ) as radius gets large.
Note that /ALL_PIXELS is automatically applied,
giving better results in the iteration limit.
(also, MEDIAN keyword is ignored when /ITER is specified).
FWHM_GAUSSIAN = Full-width half-max of Gaussian to convolve with image.
FWHM can be a single number (circular beam),
or 2 numbers giving axes of elliptical beam.
/NO_FT_CONVOL causes the convolution to be computed directly,
with intrinsic IDL CONVOL function. The default is to use
FFT when factors of size are all LE 13. Note that
external function convolve.pro handles both cases)
OPTIONAL INPUT/OUTPUT KEYWORD:
PSF = Array containing the PSF used during the convolution. This
keyword is only active if the FWHM_GAUSSIAN keyword is also
specified. If PSF is undefined on input, then upon output it
contains the Gaussian convolution specified by the FWHM_GAUSSIAN
keyword. If the PSF array is defined on input then it is used
as the convolution kernel, the value of the FWHM_GAUSSIAN keyword
is ignored. Typically, on a first call set PSF to an undefined
variable, which can be reused for subsequent calls to prevent
recalculation of the Gaussian PSF.
RESULT:
Function returns the smoothed, median filtered, or convolved image.
If both SMOOTH and MEDIAN are specified, median filter is applied first.
EXAMPLES:
To apply 3x3 moving median filter and
then 3x3 moving average, both applied to all pixels:
Result = filter_image( image, /SMOOTH, /MEDIAN, /ALL )
To iteratively apply 3x3 moving average filter for 4 = (9-1)/2 times,
thus approximating convolution with Gaussian of FWHM = 2*sqrt(4) = 4 :
Result = filter_image( image, SMOOTH=9, /ITER )
To convolve all pixels with Gaussian of FWHM = 3.7 x 5.2 pixels:
Result = filter_image( image, FWHM=[3.7,5.2], /ALL )
EXTERNAL CALLS:
function psf_gaussian
function convolve
pro factor
function prime ;all these called only if FWHM is specified
PROCEDURE:
If both /ALL_PIXELS (or /ITERATE) keywords are set then
create a larger image by reflecting the edges outward, then call the
IDL MEDIAN() or SMOOTH() function on the larger image, and just return
the central part (the original size image).
NAN values are recognized during calls to MEDIAN() or SMOOTH(), but
not for convolution with a Gaussian (FWHM keyword supplied).
HISTORY:
Written, 1991, Frank Varosi, NASA/GSFC.
FV, 1992, added /ITERATE option.
FV, 1993, added FWHM_GAUSSIAN= option.
Converted to IDL V5.0 W. Landsman September 1997
Use /EVEN call to median, recognize NAN values in SMOOTH
W. Landsman June 2001
Added PSF keyword, Bjorn Heijligers/WL, September 2001
(See goddard/pro/image/filter_image.pro)
NAME:
FIND
PURPOSE:
Find positive brightness perturbations (i.e stars) in an image
EXPLANATION:
Also returns centroids and shape parameters (roundness & sharpness).
Adapted from 1986 STSDAS version of DAOPHOT.
CALLING SEQUENCE:
FIND, image, [ x, y, flux, sharp, round, hmin, fwhm, roundlim, sharplim
PRINT= , /SILENT ]
INPUTS:
image - 2 dimensional image array (integer or real) for which one
wishes to identify the stars present
OPTIONAL INPUTS:
FIND will prompt for these parameters if not supplied
hmin - Threshold intensity for a point source - should generally
be 3 or 4 sigma above background
fwhm - FWHM to be used in the convolve filter
sharplim - 2 element vector giving low and high cutoff for the
sharpness statistic (Default: [0.2,1.0] ). Change this
default only if the stars have significantly larger or
or smaller concentration than a Gaussian
roundlim - 2 element vector giving low and high cutoff for the
roundness statistic (Default: [-1.0,1.0] ). Change this
default only if the stars are significantly elongated.
OPTIONAL INPUT KEYWORDS:
/SILENT - Normally, FIND will write out each star that meets all
selection criteria. If the SILENT keyword is set and
non-zero, then this printout is suppressed.
PRINT - if set and non-zero then FIND will also write its results to
a file find.prt. Also one can specify a different output file
name by setting PRINT = 'filename'.
OPTIONAL OUTPUTS:
x - vector containing x position of all stars identified by FIND
y- vector containing y position of all stars identified by FIND
flux - vector containing flux of identified stars as determined
by a Gaussian fit. Fluxes are NOT converted to magnitudes.
sharp - vector containing sharpness statistic for identified stars
round - vector containing roundness statistic for identified stars
NOTES:
(1) The sharpness statistic compares the central pixel to the mean of
the surrounding pixels. If this difference is greater than the
originally estimated height of the Gaussian or less than 0.2 the height of the
Gaussian (for the default values of SHARPLIM) then the star will be
rejected.
(2) More recent versions of FIND in DAOPHOT allow the possibility of
ignoring bad pixels. Unfortunately, to implement this in IDL
would preclude the vectorization made possible with the CONVOL function
and would run extremely slowly.
PROCEDURE CALLS:
GETOPT()
REVISION HISTORY:
Written W. Landsman, STX February, 1987
ROUND now an internal function in V3.1 W. Landsman July 1993
Change variable name DERIV to DERIVAT W. Landsman Feb. 1996
Use /PRINT keyword instead of TEXTOUT W. Landsman May 1996
Changed loop indices to type LONG W. Landsman Aug. 1997
Converted to IDL V5.0 W. Landsman September 1997
Replace DATATYPE() with size(/TNAME) W. Landsman Nov. 2001
Fix problem when PRINT= filename W. Landsman October 2002
Fix problems with >32767 stars D. Schlegel/W. Landsman Sep. 2004
(See goddard/pro/idlphot/find.pro)
NAME:
FINDPRO
PURPOSE:
Find all locations of a procedure in the IDL !PATH
EXPLANATION:
FINDPRO searces for the procedure name (as a .pro or a .sav file) in all
IDL libraries or directories given in the !PATH system variable.
CALLING SEQUENCE:
FINDPRO, [ Proc_Name, /NoPrint, DirList = , ProList = ]
OPTIONAL INPUT:
Proc_Name - Character string giving the name of the IDL procedure or
function. Do not include the ".pro" extension. If Proc_Name is
omitted, the program will prompt for PROC_NAME. "*" wildcards
are permitted.
OPTIONAL KEYWORD INPUT:
/NoPrint - if set, then the file's path is not printed on the screen and
absolutely no error messages are printed on the screen. If not
set, then - since the MESSAGE routine is used - error messages
will be printed but the printing of informational messages
depends on the value of the !Quiet variable.
OPTIONAL KEYWORD OUTPUTS:
DirList - The directories in which the file is located are returned in
the keyword as a string array.
If the procedure was found in a VMS text library, then the
full path and name of that library is returned and is prefixed
by an "@" sign as a flag that it is a library, not a directory.
If the procedure is an intrinsic IDL procedure, then the
value of DirList = ['INTRINSIC'].
If the procedure is not found, the value of DirList = [''].
ProList - The list (full pathnames) of procedures found. Useful if you
are looking for the name of a procedure using wildcards.
The order of the names in DirList and ProList is identical to the order
in which the procedure name appears in the !PATH
PROCEDURE:
The system variable !PATH is parsed using EXPAND_PATH into individual
libraries or directories. Each library or directory is then
searched for the procedure name. If not found in !PATH, then the
the name is compared with the list of intrinsic IDL procedures given
by the ROUTINE_INFO function.
EXAMPLE:
(1) Find the procedure CURVEFIT. Assume for this example that the user
also has a copy of the CURVEFIT.PRO procedure in her home directory
on a Unix machine.
IDL> findpro, 'curvefit', DIRLIST=DirList
Procedure curvefit.pro found in directory .
Procedure curvefit.pro found in directory /home/idl/lib/userlib
IDL> help, DirList
DIRLIST STRING = Array(2)
IDL> help, DirList(0), DirList(1)
<Expression> STRING = '.'
<Expression> STRING = '/home/idl/lib/userlib'
(2) Find all procedures in one's !path containing the characters "zoom"
IDL> findpro,'*zoom*'
RESTRICTIONS:
User will be unable to find a path for a native IDL function
or procedure, or for a FORTRAN or C routine added with CALL_EXTERNAL.
Remember that Unix is case sensitive, and most procedures will be in
lower case.
PROCEDURES USED:
ZPARCHECK, FDECOMP, UNIQ()
REVISION HISTORY:
Based on code extracted from the GETPRO procedure, J. Parker 1994
Use the intrinsic EXPAND_PATH function W. Landsman Nov. 1994
Use ROUTINE_NAMES() to check for intrinsic procs W. Landsman Jul 95
Added Macintosh, WINDOWS compatibility W. Landsman Sep. 95
Removed spurious first element in PROLIST W. Landsman March 1997
Don't include duplicate directories in !PATH WL May 1997
Converted to IDL V5.0 W. Landsman September 1997
Use ROUTINE_INFO instead of undocumented ROUTINE_NAMES W.L. October 1998
Also check for save sets W. Landsman October 1999
Force lower case check for VMS W. Landsman January 2000
Only return .pro or .sav files in PROLIST W. Landsman January 2002
Force lower case check for .pro and .sav D. Swain September 2002
(See goddard/pro/misc/findpro.pro)
NAME:
FIND_ALL_DIR()
PURPOSE:
Finds all directories under a specified directory.
EXPLANATION:
This routine finds all the directories in a directory tree when the
root of the tree is specified. This provides the same functionality as
having a directory with a plus in front of it in the environment
variable IDL_PATH.
CALLING SEQUENCE:
Result = FIND_ALL_DIR( PATH )
PATHS = FIND_ALL_DIR('+mypath', /PATH_FORMAT)
PATHS = FIND_ALL_DIR('+mypath1:+mypath2')
INPUTS:
PATH = The path specification for the top directory in the tree.
Optionally this may begin with the '+' character but the action
is the same unless the PLUS_REQUIRED keyword is set.
One can also path a series of directories separated
by the correct character ("," for VMS, ":" for Unix)
OUTPUTS:
The result of the function is a list of directories starting from the
top directory passed and working downward from there. Normally, this
will be a string array with one directory per array element, but if
the PATH_FORMAT keyword is set, then a single string will be returned,
in the correct format to be incorporated into !PATH.
OPTIONAL INPUT KEYWORDS:
PATH_FORMAT = If set, then a single string is returned, in
the format of !PATH.
PLUS_REQUIRED = If set, then a leading plus sign is required
in order to expand out a directory tree.
This is especially useful if the input is a
series of directories, where some components
should be expanded, but others shouldn't.
RESET = Often FIND_ALL_DIR is used with logical names. It
can be rather slow to search through these subdirectories.
The /RESET keyword can be used to redefine an environment
variable so that subsequent calls don't need to look for the
subdirectories.
To use /RESET, the PATH parameter must contain the name of a
*single* environment variable. For example
setenv,'FITS_DATA=+/datadisk/fits'
dir = find_all_dir('FITS_DATA',/reset,/plus)
The /RESET keyword is usually combined with /PLUS_REQUIRED.
PROCEDURE CALLS:
DEF_DIRLIST, FIND_WITH_DEF(), BREAK_PATH()
RESTRICTIONS:
PATH must point to a directory that actually exists.
On VMS computers this routine calls a command file, FIND_ALL_DIR.COM
(available only on VMS distribution) to find the directories. This
command file must be in one of the directories in IDL's standard search
path, !PATH.
;
REVISION HISTORY:
Version 11, Zarro (SM&A/GSFC), 23-March-00
Removed all calls to IS_DIR
Version 12, William Thompson, GSFC, 02-Feb-2001
In Windows, use built-in expand_path if able.
Version 13, William Thompson, GSFC, 23-Apr-2002
Follow logical links in Unix
(Suggested by Pascal Saint-Hilaire)
Version 14, Zarro (EER/GSFC), 26-Oct-2002
Saved/restored current directory to protect against
often mysterious directory changes caused by
spawning FIND in Unix
Version 15, William Thompson, GSFC, 9-Feb-2004
Resolve environment variables in Windows.
Version : Version 15
(See goddard/pro/misc/find_all_dir.pro)
NAME:
FIND_WITH_DEF()
PURPOSE:
Searches for files with a default path and extension.
EXPLANATION:
Finds files using default paths and extensions, similar to using the
DEFAULT keyword with the OPEN statement in VMS. Using this routine
together with environment variables allows an OS-independent approach
to finding files.
CALLING SEQUENCE:
Result = FIND_WITH_DEF( FILENAME, PATHS [, EXTENSIONS ] )
INPUTS:
FILENAME = Name of file to be searched for. It may either be a
complete filename, or the path or extension could be left
off, in which case the routine will attempt to find the
file using the default paths and extensions.
PATHS = One or more default paths to use in the search in case
FILENAME does not contain a path itself. The individual
paths are separated by commas, although in UNIX, colons
can also be used. In other words, PATHS has the same
format as !PATH, except that commas can be used as a
separator regardless of operating system. The current
directory is always searched first, unless the keyword
NOCURRENT is set.
A leading $ can be used in any path to signal that what
follows is an environmental variable, but the $ is not
necessary. (In VMS the $ can either be part of the path,
or can signal logical names for compatibility with Unix.)
Environmental variables can themselves contain multiple
paths.
OPTIONAL INPUTS:
EXTENSIONS = One or more extensions to append to end of filename if the
filename does not contain one (e.g. ".dat"). The period
is optional. Multiple extensions can be separated by
commas or colons.
OUTPUTS:
The result of the function is the name of the file if successful, or
the null string if unsuccessful.
OPTIONAL INPUT KEYWORDS:
NOCURRENT = If set, then the current directory is not searched.
RESET = The FIND_WITH_DEF routine supports paths which are
preceeded with the plus sign to signal that all
subdirectories should also be searched. Often this is
used with logical names. It can be rather slow to search
through these subdirectories. The /RESET keyword can be
used to redefine an environment variable so that
subsequent calls don't need to look for the
subdirectories.
To use /RESET, the PATHS parameter must contain the name
of a *single* environment variable. For example
setenv,'FITS_DATA=+/datadisk/fits'
file = find_with_def('test.fits','FITS_DATA',/reset)
EXAMPLE:
FILENAME = ''
READ, 'File to open: ', FILENAME
FILE = FIND_WITH_DEF( FILENAME, 'SERTS_DATA', '.fix' )
IF FILE NE '' THEN ...
PROCEDURE CALLS:
BREAK_PATH(), FIND_ALL_DIR(), STR_SEP()
REVISION HISTORY:
Version 1, William Thompson, GSFC, 3 May 1993.
Removed trailing / and : characters.
Fixed bugs
Allow for commas within values of logical names.
Added keyword NOCURRENT.
Changed to call BREAK_PATH
Version 2, William Thompson, GSFC, 3 November 1994
Made EXTENSIONS optional.
Version 3, William Thompson, GSFC, 30 April 1996
Call FIND_ALL_DIR to resolve any plus signs.
Version 4, S.V. Haugan, UiO, 5 June 1996
Using OPENR,..,ERROR=ERROR to avoid an IDL 3.6
internal nesting error.
Version 5, R.A. Schwartz, GSFC, 11 July 1996
Use SPEC_DIR to interpret PATH under VMS
Version 6, William Thompson, GSFC, 5 August 1996
Took out call to SPEC_DIR (i.e., reverted to version 4). The
use of SPEC_DIR was required to support logical names defined
via SETLOG,/CONFINE. However, it conflicted with the ability
to use logical names with multiple values. Removing the
/CONFINE made it unnecessary to call SPEC_DIR in this routine.
Version 7, William Thompson, GSFC, 6 August 1996
Added keyword RESET
Converted to IDL V5.0 W. Landsman October 1997
Use STRTRIM instead of TRIM, W. Landsman November 1998
Use STRSPLIT instead of STR_SEP W. Landsman July 2002
(See goddard/pro/misc/find_with_def.pro)
NAME:
FITEXY
PURPOSE:
Best straight-line fit to data with errors in both coordinates
EXPLANATION:
Linear Least-squares approximation in one-dimension (y = a + b*x),
when both x and y data have errors
CALLING EXAMPLE:
FITEXY, x, y, A, B, X_SIG= , Y_SIG= , [sigma_A_B, chi_sq, q, TOL=]
INPUTS:
x = array of values for independent variable.
y = array of data values assumed to be linearly dependent on x.
REQUIRED INPUT KEYWORDS:
X_SIGMA = scalar or array specifying the standard deviation of x data.
Y_SIGMA = scalar or array specifying the standard deviation of y data.
OPTIONAL INPUT KEYWORD:
TOLERANCE = desired accuracy of minimum & zero location, default=1.e-3.
OUTPUTS:
A_intercept = constant parameter result of linear fit,
B_slope = slope parameter, so that:
( A_intercept + B_slope * x ) approximates the y data.
OPTIONAL OUTPUT:
sigma_A_B = two element array giving standard deviation of
A_intercept and B_slope parameters, respectively.
The standard deviations are not meaningful if (i) the
fit is poor (see parameter q), or (ii) b is so large that
the data are consistent with a vertical (infinite b) line.
If the data are consistent with *all* values of b, then
sigma_A_B = [1e33,e33]
chi_sq = resulting minimum Chi-Square of Linear fit, scalar
q - chi-sq probability, scalar (0-1) giving the probability that
a correct model would give a value equal or larger than the
observed chi squared. A small value of q indicates a poor
fit, perhaps because the errors are underestimated.
COMMON:
common fitexy, communicates the data for computation of chi-square.
PROCEDURE CALLS:
CHISQ_FITEXY() ;Included in this file
MINF_BRACKET, MINF_PARABOLIC, ZBRENT ;In IDL Astronomy Library
MOMENT(), CHISQR_PDF() ;In standard IDL distribution
PROCEDURE:
From "Numerical Recipes" column by Press and Teukolsky:
in "Computer in Physics", May, 1992 Vol.6 No.3
Also see the 2nd edition of the book "Numerical Recipes" by Press et al.
MODIFICATION HISTORY:
Written, Frank Varosi NASA/GSFC September 1992.
Now returns q rather than 1-q W. Landsman December 1992
Converted to IDL V5.0 W. Landsman September 1997
Use CHISQR_PDF, MOMENT instead of STDEV,CHI_SQR1 W. Landsman April 1998
Fixed typo for initial guess of slope, this error was nearly
always insignificant W. Landsman March 2000
(See goddard/pro/math/fitexy.pro)
NAME:
FITSDIR
PURPOSE:
Display selected FITS keywords from the headers of FITS files.
EXPLANATION:
The values of either user-specified or default FITS keywords are
displayed in either the primary header and/or the first extension header.
Unless the /NOSIZE keyword is set, the data size is also displayed.
The default keywords are as follows (with keywords in 2nd row used if
those in the first row not found, and the 3rd row if neither the keywords
in the first or second rows found:)
DATE-OBS TELESCOP OBJECT EXPTIME
TDATEOBS TELNAME TARGNAME INTEG ;First Alternative
DATE OBSERVAT EXPOSURE ;Second Alternative
INSTRUME EXPTIM ;Third Alternative
FITSDIR will also recognize gzip compressed files (must have a .gz
or FTZ extension).
CALLING SEQUENCE:
FITSDIR , [ directory, TEXTOUT =, /FLAT, KEYWORDS=, /NOSIZE, /NoTELESCOPE
ALT1_KEYWORDS= ,ALT2_KEYWORDS = ,ALT3_KEYWORDS =
OPTIONAL INPUT PARAMETERS:
DIRECTORY - Scalar string giving file name, disk or directory to be
searched. Wildcard file names are allowed. Examples of
valid names include 'iraf/*.fits' (Unix), d:\myfiles\f*.fits',
(Windows) or 'Macintosh HD:Files:*c0f.fits' (Macintosh).
OPTIONAL KEYWORD INPUT PARAMETER
KEYWORDS - FITS keywords to display, as either a vector of strings or as
a comma delimited scalar string, e.g.'testname,dewar,filter'
If not supplied, then the default keywords are 'DATE-OBS',
'TELESCOP','OBJECT','EXPTIME'
ALT1_KEYWORDS - A list (either a vector of strings or a comma delimited
strings of alternative keywords to use if the default
KEYWORDS cannot be found. By default, 'TDATEOBS', is the
alternative to DATE-OBS, 'TELNAME' for 'TELESCOP','TARGNAME'
for 'OBJECT', and 'INTEG' for EXPTIME
ALT2_KEYWORDS - A list (either a vector of strings or a comma delimited
strings of alternative keywords to use if neither KEYWORDS
nor ALT1_KEYWORDS can be found.
ALT3_KEYWORDS - A list (either a vector of strings or a comma delimited
strings of alternative keywords to use if neither KEYWORDS
nor ALT1_KEYWORDS nor ALT2_KEYWORDS can be found.
/NOSIZE - if set then information about the image size is not displayed
TEXTOUT - Controls output device as described in TEXTOPEN procedure
textout=1 TERMINAL using /more option
textout=2 TERMINAL without /more option
textout=3 <program>.prt
textout=4 laser.tmp
textout=5 user must open file
textout=7 Append to existing <program>.prt file
textout = filename (default extension of .prt)
EXTEN - Specifies an extension number (/EXTEN works for first extension)
which is checked for the desired keywords.
/NOTELESCOPE - If set, then if the default keywords are used, then the
TELESCOPE (or TELNAME, OBSERVAT, INSTRUME) keywords are omitted
to give more room for display other keywords. The /NOTELESCOP
keyword has no effect if the default keywords are not used.
OUTPUT PARAMETERS:
None.
EXAMPLES:
(1) Print info on all'*.fits' files in the current directory using default
keywords. Include information from the extension header
IDL> fitsdir,/exten
(2) Write a driver program to display selected keywords in HST/ACS drizzled
(*drz) images
pro acsdir
keywords = 'date-obs,targname,detector,filter1,filter2,exptime'
fitsdir,'*drz.fits',key=keywords,/exten
return & end
(3) Write info on all *.fits files in the Unix directory /usr2/smith, to a
file 'smith.txt' using the default keywords, but don't display the value
of the TELESCOPE keyword
IDL> fitsdir ,'/usr2/smith/*.fits',t='smith.txt', /NoTel
PROCEDURE:
FINDFILE (or FILE_SEARCH if since V5.5) is used to find the specified
FITS files. The header of each file is read, and the selected
keywords are extracted. The formatting is adjusted so that no value
is truncated on display.
SYSTEM VARIABLES:
TEXTOPEN (called by FITSDIR) will automatically define the following
non-standard system variables if they are not previously defined:
DEFSYSV,'!TEXTOUT',1
DEFSYSV,'!TEXTUNIT',0
PROCEDURES USED:
FDECOMP, FXMOVE, MRD_HREAD, REMCHAR, SPEC_DIR(),
TEXTOPEN, TEXTCLOSE
MODIFICATION HISTORY:
Written, W. Landsman, HSTX February, 1993
Converted to IDL V5.0 W. Landsman September 1997
Search alternate keyword names W.Landsman October 1998
Avoid integer truncation for NAXISi >32767 W. Landsman July 2000
Don't leave open unit W. Landsman July 2000
Added EXTEN keyword, work with compressed files, additional alternate
keywords W. Landsman December 2000
Don't assume floating pt. exposure time W. Landsman September 2001
Major rewrite, KEYWORD & ALT*_KEYWORDS keywords, no truncation,
/NOSIZE keyword W. Landsman, SSAI August 2002
Assume V5.3 or later W. Landsman November 2002
Fix case where no keywords supplied W. Landsman January 2003
NAXIS* values must be integers W. Landsman SSAI June 2003
Trim spaces off of input KEYWORD values W. Landsman March 2004
Treat .FTZ extension as gzip compressed W. Landsman September 2004
(See goddard/pro/fits/fitsdir.pro)
NAME:
FITSRGB_to_TIFF
PURPOSE:
Combine separate red, green, and blue FITS images into TIFF format
EXPLANATION:
The output TIFF (class R) file can have colors interleaved either
by pixel or image. The colour mix is also adjustable.
CALLING SEQUENCE:
FITSRGB_to_TIFF, path, rgb_files, tiff_name [,/BY_PIXEL, /PREVIEW,
RED= , GREEN =, BLUE =]
INPUTS:
path = file system directory path to the RGB files required.
rgb_files = string array with three components - the red FITS file
filename, the blue FITS file filename and the green FITS
file filename
OUTPUTS:
tiff_name = string containing name of tiff file to be produced
OPTIONAL OUTPUT:
Header = String array containing the header from the FITS file.
OPTIONAL INPUT KEYWORDS:
BY_PIXEL = This causes TIFF file RGB to be interleaved by pixel
rather than the default of by image.
PREVIEW = Allows a 24 bit image to be displayed on the screen
to check the colour mix.
RED = Real number containing the fractional mix of red
GREEN = Real number containing the fractional mix of green
BLUE = Real number containing the fractional mix of blue
EXAMPLE:
Read three FITS files, 'red.fits', 'blue.fits' and 'green.fits' from
the directory '/data/images/space' and output a TIFF file named
'colour.tiff'
IDL> FITSRGB_to_TIFF, '/data/images/space', ['red.fits', $
'blue.fits', 'green.fits'], 'colour.tiff'
Read three FITS files, 'red.fits', 'blue.fits' and 'green.fits' from
the current directory and output a TIFF file named '/images/out.tiff'
In this case, the red image is twice as strong as the green and the
blue is a third more intense. A preview on screen is also wanted.
IDL> FITSRGB_to_TIFF, '.', ['red.fits', $
'blue.fits', 'green.fits'], '/images/out.tiff', $
/PREVIEW, RED=0.5, GREEN=1.0, BLUE=0.666
RESTRICTIONS:
(1) Limited to the ability of the routine READFITS
NOTES:
None
PROCEDURES USED:
Functions: READFITS, CONCAT_DIR
Procedures: WRITE_TIFF
MODIFICATION HISTORY:
16th January 1995 - Written by Carl Shaw, Queen's University Belfast
27 Jan 1995 - W. Landsman, Add CONCAT_DIR for VMS, Windows compatibility
Converted to IDL V5.0 W. Landsman September 1997
Use WRITE_TIFF instead of obsolete TIFF_WRITE W. Landsman December 1998
Cosmetic changes W. Landsman February 2000
(See goddard/pro/fits/fitsrgb_to_tiff.pro)
NAME:
FITS_ADD_CHECKSUM
PURPOSE:
Add or update the CHECKSUM and DATASUM keywords in a FITS header
EXPLANATION:
Follows the 23 May 2002 version of the FITS checksum proposal at
http://heasarc.gsfc.nasa.gov/docs/heasarc/fits/checksum.html
CALLING SEQUENCE:
FITS_ADD_CHECKSUM, Hdr, [ Data, /No_TIMESTAMP, /FROM_IEEE ]
INPUT-OUTPUT:
Hdr - FITS header (string array), it will be updated with new
(or modfied) CHECKSUM and DATASUM keywords
OPTIONAL INPUT:
Data - data array associated with the FITS header. If not supplied, or
set to a scalar, then the program checks whether there is a
DATASUM keyword already in the FITS header containing the 32bit
checksum for the data. if there is no such keyword then ther
assumed to be no data array
associated with the FITS header.
OPTIONAL INPUT KEYWORDS:
/FROM_IEEE - If this keyword is set, then the input is assumed to be in
big endian format (e.g. an untranslated FITS array). This
keyword only has an effect on little endian machines (e.g.
a Linux box).
/No_TIMESTAMP - If set, then a time stamp is not included in the comment
field of the CHECKSUM and DATASUM keywords. Unless the
/No_TIMESTAMP keyword is set, repeated calls to FITS_ADD_CHECKSUM
with the same header and data will yield different values of
CHECKSUM (as the date stamp always changes). However, use of the
date stamp is recommended in the checksum proposal.
PROCEDURES USED:
CHECKSUM32, FITS_ASCII_ENCODE(), GET_DATE, SXADDPAR, SXPAR()
REVISION HISTORY:
W. Landsman SSAI December 2002
(See goddard/pro/fits/fits_add_checksum.pro)
NAME:
FITS_ASCII_ENCODE()
PURPOSE:
Encode an unsigned longword as an ASCII string to insert in a FITS header
EXPLANATION:
Follows the 23 May 2002 version of the FITS checksum proposal at
http://heasarc.gsfc.nasa.gov/docs/heasarc/fits/checksum.html
CALLING SEQUENCE:
result = FITS_ASCII_ENCODE( sum32)
INPUTS:
sum32 - 32bit *unsigned longword* (e.g. as returned by CHECKSUM32)
RESULT:
A 16 character scalar string suitable for the CHECKSUM keyword
EXAMPLE:
A FITS header/data unit has a checksum of 868229149. Encode the
complement of this value (3426738146) into an ASCII string
IDL> print,FITS_ASCII_ENCODE(3426738146U)
===> "hcHjjc9ghcEghc9g"
METHOD:
The 32bit value is interpreted as a sequence of 4 unsigned 8 bit
integers, and divided by 4. Add an offset of 48b (ASCII '0').
Remove non-alphanumeric ASCII characters (byte values 58-64 and 91-96)
by simultaneously incrementing and decrementing the values in pairs.
Cyclicly shift the string one place to the right.
REVISION HISTORY:
Written W. Landsman SSAI December 2002
(See goddard/pro/fits/fits_ascii_encode.pro)
NAME:
FITS_CD_FIX
PURPOSE:
Update obsolete representations of the CD matrix in a FITS header
EXPLANATION:
According the paper, "Representations of Celestial Coordinates in FITS"
by Calabretta & Greisen (2002, A&A, 395, 1077, available at
http://www.aoc.nrao.edu/~egreisen/) the rotation of an image from
standard coordinates is represented by a coordinate description (CD)
matrix. The standard representation of the CD matrix are PCn_m
keywords, but CDn_m keywords (which include the scale factors) are
also allowed. However, earliers drafts of the standard allowed the
keywords forms CD00n00m and PC00n00m. This procedure will convert
FITS CD matrix keywords containing zeros into the standard forms
CDn_m and PCn_m containing only underscores.
CALLING SEQUENCE:
FITS_CD_FIX, Hdr
INPUT-OUTPUT:
HDR - FITS header, 80 x N string array. If the header does not
contain 'CD00n00m' or 'PC00n00m' keywords then it is left
unmodified. Otherwise, the keywords containing integers are
replaced with those containing underscores.
OPTIONAL KEYWORD INPUT
/REVERSE - this keyword does nothing, but is kept for compatiblity with
earlier versions.
PROCEDURES USED:
SXADDPAR, SXDELPAR, SXPAR()
REVISION HISTORY:
Written W. Landsman Feb 1990
Major rewrite Feb 1994
Converted to IDL V5.0 W. Landsman September 1997
Use double precision formatting of CD matrix W. Landsman April 2000
Major rewrite to convert only to forms recognized by the Greisen
& Calabretta standard W. Landsman July 2003
(See goddard/pro/astrom/fits_cd_fix.pro)
NAME:
FITS_CLOSE
*PURPOSE:
Close a FITS data file
*CATEGORY:
INPUT/OUTPUT
*CALLING SEQUENCE:
FITS_CLOSE,fcb
*INPUTS:
FCB: FITS control block returned by FITS_OPEN.
*KEYWORD PARAMETERS:
/NO_ABORT: Set to return to calling program instead of a RETALL
when an I/O error is encountered. If set, the routine will
return a non-null string (containing the error message) in the
keyword MESSAGE. If /NO_ABORT not set, then FITS_CLOSE will
print the message and issue a RETALL
MESSAGE = value: Output error message
*EXAMPLES:
Open a FITS file, read some data, and close it with FITS_CLOSE
FITS_OPEN,'infile',fcb
FITS_READ,fcb,data
FITS_READ,fcb,moredata
FITS_CLOSE,fcb
*HISTORY:
Written by: D. Lindler August, 1995
Converted to IDL V5.0 W. Landsman September 1997
Do nothing if fcb an invalid structure D. Schlegel/W. Landsman Oct. 2000
Return Message='' for to signal normal operation W. Landsman Nov. 2000
(See goddard/pro/fits/fits_close.pro)
NAME:
FITS_HELP
PURPOSE:
To print a summary of the primary data units and extensions in a
FITS file.
;
CALLING SEQUENCE:
FITS_HELP,filename_or_fcb
INPUTS:
FILENAME_OR_FCB - name of the fits file or the FITS Control Block (FCB)
returned by FITS_OPEN. For versions since V5.3, the
file name is allowed to be gzip compressed (with a .gz
extension)
OUTPUTS:
a summary of the fits file is printed.
EXAMPLES:
FITS_HELP,'myfile.fits'
FITS_OPEN,'anotherfile.fits',fcb
FITS_HELP,fcb
PROCEDURES USED:
FITS_OPEN, FITS_CLOSE
HISTORY:
Written by: D. Lindler August, 1995
Converted to IDL V5.0 W. Landsman September 1997
Don't truncate EXTNAME values at 10 chars W. Landsman Feb. 2005
(See goddard/pro/fits/fits_help.pro)
NAME:
FITS_INFO
PURPOSE:
Provide information about the contents of a FITS file
EXPLANATION:
Information includes number of header records and size of data array.
Applies to primary header and all extensions. Information can be
printed at the terminal and/or stored in a common block
This routine is mostly obsolete, and better results can be usually be
performed with FITS_HELP (for display) or FITS_OPEN (to read FITS
information into a structure)
CALLING SEQUENCE:
FITS_INFO, Filename, [ /SILENT , TEXTOUT = , N_ext = ]
INPUT:
Filename - Scalar string giving the name of the FITS file(s)
Can include wildcards such as '*.fits'. In IDL V5.5 one can
use the regular expressions allowed by the FILE_SEARCH()
function. One can also search gzip compressed
FITS files.
OPTIONAL INPUT KEYWORDS:
/SILENT - If set, then the display of the file description on the
terminal will be suppressed
TEXTOUT - specifies output device.
textout=1 TERMINAL using /more option
textout=2 TERMINAL without /more option
textout=3 <program>.prt
textout=4 laser.tmp
textout=5 user must open file, see TEXTOPEN
textout=7 append to existing <program.prt> file
textout = filename (default extension of .prt)
If TEXTOUT is not supplied, then !TEXTOUT is used
OPTIONAL OUTPUT KEYWORD:
N_ext - Returns an integer scalar giving the number of extensions in
the FITS file
COMMON BLOCKS
DESCRIPTOR = File descriptor string of the form N_hdrrec Naxis IDL_type
Naxis1 Naxis2 ... Naxisn [N_hdrrec table_type Naxis
IDL_type Naxis1 ... Naxisn] (repeated for each extension)
For example, the following descriptor
167 2 4 3839 4 55 BINTABLE 2 1 89 5
indicates that the primary header containing 167 lines, and
the primary (2D) floating point image (IDL type 4)
is of size 3839 x 4. The first extension header contains
55 lines, and the byte (IDL type 1) table array is of size
89 x 5.
The DESCRIPTOR is *only* computed if /SILENT is set.
EXAMPLE:
Display info about all FITS files of the form '*.fit' in the current
directory
IDL> fits_info, '*.fit'
Any time a *.fit file is found which is *not* in FITS format, an error
message is displayed at the terminal and the program continues
PROCEDURES USED:
GETTOK(), MRD_SKIP, STRN(), SXPAR(), TEXTOPEN, TEXTCLOSE
SYSTEM VARIABLES:
The non-standard system variables !TEXTOUT and !TEXTUNIT will be
created by FITS_INFO if they are not previously defined.
DEFSYSV,'!TEXTOUT',1
DEFSYSV,'!TEXTUNIT',0
See TEXTOPEN.PRO for more info
MODIFICATION HISTORY:
Written, K. Venkatakrishna, Hughes STX, May 1992
Added N_ext keyword, and table_name info, G. Reichert
Work on *very* large FITS files October 92
More checks to recognize corrupted FITS files February, 1993
Proper check for END keyword December 1994
Correctly size variable length binary tables WBL December 1994
EXTNAME keyword can be anywhere in extension header WBL January 1998
Correctly skip past extensions with no data WBL April 1998
Converted to IDL V5.0, W. Landsman, April 1998
No need for !TEXTOUT if /SILENT D.Finkbeiner February 2002
Define !TEXTOUT if needed. R. Sterner, 2002 Aug 27
Work on gzip compressed files for V5.3 or later W. Landsman 2003 Jan
Improve speed by only reading first 36 lines of header
Count headers with more than 32767 lines W. Landsman Feb. 2003
Assume since V5.3 (OPENR,/COMPRESS) W. Landsman Feb 2004
EXTNAME keyword can be anywhere in extension header again
WBL/S. Bansal Dec 2004
Read more than 200 extensions WBL March 2005
(See goddard/pro/fits/fits_info.pro)
NAME:
FITS_OPEN
*PURPOSE:
Opens a FITS (Flexible Image Transport System) data file.
*CATEGORY:
INPUT/OUTPUT
*CALLING SEQUENCE:
FITS_OPEN, filename, fcb
*INPUTS:
filename : name of the FITS file to open, scalar string
FITS_OPEN can also open gzip compressed (.gz) file *for
reading only*, although there is a performance penalty
*OUTPUTS:
fcb : (FITS Control Block) a IDL structure containing information
concerning the file. It is an input to FITS_READ, FITS_WRITE
and FITS_CLOSE
INPUT KEYWORD PARAMETERS:
/APPEND: Set to append to an existing file.
/HPRINT - print headers with routine HPRINT as they are read.
(useful for debugging a strange file)
/NO_ABORT: Set to return to calling program instead of a RETALL
when an I/O error is encountered. If set, the routine will
return a non-null string (containing the error message) in the
keyword MESSAGE. (For backward compatibility, the obsolete
system variable !ERR is also set to -1 in case of an error.)
If /NO_ABORT not set, then FITS_OPEN will print the message and
issue a RETALL
/UPDATE Set this keyword to open an existing file for update
/WRITE: Set this keyword to open a new file for writing.
OUTPUT KEYWORD PARAMETERS:
MESSAGE = value: Output error message. If the FITS file was opened
successfully, then message = ''.
*NOTES:
The output FCB should be passed to the other FITS routines (FITS_OPEN,
FITS_READ, FITS_HELP, and FITS_WRITE). It has the following structure
when FITS_OPEN is called without /WRITE or /APPEND keywords set.
FCB.FILENAME - name of the input file
.UNIT - unit number the file is opened to
.NEXTEND - number of extensions in the file.
.XTENSION - string array giving the extension type for each
extension.
.EXTNAME - string array giving the extension name for each
extension. (null string if not defined the extension)
.EXTVER - vector of extension version numbers (0 if not
defined)
.EXTLEVEL - vector of extension levels (0 if not defined)
.GCOUNT - vector with the number of groups in each extension.
.PCOUNT - vector with parameter count for each group
.BITPIX - BITPIX for each extension with values
8 byte data
16 short word integers
32 long word integers
-32 IEEE floating point
-64 IEEE double precision floating point
.NAXIS - number of axes for each extension. (0 for null data
units)
.AXIS - 2-D array where axis(*,N) gives the size of each axes
for extension N
.START_HEADER - vector giving the starting byte in the file
where each extension header begins
.START_DATA - vector giving the starting byte in the file
where the data for each extension begins
.HMAIN - keyword parameters (less standard required FITS
keywords) for the primary data unit.
.OPEN_FOR_WRITE - flag (0= open for read, 1=open for write,
2=open for update)
.LAST_EXTENSION - last extension number read.
.RANDOM_GROUPS - 1 if the PDU is random groups format,
0 otherwise
.NBYTES - total number of (uncompressed) bytes in the FITS file
When FITS open is called with the /WRITE or /APPEND option, FCB
contains:
FCB.FILENAME - name of the input file
.UNIT - unit number the file is opened to
.NEXTEND - number of extensions in the file.
.OPEN_FOR_WRITE - flag (1=open for write, 2=open for append
3=open for update)
*EXAMPLES:
Open a FITS file for reading:
FITS_OPEN,'myfile.fits',fcb
Open a new FITS file for output:
FITS_OPEN,'newfile.fits',fcb,/write
PROCEDURES USED:
HPRINT, SXDELPAR, SXPAR()
*HISTORY:
Written by: D. Lindler August, 1995
July, 1996 NICMOS Modified to allow open for overwrite
to allow primary header to be modified
DJL Oct. 15, 1996 corrected to properly extend AXIS when more
than 100 extensions present
Converted to IDL V5.0 W. Landsman September 1997
Use Message = '' rather than !ERR =1 as preferred signal of normal
operation W. Landsman November 2000
Lindler, Dec, 2001, Modified to use 64 bit words for storing byte
positions within the file to allow support for very large
files
Work with gzip compressed files W. Landsman January 2003
Fix gzip compress for V5.4 and earlier W.Landsman/M.Fitzgerald Dec 2003
Assume since V5.3 (STRSPLIT, OPENR,/COMPRESS) W. Landsman Feb 2004
Treat FTZ extension as gzip compressed W. Landsman Sep 2004
(See goddard/pro/fits/fits_open.pro)
NAME:
FITS_READ
*PURPOSE:
To read a FITS file.
*CATEGORY:
INPUT/OUTPUT
*CALLING SEQUENCE:
FITS_READ, filename_or_fcb, data [,header, group_par]
*INPUTS:
FILENAME_OR_FCB - this parameter can be the FITS Control Block (FCB)
returned by FITS_OPEN or the file name of the FITS file. If
a file name is supplied, FITS_READ will open the file with
FITS_OPEN and close the file with FITS_CLOSE before exiting.
When multiple extensions are to be read from the file, it is
more efficient for the user to call FITS_OPEN and leave the
file open until all extensions are read.
*OUTPUTS:
DATA - data array. If /NOSCALE is specified, BSCALE and BZERO
(if present in the header) will not be used to scale the data.
If Keywords FIRST and LAST are used to read a portion of the
data or the heap portion of an extension, no scaling is done
and data is returned as a 1-D vector. The user can use the IDL
function REFORM to convert the data to the correct dimensions
if desired. If /DATA_ONLY is specified, no scaling is done.
HEADER - FITS Header. If an extension is read, and the /NO_PDU keyword
parameter is not supplied, the primary data unit header
and the extension header will be combined. The header will have
the form:
<required keywords for the extension: XTENSION, BITPIX,
NAXIS, ...>
BEGIN MAIN HEADER --------------------------------
<PDU header keyword and history less required keywords:
SIMPLE, BITPIX, NAXIS, ...>
BEGIN EXTENSION HEADER ---------------------------
<extension header less required keywords that were
placed at the beginning of the header.
END
The structure of the header is such that if a keyword is
duplicated in both the PDU and extension headers, routine
SXPAR will print a warning and return the extension value of
the keyword. SXADDPAR and SXADDHIST will add new keywords and
history to the extension portion of the header unless the
parameter /PDU is supplied in the calling sequence.
GROUP_PAR - Group parameter block for FITS random groups format files
or the heap area for variable length binary tables.
Any scale factors in the header (PSCALn and PZEROn) are not
applied to the group parameters.
*INPUT KEYWORD PARAMETERS:
/NOSCALE: Set to return the FITS data without applying the scale
factors BZERO and BSCALE.
/HEADER_ONLY: set to read the header only.
/DATA_ONLY: set to read the data only. If set, if any scale factors
are present (BSCALE or BZERO), they will not be applied.
/NO_PDU: Set to not add the primary data unit header keywords to the
output header.
/NO_ABORT: Set to return to calling program instead of a RETALL
when an I/O error is encountered. If set, the routine will
return a non-null string (containing the error message) in the
keyword MESSAGE. (For backward compatibility, the obsolete
system variable !ERR is also set to -1 in case of an error.)
If /NO_ABORT not set, then FITS_READ will print the message and
issue a RETALL
/NO_UNSIGNED - By default, if the header indicates an unsigned integer
(BITPIX = 16, BZERO=2^15, BSCALE=1) then FITS_READ will output
an IDL unsigned integer data type (UINT). But if /NO_UNSIGNED
is set, or the IDL, then the data is converted to type LONG.
EXTEN_NO - extension number to read. If not set, the next extension
in the file is read. Set to 0 to read the primary data unit.
XTENSION - string name of the xtension to read
EXTNAME - string name of the extname to read
EXTVER - integer version number to read
EXTLEVEL - integer extension level to read
FIRST - set this keyword to only read a portion of the data. It gives
the first word of the data to read
LAST - set this keyword to only read a portion of the data. It gives
the last word number of the data to read
GROUP - group number to read for GCOUNT>1. (Default=0, the first group)
*OUTPUT KEYWORD PARAMETERS:
ENUM - Output extension number that was read.
MESSAGE = value: Output error message
*NOTES:
Determination or which extension to read.
case 1: EXTEN_NO specified. EXTEN_NO will give the number of the
extension to read. The primary data unit is refered
to as extension 0. If EXTEN_NO is specified, XTENSION,
EXTNAME, EXTVER, and EXTLEVEL parameters are ignored.
case 2: if EXTEN_NO is not specified, the first extension
with the specified XTENSION, EXTNAME, EXTVER, and
EXTLEVEL will be read. If any of the 4 parameters
are not specified, they will not be used in the search.
Setting EXTLEVEL=0, EXTVER=0, EXTNAME='', or
XTENSION='' is the same as not supplying them.
case 3: if none of the keyword parameters, EXTEN_NO, XTENSION,
EXTNAME, EXTVER, or EXTLEVEL are supplied. FITS_READ
will read the next extension in the file. If the
primary data unit (PDU), extension 0, is null, the
first call to FITS_READ will read the first extension
of the file.
The only way to read a null PDU is to use EXTEN_NO = 0.
If FIRST and LAST are specified, the data is returned without applying
any scale factors (BSCALE and BZERO) and the data is returned in a
1-D vector. This will allow you to read any portion of a multiple
dimension data set. Once returned, the IDL function REFORM can be
used to place the correct dimensions on the data.
IMPLICIT IMAGES: FITS_READ will construct an implicit image
for cases where NAXIS=0 and the NPIX1, NPIX2, and PIXVALUE
keywords are present. The output image will be:
image = replicate(PIXVALUE,NPIX1,NPIX2)
*EXAMPLES:
Read the primary data unit of a FITS file, if it is null read the
first extension:
FITS_READ, 'myfile.fits', data, header
Read the first two extensions of a FITS file and the extension with
EXTNAME = 'FLUX' and EXTVER = 4
FITS_OPEN, 'myfile.fits', fcb
FITS_READ, fcb,data1, header2, exten_no = 1
FITS_READ, fcb,data1, header2, exten_no = 2
FITS_READ, fcb,data3, header3, extname='flux', extver=4
FITS_CLOSE, fcb
Read the sixth image in a data cube for the fourth extension.
FITS_OPEN, 'myfile.fits', fcb
image_number = 6
ns = fcb.axis(0,4)
nl = fcb.axis(1,4)
i1 = (ns*nl)*(image_number-1)
i2 = i2 + ns*nl-1
FITS_READ,fcb,image,header,first=i1,last=i2
image = reform(image,ns,nl,/overwrite)
FITS_CLOSE
*PROCEDURES USED:
FITS_CLOSE, FITS_OPEN, IEEE_TO_HOST, IS_IEEE_BIG()
SXADDPAR, SXDELPAR, SXPAR()
*HISTORY:
Written by: D. Lindler, August 1995
Converted to IDL V5.0 W. Landsman September 1997
Avoid use of !ERR W. Landsman August 1999
Read unsigned datatypes, added /no_unsigned W. Landsman December 1999
Don't call FITS_CLOSE unless fcb is defined W. Landsman January 2000
Set BZERO = 0 for unsigned integer data W. Landsman January 2000
Only call IEEE_TO_HOST if needed W. Landsman February 2000
Ensure EXTEND keyword in primary header W. Landsman April 2001
Don't erase ERROR message when closing file W. Landsman April 2002
Assume at least V5.1 remove NANValue keyword W. Landsman November 2002
Work with compress files (read file size from fcb),
requires updated (Jan 2003) version of FITS_OPEN W. Landsman Jan 2003
(See goddard/pro/fits/fits_read.pro)
NAME:
FITS_TEST_CHECKSUM()
PURPOSE:
Verify the values of the CHECKSUM and DATASUM keywords in a FITS header
EXPLANATION:
Follows the 23 May 2002 version of the FITS checksum proposal at
http://heasarc.gsfc.nasa.gov/docs/heasarc/fits/checksum.html
CALLING SEQUENCE:
result = FITS_TEST_CHECKSUM(HDR, [ DATA, ERRMSG=, /FROM_IEEE ])
INPUTS:
HDR - FITS header (vector string)
OPTIONAL DATA:
DATA - data array associated with the FITS header. If not supplied, or
set to a scalar, then there is assumed to be no data array
associated with the FITS header.
RESULT:
An integer -1, 0 or 1 indicating the following conditions:
1 - CHECKSUM (and DATASUM) keywords are present with correct values
0 - CHECKSUM keyword is not present
-1 - CHECKSUM or DATASUM keyword does not have the correct value
indicating possible data corruption.
OPTIONAL INPUT KEYWORD:
/FROM_IEEE - If this keyword is set, then the input is assumed to be in
big endian format (e.g. an untranslated FITS array). This
keyword only has an effect on little endian machines (e.g.
a Linux box).
OPTIONAL OUTPUT KEYWORD:
ERRMSG - will contain a scalar string giving the error condition. If
RESULT = 1 then ERRMSG will be an empty string. If this
output keyword is not supplied, then the error message will be
printed at the terminal.
NOTES:
The header and data must be *exactly* as originally written in the FITS
file. By default, some FITS readers may alter keyword values (e.g.
BSCALE) or append information (e.g. HISTORY or an inherited primary
header) and this will alter the checksum value.
PROCEDURES USED:
CHECKSUM32, FITS_ASCII_ENCODE(), SXPAR()
EXAMPLE:
Verify the CHECKSUM keywords in the primary header/data unit of a FITS
file 'test.fits'
FITS_READ,'test.fits',data,hdr,/no_PDU,/NoSCALE
print,FITS_TEST_CHECKSUM(hdr,data)
Note the use of the /No_PDU and /NoSCALE keywords to avoid any alteration
of the FITS header
REVISION HISTORY:
W. Landsman SSAI December 2002
Return quietly if CHECKSUM keywords not found W. Landsman May 2003
Add /NOSAVE to CHECKSUM32 calls when possible W. Landsman Sep 2004
(See goddard/pro/fits/fits_test_checksum.pro)
NAME:
FITS_WRITE
*PURPOSE:
To write a FITS primary data unit or extension.
*CATEGORY:
INPUT/OUTPUT
*CALLING SEQUENCE:
FITS_WRITE, filename_or_fcb, data, [header_in]
*INPUTS:
FILENAME_OR_FCB: name of the output data file or the FITS control
block returned by FITS_OPEN (called with the /WRITE or
/APPEND) parameters.
*OPTIONAL INPUTS:
DATA: data array to write. If not supplied or set to a scalar, a
null image is written.
HEADER_IN: FITS header keyword. If not supplied, a minimal basic
header will be created. Required FITS keywords, SIMPLE,
BITPIX, XTENSION, NAXIS, ... are added by FITS_WRITE and
do not need to be supplied with the header. If supplied,
their values will be updated as necessary to reflect DATA.
*INPUT KEYWORD PARAMETERS:
XTENSION: type of extension to write (Default="IMAGE"). If not
supplied, it will be taken from HEADER_IN. If not in either
place, the default is "IMAGE". This parameter is ignored
when writing the primary data unit. Note that binary and
and ASCII table extensions already have a properly formatted
header (e.g. with TTYPE* keywords) and byte array data.
EXTNAME: EXTNAME for the extension. If not supplied, it will be taken
from HEADER_IN. If not supplied and not in HEADER_IN, no
EXTNAME will be written into the output extension.
EXTVER: EXTVER for the extension. If not supplied, it will be taken
from HEADER_IN. If not supplied and not in HEADER_IN, no
EXTVER will be written into the output extension.
EXTLEVEL: EXTLEVEL for the extension. If not supplied, it will be taken
from HEADER_IN. If not supplied and not in HEADER_IN, no
EXTLEVEL will be written into the output extension.
/NO_ABORT: Set to return to calling program instead of a RETALL
when an I/O error is encountered. If set, the routine will
return a non-null string (containing the error message) in the
keyword MESSAGE. If /NO_ABORT not set, then FITS_WRITE will
print the message and issue a RETALL
/NO_DATA: Set if you only want FITS_WRITE to write a header. The
header supplied will be written without modification and
the user is expected to write the data using WRITEU to unit
FCB.UNIT. When FITS_WRITE is called with /NO_DATA, the user is
responsible for the validity of the header, and must write
the correct amount and format of the data. When FITS_WRITE
is used in this fashion, it will pad the data from a previously
written extension to 2880 blocks before writting the header.
*OUTPUT KEYWORD PARAMETERS:
MESSAGE: value of the error message for use with /NO_ABORT
HEADER: actual output header written to the FITS file.
*NOTES:
If the first call to FITS_WRITE is an extension, FITS_WRITE will
automatically write a null image as the primary data unit.
Keywords and history in the input header will be properly separated
into the primary data unit and extension portions when constructing
the output header (See FITS_READ for information on the internal
Header format which separates the extension and PDU header portions).
*EXAMPLES:
Write an IDL variable to a FITS file with the minimal required header.
FITS_WRITE,'newfile.fits',ARRAY
Write the same array as an image extension, with a null Primary data
unit.
FITS_WRITE,'newfile.fits',ARRAY,xtension='IMAGE'
Write 4 additional image extensions to the same file.
FITS_OPEN,'newfile.fits',fcb
FITS_WRITE,fcb,data1,extname='FLUX',extver=1
FITS_WRITE,fcb,err1,extname'ERR',extver=1
FITS_WRITE,fcb,data2,extname='FLUX',extver=2
FITS_WRITE,fcb,err2,extname='ERR',extver=2
FITS_CLOSE,FCB
*PROCEDURES USED:
FITS_OPEN, SXADDPAR, SXDELPAR, SXPAR()
*HISTORY:
Written by: D. Lindler August, 1995
Work for variable length extensions W. Landsman August 1997
Converted to IDL V5.0 W. Landsman September 1997
PCOUNT and GCOUNT added for IMAGE extensions J. Graham October 1999
Write unsigned data types W. Landsman December 1999
Pad data area with zeros not blanks W. McCann/W. Landsman October 2000
Return Message='' to signal normal operation W. Landsman Nov. 2000
Ensure that required extension table keywords are in proper order
W.V. Dixon/W. Landsman March 2001
Assume since V5.1, remove NaNValue keyword W. Landsman Nov. 2002
Removed obsolete !ERR system variable W. Landsman Feb 2004
Check that byte array supplied with table extension W. Landsman Mar 2004
(See goddard/pro/fits/fits_write.pro)
NAME:
FLEGENDRE
PURPOSE:
Compute the first M terms in a Legendre polynomial expansion.
EXPLANATION:
Meant to be used as a supplied function to SVDFIT.
This procedure became partially obsolete in IDL V5.0 with the
introduction of the /LEGENDRE keyword to SVDFIT and the associated
SVDLEG function. However, note that, unlike SVDLEG, FLEGENDRE works
on vector values of X.
CALLING SEQUENCE:
result = FLEGENDRE( X, M)
INPUTS:
X - the value of the independent variable, scalar or vector
M - number of term of the Legendre expansion to compute, integer scalar
OUTPUTS:
result - (N,M) array, where N is the number of elements in X and M
is the order. Contains the value of each Legendre term for
each value of X
EXAMPLE:
(1) If x = 2.88 and M = 3 then
IDL> print, flegendre(x,3) ==> [1.00, 2.88, 11.9416]
This result can be checked by explicitly computing the first 3 Legendre
terms, 1.0, x, 0.5*( 3*x^2 -1)
(2) Find the coefficients to an M term Legendre polynomial that gives
the best least-squares fit to a dataset (x,y)
IDL> coeff = SVDFIT( x,y,M,func='flegendre')
The coefficients can then be supplied to the function POLYLEG to
compute the best YFIT values for any X.
METHOD:
The recurrence relation for the Legendre polynomials is used to compute
each term. Compare with the function FLEG in "Numerical Recipes"
by Press et al. (1992), p. 674
REVISION HISTORY:
Written Wayne Landsman Hughes STX April 1995
Converted to IDL V5.0 W. Landsman September 1997
(See goddard/pro/math/flegendre.pro)
NAME:
FLUX2MAG
PURPOSE:
Convert from flux (ergs/s/cm^2/A) to magnitudes.
EXPLANATION:
Use MAG2FLUX() for the opposite direction.
CALLING SEQUENCE:
mag = flux2mag( flux, [ zero_pt, ABwave= ] )
INPUTS:
flux - scalar or vector flux vector, in erg cm-2 s-1 A-1
OPTIONAL INPUT:
zero_pt - scalar giving the zero point level of the magnitude.
If not supplied then zero_pt = 21.1 (Code et al 1976)
Ignored if the ABwave keyword is supplied
OPTIONAL KEYWORD INPUT:
ABwave - wavelength scalar or vector in Angstroms. If supplied, then
FLUX2MAG() returns Oke AB magnitudes (Oke & Gunn 1983, ApJ, 266,
713).
OUTPUT:
mag - magnitude vector. If the ABwave keyword is set then mag
is given by the expression
ABMAG = -2.5*alog10(f) - 5*alog10(ABwave) - 2.406
Otherwise, mag is given by the expression
mag = -2.5*alog10(flux) - zero_pt
EXAMPLE:
Suppose one is given wavelength and flux vectors, w (in Angstroms) and
f (in erg cm-2 s-1 A-1). Plot the spectrum in AB magnitudes
IDL> plot, w, flux2mag(f,ABwave = w), /nozero
REVISION HISTORY:
Written J. Hill STX Co. 1988
Converted to IDL V5.0 W. Landsman September 1997
Added ABwave keyword W. Landsman September 1998
(See goddard/pro/astro/flux2mag.pro)
NAME:
FM_UNRED
PURPOSE:
Deredden a flux vector using the Fitzpatrick (1999) parameterization
EXPLANATION:
The R-dependent Galactic extinction curve is that of Fitzpatrick & Massa
(Fitzpatrick, 1999, PASP, 111, 63; astro-ph/9809387 ).
Parameterization is valid from the IR to the far-UV (3.5 microns to 0.1
microns). UV extinction curve is extrapolated down to 912 Angstroms.
CALLING SEQUENCE:
FM_UNRED, wave, flux, ebv, [ funred, R_V = , /LMC2, /AVGLMC, ExtCurve=
gamma =, x0=, c1=, c2=, c3=, c4= ]
INPUT:
WAVE - wavelength vector (Angstroms)
FLUX - calibrated flux vector, same number of elements as WAVE
If only 3 parameters are supplied, then this vector will
updated on output to contain the dereddened flux.
EBV - color excess E(B-V), scalar. If a negative EBV is supplied,
then fluxes will be reddened rather than dereddened.
OUTPUT:
FUNRED - unreddened flux vector, same units and number of elements
as FLUX
OPTIONAL INPUT KEYWORDS
R_V - scalar specifying the ratio of total to selective extinction
R(V) = A(V) / E(B - V). If not specified, then R = 3.1
Extreme values of R(V) range from 2.3 to 5.3
/AVGLMC - if set, then the default fit parameters c1,c2,c3,c4,gamma,x0
are set to the average values determined for reddening in the
general Large Magellanic Cloud (LMC) field by Misselt et al.
(1999, ApJ, 515, 128)
/LMC2 - if set, then the fit parameters are set to the values determined
for the LMC2 field (including 30 Dor) by Misselt et al.
Note that neither /AVGLMC or /LMC2 will alter the default value
of R_V which is poorly known for the LMC.
The following five input keyword parameters allow the user to customize
the adopted extinction curve. For example, see Clayton et al. (2003,
ApJ, 588, 871) for examples of these parameters in different interstellar
environments.
x0 - Centroid of 2200 A bump in microns (default = 4.596)
gamma - Width of 2200 A bump in microns (default =0.99)
c3 - Strength of the 2200 A bump (default = 3.23)
c4 - FUV curvature (default = 0.41)
c2 - Slope of the linear UV extinction component
(default = -0.824 + 4.717/R)
c1 - Intercept of the linear UV extinction component
(default = 2.030 - 3.007*c2
OPTIONAL OUTPUT KEYWORD:
ExtCurve - Returns the E(wave-V)/E(B-V) extinction curve, interpolated
onto the input wavelength vector
EXAMPLE:
Determine how a flat spectrum (in wavelength) between 1200 A and 3200 A
is altered by a reddening of E(B-V) = 0.1. Assume an "average"
reddening for the diffuse interstellar medium (R(V) = 3.1)
IDL> w = 1200 + findgen(40)*50 ;Create a wavelength vector
IDL> f = w*0 + 1 ;Create a "flat" flux vector
IDL> fm_unred, w, f, -0.1, fnew ;Redden (negative E(B-V)) flux vector
IDL> plot,w,fnew
NOTES:
(1) The following comparisons between the FM curve and that of Cardelli,
Clayton, & Mathis (1989), (see ccm_unred.pro):
(a) - In the UV, the FM and CCM curves are similar for R < 4.0, but
diverge for larger R
(b) - In the optical region, the FM more closely matches the
monochromatic extinction, especially near the R band.
(2) Many sightlines with peculiar ultraviolet interstellar extinction
can be represented with the FM curve, if the proper value of
R(V) is supplied.
(3) Use the 4 parameter calling sequence if you wish to save the
original flux vector.
PROCEDURE CALLS:
CSPLINE(), POLY()
REVISION HISTORY:
Written W. Landsman Raytheon STX October, 1998
Based on FMRCurve by E. Fitzpatrick (Villanova)
Added /LMC2 and /AVGLMC keywords, W. Landsman August 2000
Added ExtCurve keyword, J. Wm. Parker August 2000
(See goddard/pro/astro/fm_unred.pro)
NAME:
FORPRINT
PURPOSE:
Print a set of vectors by looping over each index value.
EXPLANATION:
If W and F are equal length vectors, then the statement
IDL> forprint, w, f
is equivalent to
IDL> for i = 0L, N_elements(w)-1 do print,w[i],f[i]
CALLING SEQUENCE:
forprint, v1,[ v2, v3, v4,....v18, FORMAT = , TEXTOUT = ,STARTLINE =,
NUMLINE =, /SILENT, COMMENT= ]
INPUTS:
V1,V2,...V18 - Arbitary IDL vectors. If the vectors are not of
equal length then the number of rows printed will be equal
to the length of the smallest vector. Up to 18 vectors
can be supplied.
OPTIONAL KEYWORD INPUTS:
TEXTOUT - Controls print output device, defaults to !TEXTOUT
textout=1 TERMINAL using /more option if available
textout=2 TERMINAL without /more option
textout=3 file 'forprint.prt'
textout=4 file 'laser.tmp'
textout=5 user must open file
textout = filename (default extension of .prt)
textout=7 Append to <program>.prt file if it exists
COMMENT - String to write as the first line of output file if
TEXTOUT > 2. By default, FORPRINT will write a time stamp
on the first line. Use /NOCOMMENT if you don't want FORPRINT
to write anything in the output file.
FORMAT - Scalar format string as in the PRINT procedure. The use
of outer parenthesis is optional. Ex. - format="(F10.3,I7)"
This program will automatically remove a leading "$" from
incoming format statements. Ex. - "$(I4)" would become "(I4)".
If omitted, then IDL default formats are used.
/NOCOMMENT - Set this keyword if you don't want any comment line
line written as the first line in a harcopy output file.
/SILENT - Normally, with a hardcopy output (TEXTOUT > 2), FORPRINT will
print an informational message. If the SILENT keyword
is set and non-zero, then this message is suppressed.
STARTLINE - Integer scalar specifying the first line in the arrays
to print. Default is STARTLINE = 1, i.e. start at the
beginning of the arrays.
OUTPUTS:
None
SYSTEM VARIABLES:
If keyword TEXTOUT is not used, the default is the nonstandard
keyword !TEXTOUT. If you want to use FORPRINT to write more than
once to the same file, or use a different file name then set
TEXTOUT=5, and open and close then file yourself (see documentation
of TEXTOPEN for more info).
One way to add the non-standard system variables !TEXTOUT and !TEXTUNIT
is to use the procedure ASTROLIB
EXAMPLE:
Suppose W,F, and E are the wavelength, flux, and epsilon vectors for
a spectrum. Print these values to a file 'output.dat' in a nice
format.
IDL> fmt = '(F10.3,1PE12.2,I7)'
IDL> forprint, F = fmt, w, f, e, TEXT = 'output.dat'
PROCEDURES CALLED:
TEXTOPEN, TEXTCLOSE
REVISION HISTORY:
Written W. Landsman April, 1989
Keywords textout and format added, J. Isensee, July, 1990
Made use of parenthesis in FORMAT optional W. Landsman May 1992
Added STARTLINE keyword W. Landsman November 1992
Set up so can handle 18 input vectors. J. Isensee, HSTX Corp. July 1993
Handle string value of TEXTOUT W. Landsman, HSTX September 1993
Added NUMLINE keyword W. Landsman, HSTX February 1996
Added SILENT keyword W. Landsman, RSTX, April 1998
Converted to IDL V5.0 W. Landsman, RSTX, April, 1998
Much faster printing to a file W. Landsman, RITSS, August, 2001
Use SIZE(/TNAME) instead of DATATYPE() W. Landsman SSAI October 2001
Fix skipping of first line bug introduced Aug 2001 W. Landsman Nov2001
Added /NOCOMMENT keyword, the SILENT keyword now controls only
the display of informational messages. W. Landsman June 2002
Skip PRINTF if IDL in demo mode W. Landsman October 2004
(See goddard/pro/misc/forprint.pro)
NAME:
FREBIN
PURPOSE:
Shrink or expand the size of an array an arbitary amount using interpolation
EXPLANATION:
FREBIN is an alternative to CONGRID or REBIN. Like CONGRID it
allows expansion or contraction by an arbitary amount. ( REBIN requires
integral factors of the original image size.) Like REBIN it conserves
flux by ensuring that each input pixel is equally represented in the output
array.
CALLING SEQUENCE:
result = FREBIN( image, nsout, nlout, [ /TOTAL] )
INPUTS:
image - input image, 1-d or 2-d numeric array
nsout - number of samples in the output image, numeric scalar
OPTIONAL INPUT:
nlout - number of lines in the output image, numeric scalar
If not supplied, then set equal to 1
OPTIONAL KEYWORD INPUTS:
/total - if set, the output pixels will be the sum of pixels within
the appropriate box of the input image. Otherwise they will
be the average. Use of the /TOTAL keyword conserves surface flux.
OUTPUTS:
The resized image is returned as the function result. If the input
image is of type DOUBLE or FLOAT then the resized image is of the same
type. If the input image is BYTE, INTEGER or LONG then the output
image is usually of type FLOAT. The one exception is expansion by
integral amount (pixel duplication), when the output image is the same
type as the input image.
EXAMPLE:
Suppose one has an 800 x 800 image array, im, that must be expanded to
a size 850 x 900 while conserving surface flux:
IDL> im1 = frebin(im,850,900,/total)
im1 will be a 850 x 900 array, and total(im1) = total(im)
NOTES:
If the input image sizes are a multiple of the output image sizes
then FREBIN is equivalent to the IDL REBIN function for compression,
and simple pixel duplication on expansion.
If the number of output pixels are not integers, the output image
size will be truncated to an integer. The platescale, however, will
reflect the non-integer number of pixels. For example, if you want to
bin a 100 x 100 integer image such that each output pixel is 3.1
input pixels in each direction use:
n = 100/3.1 ; 32.2581
image_out = frebin(image,n,n)
The output image will be 32 x 32 and a small portion at the trailing
edges of the input image will be ignored.
PROCEDURE CALLS:
None.
HISTORY:
Adapted from May 1998 STIS version, written D. Lindler, ACC
Added /NOZERO, use INTERPOLATE instead of CONGRID, June 98 W. Landsman
Fixed for nsout non-integral but a multiple of image size Aug 98 D.Lindler
DJL, Oct 20, 1998, Modified to work for floating point image sizes when
expanding the image.
Improve speed by addressing arrays in memory order W.Landsman Dec/Jan 2001
(See goddard/pro/image/frebin.pro)
NAME:
FSTRING
PURPOSE:
Wrapper around STRING function to fix pre-V5.4 1024 formatting size limit
EXPLANATION:
Prior to V5.4, the intrinsic STRING() function had a size limit of 1024
elements. FSTRING() works around this by breaking a larger array into 1024 element
element chunks.
CALLING SEQUENCE:
new = fstring(old, [ format, FORMAT = )
INPUTS:
OLD = string or number to format, scalar, vector or array
OPTIONAL STRING:
FORMAT = scalar string giving format to pass to the STRING() function
See restrictions on possible formats below.
OPTIONAL KEYWORD INPUT:
FORMAT = Format string can alternatively be called as keyword
OUTPUT:
FSTRING will return a string with the same dimensions
RESTRICTIONS:
Because FSTRING breaks up the formatting into 1024 element chunks, problems
can arise if the number of formatting elements does not evenly divide
into 1024. For example, if format = '(i6,f6.2,e12.6)', (i.e. three
formatting elements) then both the 1023rd and 1024th element will be
formatted as I6.
EXAMPLE:
Create a string array of 10000 uniform random numbers formatted as F6.2
IDL> a = fstring( randomu(seed,10000), '(f6.2)')
REVISION HISTORY:
Written W. Landsman (based on program by D. Zarro) February 2000
Check if VERSION is V5.4 or later W. Landsman January 2002
(See goddard/pro/misc/fstring.pro)
NAME:
FTAB_DELROW
PURPOSE:
Delete rows of data from a FITS ASCII or binary table extension
CALLING SEQUENCE:
ftab_delrow, filename, rows, EXTEN_NO =, NEWFILE = ]
INPUTS-OUPUTS
filename - scalar string giving name of the FITS file containing an
ASCII or binary table extension.
rows - scalar or vector, specifying the row numbers to delete
First row has index 0. If a vector, it will be sorted and
duplicates will be removed
OPTIONAL KEYWORD INPUTS:
EXTEN_NO - scalar integer specifying which extension number to process
Default is to process the first extension
NEWFILE - scalar string specifying the name of the new output FITS file
FTAB_DELROW will prompt for this parameter if not supplied
EXAMPLE:
Compress the first extension of a FITS file 'test.fits' to include
only non-negative values in the 'FLUX' column
ftab_ext,'test.fits','flux',flux ;Obtain original flux vector
bad = where(flux lt 0) ;Find negative fluxes
ftab_delrow,'test.fits',bad,new='test1.fits' ;Delete specified rows
RESTRICTIONS:
Does not work for variable length binary tables
PROCEDURES USED:
FITS_CLOSE, FITS_OPEN, FITS_READ, FITS_WRITE, FTDELROW, TBDELROW
REVISION HISTORY:
Written W. Landsman STX Co. August, 1997
Converted to IDL V5.0 W. Landsman September 1997
Use COPY_LUN if V5.6 or later W. Landsman February 2003
(See goddard/pro/fits_table/ftab_delrow.pro)
NAME:
FTAB_EXT
PURPOSE:
Routine to extract columns from a FITS (binary or ASCII) table.
CALLING SEQUENCE:
FTAB_EXT, name_or_fcb, columns, v1, [v2,..,v9, ROWS=, EXTEN_NO= ]
INPUTS:
name_or_fcb - either a scalar string giving the name of a FITS file
containing a (binary or ASCII) table, or an IDL structure
containing as file control block (FCB) returned by FITS_OPEN
If FTAB_EXT is to be called repeatedly on the same file, then
it is quicker to first open the file with FITS_OPEN, and then
pass the FCB structure to FTAB_EXT
columns - table columns to extract. Can be either
(1) String with names separated by commas
(2) Scalar or vector of column numbers
OUTPUTS:
v1,...,v9 - values for the columns. Up to 9 columns can be extracted
OPTIONAL INPUT KEYWORDS:
ROWS - scalar or vector giving row number(s) to extract
Row numbers start at 0. If not supplied or set to
-1 then values for all rows are returned
EXTEN_NO - Extension number to process. If not set, then data is
extracted from the first extension in the file (EXTEN_NO=1)
EXAMPLES:
Read wavelength and flux vectors from the first extension of a
FITS file, 'spec.fit'. Using FTAB_HELP,'spec.fit' we find that this
information is in columns named 'WAVELENGTH' and 'FLUX' (in columns 1
and 2). To read the data
IDL> ftab_ext,'spec.fit','wavelength,flux',w,f
or
IDL> ftab_ext,'spec.fit',[1,2],w,f
PROCEDURES CALLED:
FITS_READ, FITS_CLOSE, FTINFO, FTGET(), TBINFO, TBGET()
MINIMUM IDL VERSION:
V5.3 (uses STRSPLIT)
HISTORY:
version 1 W. Landsman August 1997
Converted to IDL V5.0 W. Landsman September 1997
Improve speed processing binary tables W. Landsman March 2000
Use new FTINFO calling sequence W. Landsman May 2000
Don't call fits_close if fcb supplied W. Landsman May 2001
Use STRSPLIT to parse column string W. Landsman July 2002
Cleanup pointers in TBINFO structure W. Landsman November 2003
(See goddard/pro/fits_table/ftab_ext.pro)
NAME:
FTAB_HELP
PURPOSE:
Describe the columns of a FITS binary or ASCII table extension.
CALLING SEQUENCE:
FTAB_HELP, filename, [ EXTEN_No = , TEXTOUT= ]
or
FTAB_HELP, fcb, [EXTEN_No=, TEXTOUT= ]
INPUTS:
filename - scalar string giving name of the FITS file.
fcb - FITS control block returned by a previous call to FITS_OPEN
OPTIONAL KEYWORD INPUTS:
EXTEN_NO - integer scalar specifying which FITS extension to read.
Default is to display the first FITS extension.
TEXTOUT - scalar number (0-7) or string (file name) determining
output device (see TEXTOPEN). Default is TEXTOUT=1, output
to the user's terminal
EXAMPLE:
Describe the columns in the second extension of a FITS file spec.fits
and write the results to a file 'spec2.lis'
IDL> ftab_help,'spec.fits',exten=2,t='spec2.lis'
SYSTEM VARIABLES:
Uses the non-standard system variables !TEXTOUT and !TEXTUNIT
which must be defined (e.g. with ASTROLIB) before compilation
PROCEDURES USED:
FITS_READ, FITS_CLOSE, FITS_OPEN, FTHELP, TBHELP, TEXTOPEN, TEXTCLOSE
HISTORY:
version 1 W. Landsman August 1997
Converted to IDL V5.0 W. Landsman September 1997
Corrected documentation W. Landsman September 1997
Don't call fits_close if fcb supplied W. Landsman May 2001
(See goddard/pro/fits_table/ftab_help.pro)
NAME:
FTAB_PRINT
PURPOSE:
Print the contents of a FITS (binary or ASCII) table extension.
EXPLANATION:
User can specify which rows or columns to print
CALLING SEQUENCE:
FTAB_PRINT, filename, columns, rows, [ TEXTOUT=, FMT=, EXTEN_NO=]
INPUTS:
filename - scalar string giving name of a FITS file containing a
binary or ASCII table
columns - string giving column names, or vector giving
column numbers (beginning with 1). If string
supplied then column names should be separated by comma's.
rows - (optional) vector of row numbers to print (beginning with 0).
If not supplied or set to scalar, -1, then all rows
are printed.
OPTIONAL KEYWORD INPUT:
EXTEN_NO - Extension number to read. If not set, then the first
extension is printed (EXTEN_NO=1)
TEXTOUT - scalar number (0-7) or string (file name) determining
output device (see TEXTOPEN). Default is TEXTOUT=1, output
to the user's terminal
FMT = Format string for print display (binary tables only). If not
supplied, then any formats in the TDISP keyword fields will be
used, otherwise IDL default formats. For ASCII tables, the
format used is always as stored in the FITS table.
EXAMPLE:
Print all rows of the first 5 columns of the first extension of the
file 'wfpc.fits'
IDL> ftab_print,'wfpc.fits',indgen(5)+1
SYSTEM VARIABLES:
Uses the non-standard system variables !TEXTOUT and !TEXTUNIT
which must be defined (e.g. with ASTROLIB) prior to compilation.
PROCEDURES USED:
FITS_OPEN, FITS_READ, FTPRINT, TBPRINT
HISTORY:
version 1 W. Landsman August 1997
Converted to IDL V5.0 W. Landsman September 1997
(See goddard/pro/fits_table/ftab_print.pro)
NAME:
FTADDCOL
PURPOSE:
Routine to add a field to a FITS ASCII table
CALLING SEQUENCE:
ftaddcol, h, tab, name, idltype, [ tform, tunit, tscal, tzero, tnull ]
INPUTS:
h - FITS table header. It will be updated as appropriate
tab - FITS table array. Number of columns will be increased if
neccessary.
name - field name, scalar string
idltype - idl data type (as returned by SIZE function) for field,
For string data (type=7) use minus the string length.
OPTIONAL INPUTS:
tform - format specification 'qww.dd' where q = A, I, E, or D
tunit - string giving physical units for the column.
tscal - scale factor
tzero - zero point for field
tnull - null value for field
Use '' as the value of tform,tunit,tscal,tzero,tnull if you want
the default or no specification of them in the table header.
OUTPUTS:
h,tab - updated to allow new column of data
PROCEDURES USED:
FTINFO, FTSIZE, GETTOK(), SXADDPAR
HISTORY:
version 1 D. Lindler July, 1987
Converted to IDL V5.0 W. Landsman September 1997
Updated call to new FTINFO W. Landsman April 2000
(See goddard/pro/fits_table/ftaddcol.pro)
NAME:
FTCREATE
PURPOSE:
Create a new (blank) FITS ASCII table and header with specified size.
CALLING SEQUENCE:
ftcreate, maxcols, maxrows, h, tab
INPUTS:
maxcols - number of character columns allocated, integer scalar
maxrows - maximum number of rows allocated, integer scalar
OUTPUTS:
h - minimal FITS Table extension header, string array
OPTIONAL OUTPUT:
tab - empty table, byte array
HISTORY:
version 1 D. Lindler July. 87
Converted to IDL V5.0 W. Landsman September 1997
Make table creation optional, allow 1 row table, add comments to
required FITS keywords W. Landsman October 2001
(See goddard/pro/fits_table/ftcreate.pro)
NAME:
FTDELCOL
PURPOSE:
Delete a column of data from a FITS table
CALLING SEQUENCE:
ftdelcol, h, tab, name
INPUTS-OUPUTS
h,tab - FITS table header and data array. H and TAB will
be updated with the specified column deleted
INPUTS:
name - Either (1) a string giving the name of the column to delete
or (2) a scalar giving the column number to delete
EXAMPLE:
Suppose it has been determined that the F7.2 format used for a field
FLUX in a FITS table is insufficient. The old column must first be
deleted before a new column can be written with a new format.
flux = FTGET(h,tab,'FLUX') ;Save the existing values
FTDELCOL,h,tab,'FLUX' ;Delete the existing column
FTADDCOL,h,tab,'FLUX',8,'F9.2' ;Create a new column with larger format
FTPUT,h,tab,'FLUX',0,flux ;Put back the original values
REVISION HISTORY:
Written W. Landsman STX Co. August, 1988
Adapted for IDL Version 2, J. Isensee, July, 1990
Converted to IDL V5.0 W. Landsman September 1997
Updated call to new FTINFO W. Landsman May 2000
(See goddard/pro/fits_table/ftdelcol.pro)
NAME: FTDELROW PURPOSE: Delete a row of data from a FITS table CALLING SEQUENCE: ftdelrow, h, tab, rows INPUTS-OUPUTS h,tab - FITS table header and data array. H and TAB will be updated on output with the specified row(s) deleted. rows - scalar or vector, specifying the row numbers to delete This vector will be sorted and duplicates removed by FTDELROW EXAMPLE: Compress a table to include only non-negative flux values flux = FTGET(h,tab,'FLUX') ;Obtain original flux vector bad = where(flux lt 0) ;Find negative fluxes FTDELROW,h,tab,bad ;Delete rows with negative fluxes PROCEDURE: Specified rows are deleted from the data array, TAB. The NAXIS2 keyword in the header is updated. REVISION HISTORY: Written W. Landsman STX Co. August, 1988 Checked for IDL Version 2, J. Isensee, July, 1990 Converted to IDL V5.0 W. Landsman September 1997
(See goddard/pro/fits_table/ftdelrow.pro)
NAME:
FTGET
PURPOSE:
Function to return value(s) from specified column in a FITS ASCII table
CALLING SEQUENCE
values = FTGET( h, tab, field, [ rows, nulls ] )
or
values = FTGET( ft_str, tab, field. [rows, nulls]
INPUTS:
h - FITS ASCII extension header (e.g. as returned by FITS_READ)
or
ft_str - FITS table structure extracted from FITS header by FTINFO
Use of the IDL structure will improve processing speed
tab - FITS ASCII table array (e.g. as returned by FITS_READ)
field - field name or number
OPTIONAL INPUTS:
rows - scalar or vector giving row number(s)
Row numbers start at 0. If not supplied or set to
-1 then values for all rows are returned
OUTPUTS:
the values for the row are returned as the function value.
Null values are set to 0 or blanks for strings.
OPTIONAL OUTPUT:
nulls - null value flag of same length as the returned data.
It is set to 1 at null value positions and 0 elsewhere.
If supplied then the optional input, rows, must also
be supplied.
EXAMPLE:
Read the columns labeled 'WAVELENGTH' and 'FLUX' from the second
(ASCII table) extension of a FITS file 'spectra.fit'
IDL> fits_read,'spectra.fit',tab,htab,exten=2 ;Read 2nd extension
IDL> w = ftget( htab, tab,'wavelength') ;Wavelength vector
IDL> f = ftget( htab, tab,'flux') ;Flux vector
Slightly more efficient would be to first call FTINFO
IDL> ftinfo, htab, ft_str ;Extract structure
IDL> w = ftget(ft_str, tab,'wavelength') ;Wavelength vector
IDL> f = ftget(ft_str, tab,'flux') ;Flux vector
NOTES:
(1) Use the higher-level procedure FTAB_EXT to extract vectors
directly from the FITS file.
(2) Use FTAB_HELP or FTHELP to determine the columns in a particular
ASCII table.
HISTORY:
coded by D. Lindler July, 1987
Always check for null values W. Landsman August 1990
More informative error message W. Landsman Feb. 1996
Converted to IDL V5.0 W. Landsman September 1997
Allow structure rather than FITS header W. Landsman May 2000
No case sensitivity in TTYPE name W. Landsman February 2002
(See goddard/pro/fits_table/ftget.pro)
NAME:
FTHELP
PURPOSE:
Routine to print a description of a FITS ASCII table extension
CALLING SEQUENCE:
FTHELP, H, [ TEXTOUT = ]
INPUTS:
H - FITS header for ASCII table extension, string array
OPTIONAL INPUT KEYWORD
TEXTOUT - scalar number (0-7) or string (file name) determining
output device (see TEXTOPEN). Default is TEXTOUT=1, output
to the user's terminal
NOTES:
FTHELP checks that the keyword XTENSION equals 'TABLE' in the FITS
header.
SYSTEM VARIABLES:
Uses the non-standard system variables !TEXTOUT and !TEXTUNIT
which must be defined (e.g. with ASTROLIB) prior to compilation.
PROCEDURES USED:
REMCHAR, SXPAR(), TEXTOPEN, TEXTCLOSE, ZPARCHECK
HISTORY:
version 1 W. Landsman Jan. 1988
Add TEXTOUT option, cleaner format W. Landsman September 1991
TTYPE value can be longer than 8 chars, W. Landsman August 1995
Converted to IDL V5.0 W. Landsman September 1997
Remove calls to !ERR, some vectorization W. Landsman February 2000
(See goddard/pro/fits_table/fthelp.pro)
NAME:
FTHMOD
PURPOSE:
Procedure to modify header information for a specified field
in a FITS table.
CALLING SEQUENCE:
fthmod, h, field, parameter, value
INPUT:
h - FITS header for the table
field - field name or number
parameter - string name of the parameter to modify. Choices
include:
TTYPE - field name
TUNIT - physical units for field (eg. 'ANGSTROMS')
TNULL - null value (string) for field, (eg. '***')
TFORM - format specification for the field
TSCAL - scale factor
TZERO - zero offset
User should be aware that the validity of the change is
not checked. Unless you really know what you are doing,
this routine should only be used to change field names,
units, or another user specified parameter.
value - new value for the parameter. Refer to the FITS table
standards documentation for valid values.
EXAMPLE:
Change the units for a field name "FLUX" to "Janskys" in a FITS table
header,h
IDL> FTHMOD, h, 'FLUX', 'TUNIT','Janskys'
METHOD:
The header keyword <parameter><field number> is modified
with the new value.
HISTORY:
version 1, D. Lindler July 1987
Converted to IDL V5.0 W. Landsman September 1997
Major rewrite to use new FTINFO call W. Landsman May 2000
(See goddard/pro/fits_table/fthmod.pro)
NAME:
FTINFO
PURPOSE:
Return an informational structure from a FITS ASCII table header.
CALLING SEQUENCE:
ftinfo,h,ft_str, [Count = ]
INPUTS:
h - FITS ASCII table header, string array
OUTPUTS:
ft_str - IDL structure with extracted info from the FITS ASCII table
header. Tags include
.tbcol - starting column position in bytes
.width - width of the field in bytes
.idltype - idltype of field.
7 - string, 4- real*4, 3-integer, 5-real*8
.tunit - string unit numbers
.tscal - scale factor
.tzero - zero point for field
.tnull - null value for the field
.tform - format for the field
.ttype - field name
OPTIONAL OUTPUT KEYWORD:
Count - Integer scalar giving number of fields in the table
PROCEDURES USED:
GETTOK(), SXPAR()
NOTES:
This procedure underwent a major revision in May 2000, and **THE
NEW CALLING SEQUENCE IS INCOMPATIBLE WITH THE OLD ONE **
HISTORY:
D. Lindler July, 1987
Converted to IDL V5.0 W. Landsman September 1997
Major rewrite, return structure W. Landsman April 2000
(See goddard/pro/fits_table/ftinfo.pro)
NAME: FTKEEPROW PURPOSE: Subscripts (and reorders) a FITS table. A companion piece to FTDELROW. CALLING SEQUENCE: ftkeeprow, h, tab, subs INPUT PARAMETERS: h = FITS table header array tab = FITS table data array subs = subscript array of FITS table rows. Works like any other IDL subscript array (0 based, of course). OUTPUT PARAMETERS: h and tab are modified MODIFICATION HISTORY: Written by R. S. Hill, ST Sys. Corp., 2 May 1991. Converted to IDL V5.0 W. Landsman September 1997
(See goddard/pro/fits_table/ftkeeprow.pro)
NAME:
FTPRINT
PURPOSE:
Procedure to print specified columns and rows of a FITS table
CALLING SEQUENCE:
FTPRINT, h, tab, columns, [ rows, TEXTOUT = ]
INPUTS:
h - Fits header for table, string array
tab - table array
columns - string giving column names, or vector giving
column numbers (beginning with 1). If string
supplied then column names should be separated by comma's.
rows - (optional) vector of row numbers to print. If
not supplied or set to scalar, -1, then all rows
are printed.
OUTPUTS:
None
OPTIONAL INPUT KEYWORDS:
TEXTOUT controls the output device; see the procedure TEXTOPEN
SYSTEM VARIABLES:
Uses nonstandard system variables !TEXTOUT and !TEXTOPEN
These will be defined (using ASTROLIB) if not already present.
Set !TEXTOUT = 3 to direct output to a disk file. The system
variable is overriden by the value of the keyword TEXTOUT
EXAMPLES:
ftprint,h,tab,'STAR ID,RA,DEC' ;print id,ra,dec for all stars
ftprint,h,tab,[2,3,4],indgen(100) ;print columns 2-4 for
;first 100 stars
ftprint,h,tab,text="stars.dat" ;Convert entire FITS table to
;an ASCII file named STARS.DAT
PROCEDURES USED:
FTSIZE, FTINFO, TEXTOPEN, TEXTCLOSE
RESTRICTIONS:
(1) Program does not check whether output length exceeds output
device capacity (e.g. 80 or 132).
(2) Column heading may be truncated to fit in space defined by
the FORMAT specified for the column
(3) Program does not check for null values
MINIMUM IDL VERSION:
V5.3 (uses STRSPLIT)
HISTORY:
version 1 D. Lindler Feb. 1987
Accept undefined values of rows, columns W. Landsman August 1997
Converted to IDL V5.0 W. Landsman September 1997
New FTINFO calling sequence W. Landsman May 2000
Parse scalar string with STRSPLIT W. Landsman July 2002
Fix format display of row number W. Landsman March 2003
Fix format display of row number again W. Landsman May 2003
(See goddard/pro/fits_table/ftprint.pro)
NAME:
FTPUT
PURPOSE:
Procedure to add or update a field in an FITS ASCII table
CALLING SEQUENCE:
FTPUT, htab, tab, field, row, values, [ nulls ]
INPUTS:
htab - FITS ASCII table header string array
tab - FITS ASCII table array (e.g. as read by READFITS)
field - string field name or integer field number
row - either a non-negative integer scalar giving starting row to
update, or a non-negative integer vector specifying rows to
update. FTPUT will append a new row to a table if the value
of 'row' exceeds the number of rows in the tab array
values - value(s) to add or update. If row is a vector
then values must contain the same number of elements.
OPTIONAL INPUT:
nulls - null value flag of same length as values.
It should be set to 1 at null value positions
and 0 elsewhere.
OUTPUTS:
htab,tab will be updated as specified.
EXAMPLE:
One has a NAME and RA and Dec vectors for 500 stars with formats A6,
F9.5 and F9.5 respectively. Write this information to an ASCII table
named 'star.fits'.
IDL> FTCREATE,24,500,h,tab ;Create table header and (empty) data
IDL> FTADDCOL,h,tab,'RA',8,'F9.5','DEGREES' ;Explicity define the
IDL> FTADDCOL,h,tab,'DEC',8,'F9.5','DEGREES' ;RA and Dec columns
IDL> FTPUT,h,tab,'RA',0,ra ;Insert RA vector into table
IDL> FTPUT,h,tab,'DEC',0,dec ;Insert DEC vector into table
IDL> FTPUT, h,tab, 'NAME',0,name ;Insert NAME vector with default
IDL> WRITEFITS,'stars.fits',tab,h ;Write to a file
Note that (1) explicit formatting has been supplied for the (numeric)
RA and Dec vectors, but was not needed for the NAME vector, (2) A width
of 24 was supplied in FTCREATE based on the expected formats (6+9+9),
though the FT* will adjust this value as necessary, and (3) WRITEFITS
will create a minimal primary header
NOTES:
(1) If the specified field is not already in the table, then FTPUT will
create a new column for that field using default formatting. However,
FTADDCOL should be called prior to FTPUT for explicit formatting.
PROCEDURES CALLED
FSTRING(), FTADDCOL, FTINFO, FTSIZE, SXADDPAR, SXPAR()
HISTORY:
version 1 D. Lindler July, 1987
Allow E format W. Landsman March 1992
Write in F format if E format will overflow April 1994
Update documentation W. Landsman January 1996
Allow 1 element vector W. Landsman March 1996
Adjust string length to maximum of input string array June 1997
Work for more than 32767 elements August 1997
Converted to IDL V5.0 W. Landsman September 1997
Updated call to the new FTINFO W. Landsman May 2000
Fix case where header does not have any columns yet W.Landsman Sep 2002
(See goddard/pro/fits_table/ftput.pro)
NAME:
FTSIZE
PURPOSE:
Procedure to return the size of a FITS ASCII table.
CALLING SEQUENCE:
ftsize,h,tab,ncols,rows,tfields,ncols_all,nrows_all, [ERRMSG = ]
INPUTS:
h - FITS ASCII table header, string array
tab - FITS table array, 2-d byte array
OUTPUTS:
ncols - number of characters per row in table
nrows - number of rows in table
tfields - number of fields per row
ncols_all - number of characters/row allocated (size of tab)
nrows_all - number of rows allocated
OPTIONAL OUTPUT KEYWORD:
ERRMSG = If this keyword is present, then any error messages will be
returned to the user in this parameter rather than
depending on the MESSAGE routine in IDL. If no errors are
encountered, then a null string is returned.
HISTORY
D. Lindler July, 1987
Fix for 1-row table, W. Landsman HSTX, June 1994
Converted to IDL V5.0 W. Landsman September 1997
Added ERRMSG keyword W. Landsman May 2000
(See goddard/pro/fits_table/ftsize.pro)
NAME:
FTSORT
PURPOSE:
Sort a FITS ASCII table according to a specified field
CALLING SEQUENCE:
FTSORT,h,tab,[field, REVERSE = ] ;Sort original table header and array
or
FTSORT,h,tab,hnew,tabnew,[field, REVERSE =] ;Create new sorted header
INPUTS:
H - FITS header (string array)
TAB - FITS table (byte array) associated with H. If less than 4
parameters are supplied, then H and TAB will be updated to
contain the sorted table
OPTIONAL INPUTS:
FIELD - Field name(s) or number(s) used to sort the entire table.
If FIELD is a vector then the first element is used for the
primary sort, the second element is used for the secondary
sort, and so forth. (A secondary sort only takes effect when
values in the primary sort field are equal.) Character fields
are sorted using the ASCII collating sequence. If omitted,
the user will be prompted for the field name.
OPTIONAL OUTPUTS:
HNEW,TABNEW - Header and table containing the sorted tables
EXAMPLE:
Sort a FITS ASCII table by the 'DECLINATION' field in descending order
Assume that the table header htab, and array, tab, have already been
read (e.g. with READFITS or FITS_READ):
IDL> FTSORT, htab, tab,'DECLINATION',/REVERSE
OPTIONAL INPUT KEYWORD:
REVERSE - If set then the table is sorted in reverse order (maximum
to minimum. If FIELD is a vector, then REVERSE can also be
a vector. For example, REVERSE = [1,0] indicates that the
primary sort should be in descending order, and the secondary
sort should be in ascending order.
EXAMPLE:
SIDE EFFECTS:
A HISTORY record is added to the table header.
REVISION HISTORY:
Written W. Landsman June, 1988
Converted to IDL V5.0 W. Landsman September 1997
New FTINFO calling sequence, added REVERSE keyword, allow secondary sorts
W. Landsman May 2000
(See goddard/pro/fits_table/ftsort.pro)
NAME:
FXADDPAR
Purpose :
Add or modify a parameter in a FITS header array.
Explanation :
This version of FXADDPAR will write string values longer than 68
characters using the FITS continuation convention described at
http://heasarc.gsfc.nasa.gov/docs/heasarc/ofwg/docs/ofwg_recomm/r13.html
Use :
FXADDPAR, HEADER, NAME, VALUE, COMMENT
Inputs :
HEADER = String array containing FITS header. The maximum string
length must be equal to 80. If not defined, then FXADDPAR
will create an empty FITS header array.
NAME = Name of parameter. If NAME is already in the header the
value and possibly comment fields are modified. Otherwise a
new record is added to the header. If NAME is equal to
either "COMMENT" or "HISTORY" then the value will be added to
the record without replacement. In this case the comment
parameter is ignored.
VALUE = Value for parameter. The value expression must be of the
correct type, e.g. integer, floating or string.
String values of 'T' or 'F' are considered logical
values. If the value is a string and is "long"
(more than 69 characters), then it may be continued
over more than one line using the OGIP CONTINUE
standard.
Opt. Inputs :
COMMENT = String field. The '/' is added by this routine. Added
starting in position 31. If not supplied, or set equal to ''
(the null string), then any previous comment field in the
header for that keyword is retained (when found).
Outputs :
HEADER = Updated header array.
Opt. Outputs:
None.
Keywords :
BEFORE = Keyword string name. The parameter will be placed before the
location of this keyword. For example, if BEFORE='HISTORY'
then the parameter will be placed before the first history
location. This applies only when adding a new keyword;
keywords already in the header are kept in the same position.
AFTER = Same as BEFORE, but the parameter will be placed after the
location of this keyword. This keyword takes precedence over
BEFORE.
FORMAT = Specifies FORTRAN-like format for parameter, e.g. "F7.3". A
scalar string should be used. For complex numbers the format
should be defined so that it can be applied separately to the
real and imaginary parts.
/NOCONTINUE = By default, FXADDPAR will break strings longer than 68
characters into multiple lines using the continuation
convention. If this keyword is set, then the line will
instead be truncated to 68 characters. This was the default
behaviour of FXADDPAR prior to December 1999.
Calls :
DETABIFY(), FXPAR(), FXPARPOS()
Common :
None.
Restrictions:
Warning -- Parameters and names are not checked against valid FITS
parameter names, values and types.
The required FITS keywords SIMPLE (or XTENSION), BITPIX, NAXIS, NAXIS1,
NAXIS2, etc., must be entered in order. The actual values of these
keywords are not checked for legality and consistency, however.
Side effects:
All HISTORY records are inserted in order at the end of the header.
All COMMENT records are also inserted in order at the end of the
header, but before the HISTORY records. The BEFORE and AFTER keywords
can override this.
All records with no keyword (blank) are inserted in order at the end of
the header, but before the COMMENT and HISTORY records. The BEFORE and
AFTER keywords can override this.
All other records are inserted before any of the HISTORY, COMMENT, or
"blank" records. The BEFORE and AFTER keywords can override this.
String values longer than 68 characters will be split into multiple
lines using the OGIP CONTINUE convention, unless the /NOCONTINUE keyword
is set. For a description of the CONTINUE convention see
http://heasarc.gsfc.nasa.gov/docs/heasarc/ofwg/docs/ofwg_recomm/r13.htm
Category :
Data Handling, I/O, FITS, Generic.
Prev. Hist. :
William Thompson, Jan 1992, from SXADDPAR by D. Lindler and J. Isensee.
Differences include:
* LOCATION parameter replaced with keywords BEFORE and AFTER.
* Support for COMMENT and "blank" FITS keywords.
* Better support for standard FITS formatting of string and
complex values.
* Built-in knowledge of the proper position of required
keywords in FITS (although not necessarily SDAS/Geis) primary
headers, and in TABLE and BINTABLE extension headers.
William Thompson, May 1992, fixed bug when extending length of header,
and new record is COMMENT, HISTORY, or blank.
Written :
William Thompson, GSFC, January 1992.
Modified :
Version 1, William Thompson, GSFC, 12 April 1993.
Incorporated into CDS library.
Version 2, William Thompson, GSFC, 5 September 1997
Fixed bug replacing strings that contain "/" character--it
interpreted the following characters as a comment.
Version 3, Craig Markwardt, GSFC, December 1997
Allow long values to extend over multiple lines
Version 4, D. Lindler, March 2000, modified to use capital E instead
of a lower case e for exponential format.
Version 4.1 W. Landsman April 2000, make user-supplied format uppercase
Version 4.2 W. Landsman July 2002, positioning of EXTEND keyword
Version :
Version 4.2, July 2002
(See goddard/pro/fits_bintable/fxaddpar.pro)
NAME:
FXBADDCOL
Purpose :
Adds a column to a binary table extension.
Explanation :
Modify a basic FITS binary table extension (BINTABLE) header array to
define a column.
Use :
FXBADDCOL, INDEX, HEADER, ARRAY [, TTYPE [, COMMENT ]]
Inputs :
HEADER = String array containing FITS extension header.
ARRAY = IDL variable used to determine the data size and type
associated with the column. If the column is defined as
containing variable length arrays, then ARRAY must be of the
maximum size to be stored in the column.
Opt. Inputs :
TTYPE = Column label.
COMMENT = Comment for TTYPE
Outputs :
INDEX = Index (1-999) of the created column.
HEADER = The header is modified to reflect the added column.
Opt. Outputs:
None.
Keywords :
VARIABLE= If set, then the column is defined to contain pointers to
variable length arrays in the heap area.
DCOMPLEX= If set, and ARRAY is complex, with the first dimension being
two (real and imaginary parts), then the column is defined as
double-precision complex (type "M"). This keyword is
only needed prior to IDL Version 4.0, when the double
double complex datatype was unavailable in IDL
BIT = If passed, and ARRAY is of type byte, then the column is
defined as containg bit mask arrays (type "X"), with the
value of BIT being equal to the number of mask bits.
LOGICAL = If set, and array is of type byte, then the column is defined
as containing logical arrays (type "L").
NO_TDIM = If set, then the TDIMn keyword is not written out to the
header. No TDIMn keywords are written for columns containing
variable length arrays.
TUNIT = If passed, then corresponding keyword is added to header.
TSCAL = Same.
TZERO = Same.
TNULL = Same.
TDISP = Same.
TDMIN = Same.
TDMAX = Same.
TDESC = Same.
TCUNI = Same.
TROTA = Same.
TRPIX = Same.
TRVAL = Same.
TDELT = Same.
ERRMSG = If defined and passed, then any error messages will be
returned to the user in this parameter rather than
depending on the MESSAGE routine in IDL. If no errors are
encountered, then a null string is returned. In order to
use this feature, ERRMSG must be defined first, e.g.
ERRMSG = ''
FXBADDCOL, ERRMSG=ERRMSG, ...
IF ERRMSG NE '' THEN ...
Calls :
FXADDPAR, FXPAR
Common :
None.
Restrictions:
Warning: No checking is done of any of the parameters defining the
values of optional FITS keywords.
FXBHMAKE must first be called to initialize the header.
If ARRAY is of type character, then it must be of the maximum length
expected for this column. If a character string array, then the
largest string in the array is used to determine the maximum length.
The DCOMPLEX keyword is ignored if ARRAY is not double-precision.
ARRAY must also have a first dimension of two representing the real and
imaginary parts.
The BIT and LOGICAL keywords are ignored if ARRAY is not of type byte.
BIT takes precedence over LOGICAL.
Side effects:
If the data array is multidimensional, then a TDIM keyword is added to
the header, unless either NO_TDIM or VARIABLE is set.
No TDIMn keywords are written out for bit arrays (format 'X'), since
the dimensions would refer to bits, not bytes.
Category :
Data Handling, I/O, FITS, Generic.
Prev. Hist. :
William Thompson, Jan 1992.
W. Thompson, Feb 1992, changed from function to procedure.
W. Thompson, Feb 1992, modified to support variable length arrays.
Written :
William Thompson, GSFC, January 1992.
Modified :
Version 1, William Thompson, GSFC, 12 April 1993.
Incorporated into CDS library.
Version 2, William Thompson, GSFC, 31 May 1994
Added ERRMSG keyword.
Version 3, William Thompson, GSFC, 23 June 1994
Modified so that ERRMSG is not touched if not defined.
Version 4, William Thompson, GSFC, 30 December 1994
Added keyword TCUNI.
Version 5, Wayne Landsman, GSFC, 12 Aug 1997
Recognize double complex IDL datatype
Version :
Version 5, 12 Aug 1997
Converted to IDL V5.0 W. Landsman September 1997
(See goddard/pro/fits_bintable/fxbaddcol.pro)
NAME:
FXBCLOSE
Purpose :
Close a FITS binary table extension opened for read.
Explanation :
Closes a FITS binary table extension that had been opened for read by
FXBOPEN.
Use :
FXBCLOSE, UNIT
Inputs :
UNIT = Logical unit number of the file.
Opt. Inputs :
None.
Outputs :
None.
Opt. Outputs:
None.
Keywords :
ERRMSG = If defined and passed, then any error messages will be
returned to the user in this parameter rather than
depending on the MESSAGE routine in IDL. If no errors are
encountered, then a null string is returned. In order to
use this feature, ERRMSG must be defined first, e.g.
ERRMSG = ''
FXBCLOSE, ERRMSG=ERRMSG, ...
IF ERRMSG NE '' THEN ...
Calls :
None.
Common :
Uses common block FXBINTABLE--see "fxbintable.pro" for more
information.
Restrictions:
The file must have been opened with FXBOPEN.
Side effects:
None.
Category :
Data Handling, I/O, FITS, Generic.
Prev. Hist. :
W. Thompson, Feb. 1992.
Written :
William Thompson, GSFC, February 1992.
Modified :
Version 1, William Thompson, GSFC, 12 April 1993.
Incorporated into CDS library.
Version 2, William Thompson, GSFC, 21 June 1994
Added ERRMSG keyword.
Version 3, William Thompson, GSFC, 23 June 1994
Modified so that ERRMSG is not touched if not defined.
Version :
Version 3, 23 June 1994
Converted to IDL V5.0 W. Landsman September 1997
(See goddard/pro/fits_bintable/fxbclose.pro)
NAME:
FXBCOLNUM()
Purpose :
Returns a binary table column number.
Explanation :
Given a column specified either by number or name, this routine will
return the appropriate column number.
Use :
Result = FXBCOLNUM( UNIT, COL )
Inputs :
UNIT = Logical unit number corresponding to the file containing the
binary table.
COL = Column in the binary table, given either as a character
string containing a column label (TTYPE), or as a numerical
column index starting from column one.
Opt. Inputs :
None.
Outputs :
The result of the function is the number of the column specified, or
zero if no column is found (when passed by name).
Opt. Outputs:
None.
Keywords :
ERRMSG = If defined and passed, then any error messages will be
returned to the user in this parameter rather than
depending on the MESSAGE routine in IDL. If no errors are
encountered, then a null string is returned. In order to
use this feature, ERRMSG must be defined first, e.g.
ERRMSG = ''
Result = FXBCOLNUM( ERRMSG=ERRMSG, ... )
IF ERRMSG NE '' THEN ...
Calls :
None.
Common :
Uses common block FXBINTABLE--see "fxbintable.pro" for more
information.
Restrictions:
The binary table file must have been opened with FXBOPEN.
If COL is passed as a number, rather than as a name, then it must be
consistent with the number of columns in the table.
Side effects:
None.
Category :
Data Handling, I/O, FITS, Generic.
Prev. Hist. :
None.
Written :
William Thompson, GSFC, 2 July 1993.
Modified :
Version 1, William Thompson, GSFC, 2 July 1993.
Version 2, William Thompson, GSFC, 29 October 1993.
Added error message for not finding column by name.
Version 3, William Thompson, GSFC, 21 June 1994
Added ERRMSG keyword.
Version 4, William Thompson, GSFC, 23 June 1994
Modified so that ERRMSG is not touched if not defined.
Version :
Version 4, 23 June 1994
Converted to IDL V5.0 W. Landsman September 1997
(See goddard/pro/fits_bintable/fxbcolnum.pro)
NAME:
FXBCREATE
Purpose :
Open a new binary table at the end of a FITS file.
Explanation :
Write a binary table extension header to the end of a disk FITS file,
and leave it open to receive the data.
The FITS file is opened, and the pointer is positioned just after the
last 2880 byte record. Then the binary header is appended. Calls to
FXBWRITE will append the binary data to this file, and then FXBFINISH
will close the file.
Use :
FXBCREATE, UNIT, FILENAME, HEADER
Inputs :
FILENAME = Name of FITS file to be opened.
HEADER = String array containing the FITS binary table extension
header.
Opt. Inputs :
None.
Outputs :
UNIT = Logical unit number of the opened file.
EXTENSION= Extension number of newly created extension.
Opt. Outputs:
None.
Keywords :
ERRMSG = If defined and passed, then any error messages will be
returned to the user in this parameter rather than
depending on the MESSAGE routine in IDL. If no errors are
encountered, then a null string is returned. In order to
use this feature, ERRMSG must be defined first, e.g.
ERRMSG = ''
FXBCREATE, ERRMSG=ERRMSG, ...
IF ERRMSG NE '' THEN ...
Calls :
FXADDPAR, FXBFINDLUN, FXBPARSE, FXFINDEND
Common :
Uses common block FXBINTABLE--see "fxbintable.pro" for more
information.
Restrictions:
The primary FITS data unit must already be written to a file. The
binary table extension header must already be defined (FXBHMAKE), and
must match the data that will be written to the file.
Side effects:
None.
Category :
Data Handling, I/O, FITS, Generic.
Prev. Hist. :
W. Thompson, Jan 1992, based on WRITEFITS by J. Woffard and W. Landsman.
W. Thompson, Feb 1992, changed from function to procedure.
W. Thompson, Feb 1992, removed all references to temporary files.
Written :
William Thompson, GSFC, January 1992.
Modified :
Version 1, William Thompson, GSFC, 12 April 1993.
Incorporated into CDS library.
Version 2, William Thompson, GSFC, 21 July 1993.
Fixed bug with variable length arrays.
Version 3, William Thompson, GSFC, 21 June 1994
Added ERRMSG keyword.
Version 4, William Thompson, GSFC, 23 June 1994
Modified so that ERRMSG is not touched if not defined.
Version 5, Antony Bird, Southampton, 25 June 1997
Modified to allow very long tables
Version :
Version 5, 25 June 1997
Converted to IDL V5.0 W. Landsman September 1997
Added EXTENSION parameter, C. Markwardt 1999 Jul 15
More efficient zeroing of file, C. Markwardt, 26 Feb 2001
(See goddard/pro/fits_bintable/fxbcreate.pro)
NAME:
FXBDIMEN()
PURPOSE:
Returns the dimensions for a column in a FITS binary table.
Explanation : This procedure returns the dimensions associated with a column
in a binary table opened for read with the command FXBOPEN.
Use : Result = FXBDIMEN(UNIT,COL)
Inputs : UNIT = Logical unit number returned by FXBOPEN routine.
Must be a scalar integer.
COL = Column in the binary table to read data from, either
as a character string containing a column label
(TTYPE), or as a numerical column index starting from
column one.
Opt. Inputs : None.
Outputs : The result of the function is an array containing the
dimensions for the specified column in the FITS binary table
that UNIT points to.
Opt. Outputs: None.
Keywords : ERRMSG = If defined and passed, then any error messages will
be returned to the user in this parameter rather than
depending on the MESSAGE routine in IDL. If no
errors are encountered, then a null string is
returned. In order to use this feature, ERRMSG must
be defined first, e.g.
ERRMSG = ''
Result = FXBDIMEN( ERRMSG=ERRMSG, ... )
IF ERRMSG NE '' THEN ...
Calls : FXBCOLNUM, FXBFINDLUN
Common : Uses common block FXBINTABLE--see "fxbintable.pro" for more
information.
Restrictions: None.
Side effects: The dimensions will be returned whether or not the table is
still open or not.
If UNIT does not point to a binary table, then 0 is returned.
If UNIT is an undefined variable, then 0 is returned.
Category : Data Handling, I/O, FITS, Generic.
Prev. Hist. : None.
Written : William Thompson, GSFC, 4 March 1994.
Modified : Version 1, William Thompson, GSFC, 4 March 1994.
Version 2, William Thompson, GSFC, 21 June 1994
Added ERRMSG keyword.
Version 3, William Thompson, GSFC, 23 June 1994
Modified so that ERRMSG is not touched if not defined.
Version : Version 3, 23 June 1994
Converted to IDL V5.0 W. Landsman September 1997
(See goddard/pro/fits_bintable/fxbdimen.pro)
NAME:
FXBFIND
Purpose :
Find column keywords in a FITS binary table header.
Explanation :
Finds the value of a column keyword for all the columns in the binary
table for which it is set. For example,
FXBFIND, UNIT, 'TTYPE', COLUMNS, VALUES, N_FOUND
Would find all instances of the keywords TTYPE1, TTYPE2, etc. The
array COLUMNS would contain the column numbers for which a TTYPEn
keyword was found, and VALUES would contain the values. N_FOUND would
contain the total number of instances found.
Use :
FXBFIND, [UNIT or HEADER], KEYWORD, COLUMNS, VALUES, N_FOUND
[, DEFAULT ]
Inputs :
Either UNIT or HEADER must be passed.
UNIT = Logical unit number of file opened by FXBOPEN.
HEADER = FITS binary table header.
KEYWORD = Prefix to a series of FITS binary table column keywords. The
keywords to be searched for are formed by combining this
prefix with the numbers 1 through the value of TFIELDS in the
header.
Opt. Inputs :
DEFAULT = Default value to use for any column keywords that aren't
found. If passed, then COLUMNS and VALUES will contain
entries for every column. Otherwise, COLUMNS and VALUES only
contain entries for columns where values were found.
Outputs :
COLUMNS = Array containing the column numbers for which values of the
requested keyword series were found.
VALUES = Array containing the found values.
N_FOUND = Number of values found. The value of this parameter is
unaffected by whether or not DEFAULT is passed.
Opt. Outputs:
None.
Output Keywords :
COMMENTS = Comments associated with each keyword, if any
Calls :
FXBFINDLUN, FXPAR
Common :
Uses common block FXBINTABLE--see "fxbintable.pro" for more
information.
Restrictions:
If UNIT is passed, then the file must have been opened with FXBOPEN.
If HEADER is passed, then it must be a legal FITS binary table header.
The type of DEFAULT must be consistent with the values of the requested
keywords, i.e. both most be either of string or numerical type.
The KEYWORD prefix must not have more than five characters to leave
room for the three digits allowed for the column numbers.
Side effects:
None.
Category :
Data Handling, I/O, FITS, Generic.
Prev. Hist. :
William Thompson, Feb. 1992.
Written :
William Thompson, GSFC, February 1992.
Modified :
Version 1, William Thompson, GSFC, 12 April 1993.
Incorporated into CDS library.
Version :
Version 1, 12 April 1993.
Vectorized implementation improves performance, CM 18 Nov 1999
Added COMMENTS keyword CM Nov 2003
(See goddard/pro/fits_bintable/fxbfind.pro)
NAME: FXBFINDLUN() Purpose : Find logical unit number UNIT in FXBINTABLE common block. Explanation : Finds the proper index to use for getting information about the logical unit number UNIT in the arrays stored in the FXBINTABLE common block. Called from FXBCREATE and FXBOPEN. Use : Result = FXBFINDLUN( UNIT ) Inputs : UNIT = Logical unit number. Opt. Inputs : None. Outputs : The result of the function is an index into the FXBINTABLE common block. Opt. Outputs: None. Keywords : None. Calls : None. Common : Uses common block FXBINTABLE--see "fxbintable.pro" for more information. Restrictions: None. Side effects: If UNIT is not found in the common block, then it is added to the common block. Category : Data Handling, I/O, FITS, Generic. Prev. Hist. : William Thompson, Feb. 1992. Written : William Thompson, GSFC, February 1992. Modified : Version 1, William Thompson, GSFC, 12 April 1993. Incorporated into CDS library. Version 2, William Thompson, GSFC, 21 July 1993. Added DHEAP variable to fix bug with variable length arrays. Version 3, Michael Schubnell, University of Michigan, 22 May 1996 Change N_DIMS from short to long integer. Version : Version 3, 22 May 1996 Converted to IDL V5.0 W. Landsman September 1997
(See goddard/pro/fits_bintable/fxbfindlun.pro)
NAME:
FXBFINISH
Purpose :
Close a FITS binary table extension file opened for write.
Explanation :
Closes a FITS binary table extension file that had been opened for
write by FXBCREATE.
Use :
FXBFINISH, UNIT
Inputs :
UNIT = Logical unit number of the file.
Opt. Inputs :
None.
Outputs :
None.
Opt. Outputs:
None.
Keywords :
ERRMSG = If defined and passed, then any error messages will be
returned to the user in this parameter rather than
depending on the MESSAGE routine in IDL. If no errors are
encountered, then a null string is returned. In order to
use this feature, ERRMSG must be defined first, e.g.
ERRMSG = ''
FXBFINISH, ERRMSG=ERRMSG, ...
IF ERRMSG NE '' THEN ...
Calls :
None.
Common :
Uses common block FXBINTABLE--see "fxbintable.pro" for more
information.
Restrictions:
The file must have been opened with FXBCREATE, and written with
FXBWRITE.
Side effects:
Any bytes needed to pad the file out to an integral multiple of 2880
bytes are written out to the file. Then, the file is closed.
Category :
Data Handling, I/O, FITS, Generic.
Prev. Hist. :
W. Thompson, Jan 1992.
W. Thompson, Feb 1992, modified to support variable length arrays.
W. Thompson, Feb 1992, removed all references to temporary files.
Written :
William Thompson, GSFC, January 1992.
Modified :
Version 1, William Thompson, GSFC, 12 April 1993.
Incorporated into CDS library.
Version 2, William Thompson, GSFC, 21 July 1993.
Fixed bug with variable length arrays.
Version 3, William Thompson, GSFC, 31 May 1994
Added ERRMSG keyword.
Version 4, William Thompson, GSFC, 23 June 1994
Modified so that ERRMSG is not touched if not defined.
Version :
Version 4, 23 June 1994
Converted to IDL V5.0 W. Landsman September 1997
(See goddard/pro/fits_bintable/fxbfinish.pro)
NAME:
FXBGROW
PURPOSE :
Increase the number of rows in a binary table.
EXPLANATION :
Call FXBGROW to increase the size of an already-existing FITS
binary table. The number of rows increases to NROWS; however
the table cannot shrink by this operation. This procedure is
useful when a table with an unknown number of rows must be
created. The caller would then call FXBCREATE to construct a
table of some base size, and follow with calls to FXBGROW to
lengthen the table as needed. The extension being enlarged
need not be the last extension in the file. If subsequent
extensions exist in the file, they will be shifted properly.
CALLING SEQUENCE :
FXBGROW, UNIT, HEADER, NROWS[, ERRMSG= , NOZERO= , BUFFERSIZE= ]
INPUT PARAMETERS :
UNIT = Logical unit number of an already-opened file.
HEADER = String array containing the FITS binary table extension
header. The header is modified in place.
NROWS = New number of rows, always more than the previous
number.
OPTIONAL INPUT KEYWORDS:
NOZERO = when set, FXBGROW will not zero-pad the new data if
it doesn't have to.
ERRMSG = If defined and passed, then any error messages will be
returned to the user in this parameter rather than
depending on the MESSAGE routine in IDL. If no errors are
encountered, then a null string is returned. In order to
use this feature, ERRMSG must be defined first, e.g.
ERRMSG = ''
FXBGROW, ERRMSG=ERRMSG, ...
IF ERRMSG NE '' THEN ...
BUFFERSIZE = Size in bytes for intermediate data transfers
(default 32768)
Calls :
FXADDPAR, FXHREAD, BLKSHIFT
Common :
Uses common block FXBINTABLE--see "fxbintable.pro" for more
information.
Restrictions:
The file must be open with write permission.
The binary table extension in question must already by written
to the file (using FXBCREATE).
A table can never shrink via this operation.
SIDE EFFECTS:
The FITS file will grow in size, and heap areas are
preserved by moving them to the end of the file.
The header is modified to reflect the new number of rows.
CATEGORY :
Data Handling, I/O, FITS, Generic.
Initially written, C. Markwardt, GSFC, Nov 1998
Added ability to enlarge arbitrary extensions and tables with
variable sized rows, not just the last extension in a file,
CM, April 2000
Fix bug in the zeroing of the output file, C. Markwardt, April 2005
(See goddard/pro/fits_bintable/fxbgrow.pro)
NAME:
FXBHEADER()
PURPOSE:
Returns the header of an open FITS binary table.
Explanation : This procedure returns the FITS extension header of a FITS
binary table opened for read with the command FXBOPEN.
Use : Result = FXBHEADER(UNIT)
Inputs : UNIT = Logical unit number returned by FXBOPEN routine.
Must be a scalar integer.
Opt. Inputs : None.
Outputs : The result of the function is a string array containing the
header for the FITS binary table that UNIT points to.
Opt. Outputs: None.
Keywords : None.
Calls : FXBFINDLUN
Common : Uses common block FXBINTABLE--see "fxbintable.pro" for more
information.
Restrictions: None.
Side effects: The string array returned always has as many elements as the
largest header read by FXBOPEN. Any extra elements beyond the
true header are blank or null strings.
The header will be returned whether or not the table is still
open or not.
If UNIT does not point to a binary table, then a string array
of nulls is returned.
If UNIT is an undefined variable, then the null string is
returned.
Category : Data Handling, I/O, FITS, Generic.
Prev. Hist. : None.
Written : William Thompson, GSFC, 1 July 1993.
Modified : Version 1, William Thompson, GSFC, 1 July 1993.
Version : Version 1, 1 July 1993.
Converted to IDL V5.0 W. Landsman September 1997
(See goddard/pro/fits_bintable/fxbheader.pro)
NAME: FXBHELP Purpose : Prints short description of columns in a FITS binary table. Explanation : Prints a short description of the columns in a FITS binary table to the terminal screen. Use : FXBHELP, UNIT Inputs : UNIT = Logical unit number of file opened by FXBOPEN. Opt. Inputs : None. Outputs : None. Opt. Outputs: None. Keywords : None. Calls : FXBFIND, FXBFINDLUN, FXPAR Common : Uses common block FXBINTABLE--see "fxbintable.pro" for more information. Restrictions: The file must have been opened with FXBOPEN. Side effects: Certain fields may be truncated in the display. Category : Data Handling, I/O, FITS, Generic. Prev. Hist. : William Thompson, Feb. 1992, from TBHELP by W. Landsman. Written : William Thompson, GSFC, February 1992. Modified : Version 1, William Thompson, GSFC, 12 April 1993. Incorporated into CDS library. Version 2, William Thompson, GSFC, 12 May 1993. Modified to not write to a logical unit number assigned to the terminal. This makes it compatible with IDL for Windows. Version : Version 2, 12 May 1993. Converted to IDL V5.0 W. Landsman September 1997
(See goddard/pro/fits_bintable/fxbhelp.pro)
NAME:
FXBHMAKE
Purpose :
Create basic FITS binary table extension (BINTABLE) header.
Explanation :
Creates a basic header array with all the required keywords, but with
none of the table columns defined. This defines a basic structure
which can then be added to or modified by other routines.
Use :
FXBHMAKE, HEADER, NROWS [, EXTNAME [, COMMENT ]]
Inputs :
NROWS = Number of rows in the binary table.
Opt. Inputs :
EXTNAME = If passed, then the EXTNAME record is added with this value.
COMMENT = Comment to go along with EXTNAME.
Outputs :
HEADER = String array containing FITS extension header.
Opt. Outputs:
None.
Keywords :
INITIALIZE = If set, then the header is completely initialized, and any
previous entries are lost.
DATE = If set, then the DATE keyword is added to the header.
EXTVER = Extension version number (integer).
EXTLEVEL = Extension level number (integer).
ERRMSG = If defined and passed, then any error messages will be
returned to the user in this parameter rather than
depending on the MESSAGE routine in IDL. If no errors are
encountered, then a null string is returned. In order to
use this feature, ERRMSG must be defined first, e.g.
ERRMSG = ''
FXBHMAKE, ERRMSG=ERRMSG, ...
IF ERRMSG NE '' THEN ...
Calls :
GET_DATE, FXADDPAR, FXHCLEAN
Common :
None.
Restrictions:
Warning: No checking is done of any of the parameters.
Side effects:
None.
Category :
Data Handling, I/O, FITS, Generic.
Prev. Hist. :
William Thompson, Jan 1992.
William Thompson, Sep 1992, added EXTVER and EXTLEVEL keywords.
Written :
William Thompson, GSFC, January 1992.
Modified :
Version 1, William Thompson, GSFC, 12 April 1993.
Incorporated into CDS library.
Version 2, William Thompson, GSFC, 21 June 1994
Added ERRMSG keyword.
Version 3, William Thompson, GSFC, 23 June 1994
Modified so that ERRMSG is not touched if not defined.
Version :
Version 3, 23 June 1994
Converted to IDL V5.0 W. Landsman September 1997
(See goddard/pro/fits_bintable/fxbhmake.pro)
NAME: FXBINTABLE Purpose : Common block FXBINTABLE used by "FXB" routines. Explanation : This is not an IDL routine as such, but contains the definition of the common block FXBINTABLE for inclusion into other routines. By defining the common block in one place, the problem of conflicting definitions is avoided. This file is included into routines that need this common block with the single line (left justified) @fxbintable FXBINTABLE contains the following arrays: LUN = An array of logical unit numbers of currently (or previously) opened binary table files. STATE = Array containing the state of the FITS files associated with the logical unit numbers, where 0=closed, 1=open for read, and 2=open for write. HEAD = FITS binary table headers. MHEADER = Array containing the positions of the first data byte of the header for each file referenced by array LUN. NHEADER = Array containing the positions of the first data byte after the header for each file referenced by array LUN. NAXIS1 = Values of NAXIS1 from the binary table headers. NAXIS2 = Values of NAXIS2 from the binary table headers. TFIELDS = Values of TFIELDS from the binary table headers. HEAP = The start of the first byte of the heap area for variable length arrays. DHEAP = The start of the first byte of the next variable length array, if writing. BYTOFF = Byte offset from the beginning of the row for each column in the binary table headers. TTYPE = Values of TTYPE for each column in the binary table headers. FORMAT = Character code formats of the various columns. IDLTYPE = IDL type code for each column in the binary table headers. N_ELEM = Number of elements for each column in the binary table headers. TSCAL = Scale factors for the individual columns. TZERO = Zero offsets for the individual columns. MAXVAL = For variable length arrays, contains the maximum number of elements for each column in the binary table headers. N_DIMS = Number of dimensions, and array of dimensions for each column of type string in the binary table headers. Category : Data Handling, I/O, FITS, Generic. Prev. Hist. : William Thompson, Feb 1992. Written : William Thompson, GSFC, February 1992. Modified : Version 1, William Thompson, GSFC, 12 April 1993. Incorporated into CDS library. Version 2, William Thompson, GSFC, 21 July 1993. Added DHEAP variable to fix bug with variable length arrays. Version : Version 2, 21 July 1993.
(See goddard/pro/fits_bintable/fxbintable.pro)
NAME:
FXBISOPEN()
PURPOSE:
Returns true if UNIT points to an open FITS binary table.
Explanation : This procedure checks to see if the logical unit number given
by the variable UNIT corresponds to a FITS binary table opened
for read with the command FXBOPEN, and which has not yet been
closed with FXBCLOSE.
Use : Result = FXBISOPEN(UNIT)
If FXBISOPEN(UNIT) THEN ...
Inputs : UNIT = Logical unit number returned by FXBOPEN routine.
Must be a scalar integer.
Opt. Inputs : None.
Outputs : The result of the function is either True (1) or False (0),
depending on whether UNIT points to an open binary table or
not.
Opt. Outputs: None.
Keywords : None.
Calls : FXBFINDLUN
Common : Uses common block FXBINTABLE--see "fxbintable.pro" for more
information.
Restrictions: None.
Side effects: If UNIT is an undefined variable, then False (0) is returned.
If UNIT points to a FITS binary table file that is opened for
write, then False (0) is returned.
Category : Data Handling, I/O, FITS, Generic.
Prev. Hist. : None.
Written : William Thompson, GSFC, 1 July 1993.
Modified : Version 1, William Thompson, GSFC, 1 July 1993.
Version : Version 1, 1 July 1993.
Converted to IDL V5.0 W. Landsman September 1997
(See goddard/pro/fits_bintable/fxbisopen.pro)
NAME:
FXBOPEN
Purpose :
Open binary table extension in a disk FITS file for reading or updating
Explanation :
Opens a binary table extension in a disk FITS file for reading. The
columns are then read using FXBREAD, and the file is closed when done
with FXBCLOSE.
Use :
FXBOPEN, UNIT, FILENAME, EXTENSION [, HEADER ]
Inputs :
FILENAME = Name of FITS file to be opened. Optional
extension *number* may be specified, in either of
the following formats (using the FTOOLS
convention): FILENAME[EXT] or FILENAME+EXT, where
EXT is 1 or higher. Such an extension
specification takes priority over EXTENSION.
EXTENSION = Either the number of the FITS extension, starting with the
first extension after the primary data unit being one; or a
character string containing the value of EXTNAME to search
for.
Opt. Inputs :
None.
Outputs :
UNIT = Logical unit number of the opened file.
Opt. Outputs:
HEADER = String array containing the FITS binary table extension
header.
Keywords :
NO_TDIM = If set, then any TDIMn keywords found in the header are
ignored.
ACCESS = A scalar string describing access privileges as
one of READ ('R') or UPDATE ('RW').
DEFAULT: 'R'
REOPEN = If set, UNIT must be an already-opened file unit.
FXBOPEN will treat the file as a FITS file.
ERRMSG = If defined and passed, then any error messages will be
returned to the user in this parameter rather than
depending on the MESSAGE routine in IDL. If no errors are
encountered, then a null string is returned. In order to
use this feature, ERRMSG must be defined first, e.g.
ERRMSG = ''
FXBOPEN, ERRMSG=ERRMSG, ...
IF ERRMSG NE '' THEN ...
Calls :
FXBFINDLUN, FXBPARSE, FXHREAD, FXPAR
Common :
Uses common block FXBINTABLE--see "fxbintable.pro" for more
information.
Restrictions:
The file must be a valid FITS file.
Side effects:
None.
Category :
Data Handling, I/O, FITS, Generic.
Prev. Hist. :
W. Thompson, Feb 1992, based on READFITS by J. Woffard and W. Landsman.
W. Thompson, Feb 1992, changed from function to procedure.
W. Thompson, June 1992, fixed up error handling.
Written :
William Thompson, GSFC, February 1992.
Modified :
Version 1, William Thompson, GSFC, 12 April 1993.
Incorporated into CDS library.
Version 2, William Thompson, GSFC, 27 May 1994
Added ERRMSG keyword.
Version 3, William Thompson, GSFC, 21 June 1994
Extended ERRMSG to call to FXBPARSE
Version 4, William Thompson, GSFC, 23 June 1994
Modified so that ERRMSG is not touched if not defined.
Version 4, 23 June 1994
Converted to IDL V5.0 W. Landsman September 1997
Added ACCESS, REOPEN keywords, and FXFILTER package, CM 1999 Feb 03
Added FILENAME[EXT] and FILENAME+EXT extension parsing, CM 1999 Jun 28
Some general tidying, CM 1999 Nov 18
(See goddard/pro/fits_bintable/fxbopen.pro)
NAME:
FXBPARSE
Purpose :
Parse the binary table extension header.
Explanation :
Parses the binary table extension header, and store the information
about the format of the binary table in the FXBINTABLE common
block--called from FXBCREATE and FXBOPEN.
Use :
FXBPARSE, ILUN, UNIT, HEADER
Inputs :
ILUN = Index into the arrays in the FXBINTABLE common block.
HEADER = FITS binary table extension header.
Opt. Inputs :
None.
Outputs :
None.
Opt. Outputs:
None.
Keywords :
NO_TDIM = If set, then any TDIMn keywords found in the header are
ignored.
ERRMSG = If defined and passed, then any error messages will be
returned to the user in this parameter rather than
depending on the MESSAGE routine in IDL. If no errors are
encountered, then a null string is returned. In order to
use this feature, ERRMSG must be defined first, e.g.
ERRMSG = ''
FXBPARSE, ERRMSG=ERRMSG, ...
IF ERRMSG NE '' THEN ...
Calls :
FXBFIND, FXBTDIM, FXBTFORM, FXPAR
Common :
Uses common block FXBINTABLE--see "fxbintable.pro" for more
information.
Restrictions:
None.
Side effects:
Any TDIMn keywords found for bit arrays (format 'X') are ignored, since
the dimensions would refer to bits, not bytes.
Category :
Data Handling, I/O, FITS, Generic.
Prev. Hist. :
William Thompson, Feb. 1992.
William Thompson, Jan. 1993, modified for renamed FXBTFORM and FXBTDIM.
Written :
William Thompson, GSFC, February 1992.
Modified :
Version 1, William Thompson, GSFC, 12 April 1993.
Incorporated into CDS library.
Version 2, William Thompson, GSFC, 21 June 1994
Added ERRMSG keyword.
Version 3, William Thompson, GSFC, 23 June 1994
Modified so that ERRMSG is not touched if not defined.
Version 4, Michael Schubnell, University of Michigan, 22 May 1996
Change N_DIMS from short to long integer.
Version 5, W. Landsman, GSFC, 12 Aug 1997
Use double complex datatype, if needed
Version 6, W. Landsman GSFC 30 Aug 1997
Version :
Version 6, 31 Aug 1997
Converted to IDL V5.0 W. Landsman September 1997
Optimized FXPAR; call FXBFIND for speed, CM 1999 Nov 18
Modify DHEAP(ILUN) when opening table now, CM 2000 Feb 22
Default the TZERO/TSCAL tables to double instead of single
precision floating point, CM 2003 Nov 23
(See goddard/pro/fits_bintable/fxbparse.pro)
NAME: FXBREAD Purpose : Read a data array from a disk FITS binary table file. Explanation : Each call to FXBREAD will read the data from one column and one row from the FITS data file, which should already have been opened by FXBOPEN. One needs to call this routine for every column and every row in the binary table. FXBCLOSE will then close the FITS data file. Use : FXBREAD, UNIT, DATA, COL [, ROW ] Inputs : UNIT = Logical unit number corresponding to the file containing the binary table. COL = Column in the binary table to read data from, either as a