IDL Help for Goddard Utilities
Overview
This page was created by the IDL library routine
make_html_help
(from version v5_5_8 of
idlutils). For more information on this routine,
refer to the IDL Online Help Navigator or type:
IDL> ? make_html_help
at the IDL command line prompt.
This file is based on version v5_5_8 of idlutils.
Last modified: Thu Feb 28 12:12:58 2013.
List of Routines
- AD2XY : Compute X and Y from native coordinates and a FITS astrometry structure
- ADSTRING : Return RA and Dec as character string(s) in sexigesimal format.
- ADXY : Use a FITS header to convert astronomical to pixel coordinates
- AIRTOVAC : Convert air wavelengths to vacuum wavelengths
- AITOFF : Convert longitude, latitude to X,Y using an AITOFF projection.
- AITOFF_GRID : Produce an overlay of latitude and longitude lines over a plot or image
- ALTAZ2HADEC : Convert Horizon (Alt-Az) coordinates to Hour Angle and Declination.
- AL_LEGEND : Create an annotation legend for a plot.
- APER : Compute concentric aperture photometry (adapted from DAOPHOT)
- ARCBAR : Draw an arc bar on an image showing the astronomical plate scale
- ARROWS : To display "weathervane" directional arrows on an astronomical image
- ASINH : Return the inverse hyperbolic sine of the argument
- ASPECT :
- ASTDISP : Print astronomical and pixel coordinates in a standard format
- ASTRO : Interactive utility for precession and coordinate conversion.
- ASTROLIB : Add the non-standard system variables used by the IDL Astronomy Library
- AUTOHIST : Draw a histogram using automatic bin-sizing.
- AVG : Return the average value of an array, or 1 dimension of an array
- BARYVEL : Calculates heliocentric and barycentric velocity components of Earth.
- BITGET :
- BIWEIGHT_MEAN : Calculate the center and dispersion (like mean and sigma) of a
- BLINK : To allow the user to alternatively examine two or more windows within
- BLKSHIFT : Shift a block of data to a new position in a file (possibly overlapping)
- BOOST_ARRAY : Append one array onto a destination array
- BOXAVE : Box-average a 1 or 2 dimensional array.
- BPRECESS : Precess positions from J2000.0 (FK5) to B1950.0 (FK4)
- BREAK_PATH() : Breaks up a path string into its component directories.
- BSORT : Function to sort data into ascending order, like a simple bubble sort.
- CALZ_UNRED : Deredden a galaxy spectrum using the Calzetti et al. (2000) recipe
- CCM_UNRED : Deredden a flux vector using the CCM 1989 parameterization
- CENTERTLB :
- CGAXIS :
- CGCOLORFILL :
- CGCOLOR[1] :
- CGCOLOR[2] :
- CGCOLOR[3] :
- CGCONTOUR :
- CGCONTROL :
- CGDEFAULTCOLOR :
- CGDEFCHARSIZE :
- CGDISPLAY :
- CGERASE :
- CGPICKFILE :
- CGPLOT :
- CGPLOTS :
- CGPS2PDF :
- CGQUERY :
- CGSET :
- CGSHOW :
- CGSNAPSHOT :
- CGTEXT :
- CGWINDOW[1] :
- CGWINDOW[2] :
- CGWINDOW_GETDEFS :
- CGWINDOW_SETDEFS :
- CHECKSUM32 : To compute the 32bit checksum of an array (ones-complement arithmetic)
- CHECK_FITS : Check that keywords in a FITS header array match the associated data
- CIC : Interpolate an irregularly sampled field using Cloud in Cell method
- CIRRANGE : To force an angle into the range 0 <= ang < 360.
- CLEANPLOT : Reset all plotting system variables (!P,!X,!Y,!Z) to their default values
- CNTRD : Compute the centroid of a star using a derivative search
- COLOR24 :
- COLORSAREIDENTICAL :
- COMPARE_STRUCT : Compare all matching tag names and return differences
- CONCAT_DIR() : To concatenate directory and file names for current OS.
- CONS_DEC : Obtain the X and Y coordinates of a line of constant declination
- CONS_RA : Obtain the X and Y coordinates of a line of constant right ascension
- CONVERT_TO_TYPE :
- CONVOLVE : Convolution of an image with a Point Spread Function (PSF)
- COPY_STRUCT : Copy all fields with matching tag names from one structure to another
- COPY_STRUCT_INX : Copy matching tags & specified indices from one structure to another
- CORREL_IMAGES : Compute the 2-D cross-correlation function of two images
- CORREL_OPTIMIZE : Find the optimal (x,y) pixel offset of image_B relative to image_A
- CORRMAT_ANALYZE : Find the optimal (x,y) offset to maximize correlation of 2 images
- COSMO_PARAM : Derive full set of cosmological density parameters from a partial set
- COYOTEGRAPHIC :
- CO_ABERRATION : Calculate changes to Ra and Dec due to "the effect of aberration",
- CO_NUTATE : Calculate changes in RA and Dec due to nutation of the Earth's rotation
- CO_REFRACT() : Calculate correction to altitude due to atmospheric refraction.
- CREATE_STRUCT : Create an IDL structure from a list of tag names and dimensions
- CR_REJECT : General, iterative cosmic ray rejection using two or more input images.
- CSPLINE : Function to evaluate a natural cubic spline at specified data points
- CT2LST : To convert from Local Civil Time to Local Mean Sidereal Time.
- CURS : Selects an X windows cursor shape
- CURVAL : Cursor controlled display of image intensities and astronomical coords
- DAOERF : Calulates the intensity, and derivatives, of a 2-d Gaussian PSF
- DAO_VALUE : Returns the value of a DAOPHOT point-spread function at a set of points.
- DATE : Convert day-of-year to a DD-MMM-YYYY string
- DATE_CONV : Procedure to perform conversion of dates to one of three possible formats.
- DAYCNV : Converts Julian dates to Gregorian calendar dates
- DBBUILD : Build a database by appending new values for every item.
- DBCIRCLE : Find sources in a database within specified radius of specified center
- DBCLOSE : procedure to close a data base file
- DBCOMPARE : Display two entries in an IDL database side by side in a column format
- DBCREATE : Create a new data base (.dbf), index (.dbx) or description (.dbh) file
- DBDELETE : Deletes specified entries from data base
- DBEDIT : Interactively edit specified fields in an IDL database.
- DBEDIT_BASIC : Subroutine of DBEDIT_BASIC to edit a database on a dumb terminal.
- DBEXT : Extract values of up to 12 items from an IDL database
- DBEXT_DBF : Subroutine of DBEXT to extract values of up to 18 items from a database
- DBEXT_IND : routine to read a indexed item values from index file
- DBFIND() : Search data base for entries with specified characteristics
- DBFIND_ENTRY : Subroutine of DBFIND to perform an entry number search
- DBFIND_SORT : Subroutine of DBFIND to perform a search using sorted values
- DBFPARSE : Parse the search string supplied to DBFIND. Not a standalone routine
- DBGET : Find entry numbers which contain specified values of a given item.
- DBHELP : List available databases or items in the currently open database
- DBINDEX : Procedure to create index file for data base
- DBINDEX_BLK : Subroutine of DBINDEX to create associated variable of correct datatype
- DBMATCH : Find the entry number in a database for each element of item values
- DBOPEN : Routine to open an IDL database
- DBPRINT : Procedure to print specified items from a list of database entries
- DBPUT : Procedure to place a new value for a specified item into
- DBRD : procedure to read an entry from a data base file or from
- DBSEARCH : Subroutine of DBFIND() to search a vector for specified values
- DBSORT : Routine to sort list of entries in data base
- DBTARGET : Find sources in a database within specified radius of specified target
- DBTITLE : function to create title line for routine dbprint
- DBUPDATE : Update columns of data in a database -- inverse of DBEXT
- DBVAL : procedure to extract value(s) of the specified item from
- DBWRT : procedure to update or add a new entry to a data base
- DBXPUT : routine to replace value of an item in a data base entry
- DBXVAL : Quickly return a value of the specified item number
- DB_ENT2EXT : Convert a database entry to external (IEEE) data format
- DB_ENT2HOST : Converts a database entry from external data format to host format.
- DB_INFO : Function to obtain information on opened data base file(s)
- DB_ITEM : Returns the item numbers and other info. for an item name.
- DB_ITEM_INFO : routine to return information on selected item(s) in the opened
- DB_OR : Combine two vectors of entry numbers, removing duplicate values.
- DB_TITLES : Print database name and title. Called by DBHELP
- DECOMPOSEDCOLOR :
- DELVARX : Delete up to 10 variables for memory management (can call from routines)
- DEREDD : Deredden stellar Stromgren parameters given for a value of E(b-y)
- DETABIFY : Replaces tabs in character strings with appropriate number of spaces
- DIST_CIRCLE : Form a square array where each value is its distance to a given center.
- DIST_ELLIPSE : Create a mask array useful for elliptical aperture photemetry
- ECI2GEO : Convert Earth-centered inertial coordinates to geographic spherical coords
- EQ2HOR : Convert celestial (ra-dec) coords to local horizon coords (alt-az).
- EQPOLE : Convert RA and Dec to X,Y using an equal-area polar projection.
- EQPOLE_GRID : Produce an equal area polar projection grid overlay
- ERROR_MESSAGE :
- EULER : Transform between Galactic, celestial, and ecliptic coordinates.
- EXPAND_TILDE() : Expand tilde in UNIX directory names
- EXTAST : Extract ASTrometry parameters from a FITS image header.
- EXTGRP : Extract the group parameter information out of SXREAD output
- EXTRAP : This procedure fills in the ends of a one-dimensional array from
- FACTOR : Find prime factors of a given number.
- FDECOMP : Routine to decompose file name(s) for any operating system.
- FILTER_IMAGE : Identical to MEDIAN or SMOOTH but handle edges and allow iterations.
- FIND : Find positive brightness perturbations (i.e stars) in an image
- FINDPRO : Find all locations of a procedure in the IDL !PATH
- FIND_ALL_DIR() : Finds all directories under a specified directory.
- FIND_WITH_DEF() : Searches for files with a default path and extension.
- FITEXY : Best straight-line fit to data with errors in both coordinates
- FITSDIR : Display selected FITS keywords from the headers of FITS files.
- FITSRGB_TO_TIFF : Combine separate red, green, and blue FITS images into TIFF format
- FITS_ADD_CHECKSUM : Add or update the CHECKSUM and DATASUM keywords in a FITS header
- FITS_ASCII_ENCODE() : Encode an unsigned longword as an ASCII string to insert in a FITS header
- FITS_CD_FIX : Update obsolete representations of the CD matrix in a FITS header
- FITS_CLOSE :
- FITS_HELP : To print a summary of the primary data units and extensions in a
- FITS_INFO : Provide information about the contents of a FITS file
- FITS_OPEN : Opens a FITS (Flexible Image Transport System) data file.
- FITS_READ : To read a FITS file.
- FITS_TEST_CHECKSUM() : Verify the values of the CHECKSUM and DATASUM keywords in a FITS header
- FITS_WRITE : To write a FITS primary data unit or extension.
- FIXPS :
- FLEGENDRE : Compute the first M terms in a Legendre polynomial expansion.
- FLUX2MAG : Convert from flux (ergs/s/cm^2/A) to magnitudes.
- FM_UNRED : Deredden a flux vector using the Fitzpatrick (1999) parameterization
- FORPRINT : Print a set of vectors by looping over each index value.
- FPUFIX :
- FREBIN : Shrink or expand the size of an array an arbitary amount using interpolation
- FSC_BASE_FILENAME :
- FSC_DROPLIST :
- FSC_FIELD :
- FSC_FILESELECT :
- FSC_PLOTWINDOW :
- FSC_PSCONFIG__DEFINE :
- FSC_PS_SETUP__DEFINE :
- FTAB_DELROW : Delete rows of data from a FITS ASCII or binary table extension
- FTAB_EXT : Routine to extract columns from a FITS (binary or ASCII) table.
- FTAB_HELP : Describe the columns of a FITS binary or ASCII table extension(s).
- FTAB_PRINT : Print the contents of a FITS (binary or ASCII) table extension.
- FTADDCOL : Routine to add a field to a FITS ASCII table
- FTCREATE : Create a new (blank) FITS ASCII table and header with specified size.
- FTDELCOL : Delete a column of data from a FITS table
- FTDELROW : Delete a row of data from a FITS table
- FTGET : Function to return value(s) from specified column in a FITS ASCII table
- FTHELP : Routine to print a description of a FITS ASCII table extension
- FTHMOD : Procedure to modify header information for a specified field
- FTINFO : Return an informational structure from a FITS ASCII table header.
- FTKEEPROW : Subscripts (and reorders) a FITS table. A companion piece to FTDELROW.
- FTPRINT : Procedure to print specified columns and rows of a FITS table
- FTPUT : Procedure to add or update a field in an FITS ASCII table
- FTSIZE : Procedure to return the size of a FITS ASCII table.
- FTSORT : Sort a FITS ASCII table according to a specified field
- FXADDPAR : Add or modify a parameter in a FITS header array.
- FXBADDCOL : Adds a column to a binary table extension.
- FXBCLOSE : Close a FITS binary table extension opened for read.
- FXBCOLNUM() : Returns a binary table column number.
- FXBCREATE : Open a new binary table at the end of a FITS file.
- FXBDIMEN() : Returns the dimensions for a column in a FITS binary table.
- FXBFIND : Find column keywords in a FITS binary table header.
- FXBFINDLUN() : Find logical unit number UNIT in FXBINTABLE common block.
- FXBFINISH : Close a FITS binary table extension file opened for write.
- FXBGROW : Increase the number of rows in a binary table.
- FXBHEADER() : Returns the header of an open FITS binary table.
- FXBHELP : Prints short description of columns in a FITS binary table.
- FXBHMAKE : Create basic FITS binary table extension (BINTABLE) header.
- FXBINTABLE : Common block FXBINTABLE used by "FXB" routines.
- FXBISOPEN() : Returns true if UNIT points to an open FITS binary table.
- FXBOPEN : Open binary table extension in a disk FITS file for reading or updating
- FXBPARSE : Parse the binary table extension header.
- FXBREAD : Read a data array from a disk FITS binary table file.
- FXBREADM : Read multiple columns/rows from a disk FITS binary table file.
- FXBSTATE() : Returns the state of a FITS binary table.
- FXBTDIM() : Parse TDIM-like kwywords.
- FXBTFORM : Returns information about FITS binary table columns.
- FXBWRITE : Write a binary data array to a disk FITS binary table file.
- FXBWRITM : Write multiple columns/rows to a disk FITS binary table file.
- FXFINDEND : Find the end of a FITS file.
- FXHCLEAN : Removes required keywords from FITS header.
- FXHMAKE : Create a basic FITS header array.
- FXHMODIFY : Modify a FITS header in a file on disk.
- FXHREAD : Reads a FITS header from an opened disk file.
- FXMOVE : Skip to a specified extension number or name in a FITS file
- FXPAR() : Obtain the value of a parameter in a FITS header.
- FXPARPOS() : Finds position to insert record into FITS header.
- FXPOSIT : Return the unit number of a FITS file positioned at specified extension
- FXREAD : Read basic FITS files.
- FXWRITE : Write a disk FITS file.
- F_FORMAT : Choose a nice floating format for displaying an array of REAL data.
- GALAGE : Determine the age of a galaxy given its redshift and a formation redshift.
- GAL_FLAT : Transforms the image of a galaxy so that the galaxy appears face-on
- GAL_UVW : Calculate the Galactic space velocity (U,V,W) of star
- GAUSSIAN : Compute the 1-d Gaussian function and optionally the derivative
- GCIRC : Computes rigorous great circle arc distances.
- GCNTRD : Compute the stellar centroid by Gaussian fits to marginal X,Y, sums
- GEO2ECI : Convert geographic spherical coordinates to Earth-centered inertial coords
- GEO2GEODETIC : Convert from geographic/planetographic to geodetic coordinates
- GEO2MAG() : Convert from geographic to geomagnetic coordinates
- GEODETIC2GEO : Convert from geodetic (or planetodetic) to geographic coordinates
- GETDECOMPOSEDSTATE :
- GETOPT : Convert a string supplied by the user into a valid scalar or vector
- GETPRIMARYSCREENSIZE :
- GETPRO : Search !PATH for a procedure, and copy into user's working directory
- GETPSF : To generate a point-spread function (PSF) from observed stars.
- GETROT : Return the rotation and plate scale of an image from its FITS header
- GETTOK : Retrieve the first part of a (vector) string up to a specified character
- GETWRD : Return the n'th word from a text string.
- GET_COORDS : Converts a string with angular coordinates to floating point values.
- GET_DATE : Return the (current) UTC date in CCYY-MM-DD format for FITS headers
- GET_EQUINOX : Return the equinox value from a FITS header.
- GET_JULDATE : Return the current Julian Date
- GLACTC : Convert between celestial and Galactic (or Supergalactic) coordinates.
- GLACTC_PM : Convert between celestial and Galactic (or Supergalactic) proper
- GROUP : Assign stars with non-overlapping PSF profiles into distinct groups
- GSSSADXY : Converts RA and DEC (J2000) to (X,Y) for an STScI GuideStar image.
- GSSSEXTAST : Extract IDL astrometry structure from a ST Guide Star Survey FITS header
- GSSSXYAD : Convert (X,Y) coordinates in a STScI Guide Star image to RA and Dec
- GSSS_STDAST : Insert the closest tangent projection astrometry into an GSSS Image
- HADEC2ALTAZ : Converts Hour Angle and Declination to Horizon (alt-az) coordinates.
- HASIMAGEMAGICK :
- HASTROM : Transformation of an image to align it with a reference image
- HBOXAVE : Box average an image array and update the FITS header array
- HCONGRID : CONGRID an image and update astrometry in a FITS header
- HEADFITS : Read a FITS (primary or extension) header into a string array.
- HELIO : Compute (low-precision) heliocentric coordinates for the planets.
- HELIO_JD : Convert geocentric (reduced) Julian date to heliocentric Julian date
- HELIO_RV : Return the heliocentric radial velocity of a spectroscopic binary
- HERMITE : To compute Hermite spline interpolation of a tabulated function.
- HEULER : Change the coordinate system of a FITS header or astrometry structure
- HEXTRACT : Extract a subimage from an array and update astrometry in FITS header
- HGREP : Find a substring in a FITS header (or any other string array)
- HISTOGAUSS : Histograms data and overlays it with a Gaussian. Draws the mean, sigma,
- HOR2EQ : Converts local horizon coords (alt-az) of something to equatorial (ra-dec).
- HOST_TO_IEEE : Translate an IDL variable from host to IEEE representation
- HPRECESS : Precess the astrometry in a FITS header to a new equinox
- HPRINT : Display a FITS header (or other string array)
- HREBIN : Expand or contract a FITS image using (F)REBIN and update the header
- HREVERSE : Reverse an image about either dimension and update FITS astrometry
- HROT : Rotate an image and create new FITS header with updated astrometry.
- HROTATE : Apply the IDL ROTATE function and update astrometry in a FITS header
- IEEE_TO_HOST : Translate an IDL variable from IEEE-754 to host representation
- IMAGE_DIMENSIONS :
- IMCONTOUR : Make a contour plot labeled with astronomical coordinates.
- IMDBASE : Find the sources in an IDL database that are located on a given image.
- IMF : Compute an N-component power-law logarithmic initial mass function
- IMLIST : Display pixel values on an image surrounding a specified X,Y center.
- IRAFDIR : Provide a brief description of the IRAF images on a directory
- IRAFRD : Read an IRAF (.imh) file into IDL image and header arrays.
- IRAFWRT : Write IDL data in IRAF (OIF) format (.imh and .pix files).
- ISARRAY : Tests if the argument is an array.
- ISMEUV : Compute the continuum interstellar EUV optical depth
- IS_IEEE_BIG : Determine if the current machine uses IEEE, big-endian numbers.
- JDCNV : Converts Gregorian dates to Julian days
- JPLEPHINTERP : Interpolate position and motion of planetary bodies (JPL Ephemeris)
- JPLEPHREAD : Open and read JPL DE200 or DE405 Ephemeride FITS File
- JPLEPHTEST : Test JPLEPHTEST with JPL test data set
- JPRECESS : Precess astronomical coordinates from B1950 to J2000
- JULDATE : Convert from calendar to Reduced Julian Date
- KSONE : Compute the one-sided Kolmogorov-Smirnov statistic
- KSTWO : Return the two-sided Kolmogorov-Smirnov statistic
- KUIPERONE : Compute the one-sided Kuiper statistic (invariant Kolmogorov-Smirnov)
- KUIPERTWO : Compute the two-sided Kuiper statistic (invariant Kolmogorov-Smirnov)
- LEGEND : Create an annotation legend for a plot.
- LEGENDTEST : Demo program to show capabilities of the legend procedure.
- LINEID_PLOT : Plot spectrum with specified line identifications annotated at the
- LINKEDLIST :
- LINMIX_ERR : Bayesian approach to linear regression with errors in both X and Y
- LINTERP : Linearly interpolate tabulated 1-d data from one grid to a new one.
- LIST_WITH_PATH : Search for files in a specified directory path.
- LSF_ROTATE: : Create a 1-d convolution kernel to broaden a spectrum from a rotating star
- LUMDIST : Calculate luminosity distance (in Mpc) of an object given its redshift
- MAG2FLUX : Convert from magnitudes to flux (ergs/s/cm^2/A).
- MAG2GEO() : Convert from geomagnetic to geographic coordinates
- MAKE_2D : Change from 1-d indexing to 2-d indexing
- MAKE_ASTR : Build an astrometry structure from input parameter values
- MATCH : Routine to match values in two vectors.
- MATCH2 : Routine to cross-match values in two vectors (including non-matches)
- MAX_ENTROPY : Deconvolution of data by Maximum Entropy analysis, given the PSF
- MAX_LIKELIHOOD : Maximum likelihood deconvolution of an image or a spectrum.
- MEANCLIP : Computes an iteratively sigma-clipped mean on a data set
- MEDARR : Compute the median at each pixel across a set of 2-d images
- MEDSMOOTH : Median smoothing of a vector, including points near its ends.
- MINF_BRACKET : Bracket a local minimum of a 1-D function with 3 points,
- MINF_CONJ_GRAD : Find the local minimum of a scalar function using conjugate gradient
- MINF_PARABOLIC : Minimize a function using Brent's method with parabolic interpolation
- MINF_PARABOL_D : Minimize a function using a modified Brent's method with derivatives
- MINMAX : Return a 2 element array giving the minimum and maximum of an array
- MKHDR : Make a minimal primary (or IMAGE extension) FITS header
- MLINMIX_ERR : Bayesian approach to multiple linear regression with errors in X and Y
- MMM : Estimate the sky background in a stellar contaminated field.
- MODFITS : Modify a FITS file by updating the header and/or data array.
- MONTH_CNV : Convert between a month name and the equivalent number
- MOONPOS : To compute the RA and Dec of the Moon at specified Julian date(s).
- MPHASE : Return the illuminated fraction of the Moon at given Julian date(s)
- MRANDOMN : Function to draw NRAND random deviates from a multivariate normal
- MRDFITS : Read all standard FITS data types into arrays or structures.
- MRD_HREAD : Reads a FITS header from an opened disk file or Unix pipe
- MRD_SKIP : Skip a number of bytes from the current location in a file or a pipe
- MRD_STRUCT : Return a structure as defined in the names and values data.
- MULTINOM : SIMULATE MULTINOMIAL RANDOM VARIABLES
- MULTIPLOT : Create multiple plots with simple control over the gaps between plots.
- MWRFITS : Write all standard FITS data types from input arrays or structures.
- NGP : Interpolate an irregularly sampled field using Nearest Grid Point
- NINT : Nearest integer function.
- NSTAR : Simultaneous point spread function fitting (adapted from DAOPHOT)
- NULLTRIM : Trim a string of all characters after and including the first null
- NUTATE : Return the nutation in longitude and obliquity for a given Julian date
- N_BYTES() : To return the total number of bytes in data element
- OBSERVATORY : Return longitude, latitude, altitude & time zones of an observatory
- ONE_ARROW : Draws an arrow labeled with a single character on the current device
- ONE_RAY : Draw a line with a specified starting point, length, and angle
- OPLOTERROR : Over-plot data points with accompanying X or Y error bars.
- ORDINAL : Convert an integer to a correct English ordinal string:
- PARTVELVEC : Plot the velocity vectors of particles at their positions
- PCA : Carry out a Principal Components Analysis (Karhunen-Loeve Transform)
- PENT : Return the information entropy of a time series
- PICKCOLORNAME :
- PIXCOLOR : Assign colors to specified pixel values in a color lookup table
- PIXWT : Circle-rectangle overlap area computation.
- PKFIT : Subroutine of GETPSF to perform a one-star least-squares fit
- PLANCK() : To calculate the Planck function in units of ergs/cm2/s/A
- PLANET_COORDS : Find low or high precision RA and DEC for the planets given a date
- PLOTERROR : Plot data points with accompanying X or Y error bars.
- PLOTHIST : Plot the histogram of an array with the corresponding abcissa.
- PLOTSYM : Define useful plotting symbols not in the standard !PSYM definitions.
- POIDEV : Generate a Poisson random deviate
- POLINT : Interpolate a set of N points by fitting a polynomial of degree N-1
- POLREC : Convert 2-d polar coordinates to rectangular coordinates.
- POLYLEG : Evaluate a Legendre polynomial with specified coefficients.
- POLY_SMOOTH : Apply a least-squares (Savitzky-Golay) polynomial smoothing filter
- POSANG : Computes rigorous position angle of source 2 relative to source 1
- POSITIVITY : Map an image uniquely and smoothly into all positive values.
- PRECESS : Precess coordinates from EQUINOX1 to EQUINOX2.
- PRECESS_CD : Precess the CD (coordinate description) matrix from a FITS header
- PRECESS_XYZ : Precess equatorial geocentric rectangular coordinates.
- PREMAT : Return the precession matrix needed to go from EQUINOX1 to EQUINOX2.
- PRIME : Return an array with the specified number of prime numbers.
- PRINT_STRUCT : Print the tag values of an array of structures in nice column format.
- PROB_KS : Return the significance of the Kolmogoroff-Smirnov statistic
- PROB_KUIPER : Return the significance of the Kuiper statistic
- PROGRAMROOTDIR :
- PSCONFIG :
- PSF_GAUSSIAN : Create a 1-d, 2-d, or 3-d Gaussian with specified FWHM, center
- PSWINDOW :
- PS_BACKGROUND :
- PS_END :
- PS_START :
- PUTAST : Put WCS astrometry parameters into a given FITS header.
- QDCB_GRID : Produce an overlay of latitude and longitude lines over a plot or image
- QGET_STRING : To get a string from the keyboard without echoing it to the screen.
- QSIMP : Integrate using Simpson's rule to specified accuracy.
- QTRAP : Integrate using trapezoidal rule to specified accuracy.
- QUADTERP : Quadratic interpolation of X,Y vectors onto a new X grid
- QUERYDSS : Query the digital sky survey (DSS) on-line at the STSCI (or ESO) server
- QUERYGSC : Query the Guide Star Catalog (GSC V2.3.2) at STScI by position
- QUERYSIMBAD : Query the SIMBAD/NED/Vizier astronomical name resolver to obtain coordinates
- QUERYVIZIER : Query any catalog in the Vizier database by position
- RADEC : To convert RA and Dec from decimal to sexigesimal units.
- RANDOMCHI : GENERATE CHI-SQUARE DISTRIBUTED RANDOM VARIABLES.
- RANDOMDIR : GENERATE DIRICHLET-DISTRIBUTED RANDOM VARIABLES.
- RANDOMGAM : GENERATE GAMMA-DISTRIBUTED RANDOM VARIABLES.
- RANDOMP : Generates an array of random numbers distributed as a power law.
- RANDOMWISH :
- RDFITS_STRUCT : Read an entire FITS file (all extensions) into a single IDL structure.
- RDFLOAT : Quickly read a numeric ASCII data file into IDL floating/double vectors.
- RDPLOT : Like CURSOR but with a full-screen cursor and continuous readout option
- RDPSF : Read the FITS file created by GETPSF in the DAOPHOT sequence
- READCOL : Read a free-format ASCII file with columns of data into IDL vectors
- READFITS : Read a FITS file into IDL data and header variables.
- READFMT : Quickly read a fixed format ASCII data file into IDL variables.
- READ_FMR : Read a journal (ApJ, AJ) machine-readable table into IDL
- READ_KEY : To read a keystroke and return its ASCII equivalent
- RECPOL : Convert 2-d rectangular coordinates to polar coordinates.
- REMCHAR : Remove all appearances of character (char) from string (st)
- REMOVE : Contract a vector or up to 25 vectors by removing specified elements
- REM_DUP : Function to remove duplicate values from a vector.
- REPCHR : Replace all occurrences of one character with another in a text string.
- REPSTR : Replace all occurences of one substring by another.
- RESISTANT_MEAN : Outlier-resistant determination of the mean and standard deviation.
- RINTER : Cubic interpolation of an image at a set of reference points.
- ROBUST_LINEFIT : An outlier-resistant two-variable linear regression.
- ROBUST_POLY_FIT : An outlier-resistant polynomial fit.
- ROBUST_SIGMA : Calculate a resistant estimate of the dispersion of a distribution.
- ROB_CHECKFIT : Used by ROBUST_... routines to determine the quality of a fit and to
- SCALE_VECTOR :
- SELECT_W : Create a non-exclusive widget menu of items
- SETDECOMPOSEDSTATE :
- SETDEFAULTVALUE :
- SIGMA_FILTER : Replace pixels more than a specified pixels deviant from its neighbors
- SIGRANGE() : Selects the most significant data range in an image.
- SIXLIN : Compute linear regression coefficients by six different methods.
- SIXTY() : Converts a decimal number to sexigesimal.
- SKY : Determine the sky level in an image
- SKYADJ_CUBE : Sky adjust the planes of a datacube.
- SPEC_DIR() : Complete a file specification by appending the default disk or directory
- SPHDIST : Angular distance between points on a sphere.
- SRCOR : Correlate the source positions found on two lists.
- STARAST : Compute astrometric solution using positions of 2 or 3 reference stars
- STORE_ARRAY : Insert array INSERT into the array DESTINATION
- STRCOMPRESS2 : Remove blanks around specified characters in a string
- STRN : Convert a number to a string and remove padded blanks.
- STRNUMBER() : Function to determine if a string is a valid numeric value.
- STR_INDEX() : Get indices of a substring (SUBSTR) in string.
- STR_SIZE :
- ST_DISKREAD : Read HST FITS formatted disk files and reconstruct GEIS (STSDAS) files.
- ST_DISK_DATA : Routine to read next header and data array from an HST FITS disk file.
- ST_DISK_GEIS : Routine to construct GEIS files from ST FITS disk files.
- ST_DISK_TABLE : Routine to read FITS table from an ST fits on disk.
- SUBSTAR : Subtract a scaled point spread function at specified star position(s).
- SUNPOS : To compute the RA and Dec of the Sun at a given date.
- SUNSYMBOL : Return the Sun symbol as a subscripted postscript character string
- SXADDHIST : Procedure to add HISTORY (or COMMENT) line(s) to a FITS header
- SXADDPAR : Add or modify a parameter in a FITS header array.
- SXDELPAR : Procedure to delete a keyword parameter(s) from a FITS header
- SXGINFO : Return information on all group parameters in an STSDAS header.
- SXGPAR : Obtain group parameter value in SDAS/FITS file
- SXGREAD : Read group parameters from a Space Telescope STSDAS image file
- SXHCOPY : Copies selected portions of one header to another
- SXHMAKE : Create a basic STSDAS header file from an IDL data array
- SXHREAD : Procedure to read a STSDAS header from disk.
- SXHWRITE : Procedure to write an STSDAS or FITS header to disk as a *.hhh file.
- SXMAKE : Create a basic ST header file from an IDL array prior to writing data.
- SXOPEN : Open a Space Telescope formatted (STSDAS) header file.
- SXPAR : Obtain the value of a parameter in a FITS header
- SXREAD : Read a Space Telescope STSDAS image file
- SXWRITE : Write a group of data and parameters in ST format
- SYMCAT :
- TABINV : To find the effective index of a function value in an ordered vector.
- TABLE_APPEND : Routine to append STSDAS tables to create a single table.
- TABLE_CALC : Adds a new table column from a expression using existing columns
- TABLE_DELETE : Delete specified rows from an STSDAS table
- TABLE_EXT : Routine to extract columns from an STSDAS table
- TABLE_HELP : Procedure to decribe an SDAS table file.
- TABLE_LIST : List the contents of an STSDAS table.
- TABLE_PRINT : Routine to print an stsdas table.
- TABLE_SORT : Procedure to sort an STSDAS table by the specified column
- TAB_ADDCOL : Procedure to add a new column to an existing STSDAS table.
- TAB_COL : Procedure to extract column information from table control block
- TAB_CREATE : Procedure to create a new table file.
- TAB_DEL : Delete specified row(s) from an STSDAS table
- TAB_EXPAND : routine to expand the size of an SDAS table file.
- TAB_FORTOSPP : Procedure to convert a FORTRAN format to an SPP format specfication.
- TAB_MODCOL : Modify column description in a STSDAS table
- TAB_NULL : function to locate null values within a vector of values from
- TAB_NULLROW : Insert null row(s) into a STSDAS table
- TAB_PRINT : Routine to print an stsdas table.
- TAB_PUT : Procedure to place new values into a STSDAS table.
- TAB_READ : Procedure to read an SDAS table file
- TAB_SIZE : Routine to extract the table size from a table control block
- TAB_SORT : Procedure to sort table by the specified column
- TAB_SPPTOFOR : This procedure converts an spp format specification to a normal
- TAB_VAL : Routine to read a column from an SDAS table file
- TAB_WRITE : Routine to write an stsdas table to disk
- TAG_EXIST() : To test whether a tag name exists in a structure.
- TBDELCOL : Delete a column of data from a FITS binary table
- TBDELROW : Delete specified row or rows of data from a FITS binary table
- TBGET : Return value(s) from specified column in a FITS binary table
- TBHELP : Routine to print a description of a FITS binary table header
- TBINFO : Return an informational IDL structure from a FITS binary table header.
- TBPRINT : Procedure to print specified columns & rows of a FITS binary table
- TBSIZE : Procedure to return the size of a FITS binary table.
- TDB2TDT : Relativistic clock corrections due to Earth motion in solar system
- TEN() : Converts a sexigesimal number or string to decimal.
- TENV() : Converts sexigesimal number or string vector to decimal.
- TEXTCLOSE : Close a text outpu file previously opened with TEXTOPEN
- TEXTOPEN : Open a device specified by TEXTOUT with unit !TEXTUNIT
- TICLABELS : Create tic labels for labeling astronomical images.
- TICPOS : Specify distance between tic marks for astronomical coordinate overlays
- TICS : Compute a nice increment between tic marks for astronomical images.
- TIC_ONE : Determine the position of the first tic mark for astronomical images.
- TO_HEX : Translate a non-negative decimal integer to a hexadecimal string
- TRANSFORM_COEFF() : Compute new polynomial coefficients under a linear transformation
- TRAPZD : Compute the nth stage of refinement of an extended trapezoidal rule.
- TSC : Interpolate an irregularly sampled field using a Triangular Shaped Cloud
- TSUM : Trapezoidal summation of the area under a curve.
- TVBOX : Draw a box(es) or rectangle(s) of specified width
- TVCIRCLE : Draw circle(s) of specified radius at specified position(s)
- TVELLIPSE : Draw an ellipse on the current graphics device.
- TVLASER : Prints screen or image array onto a Postscript file or printer.
- TVLIST : Cursor controlled listing of image pixel values in a window.
- T_APER : Driver procedure (for APER) to compute concentric aperture photometry.
- T_FIND : Driver procedure (for FIND) to locate stars in an image.
- T_GETPSF : Driver procedure (for GETPSF) to generate a PSF from isolate stars.
- T_GROUP : Driver procedure (for GROUP) to place stars in non-overlapping groups.
- T_NSTAR : Driver procedure (for NSTAR) for simultaneous PSF fitting.
- T_SUBSTAR : Driver procedure (for SUBSTAR) to subtract scaled PSF values
- UNDEFINE : The purpose of this program is to delete or undefine
- UNZOOM_XY : Converts X, Y position on the image display to the the X,Y position
- UPDATE_DISTORT : Update SIP nonlinear distortion coefficients for a linear transformation
- UVBYBETA : Derive dereddened colors, metallicity, and Teff from Stromgren colors.
- VACTOAIR : Convert vacuum wavelengths to air wavelengths
- VALID_NUM() : Check if a string is a valid number representation.
- VECT : Print a set of numbers as a string with delimiters included
- VSYM : Create "Mongo"-like polygonal plot symbols
- WCSSPH2XY : Convert spherical coordinates to x and y (map) angular coordinates
- WCSXY2SPH : Convert x and y (map) coordinates to spherical coordinates
- WCS_DEMO : Demonstrate the basic capabilities of procedures WCSSPH2XY & WCSXY2SPH
- WCS_GETPOLE : Compute the coordinates of the native pole for a non-polar projection
- WCS_ROTATE : Rotate between standard (e.g. celestial) and native coordinates
- WEBGET() : Use the IDL SOCKET procedure to get data from http servers
- WFPC2_METRIC : Compute the distortion in a WFPC2 image and optionally return coordinates
- WFPC2_READ : Read WFPC2 images in either FITS or STSDAS format into IDL variables.
- WHERENAN() : Find the indices of all big-endian NaN values in an array. OBSOLETE
- WHERE_TAG : Like WHERE but works on structure tag names
- WINDOWAVAILABLE :
- WRITEFITS : Write IDL array and header variables to a disk FITS file.
- XDISPSTR : Display a string array in a text widget with a simple search capability.
- XMEDSKY : Subtract sky from an image as a 1-D function of X
- XY2AD : Compute R.A. and Dec from X and Y and a FITS astrometry structure
- XYAD : Use a FITS header to convert pixel (X,Y) to world coordinates
- XYXY : To use a pair of headers to convert X/Y positions from one frame
- XYZ : Calculate geocentric X,Y, and Z and velocity coordinates of the Sun
- YDN2MD : Convert from year and day number of year to month and day of month.
- YMD2DN : Convert from year, month, day to day number of year.
- ZANG : Determine the angular size of an object as a function of redshift
- ZBRENT : Find the zero of a 1-D function up to specified tolerance.
- ZENPOS : Return the zenith RA and Dec in radians for a given Julian date.
- ZOOM_XY : Converts X, Y position on the image array to the the X,Y position
- ZPARCHECK : Routine to check user parameters to a procedure
Routine Descriptions
AD2XY
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 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 Use CRVAL reference point for non-WCS transformation W.L. March 2007 Use post V6.0 notation W.L. July 2009
(See $IDLUTILS_DIR/goddard/pro/astrom/ad2xy.pro)
ADSTRING
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 ] ) or result = ADSTRING( dec, [ PRECISION= ] 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]. If only DEC is supplied then precision must be supplied as a keyword parameter. If no PRECISION parameter or keyword is passed, a precision of 1 for both RA and DEC is returned to maintain compatibility with past ADSTRING versions. 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 PRECISION = Alternate method of supplying the precision parameter, 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: 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] 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 Fix declination zero values under vector processing W.Landsman Feb 2004 Fix possible problem in leading zero display W. Landsman June 2004 Assume since V5.4, omit fstring() call W. Landsman April 2006 Fix significant bug when round a declination with -1<dec<0 Add PRECISION keyword W.L. Aug 2008 Use formatting for "+" and "0" W. L. May 2009
(See $IDLUTILS_DIR/goddard/pro/astro/adstring.pro)
ADXY
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 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 More informative error message if astrometry missing W.L. Feb 2008 Cosmetic updates W.L. July 2011
(See $IDLUTILS_DIR/goddard/pro/astrom/adxy.pro)
AIRTOVAC
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 relation of Ciddor (1996). CALLING SEQUENCE: AIRTOVAC, WAVE_AIR, [ WAVE_VAC] INPUT/OUTPUT: WAVE_AIR - Wavelength in Angstroms, scalar or vector If this is the only parameter supplied, it will be updated on output to contain double precision vacuum wavelength(s). OPTIONAL OUTPUT: WAVE_VAC - Vacuum wavelength in Angstroms, same number of elements as WAVE_AIR, double precision EXAMPLE: If the air wavelength is W = 6056.125 (a Krypton line), then AIRTOVAC, W yields an vacuum wavelength of W = 6057.8019 METHOD: Formula from Ciddor 1996, Applied Optics 62, 958 NOTES: Take care within 1 A of 2000 A. Wavelengths below 2000 A *in air* are not altered. REVISION HISTORY Written W. Landsman November 1991 Use Ciddor (1996) formula for better accuracy in the infrared Added optional output vector, W Landsman Mar 2011 Iterate for better precision W.L./D. Schlegel Mar 2011
(See $IDLUTILS_DIR/goddard/pro/astro/airtovac.pro)
AITOFF
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 $IDLUTILS_DIR/goddard/pro/astro/aitoff.pro)
AITOFF_GRID
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=, FONT=, _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) FONT = scalar font graphics keyword (-1,0 or 1) for text /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 Allow FONT keyword to be passed to XYOUTS. T. Robishaw Apr. 2006
(See $IDLUTILS_DIR/goddard/pro/astro/aitoff_grid.pro)
ALTAZ2HADEC
NAME: ALTAZ2HADEC PURPOSE: Convert Horizon (Alt-Az) coordinates to Hour Angle and Declination. EXPLANATION:: Can deal with the NCP singularity. Intended mainly to be used by program hor2eq.pro CALLING SEQUENCE: ALTAZ2HADEC, alt, az, lat, ha, dec INPUTS alt - the local apparent altitude, in DEGREES, scalar or vector az - the local apparent azimuth, in DEGREES, scalar or vector, measured EAST of NORTH!!! If you have measured azimuth west-of-south (like the book MEEUS does), convert it to east of north via: az = (az + 180) mod 360 lat - the local geodetic latitude, in DEGREES, scalar or vector. OUTPUTS ha - the local apparent hour angle, in DEGREES. The hour angle is the time that right ascension of 0 hours crosses the local meridian. It is unambiguously defined. dec - the local apparent declination, in DEGREES. EXAMPLE: Arcturus is observed at an apparent altitude of 59d,05m,10s and an azimuth (measured east of north) of 133d,18m,29s while at the latitude of +43.07833 degrees. What are the local hour angle and declination of this object? IDL> altaz2hadec, ten(59,05,10), ten(133,18,29), 43.07833, ha, dec ===> Hour angle ha = 336.683 degrees Declination, dec = 19.1824 degrees The widely available XEPHEM code gets: Hour Angle = 336.683 Declination = 19.1824 REVISION HISTORY: Written Chris O'Dell Univ. of Wisconsin-Madison May 2002
(See $IDLUTILS_DIR/goddard/pro/astro/altaz2hadec.pro)
AL_LEGEND
NAME: AL_LEGEND PURPOSE: Create an annotation legend for a plot. EXPLANATION: This procedure was originally named LEGEND, but a distinct LEGEND() function was introduced into IDL V8.0. Therefore, the original LEGEND procedure in the Astronomy Library is renamed to AL_LEGEND. This procedure makes a legend for a plot. The legend can contain a mixture of symbols, linestyles, Hershey characters (vectorfont), and filled polygons (usersym). A test procedure, legendtest.pro, shows legend's capabilities. Placement of the legend is controlled with keywords like /right, /top, and /center or by using a position keyword for exact placement (position=[x,y]) or via mouse (/position). CALLING SEQUENCE: AL_LEGEND [,items][,keyword options] EXAMPLES: The call: al_legend,['Plus sign','Asterisk','Period'],psym=[1,2,3] produces: ----------------- | | | + Plus sign | | * Asterisk | | . Period | | | ----------------- Each symbol is drawn with a cgPlots command, so they look OK. Other examples are given in optional output keywords. lines = indgen(6) ; for line styles items = 'linestyle '+strtrim(lines,2) ; annotations al_legend,items,linestyle=lines ; vertical legend---upper left items = ['Plus sign','Asterisk','Period'] sym = [1,2,3] al_legend,items,psym=sym ; ditto except using symbols al_legend,items,psym=sym,/horizontal ; horizontal format al_legend,items,psym=sym,box=0 ; sans border al_legend,items,psym=sym,delimiter='=' ; embed '=' betw psym & text al_legend,items,psym=sym,margin=2 ; 2-character margin al_legend,items,psym=sym,position=[x,y] ; upper left in data coords al_legend,items,psym=sym,pos=[x,y],/norm ; upper left in normal coords al_legend,items,psym=sym,pos=[x,y],/device ; upper left in device coords al_legend,items,psym=sym,/position ; interactive position al_legend,items,psym=sym,/right ; at upper right al_legend,items,psym=sym,/bottom ; at lower left al_legenditems,psym=sym,/center ; approximately near center al_legend,items,psym=sym,number=2 ; plot two symbols, not one Plot 3 filled colored squares al_legend,items,/fill,psym=[8,8,8],colors=['red','green','blue'] Another example of the use of AL_LEGEND can be found at http://www.idlcoyote.com/cg_tips/al_legend.php INPUTS: items = text for the items in the legend, a string array. For example, items = ['diamond','asterisk','square']. You can omit items if you don't want any text labels. OPTIONAL INPUT KEYWORDS: linestyle = array of linestyle numbers If linestyle[i] < 0, then omit ith symbol or line to allow a multi-line entry. If linestyle = -99 then text will be left-justified. psym = array of plot symbol numbers. If psym[i] is negative, then a line connects pts for ith item. If psym[i] = 8, then the procedure usersym is called with vertices define in the keyword usersym. If psym[i] = 88, then use the previously defined user symbol. If 11 <= psym[i] <= 46 then David Fanning's function SYMCAT() will be used for additional symbols. (http://www.idlcoyote.com/programs/symcat.pro). Note that PSYM=10 (histogram plot mode) is not allowed since it cannot be used with the cgPlots command. vectorfont = vector-drawn characters for the sym/line column, e.g., ['!9B!3','!9C!3','!9D!3'] produces an open square, a checkmark, and a partial derivative, which might have accompanying items ['BOX','CHECK','PARTIAL DERIVATIVE']. There is no check that !p.font is set properly, e.g., -1 for X and 0 for PostScript. This can produce an error, e.g., use !20 with PostScript and !p.font=0, but allows use of Hershey *AND* PostScript fonts together. N. B.: Choose any of linestyle, psym, and/or vectorfont. If none is present, only the text is output. If more than one is present, all need the same number of elements, and normal plot behaviour occurs. By default, if psym is positive, you get one point so there is no connecting line. If vectorfont[i] = '', then cgPlots is called to make a symbol or a line, but if vectorfont[i] is a non-null string, then cgText is called. /help = flag to print header /horizontal = flag to make the legend horizontal /vertical = flag to make the legend vertical (D=vertical) background_color - color name or number to fill the legend box. Automatically sets /clear. (D = -1) box = flag to include/omit box around the legend (D=include) outline_color = color of box outline (D = !P.color) bthick = thickness of the legend box (D = !P.thick) charsize = just like !p.charsize for plot labels charthick = just like !p.charthick for plot labels clear = flag to clear the box area before drawing the legend colors = array of colors names or numbers for plot symbols/lines See cgCOLOR for list of color names. Default is 'Opposite' If you are using index colors (0-255), then supply color as a byte, integer or string, but not as a long, which will be interpreted as a decomposed color. See http://www.idlcoyote.com/cg_tips/legcolor.php delimiter = embedded character(s) between symbol and text (D=none) font = scalar font graphics keyword (-1,0 or 1) for text linsize = Scale factor for line length (0-1), default = 1 Set to 0 to give a dot, 0.5 give half default line length margin = margin around text measured in characters and lines number = number of plot symbols to plot or length of line (D=1) spacing = line spacing (D=bit more than character height) position = data coordinates of the /top (D) /left (D) of the legend pspacing = psym spacing (D=3 characters) (when number of symbols is greater than 1) textcolors = array of color names or numbers for text. See cgCOLOR for a list of color names. Default is 'Opposite' of background thick = array of line thickness numbers (D = !P.thick), if used, then linestyle must also be specified normal = use normal coordinates for position, not data device = use device coordinates for position, not data /window - if set then send legend to a resizeable graphics window usersym = 2-D array of vertices, cf. usersym in IDL manual. (/USERSYM =square, default is to use existing USERSYM definition) /fill = flag to fill the usersym /left_legend = flag to place legend snug against left side of plot window (D) /right_legend = flag to place legend snug against right side of plot window. If /right,pos=[x,y], then x is position of RHS and text runs right-to-left. /top_legend = flag to place legend snug against top of plot window (D) /bottom = flag to place legend snug against bottom of plot window /top,pos=[x,y] and /bottom,pos=[x,y] produce same positions. If LINESTYLE, PSYM, VECTORFONT, SYMSIZE, THICK, COLORS, or TEXTCOLORS are supplied as scalars, then the scalar value is set for every line or symbol in the legend. Outputs: legend to current plot device OPTIONAL OUTPUT KEYWORDS: corners = 4-element array, like !p.position, of the normalized coords for the box (even if box=0): [llx,lly,urx,ury]. Useful for multi-column or multi-line legends, for example, to make a 2-column legend, you might do the following: c1_items = ['diamond','asterisk','square'] c1_psym = [4,2,6] c2_items = ['solid','dashed','dotted'] c2_line = [0,2,1] al_legend,c1_items,psym=c1_psym,corners=c1,box=0 al_legend,c2_items,line=c2_line,corners=c2,box=0,pos=[c1[2],c1[3]] c = [c1[0]<c2[0],c1[1]<c2[1],c1[2]>c2[2],c1[3]>c2[3]] cgplots,[c[0],c[0],c[2],c[2],c[0]],[c[1],c[3],c[3],c[1],c[1]],/norm Useful also to place the legend. Here's an automatic way to place the legend in the lower right corner. The difficulty is that the legend's width is unknown until it is plotted. In this example, the legend is plotted twice: the first time in the upper left, the second time in the lower right. al_legend,['1','22','333','4444'],linestyle=indgen(4),corners=corners ; BOGUS LEGEND---FIRST TIME TO REPORT CORNERS xydims = [corners[2]-corners[0],corners[3]-corners[1]] ; SAVE WIDTH AND HEIGHT chdim=[!d.x_ch_size/float(!d.x_size),!d.y_ch_size/float(!d.y_size)] ; DIMENSIONS OF ONE CHARACTER IN NORMALIZED COORDS pos = [!x.window[1]-chdim[0]-xydims[0] $ ,!y.window[0]+chdim[1]+xydims[1]] ; CALCULATE POSITION FOR LOWER RIGHT cgplot,findgen(10) ; SIMPLE PLOT; YOU DO WHATEVER YOU WANT HERE. al_legend,['1','22','333','4444'],linestyle=indgen(4),pos=pos ; REDO THE LEGEND IN LOWER RIGHT CORNER You can modify the pos calculation to place the legend where you want. For example to place it in the upper right: pos = [!x.window[1]-chdim[0]-xydims[0],!y.window[1]-xydims[1]] Common blocks: none Procedure: If keyword help is set, call doc_library to print header. See notes in the code. Much of the code deals with placement of the legend. The main problem with placement is not being able to sense the length of a string before it is output. Some crude approximations are used for centering. Restrictions: Here are some things that aren't implemented. - An orientation keyword would allow lines at angles in the legend. - An array of usersyms would be nice---simple change. - An order option to interchange symbols and text might be nice. - Somebody might like double boxes, e.g., with box = 2. - Another feature might be a continuous bar with ticks and text. - There are no guards to avoid writing outside the plot area. - There is no provision for multi-line text, e.g., '1st line!c2nd line' Sensing !c would be easy, but !c isn't implemented for PostScript. A better way might be to simply output the 2nd line as another item but without any accompanying symbol or linestyle. A flag to omit the symbol and linestyle is linestyle[i] = -1. - There is no ability to make a title line containing any of titles for the legend, for the symbols, or for the text. Side Effects: Modification history: write, 24-25 Aug 92, F K Knight (knight@ll.mit.edu) allow omission of items or omission of both psym and linestyle, add corners keyword to facilitate multi-column legends, improve place- ment of symbols and text, add guards for unequal size, 26 Aug 92, FKK add linestyle(i)=-1 to suppress a single symbol/line, 27 Aug 92, FKK add keyword vectorfont to allow characters in the sym/line column, 28 Aug 92, FKK add /top, /bottom, /left, /right keywords for automatic placement at the four corners of the plot window. The /right keyword forces right-to-left printing of menu. 18 Jun 93, FKK change default position to data coords and add normal, data, and device keywords, 17 Jan 94, FKK add /center keyword for positioning, but it is not precise because text string lengths cannot be known in advance, 17 Jan 94, FKK add interactive positioning with /position keyword, 17 Jan 94, FKK allow a legend with just text, no plotting symbols. This helps in simply describing a plot or writing assumptions done, 4 Feb 94, FKK added thick, symsize, and clear keyword Feb 96, W. Landsman HSTX David Seed, HR Wallingford, d.seed@hrwallingford.co.uk allow scalar specification of keywords, Mar 96, W. Landsman HSTX added charthick keyword, June 96, W. Landsman HSTX Made keyword names left,right,top,bottom,center longer, Aug 16, 2000, Kim Tolbert Added ability to have regular text lines in addition to plot legend lines in legend. If linestyle is -99 that item is left-justified. Previously, only option for no sym/line was linestyle=-1, but then text was lined up after sym/line column. 10 Oct 2000, Kim Tolbert Make default value of thick = !P.thick W. Landsman Jan. 2001 Don't overwrite existing USERSYM definition W. Landsman Mar. 2002 Added outline_color BT 24 MAY 2004 Pass font keyword to cgText commands. M. Fitzgerald, Sep. 2005 Default spacing, pspacing should be relative to charsize. M. Perrin, July 2007 Don't modify position keyword A. Kimball/ W. Landsman Jul 2007 Small update to Jul 2007 for /NORMAL coords. W. Landsman Aug 2007 Use SYMCAT() plotting symbols for 11<=PSYM<=46 W. Landsman Nov 2009 Make a sharper box edge T. Robishaw/W.Landsman July 2010 Added BTHICK keyword W. Landsman October 2010 Added BACKGROUND_COLOR keyword W. Landsman February 2011 Incorporate Coyote graphics W. Landsman February 2011 Added LINSIZE keyword W.L./V.Gonzalez May 2011 Fixed a small problem with Convert_Coord when the Window keyword is set. David Fanning, May 2011. Fixed problem when /clear and /Window are set J. Bailin/WL May 2011 CGQUERY was called instead of CGCONTROL W.L. June 2011 Fixed typo preventing BTHICK keyword from working W.L. Dec 2011 Remove call to SYMCAT() W.L. Dec 2011 Changed the way the WINDOW keyword adds commands to cgWindow, and now default to BACKGROUND for background color. 1 Feb 2012 David Fanning Allow 1 element SYMSIZE for vector input, WL Apr 2012.
(See $IDLUTILS_DIR/goddard/pro/plot/al_legend.pro)
APER
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, /MEANBACK, MINSKY=, 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: CLIPSIG - if /MEANBACK is set, then this is the number of sigma at which to clip the background. Default=3 CONVERGE_NUM: if /MEANBACK is set then if the proportion of rejected pixels is less than this fraction, the iterations stop. Default=0.02, i.e., iteration stops if fewer than 2% of pixels excluded. /EXACT - By default, APER counts subpixels, but uses a polygon approximation for the intersection of a circular aperture with a square pixel (and normalizes 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. MAXITER if /MEANBACK is set then this is the ceiling on number of clipping iterations of the background. Default=5 /MEANBACK - if set, then the background is computed using the 3 sigma clipped mean (using meanclip.pro) rather than using the mode computed with mmm.pro. This keyword is useful for the Poisson count regime or where contamination is known to be minimal. MINSKY - Integer giving mininum number of sky values to be used with MMM APER will not compute a flux if fewer valid sky elements are within the sky annulus. Default = 20. /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. In this case the negative flux and error are returned. For the case where the source is fainter than the background, APER will return negative fluxes if /FLUX is set, but will otherwise give invalid data (since negative fluxes can't be converted to magnitudes) 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 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 Added MEANBACK keyword W. Landsman October 2005 Correct typo when /EXACT and multiple apertures used. W.L. Dec 2005 Remove VMS-specific code W.L. Sep 2006 Add additional keywords if /MEANBACK is set W.L Nov 2006 Allow negative fluxes if /FLUX is set W.L. Mar 2008 Previous update would crash if first star was out of range W.L. Mar 2008 Fix floating equality test for bad magnitudes W.L./J.van Eyken Jul 2009 Added MINSKY keyword W.L. Dec 2011
(See $IDLUTILS_DIR/goddard/pro/idlphot/aper.pro)
ARCBAR
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=, FONT= ] 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 - name or integer scalar specifying the color to draw the arcbar See cgColor for a list of available color names /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 FONT - scalar font graphics keyword (-1,0 or 1) for text 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(), cgPlot, cgText 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 Added /DATA, /SECONDS keywords W. Landsman July 1998 Use device-independent label offset W. Landsman August 2001 Allow font keyword to be passed. T. Robishaw Apr. 2006 Remove obsolete TVCURSOR command W. Landsman Jul 2007 Use Coyote Graphics W. Landsman February 2011
(See $IDLUTILS_DIR/goddard/pro/astro/arcbar.pro)
ARROWS
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 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 name or number for the arrows and NE letters. See cgCOLOR() for a list of color names. 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 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 $IDLUTILS_DIR/goddard/pro/astro/arrows.pro)
ASINH
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 $IDLUTILS_DIR/goddard/pro/math/asinh.pro)
ASPECT
NAME: ASPECT PURPOSE: This function calculates and returns the normalized position coordinates necessary to put a plot with a specified aspect ratio into the currently active graphics window. It works on the display output window as well as in a PostScript output window. AUTHOR: FANNING SOFTWARE CONSULTING David Fanning, Ph.D. 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com/ CATEGORY: Graphics CALLING SEQUENCE: position = ASPECT(aspectRatio) INPUTS: aspectRatio: A floating point value that is the desired aspect ratio (ratio of heigth to width) of the plot in the current graphics output window. If this parameter is missing, an aspect ratio of 1.0 (a square plot) is assumed. KEYWORD PARAMETERS: MARGIN: The margin around the edges of the plot. The value must be a floating point value between 0.0 and 0.5. It is expressed in normalized coordinate units. The default margin is 0.15. WINDOWASPECT: The aspect ratio of the target window. If not provided, the value is obtained from the current graphics window. OUTPUTS: position: A four-element floating array of normalized coordinates. The order of the elements is [x0, y0, x1, y1], similar to the !P.POSITION system variable or the POSITION keyword on any IDL graphic command. EXAMPLE: To create a plot with an aspect ratio of 1:2 and a margin of 0.10 around the edge of the output window, do this: plotPosition = ASPECT(0.5, Margin=0.10) PLOT, Findgen(11), POSITION=plotPosition Notice this can be done in a single IDL command, like this: PLOT, Findgen(11), POSITION=ASPECT(0.5, Margin=0.10) MODIFICATION HISTORY: Written by: David Fanning, November 1996. Added better error checking, 18 Feb 1997, DWF. Added WindowAspect keyword. 10 Feb 2000. DWF Added double precision tolerance for aspectRatio. 9 NOV 2001 BT
(See $IDLUTILS_DIR/goddard/pro/coyote/aspect.pro)
ASTDISP
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 Ascension 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 $IDLUTILS_DIR/goddard/pro/astro/astdisp.pro)
ASTRO
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 $IDLUTILS_DIR/goddard/pro/astro/astro.pro)
ASTROLIB
NAME: ASTROLIB PURPOSE: Add the non-standard system variables used by the IDL Astronomy Library EXPLANATION: Also defines the environment variable ASTRO_DATA pointing to the directory containing data files associated with the IDL Astronomy library (system dependent -- user must edit the third line in the program below). CALLING SEQUENCE: ASTROLIB INPUTS: None. OUTPUTS: None. METHOD: The non-standard system variables !PRIV, !TEXTUNIT, and !TEXTOUT are added using DEFSYSV. REVISION HISTORY: Written, Wayne Landsman, July 1986. Use DEFSYSV instead of ADDSYSVAR December 1990 Test for system variable existence before definition July 2001 Assume since V55, remove VMS support W. Landsman Sep 2006 Remove !Debug, comment out ASTRO_DATA definition WL Jan 2009
(See $IDLUTILS_DIR/goddard/pro/misc/astrolib.pro)
AUTOHIST
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 Use Coyote graphics W. Landsman Feb 2011
(See $IDLUTILS_DIR/goddard/pro/robust/autohist.pro)
AVG
NAME: AVG PURPOSE: Return the average value of an array, or 1 dimension of an array EXPLANATION: Calculate the average value of an array, or calculate the average value over one dimension of an array as a function of all the other dimensions. In 2009, a DIMENSION keyword was added to the IDL MEAN() function, giving it the same capability as AVG(). Thus, the use of AVG() is now **deprecated** in favor of the MEAN() function. 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 $IDLUTILS_DIR/goddard/pro/math/avg.pro)
BARYVEL
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.07243, -22.81121, -9.889315] ;Heliocentric km/s ==> vb = [-17.08083, -22.80471, -9.886582] ;Barycentric km/s IDL> baryvel, jd, 2000, vh, vb, /jpl ;JPL ephemeris ==> vh = [-17.07236, -22.81126, -9.889419] ;Heliocentric km/s ==> vb = [-17.08083, -22.80484, -9.886409] ;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 Documentation update W. Landsman Dec 2005
(See $IDLUTILS_DIR/goddard/pro/astro/baryvel.pro)
BITGET
NAME: BITGET PURPOSE: Returns the bit value (0 or 1) of a specified bit in a supplied number. AUTHOR: FANNING SOFTWARE CONSULTING David Fanning, Ph.D. 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com CATEGORY: Utilities CALLING SEQUENCE: bitValue = BitGet(number, bit) INPUT_PARAMETERS: number: The input number. Should be a scalar integer. If not, it is converted to one by rounding. bit: The number of the bit you are interested in. A value between 0 and 63. If not supplied, all 64 bit values of the number are returned. May be an array of bit numbers. OUTPUT_PARAMETERS: bitValue: The value, 0 or 1, of the specified bit in the number. KEYWORDS: SILENT: If set, suppresses informational messages regarding rounding operations. MODIFICATION HISTORY: Written by David W. Fanning, 14 June 2006.
(See $IDLUTILS_DIR/goddard/pro/coyote/bitget.pro)
BIWEIGHT_MEAN
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 $IDLUTILS_DIR/goddard/pro/robust/biweight_mean.pro)
BLINK
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 $IDLUTILS_DIR/goddard/pro/tv/blink.pro)
BLKSHIFT
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) 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) then the file is truncated at the new end.using TRUNCATE_LUN. 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. Note that in same systems (e.g. MacOS) the gaps will always be zeroed whether or not /NOZERO is set. 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. BLKSHIFT, UNIT, POS, DElTA, 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 Assume since V5.5, remove VMS support W. Landsman Sep 2006 Assume since V5.6, TRUNCATE_LUN available W. Landsman Sep 2006 MacOS can point beyond EOF W. Landsman Aug 2009
(See $IDLUTILS_DIR/goddard/pro/misc/blkshift.pro)
BOOST_ARRAY
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 accommodate 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 $IDLUTILS_DIR/goddard/pro/misc/boost_array.pro)
BOXAVE
NAME: BOXAVE PURPOSE: Box-average a 1 or 2 dimensional array. EXPLANATION: This procedure differs from the intrinsic REBIN function in the follow 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 (or REAL*8 for 64bit integers) arithmetic. This is considerably slower than REBIN but avoids integer truncation 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 Assume since V5.4, Allow 64bit integers W. Landsman Apr 2006
(See $IDLUTILS_DIR/goddard/pro/image/boxave.pro)
BPRECESS
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 12", 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 Fixed bug where A term not initialized for vector input W. Landsman February 2000 Use V6.0 notation W. Landsman Mar 2011
(See $IDLUTILS_DIR/goddard/pro/astro/bprecess.pro)
BREAK_PATH()
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. 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 Fix directory character on Macintosh system A. Ferro February 2000 Use STRSPLIT instead of STR_SEP() W. Landsman July 2002 Remove VMS support W. Landsman September 2006
(See $IDLUTILS_DIR/goddard/pro/misc/break_path.pro)
BSORT
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) A faster algorithm (radix sort) for numeric data is available at http://idldatapoint.com/2012/04/19/an-lsd-radix-sort-algorithm-in-idl/ 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 $IDLUTILS_DIR/goddard/pro/misc/bsort.pro)
CALZ_UNRED
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 $IDLUTILS_DIR/goddard/pro/astro/calz_unred.pro)
CCM_UNRED
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 $IDLUTILS_DIR/goddard/pro/astro/ccm_unred.pro)
CENTERTLB
NAME: CENTERTLB PURPOSE: This is a utility routine to position a widget program on the display at an arbitrary location. By default the widget is centered on the display. AUTHOR: FANNING SOFTWARE CONSULTING David Fanning, Ph.D. 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com CATEGORY: Utilities CALLING SEQUENCE: CenterTLB, tlb, [x, y, /NOCENTER, /DEVICE, CENTERONTLB=wOtherTLBID] REQUIRED INPUTS: tlb: The top-level base identifier of the widget program. This must be a valid widget ID. OPTIONAL INPUTS: x: Set this equal to a normalized position for the center of the widget as measured from the left-hand side of the screen. The default value is 0.5 (the center) Setting this equal to 1.0 places the widget at the far right-hand side of the screen. y: Set this equal to a normalized position for the center of the widget as measured from the bottom of the screen. The default value is 0.5 (the center) Setting this equal to 1.0 places the widget at the top of the screen. KEYWORDS: DEVICE: Normally, the x and y parameters are specified in normalized coordinates. If this keyword is set, they are taken to be in DEVICE coordinates. NOCENTER: By default, the center of the widget is positioned at the location specified by the x and y parameters. If NOCENTER is set to a non-zero value, then the upper left corner of the widget is postioned at the specifed location. CENTERONTLB: If provided, the center of the widget is positioned at the center of the widget whose ID is provided here. PROCEDURE: The program should be called after all the widgets have been created, but just before the widget hierarchy is realized. It uses the top-level base geometry along with the display size to calculate offsets for the top-level base that will center the top-level base on the display. COMMENT: Regardless of the values set for x, y and NOCENTER, the widget is not permitted to run off the display. MODIFICATION HISTORY: Written by: Dick Jackson, 12 Dec 98. Modified to use device-independent Get_Screen_Size function. 31 Jan 2000. DWF. Added x, y, NOCENTER and run-off protection. 26 Jan 2001. BT. Added a maximum value of 1280 for X screen size. This helps center the widget on a single monitor when using dual monitor settings with some graphics cards. 3 Feb 2003. DWF. Added DEVICE keyword. 4 January 2006. DWF. Added CenterOnTLB keyword. 7 March 2011. DJ.
(See $IDLUTILS_DIR/goddard/pro/coyote/centertlb.pro)
CGAXIS
Provides a device-independent and color-model-independent way to draw an axis into a graphics window. It is a wrapper to the AXIS command. The program requires the `Coyote Library <http://www.idlcoyote.com/documents/programs.php>` to be installed on your machine. :Categories: Graphics :Params: xloc: in, optional, type=depends The X location of the axis. yloc: in, optional, type=depends The Y location of the axis. zloc: in, optional, type=depends The Z location of the axis. :Keywords: charsize: in, optional, type=float, default=cgDefCharSize() The character size for axes annotations. Uses cgDefCharSize to select default character size, unless !P.Charsize is set, in which case !P.Charsize is always used. color: in, optional, type=string/integer/long The color of the text. Color names are those used with cgColor. By default, "black", unless the upper-right hand pixel in the display is black, then "white". data: in, optional, type=boolean Set this keyword to indicate xloc and yloc are in data coordinates. Data coordinates are the default, unless DEVICE or NORMAL is set. device: in, optional, type=boolean Set this keyword to indicate xloc and yloc are in device coordinates. font: in, optional, type=integer, default=!P.Font The type of font desired. By default, !P.Font. normal: in, optional, type=boolean Set this keyword to indicate xloc and yloc are in normalized coordinates. save: in, optional, type=boolean Set this keyword to save the scaling parameters set by the axis for subsequent use. t3d: in, optional, type=boolean, default=0 Set this keyword to rotate the axis is the 3D data space set up with !P.T. title: in, optional, type=string, default="" The title or annotation that appears on the axis. window: in, optional, type=boolean Set this keyword to add the command to the in the current cgWindow application. xaxis: in, optional, type=integer, default=0 If set to 0, the axis is drawn under the plot with the tick marks pointing up; if set to 1, the axis is drawn on top of the plot with the tick marks pointing down. xlog: in, optional, type=boolean, default=0 Set this keyword to specify a logarithmic axis type. xtitle: in, optional, type=string An alternative way to set the `Title` keyword for X axes. Use `Title` instead. yaxis: in, optional, type=integer, default=0 If set to 0, the axis is drawn on the left of the plot with the tick marks pointing to the right. If set to 1, the axis is drawn on the right of the plot with the tick marks pointing to the left. ylog: in, optional, type=boolean, default=0 Set this keyword to specify a logarithmic axis type. ynozero: in, optional, type=boolean, default=0 Set this keyword to prevent the Y axis from starting at 0. ytitle: in, optional, type=string An alternative way to set the `Title` keyword for Y axes. Use `Title` instead. zaxis: in, optional, type=integer, default=0 Set to 0-3 to position the Z axis in various locatons. See the AXIS documentation. zlog: in, optional, type=boolean, default=0 Set this keyword to specify a logarithmic axis type. ztitle: in, optional, type=string An alternative way to set the `Title` keyword for Z axes. Use `Title` instead. _ref_extra: in, optional Any keywords appropriate for the AXIS command. :Examples: Used like the IDL AXIS command:: IDL> cgPlot, cgDemoData(1), YStyle=8, Position=[0.1, 0.1, 0.85, 0.9], /Window IDL> cgAxis, /YAxis, Color='red', YRange=[-500, 500], /Save, /Window :Author: FANNING SOFTWARE CONSULTING:: David W. Fanning 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com :History: Change History:: Written, 25 Janauray 2011. DWF. Modified error handler to restore the entry decomposition state if there is an error. 17 March 2011. DWF Modifed the way I am handling brain dead AXIS command. 30 May 2011. DWF. Modified to use cgDefaultColor for default color selection. 24 Dec 2011. DWF. Added T3D keyword. 1 March 2012. DWF. :Copyright: Copyright (c) 2011, Fanning Software Consulting, Inc.
(See $IDLUTILS_DIR/goddard/pro/coyote/cgaxis.pro)
CGCOLORFILL
Provides a device-independent and color-model-independent way to fill a polygon with a particular color. This is a wrapper to the PolyFill command in IDL. The program requires the `Coyote Library <http://www.idlcoyote.com/documents/programs.php>` to be installed on your machine. :Categories: Graphics :Params: x: in, required, type=number A vector argument providing the X coordinates of the points to be connected. The vector must contain at least three elements. If only one argument is specified, X must be an array of either two or three vectors (i.e., (2,*) or (3,*)). In this special case, the vector X[0,*] specifies the X values, X[1,*] specifies Y, and X[2,*] contain the Z values. y: in, required, type=number A vector argument providing the Y coordinates of the points to be connected. Y must contain at least three elements. z: in, optional, type=number An optional vector argument providing the Z coordinates of the points to be connected. Z must contain at least three elements. :Keywords: color: in, optional, type=string/integer/long, default='rose' The name of the fill color. Color names are those used with cgColor. This value can also be a long integer or an index into the current color table. device: in, optional, type=boolean, default=0 Set to indicate the polygon vertices are in device coordinates. normal: in, optional, type=boolean, default=0 Set to indicate the polygon vertices are in normalized coordinates. window: in, optional, type=boolean, default=0 Set this keyword to add the command to the current cgWindow application. _ref_extra: in, optional, type=appropriate Any other keywords to the IDL POLYFILL command may be used. :Examples: Used like the IDL Polyfill command:: IDL> cgColorFill, [0.25, 0.25, 0.75, 0.75, 0.25], [0.25, 0.75, 0.75, 0.25, 0.25], $ /NORMAL, COLOR='blue' :Author: FANNING SOFTWARE CONSULTING:: David W. Fanning 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com :History: Change History:: Written, 24 December 2010. DWF. In some cases, I was turning BYTE values to strings without converting to INTEGERS first. 30 Dec 2010. DWF. Moved setting to decomposed color before color selection process to avoid PostScript background problems when passed 24-bit color integers. 12 Jan 2011. DWF. Added WINDOW keyword. 24 Jan 2011. DWF. Modified error handler to restore the entry decomposition state if there is an error. 17 March 2011. DWF Modified to use cgDefaultColor for default color selection. 24 Dec 2011. DWF. :Copyright: Copyright (c) 2010, Fanning Software Consulting, Inc.
(See $IDLUTILS_DIR/goddard/pro/coyote/cgcolorfill.pro)
CGCOLOR[1]
The purpose of this function is to obtain drawing colors by name and in a device/decomposition independent way. The color names and values may be read in as a file, or 192 color names and values are supplied with the program. These colors were obtained from the file rgb.txt, found on most X-Window distributions, and from colors in the `Brewer color tables <http://colorbrewer2.org/>`. Representative colors were chosen from across the color spectrum. If the color names '0', '1', '2', ..., '255' are used, they will correspond to the colors in the current color table in effect at the time the `cgColor` program is called. The program requires the `Coyote Library <http://www.idlcoyote.com/documents/programs.php>` to be installed on your machine. :Categories: Graphics :Examples: To get drawing colors in a device-decomposed independent way:: axisColor = cgColor("Green", !D.Table_Size-2) backColor = cgColor("Charcoal", !D.Table_Size-3) dataColor = cgColor("Yellow", !D.Table_Size-4) Plot, Findgen(11), Color=axisColor, Background=backColor, /NoData OPlot, Findgen(11), Color=dataColor To set the viewport color in object graphics:: theView = Obj_New('IDLgrView', Color=cgColor('Charcoal', /Triple)) To change the viewport color later:: theView->SetProperty, Color=cgColor('Antique White', /Triple) To load the drawing colors "red", "green", and "yellow" at indices 100-102, type this:: IDL> TVLCT, cgColor(["red", "green", "yellow"], /Triple), 100 To interactively choose a color, set the SELECTCOLOR keyword:: IDL> color = cgColor(/SelectColor) The PickColorName program is a good way to learn the names of the colors available:: IDL> color = PickColorName() :Author: FANNING SOFTWARE CONSULTING:: David W. Fanning 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com :History: Change History:: Written by: David W. Fanning Modified FSC_COLOR to create cgColor 9 February 2011. DWF. Modified to allow a three-element color triple to be used in place of the color name parameter. This allows one user-defined color to be used. 4 Dec 2011. DWF. Modified to allow byte and 16-bit integer values to be used to specify colors in the current color table. 5 Dec 2011. DWF. Modified to allow the "opposite" pixel to be determined in the Z-graphics buffer. 24 Dec 2011. DWF. Modified the code to handle long integers depending on the current color mode and the number of values passed in. 10 January 2012. DWF. Made sure the return values are BYTES not INTEGERS, in cases where this is expected. 10 Jan 2012. DWF. Added "Background" as a color name. The opposite of "Opposite". 1 Feb 2012. DWF. When returning a vector of color values, now making sure to return a byte array if in indexed color mode. 27 Feb 2012. DWF. :Copyright: Copyright (c) 2009-2012, Fanning Software Consulting, Inc.
(See $IDLUTILS_DIR/goddard/pro/coyote/cgcolor.pro)
CGCOLOR[2]
+ This function accepts a [red, green, blue] triple that describes a particular color and returns a 24-bit long integer that is equivalent to (can be decomposed into) that color. :Params: color: in, required, type=byte A three-element byte array containing the color triple. The triple can be either a row or column vector of three elements or it can be an N-by-3 array of color triples.
(See $IDLUTILS_DIR/goddard/pro/coyote/cgcolor.pro)
CGCOLOR[3]
The purpose of this function is to obtain drawing colors by name and in a device/decomposition independent way. :Returns: The return value depends on the color mode in effect at the time the program is called and which keyword is used with the program. In normal operation, if the graphics device is using indexed color mode, the program will load a color at a unique (or specified) index and return that index number. If the graphics device is using decomposed color mode, the program will create a 24-bit color value that can be used to specify the particular color desired. In this case, no color is loaded in the color table. This is the preferred mode for working with colors in IDL. :Params: theColour: required, optional, type=varies Normally the name of the color desired. However, this can also be a string index number (e.g., '215') or a byte or short integer value (e.g, 215B or 215S). If this is the case, the color in the current color table at this index number is used for the color that is returned. The value may also be a vector of color names. The color may also be a three-element byte or integer array specifying a user-defined color triple. Only one color triple is allowed. To see a list of the color names available set the NAMES keyword. Colors available are these:: Active Almond Antique White Aquamarine Beige Bisque Black Blue Blue Violet Brown Burlywood Cadet Blue Charcoal Chartreuse Chocolate Coral Cornflower Blue Cornsilk Crimson Cyan Dark Goldenrod Dark Gray Dark Green Dark Khaki Dark Orchid Dark Red Dark Salmon Dark Slate Blue Deep Pink Dodger Blue Edge Face Firebrick Forest Green Frame Gold Goldenrod Gray Green Green Yellow Highlight Honeydew Hot Pink Indian Red Ivory Khaki Lavender Lawn Green Light Coral Light Cyan Light Gray Light Salmon Light Sea Green Light Yellow Lime Green Linen Magenta Maroon Medium Gray Medium Orchid Moccasin Navy Olive Olive Drab Orange Orange Red Orchid Pale Goldenrod Pale Green Papaya Peru Pink Plum Powder Blue Purple Red Rose Rosy Brown Royal Blue Saddle Brown Salmon Sandy Brown Sea Green Seashell Selected Shadow Sienna Sky Blue Slate Blue Slate Gray Snow Spring Green Steel Blue Tan Teal Text Thistle Tomato Turquoise Violet Violet Red Wheat White Yellow Here are the Brewer color names:: WT1 WT2 WT3 WT4 WT5 WT6 WT7 WT8 TAN1 TAN2 TAN3 TAN4 TAN5 TAN6 TAN7 TAN8 BLK1 BLK2 BLK3 BLK4 BLK5 BLK6 BLK7 BLK8 GRN1 GRN2 GRN3 GRN4 GRN5 GRN6 GRN7 GRN8 BLU1 BLU2 BLU3 BLU4 BLU5 BLU6 BLU7 BLU8 ORG1 ORG2 ORG3 ORG4 ORG5 ORG6 ORG7 ORG8 RED1 RED2 RED3 RED4 RED5 RED6 RED7 RED8 PUR1 PUR2 PUR3 PUR4 PUR5 PUR6 PUR7 PUR8 PBG1 PBG2 PBG3 PBG4 PBG5 PBG6 PBG7 PBG8 YGB1 YGB2 YGB3 YGB4 YGB5 YGB6 YGB7 YGB8 RYB1 RYB2 RYB3 RYB4 RYB5 RYB6 RYB7 RYB8 TG1 TG2 TG3 TG4 TG5 TG6 TG7 TG8 The color name "OPPOSITE" is also available. It chooses a color "opposite" to the color of the pixel in the upper-right corner of the display, if a window is open. Otherwise, this color is "black" in PostScript and "white" everywhere else. The color OPPOSITE is used if this parameter is absent or a color name is mis-spelled. The color name "BACKGROUND" can similarly be used to select the color of the pixel in the upper-right corner of the display, if a window is open. colorindex: in, optional, type=byte The color table index where the color should be loaded. Colors are loaded into the color table only if using indexed color mode in the current graphics device. If this parameter is missing, the color will be loaded at a unique color index number, if necessary. :Keywords: allcolors: in, optional, type=boolean, default=0 Set this keyword to return indices, or 24-bit values, or color triples, for all the known colors, instead of for a single color. brewer: in, optional, type=boolean, default=0 An obsolete keyword. If used, only Brewer colors are loaded into the color vectors internally. cancel: out, optional, type=boolean, default=0 This keyword is always set to 0, unless that SELECTCOLOR keyword is used. Then it will correspond to the value of the CANCEL output keyword in PICKCOLORNAME. check_connection: in, optional, type=boolean, default=0 An obsolete keyword now completely ignored. colorstructure: out, optional, type=structure This output keyword (if set to a named variable) will return a structure in which the fields will be the known color names (without spaces) and the values of the fields will be either color table index numbers or 24-bit color values. If you have specified a vector of color names, then this will be a structure containing just those color names as fields. decomposed: in, optional, type=boolean Set this keyword to 0 or 1 to force the return value to be a color table index or a 24-bit color value, respectively. This keyword is normally set by the color state of the current graphics device. filename: in, optional, type=string The name of an ASCII file that can be opened to read in color values and color names. There should be one color per row in the file. Please be sure there are no blank lines in the file. The format of each row should be:: redValue greenValue blueValue colorName Color values should be between 0 and 255. Any kind of white-space separation (blank characters, commas, or tabs) are allowed. The color name should be a string, but it should NOT be in quotes. A typical entry into the file would look like this:: 255 255 0 Yellow names: in, optional, type=boolian, default=0 If this keyword is set, the return value of the function is a string array containing the names of the colors. These names would be appropriate, for example, in building a list widget with the names of the colors. If the NAMES keyword is set, the COLOR and INDEX parameters are ignored. ncolors: out, optional, type=integer Returns the number of colors that cgColor "knows" about. Currently ncolors=193. nodisplay: in, optional, type=boolean, default=0 An obsolete keyword, now totally ignored. row: in, optional, type=boolean If this keyword is set, the return value of the function when the TRIPLE keyword is set is returned as a row vector, rather than as the default column vector. This is required, for example, when you are trying to use the return value to set the color for object graphics objects. This keyword is completely ignored, except when used in combination with the TRIPLE keyword. selectcolor: in, optional, type=boolean Set this keyword if you would like to select the color name with the PICKCOLORNAME program. Selecting this keyword automaticallys sets the INDEX positional parameter. If this keyword is used, any keywords appropriate for PICKCOLORNAME can also be used. If this keyword is used, the first positional parameter can be a color name that will appear in the SelectColor box. triple: in, optional, type=boolean Setting this keyword will force the return value of the function to always be a color triple, regardless of color decomposition state or visual depth of the machine. The value will be a three-element column vector unless the ROW keyword is also set. _ref_extra: in, optional Any keyword parameter appropriate for PICKCOLORNAME can be used. These include BOTTOM, COLUMNS, GROUP_LEADER, INDEX, and TITLE.
(See $IDLUTILS_DIR/goddard/pro/coyote/cgcolor.pro)
CGCONTOUR
The purpose of cgContour is to create a wrapper for the traditional IDL graphics command, Contour. The Contour command has a number of deficiencies that make it difficult to use in a modern computing environment. cgContour corrects these deficiencies and allows the user to produce traditional contour plots in a device and machine independent manner. The program requires the `Coyote Library <http://www.idlcoyote.com/documents/programs.php>` to be installed on your machine. :Categories: Graphics :Params: data: in, required, type=any A one- or two-dimensional array containing the values that make up the contour surface. x: in, optional, type=any A vector or two-dimensional array specifying the X coordinates for the contour surface. y: in, optional, type=any A vector or two-dimensional array specifying the Y coordinates for the contour surface. :Keywords: addcmd: in, optional, type=boolean, default=0 Set this keyword to add the command to an cgWindow. Setting this keyword automatically sets the WINDOW keyword, but the command does not erase the graphics window as it would normally. axiscolor: in, optional, type=string/integer, default='opposite' If this keyword is a string, the name of the axis color. Otherwise, the keyword is assumed to be a color index into the current color table. axescolor: in, optional, type=string/integer Provisions for bad spellers. background: in, optional, type=string/integer, default='background' If this keyword is a string, the name of the background color. Otherwise, the keyword is assumed to be a color index into the current color table. c_colors: in, optional, type=integer/string vector Set to the index values of the contour colors or to named colors. Must contain the same number of colors as the number of requested contour levels. c_labels: in, optional, type=integer A vector that specifies which contour levels to label. If used, the LABEL keyword is ignored. c_charsize: in, optional, type=float The character size of the annotations used on the contour lines themselves. By default, 75% of `Charsize`. cell_fill: in, optional, type=boolean, default=0 Set to indicate filled contours should be created using the "cell fill" method. This keyword should always be set if displaying filled contours on map projections or if missing data is present in the data you are contouring. charsize: in, optional, type=float, default=cgDefCharSize() The character size for axes annotations. Uses cgDefCharSize to select default character size, unless !P.Charsize is set, in which case !P.Charsize is always used. color: in, optional, type=string/integer, default='black' If this keyword is a string, the name of the data color. By default, same as AXISCOLOR. Otherwise, the keyword is assumed to be a color index into the current color table. font: in, optional, type=integer, default=!P.Font The type of font desired for axis annotation. fill: in, optional, type=boolean, default=0 Set to indicate filled contours should be created. irregular: in, optional, type=boolean If this keyword is set, the data, x, and y input parameters are taken to be irregularly gridded data, the the data is gridded for use in the contour plot using the Triangulate and Trigrid method. The resolution of the gridded output is set by the RESOLUTION keyword. label: in, optional, type=integer, default=1 An number that tells how to label contour levels. A 0 means no contour levels are labelled. A 1 (the default) means all contour levels are labelled. A 2 means label every 2nd contour level is labelled. A 3 means every 3rd contour level is labelled, and so on. layout: in, optional, type=intarr(3) This keyword specifies a grid with a graphics window and determines where the graphic should appear. The syntax of LAYOUT is three numbers: [ncolumns, nrows, location]. The grid is determined by the number of columns (ncolumns) by the number of rows (nrows). The location of the graphic is determined by the third number. The grid numbering starts in the upper left (1) and goes sequentually by column and then by row. levels: in, optional, type=any A vector of data levels to contour. If used, NLEVELS is ignored. If missing, NLEVELS is used to construct N equally-spaced contour levels. map_object: in, optional, type=object If you are overplotting (OVERPLOT=1) on a map projection set up with Map_Proj_Init and using projected meter space, rather than lat/lon space, then you can use this keyword to provide a cgMap object that will allow you to convert the `x` and `y` grid parameters from longitude and latitude, respectively, to projected meter space before the contour is displayed. Note, you MUST pass the `x` and `y` grid parameters to cgContour if you are overplotting on a map projection. There is no checking to be sure these parameters are in the correct longitude and latitude range, respectively. missingvalue: in, optional, type=any Use this keyword to identify any missing data in the input data values. noclip: in, optional, type=boolean, default=0 Normally, the plot is clipped to the axes boundaries. Setting this keyword prevents such clipping. Normally, this keyword is only used when there is a problem displaying contour plots in 3D space. nlevels: in, optional, type=integer, default=6 If the Contour plot LEVELS keyword is not used, this keyword will produce this number of equally spaced contour intervals. Unlike the Contour NLEVELS keyword, this keyword actually works! noerase: in, optional, type=boolean, default=0 Set this keyword to prevent the window from erasing the contents before displaying the contour plot. olevels: out, optional Set to a named variable to return the actual contour levels used in the program. Unfortunately, output variables cannot be returned if the cgContour command is being executed in a cgWindow. onimage: in, optional, type=boolean, default=0 If this keyword is set, and an image has been display previously with cgImage, then the contour plot will determine the location of the image in the display window and overplot itself onto that image. outcolor: in, optional, type=string, default='charcoal' The color of the contour lines when the `Outline` keyword is used. outfilename: in, optional, type=string If the `Output` keyword is set, the user will be asked to supply an output filename, unless this keyword is set to a non-null string. In that case, the value of this keyword will be used as the filename and there will be no dialog presented to the user. outline: in, optional, type=boolean, default=0 This keyword applies only if the `Fill` keyword is set. It will draw the contour lines on top of the filled contour. It draws the outline in the `OutColor`. output: in, optional, type=string, default="" Set this keyword to the type of output desired. Possible values are these:: 'PS' - PostScript file 'EPS' - Encapsulated PostScript file 'PDF' - PDF file 'BMP' - BMP raster file 'GIF' - GIF raster file 'JPEG' - JPEG raster file 'PNG' - PNG raster file 'TIFF' - TIFF raster file Or, you can simply set this keyword to the name of the output file, and the type of file desired will be determined by the file extension. If you use this option, the user will not be prompted to supply the name of the output file. All raster file output is created through PostScript intermediate files (the PostScript files will be deleted), so ImageMagick and Ghostview MUST be installed to produce anything other than PostScript output. (See cgPS2PDF and PS_END for details.) And also note that you should NOT use this keyword when doing multiple plots. The keyword is to be used as a convenient way to get PostScript or raster output for a single graphics command. Output parameters can be set with cgWindow_SetDefs. overplot: in, optional, type=boolean, default=0 Set this keyword to overplot the contours onto a previously established data coordinate system. palette: in, optional, type=byte A (256x3) color palette containing the RGB color vectors to use for coloring contours. Contour colors will be sampled from the color table palette into the number of contour levels required. If the palette is NOT 256 elements in length, then it is assumed that the length corresponds to the number of levels to be contoured. position: in, optional, type=float Set this keyword to a four-element [x0,y0,x1,y1] array giving the contour plot position in normalized coordinates. resolution: in, optional, type=integer array, default=[41\,41] If the IRREGULAR keyword is set, this keyword specifies the X and Y resolution in a two element integer array of the final gridded data that is sent to the contour plot. t3d: in, optional, type=boolean, default=0 Set this keyword to use the 3D axis rotation matrix in !P.T3D. traditional: in, optional, type=boolean, default=0 If this keyword is set, the traditional color scheme of a black background for graphics windows on the display is used and PostScript files always use a white background. window: in, optional, type=boolean, default=0 Set this keyword if you want to display the plot in a resizable graphics window. xstyle: in, optional, type=integer, default=1 If unused in the program, set to 1 to force exact axis scaling. xthick: in, optional, type=integer, default=1 The thickness of the X axis annotations. xticklen: in, optional, type=float, default=0.025 The length of the X tick marks. Set to a negative value to create outward facing tick marks. xticks: in, optional, type=integer The number of tick intervals on the X axis. xtickv: in, optional, type=string A vector of tick values to use with the tick marks. See IDL documentation for graphics keywords for additional information. ystyle: in, optional, type=integer, default=1 If unused in the program, set to 1 to force exact axis scaling. ythick: in, optional, type=integer, default=1 The thickness of the Y axis annotations. yticklen: in, optional, type=float, default=0.025 The length of the Y tick marks. Set to a negative value to create outward facing tick marks. yticks: in, optional, type=integer The number of tick intervals on the Y axis. ytickv: in, optional, type=string A vector of tick values to use with the tick marks. See IDL documentation for graphics keywords for additional information. _ref_extra: in, optional, type=any Any keyword appropriate for the IDL Contour command is allowed in the program. :Examples: Use as you would use the IDL CONTOUR command:: data = dist(51) cgContour, data LoadCT, 33 cgContour, data, /FILL cgContour, data, /OVERPLOT If you wish to overplot on top of an image, use the ONIMAGE keyword, rather than the OVERPLOT keyword: cgImage, data, /SCALE, XRANGE=[-10, 10], YRANGE=[-5,5], /AXES cgContour, data, /ONIMAGE See `Device Independent Contour Plots <http://www.idlcoyote.com/graphics_tips/cgcontour.html>' for additional examples. :Author: FANNING SOFTWARE CONSULTING:: David W. Fanning 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com :History: Change History:: Written, 11 November 2010. DWF. Restored the CELL_FILL keyword, which had been accidentally removed in the earlier version. 12 November 2010. DWF. Add the ability to specify the contour colors as color names. 16 November 2010. DWF. Now setting decomposition state by calling SetDecomposedState. 16 November 2010. DWF. Final color table restoration skipped in Z-graphics buffer. 17 November 2010. DWF. Background keyword now applies in PostScript file as well. 17 November 2010. DWF. Many changes after BACKGROUND changes to get !P.MULTI working again! 18 November 2010. DWF. Fixed a small problem with the OVERPLOT keyword. 18 Nov 2010. DWF. Changes so that color variables don't change type. 23 Nov 2010. DWF. Added WINDOW keyword to allow graphic to be displayed in a resizable graphics window. 8 Dec 2010. DWF Modifications to allow cgContour to be drop-in replacement for old Contour commands in indexed color mode. 24 Dec 2010. DWF. Previous changes introduced problems with OVERPLOT that have now been fixed. 28 Dec 2010. DWF. Set NOERASE keyword from !P.NoErase system variable when appropriate. 28 Dec 2010. DWF. Additional problems with NOERASE discovered and solved. 29 Dec 2010. DWF. Change to DECOMPOSED color was using incorrect color tables. 29 Dec 2010. DWF. In some cases, I was turning BYTE values to strings without converting to INTEGERS first. 30 Dec 2010. DWF. Still working on getting contour colors to work in decomposed color mode in all circumstances. 2 Jan 2011. DWF. Fixed problem with FILL when no contour colors (C_COLORS) are specified. 3 Jan 2011. DWF. Fixed a problem that preventing output keyword (e.g., PATH_INFO) from being returned properly. 3 Jan 2011. DWF. Fixed a problem calculating NLEVELS when LEVELS keyword was used instead. 3 Jan 2011. DWF. TVLCT commands protected from NULL device. 4 Jan 2011. DWF. Fixed a no color problem when CELL_FILL was set. 11 Jan 2011. DWF. Fixed a problem with overlaying filled contours with /OVERPLOT. 11 Jan 2011. DWF. Selecting character size now with cgDefCharSize. 11 Jan 2011. DWF. Moved setting to decomposed color before color selection process to avoid PostScript background problems when passed 24-bit color integers. 12 Jan 2011. DWF. Fixed a problem in which I assumed the background color was a string. 18 Jan 2011. DWF. Added ADDCMD keyword. 26 Jan 2011. DWF. Added LAYOUT keyword. 28 Jan 2011. DWF. Added PALETTE keyword. 4 Feb 2011. DWF. Color table vectors must be obtained AFTER loading the color palette. 6 March 2011. DWF. Modified error handler to restore the entry decomposition state if there is an error. 17 March 2011. DWF Modifications to allow palettes of less than 256 elememts in length to be used. 1 April 2011. DWF. Modifications to repair axes and tickmarks when creating filled contour plots. 28 May 2011. DWF. Whoops! Last fix shouldn't apply to OVERPLOTTING. Fixed. 22 June 2011. DWF. Still more work to get axes overplotting to work correct. 5 July 2011. DWF. Added an ONIMAGE keyword that allows the contours to be overplotted on top of an image that has been displayed with cgImage. This requires that the SAVE keyword is set in the cgImage call. Improved error handling. 26 Aug 2011. DWF. Got the data type correct in the part of the code that creates levels. 6 Sept 2011. DWF. Small change to allow cgWindow to set the current graphics window if it is the only window on the display. 15 Sept 2011. DWF. Had to add XTICKV, YTICKV, XTICKS, and YTICKS keywords to get repaired axes to work properly on filled contour plots. There may be other keywords needed, but I am going to add them on an as-needed basis. 30 Sept 2011. DWF. Other keywords WERE needed! I added XTICKLEN and YTICKLEN keywords to the repaired axes code. 3 Oct 2011. DWF. Change from 15 Sept 2011 forgot to include the possibility of pixmap windows. Algorithm made more robust. 27 Oct 2011. DWF. There was a problem with axes when plotting contours in 3D that has been fixed. 18 Nov 2011. DWF. Added OLEVELS keyword. 7 Dec 2011. DWF. Added OUTLINE and OUTCOLOR keywords. 8 Dec 2011. DWF. Modified the way the axes are drawn when given a negative tick length. 9 Dec 2011. DWF. Added the ability to send the output directly to a file via the OUTPUT keyword. 9 Dec 2011, DWF. PostScript, PDF, and Imagemagick parameters can now be tailored with cgWindow_SetDefs. 14 Dec 2001. DWF. Made sure the OUTLINE keyword works with CELL_FILL, too. 16 Dec 2011. DWF. Modified to use cgDefaultColor for default color selection. 24 Dec 2011. DWF. Added MAP_OBJECT keyword. 28 Dec 2011. DWF. Changes to allow better default colors, based on changes to cgColor and cgDefaultColor. 1 Feb 2012. DWF. Axis repair for filled contour plots (done with AXIS) results in incorrect tick labeling with date/time axes. Replaced repair code with actual Contour command. 9 March 2012. DWF. Fixed a problem with color palettes by defining NLEVELS according to the number of colors in the palette. 19 March 2012. DWF. Now allowing the user to draw in the "background" color, if the COLOR or AXISCOLOR is "BACKGROUND". 19 March 2012. DWF. The axis repair change on 9 March was not working in multi plots because the plot was already advanced. Added a fix to make sure the repair is to the correct multi plot. 20 April 2012. DWF. :Copyright: Copyright (c) 2010, Fanning Software Consulting, Inc.
(See $IDLUTILS_DIR/goddard/pro/coyote/cgcontour.pro)
CGCONTROL
Allows the user to set various properties of an cgWindow object. This is essentially a wrapper to the cgWindow SetProperty method. :Categories: Graphics :Params: selection: in, required, type=varies Normally, a window index number of an cgWindow application. But, the selection can be a widget identifier, an object reference, or a window title, depending on which keywords are set. The cgWindow matching the selection has its properties set. :Keywords: all: in, optional, type=boolean This keyword applies only to keywords that manipulate commands in the command list (e.g., DeleteCmd). It will select all the commands in the command list to apply the action to. adjustsize: in, optional, type=boolean Set this keyword to adjust default character size to the display window size. aspect: in, optional, type=boolean Set this keyword to the desired aspect ratio (ysize/xsize) of the window. background: in, optional, type=string The background color of the window. Only use if the ERASEIT property is also set. cmdindex: in, optional, type=integer This keyword applies only to keywords that manipulate commands in the command list (e.g., DeleteCmd). It specifies the command index number of the command for which the action is desired. create_bmp: in, optional, type='string', default='cgwindow.bmp' Set this keyword to the name of a bitmap file to create automatically from the window. Using this keyword is a way to create a bitmap file programmatically from a cgWindow application. The raster file will be created via ImageMagick if im_raster has been set (default). Depreciated now in favor of the `Output` keyword. create_gif: in, optional, type='string', default='cgwindow.gif' Set this keyword to the name of a GIF file to create automatically from the window. Using this keyword is a way to create a GIF file programmatically from a cgWindow application. The raster file will be created via ImageMagick if im_raster has been set (default). Depreciated now in favor of the `Output` keyword. create_jpeg: in, optional, type='string', default='cgwindow.jpeg' Set this keyword to the name of a JPEG file to create automatically from the window. Using this keyword is a way to create a JPEG file programmatically from a cgWindow application. The raster file will be created via ImageMagick if im_raster has been set (default). Depreciated now in favor of the `Output` keyword. create_pdf: in, optional, type='string', default='cgwindow.pdf' Set this keyword to the name of a PNG file to create automatically from the window. Using this keyword is a way to create a PDF file programmatically from a cgWindow application. The PDF file will be created via the Coyote Graphics program cgPS2PDF. Depreciated now in favor of the `Output` keyword. create_png: in, optional, type='string', default='cgwindow.png' Set this keyword to the name of a PNG file to create automatically from the window. Using this keyword is a way to create a PNG file programmatically from a cgWindow application. The raster file will be created via ImageMagick if im_raster has been set (default). create_ps: in, optional, type='string', default='cgwindow.ps' Set this keyword to the name of a PostScript file to create automatically from the window. Using this keyword is a way to create a PostScript file programmatically from a cgWindow application. Depreciated now in favor of the `Output` keyword. create_tiff: in, optional, type='string', default='cgwindow.tiff' Set this keyword to the name of a TIFF file to create automatically from the window. Using this keyword is a way to create a TIFF file programmatically from a cgWindow application. The raster file will be created via ImageMagick if im_raster has been set (default). Depreciated now in favor of the `Output` keyword. delay: in, optional, type=float Set this keyword to the amount of "delay" you want between commands in the command list. deletecmd: in, optional, type=boolean Set this keyword to delete a command in the cgWindow. The keywords cmdIndex and All are used in deleting the specified command. destroy: in, optional, type=boolean Set this keyword to destroy the cgWindow program. This keyword should not be used with other keywords. dimensions: in, optional, type=intarr(2) Set this keyword to a two-element array giving the xsize and ysize of the draw widget. eraseit: in, optional, type=boolean If this property is set, the cgWindow erases with the background color before displaying the commands in the window's command list. execute: in, optional, type=boolean Set this keyword to 1 to exectute the commands in the window's command list. Set this keyword to 0 to prevent command excution. This is useful, for example, if you want to load commands without having them be executed immediately. get_keycmdindex: in, optional, type=integer Set this value to the number of the command (zero-based) for which you want to obtain the keyword value. If not provided, the first command (command 0) is searched. get_keyword: in, optional, type=string The name of the keyword whose value you want to return in get_keyvalue. The name must be spelled EXACTLY as you used the keyword, except that case does not matter. The string is converted to UPPERCASE to locate the proper keyword. Although it was my intention to use this to retrieve output keyword values, this is not possible using cgWindow due to the way Call_Procedure and keyword inheritance work. get_keyvalue: out, optional, type=any The value of the keyword specified in get_keyword. If the keyword cannot be found, this value will be undefined. You MUST check for this before using the return variable in your program. im_transparent: in, optional, type=boolean, default=0 Set this keyword to allow ImageMagick to create transparent backgrounds when it makes raster image files from PostScript output. im_density: in, optional, type=integer, default=300 Set this keyword to the sampling density when ImageMagick creates raster image file from PostScript outout. im_options: in, optional, type=string, default="" Set this keyword to any ImageMagick options you would like to pass along to the ImageMagick convert command when creating raster image files from PostScript output. im_resize: in, optional, type=integer, default=25 Set this keyword to percentage that the raster image file created my ImageMagick from PostScript output should be resized. im_raster: in, optional, type=boolean, default=1 Set this keyword to zero to create raster files using the create_png etc. keywords directly, instead of via ImageMagick. im_width: in, optional, type=integer Set this keyword to the width of the output raster file in pixel units. The height of the raster file is set to preserve the aspect ratio of the output image. Applies only to raster images (eg PNG, JPEG, TIFF, etc.) created from PostScript files with ImageMagick. multi: in, optional, type=Intarr(5) Set this keyword to the !P.MULTI setting you want to use for the window. !P.MULTI is set to this setting before command execution, and set back to it's default value when the commands are finished executing. object: in, optional, type=boolean If this keyword is set, the selection is assumed to be an object reference. output: in, optional, type=string This keyword should be set to the name of an output file. It is a short-hand way of specifying the CREATE_*** keywords. The type of file is taken from the file name extension. palette: in, optional, type=byte Use this keyword to pass in an N-by-3 (or 3-by-N) byte array containing the R, G, and B vectors of a color table. It is probably easier to use cgLoadCT or XCOLORS to load color tables for the window, but this is provided as another option. pdf_path: out, optional, type=string Set this keyword to the name of the path to the Ghostscript command for converting PS to PDF. pdf_unix_convert_cmd: out, optional, type=string Set this keyword to the name of an alternative UNIX command to convert PostScript to PDF. ps_charsize: in, optional, type=float The PostScript character size. ps_decomposed: in, optional, type=boolean, default=0 Set this keyword to zero to set the PostScript color mode to indexed color and to one to set the PostScript color mode to decomposed color. ps_delete: in, optional, type=boolean, default=1 Set this keyword to zero if you want to keep the PostScript output ImageMagick creates when making raster file output. ps_encapsulated: in, optional, type=boolean, default=0 Set this keyword to configure PSCONFIG to produce encapsulated PostScript output by default. ps_font: in, optional, type=integer Set this keyword to the type of font you want to use in PostScript output. It sets the FONT keyword on the PSConfig command. Normally, 0 (hardware fonts) or 1 (true-type fonts). ps_metric: in, optional, type=boolean, default=0 Set this keyword to configure PSCONFIG to use metric values and A4 page size in its interface. ps_quiet: in, optional, type=boolean, default=0 Set this keyword to set the QUIET keyword on PS_Start. ps_scale_factor: in, optional, type=float Set his keyword to the PostScript scale factor you wish to use in creating PostScript output. ps_tt_font: in, optional, type=string Set this keyword to the name of a true-type font to use in creating PostScript output. restore_visualization: in, optional, type=string Set this keyword to the name of a visualization save file to restore. save_visualization: in, optional, type=string, default='graphic.cgs' Set this keyword to the name of a file where the visualization should be saved. title: in, optional, type=boolean If this keyword is set, the selection is assumed to be a window title. All matching is done in uppercase characters. update: in, optional, type=boolean, default=1 Set this keyword to zero if you do not want the updates to be done immediately after the properties are changed. widgetid: in, optional, type=boolean If this keyword is set, the selection is assumed to be a widget identifier. xomargin: in, optional, type=intarr(2) Sets the !X.OMargin system variable when multiple plots are displayed in the window. yomargin: in, optional, type=intarr(2) Sets the !Y.OMargin system variable when multiple plots are displayed in the window. :Examples: Used to set cgWindow properties:: IDL> cgControl, Background='gray', EraseIt=1 IDL> cgControl, Multi=[0,2,2] :Author: FANNING SOFTWARE CONSULTING:: David W. Fanning 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com/ :History: Change History:: Written, 28 January 2011. DWF. Added CREATE_PS keyword. 16 Feb 2011. DWF. Added PS_QUIET, GET_KEYCMDINDEX, GET_KEYWORD, and GET_KEYVALUE keywords. 17 Feb 2011. DWF. Added im_raster and the create_... raster options. 18 Feb 2011. Jeremy Bailin Added the ability to set and unset adjustable text size in cgWindow with ADJUSTSIZE keyword. 24 April 2011. DWF. Added the ability to set the dimensions of the draw widget programmatically. 14 June 2011. Added PS_DECOMPOSED keyword to set the PostScript color mode. 30 Aug 2011. DWF. Added SAVE_VISUALIZATION and RESTORE_VISUALIZATION keywords. 15 Sept 2011. DWF. Added ASPECT keyword to control window aspect ratio. 9 Nov 2011. DWF. Added CREATE_PDF, PDF_UNIX_CONVERT_CMD, and PDF_PATH keywords. 11 Dec 2011. DWF. Added IM_WIDTH keyword. 3 April 2012. DWF. Added the OUTPUT keyword. 3 April 2012. DWF. :Copyright: Copyright (c) 2011-2012, Fanning Software Consulting, Inc.
(See $IDLUTILS_DIR/goddard/pro/coyote/cgcontrol.pro)
CGDEFAULTCOLOR
The purpose of this function is to choose a default color for Coyote Graphics routines. :Categories: Graphics :Returns: Returns a scalar or vector (depends on the type of the input color) of color names (strings) to be used as the "color" in Coyote Graphics routines. If the MODE is 1 and the inputColor is of type LONG, then the return value is an array or scalar of type LONG. :Params: inputcolour: in, optional The input color. May be undefined, a byte, integer, long, or string. If the device is in indexed color mode at the time the request is made, then all, byte, integer, and long values will be treated as indices into the current color table. The variable may be a vector. :Keywords: background: in, optional, type=boolean If this keyword is set, the color is treated as a background color. Otherwise, it is treated as a drawing color. default: in, optional A color of any type allowed as the `inputColour`. Used if the `inputColour` is undefined. mode: in, optional, type=boolean The color mode. A 0 mean indexed color mode. A 1 means decomposed color mode. If not supplied in the call, the color mode is determined at run-time with `GetDecomposedState`. The color mode is *always* determined at run time if the current graphics device is the PostScript device. traditional: in, optional, type=boolean, default=0 Set this keyword if you are using the traditional color scheme of white foreground and black background. If this keyword is set, and the current graphics device is the PostScript device, the colors will be reversed, in the traditional IDL graphics way. :Examples: Use as a device independent way to get a color:: background = cgDefaultColor(bColor, /Background) color = cgDefaultColor(bColor) cgPlot, cgDemoData, Background=background, Color=color :Author: FANNING SOFTWARE CONSULTING:: David W. Fanning 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com :History: Change History:: Written, 24 December 2011. David W. Fanning. Modified to make sure a LONG integer in indexed color mode is in the range 0-255. 10 Jan 2012. DWF. Modified to make sure MODE is always determined at run-time for PostScript device. 14 Jan 2012. DWF. Allow other data types to be treated as color table index numbers, as long as they are in the range 0 to 255, and the MODE indicates indexed color. 7 March 2012. DWF. Modified so that the variable MODE will not change in the calling program program. 8 March 2012. DWF. :Copyright: Copyright (c) 2011, Fanning Software Consulting, Inc.
(See $IDLUTILS_DIR/goddard/pro/coyote/cgdefaultcolor.pro)
CGDEFCHARSIZE
Defines a default character size for Coyote Graphics routines (cgPlot, cgContour, etc.) IF !P.Charsize is set, the function simply returns !P.Charsize. :Categories: Graphics, Utilities :Keywords: adjustsize: in, optional, type=boolean, default=0 If this keyword is set, the output character size is adjusted to fit the size of the output graphics window. No adjustment is ever done in PostScript. Applies only when !P.Charsize=0. font: in, optional, type=integer, default=!P.Font The font type: -1 = Hershey, 0 = hardware, 1 = true-type. :Author: FANNING SOFTWARE CONSULTING:: David W. Fanning 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com :History: Change History:: Written, 11 January 2011. DWF. Added an ADJUSTSIZE keyword to allow adjustable sizing of characters in resizeable graphics windows. 24 April 2011. DWF. Made sure this program only adjusts text size on devices that support windows. 20 July 2011. DWF. :Copyright: Copyright (c) 2011, Fanning Software Consulting, Inc.
(See $IDLUTILS_DIR/goddard/pro/coyote/cgdefcharsize.pro)
CGDISPLAY
The purpose of cgDisplay is to open a graphics window on the display, or in the PostScript device, or in the Z-graphics buffer, depending upon the current graphics device. In PostScript a window of the proper aspect ratio is created with PSWindow. Using cgDisplay to open "windows" will allow you to more easily write device-independent IDL programs. :Categories: Graphics :Params: pxsize: in, optional, type=integer, default=640 The X size of the graphics window created. By default, 640. pysize: in, optional, type=integer, default=512 The Y size of the graphics window created. By default, 512. :Keywords: aspect, in, optional, type=float Set this keyword to create a window with this aspect ratio (ysize/xsize). If aspect is greater than 1, then the ysize will be used in the aspect ratio calculation. If the aspect is less than or equal to 1, then the xsize will be used in the aspect ratio calculation of the final window size. If the input to the ASPECT keyword is an image, then the aspect ratio will be calculated from the image itself. color: in, optional, type=string/integer, default='white' If this keyword is a string, the name of the data color. By default, 'white'. Color names are those used with cgColor. Otherwise, the keyword is assumed to be a color index into the current color table. The color is not used if the "window" is opened in PostScript on the Z-graphics buffer. force: in, optional, type=boolean, default=0 Because of the way cgDisplay is designed to work in many devices and in resizeable graphics windows, it is sometimes the case that it won't create a window for you. If you set this keyword, a graphics window will be created while in any device that supports graphics windows. free: in, optional, type=boolean, default=0 Set this keyword to open a window with a free or unused window index number. This keyword applied only to graphics windows created on the computer display. match: in, optional, type=boolean, default=0 If this keyword is set, the new display window will match the size of the current display window, if there is one. wid: in, optional, type=integer, default=0 The window index number of the IDL graphics window to create. window: in, optional, type=integer, default=0 Because I want to use cgDisplay everywhere, including in resizeable graphics windows, and I don't want it opening windows then, it first checks to be sure there are no resizeable graphics windows on the display before it creates a window. Setting this keyword will overrule this check and create a normal IDL graphics window on the display. This will allow you to open a normal graphics window at the same time a resizeable graphics window exists on the display. xsize: in, optional, type=integer, default=640 The X size of the graphics window created. By default, 640. The PXSIZE parameter is used in preference to the XSIZE keyword value. ysize: in, optional, type=integer, default=512 The Y size of the graphics window created. By default, 512. The PYSIZE parameter is used in preference to the YSIZE keyword value. _extra: in, optional, type=any Any keywords supported by the WINDOW command are allowed. :Examples: Use like the IDL WINDOW command:: IDL> cgDisplay, XSIZE=500 YSIZE=400 IDL> cgDisplay, 500, 500, WID=1, COLOR='gray' :Author: FANNING SOFTWARE CONSULTING:: David W. Fanning 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com :History: Change History:: Written, 15 November 2010. DWF. Changes so that color variables don't change type. 23 Nov 2010. DWF. Moved the window index argument to the WID keyword. 9 Dec 2010. DWF. Modified to produce a window in PostScript and the Z-buffer, too. 15 Dec 2010. DWF. Added the FREE keyword. 3 January 2011. DWF. I made a change that allows you to call cgDisplay inside a program that is going to be added to a cgWindow. The program will not open a graphics window if the current graphics window ID is found in a list of cgWindow window IDs. It is now possible to use cgDisplay in any graphics program, even those that will be run in cgWindow. 17 Nov 2011. DWF. Added ASPECT keyword. 18 Nov 2011. DWF. Allowed the window ASPECT to be set with an image argument. 25 Nov 2011. DWF. Now use Scope_Level to always create a display when cgDisplay is called from the main IDL level. 7 Feb 2012. DWF. Added FORCE and MATCH keywords. 16 Feb 2012. DWF. :Copyright: Copyright (c) 2010-2012, Fanning Software Consulting, Inc.
(See $IDLUTILS_DIR/goddard/pro/coyote/cgdisplay.pro)
CGERASE
Provides a device-independent and color-model-independent way to erase a graphics window with a particular color. :Categories: Graphics :Params: background_color: in, optional, type=string/integer/long, default='white' The color to use in erasing the graphics window. Default is "white." Color names are those used with cgColor. :Keywords: color: in, optional, type=string/integer/long, default='white' An alternative way to specify the color to use in erasing the graphics window. Color names are those used with cgColor. This parameter is used in preference to the background_color parameter. layout: in, optional, type=intarr(3) This keyword specifies a grid with a graphics window and determines where the graphic should appear. The syntax of LAYOUT is three numbers: [ncolumns, nrows, location]. The grid is determined by the number of columns (ncolumns) by the number of rows (nrows). The location of the graphic is determined by the third number. The grid numbering starts in the upper left (1) and goes sequentually by column and then by row. If this keyword is used, only this portion of the window is erased. window: in, optional, type=boolean, default=0 Set this keyword to erase the current cgWindow application. "Erasing" in this case means removing all the current commands. :Examples: Used to "erase" various things:: IDL> cgErase IDL> cgErase, 'gray' IDL> cgErase, COLOR='charcoal' IDL> cgPlot, cgDemoData(1), /Window IDL> cgErase, /Window IDL> cgPlot, cgDemoData(17), Layout=[2,2,1] IDL> cgPlot, cgDemoData(17), Layout=[2,2,4] IDL> cgErase, Layout=[2,2,1] :Author: FANNING SOFTWARE CONSULTING:: David W. Fanning 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com :History: Change History:: Written, 12 November 2010. DWF. Modified so that input variables are not changed. 18 Nov 2010. DWF. Got my color selection algorithm right. COLOR keyword takes precedence over the parameter. 18 Nov 2010. DWF. Modified to erase in decomposed color, if possible. In some cases, I was turning BYTE values to strings without converting to INTEGERS first. 30 Dec 2010. DWF. Added WINDOW keyword. 26 Jan 2011. DWF. Added LAYOUT keyword. 1 Feb 2011. DWF. Modified error handler to restore the entry decomposition state if there is an error. 17 March 2011. DWF :Copyright: Copyright (c) 2010, Fanning Software Consulting, Inc.
(See $IDLUTILS_DIR/goddard/pro/coyote/cgerase.pro)
CGPICKFILE
This is a utility program for selecting data files. It is a wrapper for DIALOG_PICKFILE, with the additional functionality of being able to "remember" the name and directory of the last file selected by the program. It basically allows you to start the next file selection from the location of the previous file selection. :Categories: Utility :Returns: The fully-qualified name of the selected file or a null string if the CANCEL button was selected. :Keywords: datadir: in, optional, type=string Set this keyword to the name of the data directory. If not set, the program assumes the data directory is rooted in the directory that holds this program file, or the directory directly above it. If it can't find a "data" directory in either of these two locations, the current directory is used as the "data" directory. The data directory is ONLY used if there is no "current" last directory. In other words, it is only used if cgPickfile has not been called in the current IDL session. demo: in, optional, type=boolean, default=0 If set, starts in the !DIR/examples/data directory. jpeg: in, optional, type=boolean, default=0 If set, starts in the "jpeg" directory. It assumes the jpeg directory is rooted in the "data" directory. hdf: in, optional, type=boolean, default=0 If set, starts in the "hdf" directory. It assumes the hdf directory is rooted in the "data" directory. last_file: in, optional, type=boolean, default=0 If set, the name of the last file opened is placed in the filename widget. lidar: in, optional, type=boolean, default=0 If set, starts in the "lidar" directory. It assumes the lidar directory is rooted in the "data" directory. ncdf: in, optional, type=boolean, default=0 If set, starts in the "ncdf" directory. It assumes the ncdf directory is rooted in the "data" directory. png: in, optional, type=boolean, default=0 If set, starts in the "png" directory. It assumes the png directory is rooted in the "data" directory. tiff: in, optional, type=boolean, default=0 If set, starts in the "tiff" directory. It assumes the tiff directory is rooted in the "data" directory. title: in, optional, type=string, default="Please Select a File" The title for the selection dialog window. If the `Write` keyword is set, the default title becomes "Please Select a File for Writing". write: in, optional, type=boolean, default=0 Set this keyword to change the default title to "Please Select a File for Writing". _ref_extra: in, optional Accepts any input keywords to DIALOG_PICKFILE (e.g., FILTER). :Author: FANNING SOFTWARE CONSULTING:: David W. Fanning 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com :History: Change History:: Adapted from FSC_PICKFILE to be a Coyote Graphics routine by David W. Fanning, 4 Aug 2011. Added keywords TITLE and WRITE to work around a bug in Dialog_Pickfile that clips the input filenames. 25 Feb 2012. DWF. :Copyright: Copyright (c) 2011, Fanning Software Consulting, Inc.
(See $IDLUTILS_DIR/goddard/pro/coyote/cgpickfile.pro)
CGPLOT
The purpose of cgPlot is to create a wrapper for the traditional IDL graphics command, Plot. The primary purpose of this is to create plot commands that work and look identically both on the display and in PostScript files. Program default colors will depend on the IDL graphics window. If no windows are currently open when the program is called, cgDisplay is used to create a window. The program requires the `Coyote Library <http://www.idlcoyote.com/documents/programs.php>` to be installed on your machine. :Categories: Graphics :Params: x: in, required, type=any If X is provided without Y, a vector representing the dependent values to be plotted If both X and Y are provided, X is the independent parameter and Y is the dependent parameter to be plotted. y: in, optional, type=any A vector representing the dependent values to be plotted. :Keywords: addcmd: in, optional, type=boolean, default=0 Set this keyword to add the command to the resizeable graphics window cgWindow. aspect: in, optional, type=float, default=none Set this keyword to a floating point ratio that represents the aspect ratio (ysize/xsize) of the resulting plot. The plot position may change as a result of setting this keyword. Note that `Aspect` cannot be used when plotting with !P.MULTI. axiscolor: in, optional, type=string/integer, default='opposite' If this keyword is a string, the name of the axis color. Otherwise, the keyword is assumed to be a color index into the current color table. axescolor: in, optional, type=string/integer Provisions for bad spellers. background: in, optional, type=string/integer, default='background' If this keyword is a string, the name of the background color. Otherwise, the keyword is assumed to be a color index into the current color table. charsize: in, optional, type=float, default=cgDefCharSize() The character size for axes annotations. Uses cgDefCharSize to select default character size, unless !P.Charsize is set, in which case !P.Charsize is always used. color: in, optional, type=string/integer, default='black' If this keyword is a string, the name of the data color. By default, 'black'. Color names are those used with cgColor. Otherwise, the keyword is assumed to be a color index into the current color table. font: in, optional, type=integer, default=!P.Font The type of font desired for axis annotation. isotropic: in, optional, type=boolean, default=0 A short-hand way of setting the `Aspect` keyword to 1. layout: in, optional, type=intarr(3) This keyword specifies a grid with a graphics window and determines where the graphic should appear. The syntax of LAYOUT is three numbers: [ncolumns, nrows, location]. The grid is determined by the number of columns (ncolumns) by the number of rows (nrows). The location of the graphic is determined by the third number. The grid numbering starts in the upper left (1) and goes sequentually by column and then by row. nodata: in, optional, type=boolean, default=0 Set this keyword to draw axes, but no data. noerase: in, optional, type=boolean, default=0 Set this keyword to draw the plot without erasing the display first. outfilename: in, optional, type=string If the `Output` keyword is set, the user will be asked to supply an output filename, unless this keyword is set to a non-null string. In that case, the value of this keyword will be used as the filename and there will be no dialog presented to the user. output: in, optional, type=string, default="" Set this keyword to the type of output desired. Possible values are these:: 'PS' - PostScript file 'EPS' - Encapsulated PostScript file 'PDF' - PDF file 'BMP' - BMP raster file 'GIF' - GIF raster file 'JPEG' - JPEG raster file 'PNG' - PNG raster file 'TIFF' - TIFF raster file Or, you can simply set this keyword to the name of the output file, and the type of file desired will be determined by the file extension. If you use this option, the user will not be prompted to supply the name of the output file. All raster file output is created through PostScript intermediate files (the PostScript files will be deleted), so ImageMagick and Ghostview MUST be installed to produce anything other than PostScript output. (See cgPS2PDF and PS_END for details.) And also note that you should NOT use this keyword when doing multiple plots. The keyword is to be used as a convenient way to get PostScript or raster output for a single graphics command. Output parameters can be set with cgWindow_SetDefs. overplot: in, optional, type=boolean, default=0 Set this keyword if you wish to overplot data on an already exisiting set of axes. It is like calling the IDL OPLOT command. position: in, optional, type=vector The usual four-element position vector for the Plot comamnd. Only monitored and possibly set if the `Aspect` keyword is used. psym: in, optional, type=integer Any normal IDL PSYM values, plus any value supported by the Coyote Library routine SYMCAT. An integer between 0 and 46. symcolor: in, optional, type=string/integer, default='black' If this keyword is a string, the name of the symbol color. By default, 'black'. Otherwise, the keyword is assumed to be a color index into the current color table. symsize: in, optional, type=float, default=1.0 The symbol size. traditional: in, optional, type=boolean, default=0 If this keyword is set, the traditional color scheme of a black background for graphics windows on the display is used and PostScript files always use a white background. window: in, optional, type=boolean, default=0 Set this keyword to replace all the commands in a current cgWindow or to create a new cgWindow for displaying this command. _ref_extra: in, optional, type=any Any keyword appropriate for the IDL Plot command is allowed in the program. :Examples: Use as you would use the IDL PLOT command:: cgPlot, Findgen(11) cgPlot, Findgen(11), Aspect=1.0 cgPlot, Findgen(11), Color='olive', AxisColor='red', Thick=2 cgPlot, Findgen(11), Color='blue', SymColor='red', PSym=-16 :Author: FANNING SOFTWARE CONSULTING:: David W. Fanning 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com :History: Change History:: Written, 12 November 2010. DWF. Added SYMCOLOR keyword, and allow all 46 symbols from SYMCAT. 15 November 2010. DWF. Added NODATA keyword. 15 November 2010. DWF. Now setting decomposition state by calling SetDecomposedState. 16 November 2010. DWF. Final color table restoration skipped in Z-graphics buffer. 17 November 2010. DWF. Fixed a problem with overplotting with symbols. 17 November 2010. DWF. Background keyword now applies in PostScript file as well. 17 November 2010. DWF. Many changes after BACKGROUND changes to get !P.MULTI working again! 18 November 2010. DWF. Fixed a small problem with the OVERPLOT keyword. 18 Nov 2010. DWF. Changes so that color inputs don't change type. 23 Nov 2010. DWF. Added WINDOW keyword to allow graphic to be displayed in a resizable graphics window. 8 Dec 2010. DWF Modifications to allow cgPlot to be drop-in replacement for old PLOT commands in indexed color mode. 24 Dec 2010. DWF. Previous changes introduced problems with OVERPLOT that have now been fixed. 28 Dec 2010. DWF. Set NOERASE keyword from !P.NoErase system variable when appropriate. 28 Dec 2010. DWF. Additional problems with NOERASE discovered and solved. 29 Dec 2010. DWF. In some cases, I was turning BYTE values to strings without converting to INTEGERS first. 30 Dec 2010. DWF. Selecting character size now with cgDefCharSize. 11 Jan 2011. DWF. Moved setting to decomposed color before color selection process to avoid PostScript background problems when passed 24-bit color integers. 12 Jan 2011. DWF. Changed _EXTRA to _REF_EXTRA on procedure definition statement to be able to return plot keywords such as XGET_TICKS. 13 Jan 2011. DWF. Added SYMSIZE keyword. 16 Jan 2011. DWF. Fixed a problem in which I assumed the background color was a string. 18 Jan 2011. DWF. Added ADDCMD keyword. 26 Jan 2011. DWF. Added LAYOUT keyword. 28 Jan 2011. DWF. Made a modification that allows THICK and COLOR keywords apply to symbols, too. 24 Feb 2011. DWF. Modified error handler to restore the entry decomposition state if there is an error. 17 March 2011. DWF Somehow I had gotten independent and dependent data reversed in the code. Put right. 16 May 2011. DWF. Allowed ASPECT (and /ISOTROPIC) to take into account input POSITION. 15 June 2011. Jeremy Bailin. Updated the BACKGROUND color selection from lessons learned in 27 Oct 2011 cgContour corrections. 27 Oct 2011. DWF. Added the ability to send the output directly to a file via the OUTPUT keyword. 9 Dec 2011, DWF. PostScript, PDF, and Imagemagick parameters can now be tailored with cgWindow_SetDefs. 14 Dec 2011. DWF. Modified to use cgDefaultColor for default color selection. 24 Dec 2011. DWF. Over-zealous use of _STRICT_EXTRA when overplotting resulted in errors. Now use _EXTRA. 1 Jan 2012. DWF. Changes to allow better default colors, based on changes to cgColor and cgDefaultColor. 1 Feb 2012. DWF. Now allowing the user to draw in the "background" color, if the COLOR or AXISCOLOR is "BACKGROUND". 19 March 2012. DWF. Scalar input parameters are changed to 1-element vectors to avoid annoying error messages from PLOT. 6 April 2012. DWF. :Copyright: Copyright (c) 2010-2012, Fanning Software Consulting, Inc.
(See $IDLUTILS_DIR/goddard/pro/coyote/cgplot.pro)
CGPLOTS
The purpose of cgPlotS is to create a wrapper for the traditional IDL graphics command, PlotS. The primary purpose of this is to create plot commands that work and look identically both on the display and in PostScript files. The program requires the `Coyote Library <http://www.idlcoyote.com/documents/programs.php>` to be installed on your machine. :Categories: Graphics :Params: X: in, required, type=any A vector or scalar argument providing the X components of the points to be drawn or connected. May be a 2xN or 3xN array, if Y and Z parameters are not used. Y: in, optional, type=any A vector or scalar argument providing the Y components of the points to be drawn or connected. Z: in, optional, type=any A vector or scalar argument providing the Z components of the points to be drawn or connected. :Keywords: addcmd: in, optional, type=boolean, default=0 Set this keyword to add the command to an cgWindow display. color: in, optional, type=string/integer, default='opposite' If this keyword is a string, the name of the data color. Color names are those used with cgColor. Otherwise, the keyword is assumed to be a color index into the current color table. May be a vector of the same length as X. map_object: in, optional, type=object If you are drawing on a map projection set up with Map_Proj_Init and using projected meter space, rather than lat/lon space, then you can use this keyword to provide a cgMap object that will allow you to convert the `x` and `y` parameters from longitude and latitude, respectively, to projected meter space before drawing. X and Y must both be present. psym: in, optional, type=integer Any normal IDL PSYM values, plus any value supported by the Coyote Library routine SYMCAT. An integer between 0 and 46. symcolor: in, optional, type=string/integer/vector, default=COLOR If this keyword is a string, the name of the symbol color. By default, same as COLOR. Otherwise, the keyword is assumed to be a color index into the current color table. May be a vector of the same length as X. symsize: in, optional, type=float/vector, default=1.0 A scalar or vector of symbol sizes. Default is 1.0. May be a vector of the same length as X. window: in, optional, type=boolean, default=0 Set this keyword to add the command to the current cgWindow application. _extra: in, optional, type=any Any keywords supported by the PLOTS command are allowed. :Examples: Use like the IDL PLOTS command:: IDL> cgPlot, Findgen(11) IDL> cgPlotS, !X.CRange, [5,5], LINESTYLE=2, THICK=2, COLOR='red' :Author: FANNING SOFTWARE CONSULTING:: David W. Fanning 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com :History: Change History:: Written, 12 November 2010. DWF. Added SYMCOLOR keyword. PSYM accepts all values from SYMCAT. SYMCOLOR and SYMSIZE keywords can be vectors the size of x. 15 November 2010. DWF Added ability to support COLOR keyword as a vector the size of x. 15 November 2010. DWF Now setting decomposition state by calling SetDecomposedState. 16 November 2010. DWF. Final color table restoration skipped in Z-graphics buffer. 17 November 2010. DWF. Changes so that color variables don't change type. 23 Nov 2010. DWF. Modified to use decomposed color, if possible. 24 Dec 2010. DWF. Whoops! Programming is like herding cats! 29 Dec 2010. DWF. In some cases, I was turning BYTE values to strings without converting to INTEGERS first. 30 Dec 2010. DWF. Moved setting to decomposed color before color selection process to avoid PostScript background problems when passed 24-bit color integers. 12 Jan 2011. DWF. Added WINDOW keyword. 24 Jan 2011. DWF. Made a modification that allows THICK and COLOR keywords apply to symbols, too. 24 Feb 2011. DWF. Modified error handler to restore the entry decomposition state if there is an error. 17 March 2011. DWF Fixed a problem in which the colors of the line was not accurate in some cases. 29 November 2011. DWF. Added the MAP_OBJECT keyword for plotting on map projections. 2 Jan 2012. DWF. :Copyright: Copyright (c) 2010-2012, Fanning Software Consulting, Inc.
(See $IDLUTILS_DIR/goddard/pro/coyote/cgplots.pro)
CGPS2PDF
Converts a PostScript file to a PDF file. This program requires the `Ghostscript <http://www.ghostscript.com/download/>` program to be installed on the user's computer, unless you are using a Macintosh computer or an alterntive UNIX command to do the conversion for you. If you are on a Macintosh, the supplied pstopdf program is used instead. Use the `UNIX_Convert_Cmd` keyword to select an alternative UNIX command (e.g., pstopdf or epstopdf). The program requires the `Coyote Library <http://www.idlcoyote.com/documents/programs.php>` to be installed on your machine. :Categories: Utilities, Graphics :Params: ps_file: in, required, type=string The name of the input PostScript file that is being converted to a PDF file. If not provided, the user will be asked to select a file. pdf_file: in, optional, type=string The name of the output PDF file. If not provided, the name is constructed from the input PostScript file name. :Keywords: delete_ps: in, optional, type=boolean, default=0 If this keyword is set, the PostScript file will be deleted after conversion. gs_path: in, optional, type=string This program assumes that UNIX users can access Ghostscript with the "gs" command. It assumes WINDOWS users have installed Ghostscript in either the C:\gs or C:\Program Files\gs directories. If either of these assumptions is incorrect, you can specify the directory where the Ghostscript executable resides with this keyword. (The Windows 32-bit executable is named gswin32c.exe and the 64-bit executable is named gswin64c.exe.) pagetype: in, optional, type=string, default="LETTER" Set this keyword to the "type" of page. Possible values are:: "Letter" - 8.5 by 11 inches. "Legal" - 8.5 by 14 inches. "Ledger" - 11 by 17 inches. "A4" - 21.0 by 29.7 centimeters. showcmd: in, optional, type=boolean, default=0 Set this keyword to print the command that is spawned in the command output window. silent: in, optional, type=boolean, default=0 Set this keyword to suppress output messages. success: out, optional, type=boolean Set this keyword to a named variable that on output will contain a 1 to indicate successful completion of the command, or to 0 otherwise. unix_convert_cmd: in, optional, type=string There are a number of commands on UNIX machines for converting PostScript files to PDF files. This program assumes you are using Ghostscript to do the conversion for you. The Ghostscript command on most UNIX machines is "gs", which is used if this keyword is undefined. However, if you would prefer to use another program to do the conversion for you, you can specify the name of the command here. For example, "pstopdf" or "epstopdf". In creating the actual command, this command will be separated by a space from the input file name. In other words, if the alternative conversion command was "pstopdf", the actual command would be "pstopdf" + " " + ps_file. Any output filename is ignored. This command does not apply to Macintosh or Windows computers. version: out, optional, type=string On exit, contains the version of Ghostscipt that was used. Not available on Macs or if an alternative UNIX command was used. :Examples: A typical sequence of commands to create a test.pdf file:: PS_Start, Filename='test.ps' cgHistoplot, cgDemoData(7), /Fill PS_End cgPS2PDF, 'test.ps' :Author: FANNING SOFTWARE CONSULTING:: David W. Fanning 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com :History: Change History:: Written, 6 December 2011, from code supplied to me by Paul Krummel. DWF. :Copyright: Copyright (c) 2011, Fanning Software Consulting, Inc.
(See $IDLUTILS_DIR/goddard/pro/coyote/cgps2pdf.pro)
CGQUERY
Provides information about any cgWindow applications currently on the display. Returns the window index numbers of any cgWindow applications current on the display. :Categories: Graphics :Keywords: count: out, optional, type=long The number of cgWindow applications currently on the display. current: in, optional, type=boolean If set, the current cgWindow application information is returned in the result of the function and in the information keywords. dimensions: out, optional, type=integer The dimensions of the ctWindow application, [xdim, ydim, n]. objectref: out, optional, type=object A vector of FSC_CMDWINDOW object references for each cgWindow application currently on the display. title: out, optional, type=string A vector of window titles for each cgWindow application currently on the display. widgetID: out, optional, type=long A vector of widget identifiers of the top-level base widget for each cgWindow application currently on the display. :Returns: windowIndexID: out, type=long An array of window index numbers for each cgWindow application currently on the display. :Examples: Used as a query routine:: IDL> wids = cgQuery(TITLE=titles, COUNT=count) IDL> index = Where(StrUpCase(titles) EQ 'PLOT WINDOW', tcnt) IDL> IF tcnt GT 0 THEN cgSet, wids[index] IDL> cgWindow, 'Oplot', thisData, /AddCmd :Author: FANNING SOFTWARE CONSULTING:: David W. Fanning 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com :History: Change History:: Written, 23 January 2011. DWF. Added DIMENSIONS keyword to return current dimensions of cgWindows. 24 Feb 2011. DWF. Made sure this program only returns information on devices that support windows. 20 July 2011. DWF. :Copyright: Copyright (c) 2011, Fanning Software Consulting, Inc.
(See $IDLUTILS_DIR/goddard/pro/coyote/cgquery.pro)
CGSET
Allows the user to select the cgWindow application to be the "current" application. Selection can be made based on window index number, widget identifier, object reference, or window title. :Categories: Graphics :Params: selection: in, optional, type=varies Normally, a window index number of an cgWindow application. But, the selection can be a widget identifier, an object reference, or a window title, depending on which keywords are set. The cgWindow matching the selection is made the "current" cgWindow and the application is moved forward on the display. :Keywords: display: in, optional, type=boolean, default=0 If this keyword is set, the selection is made the "current" application, and then the graphics window of the application is made the current graphics window. If there is no selection, then the current cgWindow graphics window is made the current graphics window. object: in, optional, type=boolean If this keyword is set, the selection is assumed to be an object reference. title: in, optional, type=boolean If this keyword is set, the selection is assumed to be a window title. All matching is done in uppercase characters. widgetid: in, optional, type=boolean If this keyword is set, the selection is assumed to be a widget identifier. :Examples: Used with query routine:: IDL> wids = cgQuery(TITLE=titles, COUNT=count) IDL> index = Where(StrUpCase(titles) EQ 'PLOT WINDOW', tcnt) IDL> IF tcnt GT 0 THEN cgSet, wids[index] IDL> cgWindow, 'Oplot', thisData, /AddCmd IDL> cgSet ; Bring current window forwad on display :Author: FANNING SOFTWARE CONSULTING:: David W. Fanning 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com :History: Change History:: Written, 23 January 2011. DWF. If selection match isn't provided, as like WShow to bring the current window forward on display. 26 Jan 2011. DWF. :Copyright: Copyright (c) 2011, Fanning Software Consulting, Inc.
(See $IDLUTILS_DIR/goddard/pro/coyote/cgset.pro)
CGSHOW
Allows the user to select the cgWindow application to be the brought forward on the display. Selection can be made based on window index number, widget identifier, object reference, or window title. This is the equivalent of WShow for normal graphics windows. :Categories: Graphics :Params: selection: in, required, type=varies Normally, a window index number of an cgWindow application. But, the selection can be a widget identifier, an object reference, or a window title, depending on which keywords are set. The cgWindow matching the selection is made the "current" cgWindow and the application is moved forward on the display. :Keywords: object: in, optional, type=boolean If this keyword is set, the selection is assumed to be an object reference. title: in, optional, type=boolean If this keyword is set, the selection is assumed to be a window title. All matching is done in uppercase characters. widgetid: in, optional, type=boolean If this keyword is set, the selection is assumed to be a widget identifier. :Examples: Used with query routine:: IDL> wids = cgQuery(TITLE=titles, COUNT=count) IDL> index = Where(StrUpCase(titles) EQ 'PLOT WINDOW', tcnt) IDL> IF tcnt GT 0 THEN cgSet, wids[index] IDL> cgWindow, 'Oplot', thisData, /AddCmd IDL> cgShow ; Bring current window forwad on display :Author: FANNING SOFTWARE CONSULTING:: David W. Fanning 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com :History: Change History:: Written, 1 February 2011. DWF. :Copyright: Copyright (c) 2011, Fanning Software Consulting, Inc.
(See $IDLUTILS_DIR/goddard/pro/coyote/cgshow.pro)
CGSNAPSHOT
To get accurate screen dumps with the IDL command TVRD on 24-bit PC and Macintosh computers, you have to be sure to set color decomposition on. This program adds that capability automatically. In addition, the program will optionally write BMP, GIF, JPEG, PICT, PNG, and TIFF color image files of the screen dump. :Categories: Graphics :Returns: The returned image will be a 2D image on 8-bit systems and a 24-bit pixel interleaved true-color image on 24-bit systems. A -1 will be returned if a file output keyword is used (e.g., JPEG, TIFF, etc.). :Params: xstart: in, optional, type=integer, default=0 The starting column index of the rectantular area that is to be copied. ystart: in, optional, type=integer, default=0 The starting row index of the rectantular area that is to be copied. ncols: in, optional, type=integer The number of columns to read in the rectantular area that is to be copied. By default, !D.X_Size - xstart. nrows: in, optional, type=integer The number of rows to read in the rectantular area that is to be copied. By default, !D.Y_Size - ystart. :Keywords: bmp: in, optional, type=boolean, default=0 Set this keyword to write the screen dump as a color BMP file. cancel: out, optional, type=boolean, default=0 An output keyword set to 1 if the user cancels out of a filename dialog. Set to 0 otherwise. colors: in, optional, type=integer, default=256 If a 24-bit image has to be quantized, this will set the number of colors in the output image. Applies to BMP, GIF, PICT, and PNG formats written from 24-bit displays.(See the COLOR_QUAN documentation for details.) cube: in, optional, type=integer If this keyword is set to a value between 2 and 6 the color quantization will use a cubic method of quantization. Applies to BMP, GIF, PICT, and PNG formats written from 24-bit displays.(See the COLOR_QUAN documentation for details.) dither: in, optional, type=boolean, default=0 If this keyword is set the quantized image will be dithered. Applies to BMP, GIF, PICT, and PNG formats written from 24-bit displays.(See the COLOR_QUAN documentation for details.) filename: in, optional, type=string The name of the output file. If you specify a name with a file extension of the type of file you want to create (e.g., *.jpg, *.png, etc), then you do not have to use the file type keywords (e.g., JPEG, PNG, etc.). Otherwise, you can specify the name of the the file without an extension, use the file keywords, and a file extension will be added to the filename automatically, depending upon the type of output file selected. gif: in, optional, type=boolean, default=0 Set this keyword to write the screen dump as a color GIF file. jpeg: in, optional, type=boolean, default=0 Set this keyword to write the screen dump as a color JPEG file. nodialog: in, optional, type=boolean, default=0 Set this keyword if you wish to avoid the DIALOG_PICKFILE dialog that asks you to name the output file. This keyword should be set, for example, if you are processing screens in batch mode. order: in, optional, type=boolean, default=0 Set this keyword to determine the image order for reading the display. Corresponds to !Order and set to such as the default. overwrite_prompt: in, optional, type=boolean, default=0 Set this keyword if you would like to get a prompt if you are overwriting a file. This applies only to operations involving DIALOG_PICKFILE. pict: in, optional, type=boolean, default=0 Set this keyword to write the screen dump as a color PICT file. png: in, optional, type=boolean, default=0 Set this keyword to write the screen dump as a color PNG file. tiff: in, optional, type=boolean, default=0 Set this keyword to write the screen dump as a color TIFF file. true: in, optional, type=integer, default=1 Set this keyword to the type of interleaving you want. 1 = Pixel interleaved, 2 = row interleaved, 3 = band interleaved. type: in, optional, type=string Set this keyword to the type of file to write. Use this instead of setting BMP, GIF, JPEG, PICT, PNG, or TIFF keywords: TYPE='JPEG'. The primary purpose of this is to make widget event handlers easier to write. quality: in, optional, type=integer, default=75 This keyword sets the amount of compression for JPEG images. It should be set to a value between 0 and 100. (See the WRITE_JPEG documentation for details.) wid: in, optional, type=integer The index number of the window to read from. The current graphics window (!D.Window) is selected by default. An error is issued if no windows are currently open on a device that supports windows. _ref_extra: in, optional Any keywords that are appropriate for the WRITE_*** routines are also accepted via keyword inheritance. :Examples: To obtain an image of the current graphics window:: IDL> image = cgSnapshot() To create a PNG file, named "test.png", of the current graphics window:: IDL> void = cgSnapshot(FILENAME='test.png') To obtain the lower quadrant of a 512-by-512 graphics window as a band interleaved image:: IDL> image = cgSnapshot(0, 0, 256, 256, TRUE=3) :Author: FANNING SOFTWARE CONSULTING:: David W. Fanning 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com :History: Change History:: Renamed TVRead to cgSnapshot and retired TVRead. 20 February 2011. DWF. Added the ability to get the file type from the file name extension. 26 Dec 2011. DWF. :Copyright: Copyright (c) 2011, Fanning Software Consulting, Inc.
(See $IDLUTILS_DIR/goddard/pro/coyote/cgsnapshot.pro)
CGTEXT
Provides a device-independent and color-model-independent way to write text into a graphics window. It is a wrapper to the XYOUTS command. :Categories: Graphics :Params: xloc: in, required, type=depends The X location of the text. yloc: in, required, type=depends The Y location of the text. text: in, optional, type=string The text to output. By default, the calling sequence of the program. :Keywords: addcmd: in, optional, type=boolean, default=0 Set this keyword to add the command to an cgWindow. Setting this keyword automatically sets the WINDOW keyword, but the command does not erase the graphics window as it would normally. alignment: in, optional, type=integer, default=0 Set this keyword to indicate the alignment of the text with respect to the x and y location. 0 is left aligned, 0.5 is centered, and 1.0 is right aligned. The alignment is set to 0.5 if PLACE is set and ALIGNMENT is unspecified. Otherwise, the default is 0. charsize: in, optional, type=float, default=cgDefCharSize() The character size for axes annotations. Uses cgDefCharSize to select default character size, unless !P.Charsize is set, in which case !P.Charsize is always used. color: in, optional, type=string/integer/long, default="opposite" The color of the text. Color names are those used with cgColor. data: in, optional, type=boolean Set this keyword to indicate xloc and yloc are in data coordinates. Data coordinates are the default, unless DEVICE or NORMAL is set. device: in, optional, type=boolean Set this keyword to indicate xloc and yloc are in device coordinates. font: in, optional, type=integer, default=!P.Font The type of font desired. By default, !P.Font. normal: in, optional, type=boolean Set this keyword to indicate xloc and yloc are in normalized coordinates. outloc: out, optional, type=various Only used if PLACE is set, this is a two-element array containing the xloc and yloc of the cursor position in the window. place: in, optional, type=boolean Set this keyword if you wish to click the cursor in the graphics window to place the text. If this keyword is set, you do not need to specify the `xloc` and `yloc` positional parameters. The first positional parameter is assumed to be the text. The clicked location will be returned in the `OutLoc` variable. If the `Alignment` keyword is not set, it will be set to 0.5 to set "center" as the default placement alignment. This has been modified to allow this keyword to work in a resizeable graphics window as well. Clicking once in the window will set the parameters so you don't have to click every time the window is resized. tt_font: in, optional, type=string The true-type font to use for the text. Only used if FONT=1. width: out, optional, type=float Set this keyword to a named variable in which to return the width of the text string, in normalized coordinate units. window: in, optional, type=boolean Set this keyword to add the command to the in the current cgWindow application. _ref_extra: in, optional Any keywords appropriate for the XYOUTS command. :Examples: Used like the IDL XYOUTS command:: IDL> cgText, 0.5, 0.5, 'This is sample text', ALIGNMENT=0.5, /NORMAL IDL> cgText, /PLACE, 'Use the cursor to locate this text', COLOR='dodger blue' :Author: FANNING SOFTWARE CONSULTING:: David W. Fanning 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com :History: Change History:: Written, 19 November 2010. DWF. Corrected a problem with setting text color and added PLACE and OUTLOC keywords. 25 Nov 2010. DWF. Humm, that text color problem got reset to the old way! Sheesh! Fixed. 9 Dec 2010. DWF. Modified the way the default color is selected. Drawing with DECOMPOSED if possible. 30 Dec 2010. DWF. Keywords collected with _REF_EXTRA so WIDTH can be returned. Added WIDTH keyword. 6 Jan 2011. DWF. Moved setting to decomposed color before color selection process to avoid PostScript background problems when passed 24-bit color integers. 12 Jan 2011. DWF. Added Window keyword. 24 Jan 2011. DWF. Added ability to return WIDTH from resizeable graphics windows and added ADDCMD keyword. 24 Feb 2011. DWF. Modified error handler to restore the entry decomposition state if there is an error. 17 March 2011. DWF Modified to allow the user to place the text in a resizeable graphics window. 13 Dec 2011. DWF. Modified to use cgDefaultColor for default color selection. 24 Dec 2011. DWF. Modifications to the way I obtain the WIDTH when adding the command to a cgWindow. 26 Jan 2012. DWF. :Copyright: Copyright (c) 2010, Fanning Software Consulting, Inc.
(See $IDLUTILS_DIR/goddard/pro/coyote/cgtext.pro)
CGWINDOW[1]
Creates a resizeable graphics window for IDL traditional commands (Plot, Contour, Surface, etc. or for Coyote Graphics routines, `cgPlot`, `cgContour`, `cgSurf`, etc.). In addition, the window contents can be saved as PostScript, PDF, or raster image files. If ImageMagick is installed on your machine, the raster image files can be created in very high quality from PostScript files. The program is designed to work with any IDL traditional graphics routine that is a procedure and includes no more than three positional parameters. Any number of keywords can be used to specify properties of the graphical output. Any number of graphics commands can be "added" the the cgWindow. Simply use the `AddCmd` keyword to add commands. If your program does not load its own color tables, the color tables in effect when cgWindow is first called are used to display the graphics commands. To create PostScript output from within cgWindow, your graphics program has to be written in such a way that it can work properly in the PostScript device. This means there are no Window commands, WSet commands, and the like that are not allowed in the PostScript device. Such commands are allowed in programs, of course, if they are "protected". Usually such protection looks like this:: IF (!D.Flags AND 256) NE 0 THEN Window, ... The Coyote Graphics program `cgDisplay` is a good program for opening graphics "windows", because such PostScript protection is built into the program. In a PostScript device, cgDisplay produces a "window" with the same aspect ratio as the current display graphics window, which is an aid in producing PostScript output that looks like the same output in the display window. Much better looking raster files can be created from the cgWindow contents, if the raster files are created by converting PostScript files to the raster file. If the ImageMagick "convert" command can be found on your machine, you will have the option to create raster files using this method. I *highly* recommend doing so, as fonts and other plot annotation will be of much higher quality using this method. cgWindow has been designed to work with other Coyote Graphics routines: `cgPlot`, `cgContour`, `cgSurf`, and so on, although I expect it to work with any IDL traditional graphics routine, if the routine is well written. :Categories: Graphics :Author: FANNING SOFTWARE CONSULTING:: David W. Fanning 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com :Copyright: Copyright (c) 2011, Fanning Software Consulting, Inc.
(See $IDLUTILS_DIR/goddard/pro/coyote/cgwindow.pro)
CGWINDOW[2]
Creates a resizeable graphics window for IDL traditional commands (Plot, Contour, Surface, etc. or for Coyote Graphics routines, cgPlot, cgContour, cgSurf, etc.). In addition, the window contents can be saved as PostScript files or as raster image files. If ImageMagick is installed on your machine, the raster image files can be created in very high quality from PostScript files. :Params: command: in, required, type=string The graphics procedure command to be executed. This parameter must be a string and the the command must be a procedure. Examples are 'Surface', 'Contour', 'Plot', 'cgPlot', cgContour, etc. p1: in, optional, type=any The first positional parameter appropriate for the graphics command. p2: in, optional, type=any The second positional parameter appropriate for the graphics command. p3: in, optional, type=any The third positional parameter appropriate for the graphics command. p4: in, optional, type=any The fourth positional parameter appropriate for the graphics command. :Keywords: addcmd: in, optional, type=boolean, default=0 Set this keyword to add an additional graphics command to an cgWindow. The command is added to the last created cgWindow, unless the WinID keyword is used to select another cgWindow. Adding a command causes all the commands in the window to be immediately executed. If this is not behavior you desire, use the LOADCMD keyword instead. If CMDINDEX is used to select a command index, the new command is added before the command currently occuping that index in the command list. altps_Keywords: in, optional, type=string A structure containing alternative keyword names (as tags) and values for those keywords to be used when the current device is the PostScript device. See http://www.idlcoyote.com/cg_tips/kwexpressions.php and the examples below for details on how to use this keyword. altps_Params: in, optional, type=IntArr(3) A structure containing alternative parameter values to be used when the current device is the PostScript device. Structure names are restricted to the names "P1", "P2", "P3" and "P4" to correspond to the equivalent positional parameter. See http://www.idlcoyote.com/cg_tips/kwexpressions.php and the examples below for details on how to use this keyword. cmddelay: in, optional, type=float If this keyword is set to a value other than zero, there will be a delay of this many seconds between command execution. This will permit "movies" of command sequences to be displayed. cmdindex: in, optional, type=integer This keyword is used to select which command in an cgWindow to act on when the AllCmd, DeleteCmd, LoadCmd and ReplaceCmd keywords are used. See the descriptions of these keywords for details on what happens when CmdIndex is missing. deletecmd: in, optional, type=boolean, default=0 Set this keyword to delete a graphics command from an cgWindow. If CmdIndex is undefined the last command entered into the window is deleted. It is not possible to delete the last command in the window. Use WinID to identify the cgWindow you are interested in. If WinID is undefined, the last cgWindow created is used. executecmd: in, optional, type=boolean, default=0 Set this keyword to immediate execute all the commands in an cgWindow. Normally, this is used after commands have been loaded with LOADCMD. group_leader: in, optional The identifier of a widget to serve as a group leader for this program. If the group leader is destroyed, this program is also destroyed. Used when calling this program from another widget program. listcmd: in, optional, type=boolean, default=0 If this keyword is set, the commands currently in the cgWindow are listed. Use WinID to identify the cgWindow you are interested in. If WinID is undefined, the last cgWindow created is used. loadcmd: in, optional, type=boolean, default=0 Set this keyword to add an additional graphics command to an cgWindow. The command is added to the last created cgWindow, unless the WinID keyword is used to select another cgWindow. Loaded commands are not automatically executed. Set the EXECUTECMD keyword at the end of loading to execute the loaded commands. If CMDINDEX is used to select a command index, the new command is loaded before the command currently occuping that index in the command list. method: in, optional, type=boolean, default=0 Set this keyword if the command is an object method call rather than a procedure call. If this keyword is set, the first positional parameter, p1, must be present and must be a valid object reference. replacecmd: in, optional, type=boolean, default=0 Set this keyword to replace a graphics command from an cgWindow. If CmdIndex is undefined, *all* commands in the window are replaced. Use WinID to identify the cgWindow you are interested in. If WinID is undefined, the last cgWindow created is used for the replacement. waspect: in, optional, type=float, default=normal Set this keyword to the aspect ratio you would like the window to have. The aspect ratio is calculated as (ysize/xsize). Must be a float value. If this keyword is set, the window will maintain this aspect ratio, even when it is resized. wbackground: in, optional, type=varies, default=!P.Background The background color of the window. Specifying a background color automatically sets the WErase keyword. werase: in, optional, type=boolean, default=0 Set this keyword to cause the window to be erased before graphics commands are drawn. This may need to be set, for example, to display images. winid: in, optional, type=integer Use this keyword to select the window cgWindow identifier (the number between the parentheses in the title bar of cgWindow). The AddCmd, ReplaceCmd, ListCmd, and DeleteCmd keywords will all apply to the commands in the last cgWindow created unless this keyword is used to select another cgWindow to apply the commands to. wmulti: in, optional, type=intarr(5) Set this keyword in exactly the same way you would set the !P.Multi keyword. It will allow you to display multi-plots in the cgWindow graphics window. wobject: out, optional, type=object cgWindow creates a FSC_CmdWindow object. This object reference is returned if this keyword is present. woxmargin: in, optional, type=float A two-element array indicating the left and right X outside margins for the graphical display. Used only when doing multiple plots with `WMulti`. woymargin: in, optional, type=float A two-element array indicating the bottom and top Y outside margins for the graphical display. Used only when doing multiple plots with `WMulti`. wxpos: in, optional, type=integer, default=5 The x offset in device coordinates of the cgWindow from the upper-left corner of the display. wypos: in, optional, type=integer, default=5 The y offset in device coordinates of the cgWindow from the upper-left corner of the display. wxsize: in, optional, type=integer, default=640 The x size in device coordinates of the graphics window. wysize: in, optional, type=integer, default=5 The y size in device coordinates of the the graphics window. wtitle: in, optional, type=string, default='Resizeable Graphics Window' The title of the graphics window. A window index number is appended to the title so multiple cgWindow programs can be selected. :Examples: Test code:: data = cgDemoData(17) cgWindow, 'cgPlot', data, COLOR='red' cgWindow, 'cgPlot', data, PSYM=2, /Overplot, COLOR='dodger blue', /AddCmd cgWIndow, 'cgPlot', cgDemoData(17), color='olive', linestyle = 2, /Overplot, /AddCmd cgWindow, /ListCmd cgWindow, 'cgPlot', data, COLOR='purple', /ReplaceCMD, CMDINDEX=0 Additional examples can be found here:: http://www.idlcoyote.com/graphics_tips/cgwindow.html Example using different keyword parameters for the display and PostScript output:: IDL> cgPlot, cgDemoData(1), /WINDOW, $ THICK=1.0, XTITLE='Distance (' + Greek('mu') + 'm)', $ ALTPS_KEYWORDS={THICK:4.0, XTITLE:'Distance (' + Greek('mu', /PS) + 'm)'} Example using different positional parameters:: IDL> cgText, 0.20, 0.85, /Normal, 'Line of Text', ALIGNMENT=0.0, $ ALTPS_KEYWORDS={ALIGNMENT:1.0}, ALTPS_PARAMS={P1:0.88}, /ADDCMD Additional examples can be found here:: http://www.idlcoyote.com/cg_tips/kwexpressions.php :History: Change History:: Written, 17 January 2011. DWF. Fixed a problem with the example code, and added EMPTY to end of Draw method to force UNIX machines to empty the graphics buffer after CALL_PROCEDURE. 20 Jan 2011. DWF. Improved documentation and error handling. 19 Jan 2011. DWF. More improved error handling and messages. 26 Jan 2011. DWF. Made changes to accommodate the new cgControl routine. 27 Jan 2011. DWF. Added WXOMARGIN and WYOMARGIN keywords. 28 Jan 2011. DWF. Numerous changes leading up to official release. 4 Feb 2011. DWF. Added workaround for UNIX bug for draw widget creation. 5 Feb 2011. DWF. Corrected a window aspect ratio problem with PostScript output by making the window the current window before calling PS_Start. 17 Feb 2011. DWF. Added machinery for programmatically generating raster files. 18 Feb 2011. Jeremy Bailin. Problem with restoring visualizations fixed. 6 March 2011. DWF. Fixed a problem with CALL_METHOD, which requires one positional parameter. 8 March 2011. DWF. Added the ability to set and unset adjustable text size in the window. 24 April 2011. DWF. Fixed a problem in the ReplaceCommand method that had input parameters reversed. 6 May 2011. DWF. Added the ability to set the dimensions of the draw widget programmatically. 14 June 2011. Added the keywords EvalKeywords and EvalParams to allow evaluation of command parameters and keywords at run-time. See http://www.idlcoyote.com/cg_tips/kwexpressions.php for additional details and explanations of how these keywords should be used. 2 Aug 2011. Problem dereferencing a null pointer in DRAW method fixed. 3 Aug 2011. DWF. Changes to handle inability to create raster files from PS encapsulated files in landscape mode. 26 Aug 2011. DWF. Added ability to set PostScript color mode. 30 Aug 2011. DWF. The method I was using for evaluating keyword and argument parameters at run-time was just WAY too complicated and difficult to use. I have eliminated this method (along with the EvalKeywords and EvalParams) in favor of a method that allows the user to supply alternative values to use in the PostScript device. This uses keywords AltPS_Keywords and AltPS_Params to collect these alternative arguments in structures that can be used at run-time to supply alternative values. As before, this is explained in detail at http://www.idlcoyote.com/cg_tips/kwexpressions.php. 1 Sept 2011. DWF. Missed a couple of places to set decomposition color mode. 7 Sept 2011. DWF. Fixed a problem with improper filename when creating raster file vis Imagemagick via cgControl. 10 Oct 2011. DWF. Added WASPECT keyword to allow window aspect ratio to be set. 9 Nov 2011. DWF. Added PDF file to the Save As menu. Requires Ghostscript to be installed on some machines. 6 Dec 2011. DWF. Added modifications to allow PDF files to be programmatically created from cgControl. 11 Dec 2011. DWF. Added the ability to specify a fourth positional parameter. 6 Jan 2012. DWF. Separated off the cgCmdWindow part of the code to make an object-widget draw widget. 19 Jan 2012. DWF. Fixed a small type with the Outside Margin keywords that was preventing these from being used. 19 April 2012. DWF.
(See $IDLUTILS_DIR/goddard/pro/coyote/cgwindow.pro)
CGWINDOW_GETDEFS
Allows the user to get the global defaults for resizeable cgWindow programs. :Categories: Graphics :Keywords: adjustsize: out, optional, type=boolean If set, adjust the default text size to match the display window size. aspect: out, optional, type=float The aspect ratio of the window. background: out, optional, type=string The background color of the window. delay: out, optional, type=float The amount of delay between command execution. eraseit: out, optional, type=boolean The Erase status of the window. im_density: out, optional, type=integer The sampling density. im_png8: out, optional, type=boolean If set, ImageMagick will create 8-bit PNG files, rather than 24-bit. im_options: out, optional, type=string Current ImageMagick convert options. im_raster: out, optional, type=boolean The raster via ImageMagick setting. im_resize: out, optional, type=integer The amount PostScript output is resized. im_transparent: out, optional, type=boolean The transparent background setting. im_width: out, optional, type=integer The final width of ImageMagick raster file output. multi: out, optional, type=Intarr(5) The !P.MULTI setting for the window. palette: out, optional, type=byte The window color palette. pdf_path: out, optional, type=string The name of the path to the Ghostscript command for converting PS to PDF. pdf_unix_convert_cmd: out, optional, type=string The name of an alternative UNIX command to convert PostScript to PDF. ps_charsize: out, optional, type=float, default=0.0 The PostScript character size. ps_decomposed: out, optional, type=boolean The PostScript decomposed status of the window. ps_delete: out, optional, type=boolean The delete PostScript file status of the window. ps_encapsulated: out, optional, type=boolean The PostScript encapsulated status of the window. ps_font: out, optional, type=integer The font being using for PostScript output. ps_metric: out, optional, type=boolean The metric status of the window. ps_quiet: out, optional, type=boolean Set to one of the QUIET keyword is set on PSConfig. ps_scale_factor: out, optional, type=float The PostScript scale factor. ps_tt_font: out, optional, type=string The name of the PostScript true-type font in current use. title: out, optional, type=boolean The window title. xomargin: out, optional, type=intarr(2) The !X.OMargin value for multiplots. xpos: out, optional, type=integer The X offset of the window from the upper-left corner of the display. xsize: out, optional, type=integer The starting X size of the window. yomargin: out, optional, type=intarr(2) The !Y.OMargin value for multiplots. ypos: out, optional, type=integer The Y offset of the window from the upper-left corner of the display. ysize: out, optional, type=integer The starting Y size of the window. :Examples: Used to get cgWindow global properties:: IDL> cgWindow_GetDefs, PALETTE=palette, PS_ENCAPSULATED=encap, PS_METRIC=metric :Author: FANNING SOFTWARE CONSULTING:: David W. Fanning 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com :History: Change History:: Written, 29 January 2011. DWF. Added PS_QUIET keyword. 17 Feb 2011. DWF. Added Raster_IM. 18 Feb 2011. Jeremy Bailin Added the ability to set and unset adjustable text size in cgWindow with ADJUSTSIZE keyword. 24 April 2011. DWF. Added PS_DECOMPOSED keyword to allow getting/setting of PostScript decomposed value. 30 Aug 2011. DWF. Added ASPECT keyword to allow getting/setting of window aspect ratio. 18 Nov 2011. DWF. Added PDF_UNIX_CONVERT_CMD and PDF_PATH keywords. 7 Dec 2011. DWF. Added IM_WIDTH keyword. 3 April 2012. DWF. Added IM_PNG8 keyword. 3 April 2012. DWF. :Copyright: Copyright (c) 2011-2012, Fanning Software Consulting, Inc.
(See $IDLUTILS_DIR/goddard/pro/coyote/cgwindow_getdefs.pro)
CGWINDOW_SETDEFS
Allows the user to set global defaults for resizeable cgWindow programs. :Categories: Graphics :Keywords: adjustsize: in, optional, type=boolean, default=0 Set this keyword to have the default text size adjusted to fit the size of the display window. aspect: in, optional, type=float, default=0.0 Set the aspect ratio of the window. If set to 0, the normal "default" window aspect ratio is used and nothing special is done when the window is resize. If aspect is not 0, then the window is confined to this aspect ratio. background: in, optional, type=string The background color of the window. Only use if the ERASEIT property is also set. delay: in, optional, type=float, default=0 Set this keyword to the amount of delay desired between command execution. 0 eraseit: in, optional, type=boolean If this property is set, the cgWindow erases with the background color before displaying the commands in the window's command list. im_density: in, optional, type=integer, default=300 Set this keyword to the sampling density when ImageMagick creates raster image file from PostScript outout. im_options: in, optional, type=string, default="" Set this keyword to any ImageMagick options you would like to pass along to the ImageMagick convert command when creating raster image files from PostScript output. im_raster: in, optional, type=boolean, default=1 (if ImageMagick is found) When raster files are created programmatically, this keyword determines if the raster file is created directly in IDL (value =0) or is created from a PostScript intermediate file via ImageMagick (value =1). The default is via ImageMagick if the convert program can be found on the machine running the program. im_resize: in, optional, type=integer, default=25 Set this keyword to percentage that the raster image file created my ImageMagick from PostScript output should be resized. im_transparent: in, optional, type=boolean, default=0 Set this keyword to allow ImageMagick to create transparent backgrounds when it makes raster image files from PostScript output. im_width: in, optional, type=integer Set this keyword to the width of the output raster file in pixel units. The height of the raster file is set to preserve the aspect ratio of the output image. Applies only to raster images (eg PNG, JPEG, TIFF, etc.) created from PostScript files with ImageMagick. multi: in, optional, type=Intarr(5) Set this keyword to the !P.MULTI setting you want to use for the window. !P.MULTI is set to this setting before command execution, and set back to it's default value when the commands are finished executing. palette: in, optional, type=byte Use this keyword to pass in an N-by-3 (or 3-by-N) byte array containing the R, G, and B vectors of a color table. It is probably easier to use cgLoadCT or XCOLORS to load color tables for the window, but this is provided as another option. pdf_path: out, optional, type=string Set this keyword to the name of the path to the Ghostscript command for converting PS to PDF. pdf_unix_convert_cmd: out, optional, type=string Set this keyword to the name of an alternative UNIX command to convert PostScript to PDF. ps_charsize: in, optional, type=float, default=0.0 Set this value to the !P.Charsize value to use when creating PostScript output. This value is not used if !P.Charsize is set to anything other than 0.0. ps_decomposed: in, optional, type=boolean If set, use decomposed color in the PostScript device. ps_delete: in, optional, type=boolean, default=1 Set this keyword to zero if you want to keep the PostScript output ImageMagick creates when making raster file output. ps_encapsulated: in, optional, type=boolean, default=0 Set this keyword to configure PSCONFIG to produce encapsulated PostScript output by default. ps_font: in, optional, type=integer, default=0 Set this to the !P.Font value to use for creating PostScript files. ps_metric: in, optional, type=boolean, default=0 Set this keyword to configure PSCONFIG to use metric values and A4 page size in its interface. ps_quiet: in, optional, type=boolean, default=0 Set this keyword to suppress output messages from PS_Start and PS_End. ps_scale_factor: in, optional, type=float, default=1.0 Set this keyword to the PostScript scale factor you want to use for PostScript output. ps_tt_font: in, optional, type=string, default="Helvetica" Set this keyword to the name of the PostScript true-type font to use for PostScript output. Not used, unless !P.Font=1. reset: in, optional, type=boolean, default=0 Set this keyword to reset all values to their default values. title: in, optional, type=boolean If this keyword is set, the selection is assumed to be a window title. All matching is done in uppercase characters. xomargin: in, optional, type=intarr(2) Set this keyword to set !X.OMargin to this value for multiplots. xpos: in, optional, type=integer Set this keyword to the X offset of the window from the upper-left corner of the display. xsize: in, optional, type=integer, default=640 Set this keyword to the starting X size of the window. yomargin: in, optional, type=intarr(2) Set this keyword to set !Y.OMargin to this value for multiplots. ypos: in, optional, type=integer Set this keyword to the Y offset of the window from the upper-left corner of the display. ysize: in, optional, type=integer, default=512 Set this keyword to the starting Y size of the window. :Examples: Used to set cgWindow global properties:: IDL> cgLoadCT, 5, RGB_TABLE=palette IDL> cgWindow_SetDefs, PALETTE=palette, $ ERASEIT=1, XSIZE=800, YSIZE=400, XPOS=100, YPOS=200, $ PS_ENCAPSULATED=1, PS_METRIC=1 IDL> cgImage, cgDemoData(7), /WINDOW, MARGIN=0.1 :Author: FANNING SOFTWARE CONSULTING:: David W. Fanning 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com :History: Change History:: Written, 29 January 2011. DWF. Small bug fixes, and addition of PS_QUIET keyword. 17 Feb 2011. DWF. Added Raster_IM, 18 February 2011. Jeremy Bailin. Added the ability to set and unset adjustable text size in cgWindow with ADJUSTSIZE keyword. 24 April 2011. DWF. Added PS_DECOMPOSED keyword to set the PostScript color mode. 30 Aug 2011. DWF. Added ASPECT keyword to allow getting/setting of window aspect ratio. 18 Nov 2011. DWF. Added PDF_UNIX_CONVERT_CMD and PDF_PATH keywords. 7 Dec 2011. DWF. Added IM_WIDTH keyword. 3 April 2012. DWF. Added IM_PNG8 keyword. 3 April 2012. DWF. :Copyright: Copyright (c) 2011, Fanning Software Consulting, Inc.
(See $IDLUTILS_DIR/goddard/pro/coyote/cgwindow_setdefs.pro)
CHECKSUM32
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) 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: HOST_TO_IEEE, 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 No need to byteswap 4 byte datatypes on little endian W. L. May 2009 Use /INTEGER keyword to TOTAL() function W.L. June 2009
(See $IDLUTILS_DIR/goddard/pro/misc/checksum32.pro)
CHECK_FITS
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 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 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, /SILENT ERRMSG = ]' INPUT PARAMETERS: IM - FITS array, e.g. as read by READFITS HDR - FITS 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 NAXISi FITS keywords will be updated to agree with the array /FITS, /SDAS - these are obsolete keywords that now do nothing /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 NAXIS and NAXISi keywords in the header to see if they match the image array dimensions, and checks whether the BITPIX keyword agrees with the array type. PROCEDURE CALLS: FXADDPAR, FXPAR(), SXDELPAR 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 Remove SDAS support W. Landsman November 2006 Fix dimension errors introduced Nov 2006 Work again for null arrays W. Landsman/E. Hivon May 2007 Use V6.0 notation W.L. Feb. 2011
(See $IDLUTILS_DIR/goddard/pro/fits/check_fits.pro)
CIC
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 $IDLUTILS_DIR/goddard/pro/math/cic.pro)
CIRRANGE
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 $IDLUTILS_DIR/goddard/pro/misc/cirrange.pro)
CLEANPLOT
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 Use V6.0 notation W. Landsman April 2011
(See $IDLUTILS_DIR/goddard/pro/plot/cleanplot.pro)
CNTRD
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 Some errrors were returning X,Y = NaN rather than -1,-1 WL Aug 2010
(See $IDLUTILS_DIR/goddard/pro/idlphot/cntrd.pro)
COLOR24
The purpose of this function is to convert a RGB color triple into the equivalent 24-bit long integer. The 24-bit integer can be decomposed into the appropriate color by interpreting the lowest 8 bits as red, the middle 8 bits as green, and the highest 8 bits as blue. This routine was written to be used with device-independent color programs like `cgColor`. :Categories: Graphics, Utilities :Params: color: in, required A three-element column or row array representing a color triple. Or an N-by-three element array of color triples. The values of the elements must be between 0 and 255. :Examples: To convert the color triple for the color YELLOW, (255, 255, 0), to the hexadecimal value '00FFFF'x or the decimal number 65535, type:: color = COLOR24([255, 255, 0]) :Author: FANNING SOFTWARE CONSULTING:: David W. Fanning 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com :History: Change History:: Written by: David Fanning, 3 February 96. Completely revised the algorithm to accept color arrays. 19 October 2000. DWF. :Copyright: Copyright (c) 1996-2012, Fanning Software Consulting, Inc.
(See $IDLUTILS_DIR/goddard/pro/coyote/color24.pro)
COLORSAREIDENTICAL
:Description: Returns a 1 if the two input colors refer to the same color, otherwise returns a 0. :Categories: Graphics Utility :Params: color_1: in, required, type=string/integer/long The first color to compare for "equality". color_2: in, required, type=string/integer/long The second color to compare for "equality". :Keywords: None. :Examples: Used to compare if two different colors are the same color:: IDL> Print, ColorsAreIdentical('white', cgColor('white')) IDL> Print, ColorsAreIdentical(252, !P.Color) IDL> Print, ColorsAreIdentical('white', '255') :Author: FANNING SOFTWARE CONSULTING:: David W. Fanning 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com :History: Change History:: Written, 24 December 2010. DWF. Fixed a typo when first color is INTEGER and second color is STRING. 3 Jan 2011. DWF. Added error handling for out of bounds color values. 25 May 2011. DWF. :Copyright: Copyright (c) 2010, Fanning Software Consulting, Inc.
(See $IDLUTILS_DIR/goddard/pro/coyote/colorsareidentical.pro)
COMPARE_STRUCT
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. The Exelis contrib library has a faster but less powerful procedure struct_equal.pro, see http://www.exelisvis.com/Default.aspx?tabid=1540&id=1175 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. The tags are TAG_NUM_A - the tag number in structure A TAG_NUM_B - the tag number in structure B FIELD - the tag name NDIFF - number of differences (always 1 for a scalar tag). 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. Added /NaN keyword W. Landsman March 2004 Don't test string for NaN values W. Landsman March 2008
(See $IDLUTILS_DIR/goddard/pro/structure/compare_struct.pro)
CONCAT_DIR()
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> RESTRICTIONS: 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 Assume since V5.5, remove VMS support W. Landsman Sep. 2006
(See $IDLUTILS_DIR/goddard/pro/misc/concat_dir.pro)
CONS_DEC
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 $IDLUTILS_DIR/goddard/pro/astrom/cons_dec.pro)
CONS_RA
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 Greisen 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 For TAN projection ensure angles between -90 and 90 W. Landsman Jan 2008
(See $IDLUTILS_DIR/goddard/pro/astrom/cons_ra.pro)
CONVERT_TO_TYPE
NAME: CONVERT_TO_TYPE PURPOSE: Converts its input argument to a specified data type. AUTHOR: FANNING SOFTWARE CONSULTING David Fanning, Ph.D. 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com CATEGORY: Utilities CALLING SEQUENCE: result = Convert_To_Type(input, type) INPUT_PARAMETERS: input: The input data to be converted. type: The data type. Accepts values as given by Size(var, /TNAME) or Size(var, /TYPE). If converting to integer types, values are truncated (similar to FLOOR keyword below), unless keywords are set. OUTPUT_PARAMETERS: result: The input data is converted to specified data type. KEYWORDS: CEILING: If set and converting to an integer type, the CEIL function is applied before conversion. FLOOR: If set and converting to an integer type, the FLOOR function is applied before conversion. ROUND: If set and converting to an integer type, the ROUND function is applied before conversion. RESTRICTIONS: Data types STRUCT, POINTER, and OBJREF are not allowed. MODIFICATION HISTORY: Written by David W. Fanning, 19 February 2006. Typo had "UNIT" instead of "UINT". 23 February 2009. DWF. Added CEILING, FLOOR, and ROUND keywords. 1 April 2009. DWF. Modified so that the "type" variable is not changed by the program. 5 May 2009. DWF.
(See $IDLUTILS_DIR/goddard/pro/coyote/convert_to_type.pro)
CONVOLVE
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). The image is padded with zeros so that a large PSF does not overlap one edge of the image with the opposite edge of the image. This routine is now partially obsolete due to the introduction of the intrinsic CONVOL_FFT() function in IDL 8.1 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). The PSF *must* be symmetric about the point FLOOR((n_elements-1)/2), where n_elements is the number of elements in each dimension. For Gaussian PSFs, the maximum of the PSF must occur in this pixel (otherwise the convolution will shift everything in the 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) /NO_PAD - if set, then do not pad the image to avoid edge effects. This will improve memory and speed of the computation at the expense of edge effects. This was the default method prior to October 2009 METHOD: When using FFT, PSF is centered & expanded to size of image. HISTORY: written, Frank Varosi, NASA/GSFC 1992. Appropriate precision type for result depending on input image Markus Hundertmark February 2006 Fix the bug causing the recomputation of FFT(psf) and/or FFT(image) Sergey Koposov December 2006 Fix the centering bug Kyle Penner October 2009 Add /No_PAD keyword for better speed and memory usage when edge effects are not important. W. Landsman March 2010 Add warning when kernel type does not match integer array W. Landsman Feb 2012
(See $IDLUTILS_DIR/goddard/pro/image/convolve.pro)
COPY_STRUCT
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 $IDLUTILS_DIR/goddard/pro/structure/copy_struct.pro)
COPY_STRUCT_INX
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 $IDLUTILS_DIR/goddard/pro/structure/copy_struct_inx.pro)
CORREL_IMAGES
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 Always REBIN() using floating pt arithmetic W. Landsman Nov 2007
(See $IDLUTILS_DIR/goddard/pro/image/correl_images.pro)
CORREL_OPTIMIZE
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 $IDLUTILS_DIR/goddard/pro/image/correl_optimize.pro)
CORRMAT_ANALYZE
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 $IDLUTILS_DIR/goddard/pro/image/corrmat_analyze.pro)
COSMO_PARAM
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 cosmological constant, Omega_lambda (3) 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 Carroll, 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.55 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 parameter, 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 Better Error checking W. Landsman/D. Syphers October 2010
(See $IDLUTILS_DIR/goddard/pro/astro/cosmo_param.pro)
COYOTEGRAPHIC
This simple just identifies a routine as a Coyote Graphic routine. It is written primarily so I can identify such routines before I assign a background color to a graphics window. :Categories: Graphics :Examples: Used in graphics programs:: IDL> IF CoyoteGraphic() THEN background = 'white' :Author: FANNING SOFTWARE CONSULTING:: David W. Fanning 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com :History: Change History:: Written, 18 January 2011. DWF. :Copyright: Copyright (c) 2011, Fanning Software Consulting, Inc.
(See $IDLUTILS_DIR/goddard/pro/coyote/coyotegraphic.pro)
CO_ABERRATION
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 Fix error with vector input W. Landsman June 2009
(See $IDLUTILS_DIR/goddard/pro/astro/co_aberration.pro)
CO_NUTATE
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 $IDLUTILS_DIR/goddard/pro/astro/co_nutate.pro)
CO_REFRACT()
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 Fixed problem with vector input when /TO_OBSERVED set W. Landsman Dec 2005 Allow arrays with more than 32767 elements W.Landsman/C.Dickinson Feb 2010
(See $IDLUTILS_DIR/goddard/pro/astro/co_refract.pro)
CREATE_STRUCT
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) Any strings that are not valid IDL tag names (e.g. 'a\2') will be converted by IDL_VALIDNAME to a valid tagname by replacing with underscores as necessary (e.g. 'a_2') 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, 'K' for 64bit 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 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 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. 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: 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 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 Delete temporary with FILE_DELETE W. Landsman Sep 2006 Assume since V5.5, delete VMS reference W.Landsman Sep 2006 Added 'K' format for 64 bit integers, IDL_VALIDNAME check on tags W. Landsman Feb 2007 Use vector form of IDL_VALIDNAME() if V6.4 or later W.L. Dec 2007 Suppress compilation mesage of temporary file A. Conley/W.L. May 2009 Remove FDECOMP, some cleaner coding W.L. July 2009 Do not limit string length to 1000 chars P. Broos, Feb 2011
(See $IDLUTILS_DIR/goddard/pro/structure/create_struct.pro)
CR_REJECT
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 $IDLUTILS_DIR/goddard/pro/image/cr_reject.pro)
CSPLINE
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> cgplot,x,y,psym=1 ;Plot original grid IDL> cgplot, /over, 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 $IDLUTILS_DIR/goddard/pro/math/cspline.pro)
CT2LST
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, positive East of the Greenwich meridian (ahead of GMT). Use this parameter 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. ***Note that the sign of TZ was changed in July 2008 to match the standard definition.*** 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 vector Year - The 4 digit year (e.g. 2008), integer scalar or vector 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 2008 Jul 30 at 15:53 pm in Baltimore, Maryland (longitude=-76.72 degrees). The timezone is EDT or tz=-4 IDL> CT2LST, lst, -76.72, -4,ten(15,53), 30, 07, 2008 ==> lst = 11.356505 hours (= 11h 21m 23.418s) 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 Longitudes measured *east* of Greenwich W. Landsman December 1998 Time zone now measure positive East of Greenwich W. Landsman July 2008 Remove debugging print statement W. Landsman April 2009
(See $IDLUTILS_DIR/goddard/pro/astro/ct2lst.pro)
CURS
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 The full list of available cursor values is given in /usr/include/X11/cursorfont.h OUTPUTS: None. RESTRICTIONS: Uses the CURSOR_STANDARD keyword of the DEVICE procedure. Although this keyword is available in 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 Use SIZE(/TNAME) instead of DATATYPE() W. Landsman October 2001
(See $IDLUTILS_DIR/goddard/pro/tv/curs.pro)
CURVAL
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 Note that in the usual truecolor mode, the byte intensity returned by CURVAL does not correspond to the byte scaled image value but rather returns the maximum value in each color gun. 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=, FILENAME=, ALT=] 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. 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 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 Always test if offset/zoom supplied W. Landsman Feb 2008
(See $IDLUTILS_DIR/goddard/pro/tv/curval.pro)
DAOERF
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 $IDLUTILS_DIR/goddard/pro/idlphot/daoerf.pro)
DAO_VALUE
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 $IDLUTILS_DIR/goddard/pro/idlphot/dao_value.pro)
DATE
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 $IDLUTILS_DIR/goddard/pro/astro/date.pro)
DATE_CONV
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. 2005) 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-2005 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. Based on total number of secs since midnight, JAN. 1, 1979 format 5: Julian day. As this is also a scalar, like format 1, the distinction between the two on input is made based on their value. Numbers > 2300000 are interpreted as Julian days. CALLING SEQUENCE results = DATE_CONV( DATE, TYPE ) INPUTS: DATE - input date in one of the possible formats. Must be scalar. 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' 'JULIAN' - Julian date 'MODIFIED' - Modified Julian date (JD-2400000.5) TYPE can be abbreviated to the single character strings 'R', 'V', 'S', 'F', 'J', and 'M'. Nobody wants to convert TO spacecraft time (I hope!) OUTPUTS: The converted date is returned as the function value. EXAMPLES: IDL> print,date_conv('2006-03-13 19:58:00.00'),f='(f15.5)' 2006072.83194 IDL> print,date_conv( 2006072.8319444d,'F') 2006-03-13T19:58:00.00 IDL> print,date_conv( 2006072.8319444d,'V') 2006.00 72.0000 19.0000 57.0000 59.9962 IDL> print,date_conv( 2006072.8319444d,'J'), f='(f15.5)' 2453808.33194 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 Replace spaces with '0' in output FITS format W.Landsman April 2006 Added Julian date capabilities on input and output. M.Perrin, July 2007 Removed spurious /WARN keyword to MESSAGE W.L. Feb 2012
(See $IDLUTILS_DIR/goddard/pro/astro/date_conv.pro)
DAYCNV
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 $IDLUTILS_DIR/goddard/pro/astro/daycnv.pro)
DBBUILD
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. This version for IDL V6.1 or later. CALLING SEQUENCE: DBBUILD, [ v1, v2, v3, v4......v50, /NOINDEX, /SILENT, STATUS = ] INPUTS: v1,v2....v50 - 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. PROCEDURE CALLS: DBCLOSE, DBINDEX, DBXPUT, DBWRT, IS_IEEE_BIG() 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 Use SIZE(/TNAME) for error mesage display W.Landsman July 2001 Fix message display error introduced July 2001 W. Landsman Oct. 2001 Make sure error message appears even if !QUIET is set W.L November 2006 Major rewrite to use SCOPE_VARFETCH, accept 50 input items W. Landsman November 2006 Fix warning if parameters have different # of elements W.L. May 2010 Fix warning if scalar parameter supplied W.L. June 2010 Fix for when first parameter is multi-dimensioned W.L. July 2010 Check data type of first parameter W.L. Jan 2012
(See $IDLUTILS_DIR/goddard/pro/database/dbbuild.pro)
DBCIRCLE
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, /GALACTIC, TO_B1950, /TO_J2000, COUNT= ] ) 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 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: /GALACTIC - if set, then the first two parameters are interpreted as Galactic coordinates in degrees, and is converted internally to J2000 celestial to search the database. /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. OPTIONAL KEYWORD OUTPUT: COUNT - - Integer scalar giving the number of valid matches 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. RESTRICTIONS; The database must have items 'RA' (in hours) and 'DEC' (in degrees). Alternatively, the database could have items RA_OBJ and DEC_OBJ (both in degrees) 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, GLACTC, JPRECESS REVISION HISTORY: Written W. Landsman STX January 1990 Fixed search when crossing 0h July 1990 Spiffed up code a bit October, 1991 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 Added COUNT, GALACTIC keywords W. Landsman December 2008 Fix problem when RA range exceeds 24h W. Landsman April 2009 Work as advertised for RA_OBJ field W. Landsman June 2010
(See $IDLUTILS_DIR/goddard/pro/database/dbcircle.pro)
DBCLOSE
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 $IDLUTILS_DIR/goddard/pro/database/dbclose.pro)
DBCOMPARE
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 Fix documentation, add Syntax display W. Landsman November 1998 Replace DATATYPE() with size(/TNAME) W. Landsman November 2001 Assume since V5.5, remove VMS call W. Landsman September 2006 Fix problem with multiple values when /DIFF set W. Landsman April 2007
(See $IDLUTILS_DIR/goddard/pro/database/dbcompare.pro)
DBCREATE
NAME: DBCREATE PURPOSE: Create a new data base (.dbf), index (.dbx) or description (.dbh) file EXPLANATION: A database definition (.dbd) file must already exist in the current directory or in a ZDBASE directory. The new .dbf, .dbx and/or .dbh files will be written to the same directory. So if the .dbd file is in a ZDBASE directory, then the user must have write privilege to that directory This version allows record length to be larger than 32767 bytes CALLING SEQUENCE: dbcreate, name,[ newindex, newdb, maxitems] [,/EXTERNAL, MAXENTRY=] INPUTS: name- name of the data base (with no qualifier), scalar string. The description will be read from the file "NAME".dbd Maximum length of name is 19 characters. 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 KEYWORDS: 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. MAXENTRY - positive integer giving the maximum number of entries in the database (needed to adjust the size of the index file). This keyword can be used to supercede the #maxentries line in the .dbd file (the larger of the two numbers will be used). PROCEDURE CALLS: GETTOK(), FIND_WITH_DEF(), 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 Added new unsigned and 64 bit integer datatypes W. Landsman July 2001 Make sure to use lowercase filenames on Unix W. Landsman May 2006 Added MAXENTRY keyword W. Landsman July 2006 Assume since V5.5, remove obsolete keywords to OPEN W. Landsman Sep2006 No longer required to be a ZDBASE directory W. Landsman Feb 2008 Fix Feb 2008 bug when files are in current dir W. L. May 2008 Fix May 2008 bug when files are not in current dir (sigh) W. L. May 2008 Warn if database length exceeds 32767 bytes W.L. Dec 2009 Remove spurious warning that database name is too long W.L. April 2010 Support entry lengths larger than 32767 bytes W.L. Oct. 2010 Better testing for valid print formats W.L. Nov 2010
(See $IDLUTILS_DIR/goddard/pro/database/dbcreate.pro)
DBDELETE
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 Don't call DBINDEX if no indexed items W. Landsman May 2006 Use TRUNCATE_LUN if V5.6 or later W. Landsman Sep 2006 Fix problem when deleting last entry W. Landsman Mar 2007 Assume since V5.6 so TRUNCATE_LUN is available W. Landsman
(See $IDLUTILS_DIR/goddard/pro/database/dbdelete.pro)
DBEDIT
NAME: DBEDIT PURPOSE: Interactively edit specified fields in an IDL 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. KEYWORDS: BYTENUM = If set, treat byte variables as numbers instead of characters. 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 Added /BYTENUM William Thompson 13-Mar-2006 Use DIALOG_MESSAGE for error messages W. Landsman April 2006 Assume since V5.5, remove VMS support W. Landsman Sep 2006
(See $IDLUTILS_DIR/goddard/pro/database/dbedit.pro)
DBEDIT_BASIC
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 $IDLUTILS_DIR/goddard/pro/database/dbedit_basic.pro)
DBEXT
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 Avoid EXECUTE() call for V6.1 or later W. Landsman December 2006 Assume since V6.1 W. Landsman June 2009
(See $IDLUTILS_DIR/goddard/pro/database/dbext.pro)
DBEXT_DBF
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 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. Avoid EXECUTE() for V6.1 or later W. Landsman Jan 2007 Assume since V6.1 W. Landsman June 2009 Change arrays to LONG to support entries >32767 bytes WL Oct 2010
(See $IDLUTILS_DIR/goddard/pro/database/dbext_dbf.pro)
DBEXT_IND
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 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. Landsman March 2001 Check whether any supplied entries are valid W. Landsman Jan 2009
(See $IDLUTILS_DIR/goddard/pro/database/dbext_ind.pro)
DBFIND()
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 Fix possible floating illegand operand error W. Landsman July 2009 Change arrays to LONG to support entries >32767 bytes W.L. Oct. 2010
(See $IDLUTILS_DIR/goddard/pro/database/dbfind.pro)
DBFIND_ENTRY
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 $IDLUTILS_DIR/goddard/pro/database/dbfind_entry.pro)
DBFIND_SORT
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 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 PROCEDURES CALLED: DB_INFO(), DB_ITEM_INFO(), DBSEARCH() 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 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 Work on string items W. Landsman November 2009 Don't use VALUE_LOCATE on a single value W. Landsman November 2009 Use VALUE_LOCATE even for equal values W. Landsman December 2009 Fix bug allowing negative FIRST values, William Thompson, 10 May 2010
(See $IDLUTILS_DIR/goddard/pro/database/dbfind_sort.pro)
DBFPARSE
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 Accept four digit years when in ccyy/doy format W. Landsman October 1998 Don't do DATE/Time test for string items W. Landsman July 2006
(See $IDLUTILS_DIR/goddard/pro/database/dbfparse.pro)
DBGET
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 Fix possible bug when sublist supplied W. Landsman August 2008
(See $IDLUTILS_DIR/goddard/pro/database/dbget.pro)
DBHELP
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. 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 Assume since V5.5 W. Landsman
(See $IDLUTILS_DIR/goddard/pro/database/dbhelp.pro)
DBINDEX
NAME: DBINDEX PURPOSE: Procedure to create index file for data base 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 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 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 Do not use EXECUTE() for V6.1 or later, improve efficiency W. Landsman December 2006 Automatically enlarge .dbx file if needed, fix major bug in last update W. Landsman Dec 2006 Assume since V6.1 W. Landsman June 2009 Allow sorted string items W. Landsman October 2009
(See $IDLUTILS_DIR/goddard/pro/database/dbindex.pro)
DBINDEX_BLK
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 $IDLUTILS_DIR/goddard/pro/database/dbindex_blk.pro)
DBMATCH
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 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 Fixed bug from Nov 2001 where /FULLSTRING was always set. W.L Feb 2007
(See $IDLUTILS_DIR/goddard/pro/database/dbmatch.pro)
DBOPEN
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 INPUT-OUTPUT KEYWORD: 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. 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. PROCEDURES CALLED: DBCLOSE, DB_INFO(), SELECT_W, ZPARCHECK HISTORY: 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 W. Landsman Use vector call to FDECOMP, STRSPLIT() Sep 2006 W. Landsman Remove obsolete keywords to OPEN Sep 2006 Replace SCREEN_SELECT with SELECT_W, remove IEEE_TO_HOST WL Jan 2009 Fix typos in BYTEORDER introduced Jan 2009 G. Scandariato/W.L.Feb. 2009 Support new DB format which allows entry lengths > 32767 bytes W.L. October 2010 William Thompson, fixed bug opening multiple databases Dec 2010 Fix problem with external databases WL Sep 2011
(See $IDLUTILS_DIR/goddard/pro/database/dbopen.pro)
DBPRINT
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 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 Fix display on GUI terminals W. Landsman March 2006 Remove VMS statements W. Landsman Sep 2006 Remove EXECUTE statement W. Landsman Jan 2007 Fix display of multi element items W. Landsman Aug 2010 Fix problem with linked databases W. Landsman Dec 2011
(See $IDLUTILS_DIR/goddard/pro/database/dbprint.pro)
DBPUT
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 $IDLUTILS_DIR/goddard/pro/database/dbput.pro)
DBRD
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 $IDLUTILS_DIR/goddard/pro/database/dbrd.pro)
DBSEARCH
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 Added COUNT keyword, deprecate !ERR W. Landsman March 2000 Some speed improvements W.L. August 2008 Add compound operators, slightly faster WL November 2009
(See $IDLUTILS_DIR/goddard/pro/database/dbsearch.pro)
DBSORT
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, DBEXT, DB_ITEM HISTORY VERSION 1 D. Lindler Oct. 86 Added REVERSE keyword W. Landsman August, 1991 Avoid use of EXECUTE() for V6.1 or later W. Landsman Dec 2006 Assume since V6.1 W. Landsman June 2009 Add TEMPORARY call W. Lnadsman July 2009
(See $IDLUTILS_DIR/goddard/pro/database/dbsort.pro)
DBTARGET
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 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. RESTRICTIONS; The database must have items 'RA' (in hours) and 'DEC' (in degrees). Alternatively, the database could have items RA_OBJ and DEC_OBJ (both in degrees) 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 Propagate /SILENT keyword to QuerySimbad W. Landsman Oct 2009 Make sure a database is open W.L. Oct 2010
(See $IDLUTILS_DIR/goddard/pro/database/dbtarget.pro)
DBTITLE
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 $IDLUTILS_DIR/goddard/pro/database/dbtitle.pro)
DBUPDATE
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 $IDLUTILS_DIR/goddard/pro/database/dbupdate.pro)
DBVAL
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 $IDLUTILS_DIR/goddard/pro/database/dbval.pro)
DBWRT
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. Faster handling of byte swapping W. L. August 2010
(See $IDLUTILS_DIR/goddard/pro/database/dbwrt.pro)
DBXPUT
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 $IDLUTILS_DIR/goddard/pro/database/dbxput.pro)
DBXVAL
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 $IDLUTILS_DIR/goddard/pro/database/dbxval.pro)
DB_ENT2EXT
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. Version 2.1 W. Landsman August 2010 Fix for multidimensional strings Version 2.2 W. Landsman Sep 2011 Work with new DB format
(See $IDLUTILS_DIR/goddard/pro/database/db_ent2ext.pro)
DB_ENT2HOST
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 Version 4, 2 May 2003, W. Thompson Use BSWAP keyword to DBXVAL instead of calling IEEE_TO_HOST. Version 4.1 W. Landsman August 2010 Fix for multidimensional strings Version 4.2 W. Landsman Sep 2011 Work with new DB format
(See $IDLUTILS_DIR/goddard/pro/database/db_ent2host.pro)
DB_INFO
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 'newdb' True if new (post Oct 2010) format that allows entries > 32767 bytes 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. Support new DB format, add NEWDB request type W. Landsman Oct 2010
(See $IDLUTILS_DIR/goddard/pro/database/db_info.pro)
DB_ITEM
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, SELECT_W REVISION HISTORY: Written: D. Lindler, GSFC/HRS, October 1987 Version 2, William Thompson, GSFC, 17-Mar-1997 Added keyword ERRMSG Use STRSPLIT instead of GETTOK to parse form 1, W. Landsman July 2002 Assume since V5.4 use FILE_EXPAND_PATH() instead of SPEC_DIR() W. Landsman April 2006 Support new DB format allowing entry lengths > 32767 bytes WL Oct 2010 Ignore blank lines in .items file WL February 2011
(See $IDLUTILS_DIR/goddard/pro/database/db_item.pro)
DB_ITEM_INFO
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 Support new DB format which allows > 32767 bytes W.L. Oct 2010
(See $IDLUTILS_DIR/goddard/pro/database/db_item_info.pro)
DB_OR
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 $IDLUTILS_DIR/goddard/pro/database/db_or.pro)
DB_TITLES
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 Assume since V5.5, W. Landsman September 2006
(See $IDLUTILS_DIR/goddard/pro/database/db_titles.pro)
DECOMPOSEDCOLOR
NAME: DECOMPOSEDCOLOR PURPOSE: This function is used to determine, in a device independent way, if the current graphics device is using color decomposition. The function returns a 1 if color decomposition is turned on, and a 0 if it is turned off. When color decomposition is turned on, we say the device is using a true-color display. If color decomposition is turned off, we say the device is using an indexed color display. AUTHOR: FANNING SOFTWARE CONSULTING David Fanning, Ph.D. 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com/ CATEGORY: Utilities CALLING SEQUENCE: result = DecomposedColor() RETURN VALUE: result: A 1 if color decomposition is turned on. A 0 if color decomposition is turned off. ARGUMENTS: device: The IDL graphics device whose color decomposition state you wish to know the current value of. If undefined, the current graphics device is used. KEYWORDRS: DEPTH: An output keyword that returns the depth of the graphics device. Normally, either 8 for index color devices, with color decomposition turned off, or 24 for true-color devices with color decomposition turned on. EXAMPLE: IDL> Print, DecomposedColor() ; Color decomposition state of current graphics device. 1 IDL> Print, DecomposedColor('PS') ; Color decomposition state of PostScript graphics device. 0 MODIFICATION HISTORY: Written by: David W. Fanning, May 24, 2009. Modified the way decomposition was obtained for PostScript devices IDL 7.1 and higher. 12 Dec 2010. DWF. Fixed a problem in the CASE statement with ELSE clause and added a NULL device segment. 4 Jan 2011. DWF. It now appears 24-bit PostScript support was added in IDL 7.1, although the Get_Decomposed keyword didn't work until IDL 7.1.1. 13 January 2011. DWF
(See $IDLUTILS_DIR/goddard/pro/coyote/decomposedcolor.pro)
DELVARX
NAME: DELVARX PURPOSE: Delete up to 10 variables for memory management (can call from routines) EXPLANATION: Like intrinsic DELVAR function, but can be used from any calling level Modified in January 2012 to always free memory associated with pointers/objects and remove the use EXECUTE() CALLING SEQUENCE: DELVARX, p0, [p1, p2......p9] INPUTS: p0, p1...p9 - variables to delete OBSOLETE KEYWORD: /FREE_MEM - formerly freed memory associated with pointers and objects. Since this is now the DELVARX default this keyword does nothing. METHOD: Uses HEAP_FREE and PTR_NEW(/NO_COPY) to delete variables and free memory REVISION HISTORY: Copied from the Solar library, written by slf, 25-Feb-1993 Added to Astronomy Library, September 1995 Modified, 26-Mar-2003, Zarro (EER/GSFC) 26-Mar-2003 - added FREE_MEM to free pointer/objects Modified, 28-Jan-2012, E. Rykoff (SLAC), W. Landsman - replace EXECUTE calls with SCOPE_VARFETCH.
(See $IDLUTILS_DIR/goddard/pro/misc/delvarx.pro)
DEREDD
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 $IDLUTILS_DIR/goddard/pro/astro/deredd.pro)
DETABIFY
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 $IDLUTILS_DIR/goddard/pro/misc/detabify.pro)
DIST_CIRCLE
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 $IDLUTILS_DIR/goddard/pro/image/dist_circle.pro)
DIST_ELLIPSE
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 $IDLUTILS_DIR/goddard/pro/image/dist_ellipse.pro)
ECI2GEO
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 $IDLUTILS_DIR/goddard/pro/astro/eci2geo.pro)
EQ2HOR
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 explicitly, 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 $IDLUTILS_DIR/goddard/pro/astro/eq2hor.pro)
EQPOLE
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 $IDLUTILS_DIR/goddard/pro/astro/eqpole.pro)
EQPOLE_GRID
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 $IDLUTILS_DIR/goddard/pro/astro/eqpole_grid.pro)
ERROR_MESSAGE
NAME: ERROR_MESSAGE PURPOSE: The purpose of this function is to have a device-independent error messaging function. The error message is reported to the user by using DIALOG_MESSAGE if widgets are supported and MESSAGE otherwise. In general, the ERROR_MESSAGE function is not called directly. Rather, it is used in a CATCH error handler. Errors are thrown to ERROR_MESSAGE with the MESSAGE command. A typical CATCH error handler is shown below. Catch, theError IF theError NE 0 THEN BEGIN Catch, /Cancel void = Error_Message() RETURN ENDIF Error messages would get into the ERROR_MESSAGE function by throwing an error with the MESSAGE command, like this: IF test NE 1 THEN Message, 'The test failed.' AUTHOR: FANNING SOFTWARE CONSULTING David Fanning, Ph.D. 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com/ CATEGORY: Utility. CALLING SEQUENCE: ok = Error_Message(the_Error_Message) INPUTS: the_Error_Message: This is a string argument containing the error message you want reported. If undefined, this variable is set to the string in the !Error_State.Msg system variable. KEYWORDS: ERROR: Set this keyword to cause Dialog_Message to use the ERROR reporting dialog. Note that a bug in IDL causes the ERROR dialog to be used whether this keyword is set to 0 or 1! INFORMATIONAL: Set this keyword to cause Dialog_Message to use the INFORMATION dialog instead of the WARNING dialog. Note that a bug in IDL causes the ERROR dialog to be used if this keyword is set to 0! NONAME: Normally, the name of the routine in which the error occurs is added to the error message. Setting this keyword will suppress this behavior. TITLE: Set this keyword to the title of the DIALOG_MESSAGE window. By default the keyword is set to 'System Error' unless !ERROR_STATE.NAME equals "IDL_M_USER_ERR", in which case it is set to "Trapped Error'. TRACEBACK: Setting this keyword results in an error traceback being printed to standard output with the PRINT command. Set to 1 (ON) by default. Use TRACEBACK=0 to turn this functionality off. QUIET: Set this keyword to suppress the DIALOG_MESSAGE pop-up dialog. OUTPUTS: Currently the only output from the function is the string "OK". RESTRICTIONS: The WARNING Dialog_Message dialog is used by default. EXAMPLE: To handle an undefined variable error: IF N_Elements(variable) EQ 0 THEN $ ok = Error_Message('Variable is undefined') MODIFICATION HISTORY: Written by: David W. Fanning, 27 April 1999. Added the calling routine's name in the message and NoName keyword. 31 Jan 2000. DWF. Added _Extra keyword. 10 February 2000. DWF. Forgot to add _Extra everywhere. Fixed for MAIN errors. 8 AUG 2000. DWF. Adding call routine's name to Traceback Report. 8 AUG 2000. DWF. Added ERROR, INFORMATIONAL, and TITLE keywords. 19 SEP 2002. DWF. Removed the requirement that you use the NONAME keyword with the MESSAGE command when generating user-trapped errors. 19 SEP 2002. DWF. Added distinctions between trapped errors (errors generated with the MESSAGE command) and IDL system errors. Note that if you call ERROR_MESSAGE directly, then the state of the !ERROR_STATE.NAME variable is set to the *last* error generated. It is better to access ERROR_MESSAGE indirectly in a Catch error handler from the MESSAGE command. 19 SEP 2002. DWF. Change on 19 SEP 2002 to eliminate NONAME requirement did not apply to object methods. Fixed program to also handle messages from object methods. 30 JULY 2003. DWF. Removed obsolete STR_SEP and replaced with STRSPLIT. 27 Oct 2004. DWF. Made a traceback the default case without setting TRACEBACK keyword. 19 Nov 2004. DWF. Added check for window connection specifically for CRON jobs. 6 May 2008. DWF. Added QUIET keyword. 18 October 2008. DWF. The traceback information was bypassed when in the PostScript device. Not what I had in mind. Fixed. 6 July 2009. DWF.
(See $IDLUTILS_DIR/goddard/pro/coyote/error_message.pro)
EULER
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, /RADIAN, SELECT = ] INPUTS: AI - Input Longitude, scalar or vector. In DEGREES unless /RADIAN is set. 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, always double precision BO - Output Latitude in DEGREES, always double precision OPTIONAL 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. /RADIAN - if set, then all input and output angles are in radians rather than degrees. SELECT - The coordinate conversion integer (1-6) may alternatively be specified as a keyword EXAMPLE: Find the Galactic coordinates of Cyg X-1 (ra=299.590315, dec=35.201604) IDL> ra = 299.590315d IDL> dec = 35.201604d IDL> euler,ra,dec,glong,glat,1 & print,glong,glat 71.334990, 3.0668335 REVISION HISTORY: Written W. Landsman, February 1987 Adapted from Fortran by Daryl Yentis NRL Made J2000 the default, added /FK4 keyword W. Landsman December 1998 Add option to specify SELECT as a keyword W. Landsman March 2003 Use less virtual memory for large input arrays W. Landsman June 2008 Added /RADIAN input keyword W. Landsman Sep 2008
(See $IDLUTILS_DIR/goddard/pro/astro/euler.pro)
EXPAND_TILDE()
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 $IDLUTILS_DIR/goddard/pro/misc/expand_tilde.pro)
EXTAST
NAME: EXTAST PURPOSE: Extract ASTrometry parameters from a FITS image header. EXPLANATION: Extract World Coordinate System information ( http://fits.gsfc.nasa.gov/fits_wcs.html ) from a FITS header and place it into an IDL structure. 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) .NAXIS - 2 element array giving image size .CD - 2 x 2 array containing the astrometry parameters CD1_1 CD1_2 in DEGREES/PIXEL CD2_1 CD2_2 .CDELT - 2 element double vector giving physical increment at the reference pixel .CRPIX - 2 element double 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/OUTPUT 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. If not set on input, then ALT is set to ' ' on output. PROCEDURE: EXTAST checks for astrometry parameters in the following order: (1) the CD matrix PC1_1,PC1_2...plus CDELT*, CRPIX and CRVAL (2) 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://fits.gsfc.nasa.gov/fits_wcs.html ) although form (1) is preferred. NOTES: 1. 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). 2, Some FITS headers (e.g.from HST/ACS) include SIP forward distortion coefficients but do not include the reverse coefficients. Currently, EXTAST only gives a warning that the reverse coefficients (RA,Dec to X,Y) are not present. EXTAST should actually compute the inverse coefficients, but this is not yet implemented.. 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 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 Add NAXIS tag to output structure W. Landsman Jan 2007 .CRPIX tag now Double instead of Float W. Landsman Apr 2007 If duplicate keywords use the *last* value W. Landsman Aug 2008 Fix typo for AZP projection, nonzero longpole N. Cunningham Feb 2009 Give warning if reverse SIP coefficient not present W. Landsman Nov 2011 Allow obsolete CD matrix representations W. Landsman May 2012
(See $IDLUTILS_DIR/goddard/pro/astrom/extast.pro)
EXTGRP
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 $IDLUTILS_DIR/goddard/pro/sdas/extgrp.pro)
EXTRAP
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 $IDLUTILS_DIR/goddard/pro/image/skyadj_cube.pro)
FACTOR
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 $IDLUTILS_DIR/goddard/pro/jhuapl/factor.pro)
FDECOMP
NAME: FDECOMP PURPOSE: Routine to decompose file name(s) for any operating system. CALLING SEQUENCE: FDECOMP, filename, disk, dir, name, qual, [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 "." OPTIONAL INPUT KEYWORD: OSFamily - scalar string specifying the operating system, must be either 'Windows' or 'unix'. If not supplied, then !VERSION.OS_FAMILY is used to determine the OS. EXAMPLES: Consider the following file names unix: file = '/itt/idl71/avg.pro' Windows: file = 'd:\itt\idl71\avg.pro' then IDL> FDECOMP, file, disk, dir, name, qual will return the following Disk Dir Name Qual Unix: '' '/itt/idl71/' 'avg' 'pro' Windows: 'd:' \itt\idl71\ 'avg' 'pro' NOTES: (1) The period is removed between the name and qualifier (2) Unlike the intrinsic FILE_BASENAME() and FILE_DIRNAME() functions, one can use FDECOMP to decompose a Windows file name on a Unix machine or a Unix filename on a Windows machine. 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 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 Include final delimiter in directory under Windows as advertised W. Landsman May 2006 Remove VMS support, W. Landsman September 2006 Remove MacOS branch (same as Unix) W. Landsman August 2009
(See $IDLUTILS_DIR/goddard/pro/misc/fdecomp.pro)
FILTER_IMAGE
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. Users might also look at the function ESTIMATOR_FILTER() introduced in IDL 7.1. 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_TRUNCATE 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. If only SMOOTH is applied, then output is of same type as input. If either MEDIAN or FWHM_GAUSSIAN is supplied than the output is at least floating (double if the input image is double). 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. Use /EVEN call to median, recognize NAN values in SMOOTH W. Landsman June 2001 Added PSF keyword, Bjorn Heijligers/WL, September 2001 Keep same output data type if /ALL_PIXELS supplied A. Steffl Mar 2011
(See $IDLUTILS_DIR/goddard/pro/image/filter_image.pro)
FIND
NAME: FIND PURPOSE: Find positive brightness perturbations (i.e stars) in an image EXPLANATION: Also returns centroids and shape parameters (roundness & sharpness). Adapted from 1991 version of DAOPHOT, but does not allow for bad pixels and uses a slightly different centroid algorithm. Modified in March 2008 to use marginal Gaussian fits to find centroids CALLING SEQUENCE: FIND, image, [ x, y, flux, sharp, round, hmin, fwhm, roundlim, sharplim PRINT= , /SILENT, /MONITOR] 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 RMS fwhm - FWHM (in pixels) 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: /MONITOR - Normally, FIND will display the results for each star only if no output variables are supplied. Set /MONITOR to always see the result of each individual star. /SILENT - set /SILENT keyword to suppress all output display 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. (3) Modified in March 2008 to use marginal Gaussian distributions to compute centroid. (Formerly, find.pro determined centroids by locating where derivatives went to zero -- see cntrd.pro for this algorithm. This was the method used in very old (~1984) versions of DAOPHOT. ) As discussed in more detail in the comments to the code, the centroid computation here is the same as in IRAF DAOFIND but differs slightly from the current DAOPHOT. 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 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 Fix error message when no stars found S. Carey/W. Landsman Sep 2007 Rewrite centroid computation to use marginal Gaussians W. Landsman Mar 2008 Added Monitor keyword, /SILENT now suppresses all output W. Landsman Nov 2008 Work when threshold is negative (difference images) W. Landsman May 2010
(See $IDLUTILS_DIR/goddard/pro/idlphot/find.pro)
FINDPRO
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. This differs from the intrinsic FILE_WHICH() function which only finds the first occurence of the procedure name. 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 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 directories. FILE_SEARCH() is used to search the directories for the procedure name. If not found in !PATH, then 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 /home/user/. 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 = '/home/user' <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: FDECOMP -- Decompose file name 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 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 Use FILE_SEARCH() if V5.5 or later W. Landsman June 2006 Assume since V55, remove VMS support W. Landsman Sep. 2006 Assume since V6.0, use file_basename() W.Landsman Feb 2009
(See $IDLUTILS_DIR/goddard/pro/misc/findpro.pro)
FIND_ALL_DIR()
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. 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 16 W. Landsman GSFC Sep 2006 Remove VMS support
(See $IDLUTILS_DIR/goddard/pro/misc/find_all_dir.pro)
FIND_WITH_DEF()
NAME: FIND_WITH_DEF() PURPOSE: Searches for files with a default path and extension. EXPLANATION: Finds files using default paths and extensions, 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. Environmental variables can themselves contain multiple paths. OPTIONAL INPUTS: EXTENSIONS = Scalar string giving 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 $IDLUTILS_DIR/goddard/pro/misc/find_with_def.pro)
FITEXY
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. As discussed by Tremaine et al. (2002, ApJ, 574, 740) an underestimate of the errors (e.g. due to an intrinsic dispersion) can lead to a bias in the derived slope, and it may be worth enlarging the error bars to get a reduced chi_sq ~ 1 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. In order to avoid problems with data sets where X and Y are of very different order of magnitude the data are normalized before the fitting process is started. The following normalization is used: xx = (x - xm) / xs and sigx = x_sigma / xs where xm = MEAN(x) and xs = STDDEV(x) yy = (y - ym) / ys and sigy = y_sigma / ys where ym = MEAN(y) and ys = STDDEV(y) MODIFICATION HISTORY: Written, Frank Varosi NASA/GSFC September 1992. Now returns q rather than 1-q W. Landsman December 1992 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 Normalize X,Y before calculation (from F. Holland) W. Landsman Nov 2006
(See $IDLUTILS_DIR/goddard/pro/math/fitexy.pro)
FITSDIR
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 =, EXTEN=, 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: FILE_SEARCH() 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 TEXTOPEN, TEXTCLOSE MODIFICATION HISTORY: Written, W. Landsman, HSTX February, 1993 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 Assume since V5.5, file_search() available W. Landsman Aug 2006 Don't assume all images compressed or uncompressed W. L. Apr 2010 Use V6.0 notation W.L. Feb 2011
(See $IDLUTILS_DIR/goddard/pro/fits/fitsdir.pro)
FITSRGB_TO_TIFF
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 $IDLUTILS_DIR/goddard/pro/fits/fitsrgb_to_tiff.pro)
FITS_ADD_CHECKSUM
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 there 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 Fix problem with images with a multiple of 2880 bytes. W.L. May 2008 Avoid conversion error when DATASUM is an empty string W.L. June 2008 Don't update DATASUM if not already present and no data array supplied W.L. July 2008 Make sure input header array has 80 chars/line W.L. Aug 2009
(See $IDLUTILS_DIR/goddard/pro/fits/fits_add_checksum.pro)
FITS_ASCII_ENCODE()
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 $IDLUTILS_DIR/goddard/pro/fits/fits_ascii_encode.pro)
FITS_CD_FIX
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://fits.gsfc.nasa.gov/fits_wcs.html) 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 compatibility 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 $IDLUTILS_DIR/goddard/pro/astrom/fits_cd_fix.pro)
FITS_CLOSE
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 $IDLUTILS_DIR/goddard/pro/fits/fits_close.pro)
FITS_HELP
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) structure returned by FITS_OPEN. The file name is allowed to be gzip compressed (with a .gz extension) OUTPUTS: A summary of the FITS file is printed. For each extension, the values of the XTENSION, EXTNAME EXTVER EXTLEVEL BITPIX GCOUNT, PCOUNT NAXIS and NAXIS* keywords are displayed. 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 Use V6.0 notation W. Landsman Jan 2012
(See $IDLUTILS_DIR/goddard/pro/fits/fits_help.pro)
FITS_INFO
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 =, EXTNAME= ] INPUT: Filename - Scalar string giving the name of the FITS file(s) Can include wildcards such as '*.fits', or regular expressions allowed by the FILE_SEARCH() function. One can also search gzip compressed FITS files, but their extension must end in .gz or .ftz. 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 KEYWORDS: N_ext - Returns an integer scalar giving the number of extensions in the FITS file extname - returns a list containing the EXTNAME keywords for each extension. 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 Work for FITS files with SIMPLE=F WBL July 2005 Assume since V5.4, fstat.compress available WBL April 2006 Added EXTNAME as an IDL keyword to return values. M. Perrin Dec 2007 make Ndata a long64 to deal with large files. E. Hivon Mar 2008 For GDL compatibility, first check if file is compressed before using OPENR,/COMPRESS B. Roukema/WL Apr 2010
(See $IDLUTILS_DIR/goddard/pro/fits/fits_info.pro)
FITS_OPEN
NAME: FITS_OPEN PURPOSE: Opens a FITS (Flexible Image Transport System) data file. EXPLANATION: Used by FITS_READ and FITS_WRITE 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 FPACK ( http://heasarc.gsfc.nasa.gov/fitsio/fpack/ ) compressed FITS files can be read provided that the FPACK software is installed. *OUTPUTS: fcb : (FITS Control Block) a IDL structure containing information concerning the file. It is an input to FITS_READ, FITS_WRITE FITS_CLOSE and MODFITS. INPUT KEYWORD PARAMETERS: /APPEND: Set to append to an existing file. /FPACK - Signal that the file is compressed with the FPACK software. http://heasarc.gsfc.nasa.gov/fitsio/fpack/ ) By default, FITS_OPEN assumes that if the file name extension ends in .fz that it is fpack compressed. The FPACK software must be installed on the system /HPRINT - print headers with routine HPRINT as they are read. (useful for debugging a strange file) /NO_ABORT: Set to quietly return to calling program when an I/O error is encountered, and return a non-null string (containing the error message) in the keyword MESSAGE. If /NO_ABORT not set, then FITS_OPEN will display the error message and return to the calling program. /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 .FCOMPRESS - 1 if unit is a FPACK compressed file opened with a pipe to SPAWN .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: GET_PIPE_FILESIZE (for Fcompress'ed files) 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 Assume since V5.4 fstat.compress available W. Landsman Apr 2006 FCB.Filename now expands any wildcards W. Landsman July 2006 Make ndata 64bit for very large files B. Garwood/W. Landsman Sep 2006 Open with /SWAP_IF_LITTLE_ENDIAN, remove obsolete keywords to OPEN W. Landsman Sep 2006 Warn that one cannot open a compressed file for update W.L. April 2007 Use post-V6.0 notation W.L. October 2010 Support FPACK compressed files, new .FCOMPRESS tag to FCB structure W.L. December 2010
(See $IDLUTILS_DIR/goddard/pro/fits/fits_open.pro)
FITS_READ
NAME: FITS_READ PURPOSE: To read a FITS file. 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. FPACK ( http://heasarc.gsfc.nasa.gov/fitsio/fpack/ ) compressed FITS files can be read provided that the FPACK software is installed. 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. The STScI inheritance convention is recognized http://fits.gsfc.nasa.gov/registry/inherit/fits_inheritance.txt If an extension is read, and the INHERIT keyword exists with a value of T, and the /NO_PDU keyword keyword is not supplied, then 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. 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: By default, FITS_READ will add the primary data unit header keywords to the output header, *if* the header includes INHERIT = T. Set /NO_PDU to never append the primary 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, then the data is converted to type LONG. /PDU - If set, then always add the primary data unit header keywords to the output header, even if the INHERIT=T keyword is not found This was the default behavior of FITS_READ prior to April 2007 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) FPACK compressed files are always closed and reopened when exiting FITS_READ so that the pointer is set to the beginning of the file. (Since FPACK files are opened with a bidirectional pipe rather than OPEN, one cannot use POINT_LUN to move to a specified position in the file.) 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 SXADDPAR, SXDELPAR, SXPAR() WARNINGS: In Sep 2006, FITS_OPEN was modified to open FITS files using the /SWAP_IF_LITTLE_ENDIAN keyword to OPEN, so that subsequent routines (FITS_READ, FITS_WRITE) did not require any byte swapping. An error may result if an pre-Sep 2006 version of FITS_OPEN is used with a post Sep 2006 version of FITS_READ, FITS_WRITE or MODFITS. HISTORY: Written by: D. Lindler, August 1995 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 Do not modify BSCALE/BZERO for unsigned integers W. Landsman April 2006 Asuume FITS_OPEN has opened the file with /SWAP_IF_LITTLE_ENDIAN W. Landsman September 2006 Fix problem with /DATA_ONLY keyword M.Buie/W.Landsman October 2006 Only append primary header if INHERIT=T W. Landsman April 2007 Make ndata 64bit for very large files E. Hivon/W. Landsman May 2007 Added /PDU keyword to always append primary header W. Landsman June 2007 Use PRODUCT to compute # of data points W. Landsman May 2009 Make sure FIRST is long64 when computing position W.L. October 2009 Read FPACK compressed files, W.L. December 2010
(See $IDLUTILS_DIR/goddard/pro/fits/fits_read.pro)
FITS_TEST_CHECKSUM()
NAME: FITS_TEST_CHECKSUM() PURPOSE: Verify the values of the CHECKSUM and DATASUM keywords in a FITS header EXPLANATION: Follows the 2007 version of the FITS checksum proposal at http://fits.gsfc.nasa.gov/registry/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 $IDLUTILS_DIR/goddard/pro/fits/fits_test_checksum.pro)
FITS_WRITE
NAME: FITS_WRITE PURPOSE: To write a FITS primary data unit or extension. EXPLANATION: ***NOTE** This version of FITS_READ must be used with a post Sep 2006 version of FITS_OPEN. 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 WARNING: FITS_WRITE currently does not completely update the file control block. When mixing FITS_READ and FITS_WRITE commands it is safer to use file names, rather than passing the file control block. 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 Make number of bytes 64bit to avoid possible overflow W.L Apr 2006 Asuume FITS_OPEN has opened the file with /SWAP_IF_LITTLE_ENDIAN W. Landsman September 2006 Removes BZERO and BSCALE for floating point output, D. Lindler, Sep 2008
(See $IDLUTILS_DIR/goddard/pro/fits/fits_write.pro)
FIXPS
This program modifies an IDL-produced PostScript landscape mode file so that the output is right side up rather than upside down. In other words, it turns a so-called seascape file into an actual landscape file. Files that are not currently in landscape mode will be ignored. Tested with single and multiple page PostScript output from IDL 7.0.1 and 7.1. The program requires the `Coyote Library <http://www.idlcoyote.com/documents/programs.php>` to be installed on your machine. :Categories: Graphics, Utilities :Params: in_filename: in, required, type=string The name of an IDL-produced PostScript file in landscape mode. out_filename: in, optional, type=string The name of the fixed output PostScript file. If not provided, the input file is overwritten. Overwritting assumes proper read/write permission in TEMP directory and in the directory where the input file is located. :Keywords: a4: in, optional, type=boolean, default=0 Set this keyword if the PostScript file is using a A4 Europeran sized page. ledger: in, optional, type=boolean, default=0 Set this keyword if the PostScript file is using a US ledger size (11 x 17 inch) page. legal: in, optional, type=boolean, default=0 Set this keyword if the PostScript file is using a US legal size (8.5 x 14 inch) page. letter: in, optional, type=boolean, default=0 Set this keyword if the PostScript file is using a US letter size (8.5 x 11 inch) page. pagetype: in, optional, type=string, default="Letter" A generic way to set the page size. A string of "LETTER", "LEDGER", "LEGAL", or "A4". quiet: in, optional, type=boolean, default=0 Set this keyword to suppress error messages from the program. success: out, optional, type=boolean If this keyword is set to a named variable, then on output the variable will return a 1 if the operation was successful, and a 0 otherwise. Using this keyword also supresses the program's ability to "throw" an error. Informational messages are issued about program developments, but this program will allow the program caller to decide what to do with unsuccessful program completion. :Author: FANNING SOFTWARE CONSULTING:: David W. Fanning 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com :History: Change History:: Written by: David W. Fanning, 6 August 2009. Change to overwrite input file if output filename is not provided. 6 August 2009. DWF. Incorporated checks for non-landscape mode files and files that have already been fixed. 6 August 2009. DWF. Modified to fix multiple-page PostScript files and to work seamlessly with PS_START output. 8 August 2009. DWF. Ran into a problem in which the PostScript file is stored in the directory pointed to by the IDL_TMPDIR environment variable. Now check to see if the input filename is the same as the output filename and make a change, if necessary. 22 July 2010. DWF. Retreated to standard error handling with ERROR_MESSAGE as there are inevitable errors. 2 August 2010. DWF. Output file was created, even if not used. Now deleting file and issuing messages to explain why output file was not created. 1 November 2010. DWF. Added SUCCESS and QUIET keywords. 15 Novemember 2010. DWF. PostScript file structure changed in IDL 8. Made adjustment to find the PageBoundingBox line. 19 Dec 2010. DWF. :Copyright: Copyright (c) 2009-2012, Fanning Software Consulting, Inc.
(See $IDLUTILS_DIR/goddard/pro/coyote/fixps.pro)
FLEGENDRE
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 $IDLUTILS_DIR/goddard/pro/math/flegendre.pro)
FLUX2MAG
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 $IDLUTILS_DIR/goddard/pro/astro/flux2mag.pro)
FM_UNRED
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 Assume since V5.4 use COMPLEMENT to WHERE W. Landsman April 2006
(See $IDLUTILS_DIR/goddard/pro/astro/fm_unred.pro)
FORPRINT
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 =, SUBSET=, 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 scalar or vector to write to 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. If COMMENT is a vector then one line will be written for each element. 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. SUBSET - Index vector specifying elements to print. No error checking is done to make sure the indicies are valid. The statement IDL> forprint,x,y,z,subset=s is equivalent to IDL> for i=0,n-1 do print, x[s[i]], y[s[i]], z[s[i]] 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. (If a SUBSET keyword is supplied then STARTLINE refers to first element in the subscript vector.) /STDOUT - If set, the force standard output unit (=-1) if not writing to a file. This allows the FORPINT output to be captured in a journal file. Only needed for non-GUI terminals WIDTH - Line width for wrapping, passed onto OPENW when using hardcopy. 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 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 Assume since V5.4 use BREAK instead of GOTO W. Landsman April 2006 Add SUBSET keyword, warning if different size vectors passed. P.Broos,W.Landsman. Aug 2006 Change keyword_set() to N_elements W. Landsman Oct 2006 Added /STDOUT keyword W. Landsman Oct 2006 Fix error message for undefined variable W. Landsman April 2007 Added WIDTH keyword J. Bailin Nov 2010 Allow multiple (vector) comment lines W. Landsman April 2011
(See $IDLUTILS_DIR/goddard/pro/misc/forprint.pro)
FPUFIX
NAME: FPUFIX PURPOSE: This is a utility routine to examine a variable and fix problems that will create floating point underflow errors. AUTHOR: FANNING SOFTWARE CONSULTING David Fanning, Ph.D. 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com CATEGORY: Utilities CALLING SEQUENCE: fixedData = FPUFIX(data) ARGUMENTS: data : A numerical variable to be checked for values that will cause floating point underflow errors. Suspect values are set to 0. KEYWORDS: None. RETURN VALUE: fixedData: The output is the same as the input, except that any values that will cause subsequent floating point underflow errors are set to 0. COMMON BLOCKS: None. EXAMPLES: data = FPTFIX(data) RESTRICTIONS: None. MODIFICATION HISTORY: Written by David W. Fanning, from Mati Meron's example FPU_FIX. Mati's program is more robust that this (ftp://cars3.uchicago.edu/midl/), but this serves my needs and doesn't require other programs from Mati's library. 24 February 2006.
(See $IDLUTILS_DIR/goddard/pro/coyote/fpufix.pro)
FREBIN
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 $IDLUTILS_DIR/goddard/pro/image/frebin.pro)
FSC_BASE_FILENAME
NAME: FSC_BASE_FILENAME PURPOSE: The purpose of this is to extract from a long file path, the base file name. That is, the name of the actual file without the preceeding directory information or the final file extension. The directory information and file extension can be obtained via keywords. The file is named so as not to interfere with FILE_BASENAME, which was introduced in IDL 6.0 and performs a similar function. AUTHOR: FANNING SOFTWARE CONSULTING David Fanning, Ph.D. 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com/ CATEGORY: Utility. CALLING SEQUENCE: baseFilename = FSC_Base_Filename(thePath) INPUTS: thePath: This is the file path you wish to extract a base file name from. It is a string variable of the sort returned from Dialog_Pickfile. KEYWORDS: DIRECTORY: The directory information obtained from the input file path. The directory always ends in a directory separator character. EXTENSION: The file extension associated with the input file path. PATH_SEPARATOR: The string to use as a path separator. If undefined, the output of PATH_SEP() will be used. RETURN_VALUE: baseFilename: The base filename, stripped of directory and file extension information. RESTRICTIONS: This is a quick and dirty program. It has been tested on Windows machines and *lightly* tested on UNIX machines. Please contact me at the e-mail address above if you discover problems. EXAMPLE: IDL> thePath = "C:\rsi\idl7.8\lib\jester.pro" IDL> Print, FSC_Base_Filename(thePath, Directory=theDirectory, Extension=theExtension) jester IDL> Print, theDirectory C:\rsi\idl7.8\lib\ IDL> Print, theExtension pro MODIFICATION HISTORY: Written by: David W. Fanning, 31 July 2003. Modified by KaRo, 13 Feb. 2005 to allow dots in the filename. Added PATH_SEPARATOR keyword. 25 July 2005. DWF. Added ability to recongnize directory by path separator in last character. 19 Sept 2005. DWF. If directory is blank (because a relative filename was passed), set to current directory. 6 Aug 2009. DWF. There were a couple of instances where the directory did NOT end in a path separator. Fixed. 24 Feb 2012. DWF.
(See $IDLUTILS_DIR/goddard/pro/coyote/fsc_base_filename.pro)
FSC_DROPLIST
NAME: FSC_DROPLIST PURPOSE: The purpose of this compound widget is to provide an alternative to the DROPLIST widget offered in the IDL distribution. What has always annoyed me about a droplist is that you can't get the current "value" of a droplist easily. This compound widget makes this and other tasks much easier. AUTHOR: FANNING SOFTWARE CONSULTING David Fanning, Ph.D. 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com/ CATEGORY: General programming. CALLING SEQUENCE: droplistObj = FSC_Droplist(parent, Title='Animals: ", Value=['Dog'. 'Cat', 'Coyote'], Index=2) The return value of the FSC_Droplist (droplistObj in this example) is an object reference. Interaction with the droplist will occur through object methods. INPUT PARAMETERS: parent -- The parent widget ID of the compound widget. Required. INPUT KEYWORDS: Any keyword that is appropriate for the Widget_Droplist function can be used. In addition, these keywords are explicitly defined. EVENT_FUNC -- Set this keyword to the name of an Event Handler Function. EVENT_PRO -- Set this keyword to the name of an Event Handler Procedure. FORMAT -- A format specifier for the "format" of the values in the droplist. INDEX -- The index number of the current selection. SPACES -- A two-element array that indicates the number of blank spaces to be added to the the beginning and end of the formatted values. If a single number is provided, this number of blank spaces is added to both the beginning and the end of the value. TITLE -- The title of the droplist widget. UNAME -- The user name of the droplist widget. (Only available in IDL 5.2 and higher.) UVALUE -- The normal "user value" of the droplist. VALUE -- An array of the droplist "selections". May be any data type. COMMON BLOCKS: None. DEPENDENCIES: Requires ERROR_MESSAGE from the Coyote Library.. EVENT STRUCTURE: An event is returned each time the droplist value is changed. The event structure is defined like this: event = { FSC_DROPLIST_EVENT, $ ; The name of the event structure. ID: 0L, $ ; The ID of the compound widget's top-level base. TOP: 0L, $ ; The widget ID of the top-level base of the hierarchy. HANDLER: 0L, $ ; The event handler ID. Filled out by IDL. INDEX: 0L, $ ; The index number of the current selection. SELECTION:Ptr_New() $ ; A pointer to the current selection "value". SELF:Obj_New() } ; The object reference of the compound widget. PUBLIC OBJECT METHODS: GetID -- A function with no arguments that returns the widget identifier of the droplist widget. droplistID = droplistObj->GetID() GetIndex -- A function with no arguments that returns the index number of the current droplist selection. currentIndex = droplistObj->GetIndex() GetSelection -- A function with no arguments that returns the current droplist selection. currentSelection = droplistObj->GetSelection() GetUValue -- A function with no arguments that returns the "user value" of the compound widget i.e., the value set with the UVALUE keyword). myUValue = droplistObj->GetUValue() GetValues -- A function with no arguments that returns the "values" or "selections" for the droplist. possibleSelections = droplistObj->GetValues() Resize -- A procedure that sets the X screen size of the droplist. It is defined like this: PRO Resize, newSize, ParentSize=parentSize The "newSize" keyword is the new X screen size. If this argument is missing, the screen X size of the compound widget's parent is used. The parentSize keyword is an output keyword that returns the X screen size of the compound widget's parent. droplistObj->Resize, 400 Note that not all devices (e.g., X Windows devices) support droplist resizing. SetIndex -- A procedure that sets the current droplist selection based on the given index. This is equivalent to Widget_Control, droplistID, Set_Droplist_Select=newIndex droplistObj->SetIndex, newIndex SetSelection -- Whereas a regular droplist widget can only be set by index number, this compound widget can also be set by a "selection". The new selection can be any data type and corresponds to one of the "values" of the droplist. droplistObj->SetSelection, newSelection SetValues -- Sets the possible selections of the droplist widget. The CurrentIndex keyword will allow the current index of the selection to be changed to: newChoices = ['dog', 'cat', 'coyote'] droplistObj->SetValues, newChoices, CurrentIndex=2 EXAMPLE: An example program is provided at the end of the FSC_DROPLIST code. To run it, type these commands: IDL> .Compile FSC_DROPLIST IDL> Example MODIFICATION HISTORY: Written by: David W Fanning, 17 Jan 2000. DWF. Added FORMAT and SPACES keywords 28 April 2000. DWF. Fixed a small problem with event processing when the EVENT_FUNC keyword was used. 29 Dec 2000. DWF. Attached the UNAME value to the TLB of the compound widget instead of to the droplist widget itself. 11 Jan 2001. DWF. Fixed a problem when the droplist was part of a modal widget and used the EVENT_PRO keyword. 27 Oct 2003. DWF. Added a SetValue method for setting all the values in the droplist at once. 12 Nov 2004. DWF. Fixed type on line 346/ 6 Feb 2008. DWF.
(See $IDLUTILS_DIR/goddard/pro/coyote/fsc_droplist.pro)
FSC_FIELD
NAME: FSC_FIELD PURPOSE: The purpose of this compound widget is to provide an alternative to the CW_FIELD widget offered in the IDL distribution. One weakness of the CW_FIELD compound widget is that the text widgets do not look editable to the users on Windows platforms. This program corrects that deficiency and adds some features that I think will be helpful. For example, you can now assign an event handler to the compound widget, ask for positive numbers only, and limit the number of digits in a number, or the number of digits to the right of a decimal point. The program is written as a widget object, which allows the user to call object methods directly, affording even more flexibility in use. This program replaces the earlier programs FSC_INPUTFIELD and COYOTE_FIELD. The program consists of a label widget next to a one-line text widget. The "value" of the compound widget is shown in the text widget. If the value is a number, it will not be possible (generally) to type alphanumeric values in the text widget. String values behave like strings in any one-line text widget. AUTHOR: FANNING SOFTWARE CONSULTING David Fanning, Ph.D. 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com/ CATEGORY: General programming. TYPICAL CALLING SEQUENCE: fieldID = FSC_FIELD(parent, Title="X Size:", Value=256, Object=fieldObject, Digits=3) INPUT PARAMETERS: parent -- The parent widget ID of the compound widget. Required. INPUT KEYWORDS: COLUMN Set this keyword to have the Label widget above the Text widget. The default is to have the Label widget in a row with the Text widget. CR_ONLY Set this keyword if you only want Carriage Return events returned to your event handler. If this keyword is not set, all events are returned. Setting this keyword has no effect unless either the EVENT_PRO or EVENT_FUNC keyword is used. DECIMAL Set this keyword to the number of digits to the right of the decimal point in floating point or double precision numbers. Ignored for STRING values. DIGITS Set this keyword to the number of digits permitted in integer numbers. EVENT_FUNC Set this keyword to the name of an event handler function. If this keyword is undefined and the Event_Pro keyword is undefined, all compound widget events are handled internally and not passed on to the parent widget. EVENT_PRO Set this keyword to the name of an event handler procedure. If this keyword is undefined and the Event_Func keyword is undefined, all compound widget events are handled internally and not passed on to the parent widget. FIELDFONT The font name for the text in the text widget. FRAME Set this keyword to put a frame around the compound widget. FOCUS_EVENTS Set this keyword to enable event generation for keyboard focus events. Ignored unless EVENT_FUNC or EVENT_PRO keywords are specified. HIGHLIGHT Set this keyword to highlight the existing text if the widget gain the keyboard focus. This keyword MUST be set for tabbing to work naturally in IDL 6.2 and higher. LABEL_LEFT Set this keyword to align the text on the label to the left. LABEL_RIGHT Set this keyword to align the text on the label to the right. LABELFONT The font name for the text in the label widget. LABELSIZE The X screen size of the label widget. NAME A string containing the name of the object. The default is ''. NOEDIT Set this keyword to allow no user editing of the input text widget. NONSENSITIVE Set this keyword to make the input text widget non-sensitive. POSITIVE Set this keyword if you want only positive numbers allowed. SCR_XSIZE The X screen size of the compound widget. SCR_YSIZE The Y screen size of the compound widget. TITLE The string text placed on the label widget. UNDEFINED Set this keyword to the value to use for "undefined" values. If not set, then !Value.F_NAN is used for numerical fields and a NULL string is used for string fields. This applies to values obtained with the GET_VALUE method or the GET_VALUE function. UVALUE A user value for any purpose. VALUE The "value" of the compound widget. Any type of integer, floating, or string variable is allowed. The data "type" is determined automatically from the value supplied with this keyword. Be sure you set the type appropriately for your intended use of the value. XSIZE The X size of the text widget in the usual character units. OUTPUT KEYWORDS: OBJECT Set this keyword to a named variable to receive the compound widget's object reference. This is required if you wish to call methods on the object. Note that the object reference is also available in the event structure generated by the widget object. Note that the object reference will be necessary if you want to get or set values in the compound widget. COMMON BLOCKS: None. RESTRICTIONS: Requires DBLTOSTR from the Coyote Library: http://www.idlcoyote.com/programs/dbltostr.pro EVENT STRUCTURE: All events are handled internally unless either the Event_Pro or Event_Func keywords are used to assign an event handler to the compound widget. By default all events generated by the text widget are passed to the assigned event handler. If you wish to receive only Carriage Return events, set the CR_Only keyword. event = { FSC_FIELD_EVENT, $ ; The name of the event structure. ID: 0L, $ ; The ID of the compound widget's top-level base. TOP: 0L, $ ; The widget ID of the top-level base of the hierarchy. HANDLER: 0L, $ ; The event handler ID. Filled out by IDL. OBJECT: Obj_New(), $ ; The "self" object reference. Provided so you can call methods. VALUE: Ptr_New(), $ ; A pointer to the widget value. TYPE:"" ; A string indicating the type of data in the VALUE field. } Note that if the field is "empty", the VALUE will be a pointer to an undefined variable. You should check this value before you use it. You code will look something like this: IF N_Elements(*event.value) EQ 0 THEN $ Print, 'Current Value UNDEFINED.' ELSE $ Print, 'Current Value: ', *event.value GETTING and SETTING VALUES: Almost all the properties of the widget can be obtained or set via the object's GetProperty and SetProperty methods (described below). Traditional compound widgets have the ability to get and set the "value" of the compound widget identifier (e.g., fieldID in the calling sequence above). Unfortunately, it is impossible to retreive a variable in this way when the variable is undefined. In practical terms, this means that the undefined variable must be set to *something*. You can determine what that something is with the UNDEFINED keyword, or I will set it to !VALUES.F_NAN for numerical fields and to the null string for string fields. In any case, you will have to check for undefined variables before you try to do something with the value. For a numerical field, the code might look something like this: fieldID = FSC_FIELD(parent, Title="X Size:", Value=256, Object=fieldObject, Digits=3) currentValue = fieldObject->Get_Value() IF Finite(currentValue) EQ 0 THEN Print, 'Value is Undefined' ELSE Print, currentValue Additional examples are provided in the numerical example fields in Example Program below. Setting the value of the compound widget is the same as calling the Set_Value method on the object reference. In other words, these two statements are equivalent. fieldObject->Set_Value, 45.4 Widget_Control, fieldID, Set_Value=45.4 The data type of the value is determined from the value itself. Be sure you set it appropriately. OBJECT PROCEDURE METHODS: GetProperty -- This method allows various properties of the widget to be returned via output keywords. The keywords that are available are: CR_Only -- A flag, if set, means only report carriage return events. DataType -- The data type of the field variable. Decimal -- Set this keyword to the number of digits to the right of the decimal point in FLOATVALUE and DOUBLEVALUE numbers. Digits -- Set this keyword to the number of digits permitted in INTERGERVALUE and LONGVALUE numbers. Event_Func -- The name of the event handler function. Event_Pro -- The name of the event handler function. Has_Focus -- Set to 1 if the text widget currently has the keyboard focus. Highlight -- The highlight flag. NoEdit -- The NoEdit flag. NonSensitive -- The NonSensitive flag. Undefined -- The "value" of any undefined value. UValue -- The user value assigned to the compound widget. Value -- The "value" of the compound widget. Name -- A scalar string name of the object. Resize -- This method allows you to resize the compound widget's text field. The value parameter is an X screen size for the entire widget. The text widget is sized by using the value obtained from this value minus the X screen size of the label widget. objectRef->Resize, screen_xsize_value Set_Value -- This method allows you to set the "value" of the field. It takes one positional parameter, which is the value. objectRef->Set_Value, 5 SetProperty -- This method allows various properties of the widget to be set via input keywords. The keywords that are available are: CR_Only -- Set this keyword if you only want Carriage Return events. Decimal -- Set this keyword to the number of digits to the right of the decimal point in FLOAT and DOUBLE numbers. Digits -- Set this keyword to the number of digits permitted in INTERGER and LONG numbers. Event_Func -- Set this keyword to the name of an Event Function. Event_Pro -- Set this keyword to the name of an Event Procedure. Highlight -- Set this keyword to highlight the existing text when the widget gets the keyboard focus LabelSize -- The X screen size of the Label Widget. Name -- A scalar string name of the object. (default = '') NoEdit -- Set this keyword to make the text widget uneditable NonSensitive -- Set this keyword to make the widget nonsensitive Scr_XSize -- The X screen size of the text widget. Scr_YSize -- The Y screen size of the text widget. Title -- The text to go on the Label Widget. UValue -- A user value for any purpose. Value -- The "value" of the compound widget. XSize -- The X size of the Text Widget. SetTabNext -- This method allows you to specify which field to go to when a TAB character is typed in the text widget. See the Example program below for an example of how to use this method. OBJECT FUNCTIONS METHODS: Get_Value -- Returns the "value" of the field. No parameters. Will be undefined if a "number" field is blank. Should be checked before using: IF N_Elements(objectRef->Get_Value()) NE 0 THEN Print, Value is: ', objectRef->Get_Value() GetID -- Returns the widget identifier of the compound widget's top-level base. (The first child of the parent widget.) No parameters. GetLabelSize -- Returns the X screen size of the label widget. No parameters. GetTextID -- Returns the widget identifier of the compound widget's text widget. No parameters. GetTextSize -- Returns the X screen size of the text widget. No parameters. PRIVATE OBJECT METHODS: Although there is really no such thing as a "private" method in IDL's object implementation, some methods are used internally and not meant to be acessed publicly. Here are a few of those methods. I list them because it may be these private methods are ones you wish to override in subclassed objects. MoveTab -- This method moves the focus to the widget identified in the "next" field, which must be set with the SetTabNext method. No parameters. Called automatically when a TAB character is typed in the text widget. Text_Events -- The main event handler method for the compound widget. All text widget events are processed here. ReturnValue -- This function method accepts a string input value and converts it to the type of data requested by the user. Validate -- This function method examines all text input and removes unwanted characters, depending upon the requested data type for the field. It makes it impossible, for example, to type alphanumeric characters in an INTEGER field. EXAMPLE: An example program is provided at the end of the FSC_FIELD code. To run it, type these commands: IDL> .Compile FSC_Field IDL> Example MODIFICATION HISTORY: Written by: David W. Fanning, 18 October 2000. Based heavily on an earlier FSC_INPUTFIELD program and new ideas about the best way to write widget objects. Added LABEL_LEFT, LABEL_RIGHT, and UNDEFINED keywords. 29 Dec 2000. DWF. Modified the way the value is returned in the GET_VALUE method and the GET_VALUE function. Modified Example program to demonstrate. 30 Dec 2000. DWF. Added NOEDIT and NONSENSITIVE keywords, with corresponding SETEDIT and SETSENNSITIVE methods. 19 Jan 2001. DWF. Actually followed through with the changes I _said_" I made 29 Dec 2000. (Don't ask....) 13 June 2001. DWF. Added GetTextSize and GetLabelSize methods for obtaining the X screen size of the text and label widgets, respectively. 21 July 2001. DWF. Fixed a problem in SetProperty method where I was setting self.xsize, which doesn't exist. 24 April 2002. DWF. Small modification to the SetEdit method. 6 August 2003. DWF. Added Highlight keyword. Ported Focus_Events keyword from fsc_inputfield.pro. Updated documentation. 17 November 2004. DWF and Benjamin Hornberger Added Has_Focus keyword to the GetProperty method. 18 November 2004. Benjamin Hornberger Fixed bug in GetProperty method (set value to *self.undefined if *self.value is undefined. 24 Feb 2004. Benjamin Hornberger Modified FOCUS_EVENTS keyword handling so that *all* focus events are now passed to specified event handlers. Check event.select to see if the widget is gaining or losing focus. 10 August 2005. DWF. Added new tabbing functionality, introduced in IDL 6.2. To use tabbing functionality natually, the HIGHTLIGHT keywords must be set. See included EXAMPLE program for details. 10 August 2005. DWF. Added functionality to covert double precision values to strings properly. 30 Nov 2005. DWF. Set the default fonts to be the current widget font, rather than the default widget font. 4 Oct 2008. DWF. Fixed a problem with validating a float or double value when it was written with exponential notation. 2 April 2010. DWF.
(See $IDLUTILS_DIR/goddard/pro/coyote/fsc_field.pro)
FSC_FILESELECT
NAME: FSC_FILESELECT PURPOSE: The purpose of this compound widget is to provide a means by which the user can type or select a file name. The program is written as an "object widget", meaning that the guts of the program is an object of class FSC_FILESELECT. This is meant to be an example of the obvious advantages of writing compound widget programs as objects. AUTHOR: FANNING SOFTWARE CONSULTING David Fanning, Ph.D. 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com/ CATEGORY: General programming. CALLING SEQUENCE: filenameID = FSC_FileSelect(parent) INPUT PARAMETERS: parent -- The parent widget ID of the compound widget. Required. INPUT KEYWORDS: Event_Pro -- The event handler procedure for this compound widget.By default: "". Event_Func -- The event handler function for this compound widget. By default: "". If neither EVENT_PRO or EVENT_FUNC is defined, program events are handled internally by the compound widget. DirectoryName -- The initial name of the directory. By defaut: current directory. Filename -- The initial file name in the filename text widget. Filter -- The file filter. By default: "*". Frame -- Set this keyword for a frame around the compound widget. LabelFont -- The font for the label widget. By default: "". LabelName -- The text on the label widgt. By default: "Filename: ". LabelSize -- The X screen size of the label widget. By default: 0. MustExist -- A flag that indicates selected files must exist. By default: 0. NoMaxSize -- A flag to prohibit automatic text widget sizing. By default: 0. If this keyword is not set, the compound widget will automatically resize itself to the largest widget in its parent base widget. It will do this by changing the size of the text widgets holding the file and directory names. Read -- Set this keyword to have file selection for reading a file. By default: 1. SelectDirectory -- The default directory for file selection. In other words, this is the default directory for DIALOG_PICKFILE, which is accessed via the BROWSE buttons. SelectFont -- The font for the "Browse" button. By default: "". SelectTitle -- The title bar text on the file selection dialog. By default: "Select a File...". TextFont -- The font for the filename text widget. By default: "". UValue -- User value for any purpose. Write -- Set this keyword to open a file for writing. By default: 0. XSize -- The X size of the text widget holding the filename. By default: StrLen(filename) * 1.5 > 40. OUTPUT KEYWORDS: ObjectRef -- Assign this keyword to an output variable that will hold the internal object reference. With the object reference you can call object methods to easily change many properties of the compound widget. COMMON BLOCKS: None. RESTRICTIONS: Requires the folling files from the Coyote Library: http://www.idlcoyote.com/programs/error_message.pro EVENT STRUCTURE: All events are handled internally unless either the Event_Pro or Event_Func keywords are used to assign an event handler to the compound widget. All events generated by the text widgets are passed to the assigned event handler. event = { CW_FILESELECT, $ ; The name of the event structure. ID: 0L, $ ; The ID of the compound widget's top-level base. TOP: 0L, $ ; The widget ID of the top-level base of the hierarchy. HANDLER: 0L, $ ; The event handler ID. Filled out by IDL. Basename: "", $ ; The base filename without directory specifiers. Filename: "", $ ; The fully qualified filename. Directory: "", $ ; The name of the current file directory. } EXAMPLE: An example program is provided at the end of the FSC_FILESELECT code. To run it, type these commands: IDL> .Compile fsc_fileselect IDL> Example Or, if you want to obtain the object reference, type this: IDL> Example, theObject Now you can call the object's methods. For example: IDL theObject->SetProperty, XSize=150 GETTING and SETTING VALUES: So as not to disrupt the accepted paradigm in using compound widgets, you can use the return value of the FSC_FILESELECT function with WIDGET_CONTROL to get and set the "value" of the widget. Widget_Control, filenameID, Set_Value='C:\RSI\IDL52\DATA\cyclone.dat' The program will automatically separate the file name portion of the value from the directory portion and put things in the correct text widgets. Similarly, you can get the "value" of the widget: Widget_Control, filenameID, Get_Value=theValue Print, theValue C:\RSI\IDL52\DATA\cyclone.dat The return value is the fully qualified file path to the file. USING OBJECT METHODS to CHANGE PROGRAM PROPERTIES: If you obtain the object reference, you have a great deal more control over the properties of the compound widget. You obtain the object reference by calling the function like this: filenameID = FSC_FILESELECT(parent, ObjectRef=theObject) OBJECT PROCEDURE METHODS: GetProperty -- This method allows various properties of the widget to be returned via output keywords. The keywords that are available are: DirectoryName -- The current directory. Event_Func -- The name of the event handler function for this compound widget. Event_Pro -- The name of the event handler procedure for this compound widget. Filename -- The current base filename. Filter -- The current file filter. LabelName -- The text on the label widget. LabelSize -- The X screen size of the label widget. MustExist -- A flag that indicates selected files must exist to be selected. Parent -- The parent widget of the compound widget. Read=read -- The file selection for reading flag. SelectTitle -- The title bar text on the file selection dialog. TLB -- The top-level base of the compound widget. UValue -- The user value of the compound widget. Write -- The file selection for writing flag. XSize -- The X size of the text widget holding the filename. LabelSize -- This method makes sure that the directory name and file name labels are the same size. Normally, this procedure is called internally. No parameters. MatchSize -- This method resizes the compound widget so that it is as long as the the longest widget in the parent base widget. This is done automatically upon realization unless the NOMAXSIZE keyword is set. The method aids in writing resizeable widget programs. SetProperty -- This method allows various properties of the widget to be set via input keywords. The keywords that are available are: DirectoryName -- The current directory. Event_Func -- The name of the event handler function for this compound widget. Event_Pro -- The name of the event handler procedure for this compound widget. Filename -- The current base filename. Filter -- The current file filter. LabelName -- The text on the label widget. LabelSize -- The X screen size of the label widget. MustExist -- A flag that indicates selected files must exist to be selected. Read -- The file selection for reading flag. SelectTitle -- The title bar text on the file selection dialog. UValue -- The user value of the compound widget. Write -- The file selection for writing flag. XSize -- The X size of the text widget holding the filename. TextSelect - Allows you to create a selection in filename text widget. See the documentation for the SET_TEXT_SELECT keyword to Widget_Control. selection -- A two-element array containing the starting position and selection length. OBJECT FUNCTION METHODS: GetFileName -- Returns the fully qualified filename. No parameters. GetTLB -- Returns the top-level base ID of the compound widget. No Parameters. Inspect_DirectoryName -- Inspects the directory name for correctness. Requires one positional parameter. directoryName -- The name of the directory from the directory text widget. textSelection -- The current text selection position. At the moment all this does is remove any blank characters from either end of the directory name and makes sure the last character of the directory name does not end in a subdirectory specifier (except for VMS). Inspect_Filename -- Inspects the file name for correctness. Requires one positional parameter. filename -- The name of the file from the filename text widget. textSelection -- The current text selection position. At the moment all this does is remove any blank characters from either end of the file name MODIFICATION HISTORY: Written by: David W. Fanning, 21 NOV 1999. Fixed bug in File Name selection button. 18 MAR 2000. DWF. Fixed an error in which directory the Browse buttons should start searching. 29 SEP 2000. DWF. Previously returned events only for typing in text widgets. Now Browse button events are also returned. 29 SEP 2000. DWF. Fixed a bug in setting the file filter. 29 SEP 2000. DWF. Removed the Directory Browse button 10 AUG 2002. DWF. Added ERROR_MESSAGE to error handling. 10 AUG 2002. DWF. Changed the ability to specify a file filter as a string array, instead of just as a scalar string. This required the use of a pointer, which meant that I had to remove the FILTER field from the CW_FILESELECT event structure to avoid likely memory leakage. This is a dangerous change because it means programs that relied on this (I expect there are very, very few) will break and it goes against my philosopy of keeping my programs backward compatible. Let me know if you have problems. In testing, I discoved no problems in my own code. 31 OCT 2002. DWF. Fixed a problem with DIALOG_PICKFILE that sometimes allowed users to change directories without selecting a file. 3 Nov 2002. DWF. Fixed a problem with widget resizing with the help of Bob Portman that had plagued me from the beginning. Thanks, Bob! 5 August 2003. DWF Added TEXTSELECT method. 5 Aug 2003. DWF. Had to add FORWARD_FUNCTION statement to get error handler compiled when using DIRECTORY keyword. 24 Nov 2003. DWF. Fixed a problem with too many events going to an event handler specified with the EVENT_PRO or EVENT_FUNC keyword from the text widget. Now only Carriage Return events are passed on to the user-specified event handler. 8 July 2004. DWF. Replace all "\" characters with "/" characters in directory names. 8 Januay 2006. DWF. Set the default fonts to be the current widget font, rather than the default widget font. 4 Oct 2008. DWF.
(See $IDLUTILS_DIR/goddard/pro/coyote/fsc_fileselect.pro)
FSC_PLOTWINDOW
NAME: FSC_PLOTWINDOW PURPOSE: The purpose of this compound widget is to create a resizeable "plot window" inside a larger "page window". I'm not sure it has any value except as a utility routine for the PostScript configuration object FSC_PSCONFIG__DEFINE, but it's a neat program anyway. :-) AUTHOR: FANNING SOFTWARE CONSULTING David Fanning, Ph.D. 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com/ CATEGORY: Utility routine for FSC_PSCONFIG__DEFINE. CALLING SEQUENCE: plotwindowObject = CW_PlotWindow(parent) REQUIRED INPUT PARAMETERS: parent - The parent base widget of this compound widget. RETURN VALUE: plotwindowObject - The object reference of the compound widget. KEYWORDS: COLOR - If set, display the window in "color". This is the default on 24-bit devices. DEBUG - Set this keyword to turn traceback error handling on in the error handling code. EVENT_PRO - The event procedure for the widget. Required for events to be generated. Otherwise, all events are handled internally. LANDSCAPE - If set, display the page in landscape mode. Otherwise the page is display in portrait mode. PAGESIZE - The "pagesize" of the widget. Possible values are: "LETTER", "LEDGER", "LEGAL", "A4", and "DISPLAY". UNITS - A string indicating INCHES or CENTIMETER units. DEVICE units represented by a null string, "". UVALUE - A user value for the caller of this program. WINDOWCOLOR - A three-element array specifying the background window color (RGB). WINDOWSIZE - The size of the "window" on the page. A four-element array of normalized coordinates in the form [x0, y0, x1, y1]. EVENT STRUCTURE: The event structure that is returned from this compound widget is defined like this, where the sizes and offsets locate the target "window" on the page in normalized units: event = {ID:0L, TOP:0L, HANDLER:0L, XSize:0.0, YSize:0.0, XOffset:0.0, YOffset:0.0} MODIFICATIONS: Written by David Fanning, 31 January 2000. Fixed a small bug that prevented it working on Macintosh computers. 26 Sept 2000. DWF. Added a "DISPLAY" page size, so the program can be used to position plots and other graphics in a display window. The "page area" will have the same aspect ratio is the current graphics window. 17 March 2001. DWF. Changed some of the tolerances for "closeness" from 0.1 to 0.025 to allow smaller sizing for colorbars and other small objects. 6 July 2005. DWF.
(See $IDLUTILS_DIR/goddard/pro/coyote/fsc_plotwindow.pro)
FSC_PSCONFIG__DEFINE
NAME: FSC_PSCONFIG__DEFINE PURPOSE: The purpose of this program is to implement an object that can keep track of--and allow the user to change--the current configuration of the PostScript device. AUTHOR: FANNING SOFTWARE CONSULTING David Fanning, Ph.D. 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com/ CATEGORY: General programming. DOCUMENTATION: Complete documentation for the FSC_PSCONFIG object, including keyword and method descriptions, and example programs using the object can be found on the Coyote's Guide to IDL Programming web page: http://www.idlcoyote.com/programs/docs/fsc_psconfig.html Or, if you would prefer, you can download a self-contained PDF file: http://www.idlcoyote.com/programs/docs/fsc_psconfig.pdf KEYWORDS: Any keyword accepted by the FSC_PSCONFIG object can be used with this program. Here are a few of the most popular keywords. Bits_per_Pixel - The number of image bits saved for each image pixel: 2, 4, or 8. The default is 8. Color - Set this keyword to select Color PostScript output. Turned on by default. Decomposed - Set this keyword to 0 to select indexed color and to 1 to select decomposed color. DefaultSetup - Set this keyword to the "name" of a default style. Current styles (you can easily create and add your own to the source code) are the following: "System (Portrait)" - The normal "default" system set-up. Also, "System". "System (Landscape)" - The normal "default" landscape system set-up. "Centered (Portrait)" - The window centered on the page. Also, "Center" or "Centered". "Centered (Landscape)" - The window centered on the landscape page. Also, "Landscape". "Square (Portrait)" - A square plot, centered on the page. "Square (Landscape)" - A square plot, centered on the landscape page. "Figure (Small)" - A small encapsulated figure size, centered on page. Also, "Encapsulated" or "Encapsulate". "Figure (Large)" - A larger encapsulated figure size, centered on page. Also, "Figure". "Color (Portrait)" - A "centered" plot, with color turned on. Also, "Color". "Color (Landscape)" - A "centered" landscape plot, with color turned on. Directory - Set this keyword to the name of the starting directory. The current directory is used by default. Encapsulated - Set this keyword to select Encapsulated PostScript output. Turned off by default. European - This keyword has been depreciated in favor of METRIC. Filename - Set thie keyword to the name of the PostScript file. The default is "idl.ps". Inches - Set this keyword to indicate sizes and offsets are in inches as opposed to centimeters. Set by Metric keyword by default. Landscape - Set this keyword to select Landscape page output. Portrait page output is the default. Language_Level - Set this keyword to select the Language Level interpreter. Default is 1. Metric - Set this keyword to indicate metric mode (i.e., A4 page and centimeter units). Turned off by default. PageType - Set this keyword to the "type" of page. Possible values are: "Letter" - 8.5 by 11 inches. (Default, unless the Metric keyword is set.) "Legal" - 8.5 by 14 inches. "Ledger" - 11 by 17 inches. "A4" - 21.0 by 29.7 centimeters. (Default, if the Metric keyword is set.) XOffset - Set this keyword to the X Offset. Uses "System (Portrait)" defaults. (Note: offset calculated from lower-left corner of page.) XSize - Set this keyword to the X size of the PostScript "window". Uses "System (Portrait)" defaults. YOffset - Set this keyword to the Y Offset. Uses "System (Portrait)" defaults. (Note: offset calculated from lower-left corner of page.) YSize - Set this keyword to the Y size of the PostScript "window". Uses "System (Portrait)" defaults. In addition, the following keywords can be used: CANCEL -- An output keyword that will be set to 1 if the user chooses the Cancel button on the form. It will be 0 otherwise. FONTINFO -- Set this keyword is you wish to have font information appear on the form. The default is to not include font information. FONTTYPE -- Set this keyword to a named variable that will indicate the user's preference for font type. Values will be -1 (Hershey fonts), 0 (hardware fonts), and 1 (true-type fonts). This keyword will always return -1 unless the FONTINFO keyword has also been set. GROUP_LEADER -- Set this keyword to a widget identifier of the widget you wish to be a group leader for this program. EXAMPLE: A simple sequence of using the object would look something like this: psObject = Obj_New("FSC_PSCONFIG") psObject->GUI psKeywords = psObject->GetKeywords() thisDevice = !D.Name Set_Plot, 'PS' Device, _Extra=psKeywords cgImage, image Device, /Close_File Set_Plot, thisDevice Obj_Destroy, psObject Note that the object can also be called from the PS_CONFIG interface: psKeywords = PSConfig() OTHER PROGRAMS NEEDED: The following programs are required to run this one: fsc_droplist.pro fsc_fileselect.pro fsc_field.pro fsc_plotwindow MODIFICATIONS: Written by David W. Fanning, 31 January 2000. Added capability to call GUI methods when the current graphics device doesn't support windows. Device is restored when the GUI exits. 11 May 2000. DWF. Changed the default value for the Color keyword to 1. 16 May 2000. DWF. Fixed a bug where filename changed when switching Setups. 8 AUG 2000. DWF. Fixed a bug when saving setup in Landscape mode. 8 AUG 2000. DWF. Added the ability to Get and Set the object's name via the SetProperty and a very abbreviated GetProperty method. Also added a GetName method. 26 SEP 2000. DWF. Fixed a problem in which the proper configuration was not restored if in Landscape mode. 20 Nov 2000. DWF. Made a number of modifications at the request of Martin Schultz. 4 Dec 2000. DWF. Fixed a bug when setting file and directory names with the SetProperty method. 18 Dec 2000. DWF. Fixed a small problem in initializing the page size properly. 3 Jan 2001. DWF. Corrected a problem that resulted from a change to FSC_DROPLIST. 6 Jan 2001. DWF. Added the ability to restore the font type instead of always reverting to !P.Font. 7 Jan 2001. DWF. Increased the length of the file/directory name fields. 7 Jan 2001. DWF. Fixed another problem with Landscape mode interacting with A4 paper size. 7 Jan 2001. DWF. Seems I only half fixed the previous problem. :-( 26 April 2001. DWF. Forgot to update program to reflect change in FSC_FIELD. Fixed 26 April 2001. DWF. Changed BOOKMAN keyword to BKMAN to avoid conflict with BOOKSTYLE keyword. 26 April 2001. DWF. Modified the System Defaults to say "None" if none is used. Improved documentation. 10 September 2001. DWF. Added the ability to specify a filename at the same time as a Default Setup. 10 September 2001. DWF. Fixed a small problem in not setting new page sizes appropriately. 22 May 2002. DWF. Fixed a problem that occurred when the Accept button was not named "Accept". 6 May 2003.DWF. Whoops! I was a bit overly agressive on that last fix. :-( 17 July 2003. DWF. Fixed a problem with setting page types when using the DEFAULTSETUP keyword. 31 July 2003. DWF. Fixed a problem with turning encapsulation on in the GUI. Renamed ENCAPSULATE keyword ENCAPSULATED to avoid obvious errors. 31 July 2003. DWF. Removed obsolete STR_SEP and replaced with STRSPLIT. 27 Oct 2004. DWF. Now honoring EUROPEAN keyword when setting system default setups in the INIT method. 12 Nov 2004. DWF. Added CMYK output option 24 August 2007. Assumes LANGUAGE_LEVEL=2 printer. L. Anderson. Fixed a problem with the filename on WINDOWS computers coming back with forward slashes instead of backward slashes. 20 May 2008. DWF. Modified the program to return as the default, ISOLATIN1=1. 18 July 2008. DWF. Fixed a problem with filenames when a DEFAULTSETUP was used with it. 12 Nov 2008. DWF. Changed default window size when LANDSCAPE keyword is set. 10 April 2009. DWF. Changed the default window size for PORTRAIT mode to be a bit larger. 10 April 2009. DWF. Updated for IDL 7.1 and 24-bit color PostScript support. 24 May 2009. DWF. Added PAGETYPE field to returned structure to allow PostScript page type to be determined. 8 August 2009. DWF. Fixed a problem with 24-bit color support that allowed only IDL 7 versions to work correctly. 20 Sept 2009. DWF. Added a LANGUAGE_LEVEL keyword. 13 Dec 2010. DWF. Added the FONTYPE value to the keyword return structure. 14 Dec 2010. DWF. Modified the return structure to turn landscape mode off and set offsets to zero if in encapsulated mode. 19 Feb 2011. DWF. Changes to handle inability to create raster files from PS encapsulated files in landscape mode. Also removed changes of 19 Feb 2011 as no longer needed. 26 Aug 2011. DWF. The PAGETYPE was not getting set properly in the return keywords when the Metric option was selected on the GUI. 12 October 2011. DWF. The program now remembers the last directory you used and will start in that directory, unless told otherwise. 26 Oct 2011. DWF. Parsing of full filename failing. Fixed 27 Oct 2011. DWF.
(See $IDLUTILS_DIR/goddard/pro/coyote/fsc_psconfig__define.pro)
FSC_PS_SETUP__DEFINE
NAME: FSC_PS_SETUP__DEFINE PURPOSE: The purpose of FSC_PS_SETUP__DEFINE is to define a structure that is use with PS_START and PS_END, programs that make it easy to set-up for and close a PostScript file. The programs work in close conjunction with PSCONFIG, another program from the Coyote Library. AUTHOR: FANNING SOFTWARE CONSULTING David Fanning, Ph.D. 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com/ CATEGORY: Graphics, File Output, PostScript CALLING SEQUENCE: Used internally in PS_START and PS_END. COMMON BLOCKS: _$FSC_PS_START_ Contains the PS_STRUCT structure for communication between PS_START and PS_END. MODIFICATION HISTORY: Separated from PS_START file, 7 April 2009, by David W. Fanning. Added PAGETYPE field to structure. 8 August 2009. DWF. Changes to handle inability to create raster files from PS encapsulated files in landscape mode. Added "encapsulated" field to structure. 26 Aug 2011. DWF.
(See $IDLUTILS_DIR/goddard/pro/coyote/fsc_ps_setup__define.pro)
FTAB_DELROW
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 Assume since V5.6, COPY_LUN available W. Landsman Sep 2006
(See $IDLUTILS_DIR/goddard/pro/fits_table/ftab_delrow.pro)
FTAB_EXT
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,...,v30 - values for the columns. Up to 30 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() 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 Avoid EXECUTE() if V6.1 or later W. Landsamn December 2006 Assume since V6.1 W. Landsman June 2009 Read up to 30 columns W.L. Aug 2009
(See $IDLUTILS_DIR/goddard/pro/fits_table/ftab_ext.pro)
FTAB_HELP
NAME: FTAB_HELP PURPOSE: Describe the columns of a FITS binary or ASCII table extension(s). 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 or vector specifying which FITS extensions to display. Default is to display all 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 and fourth extensions of a FITS file spec.fits and write the results to a file 'spec24.lis' IDL> ftab_help,'spec.fits',exten=[2,4],t='spec24.lis' SYSTEM VARIABLES: Uses the non-standard system variables !TEXTOUT and !TEXTUNIT which must be defined (e.g. with ASTROLIB) before compilation NOTES: The behavior of FTAB_HELP was changed in August 2005 to display all extensions by default, rather than just the first extension PROCEDURES USED: FITS_READ, FITS_CLOSE, FITS_OPEN, FTHELP, TBHELP, TEXTOPEN, TEXTCLOSE HISTORY: version 1 W. Landsman August 1997 Corrected documentation W. Landsman September 1997 Don't call fits_close if fcb supplied W. Landsman May 2001 Default now is to display all extensions, EXTEN keyword can now be a vector W. Landsman Aug 2005
(See $IDLUTILS_DIR/goddard/pro/fits_table/ftab_help.pro)
FTAB_PRINT
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= NUM_HEADER_LINES ] 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 a string supplied then column names should be separated by comma's. if not supplied, then all columns are printed. If set to '*' then all columns are printed in table format (1 row per line, binary tables only). 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) 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. NUM_HEADER_LINES - Number of lines to display the column headers (default = 1). By setting NUM_HEADER_LINES to an integer larger than 1, one can avoid truncation of the headers. In addition, setting NUM_HEADER_LINES will display commented lines indicating a FORMAT for reading the data, and a suggested call to readfmt.pro. Works for binary tables only NVAL_PER_LINE - The maximum number of values displayed from a multivalued column when printing in table format. Default = 6 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: (1) Print all rows of the first 5 columns of the first extension of the file 'wfpc.fits' IDL> ftab_print,'vizier.fits',indgen(5)+1 (2) Print all columns of the first row to a file 'vizier.dat' in 'table' format IDL> ftab_print,'vizier.fits',t='vizier.dat','*',0 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_CLOSE, FITS_OPEN, FITS_READ, FTPRINT, TBPRINT HISTORY: version 1 W. Landsman August 1997 Check whether data exists W. Landsman Feb 2007 Check whether extension exists W. Landsman Mar 2010 Added NUM_HEADER_LINES, NVAL_PER_LINE keywords for binary tables W. Landsman Apr 2010
(See $IDLUTILS_DIR/goddard/pro/fits_table/ftab_print.pro)
FTADDCOL
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 $IDLUTILS_DIR/goddard/pro/fits_table/ftaddcol.pro)
FTCREATE
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 $IDLUTILS_DIR/goddard/pro/fits_table/ftcreate.pro)
FTDELCOL
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 $IDLUTILS_DIR/goddard/pro/fits_table/ftdelcol.pro)
FTDELROW
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. PROCEDURES USED: sxaddpar 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 Assume since V5.4, use BREAK instead of GOTO W. Landsman April 2006
(See $IDLUTILS_DIR/goddard/pro/fits_table/ftdelrow.pro)
FTGET
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 $IDLUTILS_DIR/goddard/pro/fits_table/ftget.pro)
FTHELP
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 Remove calls to !ERR, some vectorization W. Landsman February 2000 Slightly more compact display W. Landsman August 2005
(See $IDLUTILS_DIR/goddard/pro/fits_table/fthelp.pro)
FTHMOD
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 $IDLUTILS_DIR/goddard/pro/fits_table/fthmod.pro)
FTINFO
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 $IDLUTILS_DIR/goddard/pro/fits_table/ftinfo.pro)
FTKEEPROW
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 $IDLUTILS_DIR/goddard/pro/fits_table/ftkeeprow.pro)
FTPRINT
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 HISTORY: version 1 D. Lindler Feb. 1987 Accept undefined values of rows, columns W. Landsman August 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 $IDLUTILS_DIR/goddard/pro/fits_table/ftprint.pro)
FTPUT
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 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 Assume since V5.2, omit fstring() call W. Landsman April 2006
(See $IDLUTILS_DIR/goddard/pro/fits_table/ftput.pro)
FTSIZE
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 $IDLUTILS_DIR/goddard/pro/fits_table/ftsize.pro)
FTSORT
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 $IDLUTILS_DIR/goddard/pro/fits_table/ftsort.pro)
FXADDPAR
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 unless the /NOLOGICAL keyword is set. 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. If not supplied, then the IDL default formatting is used, except that double precision is given a format of G19.12. /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. /NOLOGICAL = If set, then the values 'T' and 'F' are not interpreted as logical values, and are simply added without interpretation. 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, e.g. ERRMSG = '' FXADDPAR, ERRMSG=ERRMSG, ... IF ERRMSG NE '' THEN ... 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://fits.gsfc.nasa.gov/registry/continue_keyword.html 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 5, 23-April-2007, William Thompson, GSFC Version 6, 02-Aug-2007, WTT, bug fix for OGIP long lines Version 6.1, 10-Feb-2009, W. Landsman, increase default format precision Version 6.2 30-Sep-2009, W. Landsman, added /NOLOGICAL keyword Version : Version 6.2, 30-Sep-2009
(See $IDLUTILS_DIR/goddard/pro/fits_bintable/fxaddpar.pro)
FXBADDCOL
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 6, Wayne Landsman, GSFC. C. Yamauchi (ISAS) 23 Feb 2006 Support 64bit integers Version 7, C. Markwardt, GSFC, Allow unsigned integers, which have special TSCAL/TZERO values. Feb 2009 Version 8, P.Broos (PSU), Wayne Landsman (GSFC) Mar 2010 Do *not* force TTYPE* keyword to uppercase Version : Version 8, Mar 2010
(See $IDLUTILS_DIR/goddard/pro/fits_bintable/fxbaddcol.pro)
FXBCLOSE
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 $IDLUTILS_DIR/goddard/pro/fits_bintable/fxbclose.pro)
FXBCOLNUM()
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 $IDLUTILS_DIR/goddard/pro/fits_bintable/fxbcolnum.pro)
FXBCREATE
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 Recompute header size if updating THEAP keyword B. Roukema April 2010
(See $IDLUTILS_DIR/goddard/pro/fits_bintable/fxbcreate.pro)
FXBDIMEN()
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 $IDLUTILS_DIR/goddard/pro/fits_bintable/fxbdimen.pro)
FXBFIND
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. Vectorized implementation improves performance, CM 18 Nov 1999 Added COMMENTS keyword CM Nov 2003 Remove use of obsolete !ERR system variable W. Landsman April 2010 Fix error introduced April 2010 W. Landsman Version : Version 3, April 2010.
(See $IDLUTILS_DIR/goddard/pro/fits_bintable/fxbfind.pro)
FXBFINDLUN()
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 Make NAXIS1, NAXIS2, HEAP, DHEAP, BYTOFF 64-bit integers to deal with large files, E. Hivon Mar 2008
(See $IDLUTILS_DIR/goddard/pro/fits_bintable/fxbfindlun.pro)
FXBFINISH
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 $IDLUTILS_DIR/goddard/pro/fits_bintable/fxbfinish.pro)
FXBGROW
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 $IDLUTILS_DIR/goddard/pro/fits_bintable/fxbgrow.pro)
FXBHEADER()
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 $IDLUTILS_DIR/goddard/pro/fits_bintable/fxbheader.pro)
FXBHELP
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 3, Wayne Landsman GSFC April 2010 Remove use of obsolete !ERR system variable Version : Version 3, April 2010.
(See $IDLUTILS_DIR/goddard/pro/fits_bintable/fxbhelp.pro)
FXBHMAKE
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 $IDLUTILS_DIR/goddard/pro/fits_bintable/fxbhmake.pro)
FXBINTABLE
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 $IDLUTILS_DIR/goddard/pro/fits_bintable/fxbintable.pro)
FXBISOPEN()
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 $IDLUTILS_DIR/goddard/pro/fits_bintable/fxbisopen.pro)
FXBOPEN
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 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 Allow for possible 64bit integer number of bytes W. Landsman Nov 2007 Make Ndata a 64bit integer to deal with larger files, E. Hivon, Mar 2008
(See $IDLUTILS_DIR/goddard/pro/fits_bintable/fxbopen.pro)
FXBPARSE
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 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 Make NAXIS1 and NAXIS2 64-bit integers to deal with large files, E. Hivon Mar 2008 Remove use of Obsolete !ERR system variable Version Version 8 April 2010
(See $IDLUTILS_DIR/goddard/pro/fits_bintable/fxbparse.pro)
FXBREAD
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 character string containing a column label (TTYPE), or as a numerical column index starting from column one. Opt. Inputs : ROW = Either row number in the binary table to read data from, starting from row one, or a two element array containing a range of row numbers to read. If not passed, then the entire column is read in. Row must be passed for variable length arrays. Outputs : DATA = IDL data array to be read from the file. Opt. Outputs: None. Keywords : NOSCALE = If set, then the output data will not be scaled using the optional TSCAL and TZERO keywords in the FITS header. Default is to scale. NOIEEE = If set, then the output data is not byte-swapped to machine order. NOIEEE implies NOSCALE. Default is to perform the byte-swap. VIRTUAL = If set, and COL is passed as a name rather than a number, then if the program can't find a column with that name, it will then look for a keyword with that name in the header. Such a keyword would then act as a "virtual column", with the same value for every row. DIMENSIONS = Vector array containing the dimensions to be used to read in the data. Bypasses any dimensioning information stored in the header. Ignored for bit arrays. If the data type is double-precision complex, then an extra dimension of 2 is prepended to the dimensions passed by the user. NANVALUE= Value signalling data dropout. All points corresponding to IEEE NaN (not-a-number) are converted to this number. Ignored unless DATA is of type float, double-precision or complex. 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 = '' FXBREAD, ERRMSG=ERRMSG, ... IF ERRMSG NE '' THEN ... Calls : FXPAR, WHERE_NEGZERO, WHERENAN Common : Uses common block FXBINTABLE--see "fxbintable.pro" for more information. Restrictions: The binary table file must have been opened with FXBOPEN. The data must be consistent with the column definition in the binary table header. The row number must be consistent with the number of rows stored in the binary table header. The number of elements implied by the dimensions keyword must not exceed the number of elements stored in the file. Side effects: If the DIMENSIONS keyword is used, then the number of data points read in may be less than the number of points stored in the table. If there are no elements to read in (the number of elements is zero), then the program sets !ERR to -1, and DATA is unmodified. 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, Jun 1992, modified way that row ranges are read in. No longer works reiteratively. W. Thompson, Jun 1992, fixed bug where NANVALUE would be modified by TSCAL and TZERO keywords. W. Thompson, Jun 1992, fixed bug when reading character strings. Treats dimensions better when reading multiple rows. Written : William Thompson, GSFC, January 1992. Modified : Version 1, William Thompson, GSFC, 12 April 1993. Incorporated into CDS library. Version 2, William Thompson, GSFC, 30 June 1993. Added overwrite keyword to REFORM call to speed up. Version 3, William Thompson, GSFC, 21 July 1993. Fixed bug with variable length arrays. Version 4, William Thompson, GSFC, 29 October 1993. Added error message for not finding column by name. Version 5, William Thompson, GSFC, 31 May 1994 Added ERRMSG keyword. Version 6, William Thompson, GSFC, 23 June 1994 Modified so that ERRMSG is not touched if not defined. Version 7, William Thompson, GSFC, 29 December 1994 Fixed bug where single element dimensions were lost. Version 8, William Thompson, GSFC, 20 March 1995 Fixed bug introduced in version 7. Version 9, Wayne Landsman, GSFC, 3 July 1996 Fixed bug involving use of virtual keyword. Version 10, William Thompson, GSFC, 31-Jan-1997 Added call to WHERE_NEGZERO. Version 11, Wayne Landsman, GSFC, 12 Aug, 1997 Use IDL dcomplex datatype if needed Version 12, Wayne Landmsan, GSFC, 20 Feb, 1998 Remove call to WHERE_NEGZERO (now part of IEEE_TO_HOST) Version 13, 18 Nov 1999, CM, Add NOIEEE keyword Version 14, 21 Aug 2000, William Thompson, GSFC Catch I/O errors Version 15, W. Landsman GSFC 10 Dec 2009 Fix Dimension keyword, remove IEEE_TO_HOST Version : Version 15, 10 Dec 2009
(See $IDLUTILS_DIR/goddard/pro/fits_bintable/fxbread.pro)
FXBREADM
NAME: FXBREADM PURPOSE: Read multiple columns/rows from a disk FITS binary table file. EXPLANATION : A call to FXBREADM will read data from multiple rows and multiple columns in a single procedure call. Up to forty-nine columns may be read in a single pass; the number of rows is limited essentially by available memory. The file should have already been opened with FXBOPEN. FXBREADM optimizes reading multiple columns by first reading a large chunk of data from the FITS file directly, and then slicing the data into columns within memory. FXBREADM can read variable-length arrays (see below). The number of columns is limited to 49 if data are passed by positional argument. However, this limitation can be overcome by having FXBREADM return the data in an array of pointers. The user should set the PASS_METHOD keyword to 'POINTER', and an array of pointers to the data will be returned in the POINTERS keyword. The user is responsible for freeing the pointers; however, FXBREADM will reuse any pointers passed into the procedure, and hence any pointed-to data will be destroyed. FXBREADM can also read variable-length columns from FITS binary tables. Since such data is not of a fixed size, it is returned as a structure. The structure has the following elements: VARICOL: ;; Flag: variable length column (= 1) N_ELEMENTS: ;; Total number of elements returned TYPE: ;; IDL data type code (integer) N_ROWS: ;; Number of rows read from table (integer) INDICES: ;; Indices of each row's data (integer array) DATA: ;; Raw data elements (variable type array) In order to gain access to the Ith row's data, one should examine DATA(INDICES(I):INDICES(I+1)-1), which is similar in construct to the REVERSE_INDICES keyword of the HISTOGRAM function. CALLING SEQUENCE: FXBREADM, UNIT, COL, DATA1, [ DATA2, ... DATA48, ROW=, BUFFERSIZE = ] /NOIEEE, /NOSCALE, /VIRTUAL, NANVALUE=, PASS_METHOD = POINTERS=, ERRMSG = , WARNMSG = , STATUS = , /DEFAULT_FLOAT] INPUT PARAMETERS : UNIT = Logical unit number corresponding to the file containing the binary table. COL = An array of columns in the binary table to read data from, either as character strings containing column labels (TTYPE), or as numerical column indices starting from column one. Outputs : DATA1, DATA2...DATA48 = A named variable to accept the data values, one for each column. The columns are stored in order of the list in COL. If the read operation fails for a particular column, then the corresponding output Dn variable is not altered. See the STATUS keyword. Ignored if PASS_METHOD is 'POINTER'. OPTIONAL INPUT KEYWORDS: ROW = Either row number in the binary table to read data from, starting from row one, or a two element array containing a range of row numbers to read. If not passed, then the entire column is read in. /DEFAULT_FLOAT = If set, then scaling with TSCAL/TZERO is done with floating point rather than double precision. /NOIEEE = If set, then then IEEE floating point data will not be converted to the host floating point format (and this by definition implies NOSCALE). The user is responsible for their own floating point conversion. /NOSCALE = If set, then the output data will not be scaled using the optional TSCAL and TZERO keywords in the FITS header. Default is to scale. VIRTUAL = If set, and COL is passed as a name rather than a number, then if the program can't find a column with that name, it will then look for a keyword with that name in the header. Such a keyword would then act as a "virtual column", with the same value for every row. DIMENSIONS = FXBREADM ignores this keyword. It is here for compatibility only. NANVALUE= Value signalling data dropout. All points corresponding to IEEE NaN (not-a-number) are converted to this number. Ignored unless DATA is of type float, double-precision or complex. PASS_METHOD = A scalar string indicating method of passing data from FXBREADM. Either 'ARGUMENT' (indicating pass by positional argument), or 'POINTER' (indicating passing an array of pointers by the POINTERS keyword). Default: 'ARGUMENT' POINTERS = If PASS_METHOD is 'POINTER' then an array of IDL pointers is returned in this keyword, one for each requested column. Any pointers passed into FXBREADM will have their pointed-to data destroyed. Ultimately the user is responsible for deallocating pointers. BUFFERSIZE = Raw data are transferred from the file in chunks to conserve memory. This is the size in bytes of each chunk. If a value of zero is given, then all of the data are transferred in one pass. Default is 32768 (32 kB). OPTIONAL OUTPUT 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 = '' FXBREAD, ERRMSG=ERRMSG, ... IF ERRMSG NE '' THEN ... WARNMSG = Messages which are considered to be non-fatal "warnings" are returned in this output string. Note that if some but not all columns are unreadable, this is considered to be non-fatal. STATUS = An output array containing the status for each column read, 1 meaning success and 0 meaning failure. Calls : IEEE_TO_HOST, FXPAR(), WHERENAN() Common : Uses common block FXBINTABLE--see "fxbintable.pro" for more information. Restrictions: The binary table file must have been opened with FXBOPEN. The data must be consistent with the column definition in the binary table header. The row number must be consistent with the number of rows stored in the binary table header. Generaly speaking, FXBREADM will be faster than iterative calls to FXBREAD when (a) a large number of columns is to be read or (b) the size in bytes of each cell is small, so that the overhead of the FOR loop in FXBREAD becomes significant. SIDE EFFECTS: If there are no elements to read in (the number of elements is zero), then the program sets !ERR to -1, and DATA is unmodified. Category : Data Handling, I/O, FITS, Generic. Prev. Hist. : C. Markwardt, based in concept on FXBREAD version 12 from IDLASTRO, but with significant and major changes to accomodate the multiple row/column technique. Mostly the parameter checking and general data flow remain. C. Markwardt, updated to read variable length arrays, and to pass columns by handle or pointer. 20 Jun 2001 C. Markwardt, try to conserve memory when creating the arrays 13 Oct 2001 Handle case of GE 50 columns, C. Markwardt, 18 Apr 2002 Handle case where TSCAL/TZERO changes type of column, C. Markwardt, 23 Feb 2003 Fix bug in handling of FOUND and numeric columns, C. Markwardt 12 May 2003 Removed pre-V5.0 HANDLE options W. Landsman July 2004 Fix bug when HANDLE options were removed, July 2004 Handle special cases of TSCAL/TZERO which emulate unsigned integers, Oct 2003 Add DEFAULT_FLOAT keyword to select float values instead of double for TSCAL'ed, June 2004 Read 64bit integer columns, E. Hivon, Mar 2008 Add support for columns with TNULLn keywords, C. Markwardt, Apr 2010 Add support for files larger than 2 GB, C. Markwardt, 2012-04-17
(See $IDLUTILS_DIR/goddard/pro/fits_bintable/fxbreadm.pro)
FXBSTATE()
NAME: FXBSTATE() PURPOSE: Returns the state of a FITS binary table. Explanation : This procedure returns the state of a FITS binary table that was either opened for read with the command FXBOPEN, or for write with the command FXBCREATE. Use : Result = FXBSTATE(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 the state of the FITS binary table that UNIT points to. This can be one of three values: 0 = Closed 1 = Open for read 2 = Open for write 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 0 (closed) 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 $IDLUTILS_DIR/goddard/pro/fits_bintable/fxbstate.pro)
FXBTDIM()
NAME: FXBTDIM() Purpose : Parse TDIM-like kwywords. Explanation : Parses the value of a TDIM-like keyword (e.g. TDIMnnn, TDESC, etc.) to return the separate elements contained within. Use : Result = FXBTDIM( TDIM_KEYWORD ) Inputs : TDIM_KEYWORD = The value of a TDIM-like keyword. Must be a character string of the form "(value1,value2,...)". If the parentheses characters are missing, then the string is simply returned as is, without any further processing. Opt. Inputs : None. Outputs : The result of the function is a character string array containing the values contained within the keyword parameter. If a numerical result is desired, then simply call, e.g. Result = FIX( FXBTDIM( TDIM_KEYWORD )) Opt. Outputs: None. Keywords : None. Calls : GETTOK Common : None. Restrictions: The input parameter must have the proper format. The separate values must not contain the comma character. TDIM_KEYWORD must not be an array. Side effects: None. Category : Data Handling, I/O, FITS, Generic. Prev. Hist. : William Thompson, Jan. 1992. William Thompson, Jan. 1993, renamed to be compatible with DOS limitations. Written : William Thompson, GSFC, January 1992. Modified : Version 1, William Thompson, GSFC, 12 April 1993. Incorporated into CDS library. Version : Version 1, 12 April 1993. Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/fits_bintable/fxbtdim.pro)
FXBTFORM
NAME: FXBTFORM PURPOSE : Returns information about FITS binary table columns. EXPLANATION : Procedure to return information about the format of the various columns in a FITS binary table. Use : FXBTFORM,HEADER,TBCOL,IDLTYPE,FORMAT,NUMVAL,MAXVAL Inputs : HEADER = Fits binary table header. Opt. Inputs : None. Outputs : TBCOL = Array of starting column positions in bytes. IDLTYPE = IDL data types of columns. FORMAT = Character code defining the data types of the columns. NUMVAL = Number of elements of the data arrays in the columns. MAXVAL = Maximum number of elements for columns containing variable length arrays, or zero otherwise. 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 = '' FXBTFORM, ERRMSG=ERRMSG, ... IF ERRMSG NE '' THEN ... Calls : FXPAR Common : None. Restrictions: None. Side effects: None. Category : Data Handling, I/O, FITS, Generic. Prev. Hist. : W. Thompson, Feb. 1992, from TBINFO by D. Lindler. W. Thompson, Jan. 1993, renamed to be compatible with DOS limitations. 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, William Thompson, GSFC, 9 April 1997 Modified so that variable length arrays can be read, even if the maximum array size is not in the header. Version 5 Wayne Landsman, GSFC, August 1997 Recognize double complex array type if since IDL version 4.0 Version 6 Optimized FXPAR call, CM 1999 Nov 18 Version 7: Wayne Landsman, GSFC Feb 2006 Added support for 64bit integer K format Version: Version 8: Wayne Landsman GSFC Apr 2010 Remove use of obsolete !ERR variable
(See $IDLUTILS_DIR/goddard/pro/fits_bintable/fxbtform.pro)
FXBWRITE
NAME: FXBWRITE Purpose : Write a binary data array to a disk FITS binary table file. Explanation : Each call to FXBWRITE will write to the data file, which should already have been created and opened by FXBCREATE. One needs to call this routine for every column and every row in the binary table. FXBFINISH will then close the file. Use : FXBWRITE, UNIT, DATA, COL, ROW Inputs : UNIT = Logical unit number corresponding to the file containing the binary table. DATA = IDL data array to be written to the file. COL = Column in the binary table to place data in, starting from column one. ROW = Row in the binary table to place data in, starting from row one. Opt. Inputs : None. Outputs : None. Opt. Outputs: None. Keywords : BIT = Number of bits in bit mask arrays (type "X"). Only used if the column is of variable size. NANVALUE= Value signalling data dropout. All points corresponding to this value are set to be IEEE NaN (not-a-number). Ignored unless DATA is of type float, double-precision or complex. 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 = '' FXBWRITE, ERRMSG=ERRMSG, ... IF ERRMSG NE '' THEN ... Calls : HOST_TO_IEEE Common : Uses common block FXBINTABLE--see "fxbintable.pro" for more information. Restrictions: The binary table file must have been opened with FXBCREATE. The data must be consistent with the column definition in the binary table header. The row number must be consistent with the number of rows stored in the binary table header. 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, 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 5, Wayne Landsman, GSFC, 12 Aug 1997 Recognize IDL double complex data type Version : Version 5, 12 August 1997 Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/fits_bintable/fxbwrite.pro)
FXBWRITM
NAME: FXBWRITM PURPOSE: Write multiple columns/rows to a disk FITS binary table file. EXPLANATION : A call to FXBWRITM will write multiple rows and multiple columns to a binary table in a single procedure call. Up to fifty columns may be read in a single pass. The file should have already been opened with FXBOPEN (with write access) or FXBCREATE. FXBWRITM optimizes writing multiple columns by first writing a large chunk of data to the FITS file all at once. FXBWRITM cannot write variable-length arrays; use FXBWRITE instead. The number of columns is limited to 50 if data are passed by positional argument. However, this limitation can be overcome by passing pointers to FXBWRITM. The user should set the PASS_METHOD keyword to 'POINTER' as appropriate, and an array of pointers to the data in the POINTERS keyword. The user is responsible for freeing the pointers. CALLING SEQUENCE: FXBWRITM, UNIT, COL, D0, D1, D2, ..., [ ROW= , PASS_METHOD, NANVALUE= POINTERS=, BUFFERSIZE= ] INPUT PARAMETERS: UNIT = Logical unit number corresponding to the file containing the binary table. D0,..D49= An IDL data array to be written to the file, one for each column. These parameters will be igonred if data is passed through the POINTERS keyword. COL = Column in the binary table to place data in. May be either a list of column numbers where the first column is one, or a string list of column names. OPTIONAL INPUT KEYWORDS: ROW = Either row number in the binary table to write data to, starting from row one, or a two element array containing a range of row numbers to write. If not passed, then the entire column is written. NANVALUE= Value signalling data dropout. All points corresponding to this value are set to be IEEE NaN (not-a-number). Ignored unless DATA is of type float, double-precision or complex. NOSCALE = If set, then TSCAL/TZERO values are ignored, and data is written exactly as supplied. PASS_METHOD = A scalar string indicating method of passing data to FXBWRITM. One of 'ARGUMENT' (indicating pass by positional argument), or'POINTER' (indicating passing an array of pointers by the POINTERS keyword). Default: 'ARGUMENT' POINTERS = If PASS_METHOD is 'POINTER' then the user must pass an array of IDL pointers to this keyword, one for each column. Ultimately the user is responsible for deallocating pointers. BUFFERSIZE = Data are transferred in chunks to conserve memory. This is the size in bytes of each chunk. If a value of zero is given, then all of the data are transferred in one pass. Default is 32768 (32 kB). OPTIONAL OUTPUT 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 = '' FXBWRITE, ERRMSG=ERRMSG, ... IF ERRMSG NE '' THEN ... WARNMSG = Messages which are considered to be non-fatal "warnings" are returned in this output string. STATUS = An output array containing the status for each read, 1 meaning success and 0 meaning failure. PROCEDURE CALLS: None. EXAMPLE: Write a binary table 'sample.fits' giving 43 X,Y positions and a 21 x 21 PSF at each position: (1) First, create sample values x = findgen(43) & y = findgen(43)+1 & psf = randomn(seed,21,21,43) (2) Create primary header, write it to disk, and make extension header fxhmake,header,/initialize,/extend,/date fxwrite,'sample.fits',header fxbhmake,header,43,'TESTEXT','Test binary table extension' (3) Fill extension header with desired column names fxbaddcol,1,header,x[0],'X' ;Use first element in each array fxbaddcol,2,header,y[0],'Y' ;to determine column properties fxbaddcol,3,header,psf[*,*,0],'PSF' (4) Write extension header to FITS file fxbcreate,unit,'sample.fits',header (5) Use FXBWRITM to write all data to the extension in a single call fxbwritm,unit,['X','Y','PSF'], x, y, psf fxbfinish,unit ;Close the file COMMON BLOCKS: Uses common block FXBINTABLE--see "fxbintable.pro" for more information. RESTRICTIONS: The binary table file must have been opened with FXBCREATE or FXBOPEN (with write access). The data must be consistent with the column definition in the binary table header. The row number must be consistent with the number of rows stored in the binary table header. A PASS_METHOD of POINTER does not use the EXECUTE() statement and can be used with the IDL Virtual Machine. However, the EXECUTE() statement is used when the PASS_METHOD is by arguments. CATEGORY: Data Handling, I/O, FITS, Generic. PREVIOUS HISTORY: C. Markwardt, based on FXBWRITE and FXBREADM (ver 1), Jan 1999 WRITTEN: Craig Markwardt, GSFC, January 1999. MODIFIED: Version 1, Craig Markwardt, GSFC 18 January 1999. Documented this routine, 18 January 1999. C. Markwardt, added ability to pass by handle or pointer. Some bug fixes, 20 July 2001 W. Landsman/B.Schulz Allow more than 50 arguments when using pointers W. Landsman Remove pre-V5.0 HANDLE options July 2004 W. Landsman Remove EXECUTE() call with POINTERS May 2005 C. Markwardt Allow the output table to have TSCAL/TZERO keyword values; if that is the case, then the passed values will be quantized to match those scale factors before being written. Sep 2007 E. Hivon: write 64bit integer and double precison columns, Mar 2008 C. Markwardt Allow unsigned integers, which have special TSCAL/TZERO values. Feb 2009 C. Markwardt Add support for files larger than 2 GB, 2012-04-17
(See $IDLUTILS_DIR/goddard/pro/fits_bintable/fxbwritm.pro)
FXFINDEND
NAME: FXFINDEND Purpose : Find the end of a FITS file. Explanation : This routine finds the end of the last logical record in a FITS file, which may be different from that of the physical end of the file. Each FITS header is read in and parsed, and the file pointer is moved to where the next FITS extension header would be if there is one, or to the end of the file if not. Use : FXFINDEND, UNIT [, EXTENSION] Inputs : UNIT = Logical unit number for the opened file. Opt. Inputs : None. Outputs : None. Opt. Outputs: EXTENSION = The extension number that a new extension would have if placed at the end of the file. Keywords : None. Calls : FXHREAD, FXPAR Common : None. Restrictions: The file must have been opened for block I/O. There must not be any FITS "special records" at the end of the file. 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. Converted to IDL V5.0 W. Landsman September 1997 Added EXTENSION parameter, CM 1999 Nov 18 Allow for possible 64bit integer number of bytes W. Landsman Nov 2007 make Ndata a long64 to deal with large files. E. Hivon Mar 2008
(See $IDLUTILS_DIR/goddard/pro/fits_bintable/fxfindend.pro)
FXHCLEAN
NAME: FXHCLEAN Purpose : Removes required keywords from FITS header. Explanation : Removes any keywords relevant to array structure from a FITS header, preparatory to recreating it with the proper values. Use : FXHCLEAN, HEADER Inputs : HEADER = FITS header to be cleaned. Opt. Inputs : None. Outputs : HEADER = The cleaned FITS header is returned in place of the input array. 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 = '' FXHCLEAN, ERRMSG=ERRMSG, ... IF ERRMSG NE '' THEN ... Calls : SXDELPAR, FXPAR Common : None. Restrictions: HEADER must be a string array containing a properly formatted FITS header. Side effects: Warning: when cleaning a binary table extension header, not all of the keywords pertaining to columns in the table may be removed. Category : Data Handling, I/O, FITS, Generic. Prev. Hist. : William Thompson, Jan 1992. 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 TCUNIn to list of column keywords to be removed. Version : Version 4, 30 December 1994 Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/fits_bintable/fxhclean.pro)
FXHMAKE
NAME: FXHMAKE Purpose : Create a basic FITS header array. Explanation : Creates a basic header array with all the required keywords. This defines a basic structure which can then be added to or modified by other routines. Use : FXHMAKE, HEADER [, DATA ] Inputs : None required. Opt. Inputs : DATA = IDL data array to be written to file. It must be in the primary data unit unless the XTENSION keyword is supplied. This array is used to determine the values of the BITPIX and NAXIS, etc. keywords. If not passed, then BITPIX is set to eight, NAXIS is set to zero, and no NAXISnnn keywords are included in this preliminary header. Outputs : HEADER = String array containing FITS header. Opt. Outputs: None. Keywords : INITIALIZE = If set, then the header is completely initialized, and any previous entries are lost. EXTEND = If set, then the keyword EXTEND is inserted into the file, with the value of "T" (true). DATE = If set, then the DATE keyword is added to the header. 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 = '' FXHMAKE, ERRMSG=ERRMSG, ... IF ERRMSG NE '' THEN ... XTENSION - If set, then the header is appropriate for an image extension, rather than the primary data unit. Calls : GET_DATE, FXADDPAR, FXHCLEAN Common : None. Restrictions: Groups are not currently supported. Side effects: BITPIX, NAXIS, etc. are defined such that complex arrays are stored as floating point, with an extra first dimension of two elements (real and imaginary parts). Category : Data Handling, I/O, FITS, Generic. Prev. Hist. : William Thompson, Jan 1992, from SXHMAKE by D. Lindler and M. Greason. Differences include: * Use of FITS standard (negative BITPIX) to signal floating point numbers instead of (SDAS/Geis) DATATYPE keyword. * Storage of complex numbers as pairs of real numbers. * Support for EXTEND keyword, and for cases where there is no primary data array. * Insertion of DATE record made optional. Only required FITS keywords are inserted automatically. 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 4, Wayne Landsman, GSFC, 12 August 1997 Recognize double complex data type Converted to IDL V5.0 W. Landsman September 1997 Version 6, William Thompson, GSFC, 22 September 2004 Recognize unsigned integer types. Version 6.1, C. Markwardt, GSFC, 19 Jun 2005 Add the XTENSION keyword, which writes an XTENSION keyword instead of SIMPLE. Version : Version 6.1, 19 June 2005
(See $IDLUTILS_DIR/goddard/pro/fits_bintable/fxhmake.pro)
FXHMODIFY
NAME: FXHMODIFY PURPOSE : Modify a FITS header in a file on disk. Explanation : Opens a FITS file, and adds or modifies a parameter in the FITS header. Can be used for either the main header, or for an extension header. The modification is performed directly on the disk file. Use : FXHMODIFY, FILENAME, NAME, VALUE, COMMENT Inputs : FILENAME = String containing the name of the file to be read. NAME = Name of parameter, scalar string 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. 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 : None. Opt. Outputs: None. Keywords : 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. If not passed, then the primary FITS header is modified. 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. 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 = '' FXHMODIFY, ERRMSG=ERRMSG, ... IF ERRMSG NE '' THEN ... Calls : FXHREAD, FXPAR, FXADDPAR, BLKSHIFT Restrictions: This routine can not be used to modify any of the keywords that control the structure of the FITS file, e.g. BITPIX, NAXIS, PCOUNT, etc. Doing so could corrupt the readability of the FITS file. Example: Modify the name 'OBJECT' keyword in the primary FITS header of a FITS file 'spec98.ccd' to contain the value 'test domeflat' IDL> fxhmodify, 'spec98.ccd', 'OBJECT', 'test domeflat' Side effects: If adding a record to the FITS header would increase the number of 2880 byte records stored on disk, then the file is enlarged before modification, unless the NOGROW keyword is passed. Category : Data Handling, I/O, FITS, Generic. Prev. Hist. : None. Written : William Thompson, GSFC, 3 March 1994. Modified : Version 1, William Thompson, GSFC, 3 March 1994. 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 3.1 Wayne Landsman GSFC 17 March 2006 Fix problem in BLKSHIFT call if primary header extended Version 3.2 W. Landsman 14 November 204 Allow for need for 64bit number of bytes ; Version : Version 3.2, 14 Nov 2007
(See $IDLUTILS_DIR/goddard/pro/fits_bintable/fxhmodify.pro)
FXHREAD
NAME: FXHREAD Purpose : Reads a FITS header from an opened disk file. Explanation : Reads a FITS header from an opened disk file. Use : FXHREAD, UNIT, HEADER [, STATUS ] Inputs : UNIT = Logical unit number. Opt. Inputs : Outputs : HEADER = String array containing the FITS header. Opt. Outputs: STATUS = Condition code giving the status of the read. Normally, this is zero, but is set to !ERR if an error occurs, or if the first byte of the header is zero (ASCII null). Keywords : None. Calls : None. Common : None. Restrictions: The file must already be positioned at the start of the header. It must be a proper FITS file. Side effects: The file ends by being positioned at the end of the FITS header, unless an error occurs. Category : Data Handling, I/O, FITS, Generic. Prev. Hist. : W. Thompson, Feb 1992, from READFITS by J. Woffard and W. Landsman. W. Thompson, Aug 1992, added test for SIMPLE keyword. 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. Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/fits_bintable/fxhread.pro)
FXMOVE
NAME: FXMOVE PURPOSE: Skip to a specified extension number or name in a FITS file CALLING SEQUENCE: STATUS=FXMOVE(UNIT, EXT, /Silent) STATUS=FXMOVE(UNIT, EXTNAME, /Silent, EXT_NO=, ERRMSG= ) INPUT PARAMETERS: UNIT = An open unit descriptor for a FITS data stream. EXTEN = Number of extensions to skip. or Scalar string giving extension name (in the EXTNAME keyword) OPTIONAL INPUT PARAMETER: /SILENT - If set, then any messages about invalid characters in the FITS file are suppressed. OPTIONAL OUTPUT PARAMETER: 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. RETURNS: 0 if successful. -1 if an error is encountered. COMMON BLOCKS: None. SIDE EFFECTS: Repositions the file pointer. PROCEDURE: Each FITS header is read in and parsed, and the file pointer is moved to where the next FITS extension header until the desired extension is reached. PROCEDURE CALLS: FXPAR(), MRD_HREAD, MRD_SKIP MODIFICATION HISTORY: Extracted from FXPOSIT 8-March-2000 by T. McGlynn Added /SILENT keyword 14-Dec-2000 by W. Landsman Save time by not reading the full header W. Landsman Feb. 2003 Allow extension name to be specified, added EXT_NO, ERRMSG keywords W. Landsman December 2006 Make search for EXTNAME case-independent W.Landsman March 2007 Avoid round-off error for very large extensions N. Piskunov Dec 2007 Assume since V6.1 (/INTEGER keyword available to PRODUCT() ) Dec 2007 Capture error message from MRD_HREAD (must be used with post-June 2009 version of MRD-HREAD) W. Landsman July 2009
(See $IDLUTILS_DIR/goddard/pro/fits/fxmove.pro)
FXPAR()
NAME: FXPAR() PURPOSE: Obtain the value of a parameter in a FITS header. EXPLANATION: The first 8 chacters of each element of HDR are searched for a match to NAME. If the keyword is one of those allowed to take multiple values ("HISTORY", "COMMENT", or " " (blank)), then the value is taken as the next 72 characters. Otherwise, it is assumed that the next character is "=", and the value (and optional comment) is then parsed from the last 71 characters. An error occurs if there is no parameter with the given name. If the value is too long for one line, it may be continued on to the the next input card, using the CONTINUE Long String Keyword convention. For more info, http://fits.gsfc.nasa.gov/registry/continue_keyword.html Complex numbers are recognized as two numbers separated by one or more space characters. If a numeric value has no decimal point (or E or D) it is returned as type LONG. If it contains more than 8 numerals, or contains the character 'D', then it is returned as type DOUBLE. Otherwise it is returned as type FLOAT. If an integer is too large to be stored as type LONG, then it is returned as DOUBLE. CALLING SEQUENCE: Result = FXPAR( HDR, NAME [, ABORT, COUNT=, COMMENT=, /NOCONTINUE ] ) Result = FXPAR(HEADER,'DATE') ;Finds the value of DATE Result = FXPAR(HEADER,'NAXIS*') ;Returns array dimensions as ;vector REQUIRED INPUTS: HDR = FITS header string array (e.g. as returned by FXREAD). Each element should have a length of 80 characters NAME = String name of the parameter to return. If NAME is of the form 'keyword*' then an array is returned containing values of keywordN where N is an integer. The value of keywordN will be placed in RESULT(N-1). The data type of RESULT will be the type of the first valid match of keywordN found, unless DATATYPE is given. OPTIONAL INPUT: ABORT = String specifying that FXPAR should do a RETALL if a parameter is not found. ABORT should contain a string to be printed if the keyword parameter is not found. If not supplied, FXPAR will return with a negative !err if a keyword is not found. DATATYPE = A scalar value, indicating the type of vector data. All keywords will be cast to this type. Default: based on first keyword. Example: DATATYPE=0.0D (cast data to double precision) START = A best-guess starting position of the sought-after keyword in the header. If specified, then FXPAR first searches for scalar keywords in the header in the index range bounded by START-PRECHECK and START+POSTCHECK. This can speed up keyword searches in large headers. If the keyword is not found, then FXPAR searches the entire header. If not specified then the entire header is searched. Searches of the form 'keyword*' also search the entire header and ignore START. Upon return START is changed to be the position of the newly found keyword. Thus the best way to search for a series of keywords is to search for them in the order they appear in the header like this: START = 0L P1 = FXPAR('P1', START=START) P2 = FXPAR('P2', START=START) PRECHECK = If START is specified, then PRECHECK is the number of keywords preceding START to be searched. Default: 5 POSTCHECK = If START is specified, then POSTCHECK is the number of keywords after START to be searched. Default: 20 OUTPUT: The returned value of the function is the value(s) associated with the requested keyword in the header array. If the parameter is complex, double precision, floating point, long or string, then the result is of that type. Apostrophes are stripped from strings. If the parameter is logical, 1 is returned for T, and 0 is returned for F. If NAME was of form 'keyword*' then a vector of values are returned. OPTIONAL INPUT KEYWORDS: /NOCONTINUE = If set, then continuation lines will not be read, even if present in the header OPTIONAL OUTPUT KEYWORD: COUNT = Optional keyword to return a value equal to the number of parameters found by FXPAR. COMMENTS= Array of comments associated with the returned values. PROCEDURE CALLS: GETTOK(), VALID_NUM SIDE EFFECTS: The system variable !err is set to -1 if parameter not found, 0 for a scalar value returned. If a vector is returned it is set to the number of keyword matches found. If a keyword occurs more than once in a header, a warning is given, and the first occurence is used. However, if the keyword is "HISTORY", "COMMENT", or " " (blank), then multiple values are returned. NOTES: The functions SXPAR() and FXPAR() are nearly identical, although FXPAR() has slightly more sophisticated parsing. There is no particular reason for having two nearly identical procedures, but both are too widely used to drop either one. REVISION HISTORY: Version 1, William Thompson, GSFC, 12 April 1993. Adapted from SXPAR Version 2, William Thompson, GSFC, 14 October 1994 Modified to use VALID_NUM instead of STRNUMBER. Inserted additional call to VALID_NUM to trap cases where character strings did not contain quotation marks. Version 3, William Thompson, GSFC, 22 December 1994 Fixed bug with blank keywords, following suggestion by Wayne Landsman. Version 4, Mons Morrison, LMSAL, 9-Jan-98 Made non-trailing ' for string tag just be a warning (not a fatal error). It was needed because "sxaddpar" had an error which did not write tags properly for long strings (over 68 characters) Version 5, Wayne Landsman GSFC, 29 May 1998 Fixed potential problem with overflow of LONG values Version 6, Craig Markwardt, GSFC, 28 Jan 1998, Added CONTINUE parsing Version 7, Craig Markwardt, GSFC, 18 Nov 1999, Added START, PRE/POSTCHECK keywords for better performance Version 8, Craig Markwardt, GSFC, 08 Oct 2003, Added DATATYPE keyword to cast vector keywords type Version 9, Paul Hick, 22 Oct 2003, Corrected bug (NHEADER-1) Version 10, W. Landsman, GSFC 2 May 2012 Keywords of form "name_0" cound confuse vector extractions
(See $IDLUTILS_DIR/goddard/pro/fits_bintable/fxpar.pro)
FXPARPOS()
NAME: FXPARPOS() Purpose : Finds position to insert record into FITS header. Explanation : Finds the position to insert a record into a FITS header. Called from FXADDPAR. Use : Result = FXPARPOS(KEYWRD, IEND [, BEFORE=BEFORE ] [, AFTER=AFTER ]) Inputs : KEYWRD = Array of eight-character keywords in header. IEND = Position of END keyword. Opt. Inputs : None. Outputs : Result of function is position to insert record. 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. If neither BEFORE or AFTER keywords are passed, then IEND is returned. Calls : None. Common : None. Restrictions: KEYWRD and IEND must be consistent with the relevant FITS header. Side effects: None. Category : Data Handling, I/O, FITS, Generic. Prev. Hist. : William Thompson, Jan 1992. Written : William Thompson, GSFC, January 1992. Modified : Version 1, William Thompson, GSFC, 12 April 1993. Incorporated into CDS library. Version : Version 1, 12 April 1993. Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/fits_bintable/fxparpos.pro)
FXPOSIT
NAME: FXPOSIT PURPOSE: Return the unit number of a FITS file positioned at specified extension EXPLANATION: The FITS file will be ready to be read at the beginning of the specified extension. Either an extension number or extension name can be specified. Called by headfits.pro, mrdfits.pro Modified in March 2009 to set the /SWAP_IF_LITTLE_ENDIAN keyword when opening a file, and **may not be compatible with earlier versions** CALLING SEQUENCE: unit=FXPOSIT(FILE, EXT_NO_OR_NAME, /READONLY, COMPRESS=program, UNIXPIPE=, ERRMSG= , EXTNUM= , UNIT=, /SILENT /FPACK, /NO_FPACK INPUT PARAMETERS: FILE = FITS file name, scalar string. If an empty string is supplied then the user will be prompted for the file name. The user will also be prompted if a wild card is supplied, and more than one file matches the wildcard. EXT_NO_OR_NAME = Either the extension to be moved to (scalar nonnegative integer) or the name of the extension to read (scalar string) RETURNS: Unit number of file or -1 if an error is detected. OPTIONAL INPUT KEYWORD PARAMETER: COMPRESS - If this keyword is set and non-zero, then then treat the file as compressed. If 1 assume a gzipped file. and use IDLs internal decompression facility. For Unix compressed or bzip2 compressed files spawn off a process to decompress and use its output as the FITS stream. If the keyword is not 1, then use its value as a string giving the command needed for decompression. /FPACK - Signal that the file is compressed with the FPACK software. http://heasarc.gsfc.nasa.gov/fitsio/fpack/ ) By default, (FXPOSIT will assume that if the file name extension ends in .fz that it is fpack compressed.) The FPACK software must be installed on the system /NO_FPACK - The unit will only be used to read the FITS header. In that case FPACK compressed files need not be uncompressed. LUNIT - Integer giving the file unit number. Use this keyword if you want to override the default use of GET_LUN to obtain a unit number. /READONLY - If this keyword is set and non-zero, then OPENR rather than OPENU will be used to open the FITS file. Note that compressed files are always set to /READONLY /SILENT If set, then suppress any messages about invalid characters in the FITS file. OPTIONAL OUTPUT KEYWORDS: EXTNUM - Nonnegative integer give the extension number actually read Useful only if the extension was specified by name. 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. UNIXPIPE - If set to 1, then the FITS file was opened with a UNIX pipe rather than with the OPENR command. This is only required when reading a FPACK, bzip or Unix compressed file. Note that automatic byteswapping cannnot be set for a Unix pipe, since the SWAP_IF_LITTLE_ENDIAN keyword is only available for the OPEN command, and it is the responsibilty of the calling routine to perform the byteswapping. SIDE EFFECTS: Opens and returns a file unit. PROCEDURE: Open the appropriate file, or spawn a command and intercept the output. Call FXMOVE to get to the appropriate extension. PROCEDURE CALLS: FXMOVE() MODIFICATION HISTORY: Derived from William Thompson's FXFINDEND routine. Modified by T.McGlynn, 5-October-1994. Modified by T.McGlynn, 25-Feb-1995 to handle compressed files. Pipes cannot be accessed using FXHREAD so MRD_HREAD was written. W. Landsman 23-Apr-1997 Force the /bin/sh shell when uncompressing T. McGlynn 03-June-1999 Use /noshell option to get rid of processes left by spawn. Use findfile to retain ability to use wildcards W. Landsman 03-Aug-1999 Use EXPAND_TILDE under Unix to find file T. McGlynn 04-Apr-2000 Put reading code into FXMOVE, additional support for compression from D.Palmer. W. Landsman/D.Zarro 04-Jul-2000 Added test for !VERSION.OS EQ 'Win32' (WinNT) W. Landsman 12-Dec-2000 Added /SILENT keyword W. Landsman April 2002 Use FILE_SEARCH for V5.5 or later W. Landsman Feb 2004 Assume since V5.3 (OPENR,/COMPRESS available) W. Landsman,W. Thompson, 2-Mar-2004, Add support for BZIP2 W. Landsman Don't leave open file if an error occurs W. Landsman Sep 2004 Treat FTZ extension as gzip compressed W. Landsman Feb 2006 Removed leading spaces (prior to V5.5) W. Landsman Nov 2006 Allow specification of extension name Added EXTNUM, ERRMSG keywords W. Landsman/N.Piskunov Dec 2007 Added LUNIT keyword W. Landsman Mar 2009 OPEN with /SWAP_IF_LITTLE_ENDIAN Added UNIXPIPE output keyword N. Rich May 2009 Check if filename is an empty string W. Landsman May 2009 Support FPACK compressed files Added /FPACK, /HEADERONLY keywords W.Landsman July 2009 Deprecated /HEADERONLY add /NO_FPACK W.Landsman July 2011 Check for SIMPLE in first 8 chars Use gunzip to decompress Unix. Z file since compress utility often not installed anymore)
(See $IDLUTILS_DIR/goddard/pro/fits/fxposit.pro)
FXREAD
NAME: FXREAD Purpose : Read basic FITS files. Explanation : Read an image array from a disk FITS file. Optionally allows the user to read in only a subarray and/or every Nth pixel. Use : FXREAD, FILENAME, DATA [, HEADER [, I1, I2 [, J1, J2 ]] [, STEP]] Inputs : FILENAME = String containing the name of the file to be read. Opt. Inputs : I1,I2 = Data range to read in the first dimension. If passed, then HEADER must also be passed. If not passed, or set to -1,-1, then the entire range is read. J1,J2 = Data range to read in the second dimension. If passed, then HEADER and I1,J2 must also be passed. If not passed, or set to -1,-1, then the entire range is read. STEP = Step size to use in reading the data. If passed, then HEADER must also be passed. Default value is 1. Ignored if less than 1. Outputs : DATA = Data array to be read from the file. Opt. Outputs: HEADER = String array containing the header for the FITS file. Keywords : /COMPRESS - If this keyword is set and non-zero, then then treat the file as gzip compressed. By default FXREAD assumes the file is gzip compressed if it ends in ".gz" NANVALUE = Value signalling data dropout. All points corresponding to IEEE NaN (not-a-number) are set to this value. Ignored unless DATA is of type float or double-precision. EXTENSION = FITS extension. It can be a scalar integer, indicating the extension number (extension number 0 is the primary HDU). It can also be a scalar string, indicating the extension name (EXTNAME keyword). Default: 0 (primary HDU) PROMPT = If set, then the optional parameters are prompted for at the keyboard. AVERAGE = If set, then the array size is reduced by averaging pixels together rather than by subselecting pixels. Ignored unless STEP is nontrivial. Note: this is much slower. YSTEP = If passed, then STEP is the step size in the 1st dimension, and YSTEP is the step size in the 2nd dimension. Otherwise, STEP applies to both directions. NOSCALE = If set, then the output data will not be scaled using the optional BSCALE and BZERO keywords in the FITS header. Default is to scale, if and only if BSCALE and BZERO are present and nontrivial. NOUPDATE = If set, then the optional BSCALE and BZERO keywords in the optional HEADER array will not be changed. The default is to reset these keywords to BSCALE=1, BZERO=0. Ignored if NOSCALE is set. 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 = '' FXREAD, ERRMSG=ERRMSG, ... IF ERRMSG NE '' THEN ... NODATA = If set, then the array is not read in, but the primary header is read. Calls : GET_DATE, IEEE_TO_HOST, FXADDPAR, FXHREAD, FXPAR, WHERENAN Common : None. Restrictions: Groups are not supported. The optional parameters I1, I2, and STEP only work with one or two-dimensional arrays. J1 and J2 only work with two-dimensional arrays. Use of the AVERAGE keyword is not compatible with arrays with missing pixels. Side effects: If the keywords BSCALE and BZERO are present in the FITS header, and have non-trivial values, then the returned array DATA is formed by the equation DATA = BSCALE*original + BZERO However, this behavior can overridden by using the /NOSCALE keyword. If the data is scaled, then the optional HEADER array is changed so that BSCALE=1 and BZERO=0. This is so that these scaling parameters are not applied to the data a second time by another routine. Also, history records are added storing the original values of these constants. Note that only the returned array is modified--the header in the FITS file itself is untouched. If the /NOUPDATE keyword is set, however, then the BSCALE and BZERO keywords are not changed. It is then the user's responsibility to ensure that these parameters are not reapplied to the data. In particular, these keywords should not be present in any header when writing another FITS file, unless the user wants their values to be applied when the file is read back in. Otherwise, FITS readers will read in the wrong values for the data array. Category : Data Handling, I/O, FITS, Generic. Prev. Hist. : W. Thompson, May 1992, based in part on READFITS by W. Landsman, and STSUB by M. Greason and K. Venkatakrishna. W. Thompson, Jun 1992, added code to interpret BSCALE and BZERO records, and added NOSCALE and NOUPDATE keywords. W. Thompson, Aug 1992, changed to call FXHREAD, and to add history records for BZERO, BSCALE. Minimium IDL Version: V5.3 (uses COMPRESS keyword to OPEN) Written : William Thompson, GSFC, May 1992. Modified : Version 1, William Thompson, GSFC, 12 April 1993. Incorporated into CDS library. Version 2, William Thompson, GSFC, 17 November 1993. Corrected bug with AVERAGE keyword on non-IEEE compatible machines. Corrected bug with subsampling on VAX machines. 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 5, Zarro (SAC/GSFC), 14 Feb 1997 Added I/O error checking Version 6, 20-May-1998, David Schlegel/W. Thompson Allow a single pixel to be read in. Change the signal to read in the entire array to be -1 Version 7 C. Markwardt 22 Sep 2003 If the image is empty (NAXIS EQ 0), or NODATA is set, then return only the header. Version 8 W. Landsman 29 June 2004 Added COMPRESS keyword, check for .gz extension Version 9, William Thompson, 19-Aug-2004 Make sure COMPRESS is treated as a scalar Version 10, Craig Markwardt, 01 Mar 2004 Add EXTENSION keyword and ability to read different extensions than the primary one. Version 11, W. Landsamn September 2006 Assume since V5.5, remove VMS support Version 11.1, W. Landsamn November 2007 Allow for possibility number of bytes requires 64 bit integer Version 12, William Thompson, 18-Jun-2010, update BLANK value.
(See $IDLUTILS_DIR/goddard/pro/fits_bintable/fxread.pro)
FXWRITE
NAME: FXWRITE Purpose : Write a disk FITS file. Explanation : Creates or appends to a disk FITS file and writes a FITS header, and optionally an image data array. Use : FXWRITE, FILENAME, HEADER [, DATA ] Inputs : FILENAME = String containing the name of the file to be written. HEADER = String array containing the header for the FITS file. Opt. Inputs : DATA = IDL data array to be written to the file. If not passed, then it is assumed that extensions will be added to the file. Outputs : None. Opt. Outputs: None. Keywords : NANVALUE = Value signalling data dropout. All points corresponding to this value are set to be IEEE NaN (not-a-number). Ignored unless DATA is of type float, double-precision or complex. NOUPDATE = If set, then the optional BSCALE and BZERO keywords in the HEADER array will not be changed. The default is to reset these keywords to BSCALE=1, BZERO=0. APPEND = If set, then an existing file will be appended to. Appending to a non-existent file will create it. If a primary HDU already exists then it will be modified to have EXTEND = T. 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 = '' FXWRITE, ERRMSG=ERRMSG, ... IF ERRMSG NE '' THEN ... Calls : CHECK_FITS, GET_DATE, HOST_TO_IEEE, FXADDPAR, FXPAR Common : None. Restrictions: If DATA is passed, then HEADER must be consistent with it. If no data array is being written to the file, then HEADER must also be consistent with that. The routine FXHMAKE can be used to create a FITS header. If found, then the optional keywords BSCALE and BZERO in the HEADER array is changed so that BSCALE=1 and BZERO=0. This is so that these scaling parameters are not applied to the data a second time by another routine. Also, history records are added storing the original values of these constants. (Other values of BZERO are used for unsigned integers.) If the /NOUPDATE keyword is set, however, then the BSCALE and BZERO keywords are not changed. The user should then be aware that FITS readers will apply these numbers to the data, even if the data is already converted to floating point form. Groups are not supported. Side effects: HEADER may be modified. One way it may be modified is describe above under NOUPDATE. The first header card may also be modified to conform to the FITS standard if it does not already agree (i.e. use of either the SIMPLE or XTENSION keyword depending on whether the image is the primary HDU or not). Category : Data Handling, I/O, FITS, Generic. Prev. Hist. : W. Thompson, Jan 1992, from WRITEFITS by J. Woffard and W. Landsman. Differences include: * Made DATA array optional, and HEADER array mandatory. * Changed order of HEADER and DATA parameters. * No attempt made to fix HEADER array. W. Thompson, May 1992, changed open statement to force 2880 byte fixed length records (VMS). The software here does not depend on this file configuration, but other FITS readers might. W. Thompson, Aug 1992, added code to reset BSCALE and BZERO records, and added the NOUPDATE keyword. 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, 12 August 1999 Catch error if unable to open file. Version 4.1 Wayne Landsman, GSFC, 02 May 2000 Remove !ERR in call to CHECK_FITS, Use ARG_PRESENT() Version 5, William Thompson, GSFC, 22 September 2004 Recognize unsigned integer types Version 5.1 W. Landsman 14 November 204 Allow for need for 64bit number of bytes Version 6, Craig Markwardt, GSFC, 30 May 2005 Ability to append to existing files Version : Version 6, 30 May 2005
(See $IDLUTILS_DIR/goddard/pro/fits_bintable/fxwrite.pro)
F_FORMAT
NAME: F_FORMAT PURPOSE: Choose a nice floating format for displaying an array of REAL data. EXPLANATION: Called by TVLIST, IMLIST. CALLING SEQUENCE: fmt = F_FORMAT( minval, maxval, factor, [ length ] ) INPUTS: MINVAL - REAL scalar giving the minimum value of an array of numbers for which one desires a nice format. MAXVAL - REAL scalar giving maximum value in array of numbers OPTIONAL INPUT: LENGTH - length of the output F format (default = 5) must be an integer scalar > 2 OUTPUT: FMT - an F or I format string, e.g. 'F5.1' FACTOR - factor of 10 by which to multiply array of numbers to achieve a pretty display using format FMT. EXAMPLE: Find a nice format to print an array of numbers with a minimum of 5.2e-3 and a maximum of 4.2e-2. IDL> fmt = F_FORMAT( 5.2e-3, 4.2e-2, factor ) yields fmt = '(F5.2)' and factor = .01, i.e. the array can be displayed with a F5.2 format after multiplication by 100. REVISION HISTORY: Written W. Landsman December 1988 Deal with factors < 1. August 1991 Deal with factors < 1. *and* a large range October 1992 Now returns In format rather than Fn.0 February, 1994 Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/misc/f_format.pro)
GALAGE
NAME: GALAGE PURPOSE: Determine the age of a galaxy given its redshift and a formation redshift. CALLING SEQUENCE: age = galage(z, [zform, H0 =, k=, lambda0 =, Omega_m= , q0 =, /SILENT])' INPUTS: z - positive numeric vector or scalar of measured redshifts zform - redshift of galaxy formation (> z), numeric positive scalar To determine the age of the universe at a given redshift, set zform to a large number (e.g. ~1000). OPTIONAL KEYWORD INPUTS: H0 - Hubble constant in km/s/Mpc, positive scalar, default is 70 /SILENT - If set, then the adopted cosmological parameters are not displayed at the terminal. No more than two of the following four parameters should be specified. None of them need be specified -- the adopted defaults are given. k - curvature constant, normalized to the closure density. Default is 0, (indicating a flat universe) Omega_m - Matter density, normalized to the closure density, default is 0.3. Must be non-negative Lambda0 - Cosmological constant, normalized to the closure density, default is 0.7 q0 - Deceleration parameter, numeric scalar = -R*(R'')/(R')^2, default is -0.55 OUTPUTS: age - age of galaxy in years, will have the same number of elements as the input Z vector EXAMPLE: (1) Determine the age of a galaxy observed at z = 1.5 in a cosmology with Omega_matter = 0.3 and Lambda = 0.0. Assume the formation redshift was at z = 25, and use the default Hubble constant (=70 km/s/Mpc) IDL> print,galage(1.5,25,Omega_m=0.3, Lambda = 0) ===> 3.35 Gyr (2) Plot the age of a galaxy in Gyr out to a redshift of z = 5, assuming the default cosmology (omega_m=0.3, lambda=0.7), and zform = 100 IDL> z = findgen(50)/10. IDL> plot,z,galage(z,100)/1e9,xtit='z',ytit = 'Age (Gyr)' PROCEDURE: For a given formation time zform and a measured z, integrate dt/dz from zform to z. Analytic formula of dt/dz in Gardner, PASP 110:291-305, 1998 March (eq. 7) COMMENTS: (1) Integrates using the IDL Astronomy Library procedure QSIMP. (The intrinsic IDL QSIMP() function is not called because of its ridiculous restriction that only scalar arguments can be passed to the integrating function.) The function 'dtdz' is defined at the beginning of the routine (so it can compile first). (2) Should probably be fixed to use a different integrator from QSIMP when computing age from an "infinite" redshift of formation. But using a large value of zform seems to work adequately. (3) An alternative set of IDL procedures for computing cosmological parameters is available at http://cerebus.as.arizona.edu/~ioannis/research/red/ PROCEDURES CALLED: COSMO_PARAM, QSIMP HISTORY: STIS version by P. Plait (ACC) June 1999 IDL Astro Version W. Landsman (Raytheon ITSS) April 2000 Avoid integer overflow for more than 32767 redshifts July 2001
(See $IDLUTILS_DIR/goddard/pro/astro/galage.pro)
GAL_FLAT
NAME: GAL_FLAT PURPOSE: Transforms the image of a galaxy so that the galaxy appears face-on EXPLANATION: Either a nearest-neighbor approximations or a bilinear interpolation may be used. CALLING SEQUENCE: RESULT = GAL_FLAT( image, ang, inc, [, cen, /INTERP ] ) INPUTS: IMAGE - Image to be transformed ANG - Angle of major axis, counterclockwise from Y-axis, degrees For an image in standard orientation (North up, East left) this is the Position Angle INC - Angle of inclination of galaxy, degrees OPTIONAL INPUTS: CEN - Two element vector giving the X and Y position of galaxy center If not supplied, then the galaxy center is assumed to coincide with the image center INPUT KEYWORDS: INTERP - If present, and non-zero, then bilinear interpolation will be performed. Otherwise a nearest neighbor approximation is used. OUTPUTS: RESULT - the transformed image, same dimensions and type as IMAGE METHOD: A set of 4 equal spaced control points are corrected for inclination using the procedure POLYWARP. These control points are used by POLY_2D to correct the whole image. REVISION HISTORY: Written by R. S. Hill, SASC Technologies Inc., 4 December 1985 Code cleaned up a bit W. Landsman December 1992 Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/astro/gal_flat.pro)
GAL_UVW
NAME: GAL_UVW PURPOSE: Calculate the Galactic space velocity (U,V,W) of star EXPLANATION: Calculates the Galactic space velocity U, V, W of star given its (1) coordinates, (2) proper motion, (3) distance (or parallax), and (4) radial velocity. CALLING SEQUENCE: GAL_UVW, U, V, W, [/LSR, RA=, DEC=, PMRA= ,PMDEC=, VRAD= , DISTANCE= PLX= ] OUTPUT PARAMETERS: U - Velocity (km/s) positive toward the Galactic *anti*center V - Velocity (km/s) positive in the direction of Galactic rotation W - Velocity (km/s) positive toward the North Galactic Pole REQUIRED INPUT KEYWORDS: User must supply a position, proper motion,radial velocity and distance (or parallax). Either scalars or vectors can be supplied. (1) Position: RA - Right Ascension in *Degrees* Dec - Declination in *Degrees* (2) Proper Motion PMRA = Proper motion in RA in arc units (typically milli-arcseconds/yr) If given mu_alpha --proper motion in seconds of time/year - then this is equal to 15*mu_alpha*cos(dec) PMDEC = Proper motion in Declination (typically mas/yr) (3) Radial Velocity VRAD = radial velocity in km/s (4) Distance or Parallax DISTANCE - distance in parsecs or PLX - parallax with same distance units as proper motion measurements typically milliarcseconds (mas) OPTIONAL INPUT KEYWORD: /LSR - If this keyword is set, then the output velocities will be corrected for the solar motion (U,V,W)_Sun = (-8.5, 13.38, 6.49) (Coskunoglu et al. 2011 MNRAS) to the local standard of rest. Note that the value of the solar motion through the LSR remains poorly determined. EXAMPLE: (1) Compute the U,V,W coordinates for the halo star HD 6755. Use values from Hipparcos catalog, and correct to the LSR ra = ten(1,9,42.3)*15. & dec = ten(61,32,49.5) pmra = 628.42 & pmdec = 76.65 ;mas/yr dis = 139 & vrad = -321.4 gal_uvw,u,v,w,ra=ra,dec=dec,pmra=pmra,pmdec=pmdec,vrad=vrad,dis=dis,/lsr ===> u=141.2 v = -491.7 w = 93.9 ;km/s (2) Use the Hipparcos Input and Output Catalog IDL databases (see http://idlastro.gsfc.nasa.gov/ftp/zdbase/) to obtain space velocities for all stars within 10 pc with radial velocities > 10 km/s dbopen,'hipp_new,hic' ;Need Hipparcos output and input catalogs list = dbfind('plx>100,vrad>10') ;Plx > 100 mas, Vrad > 10 km/s dbext,list,'pmra,pmdec,vrad,ra,dec,plx',pmra,pmdec,vrad,ra,dec,plx ra = ra*15. ;Need right ascension in degrees GAL_UVW,u,v,w,ra=ra,dec=dec,pmra=pmra,pmdec=pmdec,vrad=vrad,plx = plx forprint,u,v,w ;Display results METHOD: Follows the general outline of Johnson & Soderblom (1987, AJ, 93,864) except that U is positive outward toward the Galactic *anti*center, and the J2000 transformation matrix to Galactic coordinates is taken from the introduction to the Hipparcos catalog. REVISION HISTORY: Written, W. Landsman December 2000 fix the bug occuring if the input arrays are longer than 32767 and update the Sun velocity Sergey Koposov June 2008 vectorization of the loop -- performance on large arrays is now 10 times higher Sergey Koposov December 2008 More recent value of solar motion WL/SK Jan 2011
(See $IDLUTILS_DIR/goddard/pro/astro/gal_uvw.pro)
GAUSSIAN
NAME: GAUSSIAN PURPOSE: Compute the 1-d Gaussian function and optionally the derivative EXPLANATION: Compute the 1-D Gaussian function and optionally the derivative at an array of points. CALLING SEQUENCE: y = gaussian( xi, parms,[ pderiv ]) INPUTS: xi = array, independent variable of Gaussian function. parms = parameters of Gaussian, 2, 3 or 4 element array: parms[0] = maximum value (factor) of Gaussian, parms[1] = mean value (center) of Gaussian, parms[2] = standard deviation (sigma) of Gaussian. (if parms has only 2 elements then sigma taken from previous call to gaussian(), which is stored in a common block). parms[3] = optional, constant offset added to Gaussian. OUTPUT: y - Function returns array of Gaussian evaluated at xi. Values will be floating pt. (even if xi is double) unless the /DOUBLE keyword is set. OPTIONAL INPUT: /DOUBLE - set this keyword to return double precision for both the function values and (optionally) the partial derivatives. OPTIONAL OUTPUT: pderiv = [N,3] or [N,4] output array of partial derivatives, computed only if parameter is present in call. pderiv[*,i] = partial derivative at all xi absisca values with respect to parms[i], i=0,1,2,[3]. EXAMPLE: Evaulate a Gaussian centered at x=0, with sigma=1, and a peak value of 10 at the points 0.5 and 1.5. Also compute the derivative IDL> f = gaussian( [0.5,1.5], [10,0,1], DERIV ) ==> f= [8.825,3.25]. DERIV will be a 2 x 3 array containing the numerical derivative at the two points with respect to the 3 parameters. COMMON BLOCKS: None HISTORY: Written, Frank Varosi NASA/GSFC 1992. Converted to IDL V5.0 W. Landsman September 1997 Use machar() for machine precision, added /DOUBLE keyword, add optional constant 4th parameter W. Landsman November 2001
(See $IDLUTILS_DIR/goddard/pro/math/gaussian.pro)
GCIRC
NAME: GCIRC PURPOSE: Computes rigorous great circle arc distances. EXPLANATION: Input position can either be either radians, sexigesimal RA, Dec or degrees. All computations are double precision. CALLING SEQUENCE: GCIRC, U, RA1, DC1, RA2, DC2, DIS INPUTS: U -- integer = 0,1, or 2: Describes units of inputs and output: 0: everything radians 1: RAx in decimal hours, DCx in decimal degrees, DIS in arc seconds 2: RAx and DCx in degrees, DIS in arc seconds RA1 -- Right ascension or longitude of point 1 DC1 -- Declination or latitude of point 1 RA2 -- Right ascension or longitude of point 2 DC2 -- Declination or latitude of point 2 OUTPUTS: DIS -- Angular distance on the sky between points 1 and 2 See U above for units; double precision PROCEDURE: "Haversine formula" see http://en.wikipedia.org/wiki/Great-circle_distance NOTES: (1) If RA1,DC1 are scalars, and RA2,DC2 are vectors, then DIS is a vector giving the distance of each element of RA2,DC2 to RA1,DC1. Similarly, if RA1,DC1 are vectors, and RA2, DC2 are scalars, then DIS is a vector giving the distance of each element of RA1, DC1 to RA2, DC2. If both RA1,DC1 and RA2,DC2 are vectors then DIS is a vector giving the distance of each element of RA1,DC1 to the corresponding element of RA2,DC2. If the input vectors are not the same length, then excess elements of the longer ones will be ignored. (2) The function SPHDIST provides an alternate method of computing a spherical distance. (3) The haversine formula can give rounding errors for antipodal points. PROCEDURE CALLS: None MODIFICATION HISTORY: Written in Fortran by R. Hill -- SASC Technologies -- January 3, 1986 Translated from FORTRAN to IDL, RSH, STX, 2/6/87 Vector arguments allowed W. Landsman April 1989 Prints result if last argument not given. RSH, RSTX, 3 Apr. 1998 Remove ISARRAY(), V5.1 version W. Landsman August 2000 Added option U=2 W. Landsman October 2006 Use double precision for U=0 as advertised R. McMahon/W.L. April 2007 Use havesine formula, which has less roundoff error in the milliarcsecond regime W.L. Mar 2009
(See $IDLUTILS_DIR/goddard/pro/astro/gcirc.pro)
GCNTRD
NAME: GCNTRD PURPOSE: Compute the stellar centroid by Gaussian fits to marginal X,Y, sums EXPLANATION: GCNTRD uses the DAOPHOT "FIND" centroid algorithm by fitting Gaussians to the marginal X,Y distributions. User can specify bad pixels (either by using the MAXGOOD keyword or setting them to NaN) to be ignored in the fit. Pixel values are weighted toward the center to avoid contamination by neighboring stars. CALLING SEQUENCE: GCNTRD, img, x, y, xcen, ycen, [ fwhm , /SILENT, /DEBUG, MAXGOOD = , /KEEPCENTER ] INPUTS: IMG - Two dimensional image array X,Y - Scalar or vector integers giving approximate stellar center OPTIONAL INPUT: FWHM - floating scalar; Centroid is computed using a box of half width equal to 1.5 sigma = 0.637* FWHM. GCNTRD 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 Values for XCEN and YCEN will not be computed if the computed centroid falls outside of the box, or if there are too many bad pixels, or if the best-fit Gaussian has a negative height. If the centroid cannot be computed, then a message is displayed (unless /SILENT is set) and XCEN and YCEN are set to -1. OPTIONAL OUTPUT KEYWORDS: MAXGOOD= Only pixels with values less than MAXGOOD are used to in Gaussian fits to determine the centroid. For non-integer data, one can also flag bad pixels using NaN values. /SILENT - Normally GCNTRD prints an error message if it is unable to compute the centroid. Set /SILENT to suppress this. /DEBUG - If this keyword is set, then GCNTRD will display the subarray it is using to compute the centroid. /KeepCenter By default, GCNTRD first convolves a small region around the supplied position with a lowered Gaussian filter, and then 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 the convolution and finding the maximum pixel, and instead use a box centered on the input X,Y coordinates. PROCEDURE: Unless /KEEPCENTER is set, a small area around the initial X,Y is convolved with a Gaussian kernel, and the maximum pixel is found. This pixel is used as the center of a square, within which the centroid is computed as the Gaussian least-squares fit to the marginal sums in the X and Y directions. EXAMPLE: Find the centroid of a star in an image im, with approximate center 631, 48. Assume that bad (saturated) pixels have a value of 4096 or or higher, and that the approximate FWHM is 3 pixels. IDL> GCNTRD, IM, 631, 48, XCEN, YCEN, 3, MAXGOOD = 4096 MODIFICATION HISTORY: Written June 2004, W. Landsman following algorithm used by P. Stetson in DAOPHOT2. Modified centroid computation (as in IRAF/DAOFIND) to allow shifts of more than 1 pixel from initial guess. March 2008 First perform Gaussian convolution prior to finding maximum pixel to smooth out noise W. Landsman Jan 2009
(See $IDLUTILS_DIR/goddard/pro/idlphot/gcntrd.pro)
GEO2ECI
NAME: GEO2ECI PURPOSE: Convert geographic spherical coordinates to Earth-centered inertial coords EXPLANATION: Converts from geographic spherical coordinates [latitude, longitude, altitude] to ECI (Earth-Centered Inertial) [X,Y,Z] rectangular coordinates. JD time is also needed. Geographic coordinates are in degrees/degrees/km Geographic coordinates assume the Earth is a perfect sphere, with radius equal to its equatorial radius. ECI coordinates are in km from Earth center. CALLING SEQUENCE: ECIcoord=geo2eci(gcoord,JDtime) INPUT: gcoord: geographic [latitude,longitude,altitude], or a an array [3,n] of n such coordinates JDtime: Julian Day time, double precision. Can be a 1-D array of n such times. KEYWORD INPUTS: None OUTPUT: a 3-element array of ECI [X,Y,Z] coordinates, 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 EXAMPLES: IDL> ECIcoord=geo2eci([0,0,0], 2452343.38982663D) IDL> print,ECIcoord -3902.9606 5044.5548 0.0000000 (The above is the ECI coordinates of the intersection of the equator and Greenwich's meridian on 2002/03/09 21:21:21.021) MODIFICATION HISTORY: Written by Pascal Saint-Hilaire (shilaire@astro.phys.ethz.ch) on 2002/05/14
(See $IDLUTILS_DIR/goddard/pro/astro/geo2eci.pro)
GEO2GEODETIC
NAME: GEO2GEODETIC PURPOSE: Convert from geographic/planetographic to geodetic coordinates EXPLANATION: Converts from geographic (latitude, longitude, altitude) to geodetic (latitude, longitude, altitude). In geographic coordinates, the Earth is assumed a perfect sphere with a radius equal to its equatorial radius. The geodetic (or ellipsoidal) coordinate system takes into account the Earth's oblateness. Geographic and geodetic longitudes are identical. Geodetic latitude is the angle between local zenith and the equatorial plane. Geographic and geodetic altitudes are both the closest distance between the satellite and the ground. The PLANET keyword allows a similar transformation for the other planets (planetographic to planetodetic coordinates). The EQUATORIAL_RADIUS and POLAR_RADIUS keywords allow the transformation for any ellipsoid. Latitudes and longitudes are expressed in degrees, altitudes in km. REF: Stephen P. Keeler and Yves Nievergelt, "Computing geodetic coordinates", SIAM Rev. Vol. 40, No. 2, pp. 300-309, June 1998 Planetary constants from "Allen's Astrophysical Quantities", Fourth Ed., (2000) CALLING SEQUENCE: ecoord=geo2geodetic(gcoord,[ PLANET=,EQUATORIAL_RADIUS=, POLAR_RADIUS=]) INPUT: gcoord = a 3-element array of geographic [latitude,longitude,altitude], or an array [3,n] of n such coordinates. OPTIONAL KEYWORD INPUT: PLANET = keyword specifying planet (default is Earth). The planet may be specified either as an integer (1-9) or as one of the (case-independent) strings 'mercury','venus','earth','mars', 'jupiter','saturn','uranus','neptune', or 'pluto' EQUATORIAL_RADIUS : Self-explanatory. In km. If not set, PLANET's value is used. POLAR_RADIUS : Self-explanatory. In km. If not set, PLANET's value is used. OUTPUT: a 3-element array of geodetic/planetodetic [latitude,longitude,altitude], or an array [3,n] of n such coordinates, double precision. COMMON BLOCKS: None RESTRICTIONS: Whereas the conversion from geodetic to geographic coordinates is given by an exact, analytical formula, the conversion from geographic to geodetic isn't. Approximative iterations (as used here) exist, but tend to become less good with increasing eccentricity and altitude. The formula used in this routine should give correct results within six digits for all spatial locations, for an ellipsoid (planet) with an eccentricity similar to or less than Earth's. More accurate results can be obtained via calculus, needing a non-determined amount of iterations. In any case, IDL> PRINT,geodetic2geo(geo2geodetic(gcoord)) - gcoord is a pretty good way to evaluate the accuracy of geo2geodetic.pro. EXAMPLES: Locate the geographic North pole, altitude 0., in geodetic coordinates IDL> geo=[90.d0,0.d0,0.d0] IDL> geod=geo2geodetic(geo); convert to equivalent geodetic coordinates IDL> PRINT,geod 90.000000 0.0000000 21.385000 As above, but for the case of Mars IDL> geod=geo2geodetic(geo,PLANET='Mars') IDL> PRINT,geod 90.000000 0.0000000 18.235500 MODIFICATION HISTORY: Written by Pascal Saint-Hilaire (shilaire@astro.phys.ethz.ch), May 2002 Generalized for all solar system planets by Robert L. Marcialis (umpire@lpl.arizona.edu), May 2002 Modified 2002/05/18, PSH: added keywords EQUATORIAL_RADIUS and POLAR_RADIUS
(See $IDLUTILS_DIR/goddard/pro/astro/geo2geodetic.pro)
GEO2MAG()
NAME: GEO2MAG() PURPOSE: Convert from geographic to geomagnetic coordinates EXPLANATION: Converts from GEOGRAPHIC (latitude,longitude) to GEOMAGNETIC (latitude, longitude). (Altitude remains the same) Latitudes and longitudes are expressed in degrees. CALLING SEQUENCE: mcoord=geo2mag(gcoord) INPUT: gcoord = a 2-element array of geographic [latitude,longitude], or an array [2,n] of n such coordinates. KEYWORD INPUTS: None OUTPUT: a 2-element array of magnetic [latitude,longitude], or an array [2,n] of n such coordinates COMMON BLOCKS: None EXAMPLES: geographic coordinates of magnetic south pole IDL> mcoord=geo2mag([79.3,288.59]) IDL> print,mcoord 89.999992 -173.02325 MODIFICATION HISTORY: Written by Pascal Saint-Hilaire (Saint-Hilaire@astro.phys.ethz.ch), May 2002
(See $IDLUTILS_DIR/goddard/pro/astro/geo2mag.pro)
GEODETIC2GEO
NAME: GEODETIC2GEO PURPOSE: Convert from geodetic (or planetodetic) to geographic coordinates EXPLANATION: Converts from geodetic (latitude, longitude, altitude) to geographic (latitude, longitude, altitude). In geographic coordinates, the Earth is assumed a perfect sphere with a radius equal to its equatorial radius. The geodetic (or ellipsoidal) coordinate system takes into account the Earth's oblateness. Geographic and geodetic longitudes are identical. Geodetic latitude is the angle between local zenith and the equatorial plane. Geographic and geodetic altitudes are both the closest distance between the satellite and the ground. The PLANET keyword allows a similar transformation for the other planets (planetodetic to planetographic coordinates). The EQUATORIAL_RADIUS and POLAR_RADIUS keywords allow the transformation for any ellipsoid. Latitudes and longitudes are expressed in degrees, altitudes in km. REF: Stephen P. Keeler and Yves Nievergelt, "Computing geodetic coordinates", SIAM Rev. Vol. 40, No. 2, pp. 300-309, June 1998 Planetary constants from "Allen's Astrophysical Quantities", Fourth Ed., (2000) CALLING SEQUENCE: gcoord = geodetic2geo(ecoord, [ PLANET= ] ) INPUT: ecoord = a 3-element array of geodetic [latitude,longitude,altitude], or an array [3,n] of n such coordinates. OPTIONAL KEYWORD INPUT: PLANET = keyword specifying planet (default is Earth). The planet may be specified either as an integer (1-9) or as one of the (case-independent) strings 'mercury','venus','earth','mars', 'jupiter','saturn','uranus','neptune', or 'pluto' EQUATORIAL_RADIUS : Self-explanatory. In km. If not set, PLANET's value is used. Numeric scalar POLAR_RADIUS : Self-explanatory. In km. If not set, PLANET's value is used. Numeric scalar OUTPUT: a 3-element array of geographic [latitude,longitude,altitude], or an array [3,n] of n such coordinates, double precision The geographic and geodetic longitudes will be identical. COMMON BLOCKS: None EXAMPLES: IDL> geod=[90,0,0] ; North pole, altitude 0., in geodetic coordinates IDL> geo=geodetic2geo(geod) IDL> PRINT,geo 90.000000 0.0000000 -21.385000 As above, but the equivalent planetographic coordinates for Mars IDL> geod=geodetic2geo(geod,PLANET='Mars'); IDL> PRINT,geod 90.000000 0.0000000 -18.235500 MODIFICATION HISTORY: Written by Pascal Saint-Hilaire (shilaire@astro.phys.ethz.ch), May 2002 Generalized for all solar system planets by Robert L. Marcialis (umpire@lpl.arizona.edu), May 2002 Modified 2002/05/18, PSH: added keywords EQUATORIAL_RADIUS and POLAR_RADIUS
(See $IDLUTILS_DIR/goddard/pro/astro/geodetic2geo.pro)
GETDECOMPOSEDSTATE
Provides a device-independent way to get the color decomposition state of the current graphics device. :Categories: Graphics, Utilities :Returns: Returns a 1 if color decomposition is turned on and a 0 if indexed color is used. :Keywords: Depth: out, optional, type=integer The depth of the color display. Typically 8 for indexed color devices and 24 for true-color devices. :Examples: IDL> currentState = GetDecomposedState() :Author: FANNING SOFTWARE CONSULTING:: David W. Fanning 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com :History: Change History:: Written, 12 December 2010 as a better named wrapper for DECOMPOSEDCOLOR program. DWF. :Copyright: Copyright (c) 2010, Fanning Software Consulting, Inc.
(See $IDLUTILS_DIR/goddard/pro/coyote/getdecomposedstate.pro)
GETOPT
NAME: GETOPT PURPOSE: Convert a string supplied by the user into a valid scalar or vector EXPLANATION: Distinct elements in the string may be separated by either a comma or a space. The output scalar or vector can be specified to be either integer or floating point. A null string is converted to a zero. CALLING SEQUENCE: option = GETOPT( input, [ type, numopt, COUNT = ]) INPUTS: input - string that was input by user in response to a prompt Arithmetic operations can be included in the string (see examples) OPTIONAL INPUTS: type - Either an "I" (integer) or an "F" (floating point) specifying the datatype of the output vector. Default is floating point numopt - number of values expected by calling procedure If less than NUMOPT values are supplied the output vector will be padded with zeros. OUTPUTS: option - scalar or vector containing the numeric conversion of the fields in the string INPUT. If NUMOPT is not supplied, the number of elements in OPTION will equal the number of distinct fields in INPUT. OPTIONAL INPUT KEYWORD: Count - integer giving the number of values actually returned by GETOPT. If the input is invalid then COUNT is set to -1 NOTES: (1) If an input is invalid, Count is set to -1 and the result is set to 999. (2) GETOPT uses the execute function to interpret the user string. Therefore GETOPT itself cannot be called with the EXECUTE function. (3) GETOPT has a hard limit of 10 tokens in the input string. EXAMPLES: (1) a = getopt( '3.4,5*4 ', 'I' ) yields a = [ 3, 20] (2) a = getopt( '5/2.', 'F', 5) yields a = [2.5,0.,0.,0.,0.] (3) a = getopt( '2*3,5,6') yields a = [6.,5.,6.] REVISON HISTORY: written by B. Pfarr, STX, 5/6/87 change value of !ERR W. Landsman STX, 6/30/88 Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/misc/getopt.pro)
GETPRIMARYSCREENSIZE
:Description: Provides a way to get the screen size of the primary monitor, especially when there are several being used. :Categories: Graphics :Params: none :Keywords: exclude_taskbar: in, optional, boolean, default=0 Set this keyword to exclude the taskbar from the monitor size. This keyword is ignored on all but Windows machines. :Author: Dick Jackson, www.dick-jackson.com :History: Change History:: Written, 8 March 2011. DJ Modified to only use IDLsysMonitorInfo for IDL 6.3 and higher. 23 Feb 2012. DWF. :Copyright: Copyright (c) 2011, Fanning Software Consulting, Inc.
(See $IDLUTILS_DIR/goddard/pro/coyote/getprimaryscreensize.pro)
GETPRO
NAME: GETPRO PURPOSE: Search !PATH for a procedure, and copy into user's working directory EXPLANATION: Extract a procedure from an IDL Library or directory given in the !PATH system variable and place it in the current default directory (presumably to be edited by the user). CALLING SEQUENCE: GETPRO, [ proc_name ] ;Find PROC_NAME in !PATH and copy OPTIONAL INPUT: proc_name - Character string giving the name of the IDL procedure or function. Do not give an extension. If omitted, the program will prompt for PROC_NAME. OUTPUTS: None. SIDE EFFECTS: A file with the extension .pro and a name given by PROC_NAME will be created on the user's directory. PROCEDURE: The FILE_WHICH() function is used to locate the procedure in the IDL !PATH. When found, FILE_COPY is used to copy the procedure into the user's current default directory. If not found in !PATH, then the ROUTINE_INFO() function is used to determine if it is an intrinsic IDL procedure. EXAMPLE: Put a copy of the USER library procedure CURVEFIT on the current directory IDL> getpro, 'CURVEFIT' RESTRICTIONS: User will be unable to obain source code for a native IDL function or procedure, or for a FORTRAN or C routine added with CALL_EXTERNAL. User must have write privilege to the current directory PROCEDURE CALLS: ZPARCHECK REVISION HISTORY: Written W. Landsman, STX Corp. June 1990 Now use intrinsic EXPAND_PATH() command W. Landsman November 1994 Use ROUTINE_NAMES() to check for intrinsic procs W. Landsman July 95 Update for Windows/IDL W. Landsman September 95 Check if procedure is in current directory W. Landsman June 1997 Use ROUTINE_INFO instead of undocumented ROUTINE_NAMES W.L. October 1998 Use FILE_WHICH() to locate procedure W. Landsman May 2006 Assume since V5.5, remove VMS support W. Landsman Sep 2006 Assume since V6.0, use file_basename() W.Landsman Feb 2009 Test for .sav file, more robust test for write privilege W.L. Jul 2010
(See $IDLUTILS_DIR/goddard/pro/misc/getpro.pro)
GETPSF
NAME: GETPSF PURPOSE: To generate a point-spread function (PSF) from observed stars. EXPLANATION: The PSF is represented as a 2-dimensional Gaussian (integrated over each pixel) and a lookup table of residuals. The lookup table and Gaussian parameters are output in a FITS image file. The PSF FITS file created by GETPSF can be read with the procedure RDPSF. Adapted from the 1986 STSDAS version of DAOPHOT CALLING SEQUENCE: GETPSF, image, xc, yc, apmag, sky, [ronois, phpadu, gauss, psf, idpsf, psfrad, fitrad, psfname, /DEBUG ] INPUTS: IMAGE - input image array XC - input vector of x coordinates (from FIND), these should be IDL (first pixel is (0,0)) convention. YC - input vector of y coordinates (from FIND) APMAG - vector of magnitudes (from APER), used for initial estimate of gaussian intensity. If APMAG is multidimensional, (more than 1 aperture was used in APER) then the first aperture is used. SKY - vector of sky values (from APER) OPTIONAL INPUTS: The user will be prompted for the following parameters if not supplied. RONOIS - readout noise per pixel, (in electrons, or equivalent photons) PHPADU - photons per analog digital unit, used to scale the data numbers in IMAGE into photon units IDPSF - subscripts of the list of stars created by APER which will be used to define the PSF. Stars whose centroid does not fall within PSFRAD of the edge of the frame, or for which a Gaussian fit requires more than 25 iterations, will be ignored when creating the final PSF. PSFRAD - the scalar radius, in pixels, of the circular area within which the PSF will be defined. This should be slightly larger than the radius of the brightest star that one will be interested in. FITRAD - the scalar radius, in pixels of the circular area used in the least-square star fits. Stetson suggest that FITRAD should approximately equal to the FWHM, slightly less for crowded fields. (FITRAD must be smaller than PSFRAD.) PSFNAME- Name of the FITS file that will contain the table of residuals, and the best-fit Gaussian parameters. This file is subsequently required for use by NSTAR. OPTIONAL OUTPUTS: GAUSS - 5 element vector giving parameters of gaussian fit to the first PSF star GAUSS(0) - height of the gaussian (above sky) GAUSS(1) - the offset (in pixels) of the best fitting gaussian and the original X centroid GAUSS(2) - similiar offset from the Y centroid GAUSS(3) - Gaussian sigma in X GAUSS(4) - Gaussian sigma in Y PSF - 2-d array of PSF residuals after a Gaussian fit. PROCEDURE: GETPSF fits a Gaussian profile to the core of the first PSF star and generates a look-up table of the residuals of the actual image data from the Gaussian fit. If desired, it will then fit this PSF to another star (using PKFIT) to determine its precise centroid, scale the same Gaussian to the new star's core, and add the differences between the actual data and the scaled Gaussian to the table of residuals. (In other words, the Gaussian fit is performed only on the first star.) OPTIONAL KEYWORD INPUT: DEBUG - if this keyword is set and non-zero, then the result of each fitting iteration will be displayed. PROCEDURES CALLED DAOERF, MAKE_2D, MKHDR, RINTER(), PKFIT, STRNUMBER(), STRN(), WRITEFITS REVISON HISTORY: Adapted from the 1986 version of DAOPHOT in STSDAS IDL Version 2 W Landsman November 1988 Use DEBUG keyword instead of !DEBUG W. Landsman May 1996 Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/idlphot/getpsf.pro)
GETROT
NAME: GETROT PURPOSE: Return the rotation and plate scale of an image from its FITS header EXPLANATION: Derive the counterclockwise rotation angle, and the X and Y scale factors of an image, from a FITS image header. The input parameter may be either a FITS image header or an astrometry structure (as obtained by extast.pro) CALLING SEQUENCE: GETROT, Hdr, [ Rot, CDelt, /SILENT, DEBUG = ] or GETROT, Astr, Rot, CDelt, /SILENT, DEBUG = ] INPUT PARAMETERS: HDR - FITS Image header (string array). Program will extract the astrometry structure or ASTR - ASTROMETRY structure, of the type returned by EXTAST. See the documentation for EXTAST.PRO for details. OPTIONAL OUTPUT PARAMETERS: ROT - Scalar giving the counterclockwise rotation of NORTH in DEGREES from the +Y axis of the image. CDELT- 2 element vector giving the scale factors in DEGREES/PIXEL in the X and Y directions. CDELT[1] is always positive, whereas CDELT[0] is negative for a normal left-handed coordinate system, and positive for a right-handed system. If no output variables are supplied (or /DEBUG is set), then GETROT will display the rotation and plate scale at the terminal. OPTIONAL INPUT KEYWORD ALT - single character 'A' through 'Z' or ' ' specifying an alternate astrometry system present in the FITS header. See extast.pro for more information on the ALT keyword. Ignored if an astrometry structure rather than FITS header is supplied. DEBUG - if DEBUG is set, GETROT will print the rotation for both the X and Y axis when these values are unequal. If DEBUG is set to 2, then the output parameter ROT will contain both X and Y rotations. /SILENT - if set, then do not provide a warning about a right-handed coordinate system PROCEDURE: If the FITS header already contains CDELT (and CD or CROTA) keyword, (as suggested by the Calabretta & Greisen (2002, A&A, 395, 1077) FITS standard) then this is used for the scale factor. If the header contains CD keywords but no CDELT keywords (as in IRAF headers) then the scale factor is derived from the CD matrix. In case of skew (different rotations of the X and Y axes), the rotations are averaged together if they are less than 2 degrees. Otherwise, a warning is given and the X rotation is used. PROCEDURES USED: EXTAST, GSSS_EXTAST REVISION HISTORY: Written W. Landsman STX January 1987 Option to return both rotations added. J. D. Offenberg, STX, Aug 1991 Use new astrometry structure W. Landsman Mar 1994 Recognize a GSSS header W. Landsman June 1994 Correct rotation determination with unequal CDELT values WL October 1998 Consistent conversion between CROTA and CD matrix WL October 2000 Correct CDELT computations for rotations near 90 deg WL November 2002 Preserve sign in the CDELT output WL June 2003 Check if latitude/longitude reversed in CTYPE WL February 2004 Fix problem in latitude check M.Lombardi/W.Landsman Sep 2004 Added ALT keyword W. Landsman May 2005 Account for any rotation of the native system by examining the value of LONGPOLE H. Taylor/W. Landsman Account for case where X,Y rotations differ by 2*!pi WL. Aug 2011
(See $IDLUTILS_DIR/goddard/pro/astrom/getrot.pro)
GETTOK
NAME: GETTOK PURPOSE: Retrieve the first part of a (vector) string up to a specified character EXPLANATION: GET TOKen - Retrieve first part of string until the character char is encountered. CALLING SEQUENCE: token = gettok( st, char, [ /EXACT, /NOTRIM ] ) INPUT: char - character separating tokens, scalar string INPUT-OUTPUT: st - string to get token from (on output token is removed unless /NOTRIM is set), scalar or vector OUTPUT: token - extracted string value is returned, same dimensions as st OPTIONAL INPUT KEYWORD: /EXACT - The default behaviour of GETTOK is to remove any leading blanks and (if the token is a blank) convert tabs to blanks. Set the /EXACT keyword to skip these steps and leave the input string unchanged before searching for the character tokens. /NOTRIM - if set, then the input string is left unaltered EXAMPLE: If ST is ['abc=999','x=3.4234'] then gettok(ST,'=') would return ['abc','x'] and ST would be left as ['999','3.4234'] PROCEDURE CALLS: REPCHR() HISTORY version 1 by D. Lindler APR,86 Remove leading blanks W. Landsman (from JKF) Aug. 1991 V5.3 version, accept vector input W. Landsman February 2000 Slightly faster implementation W. Landsman February 2001 Added EXACT keyword W. Landsman March 2004 Assume since V5.4, Use COMPLEMENT keyword to WHERE W. Landsman Apr 2006 Added NOTRIM keyword W. L. March 2011
(See $IDLUTILS_DIR/goddard/pro/misc/gettok.pro)
GETWRD
NAME: GETWRD PURPOSE: Return the n'th word from a text string. CATEGORY: CALLING SEQUENCE: wrd = getwrd(txt, n, [m]) INPUTS: txt = text string to extract from. in The first element is used if txt is an array. n = word number to get (first = 0 = def). in m = optional last word number to get. in KEYWORD PARAMETERS: Keywords: LOCATION = l. Return word n string location. DELIMITER = d. Set word delimiter (def = space & tab). /LAST means n is offset from last word. So n=0 gives last word, n=-1 gives next to last, ... If n=-2 and m=0 then last 3 words are returned. /NOTRIM suppresses whitespace trimming on ends. NWORDS=n. Returns number of words in string. OUTPUTS: wrd = returned word or words. out COMMON BLOCKS: getwrd_com NOTES: Note: If a NULL string is given (txt="") then the last string given is used. This saves finding the words again. If m > n wrd will be a string of words from word n to word m. If no m is given wrd will be a single word. n<0 returns text starting at word abs(n) to string end If n is out of range then a null string is returned. See also nwrds. MODIFICATION HISTORY: Ray Sterner, 6 Jan, 1985. R. Sterner, Fall 1989 --- converted to SUN. R. Sterner, Jan 1990 --- added delimiter. R. Sterner, 18 Mar, 1990 --- added /LAST. R. Sterner, 31 Jan, 1991 --- added /NOTRIM. R. Sterner, 20 May, 1991 --- Added common and NULL string. R. Sterner, 13 Dec, 1992 --- Made tabs equivalent to spaces. R. Sterner, 4 Jan, 1993 --- Added NWORDS keyword. R. Sterner, 2001 Jan 15 --- Fixed to use first element if not a scalar. Johns Hopkins University Applied Physics Laboratory. Copyright (C) 1985, 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 $IDLUTILS_DIR/goddard/pro/jhuapl/getwrd.pro)
GET_COORDS
NAME: GET_COORDS PURPOSE: Converts a string with angular coordinates to floating point values. EXPLANATION: Although called by ASTRO.PRO, this is a general purpose routine. The user may input as floating point or sexigesimal. If user inputs calling procedure's job to convert hours to degrees if needed. Since the input string is parsed character-by-character, ANY character that is not a digit, minus sign or decimal point may be used as a delimiter, i.e. acceptable examples of user input are: 1:03:55 -10:15:31 1 3 55.0 -10 15 31 1*3 55 -10abcd15efghij31 1.065278 hello -10.25861 CALLING SEQUENCE: GET_COORDS, Coords, [ PromptString, NumVals, INSTRING =, /QUIET ] OPTIONAL INPUT: PromptString - A string to inform the user what data are to be entered OPTIONAL KEYWORD INPUT: InString - a keyword that, if set, is assumed to already contain the input data string to be parsed. If this keyword is set, then the user is not prompted for any input. /Quiet - if set the program won't printout any error messages, but bad input is still flagged by Coords=[-999,-999]. OUTPUT: Coords - a 2 element floating array containing the coordinates. The vector [-999,-999] is returned if there has been an error. OPTIONAL OUTPUT: NumVals - the number of separate values entered by the user: 2 if the user entered the coordinates as floating point numbers, 6 if the user entered the coordinates as sexigesimal numbers. Some calling procedures might find this information useful (e.g., to to print some output in the same format as the user's input). REVISION HISTORY: Written by Joel Parker, 5 MAR 90 Included InString and Quiet keywords. Cleaned up some of the code and comments. JWmP, 16 Jun 94 ******************************************************************************* Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/astro/get_coords.pro)
GET_DATE
NAME: GET_DATE PURPOSE: Return the (current) UTC date in CCYY-MM-DD format for FITS headers EXPLANATION: This is the format required by the DATE and DATE-OBS keywords in a FITS header. CALLING SEQUENCE: GET_DATE, FITS_date, [ in_date, /OLD, /TIMETAG ] OPTIONAL INPUTS: in_date - string (scalar or vector) containing dates in IDL systime() format (e.g. 'Tue Sep 25 14:56:14 2001') OUTPUTS: FITS_date = A scalar character string giving the current date. Actual appearance of dte depends on which keywords are supplied. No Keywords supplied - dte is a 10 character string with the format CCYY-MM-DD where <CCYY> represents a calendar year, <MM> the ordinal number of a calendar month within the calendar year, and <DD> the ordinal number of a day within the calendar month. /TIMETAG set - dte is a 19 character string with the format CCYY-MM-DDThh:mm:ss where <hh> represents the hour in the day, <mm> the minutes, <ss> the seconds, and the literal 'T' the ISO 8601 time designator /OLD set - dte is an 8 character string in DD/MM/YY format INPUT KEYWORDS: /TIMETAG - Specify the time to the nearest second in the DATE format /OLD - Return the DATE format formerly (pre-1997) recommended for FITS Note that this format is now deprecated because it uses only a 2 digit representation of the year. EXAMPLE: Add the current date to the DATE keyword in a FITS header,h IDL> GET_DATE,dte IDL> sxaddpar, h, 'DATE', dte, 'Date header was created' NOTES: (1) A discussion of the DATExxx syntax in FITS headers can be found in http://www.cv.nrao.edu/fits/documents/standards/year2000.txt (2) Those who wish to use need further flexibility in their date formats (e.g. to use TAI time) should look at Bill Thompson's time routines in http://sohowww.nascom.nasa.gov/solarsoft/gen/idl/time PROCEDURES USED: DAYCNV - Convert Julian date to Gregorian calendar date REVISION HISTORY: Written W. Landsman March 1991 Major rewrite to write new DATExxx syntax W. Landsman August 1997 Converted to IDL V5.0 W. Landsman September 1997 Work after year 2000 even with /OLD keyword W. Landsman January 2000 Don't need to worry about TIME_DIFF since V5.4 W. Landsman July 2001 Assume since V5.4, remove LOCAL_DIFF keyword W. Landsman April 2006
(See $IDLUTILS_DIR/goddard/pro/astro/get_date.pro)
GET_EQUINOX
NAME: GET_EQUINOX PURPOSE: Return the equinox value from a FITS header. EXPLANATION: Checks for 4 possibilities: (1) If the EQUINOX keyword is found and has a numeric value, then this value is returned (2) If the EQUINOX keyword has the values 'J2000' or 'B1950', then either 2000. or 1950. is returned. (3) If the EQUINOX keyword is not found, then GET_EQUINOX will return the EPOCH keyword value. This usage of EPOCH is disparaged. (4) If neither EQUINOX no EPOCH is found, then the RADESYS keyword (or the deprecated RADECSYS keyword) is checked. If the value is 'ICRS' or 'FK5' then 2000 is is returned, if it is 'FK4' then 1950 is returned. According Calabretta & Greisen (2002, A&A, 395, 1077) the EQUINOX should be written as a numeric value, as in format (1). However, in older FITS headers, the EQUINOX might have been written using formats (2) or (3). CALLING SEQUENCE: Year = GET_EQUINOX( Hdr, [ Code ] ) INPUTS: Hdr - FITS Header, string array, will be searched for the EQUINOX (or EPOCH) keyword. OUTPUT: Year - Year of equinox in FITS header, numeric scalar OPTIONAL OUTPUT: Code - Result of header search, scalar -1 - EQUINOX, EPOCH or RADECSYS keyword not found in header 0 - EQUINOX found as a numeric value 1 - EPOCH keyword used for equinox (not recommended) 2 - EQUINOX found as 'B1950' 3 - EQUINOX found as 'J2000' 4 - EQUINOX derived from value of RADESYS or RADECSYS keyword 'ICRS', 'FK5' ==> 2000, 'FK4' ==> 1950 OPTIONAL KEYWORD INPUT: ALT - single character 'A' through 'Z' or ' ' specifying which astrometry system to use 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. PROCEDURES USED: ZPARCHECK, SXPAR() NOTES: Technically, RADESYS = 'ICRS' does not specify any equinox, but can be assumed to be equivalent to J2000 for all but highest-precision work. REVISION HISTORY: Written W. Landsman STX March, 1991 Don't use !ERR W. Landsman February 2000 N = 1 for check of EPOCH keyword, not 0 S. Ott July 2000 Added ALT keyword, recognize RADESYS along with deprecated RADECSYS W. Landsman Sep 2011
(See $IDLUTILS_DIR/goddard/pro/astrom/get_equinox.pro)
GET_JULDATE
NAME: GET_JULDATE PURPOSE: Return the current Julian Date EXPLANATION: In V5.4, GET_JULDATE became completely obsolete with the introduction of the /UTC keyword to SYSTIME(). So GET_JULDATE,jd is equivalent to jd = SYSTIME(/JULIAN,/UTC). CALLING SEQUENCE: GET_JULDATE,jd INPUTS: None OUTPUTS: jd = Current Julian Date, double precision scalar EXAMPLE: Return the current hour, day, month and year as integers IDL> GET_JULDATE, JD ;Get current Julian date IDL> DAYCNV, JD, YR, MON, DAY, HOURS ;Convert to hour,day month & year METHOD: A call is made to SYSTIME(/JULIAN,/UTC). REVISION HISTORY: Written Wayne Landsman March, 1991 Converted to IDL V5.0 W. Landsman September 1997 Assume since V5.4 Use /UTC keyword to SYSTIME() W. Landsman April 2006
(See $IDLUTILS_DIR/goddard/pro/astro/get_juldate.pro)
GLACTC
NAME: GLACTC PURPOSE: Convert between celestial and Galactic (or Supergalactic) coordinates. EXPLANATION: Program to convert right ascension (ra) and declination (dec) to Galactic longitude (gl) and latitude (gb) (j=1) or vice versa (j=2). CALLING SEQUENCE: GLACTC, ra, dec, year, gl, gb, j, [ /DEGREE, /FK4, /SuperGalactic ] INPUT PARAMETERS: year equinox of ra and dec, scalar (input) j direction of conversion (input) 1: ra,dec --> gl,gb 2: gl,gb --> ra,dec INPUTS OR OUTPUT PARAMETERS: ( depending on argument J ) ra Right ascension, hours (or degrees if /DEGREES is set), scalar or vector dec Declination, degrees,scalar or vector gl Galactic longitude, degrees, scalar or vector gb Galactic latitude, degrees, scalar or vector All results forced double precision floating. OPTIONAL INPUT KEYWORD PARAMETERS: /DEGREE - If set, then the RA parameter (both input and output) is given in degrees rather than hours. /FK4 - If set, then the celestial (RA, Dec) coordinates are assumed to be input/output in the FK4 system. By default, coordinates are assumed to be in the FK5 system. For B1950 coordinates, set the /FK4 keyword *and* set the year to 1950. /SuperGalactic - If set, the GLACTC returns SuperGalactic coordinates as defined by deVaucouleurs et al. (1976) to account for the local supercluster. The North pole in SuperGalactic coordinates has Galactic coordinates l = 47.47, b = 6.32, and the origin is at Galactic coordinates l = 137.37, b= 0 EXAMPLES: Find the Galactic coordinates of Altair (RA (J2000): 19 50 47 Dec (J2000): 08 52 06) IDL> glactc, ten(19,50,47),ten(8,52,6),2000,gl,gb,1 ==> gl = 47.74, gb = -8.91 PROCEDURE CALLS: BPRECESS, JPRECESS, PRECESS HISTORY: FORTRAN subroutine by T. A. Nagy, 21-MAR-78. Conversion to IDL, R. S. Hill, STX, 19-OCT-87. Modified to handle vector input, E. P. Smith, GSFC, 14-OCT-94 Converted to IDL V5.0 W. Landsman September 1997 Added DEGREE keyword, C. Markwardt, Nov 1999 Major rewrite, default now FK5 coordinates, added /FK4 keyword use external precession routines W. Landsman April 2002 Add /Supergalactic keyword W. Landsman September 2002 Fix major bug when year not 2000 and /FK4 not set W. Landsman July 2003
(See $IDLUTILS_DIR/goddard/pro/astro/glactc.pro)
GLACTC_PM
NAME: GLACTC_PM PURPOSE: Convert between celestial and Galactic (or Supergalactic) proper motion (also converts coordinates). EXPLANATION: Program to convert proper motion in equatorial coordinates (ra,dec) to proper motion in Galactic coordinates (gl, gb) or Supergalacic Coordinates (sgl,sgb) or back to equatorial coordinates (j=2). The proper motion unit is arbitrary, but be sure to set /MUSTAR if units are the projection of the proper motion on the RA, Dec axis. It does precession on the coordinates but does not take care of precession of the proper motions which is usually a very small effect. CALLING SEQUENCE: GLACTC_PM, ra, dec, mu_ra,mu_dec,year, gl, gb, mu_gl, mu_gb, j, [ /DEGREE, /FK4, /SuperGalactic, /mustar ] INPUT PARAMETERS: year equinox of ra and dec, scalar (input) j direction of conversion (input) 1: ra,dec,mu_ra,mu_dec --> gl,gb,mu_gl,mu_gb 2: gl,gb,mu_gl,mu_gb --> ra,dec,mu_ra,mu_dec INPUTS OR OUTPUT PARAMETERS: ( depending on argument J ) ra Right ascension, hours (or degrees if /DEGREES is set), scalar or vector. dec Declination, degrees,scalar or vector mu_ra right ascension proper motion any proper motion unit (angle/time) mu_dec declination proper motion in any proper motion unit (angle/time) gl Galactic longitude, degrees, scalar or vector gb Galactic latitude, degrees, scalar or vector mu_gl galactic longitude proper motion in any time unit mu_gb galactic latitude proper motion in any time unit All results forced double precision floating. OPTIONAL INPUT KEYWORD PARAMETERS: /DEGREE - If set, then the RA parameter (both input and output) is given in degrees rather than hours. /FK4 - If set, then the celestial (RA, Dec) coordinates are assumed to be input/output in the FK4 system. By default, coordinates are assumed to be in the FK5 system. For B1950 coordinates, set the /FK4 keyword *and* set the year to 1950. /SuperGalactic - If set, the GLACTC returns SuperGalactic coordinates as defined by deVaucouleurs et al. (1976) to account for the local supercluster. The North pole in SuperGalactic coordinates has Galactic coordinates l = 47.47, b = 6.32, and the origin is at Galactic coordinates l = 137.37, b= 0 /mustar - if set then input and output of mu_ra and mu_dec are the projections of mu in the ra or dec direction rather than the d(ra)/dt or d(mu)/dt. So mu_ra becomes mu_ra*cos(dec) and mu_gl becomes mu_gl*cos(gb). EXAMPLES: Find the SuperGalactic proper motion of M33 given its equatorial proper motion mu* =(-29.3, 45.2) microas/yr. Where the (*) indicates ra component is actual mu_ra*cos(dec) (Position: RA (J2000): 01 33 50.9, Dec (J2000): 30 39 36.8) IDL> glactc_pm, ten(1,33,50.9),ten(30,39,36.8),-29.3,45.2, 2000,$ sgl,sgb,mu_sgl,mu_sgb,1,/Supergalactic,/mustar ==> SGL = 328.46732 deg, SGB = -0.089896901 deg, mu_sgl = 33.732 muas/yr, mu_gb = 41.996 muas/yr. And for the roundtrip: IDL> glactc_pm, ra,dec,mu_ra,mu_dec,2000,$ IDL> sgl,sgb,mu_sgl,mu_sgb,2,/Supergalactic,/mustar ==> ra=1.5641376 hrs., dec= 30.660277 deg, mu_ra= -29.300000 muas/yr, mu_dec=i 45.200000 muas/yr PROCEDURE CALLS: BPRECESS, JPRECESS, PRECESS HISTORY: Written Ed Shaya, U of MD, Oct 2009. Adapted from GLACTC to make proper motion transformations, Correct occasional sign error in galactic longitude E. Shaya Nov 2011
(See $IDLUTILS_DIR/goddard/pro/astro/glactc_pm.pro)
GROUP
NAME: GROUP PURPOSE: Assign stars with non-overlapping PSF profiles into distinct groups EXPLANATION: Part of the IDL-DAOPHOT sequence CALLING SEQUENCE: GROUP, X, Y, RCRIT, NGROUP INPUTS: X - vector, giving X coordinates of a set of stars. Y - vector, giving Y coordinates of a set of stars. If X and Y are input as integers, then they will be converted to floating point RCRIT - scalar, giving minimum distance between stars of two distinct groups. Stars less than this distance from each other are always in the same group. Stetson suggests setting the critical distance equal to the PSF radius + the Fitting radius. OUTPUTS: NGROUP - integer vector, same number of elements as X and Y, giving a group number for each star position. Group numbering begins with 0. METHOD: Each position is initially given a unique group number. The distance of each star is computed against every other star. Those distances less than RCRIT are assigned the minimum group number of the set. A check is then made to see if any groups have merged together. PROCEDURES USED: REM_DUP() REVISION HISTORY: Written W. Landsman STX April, 1988 Major revision to properly merge groups together W. Landsman Sep 1991 Work for more than 32767 points W. Landsman March 1997 Converted to IDL V5.0 W. Landsman September 1997 Avoid overflow if X and Y are integers W. Landsman Feb. 1999
(See $IDLUTILS_DIR/goddard/pro/idlphot/group.pro)
GSSSADXY
NAME: GSSSADXY PURPOSE: Converts RA and DEC (J2000) to (X,Y) for an STScI GuideStar image. EXPLANATION: The sky coordinates may be printed and/or returned in variables. CALLING SEQUENCE: GSSSADXY, GSA, Ra,Dec, [ X, Y, /Print ] INPUT: GSA - the GSSS Astrometry structure created by GSSSEXTAST RA - the RA coordinate(s) in *degrees*, scalar or vector DEC - the DEC coordinate(s) in *degrees*, scalar or vector OPTIONAL KEYWORD INPUT: /PRINT - If this keyword is set and non-zero, then coordinates will be displayed at the terminal OUTPUT: X - the corresponding X pixel coordinate(s), double precision Y - the corresponding Y pixel coordinate(s), double precision X and Y will be in IDL convention (first pixel 0,0) EXAMPLE: Given a FITS header, hdr, from the STScI Guidestar Survey, determine the X,Y coordinates of 3C 273 (RA = 12 29 6.7 +02 03 08) IDL> GSSSEXTAST, hdr, gsa ;Extract astrometry structure IDL> GSSSADXY, gsa, ten(12,29,6.7)*15,ten(2,3,8),/print NOTES: For most purpose users can simply use ADXY, which will call GSSSADXY if it is passed a GSSS header. PROCEDURES CALLED: ASTDISP - Print RA, Dec in standard format HISTORY: 10-JUL-90 Version 1 written by Eric W. Deutsch Derived from procedures written by Brian McLean Vectorized code W. Landsman March, 1991 14-AUG-91 Fixed error which caused returned X and Y to be .5 pixels too large. Now X,Y follows same protocol as ADXY. June 1994 - Dropped PRFLAG parameter, added /PRINT W. Landsman (HSTX) Converted to IDL V5.0 W. Landsman September 1997 29-JUN-99 Added support for AMD[X,Y]1[2-3] for DSS images by E. Deutsch Reduce memory requirements for large arrays D. Finkbeiner April 2004
(See $IDLUTILS_DIR/goddard/pro/astrom/gsssadxy.pro)
GSSSEXTAST
NAME: GSSSEXTAST PURPOSE: Extract IDL astrometry structure from a ST Guide Star Survey FITS header EXPLANATION: This procedure extracts the astrometry information from a ST Guide Star Survey FITS header and places it in an IDL structure for subsequent use with GSSSxyad and GSSSadxy. CALLING SEQUENCE: GSSSExtast, hdr, astr, noparams INPUT: h - the GSSS FITS header OUTPUT: astr - Structure containing the GSSS Astrometry information .CTYPE = ['RA---GSS','DEC--GSS'] .CRVAL = plate center Ra, Dec (from PLTRAH, PLTRAM etc.) .XLL,.YLL = offsets lower lefthand corner .AMDX, .AMDY = 12 transformation coefficients .XSZ,.YSZ = X and Y pixel size in microns .PLTSCL = plate scale in arc sec/mm .PPO3, .PPO6 - orientation coefficients NOTES: Most users should use EXTAST rather than this procedure. EXTAST will call GSSSEXTAST if supplied with GSSS FITS header. PROCEDURES CALLED: SXPAR() - Extract parameter values from a FITS header HISTORY: 01-JUL-90 Version 1 written by Eric W. Deutsch Code derived from Software by Brian McLean 20-AUG-91 Modified to Double Precision Variables. E. Deutsch June 94 Change astrometry tags to better agree with EXTAST W. Landsman Converted to IDL V5.0 W. Landsman September 1997 29-JUN-99 Added support for AMD[X,Y]1[2-3] for DSS images by E. Deutsch Eliminate use of obsolete !ERR W. Landsman February 2000
(See $IDLUTILS_DIR/goddard/pro/astrom/gsssextast.pro)
GSSSXYAD
NAME: GSSSXYAD PURPOSE: Convert (X,Y) coordinates in a STScI Guide Star image to RA and Dec EXPLANATION: The sky coordinates may be printed and/or returned in variables. CALLING SEQUENCE: GSSSxyad, gsa, x, y, ra, dec, [ /PRINT ] INPUT: GSA - The GSSS Astrometry structure extracted from a FITS header by GSSSEXTAST X - The X pixel coordinate(s) of the image, scalar or vector Y - The Y pixel coordinate(s) of the image, scalar or vector OUTPUT: RA - The RA coordinate of the given pixel(s) in *degrees* DEC - The DEC coordinate of the given pixel(s) in *degrees* Both RA and Dec will be returned as double precision OPTIONAL KEYWORD INPUT: /PRINT - If this keyword is set and non-zero, then coordinates will be displayed at the terminal EXAMPLE: Given a FITS header,hdr, from a GSSS image, print the astronomical coordinates of (X,Y) = (200.23, 100.16) at the terminal IDL> GSSSExtast, hdr, gsa ;Extract astrometry structure IDL> GSSSxyad, gsa, 200.23, 100.16, /print NOTES: For most purpose users can simply use XYAD, which will call GSSSXYAD if it is passed a GSSS header. PROCEDURES CALLED: ASTDISP - print RA, Dec in a standard format HISTORY: 01-JUL-90 Version 1 written by Eric W. Deutsch Vectorized Code W. Landsman March, 1991 14-AUG-91 Fixed error which caused returned RA and DEC to be off by -.5 pixels in both X,Y. Now X,Y follows same protocol as ADXY. 20-AUG-91 Modified to use AstDisp procedure. June 94 Added /PRINT keyword instead of PRFLAG W. Landsman June 94 Converted to IDL V5.0 W. Landsman September 1997 29-JUN-99 Added support for AMD[X,Y]1[2-3] for DSS images by E. Deutsch
(See $IDLUTILS_DIR/goddard/pro/astrom/gsssxyad.pro)
GSSS_STDAST
NAME: GSSS_STDAST PURPOSE: Insert the closest tangent projection astrometry into an GSSS Image DESCRIPTION: This procedure takes a header with GSSS (ST Guide Star Survey) astrometry and writes a roughly equivalent tangent projection astrometry into the header. One might want to do this if (1) one needs to use software which does not recognize the GSSS astrometric parameters or (2) if the the image to be transformed, since the highly nonlinear GSSS solution does not transform easily. CALLING SEQUENCE: GSSS_STDAST, H, [Xpts, Ypts] INPUT - OUTPUT: H - FITS header (string array) containing GSSS astrometry. GSSS_STDAST will write the roughly equivalent tangent projection astrometry solution into H. OPTIONAL INPUTS: xpts, ypts -- Vectors giving the X and Y positions of the three reference points used to find approximate tangent projection. Default is Xpts = [0.2,0.8,0.5], Ypts = [0.2, 0.4, 0.8] METHOD: The procedures GSSSXYAD is used to exactly determine the RA and Dec at 3 reference points. STARAST is then used to find the tangent projection astrometry that best matches these reference points. NOTES: Images from the STScI server (http://archive.stsci.edu/dss/) contain both a GSSS polynomial plate solution and an approximate WCS tangent projection. The value of the WCSNAME keyword in the FITS header is 'DSS'. If WCSNAME = "DSS' then the more accurate DSS astrometry is extracted by EXTAST This procedure changes the value of WCSNAME to 'DSS_TANGENT' to indicate that the tangent solution should be used. Some early GSSS images (before the 1994 CD-Rom) used keywords CRPIXx rather than CNPIXx. The GSSS astrometry in these images could be corrupted by this procedure as the CRPIXx values will be altered. The tangent is only a approximation of the nonlinear GSSS astrometry, but is generally accurate to about 0.1 pixels on a 1024 x 1024 image. PROCEDURES USED: GSSSEXTAST, GSSSXYAD, STARAST, PUTAST, SXADDHIST, SXDELPAR HISTORY: 13-AUG-91 Version 2 written from MAKEASTGSSS Eric Deutsch (STScI) Delete CDELT* keywords from header W. Landsman May 1994 Remove call to BUILDAST W. Landsman Jan, 1995 Added optional Xpts, Ypts parameters E. Deutsch Oct, 1995 Add WCSNAME W. Landsman Nov 2006
(See $IDLUTILS_DIR/goddard/pro/astrom/gsss_stdast.pro)
HADEC2ALTAZ
NAME: HADEC2ALTAZ PURPOSE: Converts Hour Angle and Declination to Horizon (alt-az) coordinates. EXPLANATION: Can deal with NCP/SCP singularity. Intended mainly to be used by program EQ2HOR CALLING SEQUENCE: HADEC2ALTAZ, ha, dec, lat ,alt ,az [ /WS ] INPUTS ha - the local apparent hour angle, in DEGREES, scalar or vector dec - the local apparent declination, in DEGREES, scalar or vector lat - the local latitude, in DEGREES, scalar or vector OUTPUTS alt - the local apparent altitude, in DEGREES. az - the local apparent azimuth, in DEGREES, all results in double precision OPTIONAL KEYWORD INPUT: /WS - Set this keyword for the output azimuth to be measured West from South. The default is to measure azimuth East from North. EXAMPLE: What were the apparent altitude and azimuth of the sun when it transited the local meridian at Pine Bluff Observatory (Lat=+43.07833 degrees) on April 21, 2002? An object transits the local meridian at 0 hour angle. Assume this will happen at roughly 1 PM local time (18:00 UTC). IDL> jdcnv, 2002, 4, 21, 18., jd ; get rough Julian date to determine ;Sun ra, dec. IDL> sunpos, jd, ra, dec IDL> hadec2altaz, 0., dec, 43.078333, alt, az ===> Altitude alt = 58.90 Azimuth az = 180.0 REVISION HISTORY: Written Chris O'Dell Univ. of Wisconsin-Madison May 2002
(See $IDLUTILS_DIR/goddard/pro/astro/hadec2altaz.pro)
HASIMAGEMAGICK
:Description: Searches for the ImageMagick "convert" command to see if ImageMagick is available on the system. :Categories: Utilities :Params: none. :Keywords: version: out, optional, type=string Returns the version number of the ImageMagick convert command, if found. :Examples: Used to determine if the ImageMagick convert command is available:: IDL> available = SearchForImageMagick(Version=version) IDL> IF available THEN Print, version :Author: FANNING SOFTWARE CONSULTING:: David W. Fanning 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com :History: Change History:: Written, 17 January 2011. DWF. :Copyright: Copyright (c) 2011, Fanning Software Consulting, Inc.
(See $IDLUTILS_DIR/goddard/pro/coyote/hasimagemagick.pro)
HASTROM
NAME: HASTROM PURPOSE: Transformation of an image to align it with a reference image EXPLANATION: A transformation is applied (using POLY_2D) to an image so that its astrometry is identical with that in a reference header. This procedure can be used to align two images. CALLING SEQUENCE: HASTROM, oldim, oldhd, newim, newhd, refhd, [MISSING =, INTERP = ] or HASTROM, oldim, oldhd, refhd, [MISSING =, INTERP ={0,1,2}, NGRID =, CUBIC =, DEGREE = ] INPUTS: OLDIM - Image array to be manipulated. If only 3 parameters are supplied then OLDIM and OLDHD will be modified to contain the output image array and header OLDHD - FITS header array for OLDIM, containing astrometry parameters REFHD - Reference header, containing astrometry parameters. OLDIM will be rotated, shifted, and compressed or expanded until its astrometry matches that in REFHD. OUTPUTS: NEWIM - Image array after transformation has been performed. The dimensions of NEWIM will be identical to the NAXIS1 and NAXIS2 keywords specified in REFHD. Regions on the reference image that do not exist in OLDIM can be assigned a value with the MISSING keyword. NEWHD - Updated FITS image header associated with NEWIM OPTIONAL INPUT KEYWORDS: MISSING - Set this keyword to a scalar value which will be assigned to pixels in the output image which are out of range of the supplied imput image. If not supplied, then linear extrapolation is used. See the IDL manual on POLY_2D. ***NOTE: A bug was introduced into the POLY_2D function in IDL V5.5 (fixed in V6.1) such that the MISSING keyword may not work properly with floating point data*** INTERP - Scalar, one of 0, 1, or 2 determining type of interpolation 0 nearest neighbor, 1 (default) bilinear interpolation, 2 cubic interpolation. CUBIC - a scalar value between -1 and 0 specifying cubic interpolation with the specified value as the cubic interpolation parameter. (see poly_2d for info). Setting CUBIC to a value greater than zero is equivalent to setting CUBIC = -1. NGRID - Integer scalar specifying the number of equally spaced grid points on each axis to use to specify the transformation. The value of NGRID must always be greater than DEGREE + 1. The default is DEGREE + 2 which equals 3 (9 total points) for DEGREE=1 (linear warping). DEGREE - Integer scalar specifying the degree of the transformation. See the routine POLYWARP for more info. Default = 1 (linear transformation) unless polynomial ('SIP') distortion parameters are present in either the input or reference FITS header. In that case, the default degree is equal to the degree of the distortion polynomial. OPTIONAL OUTPUT KEYWORD: ERRMSG - If this keyword is supplied, then any error messages will be returned to the user in this parameter rather than depending on on the MESSAGE routine in IDL. If no errors are encountered then a null string is returned. NOTES: (1) The 3 parameter calling sequence is less demanding on virtual memory. (2) The astrometry in OLDHD will be precessed to match the equinox given in REFHD. (3) If an ST Guidestar image is used for the reference header, then the output header will be converted to standard astrometry. EXAMPLE: Suppose one has an image array, IM, and an associated FITS header H. One desires to warp the image array so that it is aligned with another image with a FITS header, HREF. Both headers contain astrometry info. Set pixel values to 0 where there is no overlap between the input and reference image, and use linear interpolation (default) IDL> hastrom, IM, H, HREF, MISSING = 0 PROCEDURES USED: ad2xy, check_FITS, extast, get_EQUINOX(), gsssextast, hprecess, putast, sxaddpar, sxaddhist, sxpar(), xy2ad, zparcheck REVISION HISTORY: Written W. Landsman, STX Co. Feb, 1989 Updated to CHECK_FITS Dec, 1991 New astrometry keywords Mar, 1994 Recognize GSSS header W. Landsman June, 1994 Added CUBIC keyword W. Landsman March, 1997 Accept INTERP=0, Convert output GSS header to standard astrometry W. Landsman June 1998 Remove calls to obsolete !ERR system variable March 2000 Added ERRMSG output keyword W. Landsman April 2000 Need to re-extract astrometry after precession W. Landsman Nov. 2000 Check for distortion parameters in headers, add more FITS HISTORY information W. Landsman February 2005 Use different coefficient for nearest neighbor to avoid half-pixel shift with POLY_2D W. Landsman Aug 2006 Return ERRMSG if no overlap between images W. Landsman Nov 2007 Use V6.0 notation W. Landsman Jan 2012
(See $IDLUTILS_DIR/goddard/pro/astrom/hastrom.pro)
HBOXAVE
NAME: HBOXAVE PURPOSE: Box average an image array and update the FITS header array EXPLANATION: The function BOXAVE() is used. This procedure is recommended for integer images when photometric precision is desired, because it performs intermediate steps using REAL*4 arithmetic. Otherwise, the procedure HREBIN is much faster. CALLING SEQUENCE: HBOXAVE, Oldim, Oldhd, Newim, Hewhd, box or HBOXAVE, Oldim, Oldhd, box INPUTS: Oldim - the original image array Oldhd - the original image FITS header, string array OPTIONAL INPUTS: box - the box size to be used, integer scalar. If omitted, then HBOXAVE will prompt for this parameter. OPTIONAL OUTPUTS: Newim - the image after boxaveraging Newhd - header for newim containing updated astrometry info If output parameters are not supplied, the program will modify the input parameters OLDIM and OLDHD to contain the new array and updated header. OPTIONAL KEYWORD OUTPUT: ERRMSG - If this keyword is supplied, then any error mesasges will be returned to the user in this parameter rather than depending on on the MESSAGE routine in IDL. If no errors are encountered then a null string is returned. PROCEDURE: The parameters BSCALE, NAXIS1, NAXIS2, CRPIX1, and CRPIX2 and the CD (or CDELT) parameters are updated for the new FITS header. EXAMPLE: Compress the image in a FITS file 'image.fits' by a factor of 4 and update the astrometry in the FITS header IDL> im = readfits('image.fits',hdr) ;Read FITS file into IDL arrays IDL> hboxave, im, hdr, 4 ;Boxaverage by 4 IDL> writefits,'image.fits',im,hdr ;Write a new FITS file CALLED PROCEDURES: CHECK_FITS - Check that the FITS header is appropriate to the image BOXAVE() - Performs box averaging of an image SXPAR(), SXADDPAR - Read and write FITS keyword values MODIFICATION HISTORY: Written, Aug. 1986 W. Landsman, STI Corp. IDLV2 changes, sxaddpar format keyword added, J. Isensee, July,1990 Fix 0.5 pixel offset in new CRPIX computation W. Landsman, Dec, 1991 Update BSCALE even if no astrometry present W. Landsman, May 1997 Converted to IDL V5.0 W. Landsman September 1997 Added ERRMSG keyword, Use double formatting W. Landsman April 2000 Recognize PC matrix astrometry format W. Landsman December 2001
(See $IDLUTILS_DIR/goddard/pro/astrom/hboxave.pro)
HCONGRID
NAME: HCONGRID PURPOSE: CONGRID an image and update astrometry in a FITS header EXPLANATION: Expand or contract an image using CONGRID and update the associated FITS header array. CALLING SEQUENCE: HCONGRID, oldhd ;Update FITS header only HCONGRID, oldim, oldhd, [ newim, newhd, newx, newy, /HALF_HALF CUBIC = , INTERP=, OUTSIZE=, ERRMSG=, ALT= ] INPUTS: OLDIM - the original image array OLDHD - the original image FITS header, string array OPTIONAL INPUTS: NEWX - size of the new image in the X direction NEWY - size of the new image in the Y direction The OUTSIZE keyword can be used instead of the NEWX, NEWY parameters OPTIONAL OUTPUTS: NEWIM - the image after expansion or contraction with CONGRID NEWHD - header for newim containing updated astrometry info If output parameters are not supplied, the program will modify the input parameters OLDIM and OLDHD to contain the new array and updated header. OPTIONAL KEYWORD INPUTS: ALT - Single character 'A' through 'Z' or ' ' specifying which astrometry system to modify in the FITS header. The default is to use the primary astrometry of ALT = ' '. See Greisen and Calabretta (2002) for information about alternate astrometry keywords. CUBIC - If set and non-zero, then cubic interpolation is used. Valid ranges are -1 <= Cubic < 0. Setting /CUBIC is equivalent to CUBIC = -1 and also equivalent to INTERP = 2. See INTERPOLATE for more info. Setting CUBIC = -0.5 is recommended. ERRMSG - If this keyword is supplied, then any error mesasges will be returned to the user in this parameter rather than depending on on the MESSAGE routine in IDL. If no errors are encountered then a null string is returned. /HALF_HALF - Due to edge effects, the default behaviour of CONGRID is to introduce a slight shift in the image center. Craig Markwardt (http://cow.physics.wisc.edu/~craigm/idl/misc.html) has written a modified version of CONGRID called CMCONGRID that when used with the /HALF_HALF keyword eliminates any shift. The use of the /HALF keyword emulates CMCONGRID and eliminates any shift in the image centroid. INTERP - 0 for nearest neighbor, 1 for bilinear interpolation (default), 2 for cubic (=-1) interpolation. OUTSIZE - Two element integer vector which can be used instead of the NEWX and NEWY parameters to specify the output image dimensions OPTIONAL KEYWORD OUTPUT: ERRMSG - If this keyword is supplied, then any error mesasges will be returned to the user in this parameter rather than depending on on the MESSAGE routine in IDL. If no errors are encountered then a null string is returned. PROCEDURE: Expansion or contraction is done using the CONGRID function, unless HALF_HALF is set. The parameters BSCALE, NAXIS1, NAXIS2, CRPIX1, and CRPIX2 and the CD (or CDELT) parameters are updated for the new header. NOTES: A FITS header can be supplied as the first parameter without having to supply an image array. The astrometry in the FITS header will be updated to be appropriate to the specified image size. If the FITS header contains astrometry from a ST Guide Star image, then the astrometry will be converted to an approximately equivalent tangent projection before applying CONGRID. EXAMPLE: Congrid an 512 x 512 image array IM and FITS header H to size 300 x 300 using cubic interpolation. Use the HALF_HALF keyword to avoid a shift of the image centroid IDL> hcongrid, IM ,H, OUT = [300, 300], CUBIC = -0.5, /HALF The variables IM and H will be modified to the new image size. PROCEDURES CALLED: CHECK_FITS, CONGRID(), EXTAST, GSSS_STDAST, SXADDHIST, SXADDPAR, SXPAR(), ZPARCHECK MODIFICATION HISTORY: Written, Aug. 1986 W. Landsman, STI Corp. Added interp keywords, J. Isensee, July, 1990 Add cubic interpolation W. Landsman HSTX January 1994 Recognize a GSSS FITS header W. Landsman June 1994 Fix case where header but not image supplied W. Landsman May 1995 Remove call to SINCE_VERSION() W. Landsman March 1996 Assume since IDL V3.5, add CUBIC keyword W. Landsman March 1997 Update BSCALE even if no astrometry present W. Landsman May 1997 Converted to IDL V5.0 W. Landsman September 1997 Added HALF_HALF keyword W. Landsman February 2000 Added ERRMSG keyword, use double precision formatting W.L. April 2000 Recognize PC00n00m astrometry format W. Landsman December 2001 Now works when both /INTERP and /HALF are set W. Landsman January 2002 Fix output astrometry for non-equal plate scales for PC matrix or CROTA2 keyword, added ALT keyword. W. Landsman May 2005 Update distortion parameters if present W. Landsman January 2008 Don't update BSCALE/BZERO for unsigned integer W.Landsman Mar 2008
(See $IDLUTILS_DIR/goddard/pro/astrom/hcongrid.pro)
HEADFITS
NAME: HEADFITS PURPOSE: Read a FITS (primary or extension) header into a string array. EXPLANATION: HEADFITS() supports several types of compressed files including gzip (.gz), Unix compressed (.Z), Bzip2 (.bz2) or FPACK (.fz http://heasarc.gsfc.nasa.gov/fitsio/fpack/ ) CALLING SEQUENCE: Result = HEADFITS(Filename/Fileunit ,[ ERRMSG =, EXTEN= , COMPRESS=, /SILENT ]) INPUTS: Filename = String containing the name of the FITS file to be read. If set to an empty string, then user will be prompted for name. File names ending in '.gz' are assumed to be gzip'ed compressed and under Unix file names ending in '.Z' are assumed to be Unix compressed, and file names ending in .bz2 are assumed to be bzip2 compressed. If this default behaviour is not sufficient then use the COMPRESS keyword. or Fileunit - A scalar integer specifying the unit of an already opened FITS file. The unit will remain open after exiting HEADFITS(). There are two possible reasons for choosing to specify a unit number rather than a file name: (1) For a FITS file with many extensions, one can move to the desired extensions with FXPOSIT() and then use HEADFITS(). This is more efficient that repeatedly starting at the beginning of the file. (2) For reading a FITS file across a Web http: address after opening the unit with the SOCKET procedure. OPTIONAL INPUT KEYWORDS: EXTEN = Either an integer scalar, specifying which FITS extension to read, or a scalar string specifying the extension name (stored in the EXTNAME keyword). For example, to read the header of the first extension set EXTEN = 1. Default is to read the primary FITS header (EXTEN = 0). The EXTEN keyword cannot be used when a unit number is supplied instead of a file name. COMPRESS - If this keyword is set and non-zero, then treat the file as compressed. If 1 assume a gzipped file. Use IDL's internal decompression facilities for gzip files, while for Unix or bzip2 compression spawn off a process to decompress and use its output as the FITS stream. If the keyword is not 1, then use its value as a string giving the command needed for decompression. See FXPOSIT for more info. /SILENT - If set, then suppress any warning messages about invalid characters in the FITS file. 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. OUTPUTS: Result of function = FITS header, string array EXAMPLE: Print the main FITS header of a file 'test.fits' into a string variable, h IDL> print, headfits( 'test.fits') Print the second extension header of a gzip compressed FITS file 'test.fits.gz'. Use HPRINT for pretty format IDL> hprint, headfits( 'test.fits.gz', ext=2) Read the extension named CALSPEC IDL> hprint,headfits('test.fits.gz',ext='CALSPEC') PROCEDURES CALLED FXPOSIT(), MRD_HREAD The version of fxposit.pro must be post- May 2009. MODIFICATION HISTORY: adapted by Frank Varosi from READFITS by Jim Wofford, January, 24 1989 Keyword EXTEN added, K.Venkatakrishna, May 1992 Make sure first 8 characters are 'SIMPLE' W. Landsman October 1993 Check PCOUNT and GCOUNT W. Landsman December 1994 Major rewrite, work for Unix gzip files, W. Landsman April 1996 Added COMPRESS keyword W. Landsman April 2000 Added ERRMSG keyword W. Landsman July 2000 Added /SILENT keyword W. Landsman December 2000 Option to read a unit number rather than file name W.L October 2001 Test output status of MRD_HREAD call October 2003 W. Landsman Allow extension to be specified by name Dec 2006 W. Landsman No need to uncompress FPACK compressed files May 2009 W. Landsman Use V6.0 notation W.L. Feb. 2011
(See $IDLUTILS_DIR/goddard/pro/fits/headfits.pro)
HELIO
NAME: HELIO PURPOSE: Compute (low-precision) heliocentric coordinates for the planets. EXPLANATION: The mean orbital elements for epoch J2000 are used. These are derived from a 250 yr least squares fit of the DE 200 planetary ephemeris to a Keplerian orbit where each element is allowed to vary linearly with time. For dates between 1800 and 2050, this solution fits the terrestrial planet orbits to ~25" or better, but achieves only ~600" for Saturn. Use PLANET_COORDS (which calls HELIO) to get celestial (RA, Dec) coordinates of the planets CALLING SEQUENCE: HELIO, JD, LIST, HRAD, HLONG, HLAT, [/RADIAN] INPUTS: JD = Julian date, double precision scalar or vector LIST = List of planets array. May be a single number. 1 = merc, 2 = venus, ... 9 = pluto. OUTPUTS: HRAD = array of Heliocentric radii (A.U). HLONG = array of Heliocentric (ecliptic) longitudes (degrees). HLAT = array of Heliocentric latitudes (degrees). These output parameters will be dimensioned Nplanet by Ndate, where Nplanet is the number of elements of list, and Ndate is the number of elements of JD. OPTIONAL INPUT KEYWORD: /RADIAN - If set, then the output longitude and latitude are given in radians. EXAMPLE: (1) Find the current heliocentric positions of all the planets IDL> GET_JULDATE, jd ;Get current Julian date IDL> HELIO,jd,indgen(9)+1,hrad,hlong,hlat ;Get radius, long, and lat (2) Find heliocentric position of Mars on August 23, 2000 IDL> JDCNV, 2000,08,23,0,jd IDL> HELIO,JD,2,HRAD,HLONG,HLAT ===> hrad = 1.6407 AU hlong = 124.3197 hlat = 1.7853 For comparison, the JPL ephemeris gives hrad = 1.6407 AU hlong = 124.2985 hlat = 1.7845 (3) Find the heliocentric positions of Mars and Venus for every day in November 2000 IDL> JDCNV, 2000, 11, 1, 0, jd ;Julian date of November 1, 2000 IDL> helio, jd+indgen(30), [4,2], hrad,hlong,hlat ;Mars=4, Venus=2 hrad, hlong, and hlat will be dimensioned [2,30] first column contains Mars data, second column Venus COMMON BLOCKS: None ROUTINES USED: CIRRANGE - force angle between 0 and 2*!PI NOTES: (1) The calling sequence for this procedure was changed in August 2000 (2) This program is based on the two-body model and thus neglects interactions between the planets. This is why the worst results are for Saturn. Use the procedure JPLEPHINTERp for more accurate positions using the JPL ephemeris. Also see http://ssd.jpl.nasa.gov/cgi-bin/eph for a more accurate ephemeris generator online. (3) The coordinates are given for equinox 2000 and *not* the equinox of the supplied date(s) MODIFICATION HISTORY: R. Sterner. 20 Aug, 1986. Code cleaned up a bit W. Landsman December 1992 Major rewrite, use modern orbital elements, vectorize, more accurate solution to Kepler's equation W. Landsman August 2000 Wasn't working for planet vectors W. Landsman August 2000 Work for more than 32767 positions S. Leach Jan 2009
(See $IDLUTILS_DIR/goddard/pro/astro/helio.pro)
HELIO_JD
NAME: HELIO_JD PURPOSE: Convert geocentric (reduced) Julian date to heliocentric Julian date EXPLANATION: This procedure correct for the extra light travel time between the Earth and the Sun. An online calculator for this quantity is available at http://www.physics.sfasu.edu/astro/javascript/hjd.html Users requiring more precise calculations and documentation should look at the IDL code available at http://astroutils.astronomy.ohio-state.edu/time/ CALLING SEQUENCE: jdhelio = HELIO_JD( date, ra, dec, /B1950, /TIME_DIFF) INPUTS date - reduced Julian date (= JD - 2400000), scalar or vector, MUST be double precision ra,dec - scalars giving right ascension and declination in DEGREES Equinox is J2000 unless the /B1950 keyword is set OUTPUTS: jdhelio - heliocentric reduced Julian date. If /TIME_DIFF is set, then HELIO_JD() instead returns the time difference in seconds between the geocentric and heliocentric Julian date. OPTIONAL INPUT KEYWORDS /B1950 - if set, then input coordinates are assumed to be in equinox B1950 coordinates. /TIME_DIFF - if set, then HELIO_JD() returns the time difference (heliocentric JD - geocentric JD ) in seconds EXAMPLE: What is the heliocentric Julian date of an observation of V402 Cygni (J2000: RA = 20 9 7.8, Dec = 37 09 07) taken June 15, 1973 at 11:40 UT? IDL> juldate, [1973,6,15,11,40], jd ;Get geocentric Julian date IDL> hjd = helio_jd( jd, ten(20,9,7.8)*15., ten(37,9,7) ) ==> hjd = 41848.9881 Wayne Warren (Raytheon ITSS) has compared the results of HELIO_JD with the FORTRAN subroutines in the STARLINK SLALIB library (see http://star-www.rl.ac.uk/). Time Diff (sec) Date RA(2000) Dec(2000) STARLINK IDL 1999-10-29T00:00:00.0 21 08 25. -67 22 00. -59.0 -59.0 1999-10-29T00:00:00.0 02 56 33.4 +00 26 55. 474.1 474.1 1940-12-11T06:55:00.0 07 34 41.9 -00 30 42. 366.3 370.2 1992-02-29T03:15:56.2 12 56 27.4 +42 10 17. 350.8 350.9 2000-03-01T10:26:31.8 14 28 36.7 -20 42 11. 243.7 243.7 2100-02-26T09:18:24.2 08 26 51.7 +85 47 28. 104.0 108.8 PROCEDURES CALLED: bprecess, xyz, zparcheck REVISION HISTORY: Algorithm from the book Astronomical Photometry by Henden, p. 114 Written, W. Landsman STX June, 1989 Make J2000 default equinox, add B1950, /TIME_DIFF keywords, compute variation of the obliquity W. Landsman November 1999
(See $IDLUTILS_DIR/goddard/pro/astro/helio_jd.pro)
HELIO_RV
NAME: HELIO_RV PURPOSE: Return the heliocentric radial velocity of a spectroscopic binary EXPLANATION: This function will return the heliocentric radial velocity of a spectroscopic binary star at a given heliocentric date given its orbit. CALLING SEQUENCE: Result = HELIO_RV ( JD ,T ,Period ,Gamma , K, [,e ,Omega ] ) INPUT: JD - Time of observation T - Time of periastron passage (max. +ve velocity for circular orbits), same time system as JD Period - the period in same units as JD Gamma - systemic velocity K - velocity semi-amplitude in the same units as Gamma. e - eccentricity of the orbit, default is 0. Omega - longitude of periastron in degrees. Must be specified for eccentric orbits. OUTPUT: The predicted heliocentric radial velocity in the same units as Gamma for the date(s) specified by Reduced_HJD. RESTRICTIONS: The user should ensure consistency with all time systems being used (i.e. JD and T should be in the same units and time system). Generally, users should reduce large time values by subtracting a large constant offset, which may improve numerical accuracy. If using the the routines JULDATE and HELIO_JD, the reduced HJD time system must be used throughtout. EXAMPLES: Example 1 What was the heliocentric radial velocity of the primary component of HU Tau at 1730 UT 25 Oct 1994? IDL> juldate ,[94,10,25,17,30],JD ;Get Geocentric julian date IDL> hjd = helio_jd(jd,ten(04,38,16)*15.,ten(20,41,05)) ; Convert to HJD IDL> print, helio_rv(hjd,46487.5303D,2.0563056D,-6.0,59.3) -62.965569 NB. 1. The routines JULDATE and HELIO_JD return a reduced HJD (HJD - 2400000) and so T and P must be specified in the same fashion. 2. The user should be careful to use double precision format to specify T and P to sufficient precision where necessary. Example 2 Plot two cycles of an eccentric orbit, e=0.6, omega=45 for both components of a binary star IDL> phi=findgen(100)/50.0 ; Generates 100 phase points IDL> plot, phi,helio_rv(phi,0,1,0,100,0.6,45),yrange=[-100,150] IDL> oplot, phi,helio_rv(phi,0,1,0,50,0.6,45+180) This illustrates both the use of arrays to perform multiple calculations and generating radial velocities for a given phase by setting T=0 and P=1. Note also that omega has been changed by 180 degrees for the orbit of the second component (the same 'trick' can be used for circular orbits). MODIFICATION HISTORY: Written by: Pierre Maxted CUOBS, October, 1994 Circular orbits handled by setting e=0 and omega=0 to allow binary orbits to be handled using omega and omega+180. Pierre Maxted,Feb 95 BUG - omega was altered by the routine - corrected Feb 95,Pierre Maxted Iteration for E changed to that given by Reidel , Feb 95,Pierre Maxted /SINGLE keyword removed. May 96,Pierre Maxted ; Removed limitation of time system on HJD, C. Markwardt, 2011-04-15 Change convergence test from relative to absolute precision on E Pierre Maxted, Apr 12
(See $IDLUTILS_DIR/goddard/pro/astro/helio_rv.pro)
HERMITE
NAME: HERMITE PURPOSE: To compute Hermite spline interpolation of a tabulated function. EXPLANATION: Hermite interpolation computes the cubic polynomial that agrees with the tabulated function and its derivative at the two nearest tabulated points. It may be preferable to Lagrangian interpolation (QUADTERP) when either (1) the first derivatives are known, or (2) one desires continuity of the first derivative of the interpolated values. HERMITE() will numerically compute the necessary derivatives, if they are not supplied. CALLING SEQUENCE: F = HERMITE( XX, FF, X, [ FDERIV = ]) INPUT PARAMETERS: XX - Vector giving tabulated X values of function to be interpolated Must be either monotonic increasing or decreasing FF - Tabuluated values of function, same number of elements as X X - Scalar or vector giving the X values at which to interpolate OPTIONAL INPUT KEYWORD: FDERIV - function derivative values computed at XX. If not supplied, then HERMITE() will compute the derivatives numerically. The FDERIV keyword is useful either when (1) the derivative values are (somehow) known to better accuracy than can be computed numerically, or (2) when HERMITE() is called repeatedly with the same tabulated function, so that the derivatives need be computed only once. OUTPUT PARAMETER: F - Interpolated values of function, same number of points as X EXAMPLE: Interpolate the function 1/x at x = 0.45 using tabulated values with a spacing of 0.1 IDL> x = findgen(20)*0.1 + 0.1 IDL> y = 1/x IDL> print,hermite(x,y,0.45) This gives 2.2188 compared to the true value 1/0.45 = 2.2222 IDL> yprime = -1/x^2 ;But in this case we know the first derivatives IDL> print,hermite(x,y,0.45,fderiv = yprime) == 2.2219 ;and so can get a more accurate interpolation NOTES: The algorithm here is based on the FORTRAN code discussed by Hill, G. 1982, Publ Dom. Astrophys. Obs., 16, 67. The original FORTRAN source is U.S. Airforce. Surveys in Geophysics No 272. HERMITE() will return an error if one tries to interpolate any values outside of the range of the input table XX PROCEDURES CALLED: None REVISION HISTORY: Written, B. Dorman (GSFC) Oct 1993, revised April 1996 Added FDERIV keyword, W. Landsman (HSTX) April 1996 Test for out of range values W. Landsman (HSTX) May 1996 Converted to IDL V5.0 W. Landsman September 1997 Use VALUE_LOCATE instead of TABINV W. Landsman February 2001
(See $IDLUTILS_DIR/goddard/pro/math/hermite.pro)
HEULER
NAME: HEULER PURPOSE: Change the coordinate system of a FITS header or astrometry structure EXPLANATION: Converts a FITS header or a astrometry structure containing WCS (world coordinate system) information between celestial, ecliptic, and Galactic coordinates CALLING SEQUENCE: HEULER, hdr, [/GALACTIC, /CELESTIAL, /ECLIPTIC, ALT_IN = , ALT_OUT=] or HEULER, astr, /GALACTIC, /CELESTIAL, /ECLIPTIC INPUT/OUTPUT PARAMETERS: hdr - FITS header (string array) containing WCS information or Astr - Astrometry structure as extracted from a FITS header by extast.pro (See EXTAST for more info). Header or astrometry structure will be modified by the program to contain astrometry in the new coordinates system. REQUIRED INPUT KEYWORDS: One of the following exclusive keywords is *required* /GALACTIC - Convert the header to Galactic coordinates /CELESTIAL - Convert the header to celestial (RA & Dec) coordinates /ECLIPTIC - Convert the header to ecliptic coordinates OPTIONAL INPUT KEYWORDS: The following two keywords apply if the FITS header contains multiple WCS keywords. See Section 3.3 of Greisen & Calabretta (2002, A&A, 395, 1061) for information about alternate astrometry keywords. ALT_IN - single character 'A' through 'Z' or ' ' specifying an alternate astrometry system present in the input FITS header. The default isto use the primary astrometry or ALT = ' '. If /ALT_IN is set, then this is equivalent to ALT_IN = 'A'. ALT_OUT - single character specifying the alternate WCS keywords to write the *output* astrometry. If not specified, then ALT_OUT is set equal to ALT_IN. RESTRICTIONS: Currently assumes that celestial and ecliptic coordinates are in J2000. Use HPRECESS if this is not the case. ST Guide Star (DSS) image headers are first converted to a standard tangent projection, prior to the coordinate conversion METHOD: The algorithm used is described in Section 2.7 of Calabretta & Greisen (2002, A&A, 395, 1077). The CRVAL coordinates are transformed directly using EULER. The new LONPOLE and LATPOLE values are then determined by transforming the pole of the new system to the old, and converted to native coordinates using WCS_ROTATE. EXAMPLE: A FITS header, hdr, has a standard tangent projection WCS information. Add an alternate 'G' Galactic projection. Note that the original WCS information will be left unchanged IDL> heuler, hdr, /Galactic, alt='G' PROCEDURES USED: EULER, EXTAST, GSSS_STDAST, PUTAST, SXADDHIST, WCS_ROTATE REVISION HISTORY: Written W. Landsman June 2003 Use PV2 tag in astrometry structure rather than PROJP1 W. L. May 2004 Use double precision to compute new North pole W.L. Aug 2005
(See $IDLUTILS_DIR/goddard/pro/astrom/heuler.pro)
HEXTRACT
NAME: HEXTRACT PURPOSE: Extract a subimage from an array and update astrometry in FITS header EXPLANATION: Extract a subimage from an array and create a new FITS header with updated astrometry for the subarray CALLING SEQUENCE: HEXTRACT, Oldim, Oldhd, [ Newim, Newhd, x0, x1, y0, y1, /SILENT ] or HEXTRACT, Oldim, Oldhd, [x0, x1, y0, y1, /SILENT, ERRMSG = ] INPUTS: Oldim - the original image array Oldhd - the original image header OPTIONAL INPUTS: x0, x1, y0, y1 - respectively, first and last X pixel, and first and last Y pixel to be extracted from the original image, integer scalars. HEXTRACT will convert these values to long integers. If omitted, HEXTRACT will prompt for these parameters OPTIONAL OUTPUTS: Newim - the new subarray extracted from the original image Newhd - header for newim containing updated astrometry info If output parameters are not supplied or set equal to -1, then the HEXTRACT will modify the input parameters OLDIM and OLDHD to contain the subarray and updated header. OPTIONAL INPUT KEYWORD: ALT - Single character 'A' through 'Z' or ' ' specifying which astrometry system to modify in the FITS header. The default is to use the primary astrometry or ALT = ' '. See Greisen and Calabretta (2002) for information about alternate astrometry keywords. /SILENT - If set and non-zero, then a message describing the extraction is not printed at the terminal. This message can also be suppressed by setting !QUIET. OPTIONAL KEYWORD OUTPUT: ERRMSG - If this keyword is supplied, then any error mesasges will be returned to the user in this parameter rather than depending on on the MESSAGE routine in IDL. If no errors are encountered then a null string is returned. PROCEDURE: The FITS header parameters NAXIS1, NAXIS2, CRPIX1, and CRPIX2 are updated for the extracted image. EXAMPLE: Read an image from a FITS file 'IMAGE', extract a 512 x 512 subimage with the same origin, and write to a new FITS file 'IMAGENEW' IDL> im = READFITS( 'IMAGE', hdr ) ;Read FITS files into IDL arrays IDL> hextract, im, h, 0, 511, 0, 511 ;Extract 512 x 512 subimage IDL> writefits, 'IMAGENEW', im ,h ;Write subimage to a FITS file PROCEDURES CALLED CHECK_FITS, STRN(), SXPAR(), SXADDPAR, SXADDHIST MODIFICATION HISTORY: Written, Aug. 1986 W. Landsman, STX Corp. Use astrometry structure, W. Landsman Jan, 1994 Minor fix if bad Y range supplied W. Landsman Feb, 1996 Added /SILENT keyword W. Landsman March, 1997 Added ERRMSG keyword W. Landsman May 2000 Work for dimensions larger than 32767 W.L., M.Symeonidis Mar 2007 Added ALT keyword W.L. April 2007
(See $IDLUTILS_DIR/goddard/pro/astrom/hextract.pro)
HGREP
NAME: HGREP PURPOSE: Find a substring in a FITS header (or any other string array) CALLING SEQUENCE: HGREP, header, substring, [/KEEPCASE, /LINENUM ] INPUTS: header - FITS header or other string array substring - scalar string to find in header; if a numeric value is supplied, it will be converted to type string OPTIONAL INPUT KEYWORDS: /KEEPCASE: if set, then look for an exact match of the input substring Default is to ignore case . /LINENUM: if set, prints line number of header in which substring appears OUTPUTS: None, results are printed to screen EXAMPLE: Find every place in a FITS header that the word 'aperture' appears in lower case letters and print the element number of the header array: IDL> hgrep, header, 'aperture', /keepcase, /linenum HISTORY: Written, Wayne Landsman (Raytheon ITSS) August 1998 Adapted from STIS version by Phil Plait/ ACC November 14, 1997 Remove trailing spaces if a non-string is supplied W. Landsman Jun 2002
(See $IDLUTILS_DIR/goddard/pro/misc/hgrep.pro)
HISTOGAUSS
NAME: HISTOGAUSS PURPOSE: Histograms data and overlays it with a Gaussian. Draws the mean, sigma, and number of points on the plot. CALLING SEQUENCE: HISTOGAUSS, Sample, A, [XX, YY, GX, GY, /NOPLOT, /NOFIT, FONT=, CHARSIZE = ] INPUT: SAMPLE = Vector to be histogrammed OUTPUT ARGUMENTS: A = coefficients of the Gaussian fit: Height, mean, sigma A[0]= the height of the Gaussian A[1]= the mean A[2]= the standard deviation A[3]= the half-width of the 95% conf. interval of the standard mean A[4]= 1/(N-1)*total( (y-mean)/sigma)^2 ) = a measure of normality Below: superceded. The formula is not entirely reliable. A[4]= measure of the normality of the distribution. =1.0, perfectly normal. If no more than a few hundred points are input, there are formulae for the 90 and 95% confidence intervals of this quantity: M=ALOG10(N-1) ; N = number of points T90=ABS(.6376-1.1535*M+.1266*M^2) ; = 90% confidence interval IF N LT 50 THEN T95=ABS(-1.9065-2.5465*M+.5652*M^2) $ ELSE T95=ABS( 0.7824-1.1021*M+.1021*M^2) ;95% conf. (From Martinez, J. and Iglewicz, I., 1981, Biometrika, 68, 331-333.) XX = the X coordinates of the histogram bins (CENTER) YY = the Y coordinates of the histogram bins GX = the X coordinates of the Gaussian fit GY = the Y coordinates of the Gaussian fit OPTIONAL INPUT KEYWORDS: /NOPLOT - If set, nothing is drawn /FITIT If set, a Gaussian is actually fitted to the distribution. By default, a Gaussian with the same mean and sigma is drawn; the height is the only free parameter. CHARSIZE Size of the characters in the annotation. Default = 0.82. FONT - scalar font graphics keyword (-1,0 or 1) for text /WINDOW - set to plot to a resizeable graphics window _EXTRA - Any value keywords to the cgPLOT command (e.g. XTITLE) may also be passed to HISTOGAUSS SUBROUTINE CALLS: BIWEIGHT_MEAN, which determines the mean and std. dev. AUTOHIST, which draws the histogram GAUSSFIT() (IDL Library) which does just that REVISION HISTORY: Written, H. Freudenreich, STX, 12/89 More quantities returned in A, 2/94, HF Added NOPLOT keyword and print if Gaussian, 3/94 Stopped printing confidence limits on normality 3/31/94 HF Added CHARSIZE keyword, changed annotation format, 8/94 HF Simplified calculation of Gaussian height, 5/95 HF Convert to V5.0, use T_CVF instead of STUDENT_T, GAUSSFIT instead of FITAGAUSS W. Landsman April 2002 Correct call to T_CVF for calculation of A[3], 95% confidence interval P. Broos/W. Landsman July 2003 Allow FONT keyword to be passed. T. Robishaw Apr. 2006 Use Coyote Graphics for plotting W.L. Mar 2011 Better formatting of text output W.L. May 2012
(See $IDLUTILS_DIR/goddard/pro/robust/histogauss.pro)
HOR2EQ
NAME: HOR2EQ PURPOSE: Converts local horizon coords (alt-az) of something to equatorial (ra-dec). EXPLANATION: This is a nice code to calculate equatorial (ra,dec) coordinates from horizon (alt,az) 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. CALLING SEQUENCE: HOR2EQ, alt, az, jd, ra, dec, [ha, LAT= , LON= , /WS, OBSNAME= , $ /B1950 , PRECESS_= 0, NUTATE_= 0, REFRACT_= 0, $ ABERRATION_= 0, ALTITUDE= , /VERBOSE, _EXTRA= ] INPUT VARIABLES alt : altitude (in degrees) [scalar or vector] az : azimuth angle (in degrees, measured EAST from NORTH, but see keyword WS below.) [scalar or vector] JD : Julian Date [scalar or vector], double precision 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. 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 explicitly, 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 ra : Right Ascension of object (J2000) in degrees (FK5); scalar or vector. dec : Declination of object (J2000) in degrees (FK5), scalar or vector. ha : hour angle (in degrees) (optional) DEPENDENCIES: NUTATE, PRECESS, ADSTRING(), SUNPOS, OBSERVATORY (from the astrolib) CO_NUTATE, CO_ABERRATION, CO_REFRACT, HADEC2ALTAZ BASIC STEPS Precess Ra-Dec to current equinox. Nutation Correction to Ra-Dec Aberration correction to Ra-Dec Calculate Local Mean Sidereal Time Calculate Local Apparent Sidereal Time Calculate Hour Angle Do Spherical Trig to find Apparent Alt-Az Apply refraction correction to find observed Alt. CORRECTIONS I DO NOT MAKE: * Deflection of Light by the sun due to GR. (typically milliarcseconds, can be arcseconds 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: You are at Kitt Peak National Observatory, looking at a star at azimuth angle 264d 55m 06s and elevation 37d 54m 41s (in the visible). Today is Dec 25, 2041 and the local time is 10 PM precisely. What is the ra and dec (J2000) of the star you're looking at? The temperature here is about 0 Celsius, and the pressure is 781 millibars. The Julian date for this time is 2466879.7083333 IDL> hor2eq, ten(37,54,41), ten(264,55,06), 2466879.7083333d, ra, dec, $ /verb, obs='kpno', pres=781.0, temp=273.0 The program produces this output (because the VERBOSE keyword was set): Latitude = +31 57 48.0 Longitude = *** 36 0.0 ; longitude prints weirdly b/c of negative input to ADSTRING!! Julian Date = 2466879.708333 Az, El = 17 39 40.4 +37 54 41.0 (Observer Coords) Az, El = 17 39 40.4 +37 53 39.6 (Apparent Coords) LMST = +03 53 54.1 LAST = +03 53 53.6 Hour Angle = +03 38 30.1 (hh:mm:ss) Ra, Dec: 00 15 23.5 +15 25 1.9 (Apparent Coords) Ra, Dec: 00 15 24.2 +15 25 0.1 (J2041.9841) Ra, Dec: 00 13 14.1 +15 11 0.3 (J2000) The star is therefore Algenib! Compare the derived Ra, Dec with what XEPHEM got: Ra, Dec: 00 13 14.2 +15 11 1.0 (J2000) AUTHOR: Chris O'Dell Univ. of Wisconsin-Madison Observational Cosmology Laboratory Email: odell@cmb.physics.wisc.edu REVISION HISTORY: Made all integers type LONG W. Landsman September 2007 Fixed for case of scalar Julian date but vector positions W L June 2009
(See $IDLUTILS_DIR/goddard/pro/astro/hor2eq.pro)
HOST_TO_IEEE
NAME: HOST_TO_IEEE PURPOSE: Translate an IDL variable from host to IEEE representation EXPLANATION: The variable is converted from the format used by the host architecture into IEEE-754 representation ("big endian" as used, e.g., in FITS data ). Duplicates most of the functionality of the SWAP_ENDIAN_INPLACE procedure with the addition of the IDLTYPE keyword. CALLING SEQUENCE: HOST_TO_IEEE, data, [ IDLTYPE = ] INPUT-OUTPUT PARAMETERS: data - any IDL variable, scalar or vector. It will be modified by HOST_TO_IEEE to convert from host to IEEE representation. Byte and string variables are returned by HOST_TO_IEEE unchanged OPTIONAL KEYWORD INPUTS: IDLTYPE - scalar integer (1-15) specifying the IDL datatype according to the code given by the SIZE function. This keyword will usually be used when supplying a byte array that needs to be interpreted as another data type (e.g. FLOAT). EXAMPLE: Suppose FITARR is a 2880 element byte array to be converted to a FITS record and interpreted a FLOAT data. IDL> host_to_ieee, FITARR, IDLTYPE = 4 METHOD: The BYTEORDER procedure is called with the appropriate keywords MODIFICATION HISTORY: Adapted from CONV_UNIX_VAX, W. Landsman Hughes/STX January, 1992 Version for IDL V5.0 August 1997 Converted to IDL V5.0 W. Landsman September 1997 Added new integer datatypes C. Markwardt/W. Landsman July 2000 Use /SWAP_IF_LITTLE_ENDIAN keyword for 64bit types W. Landsman Feb 2003 Do not use XDR keywords to BYTEORDER for much improved speed W. Landsman April 2006
(See $IDLUTILS_DIR/goddard/pro/misc/host_to_ieee.pro)
HPRECESS
NAME: HPRECESS PURPOSE: Precess the astrometry in a FITS header to a new equinox CALLING SEQUENCE: HPRECESS, HDR, [ yearf ] INPUT-OUTPUT: HDR - FITS Header, must contain the CRVAL astrometry keywords, and either an EPOCH or EQUINOX keyword. HDR will be modified to contain the precessed astrometry OPTIONAL INPUT: YEARF - Scalar, giving the year of the new (Final) equinox. If not supplied, user will be prompted for this value. METHOD: The CRVAL and CD (or CROTA) keywords are extracted from the header and precessed to the new equinox. The EPOCH or EQUINOX keyword in the header is updated. A HISTORY record is added RESTRICTIONS: The FK5 reference frame is assumed for both equinoxes. PROCEDURES USED: EXTAST, GET_EQUINOX(), SXADDPAR, SXADDHIST, PRECESS, PRECESS_CD PUTAST, ZPARCHECK REVISION HISTORY: Written W. Landsman STX July, 1988 CD matrix precessed - February, 1989 Update EQUINOX keyword when CROTA2 present November, 1992 Recognize a GSSS header June, 1994 Additional Noparams value recognize for storing CDs. RSH, 6 Apr 95 Understand reversed X,Y (X-Dec, Y-RA) axes, W. Landsman October 1998 Correct algorithm when CROTA2 is in header W. Landsman April 2006 Correct sign error introduced April 2006, include CDELT values when computing rotation of pole W. Landsman July 2007 Call hprecess/jprecess for 1950<>2000 W. L. Aug 2009
(See $IDLUTILS_DIR/goddard/pro/astrom/hprecess.pro)
HPRINT
NAME: HPRINT PURPOSE: Display a FITS header (or other string array) EXPLANATION: On a GUI terminal, the string array is displayed using XDISPSTR. If printing at a non-GUI terminal, the string array is printed 1 line at a time, to make sure that each element of the string array is displayed on a separate line. CALLING SEQUENCE: HPRINT, h, [ firstline ] INPUTS: H - FITS header (or any other string array). OPTIONAL INPUT: FIRSTLINE - scalar integer specifying the first line to begin displaying. The default is FIRSTLINE = 1, i.e. display all the lines. If Firstline is negative, then the first line to be printed is counted backward from the last line. NOTES: When displaying at the terminal, HPRINT has the following differences from the intrinsic PRINT procedure (1) Arrays are printed one line at a time to avoid a space between 80 character lines (2) Lines are trimmed with STRTRIM before being printed to speed up display (3) The /more option is used for output. EXAMPLE: Read the header from a FITS file named 'test.fits' and display it at the terminal beginning with line 50 IDL> h = headfits( 'test.fits') ;Read FITS header IDL> hprint, h, 50 ;Display starting at line 50 To print the last 25 lines of the header IDL> hprint, h, -25 REVISION HISTORY: Written W. Landsman July, 1990 Added test for user quit July, 1991 Added optional FIRSTLINE parameter November, 1992 Modified for when STDOUT is not a TTY W. Landsman September 1995 Converted to IDL V5.0 W. Landsman September 1997 Fixed printing in IDLDE, C. Gehman August, 1998 Skip PRINTF if IDL in demo mode W. Landsman October 2004 Fixed bug on non-terminals, William Thompson, 18-Oct-2004 Assume since V5.4 Use BREAK instead of GOTO W. Landsman Apr 2006 Call XDISPSTR on a GUI terminal W. Landsman Jun 2006
(See $IDLUTILS_DIR/goddard/pro/misc/hprint.pro)
HREBIN
NAME: HREBIN PURPOSE: Expand or contract a FITS image using (F)REBIN and update the header EXPLANATION: If the output size is an exact multiple of the input size then REBIN is used, else FREBIN is used. User can either overwrite the input array, or write to new variables. CALLING SEQUENCE: HREBIN, oldhd ;Special calling sequence to just update header HREBIN, oldim, oldhd, [ newim, newhd, newx, newy, OUTSIZE = ,/SAMPLE, ERRMSG = ] INPUTS: OLDIM - the original image array OLDHD - the original image FITS header, string array OPTIONAL INPUTS: NEWX - size of the new image in the X direction, integer scalar NEWY - size of the new image in the Y direction, integer scalar HREBIN will prompt for NEWX and NEWY if not supplied OPTIONAL OUTPUTS: NEWIM - the image after expansion or contraction with REBIN NEWHD - header for newim containing updated astrometry info If output parameters are not supplied, the program will modify the input parameters OLDIM and OLDHD to contain the new array and updated header. OPTIONAL INPUT KEYWORDS: /SAMPLE - Expansion or contraction is done using REBIN which uses bilinear interpolation when magnifying and boxaveraging when minifying. If the SAMPLE keyword is supplied and non-zero, then nearest neighbor sampling is used in both cases. Keyword has no effect when output size is not a multiple of input size. OUTSIZE - Two element integer vector which can be used instead of the NEWX and NEWY parameters to specify the output image dimensions ALT - Single character 'A' through 'Z' or ' ' specifying which astrometry system to modify in the FITS header. The default is to use the primary astrometry of ALT = ' '. See Greisen and Calabretta (2002) for information about alternate astrometry keywords. OPTIONAL KEYWORD OUTPUT: ERRMSG - If this keyword is supplied, then any error mesasges will be returned to the user in this parameter rather than depending on on the MESSAGE routine in IDL. If no errors are encountered then a null string is returned. PROCEDURE: The parameters BSCALE, NAXIS1, NAXIS2, CRPIX1, and CRPIX2 and the CD (or CDELT) parameters are updated for the new FITS header. EXAMPLE: Compress a 2048 x 2048 image array IM, with FITS header HDR, to a 724 x 724 array. Overwrite the input variables with the compressed image and header. IDL> hrebin, im, hdr, OUT = [724, 724] PROCEDURES USED: CHECK_FITS, EXTAST, FREBIN, GSSS_STDAST, STRN(), SXPAR(), SXADDHIST, SXADDPAR, ZPARCHECK MODIFICATION HISTORY: Written, December 1990 W. Landsman, ST System Corp. Update CD1_1 keywords W. Landsman November 1992 Check for a GSSS header W. Landsman June 1994 Update BSCALE even if no astrometry present W. Landsman May 1997 Converted to IDL V5.0 W. Landsman September 1997 Use FREBIN to accept sizes that are not a integer multiple of the original size W. Landsman August 1998 Correct for "edge" effects when expanding with REBIN W. Landsman Apr. 1999 Fixed initialization of header only call broken in Apr 98 change May. 1999 Remove reference to obsolete !ERR W. Landsman February 2000 Use double precision formatting for CD matrix W. Landsman April 2000 Recognize PC00n00m astrometry format W. Landsman December 2001 Correct astrometry for integral contraction W. Landsman April 2002 Fix output astrometry for non-equal plate scales for PC matrix or CROTA2 keyword, added ALT keyword. W. Landsman May 2005 Update distortion parameters if present W. Landsman August 2007 Don't update BSCALE/BZERO for unsigned integer W.Landsman Mar 2008 Use post-V6.0 notation W. Landsman Nov 2011
(See $IDLUTILS_DIR/goddard/pro/astrom/hrebin.pro)
HREVERSE
NAME: HREVERSE PURPOSE: Reverse an image about either dimension and update FITS astrometry EXPLANATION: Reverse an image about either the X or Y axis, and create a new header with updated astrometry for the reversed image. CALLING SEQUENCE: HREVERSE,oldim,oldhd, [ subs, /SILENT ] ;Update input image and header or HREVERSE, oldim, oldhd, newim, newhd, [ subs, /SILENT ] INPUTS: OLDIM - the original image array OLDHD - the original image header OPTIONAL INPUTS: SUBS - Subs equals 1 to reverse the order of the X dimension, 2 to reverse Y order. If omitted, then HREVERSE will prompt for this scalar parameter. OPTIONAL OUTPUTS: NEWIM - the rotated image, with the same dimensions as Oldim NEWHD - header for newim containing updated astrometry info If output parameters are not supplied, the program will modify the input parameters OLDIM and OLDHD to contain the rotated image and updated header. OPTIONAL KEYWORD INPUT: SILENT - if set and non-zero, then informative messages are suppressed. OPTIONAL KEYWORD OUTPUT: ERRMSG - If this keyword is supplied, then any error mesasges will be returned to the user in this parameter rather than depending on on the MESSAGE routine in IDL. If no errors are encountered then a null string is returned. SIDE EFFECTS: A right-handed coordinate system is converted into a left- handed one, and vice-versa. PROCEDURE: The User's Library procedure REVERSE is used to reverse the image. The CD and CRPIX header parameters are updated for the new header. For AIPS type astrometry, the CDELT parameters are also updated. A history record is also added to the header PROCEDURES USED: CHECK_FITS, EXTAST, REVERSE(), STRN(), SXADDPAR MODIFICATION HISTORY: Written, Aug. 1986 W. Landsman, STI Corp. Error modifying CROTA angles corrected 9-23-88 Added format keyword, J. Isensee, July, 1990 Work for ST Guide Star images, W. Landsman HSTX, May 1995 Compute CRPIX1 correctly for X reversal W. Landsman HSTX August 1995 Converted to IDL V5.0 W. Landsman September 1997 Added ERRMSG, Use double precision formatting, W. Landsman April 2000 Recognize PC00n00m astrometry matrix W. Landsman December 2001
(See $IDLUTILS_DIR/goddard/pro/astrom/hreverse.pro)
HROT
NAME: HROT PURPOSE: Rotate an image and create new FITS header with updated astrometry. EXPLANATION: Cubic, bilinear or nearest neighbor interpolation can be used. CALLING SEQUENCE: HROT, oldim, oldhd, [ newim, newhd, angle, xc, yc, int, MISSING =, INTERP =, CUBIC = , /PIVOT] INPUTS: OLDIM - the original image array OLDHD - the original FITS image header, string array OPTIONAL INPUTS: NEWIM - If NEWIM is set to -1, then the old image and header will be updated ANGLE - Rotation angle, degrees clockwise, scalar XC - X Center of rotation (-1 for center of image) YC - Y Center of rotation (-1 for center of image) INT - 0 for nearest neighbor, 1 for bilinear interpolation 2 for cubic interpolation. OPTIONAL OUTPUTS: NEWIM - the rotated image, with the same dimensions as Oldim NEWHD - header for newim containing updated astrometry info If output parameters are not supplied, the program will modify the input parameters OLDIM and OLDHD to contain the rotated image and updated header. OPTIONAL INPUT KEYWORD: MISSING - Set this keyword to a scalar value which will be assigned to pixels in the output image which do not correspond to existing input images (e.g if one rotates off-center). If not supplied then linear extrapolation is used. ***NOTE: A bug was introduced into the POLY_2D function in IDL V5.5 (fixed in V6.1) such that the MISSING keyword may not work properly with floating point data*** INTERP - scalar set to either 0 (nearest neighbor interpolation), 1 (bilinear interpolation), or 2 (cubic interpolation). The interpolation type can be specified by either the INTERP keyword or the int parameter CUBIC - If set and non-zero then cubic interpolation is used (see ROT), which is equivalent to setting INT = 2. In IDL V5.0 and later, this keyword can also be set to a value between -1 and 0. /PIVOT - Setting this keyword causes the image to pivot around the point XC, YC, so that this point maps into the same point in the output image. If this keyword is set to 0 or omitted, then the point XC, YC in the input image is mapped into the center of the output image. OPTIONAL OUTPUT KEYWORD: ERRMSG - If this keyword is supplied, then any error mesasges will be returned to the user in this parameter rather than depending on on the MESSAGE routine in IDL. If no errors are encountered then a null string is returned. EXAMPLE: Rotate an image non-interactively 30 degrees clockwise. Use bilinear interpolation, and set missing values to 0. IDL> HROT, im_old, h_old, im_new, h_new, 30, -1, -1, 1, MIS = 0 As above but update the input image and header and pivot about (100,120) IDL> HROT, im_old, h_old, -1, -1, 30, 100, 120, 1, MIS = 0, /PIVOT RESTRICTIONS: Unlike the ROT procedure, HROT cannot be used to magnify or or demagnify an image. Use HCONGRID or HREBIN instead. PROCEDURE: The image array is rotated using the ROT procedure. The CD (or CROTA) and CRPIX parameters, if present in the FITS header, are updated for the new rotation. History records are also added to the header PROCEDURES USED: CHECK_FITS, EXTAST, GETOPT(), GETROT, ROT(), STRN(), SXADDPAR MODIFICATION HISTORY: Written, Aug. 1986 W. Landsman, ST Systems Corp. Added MISSING keyword, W. Landsman March, 1991 Added cubic interpolation, use astrometry structure Feb 1994 Removed call to SINCE_VERSION() W. Landsman March 1996 Assume at least V3.5, add CUBIC parameter W. Landsman March 1997 Converted to IDL V5.0 W. Landsman September 1997 Fix for CROTA2 defined and CDELT1 NE CDELT2, W. Landsman November 1998 Fix documentation to specify clockwise rotation W. Landsman Dec. 1999 Added /PIVOT keyword W. Landsman January 2000 Added ERRMSG, Use double precision formatting, W. Landsman April 2000 Consistent conversion between CROTA and CD matrix W. Landsman Oct 2000 Work for both CD001001 and CDELT defined W. Landsman March 2001 Recognize PC matrix astrometry W. Landsman December 2001 Update astrometry correctly when /PIVOT applied W. Landsman March 2002 Update CROTA2 astrometry correctly, approximate GSSS W.L. June 2003 Work with CD1_1, PC1_1 and CROTA keywords W. L. July 2003 Work with angle as a 1 element vector W.L. May 2006
(See $IDLUTILS_DIR/goddard/pro/astrom/hrot.pro)
HROTATE
NAME: HROTATE PURPOSE: Apply the IDL ROTATE function and update astrometry in a FITS header EXPLANATION: Apply the intrinsic IDL ROTATE function to an image and update astrometry in the associated FITS header. CALLING SEQUENCE: HROTATE, oldim, oldhd, newim, newhd, direction or HROTATE, oldim, oldhd, direction INPUTS: OLDIM - the original image array OLDHD - the original FITS image header, string array DIRECTION - Scalar integer (0-7) specifying rotation direction, exactly as specified by the IDL ROTATE function. Direction Transpose? Rot. CCW X1 Y1 ---------------------------------------- 0 No None X0 Y0 (no change) 1 No 90 -Y0 X0 2 No 180 -X0 -Y0 3 No 270 Y0 -X0 4 Yes None Y0 X0 5 Yes 90 -X0 Y0 6 Yes 180 -Y0 -X0 7 Yes 270 X0 -Y0 OPTIONAL OUTPUTS: NEWIM - the rotated image, with the same dimensions as Oldim NEWHD - header for newim containing updated astrometry info If output parameters are not supplied, the program will modify the input parameters OLDIM and OLDHD to contain the rotated image and updated header. OPTIONAL KEYWORD OUTPUT: ERRMSG - If this keyword is supplied, then any error mesasges will be returned to the user in this parameter rather than depending on on the MESSAGE routine in IDL. If no errors are encountered then a null string is returned. EXAMPLE: Rotate an image exactly 90 degrees counterclockwise and update the FITS image array and header. IDL> HROT, im, h, im_new, h_new, 1 PROCEDURE: The image array is rotated using the ROTATE function. The CD (or CROTA) and CRPIX parameters, if present in the FITS header, are updated for the new rotation. History records are also added to the header RESTRICTIONS: Does not work Guide Star Survey (GSS) astrometry. Use GSSS_STDAST to first convert PROCEDURES USED: CHECK_FITS(), SXADDPAR, EXTAST MODIFICATION HISTORY: Written, Mar 1997 W. Landsman, Hughes STX Work for non-square images W. Landsman June 1998 Raytheon STX Fix for different plate scales, and CROTA2 defined, November 1998 Added ERRMSG, Use double precision formatting, W. Landsman April 2000 Consistent conversion between CROTA and CD matrix W. Landsman Oct 2000 Correct update when CROTA keyword present W. Landsman June 2003 Update CDELT for AIPS-style astrometry headers M. Perrin/WL Jul 2003 Convert GSS astrometry to WCS W. Landsman November 2004 Work even if no astrometry present, just update NAXIS* WL June 2011
(See $IDLUTILS_DIR/goddard/pro/astrom/hrotate.pro)
IEEE_TO_HOST
NAME: IEEE_TO_HOST PURPOSE: Translate an IDL variable from IEEE-754 to host representation EXPLANATION: The variable is translated from IEEE-754 ("big-endian" as used, for example, in FITS data ), into the host machine architecture. Duplicates most of the functionality of the SWAP_ENDIAN_INPLACE procedure introduced in V5.6, with the addition of the IDLTYPE keyword. CALLING SEQUENCE: IEEE_TO_HOST, data, [ IDLTYPE = , ] INPUT-OUTPUT PARAMETERS: data - any IDL variable, scalar or vector. It will be modified by IEEE_TO_HOST to convert from IEEE to host representation. Byte and string variables are returned by IEEE_TO_HOST unchanged OPTIONAL KEYWORD INPUTS: IDLTYPE - scalar integer (1-15) specifying the IDL datatype according to the code given by the SIZE function. This keyword is usually when DATA is a byte array to be interpreted as another datatype (e.g. FLOAT). EXAMPLE: A 2880 byte array (named FITARR) from a FITS record is to be interpreted as floating and converted to the host representaton: IDL> IEEE_TO_HOST, fitarr, IDLTYPE = 4 METHOD: The BYTEORDER procedure is called with the appropriate keyword MODIFICATION HISTORY: Written, W. Landsman Hughes/STX May, 1992 Converted to IDL V5.0 W. Landsman September 1997 Under VMS check for IEEE -0.0 values January 1998 VMS now handle -0.0 values under IDL V5.1 July 1998 Added new integer datatypes C. Markwardt/W. Landsman July 2000 Post-V5.1 version, no VMS negative zero check W. Landsman July 2001 Use size(/type) W. Landsman December 2002 Use /SWAP_IF_LITTLE_ENDIAN keyword for 64bit types W. Landsman Feb 2003 Do not use XDR keywords to BYTEORDER for much improved speed W. Landsman April 2006 Update cosmetic typo for structures W. Landsman October 2006
(See $IDLUTILS_DIR/goddard/pro/misc/ieee_to_host.pro)
IMAGE_DIMENSIONS
The purpose of this function is to return the various dimensions of the image, and also to extract relevant image information via output keywords. The function works only with 2D and 3D (24-bit) images, with or without alpha channels. :Categories: Utilities :Returns: A vector containing the size of each dimension of the image. It is equivalent to calling the SIZE function with the DIMENSIONS keyword set. :Params: image: in, optional, type=various The image variable from which information is to be obtained. :Keywords: alphachannel: out, optional, type=boolean This keyword is set to 1 if there is an alpha channel in the image. Otherwise, the keyword is set to 0. trueindex: out, optional, type=integer The position of the "true color" index in the return value. Is -1 for 2D images. xindex: out, optional, type=integer The index (position) of the X dimension in the return value. xsize: out, optional, type=integer The X size of the image. yindex: out, optional, type=integer The index (position) of the Y dimension in the return value. ysize: out, optional, type=integer The Y size of the image. :Examples: To load open a window of the appropriate size and display a 24-bit image:: dims = Image_Dimensions(image24, XSize=xsize, YSize=ysize, TrueIndex=trueindex) Window, XSIZE=xsize, YSIZE=ysize TV, image24, TRUE=trueindex :Author: FANNING SOFTWARE CONSULTING:: David W. Fanning 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com/ :History: Modification History:: Written by: David W. Fanning, 5 March 2003. Added support for alpha channel images, include ALPHACHANNEL keyword. 13 May 2009. DWF. :Copyright: Copyright (c) 2003-2011, Fanning Software Consulting, Inc.
(See $IDLUTILS_DIR/goddard/pro/coyote/image_dimensions.pro)
IMCONTOUR
NAME: IMCONTOUR PURPOSE: Make a contour plot labeled with astronomical coordinates. EXPLANATION: The type of coordinate display is controlled by the keyword TYPE Set TYPE=0 (default) to measure distances from the center of the image (IMCONTOUR will decide whether the plotting units will be in arc seconds, arc minutes, or degrees depending on image size.) Set /TYPE for standard RA and Dec labeling By using the /NODATA keyword, IMCONTOUR can also be used to simply provide astronomical labeling of a previously displayed image. CALLING SEQUENCE IMCONTOUR, im, hdr,[ /TYPE, /PUTINFO, XDELTA = , YDELTA =, _EXTRA = XMID=, YMID= ] INPUTS: IM - 2-dimensional image array HDR - FITS header associated with IM, string array, must include astrometry keywords. IMCONTOUR will also look for the OBJECT and IMAGE keywords, and print these if found and the PUTINFO keyword is set. OPTIONAL PLOTTING KEYWORDS: /TYPE - the type of astronomical labeling to be displayed. Either set TYPE = 0 (default), distance to center of the image is marked in units of Arc seconds, arc minutes, or degrees TYPE = 1 astronomical labeling with Right ascension and declination. /PUTINFO - If set, then IMCONTOUR will add information about the image to the right of the contour plot. Information includes image name, object, image center, image center, contour levels, and date plot was made XDELTA, YDELTA - Integer scalars giving spacing of labels for TYPE=1. Default is to label every major tick (XDELTA=1) but if crowding occurs, then the user might wish to label every other tick (XDELTA=2) or every third tick (XDELTA=3) XMID, YMID - Scalars giving the X,Y position from which offset distances will be measured when TYPE=0. By default, offset distances are measured from the center of the image. /OVERLAY - If set, then IMCONTOUR is assumed to overlay an image. This requires 1 extra pixel be included on the X and Y axis, to account for edge effects in the image display. Setting OVERLAY provide a better match of the contour and underlying image but is not as aesthetically pleasing because the contours will not extend to the axes. Any keyword accepted by CONTOUR may also be passed through IMCONTOUR since IMCONTOUR uses the _EXTRA facility. IMCONTOUR uses its own defaults for the XTITLE, YTITLE XMINOR, YMINOR, and SUBTITLE keywords but these may be overridden. Note in particular the /NODATA keyword which can be used if imcontour.pro is to only provide labeling. NOTES: (1) The contour plot will have the same dimensional ratio as the input image array (2) To contour a subimage, use HEXTRACT before calling IMCONTOUR (3) Use the /NODATA keyword to simply provide astronomical labeling of a previously displayed image. (4) The IMCONTOUR display currently does not indicate the image rotation in any way, but only specifies coordinates along the edges of the image EXAMPLE: Overlay the contour of an image, im2, with FITS header, h2, on top of the display of a different image, im1. Use RA, Dec labeling, and seven equally spaced contour levels. The use of a program like David Fanning's cgImage http://www.idlcoyote.com/programs/cgimage.pro is suggested to properly overlay plotting and image coordinates. The /Keep_aspect_ratio keyword must be used. IDL> cgimage,im1,/keep_aspect, position = pos IDL> imcontour,im2,h2,nlevels=7,/Noerase,/TYPE,position = pos PROCEDURES USED: CHECK_FITS, EXTAST, GETROT, TICPOS, TICLABEL, TIC_ONE, TICS, XYAD CONS_RA(), CONS_DEC(), ADSTRING() REVISION HISTORY: Written W. Landsman STX May, 1989 Fixed RA,Dec labeling W. Landsman November, 1991 Fix plotting keywords W.Landsman July, 1992 Recognize GSSS headers W. Landsman July, 1994 Removed Channel keyword for V4.0 compatibility June, 1995 Add _EXTRA CONTOUR plotting keywords W. Landsman August, 1995 Add XDELTA, YDELTA keywords W. Landsman November, 1995 Use SYSTIME() instead of !STIME August, 1997 Remove obsolete !ERR system variable W. Landsman May 2000 Added XMID, YMID keywords to specify central position (default is still center of image) W. Landsman March 2002 Recognize Galactic coordinates, fix Levels display when /PUTINFO set W. Landsman May 2003 Correct conversion from seconds of RA to arcmin is 4 not 15. M. Perrin July 2003 Fix integer truncation which appears with tiny images WL July 2004 Changed some keyword_set() to N_elements WL Sep 2006 Work to 1 pixels level when overlaying an image,added /OVERLAY keyword Use FORMAT_AXIS_VALUES() W. Landsman Jan 2008 Make /OVERLAY always optional W. Landsman Feb 2008 Check if RA crosses 0 hours WL Aug 2008 Use Coyote Graphics WL Feb 2011
(See $IDLUTILS_DIR/goddard/pro/astro/imcontour.pro)
IMDBASE
NAME: IMDBASE PURPOSE: Find the sources in an IDL database that are located on a given image. CALLING SEQUENCE: imdbase, hdr, [catalogue, list, ALT=, XPOS= ,YPOS=, XRANGE= ,YRANGE= , SUBLIST =, /SILENT ] INPUTS: hdr - FITS image header containing astrometry, and the NAXIS1, NAXIS2 keywords giving the image size catalogue - string giving name of catalogue in database. If not supplied then the currently open database is used. The database must contain the (preferably indexed) fields RA (in hours) and DEC. Type DBHELP for a list of the names of available catalogues. OPTIONAL OUTPUT PARAMETER: LIST - A longwprd vector containing the entry numbers of sources found within the image. This vector can then be used with other database procedures, e.g. to print specified fields (DBPRINT) or subselect with further criteria (DBFIND) OPTIONAL OUTPUT KEYWORD PARAMETER: XPOS - REAL*4 vector giving X positions of catalogue sources found within the image YPOS - REAL*4 vector giving Y positions of catalogue sources found within the image OPTIONAL INPUT KEYWORD PARAMETERS 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. SILENT - If set, then informational messages are suppressed SUBLIST - vector giving entries in the database to consider in the search. If not supplied, or set equal to -1, then all entries are considered. XRANGE - 2 element vector giving the X range of the image to consider. The default is to search for catalogue sources within the entire image YRANGE - 2 element vector giving the Y range of the image to consider. NOTES: If an output list vector is not supplied, then the found objects are diplayed at the terminal. EXAMPLE: Find all existing IUE observations within the field of the FITS file fuv0435fc.fits. Subselect those taken with the SWP camera H = HEADFITS('fuv0435f.fits') ;Read FITS header IMDBASE,H,'IUE',list ;Find IUE obs. within image list2 = DBFIND('CAM_NO=3',list) ;Subselect on SWP images SIDE EFFECTS: The IDL database is left open upon exiting IMDBASE. NOTES: IMDBASE checks the description of the RA item in the database for the string '1950'. If found, the database RA and Dec are assumed to be in equinox B1950. Otherwise they are assumed to be in ICRS or J2000. SYSTEM VARIABLES: The non-standard system variable !TEXTOUT is required for use with the database procedures. PROCEDURES USED: AD2XY, DBEXT, DB_ITEM, DB_ITEM_INFO(), DBOPEN, DBFIND(), EXTAST, GET_EQUINOX(), GSSSADXY, GSSSXYAD, HPRECESS, SXPAR(), XY2AD REVISION HISTORY: Written W. Landsman September, 1988 Added SUBLIST keyword September, 1991 Updated to use ASTROMETRY structures J.D. Offenberg, HSTX, Jan 1993 Conversion for precession fixed. R.Hill, HSTX, 22-Apr-93 Check RA description for equinox W. Landsman Aug 96 Call HPRECESS if header equinox does not match DB W. Landsman Oct. 1998 Assume Equinox J2000 if not explicitly B1950 W. Landsman Jan. 2005 Added ALT keyword W. Landsman April 2005 Use open database, if no catalogue name given W.L April 2008 Added /SILENT keyword W.L. Mar 2009
(See $IDLUTILS_DIR/goddard/pro/database/imdbase.pro)
IMF
NAME: IMF PURPOSE: Compute an N-component power-law logarithmic initial mass function EXPLANTION: The function is normalized so that the total mass distribution equals one solar mass. CALLING SEQUENCE: psi = IMF( mass, expon, mass_range ) INPUTS: mass - mass in units of solar masses (scalar or vector) Converted to floating point if necessary expon - power law exponent, usually negative, scalar or vector The number of values in expon equals the number of different power-law components in the IMF A Saltpeter IMF has a scalar value of expon = -1.35 mass_range - vector containing the mass upper and lower limits of the IMF and masses where the IMF exponent changes. The number of values in mass_range should be one more than in expon. The values in mass_range should be monotonically increasing. OUTPUTS psi - mass function, number of stars per unit logarithmic mass interval evaluated for supplied masses NOTES: The mass spectrum f(m) giving the number of stars per unit mass interval is related to psi(m) by m*f(m) = psi(m). The normalization condition is that the integral of psi(m) between the upper and lower mass limit is unity. EXAMPLE: (1) Print the number of stars per unit mass interval at 3 Msun for a Salpeter (expon = -1.35) IMF, with a mass range from 0.1 MSun to 110 Msun. IDL> print, imf(3, -1.35, [0.1, 110] ) / 3 (2) Lequex et al. (1981, A & A 103, 305) describes an IMF with an exponent of -0.6 between 0.007 Msun and 1.8 Msun, and an exponent of -1.7 between 1.8 Msun and 110 Msun. Plot the mass spectrum f(m) IDL> m = [0.01,0.1,indgen(110) + 1 ] ;Make a mass vector IDL> expon = [-0.6, -1.7] ;Exponent Vector IDL> mass_range = [ 0.007, 1.8, 110] ;Mass range IDL> plot,/xlog,/ylog, m, imf(m, expon, mass_range ) / m METHOD IMF first calculates the constants to multiply the power-law components such that the IMF is continuous at the intermediate masses, and that the total mass integral is one solar mass. The IMF is then calculated for the supplied masses. Also see Scalo (1986, Fund. of Cosmic Physics, 11, 1) PROCEDURES CALLED: None REVISION HISTORY: Written W. Landsman August, 1989 Set masses LE mass_u rather than LT mass_u August, 1992 Major rewrite to accept arbitrary power-law components April 1993 Convert EXPON to float if necessary W. Landsman March 1996 Remove call to DATATYPE, V5.3 version W. Landsman August 2000
(See $IDLUTILS_DIR/goddard/pro/astro/imf.pro)
IMLIST
NAME: IMLIST PURPOSE: Display pixel values on an image surrounding a specified X,Y center. EXPLANATION: IMLIST is similar to TVLIST but the center pixel is supplied directly by the user, rather than being read off of the image display CALLING SEQUENCE: IMLIST, Image, Xc, Yc, [ TEXTOUT = , DX = , DY = ,WIDTH = ,DESCRIP = ] INPUTS: Image - Two-dimensional array containing the image Xc - X pixel value at which to center the display, integer scalar Yc - Y pixel value at which to center the display, integer scalar OPTIONAL INPUTS KEYWORDS: TEXTOUT - Scalar number (1-7) or string which determines output device. (see TEXTOPEN) The following dev/file is opened for output. 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 same as 3 but text is appended to <program>.prt if file already exists textout = filename (default extension of .prt) DX -Integer scalar giving the number of pixels inthe X direction to be displayed. If omitted then DX = 18 for byte images, and DX = 14 for integer images. IMLIST will display REAL data with more significant figures if more room is available to print. DY - Same as DX, but in Y direction. If omitted, then DY = DX WIDTH - Integer scalar giving the character width of the output device. Default is 80 characters. DESCRIP = Scalar string which will be written as a description over the output pixel values. If DESCRIP is not supplied, and the output device specified by TEXTOUT is not a terminal, then the user will be prompted for a description. OFFSET - 2 element numeric vector giving an offset to apply to the display of the X,Y coordinates of the image (e.g. if the supplied image array is a subarray of a larger image). OUTPUTS: None. PROCEDURE: Corresponding region of image is then displayed at the terminal. If necessary, IMLIST will divide all pixel values in a REAL*4 image by a (displayed) factor of 10 to make a pretty format. SYSTEM VARIABLES: If the keyword TEXTOUT is not supplied, then the non-standard system variable !TEXTOUT will be read. (The procedure ASTROLIB can be used to add the non-standard system variables.) RESTRICTIONS: IMLIST may not be able to correctly format all pixel values if the dynamic range of the values near the center pixel is very large EXAMPLE: Display the pixel values of an image array IM in the vicinity of 254,111 IDL> imlist, IM, 254, 111 PROCEDURES USED TEXTOPEN, F_FORMAT(), TEXTCLOSE REVISION HISTORY: Written, W. Landsman June, 1991 Added DESCRIP keyword W. Landsman December, 1991 Treat LONG image as integer when possible, call TEXTOPEN with /STDOUT keyword, W. Landsman April, 1996 Use SYSTIME() instead of !STIME August 1997 Converted to IDL V5.0 W. Landsman September 1997 Recognize new integer types, added OFFSET keyword W. Landsman Jan. 2000 Replace DATATYPE() with size(/TNAME) W. Landsman Nov. 2001 Handle NAN values in output display W. Landsman June 2004 Use V6.0 notation W. Landsman April 2011
(See $IDLUTILS_DIR/goddard/pro/image/imlist.pro)
IRAFDIR
NAME: IRAFDIR PURPOSE: Provide a brief description of the IRAF images on a directory CALLING SEQUENCE: IRAFDIR, [ directory, TEXTOUT = ] OPTIONAL INPUT PARAMETERS: DIRECTORY - Scalar string giving file name, disk or directory to be searched OPTIONAL INPUT KEYWORD: TEXTOUT - specifies output device (see TEXTOPEN) 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) OUTPUT PARAMETERS: None PROCEDURE: FINDFILE is used to find all '.imh' files in the directory. The object name and image size (NAXIS1, NAXIS2) are extracted from the header. Each header is also searched for the parameters DATE-OBS (or TDATEOBS), TELESCOP (or OBSERVAT), EXPTIME. RESTRICTIONS: (1) Some fields may be truncated since IRAFDIR uses a fixed format output (2) No more than 2 dimension sizes are displayed SYSTEM VARIABLES: If 'textout' keyword is not specified to select an output device, !TEXTOUT will be the default. This non-standard system variable can be added using the procedure ASTROLIB. PROCEDURE CALLS: EXPAND_TILDE(), FDECOMP, REMCHAR, TEXTOPEN, TEXTCLOSE MODIFICATION HISTORY: Written, K. Venkatakrishna, ST Systems Corp, August 1991 Work for IRAF V2.11 format W. Landsman November 1997 Assume since V5.5 use file_search W. Landsman Sep 2006
(See $IDLUTILS_DIR/goddard/pro/disk_io/irafdir.pro)
IRAFRD
NAME: IRAFRD PURPOSE: Read an IRAF (.imh) file into IDL image and header arrays. EXPLANATION: The internal IRAF format changed somewhat in IRAF V2.11 to a machine independent format, with longer filename allocations. This version of IRAFRD should be able to read either format. CALLING SEQUENCE: IRAFRD, im, hdr, filename, [/SILENT ] OPTIONAL INPUT: FILENAME - Character string giving the name of the IRAF image header. If omitted, then program will prompt for the file name. IRAFRD always assumes the header file has an extension '.imh'. IRAFRD will automatically locate the ".pix" file containing the data by parsing the contents of the .imh file. (If the parse is unsuccesful, then IRAFRD looks in the same directory as the .imh file.) OUTPUTS: IM - array containing image data HDR - string array containing header. Basic information in the IRAF header is converted to a FITS style header OPTIONAL INPUT KEYWORDS: /SILENT - If this keyword is set and non-zero, then messages displayed while reading the image will be suppressed. RESTRICTIONS: (1) Image size and history sections of the IRAF header are copied into the FITS header HDR. Other information (e.g. astrometry) might not be included unless it is also in the history section (2) IRAFRD ignores the node name when deciphering the name of the IRAF ".pix" file. (3) Certain FITS keywords ( DATATYPE, IRAFNAME) may appear more than once in the output name (4) Does not read the DATE keyword for the new (V2.11) IRAF files NOTES: IRAFRD obtains dimensions and type of image from the IRAF header. PROCEDURES CALLED: FDECOMP, SXADDPAR, SXPAR() MODIFICATION HISTORY: Written W. Landsman, STX January 1989 Converted to IDL Version 2. M. Greason, STX, June 1990 Updated for DecStation compatibility W. Landsman March 1992 Don't leave an open LUN W. Landsman July 1993 Don't overwrite existing OBS-DATE W. Landsman October 1994 Don't bomb on very long FITS headers W. Landsman April 1995 Work on Alpha/OSF and Linux W. Landsman Dec 1995 Remove /VMSIMG keyword, improve efficiency when physical and image dimensions differ W. Landsman April 1996 Don't use FINDFILE (too slow) W. Landsman Oct 1996 Read V2.11 files, remove some parameter checks W. Landsman Nov. 1997 Fixed problem reading V2.11 files with long headers Jan. 1998 Accept names with multiple extensions W. Landsman April 98 Test for big endian machine under V2.11 format W. Landsman Feb. 1999 Don't read past the end of file for V5.4 compatilibity W.L. Jan. 2001 Convert to square brackets W.L May 2001 Assume since V5.4, remove SPEC_DIR() W. L. April 2006
(See $IDLUTILS_DIR/goddard/pro/disk_io/irafrd.pro)
IRAFWRT
NAME: IRAFWRT PURPOSE: Write IDL data in IRAF (OIF) format (.imh and .pix files). EXPLANATION: Does the reverse of IRAFRD. IRAFWRT writes the "old" IRAF format used prior to v2.11. However, this "old" format is still readable by the current version of IRAF. CALLING SEQUENCE: IRAFWRT, image, hdr, filename, [ PIXDIR = ] INPUTS: image - array containing data hdr - The corresponding FITS header. Use MKHDR to create a minimal FITS header if one does not already exist. filename - Scalar string giving the name of the file to be written Should not include the extension name, which will be supplied by IRAFWRT. OUTPUTS: None OPTIONAL KEYWORD INPUT: PIXDIR - scalar string specifying the directory into which to write the IRAF pixel (.pix) file. The default is to write the pixel file to the same directory as the header (.imh) file SIDE EFFECTS: Image array and FITS header are written to IRAF pixel file 'filename'.pix and header file 'filename'.imh EXAMPLE: Write an empty 50 x 50 array of all zeros to an IRAF file named 'EMPTY' IDL> im = intarr( 50, 50) ;Create empty array IDL> mkhdr, hdr, im ;Create a minimal FITS header IDL> irafwrt, im, hdr, 'empty' ;Write to a IRAF file named 'empty' PROCEDURE: IRAFWRT gets information about the data - image dimensions, size, datatype, maximum and minimum pixel values - and writes it into the binary part of the header. The ASCII part of the header is directly copied after deleting records with certain keywords A pixel file is created, with a header in the first 1024 bytes RESTRICTIONS: (1) The files are not created by IRAFWRT are not identical to those created by the IRAF routine rfits. However, the files created by IRAFWRT appear to be compatible with all the IRAF routines tested so far. (2) IRAFWRT has been tested on a limited number of data types (3) IRAFWRT has only been tested on Unix and VMS systems. PROCEDURES CALLED: FDECOMP, IS_IEEE_BIG(), ISARRAY(), REPCHR(), STRN(), SXDELPAR, SXPAR() MODIFICATION HISTORY: Written K. Venkatakrishna, STX February 1992 VMS compatibility W. Landsman April 1992 Work with headers without DATE-OBS or ORIGIN August 1992 Preserve HISTORY records with other FITS records March 1995 Fix case where a minimal FITS header supplied August 1995 Work under Alpha/OSF and Linux Dec. 1995 Make sureheader has 80 char lines, use IS_IEEE_BIG() May 1997 Don't apply strlowcase to .pix name W. Landsman April 1999 Work with double precision W. Landsman May 1999 Minimize use of obsolete !ERR W. Landsman Feb. 2000 Assume since V5.5, remove VMS support W. Landsman Sep. 2006
(See $IDLUTILS_DIR/goddard/pro/disk_io/irafwrt.pro)
ISARRAY
NAME: ISARRAY PURPOSE: Tests if the argument is an array. CATEGORY: CALLING SEQUENCE: flag = isarray(a) INPUTS: a = variable to test. in KEYWORD PARAMETERS: OUTPUTS: flag = test result: 0 if not array, else non-zero. out COMMON BLOCKS: NOTES: MODIFICATION HISTORY: R. Sterner 20 Mar, 1986. Checked for undefined variables. RES 25 Aug, 1989. Johns Hopkins Applied Physics Lab. Copyright (C) 1986, 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. Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/jhuapl/isarray.pro)
ISMEUV
NAME: ISMEUV PURPOSE: Compute the continuum interstellar EUV optical depth EXPLANATION: The EUV optical depth is computed from the photoionization of hydrogen and helium. CALLING SEQUENCE: tau = ISMEUV( wave, Hcol, [ HeIcol, HeIIcol, /Fano ] INPUTS: wave - Vector of wavelength values (in Angstroms). Useful range is 40 - 912 A; at shorter wavelengths metal opacity should be considered, at longer wavelengths there is no photoionization. Hcol - Scalar specifying interstellar hydrogen column density in cm-2. Typical values are 1E17 to 1E20. OUTPUT: tau - Vector giving resulting optical depth, same number of elements as wave, non-negative values. To obtain the attenuation of an input spectrum, multiply by exp(-tau). OPTIONAL INPUTS: HeIcol - Scalar specifying neutral helium column density in cm-2. Default is 0.1*Hcol (10% of hydrogen column) HeIIcol - Scalar specifying ionized helium column density in cm-2 Default is 0 (no HeII) OPTIONAL INPUT KEYWORDS: /FANO - If this keyword is set and non-zero, then the 4 strongest auto-ionizing resonances of He I are included. The shape of these resonances is given by a Fano profile - see Rumph, Bowyer, & Vennes 1994, AJ, 107, 2108. If these resonances are included then the input wavelength vector should have a fine (>~0.01 A) grid between 190 A and 210 A, since the resonances are very narrow. EXAMPLE: (1) One has a model EUV spectrum with wavelength, w (in Angstroms) and flux,f . Plot the model flux after attenuation by 1e18 cm-2 of HI, with N(HeI)/N(HI) = N(HeII)/N(HI) = 0.05 IDL> Hcol = 1e18 IDL> plot, w, f*exp(-ismeuv(w, Hcol, .05*Hcol, .05*Hcol)) (2) Plot the cross-section of HeI from 180 A to 220 A for 1e18 cm-2 of HeI, showing the auto-ionizing resonances. This is Figure 1 in Rumph et al. (1994) IDL> w = 180 + findgen(40000)*0.001 ;Need a fine wavelength grid IDL> plot, w, ismeuv(w, 0, 1e18, /Fano) NOTES: (1) The more complete program ismtau.pro at http://hea-www.harvard.edu/PINTofALE/pro/ extends this work to shorter wavelengths and includes metal and molecular hydrogen opacities (2) This program only compute continuum opacities, and for example, the He ionization edges at 504 A and 228 A are blurred by converging line absorptions (Dupuis et al. 1995. ApJ, 455, 574) HISTORY: Written, W. Landsman October, 1994 Adapted from ism.c at anonymous ftp site cea-ftp.cea.berkeley.edu by Pat Jelinsky, Todd Rumph & others. Converted to IDL V5.0 W. Landsman September 1997 Avoid underflow messages, support double prec. W. Landsman October 2003
(See $IDLUTILS_DIR/goddard/pro/astro/ismeuv.pro)
IS_IEEE_BIG
NAME: IS_IEEE_BIG PURPOSE: Determine if the current machine uses IEEE, big-endian numbers. EXPLANATION: (Big endian implies that byteorder XDR conversions are no-ops). CALLING SEQUENCE: flag = is_ieee_big() INPUT PARAMETERS: None RETURNS: 1 if the machine appears to be IEEE-compliant, 0 if not. COMMON BLOCKS: None. SIDE EFFECTS: None RESTRICTIONS: PROCEDURE: The first byte of the two-byte representation of 1 is examined. If it is zero, then the data is stored in big-endian order. MODIFICATION HISTORY: Written 15-April-1996 by T. McGlynn for use in MRDFITS. 13-jul-1997 jkf/acc - added calls to check_math to avoid underflow messages in V5.0 on Win32 (NT). Converted to IDL V5.0 W. Landsman September 1997 Follow RSI and just do a single test W. Landsman April 2003
(See $IDLUTILS_DIR/goddard/pro/misc/is_ieee_big.pro)
JDCNV
NAME: JDCNV PURPOSE: Converts Gregorian dates to Julian days EXPLANATION: For IDL versions V5.1 or greater, this procedure is superceded by JULDAY() function in the standard IDL distribution. Note, however, that prior to V5.1 there wasa bug in JULDAY() that gave answers off by 0.5 days. CALLING SEQUENCE: JDCNV, YR, MN, DAY, HR, JULIAN INPUTS: YR = Year, integer scalar or vector MN = Month integer (1-12) scalar or vector DAY = Day integer 1-31) scalar or vector HR = Hours and fractions of hours of universal time (U.T.), scalar or vector OUTPUTS: JULIAN = Julian date (double precision) EXAMPLE: To find the Julian Date at 1978 January 1, 0h (U.T.) IDL> JDCNV, 1978, 1, 1, 0., JULIAN will give JULIAN = 2443509.5 NOTES: (1) JDCNV will accept vector arguments (2) JULDATE is an alternate procedure to perform the same function REVISON HISTORY: Converted to IDL from Don Yeomans Comet Ephemeris Generator, B. Pfarr, STX, 6/15/88 Converted to IDL V5.0 W. Landsman September 1997 Added checks on valid month, day ranges W. Landsman July 2008
(See $IDLUTILS_DIR/goddard/pro/astro/jdcnv.pro)
JPLEPHINTERP
NAME: JPLEPHINTERP AUTHOR: Craig B. Markwardt, NASA/GSFC Code 662, Greenbelt, MD 20770 craigm@lheamail.gsfc.nasa.gov UPDATED VERSIONs can be found on my WEB PAGE: http://cow.physics.wisc.edu/~craigm/idl/idl.html PURPOSE: Interpolate position and motion of planetary bodies (JPL Ephemeris) MAJOR TOPICS: Planetary Orbits, Interpolation CALLING SEQUENCE: JPLEPHINTERP, INFO, RAWDATA, T, X, Y, Z, [VX, VY, VZ, /EARTH, /SUN, OBJECTNAME=, CENTER=, TBASE=, POSUNITS=, VELUNITS= ] DESCRIPTION: JPLEPHINTERP interpolates the JPL DE200 or DE405 planetary ephemeris to find the positions and motions of planetary bodies. This routine is the second stage of a two-stage process to interpolate the JPL ephemeris. In this first stage, the file is opened using JPLEPHREAD, and the relevant portions of the table are read and stored into the two variables INFO and RAWDATA. In the second stage, the user actually interpolates the ephemeris for the desired bodies and to the desired ephemeris time using JPLEPHINTERP. The only independent variable which must be specified is T, the ephemeris time. For low to moderate accuracy applications, T is simply the conventional calendar date, expressed in Julian days. See below for high precision applications. Upon output, the position components of the desired body are returned in parameters X, Y and Z, and if requested velocity components are returned in parameters VX, VY and VZ. Coordinates are referred to the ephemeris's coordinate system: FK5 for JPL-DE200 and ICRS for JPL-DE405. By default, the origin of coordinates is the solar system barycenter (SSB), unless another origin is selected using the CENTER keyword. Users must set the VELOCITY keyword to generate body velocities. By default they are not generated. Users can select the desired body by using either the EARTH or SUN keywords, or the OBJECTNAME keyword. By default, positions are returned in units of KM and velocities in units of KM/DAY. However, the output units are selectable by setting the POSUNITS and VELUNITS keywords. High Precision Applications If the required precision is finer than a few hundred meters, the user must be aware that the formal definition of the ephemeris time is the coordinate time of a clock placed at the solar system barycenter (SSB). If the user's time is measured by a clock positioned elsewhere, then various corrections must be applied. Usually, the most significant correction is that from the geocenter to the SSB (see Fairhead & Bretagnon 1990; Fukushima 1995). Not applying this correction creates an error with amplitude ~170 nano-light-seconds ( = 50 m) on the earth's position. (see TDB2TDT) For high precision, the user should also specify the TBASE keyword. TBASE should be considered a fixed epoch with respect to which T is measured; T should be small compared to TBASE. Internally, subtraction of large numbers occurs with TBASE first, so truncation error is minimized by specifying TBASE. Nutations and Librations This routine also provides information about earth nutations and lunar librations, which are stored in the JPL ephemeris tables. The POSUNITS and VELUNITS keywords do not affect these computations. Lunar librations in the form of three Euler angles are returned in X, Y, Z, in units of radians, and their time derivatives are returned in VX, VY, and VZ in units of radians per day. The earth nutation angles psi (nutation in longitude) and epsilon (nutation in obliquity) are returned in X and Y, in units of radians. Their time derivatives are returned in VX and VY respectively. The quantities returned in Z and VZ are undefined. Verification The precision routine has been verified using JPLEPHTEST, which is similar to the original JPL program EPHTEST. For years 1950 to 2050, JPLEPHINTERP reproduces the original JPL ephemeris to within 1 centimeter. Custom Ephemerides It is possible to make custom ephemerides using JPLEPHMAKE, or to augmented an existing ephemeris with additional data. In the former case JPLEPHINTERP should automatically choose the correct object from the table and interpolate it appropriately. For augmented ephemerides, the object can be specified by name, which works as expected, or by number, which has a special behavior. For augmented files only, the new objects begin at number 100. PARAMETERS: INFO - structure returned by JPLEPHREAD. Users should not modify this structure. RAWDATA - raw data array returned by JPLEPHREAD. Users should not modify this data array. T - ephemeris time(s) of interest, relative to TBASE (i.e. the actual interpolation time is (T+TBASE)). May be a scalar or vector. X, Y, Z - upon return, the x-, y- and z-components of the body position are returned in these parameters. For nutations and librations see above. VX, VY, VZ - upon return, the x-, y- and z-components of the body velocity are returned in these parameters, if the VELOCITY keyword is set. For nutations and librations see above. KEYWORD PARAMETERS: EARTH, SUN - set one of these keywords if the desired body is the earth or the sun. One of EARTH, SUN or OBJECTNAME must be specified. OBJECTNAME - a scalar string or integer, specifies the planetary body of interest. May take any one of the following integer or string values. 1 - 'MERCURY' 9 - 'PLUTO' 2 - 'VENUS' 10 - 'MOON' (earth's moon) 3 - 'EARTH' 11 - 'SUN' 4 - 'MARS' 12 - 'SOLARBARY' or 'SSB' (solar system barycenter) 5 - 'JUPITER' 13 - 'EARTHBARY' or 'EMB' (earth-moon barycenter) 6 - 'SATURN' 14 - 'NUTATIONS' (see above) 7 - 'URANUS' 15 - 'LIBRATIONS' (see above) 8 - 'NEPTUNE' For custom ephemerides, the user should specify the object name or number. For augmented ephemerides, the user should specify the name. If the number is specified, then numbers 1-15 have the above meanings, and new objects are numbered starting at 100. CENTER - a scalar string or integer, specifies the origin of coordinates. See OBJECTNAME for allowed values. Default: 12 (Solar system barycenter) VELOCITY - if set, body velocities are generated and returned in VX, VY and VZ. Default: unset (no velocities) POSUNITS - a scalar string specifying the desired units for X, Y, and Z. Allowed values: 'KM' - kilometers (default) 'CM' - centimeters 'AU' - astronomical units 'LT-S' - light seconds If angles are requested, this keyword is ignored and the units are always 'RADIANS'. VELUNITS - a scalar string specifying the desired units for VX, VY and VZ. Allowed values: 'KM/DAY' - kilometers per day (default) 'KM/S' - kilometers per second 'CM/S' - centimeters per second 'LT-S/S' - light seconds per second 'AU/DAY' - astronomical units per day TBASE - a scalar or vector, specifies a fixed epoch against wich T is measured. The ephemeris time will be (T+TBASE). Use this keyword for maximum precision. EXAMPLE: Find position of earth at ephemeris time 2451544.5 JD. Units are in Astronomical Units. JPLEPHREAD, 'JPLEPH.200', pinfo, pdata, [2451544D, 2451545D] JPLEPHINTERP, pinfo, pdata, 2451544.5D, xearth, yearth, zearth, $ /EARTH, posunits='AU' REFERENCES: AXBARY, Arnold Rots. ftp://heasarc.gsfc.nasa.gov/xte/calib_data/clock/bary/ HORIZONS, JPL Web-based ephermis calculator (Ephemeris DE406) http://ssd.jpl.nasa.gov/horizons.html Fairhead, L. & Bretagnon, P. 1990, A&A, 229, 240 Fukushima, T. 1995, A&A, 294, 895 Standish, E.M. 1982, "Orientation of the JPL Ephemerides, DE200/LE200, to the Dynamical Equinox of J2000", Astronomy & Astrophysics, vol. 114, pp. 297-302. Standish, E.M.: 1990, "The Observational Basis for JPL's DE200, the planetary ephemeris of the Astronomical Almanac", Astronomy & Astrophysics, vol. 233, pp. 252-271. SEE ALSO JPLEPHREAD, JPLEPHINTERP, JPLEPHTEST, TDB2TDT, JPLEPHMAKE MODIFICATION HISTORY: Written and Documented, CM, Jun 2001 Corrected bug in name conversion of NUTATIONS and LIBRATIONS, 18 Oct 2001, CM Added code to handle custom-built ephemerides, 04 Mar 2002, CM Fix bug in evaluation of velocity (only appears in highest order polynomial term); JPLEPHTEST verification tests still pass; change is of order < 0.5 cm in position, 22 Nov 2004, CM Perform more validity checking on inputs; and more informative outputs, 09 Oct 2008, CM Allow SSB and EMB as shortcuts for solar system and earth-moon bary center, 15 Oct 2008, CM TBASE now allowed to be a vector or scalar, 01 Jan 2009, CM VELFAC keyword gives scale factor between POSUNITS and VELUNITS, 12 Jan 2009, CM $Id: jplephinterp.pro,v 1.18 2009/01/13 04:53:26 craigm Exp $
(See $IDLUTILS_DIR/goddard/pro/astro/jplephinterp.pro)
JPLEPHREAD
NAME: JPLEPHREAD AUTHOR: Craig B. Markwardt, NASA/GSFC Code 662, Greenbelt, MD 20770 craigm@lheamail.gsfc.nasa.gov UPDATED VERSIONs can be found on my WEB PAGE: http://cow.physics.wisc.edu/~craigm/idl/idl.html PURPOSE: Open and read JPL DE200 or DE405 Ephemeride FITS File MAJOR TOPICS: Planetary Orbits, Interpolation CALLING SEQUENCE: JPLEPHREAD, FILENAME, INFO, RAWDATA, JDLIMITS, STATUS=, ERRMSG= DESCRIPTION: JPLEPHREAD opens and reads the JPL DE200 or DE405 planetary ephemerides, as available in FITS format. The user must have the IDL Astronomy Library installed to use this routine. This routine is the initialization stage of a two-stage process to interpolate the JPL ephemeris. In this first stage, the file is opened, and the relevant portions of the table are read and stored into the two variables INFO and RAWDATA. In the second stage, the user actually interpolates the ephemeris for the desired bodies and to the desired ephemeris time using JPLEPHINTERP. Users must decide ahead of time the approximate dates of interest, and pass this range in the JDLIMITS parameter. Any date covered by the ephemeris is valid. JPLEPHREAD is able to read files of the following format: DE200 - Chebyshev - FITS format - Note 1 DE405 - Chebyshev - FITS format - Note 1 DE200 - Taylor - FITS format - Note 2 Note 1 - Chebyshev formatted FITS files are available in the AXBARY package by Arnold Rots, found here: ftp://heasarc.gsfc.nasa.gov/xte/calib_data/clock/bary/ or at the Markwardt FTP site: ftp://cow.physics.wisc.edu/pub/craigm/bary/ Note 2 - Taylor-series based ephemerides have been available for years in the FTOOLS / LHEASOFT package produced by NASA's Goddard Space Flight Center. The original file is de200_new.fits, which covers the years 1959-2000, inclusive. A newer file is named de200_1950-2050_v2.fits, and covers the years 1959-2050. See Markwardt FTP site for these files. PARAMETERS: FILENAME - name of ephemeris file (scalar string). INFO - upon completion, information about the ephemeris data is returned in this parameter in the form of a structure. Users must not modify INFO, although several fields are useful and may be accessed read-only: TSTART/TSTOP (start and stop time of data in Julian days); C (speed of light in km/s); DENUM (development ephemeris number [200 or 405]) AU (1 astronomical unit, in units of light-seconds) RAWDATA - upon completion, raw ephemeris data is returned in this parameter. Users are not meant to access this data directly, but rather to pass it to JPLEPHINTERP. JDLIMITS - a two-element vector (optional), describing the desired time range of interest. The vector should have the form [TSTART, TSTOP], where TSTART and TSTOP are the beginning and ending times of the range, expressed in Julian days. Default: entire table is read (note, this can be several megabytes) KEYWORD PARAMETERS: STATUS - upon completion, a value of 1 indicates success, and 0 indicates failure. ERRMSG - upon completion, an error message is returned in this keyword. If there were no errors, then the returned value is the empty string, ''. EXAMPLE: Find position of earth at ephemeris time 2451544.5 JD. Units are in Astronomical Units. JPLEPHREAD, 'JPLEPH.200', pinfo, pdata, [2451544D, 2451545D] JPLEPHINTERP, pinfo, pdata, 2451544.5D, xearth, yearth, zearth, $ /EARTH, posunits='AU' REFERENCES: AXBARY, Arnold Rots. ftp://heasarc.gsfc.nasa.gov/xte/calib_data/clock/bary/ HORIZONS, JPL Web-based ephermis calculator (Ephemeris DE406) http://ssd.jpl.nasa.gov/horizons.html JPL Export Ephemeris FTP Site ftp://ssd.jpl.nasa.gov/pub/eph/planets/ (ephemeris files are available here, however, they must be converted to FITS format using the "bin2eph" utility found in AXBARY) JPL Export Ephemeris CD-ROM - Ordering Information http://www.willbell.com/software/jpl.htm Standish, E.M. 1982, "Orientation of the JPL Ephemerides, DE200/LE200, to the Dynamical Equinox of J2000", Astronomy & Astrophysics, vol. 114, pp. 297-302. Standish, E.M.: 1990, "The Observational Basis for JPL's DE200, the planetary ephemeris of the Astronomical Almanac", Astronomy & Astrophysics, vol. 233, pp. 252-271. SEE ALSO JPLEPHREAD, JPLEPHINTERP, JPLEPHTEST PROCEDURES USED: FXBCLOSE, FXBOPEN, FXPAR(), MODIFICATION HISTORY: Written and Documented, CM, Jun 2001 Use GETTOK() instead of STR_SEP() W. Landsman July 2002 $Id: jplephread.pro,v 1.6 2001/07/01 03:32:02 craigm Exp $
(See $IDLUTILS_DIR/goddard/pro/astro/jplephread.pro)
JPLEPHTEST
NAME: JPLEPHTEST AUTHOR: Craig B. Markwardt, NASA/GSFC Code 662, Greenbelt, MD 20770 craigm@lheamail.gsfc.nasa.gov UPDATED VERSIONs can be found on my WEB PAGE: http://cow.physics.wisc.edu/~craigm/idl/idl.html PURPOSE: Test JPLEPHTEST with JPL test data set MAJOR TOPICS: Planetary Orbits, Interpolation CALLING SEQUENCE: JPLEPHTEST, EPHFILE, TESTFILE DESCRIPTION: JPLEPHTEST tests the JPLEPHINTERP procedure for precision. In order to function, you must have a JPL ephemeris test data set. The test data set testpo.405 is available in ftp://idlastro.gsfc.nasa.gov/pub/data The procedure opens and reads the test set, which contains precomputed data. Every tenth value is printed on the screen. Any deviations that exceed 1.5d-13 AU = 1.5 cm are reported. The columns are labelled according to the input file, except for the final column, which is the deviation between the input file and the computed value. PARAMETERS: EPHFILE - a scalar string, specifies the name of the ephemeris file, in FITS format. JPLEPHTEST will look in the directory $ASTRO_DATA for the file if it is not in the current directory. TESTFILE - a scalar string, specifies JPL test data set to compare against. JPLEPHTEST will look in the directory $ASTRO_DATA for the file if it is not in the current directory. EXAMPLE: Test JPL DE200 and DE405 ephemerides. Assumes files are in the current directory. JPLEPHTEST, 'JPLEPH.200', 'testpo.200' JPLEPHTEST, 'JPLEPH.405', 'testpo.405' REFERENCES: JPL Export Ephemeris FTP Site ftp://ssd.jpl.nasa.gov/pub/eph/planets/ (see test-data/ for test data sets) HORIZONS, JPL Web-based ephermis calculator (Ephemeris DE406) http://ssd.jpl.nasa.gov/horizons.html SEE ALSO JPLEPHREAD, JPLEPHINTERP, JPLEPHTEST MODIFICATION HISTORY: Written and Documented, CM, Jun 2001 Removed TRANSREAD, improved output, improved docs, CM, 9 Jul 2001 $Id: jplephtest.pro,v 1.4 2001/07/20 13:29:53 craigm Exp $
(See $IDLUTILS_DIR/goddard/pro/astro/jplephtest.pro)
JPRECESS
NAME: JPRECESS PURPOSE: Precess astronomical coordinates from B1950 to J2000 EXPLANATION: Calculate the mean place of a star at J2000.0 on the FK5 system from the mean place at B1950.0 on the FK4 system. Use BPRECESS for the reverse direction J2000 ==> B1950 CALLING SEQUENCE: jprecess, ra, dec, ra_2000, dec_2000, [ MU_RADEC = , PARALLAX = RAD_VEL =, EPOCH = ] INPUTS: RA,DEC - input B1950 right ascension and declination in *degrees*. Scalar or vector OUTPUTS: RA_2000, DEC_2000 - the corresponding J2000 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 J2000 system. Values will also be converted to double precision. The parallax and radial velocity will have a very minor influence on the J2000 position. EPOCH - scalar giving epoch of original observations, default 1950.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 184. Also see Aoki et al (1983), A&A, 128,263 JPRECESS 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 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 J2000 can be up to 12", mainly in right ascension. If better accuracy than this is needed then JPRECESS should be used. EXAMPLE: The SAO catalogue gives the B1950 position and proper motion for the star HD 119288. Find the J2000 position. RA(1950) = 13h 39m 44.526s Dec(1950) = 8d 38' 28.63'' Mu(RA) = -.0259 s/yr Mu(Dec) = -.093 ''/yr IDL> mu_radec = 100D* [ -15D*.0259, -0.093 ] IDL> ra = ten(13,39,44.526)*15.D IDL> dec = ten(8,38,28.63) IDL> jprecess, ra, dec, ra2000, dec2000, mu_radec = mu_radec IDL> print, adstring(ra2000, dec2000,2) ===> 13h 42m 12.740s +08d 23' 17.69" RESTRICTIONS: "When transferring individual observations, as opposed to catalog mean place, the safest method is to tranform the observations back to the epoch of the observation, on the FK4 system (or in the system that was used to to produce the observed mean place), convert to the FK5 system, and transform to the the epoch and equinox of J2000.0" -- from the Explanatory Supplement (1992), p. 180 REVISION HISTORY: Written, W. Landsman September, 1992 Corrected a couple of typos in M matrix October, 1992 Vectorized, W. Landsman February, 1994 Implement Appendix 2 of Aoki et al. (1983) for case where proper motion unknown or exactly zero W. Landsman November, 1994 Converted to IDL V5.0 W. Landsman September 1997 Fixed typo in updating proper motion W. Landsman April 1999 Make sure proper motion is floating point W. Landsman December 2000 Use V6.0 notation W. Landsman Mar 2011
(See $IDLUTILS_DIR/goddard/pro/astro/jprecess.pro)
JULDATE
NAME: JULDATE PURPOSE: Convert from calendar to Reduced Julian Date EXPLANATION: Julian Day Number is a count of days elapsed since Greenwich mean noon on 1 January 4713 B.C. The Julian Date is the Julian day number followed by the fraction of the day elapsed since the preceding noon. This procedure duplicates the functionality of the JULDAY() function in in the standard IDL distribution, but also allows interactive input and gives output as Reduced Julian date (=JD - 2400000.) (Also note that prior to V5.1 there was a bug in JULDAY() that gave answers offset by 0.5 days.) CALLING SEQUENCE: JULDATE, /PROMPT ;Prompt for calendar Date, print Julian Date or JULDATE, date, jd INPUT: DATE - 3 to 6-element vector containing year,month (1-12),day, and optionally hour, minute, and second all specified as numbers (Universal Time). Year should be supplied with all digits. Years B.C should be entered as negative numbers (and note that Year 0 did not exist). If Hour, minute or seconds are not supplied, they will default to 0. OUTPUT: JD - Reduced Julian date, double precision scalar. To convert to Julian Date, add 2400000. JULDATE will print the value of JD at the terminal if less than 2 parameters are supplied, or if the /PROMPT keyword is set OPTIONAL INPUT KEYWORD: /PROMPT - If this keyword is set and non-zero, then JULDATE will prompt for the calendar date at the terminal. RESTRICTIONS: The procedure HELIO_JD can be used after JULDATE, if a heliocentric Julian date is required. EXAMPLE: A date of 25-DEC-2006 06:25 UT may be expressed as either IDL> juldate, [2006, 12, 25, 6, 25], jd IDL> juldate, [2006, 12, 25.2673611d], jd In either case, one should obtain a Reduced Julian date of JD = 54094.7673611 PROCEDURE USED: GETOPT() REVISION HISTORY Adapted from IUE RDAF (S. Parsons) 8-31-87 Algorithm from Sky and Telescope April 1981 Added /PROMPT keyword, W. Landsman September 1992 Converted to IDL V5.0 W. Landsman September 1997 Make negative years correspond to B.C. (no year 0), work for year 1582 Disallow 2 digit years. W. Landsman March 2000
(See $IDLUTILS_DIR/goddard/pro/astro/juldate.pro)
KSONE
NAME: KSONE PURPOSE: Compute the one-sided Kolmogorov-Smirnov statistic EXPLANATION: Returns the Kolmogorov-Smirnov statistic and associated probability for for an array of data values and a user-supplied cumulative distribution function (CDF) of a single variable. Algorithm from the procedure of the same name in "Numerical Recipes" by Press et al. 2nd edition (1992) CALLING SEQUENCE: ksone, data, func_name, D, prob, [ /PLOT ] INPUT PARAMETERS: data - vector of data values, must contain at least 4 elements for the K-S statistic to be meaningful func_name - scalar string giving the name of the cumulative distribution function. The function must be defined to accept the data vector as its only input (see example), though keywords may be passed via the _EXTRA facility. OUTPUT PARAMETERS: D - floating scalar giving the Kolmogorov-Smirnov statistic. It specified the maximum deviation between the cumulative distribution of the data and the supplied function prob - floating scalar between 0 and 1 giving the significance level of the K-S statistic. Small values of PROB show that the cumulative distribution function of DATA is significantly different from FUNC_NAME. OPTIONAL INPUT KEYWORD: /PLOT - If this keyword is set and non-zero, then KSONE will display a plot of the CDF of the data with the supplied function superposed. The data value where the K-S statistic is computed (i.e. at the maximum difference between the data CDF and the function) is indicated by a vertical line. KSONE accepts the _EXTRA keyword, so that most plot keywords (e.g. TITLE, XTITLE, XSTYLE) can also be passed to KSONE. /WINDOW - If set, the plot to a resizeable graphics window EXAMPLE: Determine if a vector created by the RANDOMN function is really consistent with a Gaussian distribution with unit variance. The CDF of a Gaussian is the error function except that a factor of 2 is included in the error function. So we must create a special function: function gauss_cdf, x return, errorf( x/sqrt(2) ) end IDL> data = randomn(seed, 50) ;create data array to be tested IDL> ksone, abs(data), 'gauss_cdf', D, prob, /PLOT ;Use K-S test A small value of PROB indicates that the cumulative distribution of DATA is significantly different from a Gaussian NOTES: The code for PROB_KS is from the 2nd (1992) edition of Numerical Recipes which includes a more accurate computation of the K-S significance for small values of N than the first edition. Since _EXTRA is used to pass extra parameters both to the user-supplied function, and to the cgPLOT command, the user-supplied function should not accept "cgPLOT" keyword names (e.g. XTITLE). PROCEDURE CALLS procedure PROB_KS - computes significance of K-S distribution TAG_EXIST() REVISION HISTORY: Written W. Landsman August, 1992 Accept _EXTRA keywords W. Landsman September, 1995 Fixed possible bug in plot display showing position maximum difference in histogram M. Fardal/ W. Landsman March, 1997 Documentation updates W. Landsman June 2003 Pass _EXTRA to func_name M. Fitzgerald April, 2005 Work for functions that do not accept keywords W. Landsman July 2009 Use Coyote graphics for plotting Feb 2011
(See $IDLUTILS_DIR/goddard/pro/math/ksone.pro)
KSTWO
NAME: KSTWO PURPOSE: Return the two-sided Kolmogorov-Smirnov statistic EXPLANATION: Returns the Kolmogorov-Smirnov statistic and associated probability that two arrays of data values are drawn from the same distribution Algorithm taken from procedure of the same name in "Numerical Recipes" by Press et al., 2nd edition (1992), Chapter 14 CALLING SEQUENCE: kstwo, data1, data2, D, prob INPUT PARAMATERS: data1 - vector of data values, at least 4 data values must be included for the K-S statistic to be meaningful data2 - second set of data values, does not need to have the same number of elements as data1 OUTPUT PARAMETERS: D - floating scalar giving the Kolmogorov-Smirnov statistic. It specifies the maximum deviation between the cumulative distribution of the data and the supplied function prob - floating scalar between 0 and 1 giving the significance level of the K-S statistic. Small values of PROB show that the cumulative distribution function of DATA1 is significantly different from DATA2 EXAMPLE: Test whether two vectors created by the RANDOMN function likely came from the same distribution IDL> data1 = randomn(seed,40) ;Create data vectors to be IDL> data2 = randomn(seed,70) ;compared IDL> kstwo, data1, data2, D, prob & print,D,prob PROCEDURE CALLS procedure PROB_KS - computes significance of K-S distribution REVISION HISTORY: Written W. Landsman August, 1992 FP computation of N_eff H. Ebeling/W. Landsman March 1996 Fix for arrays containing equal values J. Ballet/W. Landsman Oct. 2001 Fix index when maximum difference is at array end Renbin Yan Dec 2008 Handle large number when computing N_err D. Schnitzeler/WL Sep 2010
(See $IDLUTILS_DIR/goddard/pro/math/kstwo.pro)
KUIPERONE
NAME: KUIPERONE PURPOSE: Compute the one-sided Kuiper statistic (invariant Kolmogorov-Smirnov) EXPLANATION: Returns the Kuiper statistic and associated probability for an array of data values and a user-supplied cumulative distribution function (CDF) of a single variable. Algorithm adapted from KSONE in "Numerical Recipes" by Press et al. 2nd edition (1992) Kuiper's test is especially useful for data defined on a circle or to search for periodicity (see Paltani 2004, A&A, 420, 789). CALLING SEQUENCE: kuiperone, data, func_name, D, prob, [ /PLOT ] INPUT PARAMETERS: data - vector of data values, must contain at least 4 elements for the Kuiper statistic to be meaningful func_name - scalar string giving the name of the cumulative distribution function. The function must be defined to accept the data vector as its only input (see example). OUTPUT PARAMETERS: D - floating scalar giving the Kuiper statistic. It specifies the sum of positive and negative deviations between the cumulative distribution of the data and the supplied function prob - floating scalar between 0 and 1 giving the significance level of the Kuiper statistic. Small values of PROB show that the cumulative distribution function of DATA is significantly different from FUNC_NAME. OPTIONAL INPUT KEYWORD: /PLOT - If this keyword is set and non-zero, then KUIPERONE will display a plot of the CDF of the data with the supplied function superposed. The data values where the Kuiper statistic is computed (i.e. at the maximum difference between the data CDF and the function) are indicated by vertical dashed lines. KUIPERONE accepts the _EXTRA keyword, so that most plot keywords (e.g. TITLE, XTITLE, XSTYLE) can also be passed to KUIPERONE. EXAMPLE: Determine if a vector created by the RANDOMN function is really consistent with a Gaussian distribution. The CDF of a Gaussian is the error function except that a factor of 2 is included in the error function. So we must create a special function: function gauss_cdf, x return, errorf( x/sqrt(2) ) end IDL> data = randomn(seed, 50) ;create data array to be tested IDL> kuiperone, data, 'gauss_pdf', D, prob, /PLOT ;Use Kuiper test A small value of PROB indicates that the cumulative distribution of DATA is significantly different from a Gaussian NOTES: Note that the 2nd (1992) edition of Numerical Recipes includes a more accurate computation of the K-S significance for small values of N. PROCEDURE CALLS procedure PROB_KUIPER - computes significance of Kuiper distribution REVISION HISTORY: Written W. Landsman August, 1992 Accept _EXTRA keywords W. Landsman September, 1995 Fixed possible bug in plot display showing position maximum difference in histogram M. Fardal/ W. Landsman March, 1997 Adapted from KSONE J. Ballet July 2003 Use Coyote graphics W. Landsman Feb 2011
(See $IDLUTILS_DIR/goddard/pro/math/kuiperone.pro)
KUIPERTWO
NAME: KUIPERTWO PURPOSE: Compute the two-sided Kuiper statistic (invariant Kolmogorov-Smirnov) EXPLANATION: Returns the Kuiper statistic and associated probability that two arrays of data values are drawn from the same distribution Algorithm adapted from KSTWO in "Numerical Recipes" by Press et al., 2nd edition (1992), Chapter 14 CALLING SEQUENCE: kuipertwo, data1, data2, D, prob, [ /PLOT ] INPUT PARAMETERS: data1 - vector of data values, at least 4 data values must be included for the Kuiper statistic to be meaningful data2 - second set of data values, does not need to have the same number of elements as data1 OUTPUT PARAMETERS: D - floating scalar giving the Kuiper statistic. It specifies the sum of positive and negative deviations between the cumulative distributions of the two data sets prob - floating scalar between 0 and 1 giving the significance level of the Kuiper statistic. Small values of PROB show that the cumulative distribution function of DATA1 is significantly different from DATA2 OPTIONAL INPUT KEYWORD: /PLOT - If this keyword is set and non-zero, then KUIPERTWO will display a plot of the CDF of the two data sets. The data values where the Kuiper statistic is computed (i.e. at the maximum difference between the CDF of the two data sets) are indicated by vertical dashed lines. KUIPERTWO accepts the _EXTRA keyword, so that most plot keywords (e.g. TITLE, XTITLE, XSTYLE) can also be passed to KUIPERTWO. /WINDOW - If set the plot to a resizeable graphics window. EXAMPLE: Test whether two vectors created by the RANDOMN function likely came from the same distribution IDL> data1 = randomn(seed,40) ;Create data vectors to be IDL> data2 = randomn(seed,70) ;compared IDL> kuipertwo, data1, data2, D, prob & print,D,prob PROCEDURE CALLS procedure PROB_KUIPER - computes significance of Kuiper distribution REVISION HISTORY: Written W. Landsman August, 1992 FP computation of N_eff H. Ebeling/W. Landsman March 1996 Fix for arrays containing equal values J. Ballet/W. Landsman Oct. 2001 Adapted from KSTWO, added PLOT keyword J. Ballet July 2004 Use Coyote Graphics W. Landsman Feb 2011
(See $IDLUTILS_DIR/goddard/pro/math/kuipertwo.pro)
LEGEND
NAME: LEGEND PURPOSE: Create an annotation legend for a plot. EXPLANATION: NOTE: This procedure is *deprecated* because IDL 8.0 contains a LEGEND() function written in IDL. Both can be used provided that the one found later in one's !PATH is explicitly compiled in one's startup file. However we strongly recommend the use of AL_LEGEND, which is identical in use to LEGEND. legend.pro will eventually be removed from future releases of the IDL Astron library. This procedure makes a legend for a plot. The legend can contain a mixture of symbols, linestyles, Hershey characters (vectorfont), and filled polygons (usersym). A test procedure, legendtest.pro, shows legend's capabilities. Placement of the legend is controlled with keywords like /right, /top, and /center or by using a position keyword for exact placement (position=[x,y]) or via mouse (/position). CALLING SEQUENCE: LEGEND [,items][,keyword options] EXAMPLES: The call: legend,['Plus sign','Asterisk','Period'],psym=[1,2,3] produces: ----------------- | | | + Plus sign | | * Asterisk | | . Period | | | ----------------- Each symbol is drawn with a plots command, so they look OK. Other examples are given in optional output keywords. lines = indgen(6) ; for line styles items = 'linestyle '+strtrim(lines,2) ; annotations legend,items,linestyle=lines ; vertical legend---upper left items = ['Plus sign','Asterisk','Period'] sym = [1,2,3] legend,items,psym=sym ; ditto except using symbols legend,items,psym=sym,/horizontal ; horizontal format legend,items,psym=sym,box=0 ; sans border legend,items,psym=sym,delimiter='=' ; embed '=' betw psym & text legend,items,psym=sym,margin=2 ; 2-character margin legend,items,psym=sym,position=[x,y] ; upper left in data coords legend,items,psym=sym,pos=[x,y],/norm ; upper left in normal coords legend,items,psym=sym,pos=[x,y],/device ; upper left in device coords legend,items,psym=sym,/position ; interactive position legend,items,psym=sym,/right ; at upper right legend,items,psym=sym,/bottom ; at lower left legend,items,psym=sym,/center ; approximately near center legend,items,psym=sym,number=2 ; plot two symbols, not one legend,items,/fill,psym=[8,8,8],colors=[10,20,30]; 3 filled squares INPUTS: items = text for the items in the legend, a string array. For example, items = ['diamond','asterisk','square']. You can omit items if you don't want any text labels. OPTIONAL INPUT KEYWORDS: linestyle = array of linestyle numbers If linestyle[i] < 0, then omit ith symbol or line to allow a multi-line entry. If linestyle = -99 then text will be left-justified. psym = array of plot symbol numbers. If psym[i] is negative, then a line connects pts for ith item. If psym[i] = 8, then the procedure usersym is called with vertices define in the keyword usersym. If psym[i] = 88, then use the previously defined user symbol. If 11 <= psym[i] <= 46 then David Fanning's function SYMCAT() will be used for additional symbols. (http://www.idlcoyote.com/programs/symcat.pro). Note that PSYM=10 (histogram plot mode) is not allowed since it cannot be used with the PLOTS command. vectorfont = vector-drawn characters for the sym/line column, e.g., ['!9B!3','!9C!3','!9D!3'] produces an open square, a checkmark, and a partial derivative, which might have accompanying items ['BOX','CHECK','PARTIAL DERIVATIVE']. There is no check that !p.font is set properly, e.g., -1 for X and 0 for PostScript. This can produce an error, e.g., use !20 with PostScript and !p.font=0, but allows use of Hershey *AND* PostScript fonts together. N. B.: Choose any of linestyle, psym, and/or vectorfont. If none is present, only the text is output. If more than one is present, all need the same number of elements, and normal plot behaviour occurs. By default, if psym is positive, you get one point so there is no connecting line. If vectorfont[i] = '', then plots is called to make a symbol or a line, but if vectorfont[i] is a non-null string, then xyouts is called. /help = flag to print header /horizontal = flag to make the legend horizontal /vertical = flag to make the legend vertical (D=vertical) box = flag to include/omit box around the legend (D=include) outline_color = color of box outline (D = !P.color) bthick = thickness of the legend box (D = !P.thick) clear = flag to clear the box area before drawing the legend delimiter = embedded character(s) between symbol and text (D=none) colors = array of colors for plot symbols/lines (D=!P.color) font = scalar font graphics keyword (-1,0 or 1) for text textcolors = array of colors for text (D=!P.color) margin = margin around text measured in characters and lines spacing = line spacing (D=bit more than character height) linsize = Scale factor for line length (0-1), default = 1 Set to 0 to give a dot, 0.5 give half default line length pspacing = psym spacing (D=3 characters) (when number of symbols is greater than 1) charsize = just like !p.charsize for plot labels charthick = just like !p.charthick for plot labels thick = array of line thickness numbers (D = !P.thick), if used, then linestyle must also be specified position = data coordinates of the /top (D) /left (D) of the legend normal = use normal coordinates for position, not data device = use device coordinates for position, not data number = number of plot symbols to plot or length of line (D=1) usersym = 2-D array of vertices, cf. usersym in IDL manual. (/USERSYM =square, default is to use existing USERSYM definition) /fill = flag to fill the usersym /left_legend = flag to place legend snug against left side of plot window (D) /right_legend = flag to place legend snug against right side of plot window. If /right,pos=[x,y], then x is position of RHS and text runs right-to-left. /top_legend = flag to place legend snug against top of plot window (D) /bottom = flag to place legend snug against bottom of plot window /top,pos=[x,y] and /bottom,pos=[x,y] produce same positions. If LINESTYLE, PSYM, VECTORFONT, THICK, COLORS, or TEXTCOLORS are supplied as scalars, then the scalar value is set for every line or symbol in the legend. Outputs: legend to current plot device OPTIONAL OUTPUT KEYWORDS: corners = 4-element array, like !p.position, of the normalized coords for the box (even if box=0): [llx,lly,urx,ury]. Useful for multi-column or multi-line legends, for example, to make a 2-column legend, you might do the following: c1_items = ['diamond','asterisk','square'] c1_psym = [4,2,6] c2_items = ['solid','dashed','dotted'] c2_line = [0,2,1] legend,c1_items,psym=c1_psym,corners=c1,box=0 legend,c2_items,line=c2_line,corners=c2,box=0,pos=[c1[2],c1[3]] c = [c1[0]<c2[0],c1[1]<c2[1],c1[2]>c2[2],c1[3]>c2[3]] plots,[c[0],c[0],c[2],c[2],c[0]],[c[1],c[3],c[3],c[1],c[1]],/norm Useful also to place the legend. Here's an automatic way to place the legend in the lower right corner. The difficulty is that the legend's width is unknown until it is plotted. In this example, the legend is plotted twice: the first time in the upper left, the second time in the lower right. legend,['1','22','333','4444'],linestyle=indgen(4),corners=corners ; BOGUS LEGEND---FIRST TIME TO REPORT CORNERS xydims = [corners[2]-corners[0],corners[3]-corners[1]] ; SAVE WIDTH AND HEIGHT chdim=[!d.x_ch_size/float(!d.x_size),!d.y_ch_size/float(!d.y_size)] ; DIMENSIONS OF ONE CHARACTER IN NORMALIZED COORDS pos = [!x.window[1]-chdim[0]-xydims[0] $ ,!y.window[0]+chdim[1]+xydims[1]] ; CALCULATE POSITION FOR LOWER RIGHT plot,findgen(10) ; SIMPLE PLOT; YOU DO WHATEVER YOU WANT HERE. legend,['1','22','333','4444'],linestyle=indgen(4),pos=pos ; REDO THE LEGEND IN LOWER RIGHT CORNER You can modify the pos calculation to place the legend where you want. For example to place it in the upper right: pos = [!x.window[1]-chdim[0]-xydims[0],!y.window[1]-xydims[1]] Common blocks: none Procedure: If keyword help is set, call doc_library to print header. See notes in the code. Much of the code deals with placement of the legend. The main problem with placement is not being able to sense the length of a string before it is output. Some crude approximations are used for centering. Restrictions: Here are some things that aren't implemented. - An orientation keyword would allow lines at angles in the legend. - An array of usersyms would be nice---simple change. - An order option to interchange symbols and text might be nice. - Somebody might like double boxes, e.g., with box = 2. - Another feature might be a continuous bar with ticks and text. - There are no guards to avoid writing outside the plot area. - There is no provision for multi-line text, e.g., '1st line!c2nd line' Sensing !c would be easy, but !c isn't implemented for PostScript. A better way might be to simply output the 2nd line as another item but without any accompanying symbol or linestyle. A flag to omit the symbol and linestyle is linestyle[i] = -1. - There is no ability to make a title line containing any of titles for the legend, for the symbols, or for the text. Side Effects: Modification history: write, 24-25 Aug 92, F K Knight (knight@ll.mit.edu) allow omission of items or omission of both psym and linestyle, add corners keyword to facilitate multi-column legends, improve place- ment of symbols and text, add guards for unequal size, 26 Aug 92, FKK add linestyle(i)=-1 to suppress a single symbol/line, 27 Aug 92, FKK add keyword vectorfont to allow characters in the sym/line column, 28 Aug 92, FKK add /top, /bottom, /left, /right keywords for automatic placement at the four corners of the plot window. The /right keyword forces right-to-left printing of menu. 18 Jun 93, FKK change default position to data coords and add normal, data, and device keywords, 17 Jan 94, FKK add /center keyword for positioning, but it is not precise because text string lengths cannot be known in advance, 17 Jan 94, FKK add interactive positioning with /position keyword, 17 Jan 94, FKK allow a legend with just text, no plotting symbols. This helps in simply describing a plot or writing assumptions done, 4 Feb 94, FKK added thick, symsize, and clear keyword Feb 96, W. Landsman HSTX David Seed, HR Wallingford, d.seed@hrwallingford.co.uk allow scalar specification of keywords, Mar 96, W. Landsman HSTX added charthick keyword, June 96, W. Landsman HSTX Made keyword names left,right,top,bottom,center longer, Aug 16, 2000, Kim Tolbert Added ability to have regular text lines in addition to plot legend lines in legend. If linestyle is -99 that item is left-justified. Previously, only option for no sym/line was linestyle=-1, but then text was lined up after sym/line column. 10 Oct 2000, Kim Tolbert Make default value of thick = !P.thick W. Landsman Jan. 2001 Don't overwrite existing USERSYM definition W. Landsman Mar. 2002 Added outline_color BT 24 MAY 2004 Pass font keyword to xyouts commands. M. Fitzgerald, Sep. 2005 Default spacing, pspacing should be relative to charsize. M. Perrin, July 2007 Don't modify position keyword A. Kimball/ W. Landsman Jul 2007 Small update to Jul 2007 for /NORMAL coords. W. Landsman Aug 2007 Use SYMCAT() plotting symbols for 11<=PSYM<=46 W. Landsman Nov 2009 Make a sharper box edge T. Robishaw/W.Landsman July 2010 Added BTHICK keyword W. Landsman October 2010 Added LINESIZ keyword W.L./V.Gonzalez May 2011 Use CHARSIZE instead of SIZE keyword in XYOUTS W.L./S.Erard Jul 2011
(See $IDLUTILS_DIR/goddard/pro/plot/legend.pro)
LEGENDTEST
NAME: LEGENDTEST PURPOSE: Demo program to show capabilities of the legend procedure. CALLING SEQUENCE: legendtest INPUTS: none OPTIONAL INPUTS: none KEYWORDS: none OUTPUTS: legends of note COMMON BLOCKS: none SIDE EFFECTS: Sets !20 font to symbol if PostScript and !p.font=0. RESTRICTIONS: With the vectorfont test, you'll get different results for PostScript depending on the value of !p.font. MODIFICATION HISTORY: write, 27 Aug 92, F.K.Knight (knight@ll.mit.edu) add test of /left,/right,/top,/bottom keywords, 21 June 93, FKK update based on recent changes to legend, 7 Feb 94, FKK Fix ambiguous CHAR keyword W. Landsman Sep 2007 Use Coyote graphics routines W. Landsman Jan 2011
(See $IDLUTILS_DIR/goddard/pro/plot/legendtest.pro)
LINEID_PLOT
NAME: LINEID_PLOT PURPOSE: Plot spectrum with specified line identifications annotated at the top of the plot. CALLING SEQUENCE: lineid_plot, wave, flux, wline, text1, [ text2, LCHARSIZE=, LCHARTHICK=, EXTEND =, ...plotting keywords] INPUTS: wave - wavelength vector for the plot flux - flux vector wline - wavelength vector of line identifications. (only the lines between the plot limits will be used) text1 - string array of text to be used to annotate each line text2 - (OPTIONAL) second string array of text to be used for line annotation. Since the text is written with proportional spaced characters, TEXT2 can be used if you want two sets of annotation to be alinged: eg: Cr IV 1390.009 Fe V 1390.049 Ni IV 1390.184 instead of Cr IV 1390.009 Fe V 1390.049 Ni IV 1390.184 OPTIONAL KEYWORD INPUTS: EXTEND - specifies that the annotated lines should have a dotted line extended to the spectrum to indicate the line position. EXTEND can be a scalar (applies to all lines) or a vector with a different value for each line. The value of EXTEND gives the line IDL plot line thickness for the dotted lines. If EXTEND is a vector each dotted line can have a different thickness. A value of 0 indicates that no dotted line is to be drawn. (default = scalar 0) LCHARSIZE - the character size of the annotation for each line. If can be a vector so that different lines are annotated with different size characters. LCHARSIZE can be used to make stronger lines have a larger annotation. (default = scalar 1.0). LCHARTHICK = the character thickness of the annotation for each line. It can be a vector so that different lines are annotated with characters of varying thickness. LCHARTHICK can be used to make stronger lines have a bolder annotation. (default = !p.charthick) LINEID_PLOT uses the _EXTRA facility to allow the use of any cgPLOT keywords (e.g. AXISCOLOR, LINESTYLE, CHARSIZE) to be passed to the plot. SIDE EFFECTS: Program uses SET_VIEWPORT to set the !P.POSITION parameter to allow room for the annotation. This system variable can be reset to the default value by setting !P.POSTION=0 or typing SET_VIEWPORT with no parameters OPERATIONAL NOTES: Once the program has completed, You can use OPLOT to draw additional plots on the display. If your annotated characters are not being rotated properly, try setting !P.FONT to a non zero value. EXAMPLE: Annotate some interstellar lines between 1240 and 1270 A. IDL> w = 1240+ indgen(300)*0.1 ;Make a wavelength vector IDL> f = randomn(seed,300) ;Random flux vector IDL> id = ['N V','Si II','Si II','Si II'] ;Line IDs IDL> wl = [1242.80,1260.42,1264.74,1265.00] ;Line positions IDL> lineid_plot,w,f,wl,id,wl,/ext Note that LINEID_PLOT is smart enough not to overlap the annotation for the two closely spaced lines at 1264.74 and 1265.00 HISTORY: version 1 D. Lindler Jan, 1992 Sept 27, 1993 DJL fixed bug in /extend option Apr 19, 1994 DJL corrected bug in sorting of charthick (cthick) Sep 1996, W. Landsman, added _EXTRA keyword, changed keyword names CHARTHICK==>LCHARTHICK, CHARSIZE==>LCHARSIZE Work with !P.MULTI W. Landsman December 2003 Use Coyote graphics routines W. Landsman February 2011
(See $IDLUTILS_DIR/goddard/pro/plot/lineid_plot.pro)
LINKEDLIST
NAME: LINKEDLIST FILENAME: linkedlist__define.pro PURPOSE: The purpose of this program is to implement a list that is linked in both the forward and backward directions. There is no restriction as to what can be stored in a linked list node. The linked list is implemented as an object. AUTHOR: FANNING SOFTWARE CONSULTING David Fanning, Ph.D. 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com/ CATEGORY: General programming. CALLING SEQUENCE: mylist = Obj_New('LINKEDLIST', item) OPTIONAL INPUTS: item: The first item added to the list. Items can be any valid IDL variable type. COMMON BLOCKS: Are you kidding?! RESTRICTIONS: Be sure to destroy the LINKEDLIST object when you are finished with it: Obj_Destroy, mylist Node index numbers start at 0 and go to n-1, where n is the number of items in the list. PUBLIC METHODS: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; PRO LINKEDLIST::ADD, item, index, $ AFTER=after, $ BEFORE=before, $ ERROR=error, $ NO_COPY=no_copy, $ REPLACE=replace The ADD method adds a data item to the list. Parameters: item: The data item to be added to the list. Required. index: The location in the list where the data item is to be added. If neither the AFTER or BEFORE keyword is set, the item is added AFTER the item at the index location. If index is missing, the index points to the last item in the list. Optional. Keywords: AFTER: If this keyword is set, the item is added after the item at the current index. BEFORE: If this keyword is set, the item is added before the item at the current index. ERROR: On return, if this is not a null string, an error occurred and this value is set equal to the error message. NO_COPY: If set, the item is transferred to the internal pointer using a no copy method. This will cause the item variable to become undefined. REPLACE: If this keyword is set, the item will replace the current item at the index location. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; PRO LINKEDLIST::DELETE, index, ALL=all, DESTROY=destroy, ERROR=error The DELETE method deletes an item from the list. Parameters: index: The location in the list where the data item is to be delete. If index is missing, the index points to the last item in the list. Optional. Keywords: ALL: If this keyword is set, all items in the list are deleted. DESTROY: If the item at the node is an object or pointer, the item will be destroyed before the node is deleted. This keyword is turned on (set to 1) by default. Set to 0 to prevent destruction. ERROR: On return, if this is not a null string, an error occurred and this value is set equal to the error message. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; FUNCTION LINKEDLIST::GET_COUNT The GET_COUNT method returns the number of items in the list. Return Value: The number of items stored in the linked list. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; FUNCTION LINKEDLIST::GET_ITEM, index, $ ALL=all, $ ; This ASSUMES all items stored are the same type!!! Dereference=dereference, $ ; Obsolete. Ignored. Always returns item. ItemPtr=itemPtr, $ ; The pointer to the item, if needed. Output. NO_COPY=no_copy, $ ; Copy from location with NO_COPY. ERROR=errorMsg ; The error message. Null string if no error. Parameters: index: The location in the list from which the data item is to be retrieved. If not present, the last item in the list is retrieved. Optional. Keywords: DEREFERENCE: This keyword obsolete and only provided for backward compatibility. ALL: Set this keyword to return an n-element array containing all the list items. This requires that all list items be of the same type, and if they are arrays, they have 7 dimensions or fewer. If index is passed, it is ignored. ITEMPTR: The pointer to the data item. NO_COPY: If this keyword is set, the item is transferred from the data pointer using a NO_COPY method. This will undefine the item at that indexed locaton. ERROR: On return, if this is not a null string, an error occurred and this value is set equal to the error message. Return Value: The data item at this index on the list. If ALL is set, then an array containing all the data items is returned. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; FUNCTION LINKEDLIST::GET_NODE, index, ERROR=error The GET_NODE method returns a pointer to the specified node from the list. Parameters: index: The location in the list from which the data node is to be retrieved. If not present, the last node in the list is retrieved. The node is a structure with three fields: Previous is a pointer to the previous node in the list. Next is a pointer to the next node in the list. A null pointer in the previous field indicates the first node on the list. A null pointer in the next field indicates the last node on the list. The item field is a pointer to the item stored in the node. Optional. ERROR: On return, if this is not a null string, an error occurred and this value is set equal to the error message. Return Value: A pointer to the specified node structure in the linked list. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; PRO LINKEDLIST::HELP, PRINT=print The HELP method performs a HELP command on each item in the linked list. Keywords: PRINT: If this keyword is set, the PRINT command is used instead of the HELP command on the items in the list. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; PRO LINKEDLIST::MOVE_NODE, nodeIndex, location, BEFORE=before, ERROR=error The MOVE_NODE method moves a list node from one location to another. Parameters: nodeIndex: The location in the list of the node you are moving. Required. location: The location (index) you are moving the node to. If location is missing, the location points to the node at the end of the list. Keywords: BEFORE: If this keyword is set, the node is added to the list before the location node. Otherwise, it is added after the location node. ERROR: On return, if this is not a null string, an error occurred and this value is set equal to the error message. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; PRO LINKEDLIST::REPLACE_ITEM, newItem, index, ERROR=error Use this method to replace any item in the list with any other value. This allows the caller to change an item without stepping through the process of deleting an item then adding a new one. Parameters: index: The location of the node you are replacing newItem: Any value of any data type. ERROR: On return, if this is not a null string, an error occurred and this value is set equal to the error message. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; FUNCTION LINKEDLIST::HAVE_ITEM, index, ERROR=error Use this method to check to see if an item exits at a particular location on the list. Returns a 1 if the item is there, otherwise a 0. Parameters: index: The location of the node you are replacing ERROR: On return, if this is not a null string, an error occurred and this value is set equal to the error message. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; EXAMPLE: mylist = Obj_New("LINKEDLIST", 5) mylist->Add, 10 mylist->Add, 7, 1, /Before mylist->Add, 12 print, mylist->Get_Item(/All) mylist->Add, 'Bob', 2, /Replace mylist->Help mylist->Delete, 0 mylist->Help, /Print MODIFICATION HISTORY: Written by: David Fanning, 25 August 98. 25 August 99. Fixed several errors in various methods dealing with moving nodes from one place to another. DWF. 13 June 2001. DWF. Added DEREFERENCE to the GET_ITEM method to return the item itself, instead of the pointer to the item. 27 June 2001 Added REPLACE_ITEM method. Ben Tupper. 7 April 2003. Added DESTROY keyword to DELETE method so that objects and pointers could be cleaned up properly when they are deleted from the linked list. DWF. 9 April 2003. Fixed a problem that occurs when deleting the last node. DWF. 3 Feb 2004. Make sure loop index vars are long. Jeff Guerber 30 Jun 2004. Added /ALL to GET_ITEM function. Henry Throop, SWRI. 23 Nov 2004. Fixed GET_ITEM, /ALL to accomodate structures and empty lists. Henry Throop. 21 February 2011. A complete refurbishing to incorporate changes and to fix bugs I found in the SolarSoft version of this code. I've tried to make this compatible with the version distributed with SolarSoft to reduce problems caused by two versions of the software with the same name. 9 December 2011. Fixed a problem with the ALL keyword on the Get_Item method. DWF.
(See $IDLUTILS_DIR/goddard/pro/coyote/linkedlist__define.pro)
LINMIX_ERR
NAME: LINMIX_ERR PURPOSE: Bayesian approach to linear regression with errors in both X and Y EXPLANATION: Perform linear regression of y on x when there are measurement errors in both variables. the regression assumes : ETA = ALPHA + BETA * XI + EPSILON X = XI + XERR Y = ETA + YERR Here, (ALPHA, BETA) are the regression coefficients, EPSILON is the intrinsic random scatter about the regression, XERR is the measurement error in X, and YERR is the measurement error in Y. EPSILON is assumed to be normally-distributed with mean zero and variance SIGSQR. XERR and YERR are assumed to be normally-distributed with means equal to zero, variances XSIG^2 and YSIG^2, respectively, and covariance XYCOV. The distribution of XI is modelled as a mixture of normals, with group proportions PI, mean MU, and variance TAUSQR. Bayesian inference is employed, and a structure containing random draws from the posterior is returned. Convergence of the MCMC to the posterior is monitored using the potential scale reduction factor (RHAT, Gelman et al.2004). In general, when RHAT < 1.1 then approximate convergence is reached. Simple non-detections on y may also be included. CALLING SEQUENCE: LINMIX_ERR, X, Y, POST, XSIG=, YSIG=, XYCOV=, DELTA=, NGAUSS=, /SILENT, /METRO, MINITER= , MAXITER= INPUTS : X - THE OBSERVED INDEPENDENT VARIABLE. THIS SHOULD BE AN NX-ELEMENT VECTOR. Y - THE OBSERVED DEPENDENT VARIABLE. THIS SHOULD BE AN NX-ELEMENT VECTOR. OPTIONAL INPUTS : XSIG - THE 1-SIGMA MEASUREMENT ERRORS IN X, AN NX-ELEMENT VECTOR. YSIG - THE 1-SIGMA MEASUREMENT ERRORS IN Y, AN NX-ELEMENT VECTOR. XYCOV - THE COVARIANCE BETWEEN THE MEASUREMENT ERRORS IN X AND Y, AND NX-ELEMENT VECTOR. DELTA - AN NX-ELEMENT VECTOR INDICATING WHETHER A DATA POINT IS CENSORED OR NOT. IF DELTA[i] = 1, THEN THE SOURCE IS DETECTED, ELSE IF DELTA[i] = 0 THE SOURCE IS NOT DETECTED AND Y[i] SHOULD BE AN UPPER LIMIT ON Y[i]. NOTE THAT IF THERE ARE CENSORED DATA POINTS, THEN THE MAXIMUM-LIKELIHOOD ESTIMATE (THETA) IS NOT VALID. THE DEFAULT IS TO ASSUME ALL DATA POINTS ARE DETECTED, IE, DELTA = REPLICATE(1, NX). METRO - IF METRO = 1, THEN THE MARKOV CHAINS WILL BE CREATED USING THE METROPOLIS-HASTINGS ALGORITHM INSTEAD OF THE GIBBS SAMPLER. THIS CAN HELP THE CHAINS CONVERGE WHEN THE SAMPLE SIZE IS SMALL OR IF THE MEASUREMENT ERRORS DOMINATE THE SCATTER IN X AND Y. SILENT - SUPPRESS TEXT OUTPUT. MINITER - MINIMUM NUMBER OF ITERATIONS PERFORMED BY THE GIBBS SAMPLER OR METROPOLIS-HASTINGS ALGORITHM. IN GENERAL, MINITER = 5000 SHOULD BE SUFFICIENT FOR CONVERGENCE. THE DEFAULT IS MINITER = 5000. THE MCMC IS STOPPED AFTER RHAT < 1.1 FOR ALL PARAMETERS OF INTEREST, AND THE NUMBER OF ITERATIONS PERFORMED IS GREATER THAN MINITER. MAXITER - THE MAXIMUM NUMBER OF ITERATIONS PERFORMED BY THE MCMC. THE DEFAULT IS 1D5. THE MCMC IS STOPPED AUTOMATICALLY AFTER MAXITER ITERATIONS. NGAUSS - THE NUMBER OF GAUSSIANS TO USE IN THE MIXTURE MODELLING. THE DEFAULT IS 3. IF NGAUSS = 1, THEN THE PRIOR ON (MU, TAUSQR) IS ASSUMED TO BE UNIFORM. OUTPUT : POST - A STRUCTURE CONTAINING THE RESULTS FROM THE MCMC. EACH ELEMENT OF POST IS A DRAW FROM THE POSTERIOR DISTRIBUTION FOR EACH OF THE PARAMETERS. ALPHA - THE CONSTANT IN THE REGRESSION. BETA - THE SLOPE OF THE REGRESSION. SIGSQR - THE VARIANCE OF THE INTRINSIC SCATTER. PI - THE GAUSSIAN WEIGHTS FOR THE MIXTURE MODEL. MU - THE GAUSSIAN MEANS FOR THE MIXTURE MODEL. TAUSQR - THE GAUSSIAN VARIANCES FOR THE MIXTURE MODEL. MU0 - THE HYPERPARAMETER GIVING THE MEAN VALUE OF THE GAUSSIAN PRIOR ON MU. ONLY INCLUDED IF NGAUSS > 1. USQR - THE HYPERPARAMETER DESCRIBING FOR THE PRIOR VARIANCE OF THE INDIVIDUAL GAUSSIAN CENTROIDS ABOUT MU0. ONLY INCLUDED IF NGAUSS > 1. WSQR - THE HYPERPARAMETER DESCRIBING THE `TYPICAL' SCALE FOR THE PRIOR ON (TAUSQR,USQR). ONLY INCLUDED IF NGAUSS > 1. XIMEAN - THE MEAN OF THE DISTRIBUTION FOR THE INDEPENDENT VARIABLE, XI. XISIG - THE STANDARD DEVIATION OF THE DISTRIBUTION FOR THE INDEPENDENT VARIABLE, XI. CORR - THE LINEAR CORRELATION COEFFICIENT BETWEEN THE DEPENDENT AND INDEPENDENT VARIABLES, XI AND ETA. CALLED ROUTINES : RANDOMCHI, MRANDOMN, RANDOMGAM, RANDOMDIR, MULTINOM REFERENCES : Carroll, R.J., Roeder, K., & Wasserman, L., 1999, Flexible Parametric Measurement Error Models, Biometrics, 55, 44 Kelly, B.C., 2007, Some Aspects of Measurement Error in Linear Regression of Astronomical Data, The Astrophysical Journal, 665, 1489 (arXiv:0705.2774) Gelman, A., Carlin, J.B., Stern, H.S., & Rubin, D.B., 2004, Bayesian Data Analysis, Chapman & Hall/CRC REVISION HISTORY AUTHOR : BRANDON C. KELLY, STEWARD OBS., JULY 2006 - MODIFIED PRIOR ON MU0 TO BE UNIFORM OVER [MIN(X),MAX(X)] AND PRIOR ON USQR TO BE UNIFORM OVER [0, 1.5 * VARIANCE(X)]. THIS TENDS TO GIVE BETTER RESULTS WITH FEWER GAUSSIANS. (B.KELLY, MAY 2007) - FIXED BUG SO THE ITERATION COUNT RESET AFTER THE BURNIN STAGE WHEN SILENT = 1 (B. KELLY, JUNE 2009) - FIXED BUG WHEN UPDATING MU VIA THE METROPOLIS-HASTING UPDATE. PREVIOUS VERSIONS DID NO INDEX MUHAT, SO ONLY MUHAT[0] WAS USED IN THE PROPOSAL DISTRIBUTION. THANKS TO AMY BENDER FOR POINTING THIS OUT. (B. KELLY, DEC 2011)
(See $IDLUTILS_DIR/goddard/pro/math/linmix_err.pro)
LINTERP
NAME: LINTERP PURPOSE: Linearly interpolate tabulated 1-d data from one grid to a new one. EXPLANATION: The results of LINTERP are numerically equivalent to the RSI INTERPOL() function, but note the following: (1) LINTERP is a procedure rather than a function (2) INTERPOL() extrapolates beyond the end points whereas LINTERP truncates to the endpoints (or uses the MISSING keyword) (3) LINTERP (unlike INTERPOL) uses the intrinsic INTERPOLATE function and thus may have a speed advantage (4) LINTERP always converts the new grid vector to floating point (because INTERPOLATE does this) whereas INTERPOL() will keep double precision if supplied. Use QUADTERP for quadratic interpolation. CALLING SEQUENCE: LINTERP, Xtab, Ytab, Xint, Yint, [MISSING =, /NoInterp ] INPUT PARAMETERS: Xtab - Vector containing the current independent variable grid. Must be monotonic increasing or decreasing Ytab - Vector containing the current dependent variable values at the XTAB grid points. Xint - Scalar or vector containing the new independent variable grid points for which interpolated value(s) of the dependent variable are sought. Note that -- due to a limitation of the intrinsic INTERPOLATE() function -- Xint is always converted to floating point internally. OUTPUT PARAMETERS: Yint - Scalar or vector with the interpolated value(s) of the dependent variable at the XINT grid points. YINT is double precision if XTAB or YTAB are double, otherwise YINT is REAL*4 OPTIONAL INPUT KEYWORD: MISSING - Scalar specifying YINT value(s) to be assigned, when Xint value(s) are outside of the range of Xtab. Default is to truncate the out of range YINT value(s) to the nearest value of YTAB. See the help for the INTERPOLATE function. /NoINTERP - If supplied then LINTERP returns the YTAB value(s) associated with the closest XTAB value(s)rather than interpolating. EXAMPLE: To linearly interpolate from a spectrum wavelength-flux pair WAVE, FLUX to another wavelength grid defined as: WGRID = [1540., 1541., 1542., 1543., 1544, 1545.] IDL> LINTERP, WAVE, FLUX, WGRID, FGRID FGRID will be a 6 element vector containing the values of FLUX linearly interpolated onto the WGRID wavelength scale PROCEDURE: Uses TABINV to calculate the effective index of the values in Xint in the table Xtab. The resulting index is used with the intrinsic INTERPOLATE function to find the corresponding Yint value in Ytab. Unless the MISSING keyword is supplied, out of range Yint values are truncated to the nearest value of Ytab. PROCEDURES CALLED: TABINV, ZPARCHECK MODIFICATION HISTORY: Adapted from the IUE RDAF, W. Landsman October, 1988 Modified to use the new INTERPOLATE function June, 1992 Modified to always return REAL*4 October, 1992 Added MISSING keyword August, 1993 Converted to IDL V5.0 W. Landsman September 1997 Added NoInterp keyword W. Landsman July 1999 Work for unsigned, 64 bit integers W. Landsman October 2001
(See $IDLUTILS_DIR/goddard/pro/math/linterp.pro)
LIST_WITH_PATH
NAME: LIST_WITH_PATH PURPOSE: Search for files in a specified directory path. EXPLANATION: Lists files in a set of default paths, similar to using FILE_SEARCH, except that a list of paths to be searched can be given. CALLING SEQUENCE: Result = LIST_WITH_PATH( FILENAME, PATHS ) INPUTS: FILENAME = Name of file to be searched for. It may contain wildcard characters, e.g. "*.dat". 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. Environmental variables can themselves contain multiple paths. OUTPUTS: The result of the function is a list of filenames. EXAMPLE: FILENAME = '' READ, 'File to open: ', FILENAME FILE = LIST_WITH_PATH( FILENAME, 'SERTS_DATA', '.fix' ) IF FILE NE '' THEN ... PROCEDURE CALLS: BREAK_PATH, CONCAT_DIR() Category : Utilities, Operating_system REVISION HISTORY: Version 1, William Thompson, GSFC, 3 November 1994 Documentation modified Wayne Landsman HSTX November 1994 Assume since V5.5, vector call to FILE_SEARCH() W. Landsman Sep 2006 Restore pre-Sep 2006 behavior of not searching subdirectories W.Landsman. Feb 2007
(See $IDLUTILS_DIR/goddard/pro/misc/list_with_path.pro)
LSF_ROTATE:
NAME: LSF_ROTATE: PURPOSE: Create a 1-d convolution kernel to broaden a spectrum from a rotating star EXPLANATION: Can be used to derive the broadening effect (line spread function; LSF) due to rotation on a synthetic stellar spectrum. Assumes constant limb darkening across the disk. CALLING SEQUENCE lsf = LSF_ROTATE(deltav, vsini, EPSILON=, VELGRID=) INPUT PARAMETERS: deltaV - numeric scalar giving the step increment (in km/s) in the output rotation kernel. Vsini - the rotational velocity projected along the line of sight (km/s) OUTPUT PARAMETERS: LSF - The convolution kernel vector for the specified rotational velocity. The number of points in LSF will be always be odd (the kernel is symmetric) and equal to either ceil(2*Vsini/deltav) or ceil(2*Vsini/deltav) +1 (whichever number is odd). LSF will always be of type FLOAT. To actually compute the broadening. the spectrum should be convolved with the rotational LSF. OPTIONAL INPUT PARAMETERS: Epsilon - numeric scalar giving the limb-darkening coefficient, default = 0.6 which is typical for photospheric lines. The specific intensity I at any angle theta from the specific intensity Icen at the center of the disk is given by: I = Icen*(1-epsilon*(1-cos(theta)) OPTIONAL OUTPUT PARAMETER: Velgrid - Vector with the same number of elements as LSF EXAMPLE: (1) Plot the LSF for a star rotating at 90 km/s in both velocity space and for a central wavelength of 4300 A. Compute the LSF every 3 km/s IDL> lsf = lsf_rotate(3,90,velgrid=vel) ;LSF will contain 61 pts IDL> plot,vel,lsf ;Plot the LSF in velocity space IDL> wgrid = 4300*(1+vel/3e5) ;Speed of light = 3e5 km/s IDL> oplot,wgrid,lsf ;Plot in wavelength space NOTES: Adapted from rotin3.f in the SYNSPEC software of Hubeny & Lanz .http://nova.astro.umd.edu/index.html Also see Eq. 17.12 in "The Observation and Analysis of Stellar Photospheres" by D. Gray (1992) REVISION HISTORY: Written, W. Landsman November 2001
(See $IDLUTILS_DIR/goddard/pro/astro/lsf_rotate.pro)
LUMDIST
NAME: LUMDIST PURPOSE: Calculate luminosity distance (in Mpc) of an object given its redshift EXPLANATION: The luminosity distance in the Friedmann-Robertson-Walker model is taken from Caroll, Press, and Turner (1992, ARAA, 30, 499), p. 511 Uses a closed form (Mattig equation) to compute the distance when the cosmological constant is zero. Otherwise integrates the function using QSIMP. CALLING SEQUENCE: result = lumdist(z, [H0 = , k = , Omega_M =, Lambda0 = , q0 = ,/SILENT]) INPUTS: z = redshift, positive scalar or vector OPTIONAL KEYWORD INPUTS: /SILENT - If set, the program will not display adopted cosmological parameters at the terminal. H0: Hubble parameter in km/s/Mpc, default is 70 No more than two of the following four parameters should be specified. None of them need be specified -- the adopted defaults are given. k - curvature constant, normalized to the closure density. Default is 0, indicating a flat universe Omega_m - Matter density, normalized to the closure density, default is 0.3. Must be non-negative Lambda0 - Cosmological constant, normalized to the closure density, default is 0.7 q0 - Deceleration parameter, numeric scalar = -R*(R'')/(R')^2, default is -0.55 OUTPUTS: The result of the function is the luminosity distance (in Mpc) for each input value of z. EXAMPLE: (1) Plot the distance of a galaxy in Mpc as a function of redshift out to z = 5.0, assuming the default cosmology (Omega_m=0.3, Lambda = 0.7, H0 = 70 km/s/Mpc) IDL> z = findgen(50)/10. IDL> plot,z,lumdist(z),xtit='z',ytit='Distance (Mpc)' Now overplot the relation for zero cosmological constant and Omega_m=0.3 IDL> oplot,z,lumdist(z,lambda=0,omega=0.3),linestyle=1 COMMENTS: (1) Integrates using the IDL Astronomy Version procedure QSIMP. (The intrinsic IDL QSIMP function is not called because of its ridiculous restriction that only scalar arguments can be passed to the integrating function.) (2) Can fail to converge at high redshift for closed universes with non-zero lambda. This can presumably be fixed by replacing QSIMP with an integrator that can handle a singularity PROCEDURES CALLED: COSMO_PARAM, QSIMP REVISION HISTORY: Written W. Landsman Raytheon ITSS April 2000 Avoid integer overflow for more than 32767 redshifts July 2001 Use double precision J. Moustakas/W. Landsman April 2008
(See $IDLUTILS_DIR/goddard/pro/astro/lumdist.pro)
MAG2FLUX
NAME: MAG2FLUX PURPOSE: Convert from magnitudes to flux (ergs/s/cm^2/A). EXPLANATION: Use FLUX2MAG() for the opposite direction. CALLING SEQUENCE: flux = mag2flux( mag, [ zero_pt, ABwave = ] ) INPUTS: mag - scalar or vector of magnitudes 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 set. OPTIONAL KEYWORD INPUT: ABwave - wavelength scalar or vector in Angstroms. If supplied, then the input vector, mag, is assumed to contain Oke AB magnitudes (Oke & Gunn 1983, ApJ, 266, 713) OUTPUT: flux - scalar or vector flux vector, in erg cm-2 s-1 A-1 If the ABwave keyword is set, then the flux is given by f = 10^(-0.4*(mag +2.406 + 4*alog10(ABwave))) Otherwise the flux is given by f = 10^(-0.4*(mag + zero_pt)) EXAMPLE: Suppose one is given vectors of wavelengths and AB magnitudes, w (in Angstroms) and mag. Plot the spectrum in erg cm-2 s-1 A-1 IDL> plot, w, mag2flux(mag,ABwave = w) 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 $IDLUTILS_DIR/goddard/pro/astro/mag2flux.pro)
MAG2GEO()
NAME: MAG2GEO() PURPOSE: Convert from geomagnetic to geographic coordinates EXPLANATION: Converts from GEOMAGNETIC (latitude,longitude) to GEOGRAPHIC (latitude, longitude). (altitude remains the same) CALLING SEQUENCE: gcoord=mag2geo(mcoord) INPUT: mcoord = a 2-element array of magnetic [latitude,longitude], or an array [2,n] of n such coordinates. KEYWORD INPUTS: None OUTPUT: a 2-element array of geographic [latitude,longitude], or an array [2,n] of n such coordinates COMMON BLOCKS: None EXAMPLES: IDL> gcoord=mag2geo([90,0]) ; coordinates of magnetic south pole IDL> print,gcoord 79.300000 -71.409990 MODIFICATION HISTORY: Written by Pascal Saint-Hilaire (Saint-Hilaire@astro.phys.ethz.ch), May 2002
(See $IDLUTILS_DIR/goddard/pro/astro/mag2geo.pro)
MAKE_2D
NAME: MAKE_2D PURPOSE: Change from 1-d indexing to 2-d indexing EXPLANATION: Convert an N element X vector, and an M element Y vector, into N x M arrays giving all possible combination of X and Y pairs. Useful for obtaining the X and Y positions of each element of a regular grid. CALLING SEQUENCE: MAKE_2D, X, Y, [ XX, YY ] INPUTS: X - N element vector of X positions Y - M element vector of Y positions OUTPUTS: XX - N x M element array giving the X position at each pixel YY - N x M element array giving the Y position of each pixel If only 2 parameters are supplied then X and Y will be updated to contain the output arrays EXAMPLE: To obtain the X and Y position of each element of a 30 x 15 array IDL> x = indgen(30) & y = indgen(15) IDL> make_2d, x, y REVISION HISTORY: Written, Wayne Landsman ST Systems Co. May, 1988 Added /NOZERO keyword W. Landsman Mar, 1991 Converted to IDL V5.0 W. Landsman September 1997 Improved speed P. Broos July 2000
(See $IDLUTILS_DIR/goddard/pro/misc/make_2d.pro)
MAKE_ASTR
NAME: MAKE_ASTR PURPOSE: Build an astrometry structure from input parameter values EXPLANATION: This structure can be subsequently placed in a FITS header with PUTAST CALLING SEQUENCE: MAKE_ASTR, astr, CD = , DELT =, CRPIX =, CRVAL =, CTYPE =, LATPOLE = , LONGPOLE =, PV2_1 = PV2_2 = , PV2_3 = OUTPUT PARAMETER: ASTR - Anonymous structure containing astrometry info. See the documentation for EXTAST for descriptions of the individual tags REQUIRED INPUT KEYWORDS CRPIX - 2 element vector giving X and Y coordinates of reference pixel (def = NAXIS/2). VALUES MUST BE IN FITS CONVENTION (first pixel is [1,1]) AND NOT IDL CONVENTION (first pixel is [0,0]). CRVAL - 2 element double precision vector giving R.A. and DEC of reference pixel in DEGREES OPTIONAL INPUT KEYWORDS CD - 2 x 2 array containing the astrometry parameters CD1_1 CD1_2 in DEGREES/PIXEL CD2_1 CD2_2 DELT - 2 element vector giving physical increment at reference pixel in DEGREES/PIXEL default = [-1.0D, 1.0D]/3600. (1 arcsec/pixel) CTYPE - 2 element string vector giving projection types, default ['RA---TAN','DEC--TAN'] LATPOLE - Scalar latitude of the north pole, default = 0 LONGPOLE - scalar longitude of north pole, default = 180 Note that the default value of 180 is valid only for zenithal projections; it should be set to PV2_1 for conic projections, and zero for other projections. PV2 - Vector of projection parameters. Not required for some projections (e.g. TAN) and optional for others (e.g. SIN). Usually a 2 element vector, but may contain up to 21 elements for the Zenithal Polynomial (ZPN) projection. Corresponds to the keywords PV2_1, PV2_2... Defaults to 0.0 NOTES: (1) 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). (2) The name of the keyword for the CDELT parameter is DELT because the IDL keyword CDELT would conflict with the CD keyword (3) The astrometry structure definition was slightly modified in July 2003; all angles are now double precision, and the LATPOLE tag was added. In April 2007 the CRPIX tag was also changed to double precision. REVISION HISTORY: Written by W. Landsman Mar. 1994 Added LATPOLE, all angles double precision W. Landsman July 2003 Use PV2 keyword rather than PROJP1, PROJP2 W. Landsman May 2004 Make .CRPIX tag double precision, change CDELT default to 1"/pixel W. Landsman April 2007 Default plate scale is now 1"/pixel (not 1 deg/pix) WL Oct. 2010 Oct 2010 change should only apply when CD matrix not given M. Cushing/W.L. Aug 2011
(See $IDLUTILS_DIR/goddard/pro/astrom/make_astr.pro)
MATCH
NAME: MATCH PURPOSE: Routine to match values in two vectors. CALLING SEQUENCE: match, a, b, suba, subb, [ COUNT =, /SORT, EPSILON = ] INPUTS: a,b - two vectors to match elements, numeric or string data types OUTPUTS: suba - subscripts of elements in vector a with a match in vector b subb - subscripts of the positions of the elements in vector b with matchs in vector a. suba and subb are ordered such that a[suba] equals b[subb] OPTIONAL INPUT KEYWORD: /SORT - By default, MATCH uses two different algorithm: (1) the /REVERSE_INDICES keyword to HISTOGRAM is used for integer data, while (2) a sorting algorithm is used for non-integer data. The histogram algorithm is usually faster, except when the input vectors are sparse and contain very large numbers, possibly causing memory problems. Use the /SORT keyword to always use the sort algorithm. epsilon - if values are within epsilon, they are considered equal. Used only only for non-integer matching. Note that input vectors should be unique to within epsilon to provide one-to-one mapping.. Default=0. OPTIONAL KEYWORD OUTPUT: COUNT - set to the number of matches, integer scalar SIDE EFFECTS: The obsolete system variable !ERR is set to the number of matches; however, the use !ERR is deprecated in favor of the COUNT keyword RESTRICTIONS: The vectors a and b should not have duplicate values within them. You can use rem_dup function to remove duplicate values in a vector EXAMPLE: If a = [3,5,7,9,11] & b = [5,6,7,8,9,10] then IDL> match, a, b, suba, subb, COUNT = count will give suba = [1,2,3], subb = [0,2,4], COUNT = 3 and a[suba] = b[subb] = [5,7,9] METHOD: For non-integer data types, the two input vectors are combined and sorted and the consecutive equal elements are identified. For integer data types, the /REVERSE_INDICES keyword to HISTOGRAM of each array is used to identify where the two arrays have elements in common. HISTORY: D. Lindler Mar. 1986. Fixed "indgen" call for very large arrays W. Landsman Sep 1991 Added COUNT keyword W. Landsman Sep. 1992 Fixed case where single element array supplied W. Landsman Aug 95 Use a HISTOGRAM algorithm for integer vector inputs for improved performance W. Landsman March 2000 Work again for strings W. Landsman April 2000 Use size(/type) W. Landsman December 2002 Work for scalar integer input W. Landsman June 2003 Assume since V5.4, use COMPLEMENT to WHERE() W. Landsman Apr 2006 Added epsilon keyword Kim Tolbert March 14, 2008
(See $IDLUTILS_DIR/goddard/pro/misc/match.pro)
MATCH2
NAME: MATCH2 PURPOSE: Routine to cross-match values in two vectors (including non-matches) EXPLANATION: This procedure *appears* similar to MATCH of the IDL astronomy library. However, this routine is quite different in that it reports an index value for each element of the input arrays. In other words, while MATCH reports the *existence* of matching elements in each array, MATCH2 reports explicitly *which* elements match. Furthermore, while MATCH reports only unique matching elements, MATCH2 will always report a cross-match for every element in each array, even if it is a repeat. In cases where no match was found, an index of -1 is reported. CALLING SEQUENCE: match2, a, b, suba, subb INPUTS: a,b - two vectors to match elements, numeric or string data types OUTPUTS: suba - vector with same number of elements as A, such that A EQ B[SUBA], except non-matches which are indicated by SUBA EQ -1 subb - vector with same number of elements as B, such that B EQ A[SUBB], except non-matches which are indicated by SUBB EQ -1 RESTRICTIONS: The vectors A and B are allowed to have duplicates in them, but for matching purposes, only the first one found will be reported. EXAMPLE: A = [0,7,14,23,24,30] B = [7,8,14,25,14] IDL> match2, a, b, suba, subb --> suba = [ -1 , 0, 4, -1, -1, -1 ] (indicates that A[1] matches B[1] and A[3] matches B[2]) --> subb = [ 1 , -1, 2, -1, 2 ] (indicates that B[1] matches A[1] and B[2] matches A[3]) Compare to the results of the original MATCH procedure, IDL> match, a, b, suba, subb --> suba = [ 1, 3] (indicates that A[1] and A[3] match elements in B, but not which ones) --> subb = [ 1, 2] (indicates that B[1] and B[2] match elements in A, but not which ones) MODIFICATION HISTORY Derived from the IDL Astronomy Library MATCH, 14 Feb 2007 Updated documentation, 17 Jul 2007 More updated documentation (example), 03 Sep 2007
(See $IDLUTILS_DIR/goddard/pro/misc/match2.pro)
MAX_ENTROPY
NAME: MAX_ENTROPY PURPOSE: Deconvolution of data by Maximum Entropy analysis, given the PSF EXPLANATION: Deconvolution of data by Maximum Entropy analysis, given the instrument point spread response function (spatially invariant psf). Data can be an observed image or spectrum, result is always positive. Default is convolutions using FFT (faster when image size = power of 2). CALLING SEQUENCE: for i=1,Niter do begin Max_Entropy, image_data, psf, image_deconv, multipliers, FT_PSF=psf_ft INPUTS: data = observed image or spectrum, should be mostly positive, with mean sky (background) near zero. psf = Point Spread Function of instrument (response to point source, must sum to unity). deconv = result of previous call to Max_Entropy, multipliers = the Lagrange multipliers of max.entropy theory (on first call, set = 0, giving flat first result). OUTPUTS: deconv = deconvolution result of one more iteration by Max_Entropy. multipliers = the Lagrange multipliers saved for next iteration. OPTIONAL INPUT KEYWORDS: FT_PSF = passes (out/in) the Fourier transform of the PSF, so that it can be reused for the next time procedure is called, /NO_FT overrides the use of FFT, using the IDL function convol() instead. /LINEAR switches to Linear convergence mode, much slower than the default Logarithmic convergence mode. LOGMIN = minimum value constraint for taking Logarithms (default=1.e-9). EXTERNAL CALLS: function convolve( image, psf ) for convolutions using FFT or otherwise. METHOD: Iteration with PSF to maximize entropy of solution image with constraint that the solution convolved with PSF fits data image. Based on paper by Hollis, Dorband, Yusef-Zadeh, Ap.J. Feb.1992, which refers to Agmon, Alhassid, Levine, J.Comp.Phys. 1979. A more elaborate image deconvolution program using maximum entropy is available at http://sohowww.nascom.nasa.gov/solarsoft/gen/idl/image/image_deconvolve.pro HISTORY: written by Frank Varosi at NASA/GSFC, 1992. Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/image/max_entropy.pro)
MAX_LIKELIHOOD
NAME: MAX_LIKELIHOOD PURPOSE: Maximum likelihood deconvolution of an image or a spectrum. EXPLANATION: Deconvolution of an observed image (or spectrum) given the instrument point spread response function (spatially invariant psf). Performs iteration based on the Maximum Likelihood solution for the restoration of a blurred image (or spectrum) with additive noise. Maximum Likelihood formulation can assume Poisson noise statistics or Gaussian additive noise, yielding two types of iteration. CALLING SEQUENCE: for i=1,Niter do Max_Likelihood, data, psf, deconv, FT_PSF=psf_ft INPUTS PARAMETERS: data = observed image or spectrum, should be mostly positive, with mean sky (background) near zero. psf = Point Spread Function of the observing instrument, (response to a point source, must sum to unity). INPUT/OUTPUT PARAMETERS: deconv = as input: the result of previous call to Max_Likelihood, (initial guess on first call, default = average of data), as output: result of one more iteration by Max_Likelihood. Re_conv = (optional) the current deconv image reconvolved with PSF for use in next iteration and to check convergence. OPTIONAL INPUT KEYWORDS: /GAUSSIAN causes max-likelihood iteration for Gaussian additive noise to be used, otherwise the default is Poisson statistics. FT_PSF = passes (out/in) the Fourier transform of the PSF, so that it can be reused for the next time procedure is called, /NO_FT overrides the use of FFT, using the IDL function convol() instead. POSITIVITY_EPS = value of epsilon passed to function positivity, default = -1 which means no action (identity). UNDERFLOW_ZERO = cutoff to consider as zero, if numbers less than this. EXTERNAL CALLS: function convolve( image, psf ) for convolutions using FFT or otherwise. function positivity( image, EPS= ) to make image positive. METHOD: Maximum Likelihood solution is a fixed point of an iterative eq. (derived by setting partial derivatives of Log(Likelihood) to zero). Poisson noise case was derived by Richardson(1972) & Lucy(1974). Gaussian noise case is similar with subtraction instead of division. NOTES: WARNING: The Poisson case may not conserve flux for an odd image size. This behavior is being investigated. HISTORY: written: Frank Varosi at NASA/GSFC, 1992. F.V. 1993, added optional arg. Re_conv (to avoid doing it twice). Converted to IDL V5.0 W. Landsman September 1997 Use COMPLEMENT keyword to WHERE() W. Landsman Jan 2008
(See $IDLUTILS_DIR/goddard/pro/image/max_likelihood.pro)
MEANCLIP
NAME: MEANCLIP PURPOSE: Computes an iteratively sigma-clipped mean on a data set EXPLANATION: Clipping is done about median, but mean is returned. Called by SKYADJ_CUBE CATEGORY: Statistics CALLING SEQUENCE: MEANCLIP, Data, Mean, [ Sigma, SUBS = CLIPSIG=, MAXITER=, CONVERGE_NUM=, /VERBOSE, /DOUBLE ] INPUT POSITIONAL PARAMETERS: Data: Input data, any numeric array OUTPUT POSITIONAL PARAMETERS: Mean: N-sigma clipped mean. Sigma: Standard deviation of remaining pixels. INPUT KEYWORD PARAMETERS: CLIPSIG: Number of sigma at which to clip. Default=3 MAXITER: Ceiling on number of clipping iterations. Default=5 CONVERGE_NUM: If the proportion of rejected pixels is less than this fraction, the iterations stop. Default=0.02, i.e., iteration stops if fewer than 2% of pixels excluded. /VERBOSE: Set this flag to get messages. /DOUBLE - if set then perform all computations in double precision. Otherwise double precision is used only if the input data is double OUTPUT KEYWORD PARAMETER: SUBS: Subscript array for pixels finally used. MODIFICATION HISTORY: Written by: RSH, RITSS, 21 Oct 98 20 Jan 99 - Added SUBS, fixed misplaced paren on float call, improved doc. RSH Nov 2005 Added /DOUBLE keyword, check if all pixels are removed by clipping W. Landsman
(See $IDLUTILS_DIR/goddard/pro/math/meanclip.pro)
MEDARR
NAME: MEDARR PURPOSE: Compute the median at each pixel across a set of 2-d images EXPLANATION: Each pixel in the output array contains the median of the corresponding pixels in the input arrays. Useful, for example to combine a stack of CCD images, while removing cosmic ray hits. This routine became partially obsolete in V5.6 with the introduction of the DIMENSION keyword to the intrinsic MEDIAN() function. However, it is still useful if a input mask is needed (though it is much faster to set invalid pixels to NaN values.) CALLING SEQUENCE: MEDARR, inarr, outarr, [ mask, output_mask ] INPUTS: inarr -- A three dimensional array containing the input arrays to combine together. Each of the input arrays must be two dimensional and must have the same dimensions. These arrays should then be stacked together into a single 3-D array, creating INARR. OPTIONAL INPUT: mask -- Same structure as inarr, byte array with 1b where pixels are to be included, 0b where they are to be excluded. For floating point images, it is much faster to set masked pixels in inarr equal to !VALUES.F_NAN (see below), rather than use the mask parameter. OUTPUTS: outarr -- The output array. It will have dimensions equal to the first two dimensions of the input array. OPTIONAL OUPUT: output_mask -- Same structure as outarr, byte array with 1b pixels are valid, 0b where all the input pixels have been masked out. RESTRICTIONS: This procedure was *SLOW* when using the Mask parameter because it has to loop over each pixel of the image. EXAMPLE: Suppose one wants to combine three floating point 1024 x 1024 bias frames which have been read into the IDL variables im1,im2,im3 IDL> bigim = fltarr(1024,1024,3) ;Create big array to hold images IDL> bigim(0,0,0) = im1 & bigim(0,0,1) = im2 & bigim(0,0,2) = im2 IDL> medarr, bigim, avgbias The variable avgbias will be the desired 1024x 1024 float image. PROCEDURE: If the MASK parameter is not set, then MEDARR is just a wrapper for MEDIAN(/EVEN, dimension = 3). If the MASK parameter is set, a scalar median function over the third dimension is looped over each pixel of the first two dimensions. The /EVEN keyword is used with MEDIAN (which averages the two middle values), since this avoids biasing the output for an even number of images. Any values set to NAN (not a number) are ignored when computing the median. If all values for a pixel location are NAN, then the median is also returned as NAN. MODIFICATION HISTORY: Written by Michael R. Greason, STX, 12 June 1990. Don't use MEDIAN function for even number of images. W. Landsman Sep 1996 Mask added. RS Hill, HSTX, 13 Mar. 1997 Converted to IDL V5.0 W. Landsman September 1997 Use /EVEN keyword to MEDIAN W. Landsman September 1997 Rearranged code for faster execution W. Landsman January 1998 Faster execution for odd number of images W. Landsman July 2000 V5.4 fix for change in SIZE() definition of undefined variable W. Landsman/E. Young May 2001 Use MEDIAN(/DIMEN) for V5.6 or later W. Landsman November 2002 Use keyword_set() instead of ARG_present() to test for presence of mask parameter D. Hanish/W. Landsman June 2003 Assume since V5.6 W. Landsman Feb 2004
(See $IDLUTILS_DIR/goddard/pro/image/medarr.pro)
MEDSMOOTH
NAME: MEDSMOOTH PURPOSE: Median smoothing of a vector, including points near its ends. CALLING SEQUENCE: SMOOTHED = MEDSMOOTH( VECTOR, WINDOW_WIDTH ) INPUTS: VECTOR = The (1-d numeric) vector to be smoothed WINDOW = Odd integer giving the full width of the window over which the median is determined for each point. (If WINDOW is specified as an even number, then the effect is the same as using WINDOW+1) OUTPUT: Function returns the smoothed vector PROCEDURE: Each point is replaced by the median of the nearest WINDOW of points. The width of the window shrinks towards the ends of the vector, so that only the first and last points are not filtered. These points are replaced by forecasting from smoothed interior points. EXAMPLE: Create a vector with isolated high points near its ends IDL> a = randomn(seed,40) & a[1] = 10 & a[38] = 10 Now do median smoothing with a 7 point window IDL> b = medsmooth(a,7) Note that, unlike MEDIAN(), that MEDSMOOTH will remove the isolated high points near the ends. REVISION HISTORY: Written, H. Freudenreich, STX, 12/89 H.Freudenreich, 8/90: took care of end-points by shrinking window. Speed up using vector median when possible W. Landsman February 2002
(See $IDLUTILS_DIR/goddard/pro/robust/medsmooth.pro)
MINF_BRACKET
NAME: MINF_BRACKET PURPOSE: Bracket a local minimum of a 1-D function with 3 points, EXPLANATION: Brackets a local minimum of a 1-d function with 3 points, thus ensuring that a minimum exists somewhere in the interval. This routine assumes that the function has a minimum somewhere.... Routine can also be applied to a scalar function of many variables, for such case the local minimum in a specified direction is bracketed, This routine is called by minF_conj_grad, to bracket minimum in the direction of the conjugate gradient of function of many variables CALLING EXAMPLE: xa=0 & xb=1 minF_bracket, xa,xb,xc, fa,fb,fc, FUNC_NAME="name" ;for 1-D func. or: minF_bracket, xa,xb,xc, fa,fb,fc, FUNC="name", $ POINT=[0,1,1], $ DIRECTION=[2,1,1] ;for 3-D func. INPUTS: xa = scalar, guess for point bracketing location of minimum. xb = scalar, second guess for point bracketing location of minimum. KEYWORDS: FUNC_NAME = function name (string) Calling mechanism should be: F = func_name( px ) where: px = scalar or vector of independent variables, input. F = scalar value of function at px. POINT_NDIM = when working with function of N variables, use this keyword to specify the starting point in N-dim space. Default = 0, which assumes function is 1-D. DIRECTION = when working with function of N variables, use this keyword to specify the direction in N-dim space along which to bracket the local minimum, (default=1 for 1-D). (xa,xb,xc) are then relative distances from POINT_NDIM. OUTPUTS: xa,xb,xc = scalars, 3 points which bracket location of minimum, that is, f(xb) < f(xa) and f(xb) < f(xc), so minimum exists. When working with function of N variables (xa,xb,xc) are then relative distances from POINT_NDIM, in the direction specified by keyword DIRECTION, with scale factor given by magnitude of DIRECTION. OPTIONAL OUTPUT: fa,fb,fc = value of function at 3 points which bracket the minimum, again note that fb < fa and fb < fc if minimum exists. PROCEDURE: algorithm from Numerical Recipes (by Press, et al.), sec.10.1 (p.281). MODIFICATION HISTORY: Written, Frank Varosi NASA/GSFC 1992. Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/math/minf_bracket.pro)
MINF_CONJ_GRAD
NAME: MINF_CONJ_GRAD PURPOSE: Find the local minimum of a scalar function using conjugate gradient EXPLANATION: Find the local minimum of a scalar function of several variables using the Conjugate Gradient method (Fletcher-Reeves-Polak-Ribiere algorithm). Function may be anything with computable partial derivatives. Each call to minF_conj_grad performs one iteration of algorithm, and returns an N-dim point closer to the local minimum of function. CALLING EXAMPLE: p_min = replicate( 1, N_dim ) minF_conj_grad, p_min, f_min, conv_factor, FUNC_NAME="name",/INITIALIZE while (conv_factor GT 0) do begin minF_conj_grad, p_min, f_min, conv_factor, FUNC_NAME="name" endwhile INPUTS: p_min = vector of independent variables, location of minimum point obtained from previous call to minF_conj_grad, (or first guess). KEYWORDS: FUNC_NAME = function name (string) Calling mechanism should be: F = func_name( px, gradient ) where: F = scalar value of function at px. px = vector of independent variables, input. gradient = vector of partial derivatives of the function with respect to independent variables, evaluated at px. This is an optional output parameter: gradient should not be calculated if parameter is not supplied in call (Unless you want to waste some time). /INIT must be specified on first call (whenever p_min is a guess), to initialize the iteration scheme of algorithm. /USE_DERIV causes the directional derivative of function to be used in the 1-D minimization part of algorithm (default is not to use directional derivative). TOLERANCE = desired accuracy of minimum location, default=sqrt(1.e-7). /QUADRATIC runs simpler version which works only for quadratic function. OUTPUTS: p_min = vector giving improved solution for location of minimum point. f_min = value of function at p_min. conv_factor = gives the current rate of convergence (change in value), iteration should be stopped when rate gets near zero. EXTERNAL CALLS: pro minF_bracket, to find 3 points which bracket the minimum in 1-D. pro minF_parabolic, to find minimum point in 1-D. pro minF_parabol_D, to find minimum point in 1-D, using derivatives. COMMON BLOCKS: common minf_conj_grad, grad_conj, grad_save, gs_norm (to keep conjugate gradient, gradient and norm from previous iteration) PROCEDURE: Algorithm adapted from Numerical Recipes, sec.10.6 (p.305). Conjugate gradient is computed from gradient, which then gives the best direction (in N-dim space) in which to proceed to find the minimum point. The function is then minimized along this direction of conjugate gradient (a 1-D minimization). The algorithm is repeated starting at the new point by calling again. MODIFICATION HISTORY: Written, Frank Varosi NASA/GSFC 1992. Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/math/minf_conj_grad.pro)
MINF_PARABOLIC
NAME: MINF_PARABOLIC PURPOSE: Minimize a function using Brent's method with parabolic interpolation EXPLANATION: Find a local minimum of a 1-D function up to specified tolerance. This routine assumes that the function has a minimum nearby. (recommend first calling minF_bracket, xa,xb,xc, to bracket minimum). Routine can also be applied to a scalar function of many variables, for such case the local minimum in a specified direction is found, This routine is called by minF_conj_grad, to locate minimum in the direction of the conjugate gradient of function of many variables. CALLING EXAMPLES: minF_parabolic, xa,xb,xc, xmin, fmin, FUNC_NAME="name" ;for 1-D func. or: minF_parabolic, xa,xb,xc, xmin, fmin, FUNC="name", $ POINT=[0,1,1], $ DIRECTION=[2,1,1] ;for 3-D func. INPUTS: xa,xb,xc = scalars, 3 points which bracket location of minimum, that is, f(xb) < f(xa) and f(xb) < f(xc), so minimum exists. When working with function of N variables (xa,xb,xc) are then relative distances from POINT_NDIM, in the direction specified by keyword DIRECTION, with scale factor given by magnitude of DIRECTION. INPUT KEYWORDS: FUNC_NAME = function name (string) Calling mechanism should be: F = func_name( px ) where: px = scalar or vector of independent variables, input. F = scalar value of function at px. POINT_NDIM = when working with function of N variables, use this keyword to specify the starting point in N-dim space. Default = 0, which assumes function is 1-D. DIRECTION = when working with function of N variables, use this keyword to specify the direction in N-dim space along which to bracket the local minimum, (default=1 for 1-D). (xa, xb, xc, x_min are then relative distances from POINT_NDIM) MAX_ITER = maximum allowed number iterations, default=100. TOLERANCE = desired accuracy of minimum location, default=sqrt(1.e-7). OUTPUTS: xmin = estimated location of minimum. When working with function of N variables, xmin is the relative distance from POINT_NDIM, in the direction specified by keyword DIRECTION, with scale factor given by magnitude of DIRECTION, so that min. Loc. Pmin = Point_Ndim + xmin * Direction. fmin = value of function at xmin (or Pmin). PROCEDURE: Brent's method to minimize a function by using parabolic interpolation. Based on function BRENT in Numerical Recipes in FORTRAN (Press et al. 1992), sec.10.2 (p. 397). MODIFICATION HISTORY: Written, Frank Varosi NASA/GSFC 1992. Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/math/minf_parabolic.pro)
MINF_PARABOL_D
NAME: MINF_PARABOL_D PURPOSE: Minimize a function using a modified Brent's method with derivatives EXPLANATION: Based on the procedure DBRENT in Numerical Recipes by Press et al. Finds a local minimum of a 1-D function up to specified tolerance, using the first derivative of function in the algorithm. This routine assumes that the function has a minimum nearby. (recommend first calling minF_bracket, xa,xb,xc, to bracket minimum). Routine can also be applied to a scalar function of many variables, for such case the local minimum in a specified direction is found, This routine is called by minF_conj_grad, to locate minimum in the direction of the conjugate gradient of function of many variables. CALLING EXAMPLES: minF_parabol_D, xa,xb,xc, xmin, fmin, FUNC_NAME="name" ;for 1-D func. or: minF_parabol_D, xa,xb,xc, xmin, fmin, FUNC="name", $ POINT=[0,1,1], $ DIRECTION=[2,1,1] ;for 3-D func. INPUTS: xa,xb,xc = scalars, 3 points which bracket location of minimum, that is, f(xb) < f(xa) and f(xb) < f(xc), so minimum exists. When working with function of N variables (xa,xb,xc) are then relative distances from POINT_NDIM, in the direction specified by keyword DIRECTION, with scale factor given by magnitude of DIRECTION. KEYWORDS: FUNC_NAME = function name (string) Calling mechanism should be: F = func_name( px, gradient ) where: px = scalar or vector of independent variables, input. F = scalar value of function at px. gradient = derivative of function, a scalar if 1-D, a gradient vector if N-D, (should only be computed if arg. is present). POINT_NDIM = when working with function of N variables, use this keyword to specify the starting point in N-dim space. Default = 0, which assumes function is 1-D. DIRECTION = when working with function of N variables, use this keyword to specify the direction in N-dim space along which to bracket the local minimum, (default=1 for 1-D). (xa, xb, xc, x_min are then relative distances from POINT_NDIM) MAX_ITER = maximum allowed number iterations, default=100. TOLERANCE = desired accuracy of minimum location, default=sqrt(1.e-7). OUTPUTS: xmin = estimated location of minimum. When working with function of N variables, xmin is the relative distance from POINT_NDIM, in the direction specified by keyword DIRECTION, with scale factor given by magnitude of DIRECTION, so that min. Loc. Pmin = Point_Ndim + xmin * Direction. fmin = value of function at xmin (or Pmin). PROCEDURE: Brent's method to minimize a function by using parabolic interpolation and using first derivative of function, from Numerical Recipes (by Press, et al.), sec.10.3 (p.287), MODIFICATION HISTORY: Written, Frank Varosi NASA/GSFC 1992.
(See $IDLUTILS_DIR/goddard/pro/math/minf_parabol_d.pro)
MINMAX
NAME: MINMAX PURPOSE: Return a 2 element array giving the minimum and maximum of an array EXPLANATION: Using MINMAX() is faster than doing a separate MAX and MIN. The procedure MAXMIN in http://www.idlcoyote.com/programs/maxmin.pro has a similar purpose but uses a procedure call rather than a function. CALLING SEQUENCE: value = minmax( array, [subs, /NAN, DIMEN= ] ) INPUTS: array - an IDL numeric scalar, vector or array. OUTPUTS: value = a two element vector (if DIMEN is not supplied) value[0] = minimum value of array value[1] = maximum value of array If the DIMEN keyword is supplied then value will be a 2 x N element array where N is the number of elements in the specified dimension OPTIONAL OUTPUT PARAMETER: subs - two-dimensional vector; the first element gives the subscript of the minimum value, the second element gives the subscript of the maximum value. OPTIONAL INPUT KEYWORD: /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. DIMEN - integer (either 1 or 2) specifying which dimension of a 2-d array to take the minimum and maximum. Note that (unlike the DIMENSION keyword to the MIN() function) DIMEN is only valid for a 2-d array, larger dimensions are not supported. EXAMPLE: (1) Print the minimum and maximum of an image array, im IDL> print, minmax( im ) (2) Given a 2-dimension array of (echelle) wavelengths w, print the minimum and maximum of each order print,minmax(w,dimen=1) PROCEDURE: The MIN function is used with the MAX keyword REVISION HISTORY: Written W. Landsman January, 1990 Added NaN keyword. M. Buie June 1998 Added DIMEN keyword W. Landsman January 2002 Added SUBSCRIPT_MIN and SUBSCRIPT_MAX BT Jan 2005 Added optional subs output parameter W. Landsman July 2009
(See $IDLUTILS_DIR/goddard/pro/misc/minmax.pro)
MKHDR
NAME: MKHDR PURPOSE: Make a minimal primary (or IMAGE extension) FITS header EXPLANATION: If an array is supplied, then the created FITS header will be appropriate to the supplied array. Otherwise, the user can specify the dimensions and datatype. CALLING SEQUENCE: MKHDR, header ;Prompt for image size and type or MKHDR, header, im, [ /IMAGE, /EXTEND ] or MKHDR, header, type, naxisx, [/IMAGE, /EXTEND ] OPTIONAL INPUTS: IM - If IM is a vector or array then the header will be made appropriate to the size and type of IM. IM does not have to be the actual data; it can be a dummy array of the same type and size as the data. Set IM = '' to create a dummy header with NAXIS = 0. TYPE - If more than 2 parameters are supplied, then the second parameter is interpreted as an integer giving the IDL datatype e.g. 1 - LOGICAL*1, 2 - INTEGER*2, 4 - REAL*4, 3 - INTEGER*4 NAXISX - Vector giving the size of each dimension (NAXIS1, NAXIS2, etc.). OUTPUT: HEADER - image header, (string array) with required keywords BITPIX, NAXIS, NAXIS1, ... Further keywords can be added to the header with SXADDPAR. OPTIONAL INPUT KEYWORDS: /IMAGE = If set, then a minimal header for a FITS IMAGE extension is created. An IMAGE extension header is identical to a primary FITS header except the first keyword is 'XTENSION' = 'IMAGE' instead of 'SIMPLE ' = 'T' /EXTEND = If set, then the keyword EXTEND is inserted into the file, with the value of "T" (true). The EXTEND keyword must be included in a primary header, if the FITS file contains extensions. RESTRICTIONS: (1) MKHDR should not be used to make an STSDAS header or a FITS ASCII or Binary Table extension header. Instead use SXHMAKE - to create a minimal STSDAS header FXBHMAKE - to create a minimal FITS binary table header FTCREATE - to create a minimal FITS ASCII table header (2) Any data already in the header before calling MKHDR will be destroyed. EXAMPLE: Create a minimal FITS header, Hdr, for a 30 x 40 x 50 INTEGER*2 array IDL> mkhdr, Hdr, 2, [30,40,50] Alternatively, if the array already exists as an IDL variable, Array, IDL> mkhdr, Hdr, Array PROCEDURES CALLED: SXADDPAR, GET_DATE REVISION HISTORY: Written November, 1988 W. Landsman May, 1990, Adapted for IDL Version 2.0, J. Isensee Aug, 1997, Use SYSTIME(), new DATE format W. Landsman Converted to IDL V5.0 W. Landsman September 1997 Allow unsigned data types W. Landsman December 1999 Set BZERO = 0 for unsigned integer data W. Landsman January 2000 EXTEND keyword must immediately follow last NAXISi W. Landsman Sep 2000 Add FITS definition COMMENT to primary headers W. Landsman Oct. 2001 Allow (nonstandard) 64 bit integers W. Landsman Feb. 2003
(See $IDLUTILS_DIR/goddard/pro/fits/mkhdr.pro)
MLINMIX_ERR
NAME: MLINMIX_ERR PURPOSE: Bayesian approach to multiple linear regression with errors in X and Y EXPLANATION: PERFORM LINEAR REGRESSION OF Y ON X WHEN THERE ARE MEASUREMENT ERRORS IN BOTH VARIABLES. THE REGRESSION ASSUMES : ETA = ALPHA + BETA ## XI + EPSILON X = XI + XERR Y = ETA + YERR HERE, (ALPHA, BETA) ARE THE REGRESSION COEFFICIENTS, EPSILON IS THE INTRINSIC RANDOM SCATTER ABOUT THE REGRESSION, XERR IS THE MEASUREMENT ERROR IN X, AND YERR IS THE MEASUREMENT ERROR IN Y. EPSILON IS ASSUMED TO BE NORMALLY-DISTRIBUTED WITH MEAN ZERO AND VARIANCE SIGSQR. XERR AND YERR ARE ASSUMED TO BE NORMALLY-DISTRIBUTED WITH MEANS EQUAL TO ZERO, COVARIANCE MATRICES XVAR^2 FOR X, VARIANCES YSIG^2 FOR Y, AND COVARIANCE VECTORS XYCOV. THE DISTRIBUTION OF XI IS MODELLED AS A MIXTURE OF NORMALS, WITH GROUP PROPORTIONS PI, MEANS MU, AND COVARIANCES T. BAYESIAN INFERENCE IS EMPLOYED, AND A STRUCTURE CONTAINING RANDOM DRAWS FROM THE POSTERIOR IS RETURNED. CONVERGENCE OF THE MCMC TO THE POSTERIOR IS MONITORED USING THE POTENTIAL SCALE REDUCTION FACTOR (RHAT, GELMAN ET AL.2004). IN GENERAL, WHEN RHAT < 1.1 THEN APPROXIMATE CONVERGENCE IS REACHED. SIMPLE NON-DETECTIONS ON Y MAY ALSO BE INCLUDED AUTHOR : BRANDON C. KELLY, STEWARD OBS., JULY 2006 INPUTS : X - THE OBSERVED INDEPENDENT VARIABLES. THIS SHOULD BE AN [NX, NP]-ELEMENT ARRAY. Y - THE OBSERVED DEPENDENT VARIABLE. THIS SHOULD BE AN NX-ELEMENT VECTOR. OPTIONAL INPUTS : XVAR - THE COVARIANCE MATRIX OF THE X ERRORS, AND [NX,NP,NP]-ELEMENT ARRAY. XVAR[I,*,*] IS THE COVARIANCE MATRIX FOR THE ERRORS ON X[I,*]. THE DIAGONAL OF XVAR[I,*,*] MUST BE GREATER THAN ZERO FOR EACH DATA POINT. YVAR - THE VARIANCE OF THE Y ERRORS, AND NX-ELEMENT VECTOR. YVAR MUST BE GREATER THAN ZERO. XYCOV - THE VECTOR OF COVARIANCES FOR THE MEASUREMENT ERRORS BETWEEN X AND Y. DELTA - AN NX-ELEMENT VECTOR INDICATING WHETHER A DATA POINT IS CENSORED OR NOT. IF DELTA[i] = 1, THEN THE SOURCE IS DETECTED, ELSE IF DELTA[i] = 0 THE SOURCE IS NOT DETECTED AND Y[i] SHOULD BE AN UPPER LIMIT ON Y[i]. NOTE THAT IF THERE ARE CENSORED DATA POINTS, THEN THE MAXIMUM-LIKELIHOOD ESTIMATE (THETA) IS NOT VALID. THE DEFAULT IS TO ASSUME ALL DATA POINTS ARE DETECTED, IE, DELTA = REPLICATE(1, NX). SILENT - SUPPRESS TEXT OUTPUT. MINITER - MINIMUM NUMBER OF ITERATIONS PERFORMED BY THE GIBBS SAMPLER. IN GENERAL, MINITER = 5000 SHOULD BE SUFFICIENT FOR CONVERGENCE. THE DEFAULT IS MINITER = 5000. THE GIBBS SAMPLER IS STOPPED AFTER RHAT < 1.1 FOR ALPHA, BETA, AND SIGMA^2, AND THE NUMBER OF ITERATIONS PERFORMED IS GREATER THAN MINITER. MAXITER - THE MAXIMUM NUMBER OF ITERATIONS PERFORMED BY THE MCMC. THE DEFAULT IS 1D5. THE GIBBS SAMPLER IS STOPPED AUTOMATICALLY AFTER MAXITER ITERATIONS. NGAUSS - THE NUMBER OF GAUSSIANS TO USE IN THE MIXTURE MODELLING. THE DEFAULT IS 3. OUTPUT : POST - A STRUCTURE CONTAINING THE RESULTS FROM THE GIBBS SAMPLER. EACH ELEMENT OF POST IS A DRAW FROM THE POSTERIOR DISTRIBUTION FOR EACH OF THE PARAMETERS. ALPHA - THE CONSTANT IN THE REGRESSION. BETA - THE SLOPES OF THE REGRESSION. SIGSQR - THE VARIANCE OF THE INTRINSIC SCATTER. PI - THE GAUSSIAN WEIGHTS FOR THE MIXTURE MODEL. MU - THE GAUSSIAN MEANS FOR THE MIXTURE MODEL. T - THE GAUSSIAN COVARIANCE MATRICES FOR THE MIXTURE MODEL. MU0 - THE HYPERPARAMETER GIVING THE MEAN VALUE OF THE GAUSSIAN PRIOR ON MU. U - THE HYPERPARAMETER DESCRIBING FOR THE PRIOR COVARIANCE MATRIX OF THE INDIVIDUAL GAUSSIAN CENTROIDS ABOUT MU0. W - THE HYPERPARAMETER DESCRIBING THE `TYPICAL' SCALE MATRIX FOR THE PRIOR ON (T,U). XIMEAN - THE MEAN OF THE DISTRIBUTION FOR THE INDEPENDENT VARIABLE, XI. XIVAR - THE STANDARD COVARIANCE MATRIX FOR THE DISTRIBUTION OF THE INDEPENDENT VARIABLE, XI. XICORR - SAME AS XIVAR, BUT FOR THE CORRELATION MATRIX. CORR - THE LINEAR CORRELATION COEFFICIENT BETWEEN THE DEPENDENT AND INDIVIDUAL INDEPENDENT VARIABLES, XI AND ETA. PCORR - SAME AS CORR, BUT FOR THE PARTIAL CORRELATIONS. CALLED ROUTINES : RANDOMCHI, MRANDOMN, RANDOMWISH, RANDOMDIR, MULTINOM REFERENCES : Carroll, R.J., Roeder, K., & Wasserman, L., 1999, Flexible Parametric Measurement Error Models, Biometrics, 55, 44 Kelly, B.C., 2007, Some Aspects of Measurement Error in Linear Regression of Astronomical Data, ApJ, In press (astro-ph/0705.2774) Gelman, A., Carlin, J.B., Stern, H.S., & Rubin, D.B., 2004, Bayesian Data Analysis, Chapman & Hall/CRC
(See $IDLUTILS_DIR/goddard/pro/math/mlinmix_err.pro)
MMM
NAME: MMM PURPOSE: Estimate the sky background in a stellar contaminated field. EXPLANATION: MMM assumes that contaminated sky pixel values overwhelmingly display POSITIVE departures from the true value. Adapted from DAOPHOT routine of the same name. CALLING SEQUENCE: MMM, sky, [ skymod, sigma, skew, HIGHBAD = , READNOISE=, /DEBUG, NSKY=, /INTEGER,/SILENT] INPUTS: SKY - Array or Vector containing sky values. This version of MMM does not require SKY to be sorted beforehand. SKY is unaltered by this program. OPTIONAL OUTPUTS: skymod - Scalar giving estimated mode of the sky values SIGMA - Scalar giving standard deviation of the peak in the sky histogram. If for some reason it is impossible to derive skymod, then SIGMA = -1.0 SKEW - Scalar giving skewness of the peak in the sky histogram If no output variables are supplied or if /DEBUG is set then the values of skymod, SIGMA and SKEW will be printed. OPTIONAL KEYWORD INPUTS: HIGHBAD - scalar value of the (lowest) "bad" pixel level (e.g. cosmic rays or saturated pixels) If not supplied, then there is assumed to be no high bad pixels. MINSKY - Integer giving mininum number of sky values to be used. MMM will return an error if fewer sky elements are supplied. Default = 20. MAXITER - integer giving maximum number of iterations allowed,default=50 READNOISE - Scalar giving the read noise (or minimum noise for any pixel). Normally, MMM determines the (robust) median by averaging the central 20% of the sky values. In some cases where the noise is low, and pixel values are quantized a larger fraction may be needed. By supplying the optional read noise parameter, MMM is better able to adjust the fraction of pixels used to determine the median. /INTEGER - Set this keyword if the input SKY vector only contains discrete integer values. This keyword is only needed if the SKY vector is of type float or double precision, but contains only discrete integer values. (Prior to July 2004, the equivalent of /INTEGER was set for all data types) /DEBUG - If this keyword is set and non-zero, then additional information is displayed at the terminal. /SILENT - If set, then error messages will be suppressed when MMM cannot compute a background. Sigma will still be set to -1 OPTIONAL OUTPUT KEYWORD: NSKY - Integer scalar giving the number of pixels actually used for the sky computation (after outliers have been removed). NOTES: (1) Program assumes that low "bad" pixels (e.g. bad CCD columns) have already been deleted from the SKY vector. (2) MMM was updated in June 2004 to better match more recent versions of DAOPHOT. (3) Does not work well in the limit of low Poisson integer counts (4) MMM may fail for strongly skewed distributions. METHOD: The algorithm used by MMM consists of roughly two parts: (1) The average and sigma of the sky pixels is computed. These values are used to eliminate outliers, i.e. values with a low probability given a Gaussian with specified average and sigma. The average and sigma are then recomputed and the process repeated up to 20 iterations: (2) The amount of contamination by stars is estimated by comparing the mean and median of the remaining sky pixels. If the mean is larger than the median then the true sky value is estimated by 3*median - 2*mean REVISION HISTORY: Adapted to IDL from 1986 version of DAOPHOT in STSDAS, W. Landsman, STX Feb 1987 Added HIGHBAD keyword, W. Landsman January, 1991 Fixed occasional problem with integer inputs W. Landsman Feb, 1994 Avoid possible 16 bit integer overflow W. Landsman November 2001 Added READNOISE, NSKY keywords, new median computation W. Landsman June 2004 Added INTEGER keyword W. Landsman July 2004 Improve numerical precision W. Landsman October 2004 Fewer aborts on strange input sky histograms W. Landsman October 2005 Added /SILENT keyword November 2005 Fix too many /CON keywords to MESSAGE W.L. December 2005 Fix bug introduced June 2004 removing outliers when READNOISE not set N. Cunningham/W. Landsman January 2006 Make sure that MESSAGE never aborts W. Landsman January 2008 Add mxiter keyword and change default to 50 W. Landsman August 2011 Added MINSKY keyword W.L. December 2011
(See $IDLUTILS_DIR/goddard/pro/idlphot/mmm.pro)
MODFITS
NAME: MODFITS PURPOSE: Modify a FITS file by updating the header and/or data array. EXPLANATION: Update the data and/or header in a specified FITS extension or primary HDU. The size of the supplied FITS header or data array does not need to match the size of the existing header or data array. CALLING SEQUENCE: MODFITS, Filename_or_fcb, Data, [ Header, EXTEN_NO =, EXTNAME= , ERRMSG=] INPUTS: FILENAME/FCB = Scalar string containing either the name of the FITS file to be modified, or the IO file control block returned after opening the file with FITS_OPEN,/UPDATE. The explicit use of FITS_OPEN can save time if many extensions in a single file will be updated. DATA - data array to be inserted into the FITS file. Set DATA = 0 to leave the data portion of the FITS file unmodified. Data can also be an IDL structure (e.g. as returned by MRDFITS). provided that it does not include IDL pointers. HEADER - FITS header (string array) to be updated in the FITS file. OPTIONAL INPUT KEYWORDS: A specific extension can be specified with either the EXTNAME or EXTEN_NO keyword EXTEN_NO - scalar integer specifying the FITS extension to modified. For example, specify EXTEN = 1 or /EXTEN to modify the first FITS extension. EXTNAME - string name of the extension to modify. OPTIONAL OUTPUT KEYWORD: ERRMSG - If this keyword is supplied, then any error mesasges will be returned to the user in this parameter rather than depending on on the MESSAGE routine in IDL. If no errors are encountered then a null string is returned. EXAMPLES: (1) Modify the value of the DATE keyword in the primary header of a file TEST.FITS. IDL> h = headfits('test.fits') ;Read primary header IDL> sxaddpar,h,'DATE','2001-03-23' ;Modify value of DATE IDL> modfits,'test.fits',0,h ;Update header only (2) Replace the values of the primary image array in 'test.fits' with their absolute values IDL> im = readfits('test.fits') ;Read image array IDL> im = abs(im) ;Take absolute values IDL> modfits,'test.fits',im ;Update image array (3) Add some HISTORY records to the FITS header in the first extension of a file 'test.fits' IDL> h = headfits('test.fits',/ext) ;Read first extension hdr IDL> sxaddhist,['Comment 1','Comment 2'],h IDL> modfits,'test.fits',0,h,/ext ;Update extension hdr (4) Change 'OBSDATE' keyword to 'OBS-DATE' in every extension in a FITS file. Explicitly open with FITS_OPEN to save compute time. fits_open,'test.fits',io,/update ;Faster to explicity open for i = 1,nextend do begin ;Loop over extensions fits_read,io,0,h,/header_only,exten_no=i,/No_PDU ;Get header date= sxpar(h,'OBSDATE') ;Save keyword value sxaddpar,h,'OBS-DATE',date,after='OBSDATE' sxdelpar,h,'OBSDATE' ;Delete bad keyword modfits,io,0,h,exten_no=i ;Update header endfor Note the use of the /No_PDU keyword in the FITS_READ call -- one does *not* want to append the primary header, if the STScI inheritance convention is adopted. NOTES: Uses the BLKSHIFT procedure to shift the contents of the FITS file if the new data or header differs in size by more than 2880 bytes from the old data or header. If a file control block (FCB) structure is supplied, then the values of START_HEADER, START_DATA and NBYTES may be modified if the file size changes. Also see the procedures FXHMODIFY to add a single FITS keyword to a header in a FITS files, and FXBGROW to enlarge the size of a binary table. RESTRICTIONS: (1) Cannot be used to modify the data in FITS files with random groups or variable length binary tables. (The headers in such files *can* be modified.) (2) If a data array but no FITS header is supplied, then MODFITS does not check to make sure that the existing header is consistent with the new data. (3) Does not work with compressed files (4) The Checksum keywords will not be updated if the array to be updated is supplied as a structure (e.g. from MRDFITS). PROCEDURES USED: Functions: N_BYTES(), SXPAR() Procedures: BLKSHIFT, CHECK_FITS, FITS_OPEN, FITS_READ MODIFICATION HISTORY: Written, Wayne Landsman December, 1994 Fixed possible problem when using WRITEU after READU October 1997 New and old sizes need only be the same within multiple of 2880 bytes Added call to IS_IEEE_BIG() W. Landsman May 1999 Added ERRMSG output keyword W. Landsman May 2000 Update tests for incompatible sizes W. Landsman December 2000 Major rewrite to use FITS_OPEN procedures W. Landsman November 2001 Add /No_PDU call to FITS_READ call W. Landsman June 2002 Update CHECKSUM keywords if already present in header, add padding if new data size is smaller than old W.Landsman December 2002 Only check XTENSION value if EXTEN_NO > 1 W. Landsman Feb. 2003 Correct for unsigned data on little endian machines W. Landsman Apr 2003 Major rewrite to allow changing size of data or header W.L. Aug 2003 Fixed case where updated header exactly fills boundary W.L. Feb 2004 More robust error reporting W.L. Dec 2004 Make sure input header ends with a END W.L. March 2006 Assume since V5.5, remove VMS support, assume FITS_OPEN will perform byte swapping W.L. Sep 2006 Update FCB structure if file size changes W.L. March 2007 Fix problem when data size must be extended W.L. August 2007 Don't assume supplied FITS header is 80 bytes W. L. Dec 2007 Check for new END position after adding CHECKSUM W.L. July 2008 Added EXTNAME input keyword W.L. July 2008 Allow data to be an IDL structure A. Conley/W.L. June 2009 Use V6.0 notation, add /NOZERO to BLKSHIFT W.L. Feb 2011 Don't try to update Checksums when structure supplied W.L. April 2011 Allow structure with only 1 element W.L. Feb 2012
(See $IDLUTILS_DIR/goddard/pro/fits/modfits.pro)
MONTH_CNV
NAME: MONTH_CNV PURPOSE: Convert between a month name and the equivalent number EXPLANATION: (e.g., For example, converts from 'January' to 1 or vice-versa. CALLING SEQUENCE: Result = MONTH_CNV( MonthInput, [/UP, /LOW, /SHORT ] ) INPUTS: MonthInput - either a string ('January', 'Jan', 'Decem', etc.) or an number from 1 to 12. Scalar or array. OPTIONAL KEYWORDS: UP - if set and if a string is being returned, it will be in all uppercase letters. LOW - if set and if a string is being returned, it will be in all lowercase letters. SHORT - if set and if a string is being returned, only the first three letters are returned. OUTPUTS: If the input is a string, the output is the matching month number.If an input string isn't a valid month name, -1 is returned. If the input is a number, the output is the matching month name. The default format is only the first letter is capitalized. EXAMPLE: To get a vector of all the month names: Names = month_cnv(indgen(12)+1) MODIFICATION HISTORY: Written by: Joel Wm. Parker, SwRI, 1998 Dec 9
(See $IDLUTILS_DIR/goddard/pro/astro/month_cnv.pro)
MOONPOS
NAME: MOONPOS PURPOSE: To compute the RA and Dec of the Moon at specified Julian date(s). CALLING SEQUENCE: MOONPOS, jd, ra, dec, dis, geolong, geolat, [/RADIAN ] INPUTS: JD - Julian ephemeris date, scalar or vector, double precision suggested OUTPUTS: Ra - Apparent right ascension of the moon in DEGREES, referred to the true equator of the specified date(s) Dec - The declination of the moon in DEGREES Dis - The Earth-moon distance in kilometers (between the center of the Earth and the center of the Moon). Geolong - Apparent longitude of the moon in DEGREES, referred to the ecliptic of the specified date(s) Geolat - Apparent longitude of the moon in DEGREES, referred to the ecliptic of the specified date(s) The output variables will all have the same number of elements as the input Julian date vector, JD. If JD is a scalar then the output variables will be also. OPTIONAL INPUT KEYWORD: /RADIAN - If this keyword is set and non-zero, then all output variables are given in Radians rather than Degrees EXAMPLES: (1) Find the position of the moon on April 12, 1992 IDL> jdcnv,1992,4,12,0,jd ;Get Julian date IDL> moonpos, jd, ra ,dec ;Get RA and Dec of moon IDL> print,adstring(ra,dec,1) ==> 08 58 45.23 +13 46 6.1 This is within 1" from the position given in the Astronomical Almanac (2) Plot the Earth-moon distance for every day at 0 TD in July, 1996 IDL> jdcnv,1996,7,1,0,jd ;Get Julian date of July 1 IDL> moonpos,jd+dindgen(31), ra, dec, dis ;Position at all 31 days IDL> plot,indgen(31),dis, /YNOZ METHOD: Derived from the Chapront ELP2000/82 Lunar Theory (Chapront-Touze' and Chapront, 1983, 124, 50), as described by Jean Meeus in Chapter 47 of ``Astronomical Algorithms'' (Willmann-Bell, Richmond), 2nd edition, 1998. Meeus quotes an approximate accuracy of 10" in longitude and 4" in latitude, but he does not give the time range for this accuracy. Comparison of this IDL procedure with the example in ``Astronomical Algorithms'' reveals a very small discrepancy (~1 km) in the distance computation, but no difference in the position calculation. This procedure underwent a major rewrite in June 1996, and the new calling sequence is *incompatible with the old* (e.g. angles now returned in degrees instead of radians). PROCEDURES CALLED: CIRRANGE, ISARRAY(), NUTATE, TEN() - from IDL Astronomy Library POLY() - from IDL User's Library MODIFICATION HISTORY: Written by Michael R. Greason, STX, 31 October 1988. Major rewrite, new (incompatible) calling sequence, much improved accuracy, W. Landsman Hughes STX June 1996 Added /RADIAN keyword W. Landsman August 1997 Converted to IDL V5.0 W. Landsman September 1997 Use improved expressions for L',D,M,M', and F given in 2nd edition of Meeus (very slight change), W. Landsman November 2000 Avoid 32767 overflow W. Landsman January 2005
(See $IDLUTILS_DIR/goddard/pro/astro/moonpos.pro)
MPHASE
NAME: MPHASE PURPOSE: Return the illuminated fraction of the Moon at given Julian date(s) CALLING SEQUENCE: MPHASE, jd, k INPUT: JD - Julian date, scalar or vector, double precision recommended OUTPUT: k - illuminated fraction of Moon's disk (0.0 < k < 1.0), same number of elements as jd. k = 0 indicates a new moon, while k = 1 for a full moon. EXAMPLE: Plot the illuminated fraction of the moon for every day in July 1996 at 0 TD (~Greenwich noon). IDL> jdcnv, 1996, 7, 1, 0, jd ;Get Julian date of July 1 IDL> mphase, jd+dindgen(31), k ;Moon phase for all 31 days IDL> plot, indgen(31),k ;Plot phase vs. July day number METHOD: Algorithm from Chapter 46 of "Astronomical Algorithms" by Jean Meeus (Willmann-Bell, Richmond) 1991. SUNPOS and MOONPOS are used to get positions of the Sun and the Moon (and the Moon distance). The selenocentric elongation of the Earth from the Sun (phase angle) is then computed, and used to determine the illuminated fraction. PROCEDURES CALLED: MOONPOS, SUNPOS REVISION HISTORY: Written W. Landsman Hughes STX June 1996 Converted to IDL V5.0 W. Landsman September 1997 Use /RADIAN keywords to MOONPOS, SUNPOS internally W. Landsman Aug 2000
(See $IDLUTILS_DIR/goddard/pro/astro/mphase.pro)
MRANDOMN
NAME: MRANDOMN PURPOSE: Function to draw NRAND random deviates from a multivariate normal distribution with zero mean and covariance matrix COVAR. AUTHOR : Brandon C. Kelly, Steward Obs., Sept. 2004 INPUTS : SEED - The random number generator seed, the default is IDL's default in RANDOMN() COVAR - The covariance matrix of the multivariate normal distribution. OPTIONAL INPUTS : NRAND - The number of randomn deviates to draw. The default is one. OUTPUT : The random deviates, an [NRAND, NP] array where NP is the dimension of the covariance matrix, i.e., the number of parameters. ROUTINES CALLED : POSITIVE, DIAG
(See $IDLUTILS_DIR/goddard/pro/math/mrandomn.pro)
MRDFITS
NAME: MRDFITS PURPOSE: Read all standard FITS data types into arrays or structures. EXPLANATION: Further information on MRDFITS is available at http://idlastro.gsfc.nasa.gov/mrdfits.html **This version requires a post March 2009 version of fxposit.pro** CALLING SEQUENCE: Result = MRDFITS( Filename/FileUnit,[Exten_no/Exten_name, Header], /FPACK, /NO_FPACK, /FSCALE , /DSCALE , /UNSIGNED, ALIAS=strarr[2,n], /USE_COLNUM, /NO_TDIM, ROWS = [a,b,...], $ /POINTER_VAR, /FIXED_VAR, EXTNUM= RANGE=[a,b], COLUMNS=[a,b,...]), ERROR_ACTION=x, COMPRESS=comp_prog, STATUS=status, /VERSION, /EMPTYSTRING ) INPUTS: Filename = String containing the name of the file to be read or file number of an open unit. If an empty string is supplied, then user will be prompted for the file name. The user will also be prompted if a wild card is given in the file name, and there is more than one file name match. If the file name ends in .gz or .fz (or .Z on Unix systems) the file will be dynamically decompressed. or FiluUnit = An integer file unit which has already been opened for input. Data will be read from this unit and the unit will be left pointing immediately after the HDU that is read. Thus to read a compressed file with many HDU's a user might do something like: lun=fxposit(filename, 3) ; Skip the first three HDU's repeat begin thisHDU = mrdfits(lun, 0, hdr, status=status) ... process the HDU ... endrep until status lt 0 Exten_no= Extension number to be read, 0 for primary array. Assumed 0 if not specified. If a unit rather than a filename is specified in the first argument, this is the number of HDU's to skip from the current position. Exten_name - Name of the extension to read (as stored in the EXTNAME keyword). This is a slightly slower method then specifying the extension number. OUTPUTS: Result = FITS data array or structure constructed from the designated extension. The format of result depends upon the type of FITS data read. Non-group primary array or IMAGE extension: A simple multidimensional array is returned with the dimensions given in the NAXISn keywords. Grouped image data with PCOUNT=0. As above but with GCOUNT treated as NAXIS(n+1). Grouped image data with PCOUNT>0. The data is returned as an array of structures. Each structure has two elements. The first is a one-dimensional array of the group parameters, the second is a multidimensional array as given by the NAXIS2-n keywords. ASCII and BINARY tables. The data is returned as a structure with one column for each field in the table. The names of the columns are normally taken from the TTYPE keywords (but see USE_COLNUM). Bit field columns are stored in byte arrays of the minimum necessary length. Spaces and invalid characters are replaced by underscores, and other invalid tag names are converted using the IDL_VALIDNAME(/CONVERT_ALL) function. Columns specified as variable length columns are stored with a dimension equal to the largest actual dimension used. Extra values in rows are filled with 0's or blanks. If the size of the variable length column is not a constant, then an additional column is created giving the size used in the current row. This additional column will have a tag name of the form L#_"colname" where # is the column number and colname is the column name of the variable length column. If the length of each element of a variable length column is 0 then the column is deleted. OPTIONAL OUTPUT: Header = String array containing the header from the FITS extension. OPTIONAL INPUT KEYWORDS: ALIAS The keyword allows the user to specify the column names to be created when reading FITS data. The value of this keyword should be a 2xn string array. The first value of each pair of strings should be the desired tag name for the IDL column. The second should be the FITS TTYPE value. Note that there are restrictions on valid tag names. The order of the ALIAS keyword is compatible with MWRFITS. COLUMNS - This keyword allows the user to specify that only a subset of columns is to be returned. The columns may be specified either as number 1,... n or by name or some combination of these two. If /USE_COLNUM is specified names should be C1,...Cn. The use of this keyword will not save time or internal memory since the extraction of specified columns is done after all columns have been retrieved from the FITS file. Structure columns are returned in the order supplied in this keyword. COMPRESS - This keyword allows the user to specify a decompression program to use to decompress a file that will not be automatically recognized based upon the file name. /DSCALE - As with FSCALE except that the resulting data is stored in doubles. /EMPTYSTRING - There was a bug in memory management for IDL versions prior to V8.0, causing a memory leak when reading empty strings in a FITS table. Setting /EMPTYSTRING will avoid this problem by first reading strings into bytes and then converting. However, there is a performance penalty. ERROR_ACTION - Set the on_error action to this value (defaults to 2). /FIXED_VAR- Translate variable length columns into fixed length columns and provide a length column for truly varying columns. This was only behavior prior to V2.5 for MRDFITS and remains the default (see /POINTER_VAR) /FPACK - If set, then assume the FITS file uses FPACK compression (http://heasarc.gsfc.nasa.gov/fitsio/fpack/). MRDFITS will automatically detect FPACK compressed files, but it is more efficient to supply the /FPACK keyword. A file with an extension of .fz is assumed to be Fpack compressed. /NO_FPACK - If present, then MRDFITS will not uncompress an extension compressed with FPACK, but will just read the compressed binary stream. /FSCALE - If present and non-zero then scale data to float numbers for arrays and columns which have either non-zero offset or non-unity scale. If scaling parameters are applied, then the corresponding FITS scaling keywords will be modified. NO_TDIM - Disable processing of TDIM keywords. If NO_TDIM is specified MRDFITS will ignore TDIM keywords in binary tables. /POINTER_VAR- Use pointer arrays for variable length columns. In addition to changing the format in which variable length arrays are stored, if the pointer_var keyword is set to any value other than 1 this also disables the deletion of variable length columns. (See /FIXED_VAR) Note that because pointers may be present in the output structure, the user is responsible for memory management when deleting or reassigning the structure (e.g. use HEAP_FREE first). RANGE - A scalar or two element vector giving the start and end rows to be retrieved. For ASCII and BINARY tables this specifies the row number. For GROUPed data this will specify the groups. For array images, this refers to the last non-unity index in the array. E.g., for a 3 D image with NAXIS* values = [100,100,1], the range may be specified as 0:99, since the last axis is suppressed. Note that the range uses IDL indexing So that the first row is row 0. If only a single value, x, is given in the range, the range is assumed to be [0,x-1]. ROWS - A scalar or vector specifying a specific row or rows to read (first row is 0). For example to read rows 0, 12 and 23 only, set ROWS=[0,12,23]. Valid for images, ASCII and binary tables, but not GROUPed data. For images the row numbers refer to the last non-unity index in the array. Note that the use of the ROWS will not improve the speed of MRDFITS since the entire table will be read in, and then subset to the specified rows. Cannot be used at the same time as the RANGE keyword /SILENT - Suppress informative messages. STRUCTYP - The structyp keyword specifies the name to be used for the structure defined when reading ASCII or binary tables. Generally users will not be able to conveniently combine data from multiple files unless the STRUCTYP parameter is specified. An error will occur if the user specifies the same value for the STRUCTYP keyword in calls to MRDFITS in the same IDL session for extensions which have different structures. /UNSIGNED - For integer data with appropriate zero points and scales read the data into unsigned integer arrays. /USE_COLNUM - When creating column names for binary and ASCII tables MRDFITS attempts to use the appropriate TTYPE keyword values. If USE_COLNUM is specified and non-zero then column names will be generated as 'C1, C2, ... 'Cn' for the number of columns in the table. /VERSION Print the current version number OPTIONAL OUTPUT KEYWORDS: EXTNUM - the number of the extension actually read. Useful if the user specified the extension by name. OUTALIAS - This is a 2xn string array where the first column gives the actual structure tagname, and the second gives the corresponding FITS keyword name (e.g. in the TTYPE keyword). This array can be passed directly to the alias keyword of MWRFITS to recreate the file originally read by MRDFITS. STATUS - A integer status indicating success or failure of the request. A status of >=0 indicates a successful read. Currently 0 -> successful completion -1 -> error -2 -> end of file EXAMPLES: (1) Read a FITS primary array: a = mrdfits('TEST.FITS') or a = mrdfits('TEST.FITS', 0, header) The second example also retrieves header information. (2) Read rows 10-100 of the second extension of a FITS file. a = mrdfits('TEST.FITS', 2, header, range=[10,100]) (3) Read a table and ask that any scalings be applied and the scaled data be converted to doubles. Use simple column names, suppress outputs. a = mrdfits('TEST.FITS', 1, /dscale, /use_colnum, /silent) (4) Read rows 3, 34 and 52 of a binary table and request that variable length columns be stored as a pointer variable in the output structure a = mrdfits('TEST.FITS',1,rows=[3,34,52],/POINTER) RESTRICTIONS: (1) Cannot handle data in non-standard FITS formats. (2) Doesn't do anything with BLANK or NULL values or NaN's. They are just read in. They may be scaled if scaling is applied. NOTES: This multiple format FITS reader is designed to provide a single, simple interface to reading all common types of FITS data. MRDFITS DOES NOT scale data by default. The FSCALE or DSCALE parameters must be used. Null values in an FITS ASCII table are converted to NaN (floating data), or -2147483647L (longwords) or '...' (strings). PROCEDURES USED: The following procedures are contained in the main MRDFITS program. MRD_IMAGE -- Generate array/structure for images. MRD_READ_IMAGE -- Read image data. MRD_ASCII -- Generate structure for ASCII tables. MRD_READ_ASCII -- Read an ASCII table. MRD_TABLE -- Generate structure for Binary tables. MRD_READ_TABLE -- Read binary table info. MRD_READ_HEAP -- Read variable length record info. MRD_SCALE -- Apply scaling to data. MRD_COLUMNS -- Extract columns. Other ASTRON Library routines used FXPAR(), FXADDPAR, FXPOSIT, FXMOVE(), MATCH, MRD_STRUCT(), MRD_SKIP MODIfICATION HISTORY: V1.0 November 9, 1994 ---- Initial release. Creator: Thomas A. McGlynn V1.1 January 20, 1995 T.A. McGlynn Fixed bug in variable length records. Added TDIM support -- new routine mrd_tdim in MRD_TABLE. V1.2 Added support for dynamic decompression of files. Fixed further bugs in variable length record handling. V1.2a Added NO_TDIM keyword to turn off TDIM processing for those who don't want it. Bug fixes: Handle one row tables correctly, use BZERO rather than BOFFSET. Fix error in scaling of images. V1.2b Changed MRD_HREAD to handle null characters in headers. V2.0 April 1, 1996 -Handles FITS tables with an arbitrary number of columns. -Substantial changes to MRD_STRUCT to allow the use of substructures when more than 127 columns are desired. -All references to table columns are now made through the functions MRD_GETC and MRD_PUTC. See description above. -Use of SILENT will now eliminate compilation messages for temporary functions. -Bugs in handling of variable length columns with either a single row in the table or a maximum of a single element in the column fixed. -Added support for DCOMPLEX numbers in binary tables (M formats) for IDL versions above 4.0. -Created regression test procedure to check in new versions. -Added error_action parameter to allow user to specify on_error action. This should allow better interaction with new CHECK facility. ON_ERROR statements deleted from most called routines. - Modified MRDFITS to read in headers containing null characters with a warning message printed. V2.0a April 16, 1996 - Added IS_IEEE_BIG() checks (and routine) so that we don't worry about IEEE to host conversions if the machine's native format is IEEE Big-endian. V2.1 August 24, 1996 - Use resolve_routine for dynamically defined functions for versions > 4.0 - Fix some processing in random groups format. - Handle cases where the data segment is--legally--null. In this case MRDFITS returns a scalar 0. - Fix bugs with the values for BSCALE and BZERO (and PSCAL and PZERO) parameters set by MRDFITS. V2.1a April 24, 1997 Handle binary tables with zero length columns V2.1b May 13,1997 Remove whitespace from replicate structure definition V2.1c May 28,1997 Less strict parsing of XTENSION keyword V2.1d June 16, 1997 Fixed problem for >32767 entries introduced 24-Apr V2.1e Aug 12, 1997 Fixed problem handling double complex arrays V2.1f Oct 22, 1997 IDL reserved words can't be structure tag names V2.1g Nov 24, 1997 Handle XTENSION keywords with extra blanks. V2.1h Jul 26, 1998 More flexible parsing of TFORM characters V2.2 Dec 14, 1998 Allow fields with longer names for later versions of IDL. Fix handling of arrays in scaling routines. Allow >128 fields in structures for IDL >4.0 Use more efficient structure copying for IDL>5.0 V2.2b June 17, 1999 Fix bug in handling case where all variable length columns are deleted because they are empty. V2.3 March 7, 2000 Allow user to supply file handle rather than file name. Added status field. Now needs FXMOVE routine V2.3b April 4, 2000 Added compress option (from D. Palmer) V2.4 July 4, 2000 Added STATUS=-1 for "File access error" (Zarro/GSFC) V2.4a May 2, 2001 Trim binary format string (W. Landsman) V2.5 December 5, 2001 Add unsigned, alias, 64 bit integers. version, $ /pointer_val, /fixed_var. V2.5a Fix problem when both the first and the last character in a TTYPEnn value are invalid structure tag characters V2.6 February 15, 2002 Fix error in handling unsigned numbers, $ and 64 bit unsigneds. (Thanks to Stephane Beland) V2.6a September 2, 2002 Fix possible conflicting data structure for variable length arrays (W. Landsman) V2.7 July, 2003 Added Rows keyword (W. Landsman) V2.7a September 2003 Convert dimensions to long64 to handle huge files V2.8 October 2003 Use IDL_VALIDNAME() function to ensure valid tag names Removed OLD_STRUCT and TEMPDIR keywords W. Landsman V2.9 February 2004 Added internal MRD_FXPAR procedure for faster processing of binary table headers E. Sheldon V2.9a March 2004 Restore ability to read empty binary table W. Landsman Swallow binary tables with more columns than given in TFIELDS V2.9b Fix to ensure order of TFORMn doesn't matter V2.9c Check if extra degenerate NAXISn keyword are present W.L. Oct 2004 V2.9d Propagate /SILENT to MRD_HREAD, more LONG64 casting W. L. Dec 2004 V2.9e Add typarr[good] to fix a problem reading zero-length columns A.Csillaghy, csillag@ssl.berkeley.edu (RHESSI) V2.9f Fix problem with string variable binary tables, possible math overflow on non-IEEE machines WL Feb. 2005 V2.9g Fix problem when setting /USE_COLNUM WL Feb. 2005 V2.10 Use faster keywords to BYTEORDER WL May 2006 V2.11 Add ON_IOERROR, CATCH, and STATUS keyword to MRD_READ_IMAGE to trap EOF in compressed files DZ Also fix handling of unsigned images when BSCALE not present K Chu/WL June 2006 V2.12 Allow extension to be specified by name, added EXTNUM keyword WL December 2006 V2.12a Convert ASCII table column to DOUBLE if single precision is insufficient V2.12b Fixed problem when both /fscale and /unsigned are set C. Markwardt Aug 2007 V2.13 Use SWAP_ENDIAN_INPLACE instead of IEEE_TO_HOST and IS_IEEE_BIG W. Landsman Nov 2007 V2.13a One element vector allowed for file name W.L. Dec 2007 V2.13b More informative error message when EOF found W.L. Jun 2008 V2.14 Use vector form of VALID_NUM(), added OUTALIAS keyword W.L. Aug 2008 V2.15 Use new FXPOSIT which uses on-the-fly byteswapping W.L. Mar 2009 V2.15a Small efficiency updates to MRD_SCALE W.L. Apr 2009 V2.15b Fixed typo introduced Apr 2009 V2.15c Fix bug introduced Mar 2009 when file unit used W.L. July 2009 V2.16 Handle FPACK compressed files W. L. July 2009 V2.17 Use compile_opt hidden on all routines except mrdfits.pro W.L. July 2009 V2.18 Added /EMPTYSTRING keyword W. Landsman August 2009 V2.18a Fix Columns keyword output, A. Kimball/ W. Landsman Feb 2010 V2.18b Fix bug with /EMPTYSTRING and multidimensional strings S. Baldridge/W.L. August 2010 V2.18c Fix unsigned bug caused by compile_opt idl2 WL Nov 2010 V2.19 Use V6.0 operators WL Nov 2010 V2.19a Fix complex data conversion in variable length tables WL Dec 2010 V2.19b Fix bug with /FSCALE introduced Nov 2010 WL Jan 2011 V2.19c Fix bug with ROWS keyword introduced Nov 2010 WL Mar 2011 V2.20 Convert Nulls in ASCII tables, better check of duplicate keywords WL May 2011
(See $IDLUTILS_DIR/goddard/pro/fits/mrdfits.pro)
MRD_HREAD
NAME: MRD_HREAD PURPOSE: Reads a FITS header from an opened disk file or Unix pipe EXPLANATION: Like FXHREAD but also works with compressed Unix files CALLING SEQUENCE: MRD_HREAD, UNIT, HEADER [, STATUS, /SILENT, ERRMSG =, /FIRSTBLOCK ] INPUTS: UNIT = Logical unit number of an open FITS file OUTPUTS: HEADER = String array containing the FITS header. OPT. OUTPUTS: STATUS = Condition code giving the status of the read. Normally, this is zero, but is set to -1 if an error occurs, or if the first byte of the header is zero (ASCII null). OPTIONAL KEYWORD INPUT: /FIRSTBLOCK - If set, then only the first block (36 lines or less) of the FITS header are read into the output variable. If only size information (e.g. BITPIX, NAXIS) is needed from the header, then the use of this keyword can save time. The file pointer is still positioned at the end of the header, even if the /FIRSTBLOCK keyword is supplied. /SILENT - If set, then warning messages about any invalid characters in the header are suppressed. /SKIPDATA - If set, then the file point is positioned at the end of the HDU after the header is read, i.e. the following data block is skipped. Useful, when one wants to the read the headers of multiple extensions. /NO_BADHEADER - if set, returns if FITS header has illegal characters By default, MRD_HREAD replaces bad characters with blanks, issues a warning, and continues. OPTIONAL OUTPUT PARAMETER: 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. RESTRICTIONS: The file must already be positioned at the start of the header. It must be a proper FITS file. SIDE EFFECTS: The file ends by being positioned at the end of the FITS header, unless an error occurs. REVISION HISTORY: Written, Thomas McGlynn August 1995 Modified, Thomas McGlynn January 1996 Changed MRD_HREAD to handle Headers which have null characters A warning message is printed out but the program continues. Previously MRD_HREAD would fail if the null characters were not in the last 2880 byte block of the header. Note that such characters are illegal in the header but frequently are produced by poor FITS writers. Added /SILENT keyword W. Landsman December 2000 Added /FIRSTBLOCK keyword W. Landsman February 2003 Added ERRMSG, SKIPDATA keyword W. Landsman April 2009 Close file unit even after error message W.L. October 2010 Added /NO_BADHEADER Zarro (ADNET), January 2012
(See $IDLUTILS_DIR/goddard/pro/fits/mrd_hread.pro)
MRD_SKIP
NAME: MRD_SKIP PURPOSE: Skip a number of bytes from the current location in a file or a pipe EXPLANATION: First tries using POINT_LUN and if this doesn't work, perhaps because the unit is a pipe or a socket, MRD_SKIP will just read in the requisite number of bytes. CALLING SEQUENCE: MRD_SKIP, Unit, Nskip INPUTS: Unit - File unit for the file or pipe in question, integer scalar Nskip - Number of bytes to be skipped, positive integer NOTES: This routine should be used in place of POINT_LUN wherever a pipe or socket may be the input unit (see the procedure FXPOSIT for an example). Note that it assumes that it can only work with nskip >= 0 so it doesn't even try for negative values. For reading a pipe, MRD_SKIP currently uses a maximum buffer size of 8 MB. This chunk value can be increased for improved efficiency (or decreased if you really have little memory.) REVISION HISTORY: Written, Thomas A. McGlynn July 1995 Don't even try to skip bytes on a pipe with POINT_LUN, since this might reset the current pointer W. Landsman April 1996 Increase buffer size, check fstat.compress W. Landsman Jan 2001 Only a warning if trying read past EOF W. Landsman Sep 2001 Use 64bit longword for skipping in very large files W. Landsman Sep 2003 Assume since V5.4, fstat.compress available W. Landsman April 2006 POINT_LUN for compressed files is as fast as any W. Landsman Oct 2006 Don't try to use POINT_LUN on compressed files W. Landsman Dec. 2006
(See $IDLUTILS_DIR/goddard/pro/misc/mrd_skip.pro)
MRD_STRUCT
NAME: MRD_STRUCT PURPOSE: Return a structure as defined in the names and values data. CALLING SEQUENCE: struct = MRD_STRUCT(NAMES, VALUES, NROW, STRUCTYP='name' ) INPUT PARAMETERS: NAMES = A string array of names of structure fields. VALUES = A string array giving the values of the structure fields. See examples below. NROW = The number of elements in the structure array. RETURNS: A structure as described in the parameters or 0 if an error is detected. OPTIONAL KEYWORD PARAMETERS: /NO_EXECUTE - If set then the use of the EXECUTE() statement is avoided. By default, the NO_EXECUTE pathway is used if IDL is running under the Virtual Machine. Note if /NO_EXECUTE is set, then the user cannot supply arbitary values, but all possible values used by MRDFITS will be allowed. STRUCTYP = The structure type. Since IDL does not allow the redefinition of a named structure it is an error to call MRD_STRUCT with different parameters but the same STRUCTYP in the same session. If this keyword is not set an anonymous structure is created. COMMON BLOCKS: MRD_COMMON SIDE EFFECTS: May create a temporary file if the structure definition is too long for the EXECUTE function and using old style structures RESTRICTIONS: By default, the program defines the structure in a long string which is executed with CREATE_STRUCT within a single EXECUTE statement. If program is being run in the IDL Virtual machine (EXECUTE statement not allowed), then a separate CREATE_STRUCT statement is called for each tag. This mode does not have the full capabilities of the normal mode, but should be sufficient for use with MRDFITS(). PROCEDURE: A structure definition is created using the parameter values. MRD_NSTRUCT is called and generates the structure in pieces using the execute and create_struct keywords. EXAMPLES: (1) str = mrd_struct(['fld1', 'fld2'], ['0','dblarr(10,10)'],3) print, str(0).fld2(3,3) Note that "0" is always considered short integer even if the default integer is set to long. (2) str = mrd_struct(['a','b','c','d'],['1', '1.', '1.d0', "'1'"],1) ; returns a structure with integer, float, double and string ; fields. PROCEDURE CALLS: GETTOK() - needed for virtual machine mode only MODIFICATION HISTORY: Created by T. McGlynn October, 1994. Modified by T. McGlynn September, 1995. Added capability to create substructures so that structure may contain up to 4096 distinct elements. [This can be increased by futher iteration of the process used if needed.] Removed V4.0 reference to common block October 1997 Allowed unlimited number of structure elements if the version is greater than 5.0. Put back in code to handle prior versions. The [] will need to be translated back to () for this to work. T. McGlynn December 15 1998. Add MRD_NSTRUCT since IDL has mysterious problems compiling very large structures. Removed TEMPDIR and OLD_STRUCT keywords W. Landsman October 2003 Alternate pathway without EXECUTE for V6.0 virtual machine, D. Lindler Removed limit on EXECUTE statement. W. Landsman October 2003 Restore EXECUTE limit (sigh...), added NO_EXECUTE keyword W. Landsman July 2004 Fix use of STRUCTYP with /NO_EXECUTE W. Landsman June 2005 Assume since V6.0 (lmgr function available), remove 131 string length limit for execute W. Landsman Jun 2009 Restore EXECUTE limit (sigh...) W. Landsman July 2009 Make sure "0" is a short integer even with compile_opt idl2 July 2010 Added "0.0", "0.0d", "0u", "0ul", and "0ull" as valid tags for /NO_EXECUTE E. Rykoff May 2012
(See $IDLUTILS_DIR/goddard/pro/structure/mrd_struct.pro)
MULTINOM
NAME: MULTINOM PURPOSE: SIMULATE MULTINOMIAL RANDOM VARIABLES AUTHOR : BRANDON C. KELLY, STEWARD OBS., APR 2006 INPUTS : N - THE NUMBER OF TRIALS P - A K-ELEMENT VECTOR CONTAINING THE PROBABILITIES FOR EACH CLASS. OPTIONAL INPUTS : NRAND - THE NUMBER OF RANDOM VARIABLES TO DRAW SEED - THE SEED FOR THE RANDOM NUMBER GENERATOR OUTPUT : NRAND RANDOM DRAWS FROM A MULTINOMIAL DISTRIBUTION WITH PARAMETERS N AND P.
(See $IDLUTILS_DIR/goddard/pro/math/multinom.pro)
MULTIPLOT
Name: MULTIPLOT Purpose: Create multiple plots with simple control over the gaps between plots. By default, the gap is zero but this can be set with the gap= keyword, or xgap=, ygap= for individual control over different axes. You can also place a single title along the x, y and top axes of the matrix of plots using the mtitle, mxtitle and mytitle keywords. It is good for data with one or two shared axes and retains all the versatility of the plot commands (e.g. all keywords and log scaling). The plots are connected with the shared axes, which saves space by omitting redundant ticklabels and titles. Multiplot does this by setting !p.position, !x.tickname and !y.tickname automatically. A call (multiplot,/reset) restores original values. CALLING SEQUENCE: multiplot, pmulti, gap=, xgap=, ygap=, /square, /doxaxis, /doyaxis, mTitle=, mTitSize=, mTitOffset=, mxTitle=, mxTitSize=, mxTitOffset=, myTitle=, myTitSize=, myTitOffset=, xtickformat=, ytickformat= /default, /reset, /rowmajor, /initialize INPUTS: pmulti: Optional input. [Nx,Ny] array describing the shape of the matrix of plots. This is equivalent to the 2nd and 3rd elements of !p.multi. Or you can send all 5 elements of the !p.multi. KEYWORD INPUTS: gap=: Set the gap between plots in normalized units. Default is 0. This input overrides the xgap and ygap inputs. xgap=: Gap between plots in the x direction. Default 0. To set both x and y gap to the same value just use the gap keyword. ygap=: Gap between plots in the y direction. Default 0. To set both x and y gap to the same value just use the gap keyword. mTitle: A single title to go across the top of the matrix of plots, as opposed to the plot over single plots you generate with the plot command for example. mTitSize: The font size of the top title. Default is 1.25*!p.charsize mTitOffset: Offset of the title in the y-direction. mxTitle, mxTitSize, mxTitOffset: same as above but for the x-axis title myTitle, myTitSize, myTitOffset: same as above but for the y-axis title xtickformat, ytickformat: Set the default tick formats when the ticks are plotted. This allows the user to avoid sending this to each plotting command which can have unexpected results if that axis was not to get tick labels in a given point in the matrix. KEYWORDS SWITCHES: /square: Force the axis ratio of each plot to be square. Note if xgap and ygap are set to different values, this axis ratio will not be preserved. It will be preserved if gap= is used. /doxaxis: Put axis labels, etc on the axis. Default is to place labels only on the left side and bottom sides of the plot matrix, but may be useful when some cells are empty; for example the x-axis of a 2x2 grid when only 3 total plots will be created. /doyaxis: Put axis labels, etc on the yxis. Default is to place labels only on the left side and bottom sides of the plot matrix, but may be useful when some cells are empty; for example the x-axis of a 2x2 grid when only 3 total plots will be created. /rowmajor: Like setting 5th element of !p.multi to 1. /reset: Set plotting parameters to their saved values from before multiplot was initially called. /default: Set plotting parameters to IDL defaults. This is useful when the saved parameters get in a whacky state. /initialize: Just do the initialization. This is what happends when you first call multiplot anyway. EXAMPLES: ; Make an array of plots [4,3] with a gap of 0.1 (in norm. coords.) ; and overall titles along the x and y axes as given. Force the ; plots to be square. cgerase & multiplot, [4,3], /square, gap=0.1, mXtitle='R', mYtitle='F(R)' for i=0,4*3-1 do begin cgplot, struct[i].x, struct[i].y, psym=4 multiplot endfor multiplot,/reset Side Effects: Multiplot sets a number of system variables: !p.position, !p.multi, !x.tickname, !y.tickname, !P.noerase---but all can be reset with the call: multiplot,/reset Things can get out of wack if your program crashes in the middle of making a matrix of plots, and often /reset will not fix it. In those cases, calling multiplot,/default will often fix the problem. Restrictions: 1. If you use !p.multi as the method of telling how many plots are present, you have to set !p.multi at the beginning each time you use multiplot or call multiplot with the /reset keyword. 2. There is no way to make plots of different sizes; each plot covers the same area on the screen or paper. Modification history: write, 21-23 Mar 94, Fred Knight (knight@ll.mit.edu) alter plot command that sets !x.window, etc. per suggestion of Mark Hadfield (hadfield@storm.greta.cri.nz), 7 Apr 94, FKK add a /default keyword restore IDL's default values of system vars, 7 Apr 94, FKK modify two more sys vars !x(y).tickformat to suppress user-formatted ticknames, per suggestion of Mark Hadfield (qv), 8 Apr 94, FKK 2001-03-20 Added /square keyword Work in device coordinates so we can force aspect ratio to be square if requested. Erin Scott Sheldon UMichigan 2007-06-18 Can now place titles on the overall x and y axes, as well as a top title using these new keywords. mTitle=, mTitSize=, mTitOffset=, mxTitle=, mxTitSize=, mxTitOffset=, myTitle=, myTitSize=, myTitOffset=, Can also control overall tick formats. Useful because can just call multiplot initially and set this, while calling on each call to the plotting program will have unexpected results if the ticks are not to be labelled for that place in the matrix. xtickformat, ytickformat Erin Sheldon, NYU 2007-08-28: Can now add gaps between the plots with these keywords: gap=, xgap=, ygap= where the values are in normalized coordinates. Erin Sheldon, NYU 2009-11-23 Initialize common block if M[X/Y]TITLE set W. Landsman 2011-02-07 Use Coyote Graphics W. Landsman 2012-03-21 Use cgplot on initial call to get right background W.L.
(See $IDLUTILS_DIR/goddard/pro/plot/multiplot.pro)
MWRFITS
NAME: MWRFITS PURPOSE: Write all standard FITS data types from input arrays or structures. EXPLANATION: Must be used with a post-October 2009 version of FXADDPAR. CALLING SEQUENCE: MWRFITS, Input, Filename, [Header], /LSCALE , /ISCALE, /BSCALE, /USE_COLNUM, /Silent, /Create, /No_comment, /Version, $ Alias=, /ASCII, Separator=, Terminator=, Null=, /Logical_cols, /Bit_cols, /Nbit_cols, Group=, Pscale=, Pzero=, Status= INPUTS: Input = Array or structure to be written to FITS file. -When writing FITS primary data or image extensions input should be an array. --If data is to be grouped the Group keyword should be specified to point to a two dimensional array. The first dimension of the Group array will be PCOUNT while the second dimension should be the same as the last dimension of Input. --If Input is undefined, then a dummy primary dataset or Image extension is created [This might be done, e.g., to put appropriate keywords in a dummy primary HDU]. -When writing an ASCII table extension, Input should be a structure array where no element of the structure is a structure or array (except see below). --A byte array will be written as A field. No checking is done to ensure that the values in the byte field are valid ASCII. --Complex numbers are written to two columns with '_R' and '_I' appended to the TTYPE fields (if present). The complex number is enclosed in square brackets in the output. --Strings are written to fields with the length adjusted to accommodate the largest string. Shorter strings are blank padded to the right. -When writing a binary table extension, the input should be a structure array with no element of the structure being a substructure. If a structure is specified on input and the output file does not exist or the /CREATE keyword is specified a dummy primary HDU is created. Filename = String containing the name of the file to be written. By default MWRFITS appends a new extension to existing files which are assumed to be valid FITS. The /CREATE keyword can be used to ensure that a new FITS file is created even if the file already exists. OUTPUTS: OPTIONAL INPUTS: Header = Header should be a string array. Each element of the array is added as a row in the FITS header. No parsing is done of this data. MWRFITS will prepend required structural (and, if specified, scaling) keywords before the rows specified in Header. Rows describing columns in the table will be appended to the contents of Header. Header lines will be extended or truncated to 80 characters as necessary. If Header is specified then on return Header will have the header generated for the specified extension. OPTIONAL INPUT KEYWORDS: ALias= Set up aliases to convert from the IDL structure to the FITS column name. The value should be a STRARR(2,*) value where the first element of each pair of values corresponds to a column in the structure and the second is the name to be used in the FITS file. The order of the alias keyword is compatible with use in MRDFITS. ASCII - Creates an ASCII table rather than a binary table. This keyword may be specified as: /ASCII - Use default formats for columns. ASCII='format_string' allows the user to specify the format of various data types such using the following syntax 'column_type:format, column_type:format'. E.g., ASCII='A:A1,I:I6,L:I10,B:I4,F:G15.9,D:G23.17,C:G15.9,M:G23.17' gives the default formats used for each type. The TFORM fields for the real and complex types indicate will use corresponding E and D formats when a G format is specified. Note that the length of the field for ASCII strings and byte arrays is automatically determined for each column. BIT_COLS= An array of indices of the bit columns. The data should comprise a byte array with the appropriate dimensions. If the number of bits per row (see NBIT_COLS) is greater than 8, then the first dimension of the array should match the number of input bytes per row. BSCALE Scale floats, longs, or shorts to unsigned bytes (see LSCALE) /CREATE If this keyword is non-zero, then a new FITS file will be created regardless of whether the file currently exists. Otherwise when the file already exists, a FITS extension will be appended to the existing file which is assumed to be a valid FITS file. GROUP= This keyword indicates that GROUPed FITS data is to be generated. Group should be a 2-D array of the appropriate output type. The first dimension will set the number of group parameters. The second dimension must agree with the last dimension of the Input array. ISCALE Scale floats or longs to short integer (see LSCALE) LOGICAL_COLS= An array of indices of the logical column numbers. These should start with the first column having index 0. The structure element should either be an array of characters with the values 'T' or 'F', or an array of bytes having the values byte('T'), byte('F') or 0b. The use of bytes allows the specification of undefined values (0b). LSCALE Scale floating point numbers to long integers. This keyword may be specified in three ways. /LSCALE (or LSCALE=1) asks for scaling to be automatically determined. LSCALE=value divides the input by value. I.e., BSCALE=value, BZERO=0. Numbers out of range are given the value of NULL if specified, otherwise they are given the appropriate extremum value. LSCALE=(value,value) uses the first value as BSCALE and the second as BZERO (or TSCALE and TZERO for tables). NBIT_COLS= The number of bits actually used in the bit array. This argument must point to an array of the same dimension as BIT_COLS. NO_TYPES If the NO_TYPES keyword is specified, then no TTYPE keywords will be created for ASCII and BINARY tables. No_comment Do not write comment keywords in the header NULL= Value to be written for integers/strings which are undefined or unwritable. PSCALE= An array giving scaling parameters for the group keywords. It should have the same dimension as the first dimension of Group. PZERO= An array giving offset parameters for the group keywords. It should have the same dimension as the first dimension of Group. Separator= This keyword can be specified as a string which will be used to separate fields in ASCII tables. By default fields are separated by a blank. /SILENT Suppress informative messages. Errors will still be reported. Terminator= This keyword can be specified to provide a string which will be placed at the end of each row of an ASCII table. No terminator is used when not specified. If a non-string terminator is specified (including when the /terminator form is used), a new line terminator is appended. USE_COLNUM When creating column names for binary and ASCII tables MWRFITS attempts to use structure field name values. If USE_COLNUM is specified and non-zero then column names will be generated as 'C1, C2, ... 'Cn' for the number of columns in the table. Version Print the version number of MWRFITS. OPTIONAL OUTPUT KEYWORD: Status - 0 if FITS file is successfully written, -1 if there is a a problem (e.g. nonexistent directory, or no write permission) EXAMPLE: Write a simple array: a=fltarr(20,20) mwrfits,a,'test.fits' Append a 3 column, 2 row, binary table extension to file just created. a={name:'M31', coords:(30., 20.), distance:2} a=replicate(a, 2); mwrfits,a,'test.fits' Now add on an image extension: a=lonarr(10,10,10) hdr=("COMMENT This is a comment line to put in the header", $ "MYKEY = "Some desired keyword value") mwrfits,a,'test.fits',hdr RESTRICTIONS: (1) Variable length columns are not supported for anything other than simple types (byte, int, long, float, double). (2) Empty strings are converted to 1 element blank strings (because IDL refuses to write an empty string (0b) from a structure) NOTES: This multiple format FITS writer is designed to provide a single, simple interface to writing all common types of FITS data. Given the number of options within the program and the variety of IDL systems available it is likely that a number of bugs are yet to be uncovered. PROCEDURES USED: FXPAR(), FXADDPAR MODIfICATION HISTORY: Version 0.9: By T. McGlynn 1997-07-23 Initial beta release. Dec 1, 1997, Lindler, Modified to work under VMS. Version 0.91: T. McGlynn 1998-03-09 Fixed problem in handling null primary arrays. Version 0.92: T. McGlynn 1998-09-09 Add no_comment flag and keep user comments on fields. Fix handling of bit fields. Version 0.93: T. McGlynn 1999-03-10 Fix table appends on VMS. Version 0.93a W. Landsman/D. Schlegel Update keyword values in chk_and_upd if data type has changed Version 0.94: T. McGlynn 2000-02-02 Efficient processing of ASCII tables. Use G rather than E formats as defaults for ASCII tables and make the default precision long enough that transformations binary to/from ASCII are invertible. Some loop indices made long. Fixed some ends to match block beginnings. Version 0.95: T. McGlynn 2000-11-06 Several fixes to scaling. Thanks to David Sahnow for documenting the problems. Added PCOUNT,GCOUNT keywords to Image extensions. Version numbers shown in SIMPLE/XTENSION comments Version 0.96: T. McGlynn 2001-04-06 Changed how files are opened to handle ~ consistently Version 1.0: T. McGlynn 2001-12-04 Unsigned integers, 64 bit integers. Aliases Variable length arrays Some code cleanup Version 1.1: T. McGlynn 2002-2-18 Fixed major bug in processing of unsigned integers. (Thanks to Stephane Beland) Version 1.2: Stephane Beland 2003-03-17 Fixed problem in creating dummy dataset when passing undefined data, caused by an update to FXADDPAR routine. Version 1.2.1 Stephane Beland 2003-09-10 Exit gracefully if write priveleges unavailable Version 1.3 Wayne Landsman 2003-10-24 Don't use EXECUTE() statement if on a virtual machine Version 1.3a Wayne Landsman 2004-5-21 Fix for variable type arrays Version 1.4 Wayne Landsman 2004-07-16 Use STRUCT_ASSIGN when modifying structure with pointer tags Version 1.4a Wayne Landsman 2005-01-03 Fix writing of empty strings in binary tables Version 1.4b Wayne Landsman 2006-02-23 Propagate /SILENT keyword to mwr_tablehdr Version 1.5 Wayne Landsman 2006-05-24 Open file using /SWAP_IF_LITTLE_ENDIAN keyword Convert empty strings to 1 element blank strings before writing Version 1.5a Wayne Landsman 2006-06-29 Fix problem introduced 2006-05-24 with multidimensional strings Version 1.5b K. Tolbert 2006-06-29 Make V1.5a fix work pre-V6.0 Version 1.5c I.Evans/W.Landsman 2006-08-08 Allow logical columns to be specified as bytes Version 1,5d K. Tolbert 2006-08-11 Make V1.5a fix work for scalar empty string Version 1.6 W. Landsman 2006-09-22 Assume since V5.5, remove VMS support Version 1.6a W. Landsman 2006-09-22 Don't right-justify strings Version 1.7 W. Landsman 2009-01-12 Added STATUS output keyword Version 1.7a W. Landsman 2009-04-10 Since V6.4 strings are no longer limited to 1024 elements Version 1.8 Pierre Chanial 2009-06-23 trim alias, implement logical TFORM 'L', don't add space after tform key. Version 1.9 W. Landsman 2009-07-20 Suppress compilation messages of supporting routines Version 1.10 W. Landsman 2009-09-30 Allow TTYPE values of 'T' and 'F', fix USE_COLNUM for bin tables Version 1.11 W. Landsman 2010-11-18 Allow LONG64 number of bytes, use V6.0 notation
(See $IDLUTILS_DIR/goddard/pro/fits/mwrfits.pro)
NGP
NAME: NGP PURPOSE: Interpolate an irregularly sampled field using Nearest Grid Point EXPLANATION: This function interpolates irregularly gridded points to a regular grid using Nearest Grid Point. CATEGORY: Mathematical functions, Interpolation CALLING SEQUENCE: Result = NGP, VALUE, POSX, NX[, POSY, NY, POSZ, NZ, /AVERAGE, /WRAPAROUND, /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 average of all the samples allocated to it. If this keyword is not set, the value at each grid point will be the 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 the data is periodic and if you want the first grid point to contain samples of both sides of the volume (see below). (D=0). NO_MESSAGE: Suppress informational messages. Example of default NGP allocation: 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 NGP interpolation is being performed of x samples to y grid points, unless NO_MESSAGE is set. RESTRICTIONS: All input arrays must have the same dimensions. Postition coordinates should be in `index units' of the desired grid: POSX=[0,NX>, etc. PROCEDURE: Nearest grid point is determined for each sample. Samples are allocated to nearest grid points. Grid point values are computed (sum or average of samples). EXAMPLE: nx = 20 ny = 10 posx = randomu(s,1000) posy = randomu(s,1000) value = posx^2+posy^2 field = ngp(value,posx*nx,nx,posy*ny,ny,/average) surface,field,/lego NOTES: Use tsc.pro or cic.pro for a higher order interpolation schemes. A standard reference for these interpolation methods is: R.W. Hockney and J.W. Eastwood, Computer Simulations Using Particles (New York: McGraw-Hill, 1981). MODIFICATION HISTORY: Written by Joop Schaye, Feb 1999. Check for LONG overflow P. Riley/W. Landsman December 1999
(See $IDLUTILS_DIR/goddard/pro/math/ngp.pro)
NINT
NAME: NINT PURPOSE: Nearest integer function. EXPLANATION: NINT() is similar to the intrinsic ROUND function, with the following two differences: (1) if no absolute value exceeds 32767, then the array is returned as as a type INTEGER instead of LONG (2) NINT will work on strings, e.g. print,nint(['3.4','-0.9']) will give [3,-1], whereas ROUND() gives an error message CALLING SEQUENCE: result = nint( x, [ /LONG] ) INPUT: X - An IDL variable, scalar or vector, usually floating or double Unless the LONG keyword is set, X must be between -32767.5 and 32767.5 to avoid integer overflow OUTPUT RESULT - Nearest integer to X OPTIONAL KEYWORD INPUT: LONG - If this keyword is set and non-zero, then the result of NINT is of type LONG. Otherwise, the result is of type LONG if any absolute values exceed 32767, and type INTEGER if all all absolute values are less than 32767. EXAMPLE: If X = [-0.9,-0.1,0.1,0.9] then NINT(X) = [-1,0,0,1] PROCEDURE CALL: None: REVISION HISTORY: Written W. Landsman January 1989 Added LONG keyword November 1991 Use ROUND if since V3.1.0 June 1993 Always start with ROUND function April 1995 Return LONG values, if some input value exceed 32767 and accept string values February 1998 Use size(/TNAME) instead of DATATYPE() October 2001
(See $IDLUTILS_DIR/goddard/pro/misc/nint.pro)
NSTAR
NAME: NSTAR PURPOSE: Simultaneous point spread function fitting (adapted from DAOPHOT) EXPLANATION: This PSF fitting algorithm is based on a very old (~1987) version of DAOPHOT, and much better algorithms (e.g. ALLSTAR) are now available -- though not in IDL. CALLING SEQUENCE: NSTAR, image, id, xc, yc, mags, sky, group, [ phpadu, readns, psfname, magerr, iter, chisq, peak, /PRINT , /SILENT, /VARSKY, /DEBUG ] INPUTS: image - image array id - vector of stellar ID numbers given by FIND xc - vector containing X position centroids of stars (e.g. as found by FIND) yc - vector of Y position centroids mags - vector of aperture magnitudes (e.g. as found by APER) If 9 or more parameters are supplied then, upon output ID,XC,YC, and MAGS will be modified to contain the new values of these parameters as determined by NSTAR. Note that the number of output stars may be less than the number of input stars since stars may converge, or "disappear" because they are too faint. sky - vector of sky background values (e.g. as found by APER) group - vector containing group id's of stars as found by GROUP OPTIONAL INPUT: phpadu - numeric scalar giving number of photons per digital unit. Needed for computing Poisson error statistics. readns - readout noise per pixel, numeric scalar. If not supplied, NSTAR will try to read the values of READNS and PHPADU from the PSF header. If still not found, user will be prompted. psfname - name of FITS image file containing the point spread function residuals as determined by GETPSF, scalar string. If omitted, then NSTAR will prompt for this parameter. OPTIONAL OUTPUTS: MAGERR - vector of errors in the magnitudes found by NSTAR ITER - vector containing the number of iterations required for each output star. CHISQ- vector containing the chi square of the PSF fit for each output star. PEAK - vector containing the difference of the mean residual of the pixels in the outer half of the fitting circle and the mean residual of pixels in the inner half of the fitting circle OPTIONAL KEYWORD INPUTS: /SILENT - if set and non-zero, then NSTAR will not display its results at the terminal /PRINT - if set and non-zero then NSTAR will also write its results to a file nstar.prt. One also can specify the output file name by setting PRINT = 'filename'. /VARSKY - if this keyword is set and non-zero, then the sky level of each group is set as a free parameter. /DEBUG - if this keyword is set and non-zero, then the result of each fitting iteration will be displayed. PROCEDURES USED: DAO_VALUE(), READFITS(), REMOVE, SPEC_DIR(), STRN(), SXPAR() COMMON BLOCK: RINTER - contains pre-tabulated values for cubic interpolation REVISION HISTORY W. Landsman ST Systems Co. May, 1988 Adapted for IDL Version 2, J. Isensee, September, 1990 Minor fixes so that PRINT='filename' really prints to 'filename', and it really silent if SILENT is set. J.Wm.Parker HSTX 1995-Oct-31 Added /VARSKY option W. Landsman HSTX May 1996 Converted to IDL V5.0 W. Landsman September 1997 Replace DATATYPE() with size(/TNAME) W. Landsman November 2001 Assume since V5.5, remove VMS calls W. Landsman September 2006
(See $IDLUTILS_DIR/goddard/pro/idlphot/nstar.pro)
NULLTRIM
NAME: NULLTRIM PURPOSE: Trim a string of all characters after and including the first null EXPLANATION: The null character is an ascii 0b CALLING SEQUENCE: result = nulltrim( st ) INPUTS: st = input string OUTPUTS: trimmed string returned as the function value. HISTORY: D. Lindler July, 1987 Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/misc/nulltrim.pro)
NUTATE
NAME: NUTATE PURPOSE: Return the nutation in longitude and obliquity for a given Julian date CALLING SEQUENCE: NUTATE, jd, Nut_long, Nut_obliq INPUT: jd - Julian ephemeris date, scalar or vector, double precision OUTPUT: Nut_long - the nutation in longitude, same # of elements as jd Nut_obliq - nutation in latitude, same # of elements as jd EXAMPLE: (1) Find the nutation in longitude and obliquity 1987 on Apr 10 at Oh. This is example 22.a from Meeus IDL> jdcnv,1987,4,10,0,jul IDL> nutate, jul, nut_long, nut_obliq ==> nut_long = -3.788 nut_obliq = 9.443 (2) Plot the large-scale variation of the nutation in longitude during the 20th century IDL> yr = 1900 + indgen(100) ;Compute once a year IDL> jdcnv,yr,1,1,0,jul ;Find Julian date of first day of year IDL> nutate,jul, nut_long ;Nutation in longitude IDL> plot, yr, nut_long This plot will reveal the dominant (18.6 year) period, but a finer grid is needed to display the shorter periods in the nutation. METHOD: Uses the formula in Chapter 22 of ``Astronomical Algorithms'' by Jean Meeus (1998, 2nd ed.) which is based on the 1980 IAU Theory of Nutation and includes all terms larger than 0.0003". PROCEDURES CALLED: POLY() (from IDL User's Library) CIRRANGE, ISARRAY() (from IDL Astronomy Library) REVISION HISTORY: Written, W.Landsman (Goddard/HSTX) June 1996 Converted to IDL V5.0 W. Landsman September 1997 Corrected minor typos in values of d_lng W. Landsman December 2000 Updated typo in cdelt term December 2000 Avoid overflow for more than 32767 input dates W. Landsman January 2005
(See $IDLUTILS_DIR/goddard/pro/astro/nutate.pro)
N_BYTES()
NAME: N_bytes() PURPOSE: To return the total number of bytes in data element CALLING SEQUENCE: result = N_bytes(a) INPUTS: a - any idl data element, scalar or array OUTPUTS: total number of bytes in a is returned as the function value (64bit longword scalar) NOTES: (1) Not valid for object or pointer data types (2) For a string array, the number of bytes is computed after conversion with the BYTE() function, i.e. each element has the same length, equal to the maximum individual string length. MODIFICATION HISTORY: Version 1 By D. Lindler Oct. 1986 Include new IDL data types W. Landsman June 2001 Now return a 64bit integer W. Landsman April 2006
(See $IDLUTILS_DIR/goddard/pro/misc/n_bytes.pro)
OBSERVATORY
NAME: OBSERVATORY PURPOSE: Return longitude, latitude, altitude & time zones of an observatory EXPLANATION: Given an observatory name, returns a structure giving the longitude, latitude, altitude, and time zone CALLING SEQUENCE: Observatory, obsname, obs_struct, [ /PRINT ] INPUTS: obsname - scalar or vector string giving abbreviated name(s) of observatories for which location or time information is requested. If obsname is an empty string, then information is returned for all observatories in the database. See the NOTES: section for the list of 41 recognized observatories. The case of the string does not matter OUTPUTS: obs_struct - an IDL structure containing information on the specified observatories. The structure tags are as follows: .observatory - abbreviated observatory name .name - full observatory name .longitude - observatory longitude in degrees *west* .latitude - observatory latitude in degrees .altitude - observatory altitude in meters above sea level .tz - time zone, number of hours *west* of Greenwich OPTIONAL INPUT KEYWORD: /PRINT - If this keyword is set, (or if only 1 parameter is supplied) then OBSERVATORY will display information about the specified observatories at the terminal EXAMPLE: Get the latitude, longitude and altitude of Kitt Peak National Observatory IDL> observatory,'kpno',obs IDL> print,obs.longitude ==> 111.6 degrees west IDL> print,obs.latitude ==> +31.9633 degrees IDL> print,obs.altitude ==> 2120 meters above sea level NOTES: Observatory information is taken from noao$lib/obsdb.dat file in IRAF 2.11 Currently recognized observatory names are as follows: 'kpno': Kitt Peak National Observatory 'ctio': Cerro Tololo Interamerican Observatory 'eso': European Southern Observatory 'lick': Lick Observatory 'mmto': MMT Observatory 'cfht': Canada-France-Hawaii Telescope 'lapalma': Roque de los Muchachos, La Palma 'mso': Mt. Stromlo Observatory 'sso': Siding Spring Observatory 'aao': Anglo-Australian Observatory 'mcdonald': McDonald Observatory 'lco': Las Campanas Observatory 'mtbigelow': Catalina Observatory: 61 inch telescope 'dao': Dominion Astrophysical Observatory 'spm': Observatorio Astronomico Nacional, San Pedro Martir 'tona': Observatorio Astronomico Nacional, Tonantzintla 'Palomar': The Hale Telescope 'mdm': Michigan-Dartmouth-MIT Observatory 'NOV': National Observatory of Venezuela 'bmo': Black Moshannon Observatory 'BAO': Beijing XingLong Observatory 'keck': W. M. Keck Observatory 'ekar': Mt. Ekar 182 cm. Telescope 'apo': Apache Point Observatory 'lowell': Lowell Observatory 'vbo': Vainu Bappu Observatory 'flwo': Whipple Observatory 'oro': Oak Ridge Observatory 'lna': Laboratorio Nacional de Astrofisica - Brazil 'saao': South African Astronomical Observatory 'casleo': Complejo Astronomico El Leoncito, San Juan 'bosque': Estacion Astrofisica Bosque Alegre, Cordoba 'rozhen': National Astronomical Observatory Rozhen - Bulgaria 'irtf': NASA Infrared Telescope Facility 'bgsuo': Bowling Green State Univ Observatory 'ca': Calar Alto Observatory 'holi': Observatorium Hoher List (Universitaet Bonn) - Germany 'lmo': Leander McCormick Observatory 'fmo': Fan Mountain Observatory 'whitin': Whitin Observatory, Wellesley College 'mgio': Mount Graham International Observatory PROCEDURE CALLS: TEN() REVISION HISTORY: Written W. Landsman July 2000 Corrected sign error for 'holi' W.L/ Holger Israel Mar 2008 Correctly terminate when observatory name not recognized S. Koposov, July 2008
(See $IDLUTILS_DIR/goddard/pro/astro/observatory.pro)
ONE_ARROW
NAME: ONE_ARROW PURPOSE: Draws an arrow labeled with a single character on the current device EXPLANATION: ONE_ARROW is called, for example, by ARROWS to create a "weathervane" showing the N-E orientation of an image. CALLING SEQUENCE: one_arrow, xcen, ycen, angle, label, CHARSIZE = , THICK = , COLOR = ARROWSIZE=, FONT = ] INPUT PARAMETERS: xcen, ycen = starting point of arrow, floating point scalars, In device coordinates unless /DATA or /NORMAL set angle = angle of arrow in degrees counterclockwise from +X direction label = single-character label (may be blank) OUTPUT PARAMETERS: none OPTIONAL INPUT PARAMETERS: ARROWSIZE = 3-element vector defining appearance of arrow. For device coordinates the default is [30.0, 9.0, 35.0], meaning arrow is 30 pixels long; arrowhead lines 9 pixels long and inclined 35 degrees from arrow shaft. For normalized coordinates the default is divided by 512., for data coordinates the default is multiplied by (!X.crange[1] - !X.crange[0])/512.. CHARSIZE = usual IDL meaning, default = 2.0 COLOR = name or number give the color to draw the arrow. See cgCOLOR for a list of color names. /DATA - If set, then the input position (xcen, ycen) and the ARROWSIZE lengths are interpreted as being in data coordinates FONT - IDL vector font number to use (1-20). For example, to write the 'N' and 'E' characters in complex script, set font=13 /NORMAL - If set, then the input position (xcen, ycen) and the ARROWSIZE lengths are interpreted as being in normal coordinates THICK = usual IDL meaning, default = 2.0 EXAMPLE: Draw an triple size arrow emanating from the point (212,224) and labeled with the character 'S' IDL> one_arrow,212,224,270,'S',charsize=3 PROCEDURE: Calls one_ray to vector-draw arrow. MODIFICATION HISTORY: Written by R. S. Hill, Hughes STX Corp., 20-May-1992. Added font keyword, W.B. Landsman Hughes STX Corp. April 1995 Modified to work correctly for COLOR=0 J.Wm.Parker, HITC 1995 May 25 Add /NORMAL and /DATA keywords W.Landsman November 2006 Work with Coyote graphics W. Landsman February 2011
(See $IDLUTILS_DIR/goddard/pro/misc/one_arrow.pro)
ONE_RAY
NAME: ONE_RAY PURPOSE: Draw a line with a specified starting point, length, and angle CALLING SEQUENCE: one_ray, xcen, ycen, len, angle, terminus, /NODRAW ] INPUT PARAMETERS: xcen, ycen = starting point in device coordinates, floating point scalars len = length in pixels, device coordinates angle = angle in degrees counterclockwise from +X direction OUTPUT PARAMETERS: terminus = two-element vector giving ending point of ray in device coordinates OPTIONAL KEYWORD INPUT PARAMETERS: /nodraw if non-zero, the ray is not actually drawn, but the terminus is still calculated Any valid keyword to cgPLOTS can also be passed ot ONE_RAY. In particular, COLOR, THICK, and LINESTYLE control the color, thickness and linestyle of the drawn line. EXAMPLE: Draw a double thickness line of length 32 pixels from (256,256) 45 degrees counterclockwise from the X axis IDL> one_ray, 256, 256, 32, 45 ,term, THICK = 2 PROCEDURE: straightforward matrix arithmetic MODIFICATION HISTORY: Written by R. S. Hill, Hughes STX Corp., 20-May-1992. Modified to work correctly for COLOR=0 J.Wm.Parker HITC 1995 May 25 Added _EXTRA keywords to PLOT W. Landsman November 2006 Work with Coyote Graphcis W. Landsman February 2011
(See $IDLUTILS_DIR/goddard/pro/misc/one_ray.pro)
OPLOTERROR
NAME: OPLOTERROR PURPOSE: Over-plot data points with accompanying X or Y error bars. EXPLANATION: For use instead of PLOTERROR when the plotting system has already been defined. CALLING SEQUENCE: oploterror, [ x,] y, [xerr], yerr, [ /NOHAT, HATLENGTH= , ERRTHICK =, ERRSTYLE=, ERRCOLOR =, /LOBAR, /HIBAR, NSKIP = , NSUM = , /ADDCMD, ... OPLOT keywords ] INPUTS: X = array of abcissae, any datatype except string Y = array of Y values, any datatype except string XERR = array of error bar values (along X) YERR = array of error bar values (along Y) OPTIONAL INPUT KEYWORD PARAMETERS: /ADDCMD = Set this keyword if you want to add this command to a cgWindow. /NOHAT = if specified and non-zero, the error bars are drawn without hats. HATLENGTH = the length of the hat lines used to cap the error bars. Defaults to !D.X_VSIZE / 100). ERRTHICK = the thickness of the error bar lines. Defaults to the THICK plotting keyword. ERRSTYLE = the line style to use when drawing the error bars. Uses the same codes as LINESTYLE. ERRCOLOR = String (e.g. 'red') or scalar integer (0 - !D.N_TABLE) specifying the color to use for the error bars. See CGCOLOR() for a list of possible color names. See http://www.idlcoyote.com/cg_tips/legcolor.php for a warning about the use of indexed color NSKIP = Positive Integer specifying the error bars to be plotted. For example, if NSKIP = 2 then every other error bar is plotted; if NSKIP=3 then every third error bar is plotted. Default is to plot every error bar (NSKIP = 1) NSUM = Number of points to average over before plotting, default = !P.NSUM The errors are also averaged, and then divided by sqrt(NSUM). This approximation is meaningful only when the neighboring error bars have similar sizes. /LOBAR = if specified and non-zero, will draw only the -ERR error bars. /HIBAR = if specified and non-zero, will draw only the +ERR error bars. If neither LOBAR or HIBAR are set _or_ if both are set, you will get both error bars. Just specify one if you only want one set. Any valid keywords to the OPLOT command (e.g. PSYM, YRANGE) are also accepted by OPLOTERROR via the _EXTRA facility. NOTES: If only two parameters are input, they are taken as Y and YERR. If only three parameters are input, they will be taken as X, Y and YERR, respectively. EXAMPLE: Suppose one has X and Y vectors with associated errors XERR and YERR and that a plotting system has already been defined: (1) Overplot Y vs. X with both X and Y errors and no lines connecting the points IDL> oploterror, x, y, xerr, yerr, psym=3 (2) Like (1) but overplot only the Y errors bars and omits "hats" IDL> oploterror, x, y, yerr, psym=3, /NOHAT (3) Like (2) but suppose one has a positive error vector YERR1, and a negative error vector YERR2 (asymmetric error bars) IDL> oploterror, x, y, yerr1, psym=3, /NOHAT,/HIBAR IDL> oploterror, x, y, yerr2, psym=3, /NOHAT,/LOBAR PROCEDURE: A plot of X versus Y with error bars drawn from Y - YERR to Y + YERR and optionally from X - XERR to X + XERR is written to the output device WARNING: This an enhanced version of the procedure OPLOTERR in the standard RSI library. It was renamed to OPLOTERROR in June 1998 in the IDL Astronomy library. MODIFICATION HISTORY: Adapted from the most recent version of PLOTERR. M. R. Greason, Hughes STX, 11 August 1992. Added COLOR keyword option to error bars W. Landsman November 1993 Add ERRCOLOR, use _EXTRA keyword, W. Landsman, July 1995 Remove spurious call to PLOT_KEYWORDS W. Landsman, August 1995 OPLOT more than 32767 error bars W. Landsman, Feb 1996 Added NSKIP keyword W. Landsman, Dec 1996 Added HIBAR and LOBAR keywords, M. Buie, Lowell Obs., Feb 1998 Rename to OPLOTERROR W. Landsman June 1998 Ignore !P.PSYM when drawing error bars W. Landsman Jan 1999 Handle NSUM keyword correctly W. Landsman Aug 1999 Check limits for logarithmic axes W. Landsman Nov. 1999 Work in the presence of NAN values W. Landsman Dec 2000 Improve logic when NSUM or !P.NSUM is set W. Landsman Jan 2001 Remove NSUM keyword from PLOTS call W. Landsman March 2001 Only draw error bars with in XRANGE (for speed) W. Landsman Jan 2002 Fix Jan 2002 update to work with log plots W. Landsman Jun 2002 Added STRICT_EXTRA keyword W. Landsman July 2005 W. Landsman Fixed case of logarithmic axes reversed Mar 2009 Update for Coyote Graphics W. Landsman Feb. 2011 Hats were not being plotted by default W. Landsman Apr 2011
(See $IDLUTILS_DIR/goddard/pro/plot/oploterror.pro)
ORDINAL
NAME: ORDINAL PURPOSE: Convert an integer to a correct English ordinal string: EXPLANATION: The first four ordinal strings are "1st", "2nd", "3rd", "4th" .... CALLING SEQUENCE: result = ordinal( num ) INPUT PARAMETERS: num = number to be made an ordinal. If float, will be FIXed. OUTPUT PARAMETERS: result = string such as '1st' '3rd' '164th' '87th', etc. MODIFICATION HISTORY: Written by R. S. Hill, STX, 8 Aug. 1991 Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/misc/ordinal.pro)
PARTVELVEC
NAME: PARTVELVEC PURPOSE: Plot the velocity vectors of particles at their positions EXPLANATION: This procedure plots the velocity vectors of particles (at the positions of the particles). CATEGORY: Plotting, Two-dimensional. CALLING SEQUENCE: PARTVELVEC, VELX, VELY, POSX, POSY [, X, Y] INPUTS: VELX: An array of any dimension, containing the x-components of the particle velocities. VELY: An array of the same dimension as velx, containing the y-components of the particle velocities. POSX: An array of the same dimension as velx, containing the x-components of the particle positions. POSY: An array of the same dimension as velx, containing the y-components of the particle positions. OPTIONAL INPUTS: X: Optional abcissae values. X must be a vector. Y: Optional ordinate values. Y must be a vector. If only X is specified, then Y is taken equal to be equal to X. OPTIONAL INPUT KEYWORD PARAMETERS: FRACTION: The fraction of the vectors to plot. They are taken at random from the complete sample. Default is FRACTION = 1.0, use all vectors LENGTH: The maximum vectorlength relative to the plot data window. Default = 0.08 COLOR: Color for the vectors, axes and titles by string name or number (see cgCOLOR). Note that if VECCOLORS is supplied, then the COLOR keyword still specifies the color of the axes and title. Default = 'Opposite' OVER: Plot over the previous plot VECCOLORS: The vector colors. Must be either a scalar, or a vector (nmeric or string) the same size as VELX. Set to COLOR by default. WINDOW - Set this keyword to plot to a resizeable graphics window Plot All other keywords available to cgPlot (e.g. AXISCOLOR, Keywords: LINESTYLE, XRANGE) are available (via _EXTRA) OUTPUTS: This procedure plots the velocity vectors (VELX,VELY) at the positions of the particles, (POSX,POSY). If X and Y are not specified, then the size of the plot is such that all vectors just fit within in the plot data window. SIDE EFFECTS: Plotting on the current device is performed. EXAMPLE: Generate some particle positions and velocities. POSX=RANDOMU(seed,200) POSY=RANDOMU(seed,200) VELX=RANDOMU(seed,200)-0.5 VELY=RANDOMU(seed,200)-0.5 Plot the particle velocities. PARTVELVEC, VELX, VELY, POSX, POSY Example using vector colors. POSX=RANDOMU(seed,200) POSY=RANDOMU(seed,200) VELX=RANDOMU(seed,200)-0.5 VELY=RANDOMU(seed,200)-0.5 magnitude = SQRT(velx^2 + vely^2) LOADCT, 5, NCOLORS=254, BOTTOM=1 ; Load vector colors colors = BytScl(magnitude, Top=254) + 1B PARTVELVEC, VELX, VELY, POSX, POSY, COLOR='green', VECCOLORS=colors MODIFICATION HISTORY: Written by: Joop Schaye (jschaye@astro.rug.nl), Sep 1996. Added /OVER keyword Theo Brauers (th.brauers@fz-juelich.de) Jul 2002 Added VECCOLORS keyword. David Fanning (david@dfanning.com) March, 2005 Incorporate the Coyote Graphics (cg) plot programs WL January 2011
(See $IDLUTILS_DIR/goddard/pro/plot/partvelvec.pro)
PCA
NAME: PCA PURPOSE: Carry out a Principal Components Analysis (Karhunen-Loeve Transform) EXPLANATION: Results can be directed to the screen, a file, or output variables See notes below for comparison with the intrinsic IDL function PCOMP. CALLING SEQUENCE: PCA, data, eigenval, eigenvect, percentages, proj_obj, proj_atr, [MATRIX =, TEXTOUT = ,/COVARIANCE, /SSQ, /SILENT ] INPUT PARAMETERS: data - 2-d data matrix, data(i,j) contains the jth attribute value for the ith object in the sample. If N_OBJ is the total number of objects (rows) in the sample, and N_ATTRIB is the total number of attributes (columns) then data should be dimensioned N_OBJ x N_ATTRIB. OPTIONAL INPUT KEYWORD PARAMETERS: /COVARIANCE - if this keyword is set, then the PCA will be carried out on the covariance matrix (rare), the default is to use the correlation matrix /SILENT - If this keyword is set, then no output is printed /SSQ - if this keyword is set, then the PCA will be carried out on on the sums-of-squares & cross-products matrix (rare) TEXTOUT - Controls print output device, defaults to !TEXTOUT 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 = filename (default extension of .prt) OPTIONAL OUTPUT PARAMETERS: eigenval - N_ATTRIB element vector containing the sorted eigenvalues eigenvect - N_ATRRIB x N_ATTRIB matrix containing the corresponding eigenvectors percentages - N_ATTRIB element containing the cumulative percentage variances associated with the principal components proj_obj - N_OBJ by N_ATTRIB matrix containing the projections of the objects on the principal components proj_atr - N_ATTRIB by N_ATTRIB matrix containing the projections of the attributes on the principal components OPTIONAL OUTPUT PARAMETER MATRIX = analysed matrix, either the covariance matrix if /COVARIANCE is set, the "sum of squares and cross-products" matrix if /SSQ is set, or the (by default) correlation matrix. Matrix will have dimensions N_ATTRIB x N_ATTRIB NOTES: This procedure performs Principal Components Analysis (Karhunen-Loeve Transform) according to the method described in "Multivariate Data Analysis" by Murtagh & Heck [Reidel : Dordrecht 1987], pp. 33-48. See http://astro.u-strasbg.fr/~fmurtagh/mda-sw/ Keywords /COVARIANCE and /SSQ are mutually exclusive. The printout contains only (at most) the first seven principle eigenvectors. However, the output variables EIGENVECT contain all the eigenvectors Different authors scale the covariance matrix in different ways. The eigenvalues output by PCA may have to be scaled by 1/N_OBJ or 1/(N_OBJ-1) to agree with other calculations when /COVAR is set. PCA uses the non-standard system variables !TEXTOUT and !TEXTUNIT. These can be added to one's session using the procedure ASTROLIB. The intrinsic IDL function PCOMP duplicates most most of the functionality of PCA, but uses different conventions and normalizations. Note the following: (1) PCOMP requires a N_ATTRIB x N_OBJ input array; this is the transpose of what PCA expects (2) PCA uses standardized variables for the correlation matrix: the input vectors are set to a mean of zero and variance of one and divided by sqrt(n); use the /STANDARDIZE keyword to PCOMP for a direct comparison. (3) PCA (unlike PCOMP) normalizes the eigenvectors by the square root of the eigenvalues. (4) PCA returns cumulative percentages; the VARIANCES keyword of PCOMP returns the variance in each variable (5) PCOMP divides the eigenvalues by (1/N_OBJ-1) when the covariance matrix is used. EXAMPLE: Perform a PCA analysis on the covariance matrix of a data matrix, DATA, and write the results to a file IDL> PCA, data, /COVAR, t = 'pca.dat' Perform a PCA analysis on the correlation matrix. Suppress all printing, and save the eigenvectors and eigenvalues in output variables IDL> PCA, data, eigenval, eigenvect, /SILENT PROCEDURES CALLED: TEXTOPEN, TEXTCLOSE REVISION HISTORY: Immanuel Freedman (after Murtagh F. and Heck A.). December 1993 Wayne Landsman, modified I/O December 1993 Fix MATRIX output, remove GOTO statements W. Landsman August 1998 Changed some index variable to type LONG W. Landsman March 2000 Fix error in computation of proj_atr, see Jan 1990 fix in http://astro.u-strasbg.fr/~fmurtagh/mda-sw/pca.f W. Landsman Feb 2008
(See $IDLUTILS_DIR/goddard/pro/math/pca.pro)
PENT
NAME: PENT PURPOSE: Return the information entropy of a time series EXPLANATION: This function will return S, the information entropy of a time series for a set of trial periods CATEGORY: Time series analysis, period finding, astronomical utilities. CALLING SEQUENCE: Result = PENT(P, T, X, [N, M ] ) INPUTS: P - array of trial period values. T - array of observation times (same units as P). X - array of observations. OPTIONAL INPUTS: N - If four parameters are given then the 4th parameter is assumed to be N. Then NxN boxes are used to calculate S. M,N - If five parameters are given then parameter 4 is M and parameter 5 is N. S is then calculated using MxN boxes - M partitions for the phase and N partitions for the data. OUTPUTS: This function returns S, the information entropy of the time series for the periods given in P as defined by Cincotta, Me'ndez & Nu'n~ez (Astrophysical Journal 449, 231-235, 1995). The minima of S occur at values of P where X shows periodicity. PROCEDURE: The procedure involves dividing the phase space into N^2 partitions (NxN boxes) and then calculating: __ N^2 S = - \ mu_i . ln(mu_i) for all mu_i <> 0 /_ i = 1 where mu_i is the number of data points in partition i normalised by the number of partitions. The option of using MxN boxes is an additional feature of this routine. EXAMPLE: To generate a similar sythetic data set to Cincotta et al. we do the following: IDL> P0 = 173.015 ; Fundamental period IDL> T = randomu(seed,400)*15000 ; 400 random observation times IDL> A0 = 14.0 ; Mean magnitude IDL> M0 = -0.5 * sin(2*!pi*T/P0) ; Fundamental mode IDL> M1 = -0.15 * sin(4*!pi*T/P0) ; 1st harmonic IDL> M2 = -0.05 * sin(6*!pi*T/P0) ; 2nd harmonic IDL> sig = randomu(seed,400)*0.03 ; noise IDL> U = A0 + M0 + M1 + M2 + sig ; Synthetic data IDL> Ptest = 100. + findgen(2000)/2. ; Trial periods IDL> S = pent(Ptest,T,U) ; Calculate S ... this takes a few seconds ... IDL> plot,Ptest,S,xtitle="P",ytitle="S" ; plot S v. P IDL> print,Ptest(where(S eq min(S))) ; Print best period (+/- 0.5) The plot produced should be similar to Fig. 2 of Cincotta et al. RESTRICTIONS: My own (limited) experience with this routine suggests that it is not as good as other techniques for finding weak, multi-periodic signals in poorly sampled data, but is good for establishing periods of eclipsing binary stars when M is quite large (try MxN = 64x16, 128x16 or even 256x16). This suggests it may be good for other periodic light curves (Cepheids, RR Lyrae etc.). I would be glad to receive reports of other peoples experience with this technique (e-mail pflm@bro730.astro.ku.dk). MODIFICATION HISTORY: Written by: Pierre Maxted, 14Sep95 Modifications: Normalisation of S corrected, T-min(T) taken out of loop. - Pierre Maxted, 15Sep95 Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/math/pent.pro)
PICKCOLORNAME
NAME: PICKCOLORNAME PURPOSE: The purpose of this program is to provide a blocking or modal widget interface for selecting a color "name". The program uses colors familiar to the cgColor program, and is often used to select a color name for passing to cgColor. AUTHOR: FANNING SOFTWARE CONSULTING: David Fanning, Ph.D. 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com CATEGORY: Graphics, Color Specification. CALLING SEQUENCE: colorName = PickColorName(startColorName) OPTIONAL INPUT PARAMETERS: startColorName: A string with the "name" of the color. Colors available are these: Almond Antique White Aquamarine Beige Bisque Black Blue Blue Violet Brown Burlywood Cadet Blue Charcoal Chartreuse Chocolate Coral Cornflower Blue Cornsilk Crimson Cyan Dark Goldenrod Dark Gray Dark Green Dark Khaki Dark Orchid Dark Red Dark Salmon Dark Slate Blue Deep Pink Dodger Blue Firebrick Forest Green Gold Goldenrod Gray Green Green Yellow Honeydew Hot Pink Indian Red Ivory Khaki Lavender Lawn Green Light Coral Light Cyan Light Gray Light Salmon Light Sea Green Light Yellow Lime Green Linen Magenta Maroon Medium Gray Medium Orchid Moccasin Navy Olive Olive Drab Orange Orange Red Orchid Pale Goldenrod Pale Green Papaya Peru Pink Plum Powder Blue Purple Red Rose Rosy Brown Royal Blue Saddle Brown Salmon Sandy Brown Sea Green Seashell Sienna Sky Blue Slate Blue Slate Gray Snow Spring Green Steel Blue Tan Teal Thistle Tomato Turquoise Violet Violet Red Wheat White Yellow The color WHITE is used if this parameter is absent. If the BREWER keyword is set, you can use the Brewer Color names: WT1 WT2 WT3 WT4 WT5 WT6 WT7 WT8 TAN1 TAN2 TAN3 TAN4 TAN5 TAN6 TAN7 TAN8 BLK1 BLK2 BLK3 BLK4 BLK5 BLK6 BLK7 BLK8 GRN1 GRN2 GRN3 GRN4 GRN5 GRN6 GRN7 GRN8 BLU1 BLU2 BLU3 BLU4 BLU5 BLU6 BLU7 BLU8 ORG1 ORG2 ORG3 ORG4 ORG5 ORG6 ORG7 ORG8 RED1 RED2 RED3 RED4 RED5 RED6 RED7 RED8 PUR1 PUR2 PUR3 PUR4 PUR5 PUR6 PUR7 PUR8 PBG1 PBG2 PBG3 PBG4 PBG5 PBG6 PBG7 PBG8 YGB1 YGB2 YGB3 YGB4 YGB5 YGB6 YGB7 YGB8 RYB1 RYB2 RYB3 RYB4 RYB5 RYB6 RYB7 RYB8 TG1 TG2 TG3 TG4 TG5 TG6 TG7 TG8 As of 3 JULY 2008, the BREWER names are always available. If the BREWER keyword is set, only the BREWER names are available. INPUT KEYWORD PARAMETERS: BOTTOM: The colors used in the program must be loaded somewhere in the color table. This keyword indicates where the colors start loading. By default BOTTOM is set equal to !D.Table_Size-NCOLORS-1. BREWER: Set this keyword if you wish to use the Brewer Colors, as defined in this reference: http://www.personal.psu.edu/cab38/ColorBrewer/ColorBrewer_intro.html COLUMNS: Set this keyword to the number of columns the colors should be arranged in. FILENAME: The string name of an ASCII file that can be opened to read in color values and color names. There should be one color per row in the file. Please be sure there are no blank lines in the file. The format of each row should be: redValue greenValue blueValue colorName Color values should be between 0 and 255. Any kind of white-space separation (blank characters, commas, or tabs) are allowed. The color name should be a string, but it should NOT be in quotes. A typical entry into the file would look like this: 255 255 0 Yellow GROUP_LEADER: This identifies a group leader if the program is called from within a widget program. Note that this keyword MUST be provided if you want to guarantee modal widget functionality. (If you don't know what this means, believe me, you WANT to use this keyword, always.) INDEX: This keyword identifies a color table index where the selected color is to be loaded when the program exits. The default behavior is to restore the input color table and NOT load a color. TITLE: This keyword accepts a string value for the window title. The default is "Select a Color". OUTPUT KEYWORD PARAMETERS: CANCEL: On exit, this keyword value is set to 0 if the user selected the ACCEPT button. IF the user selected the CANCEL button, or closed the window in any other way, this keyword value is set to 1. COMMON BLOCKS: None. SIDE EFFECTS: Colors are loaded in the current color table. The input color table is restored when the program exits. This will only be noticable on 8-bit displays. The startColorName is returned if the user cancels or destroys the widget before a selection is made. Users should check the CANCEL flag before using the returned color. EXAMPLE: To call the program from the IDL comamnd line: IDL> color = PickColorName("red") & Print, color To call the program from within a widget program: color = PickColorName("red", Group_Leader=event.top) & Print, color MODIFICATION HISTORY: Written by: David W. Fanning, 31 August 2000. Modified program to read colors from a file and to use more colors on 24-bit platforms. 16 October 2000. DWF. Added the COLUMNS keyword. 16 October 2000. DWF. Fixed a small problem with mapping a modal widget. 2 Jan 2001. DWF Now drawing small box around each color. 13 March 2003. DWF. Added eight new colors. Total now of 104 colors. 11 August 2005. DWF. Modified GUI to display system colors. 13 Dec 2005. DWF. Added BREWER keyword to allow Brewer Colors. 15 May 2008. DWF. Added all BREWER names to the default naming scheme. 3 July 2008. DWF. Set a size for the color name label widget. Otherwise, the widget always jumps back to the center of the display when I select a color on UNIX machines. Also had to remove TLB updating with UPDATE keyword to avoid tickling the same IDL bug. Sigh... 13 March (Friday) 2009. Removed system color names, since these are no longer available in cgColor. 27 Nov 2010. DWF
(See $IDLUTILS_DIR/goddard/pro/coyote/pickcolorname.pro)
PIXCOLOR
NAME: PIXCOLOR PURPOSE: Assign colors to specified pixel values in a color lookup table EXPLANATION: Colors can be specified either from the list in cgcolor (http://www.idlcoyote.com/programs/cgcolor.pro ) or as 1 letter abbreviations for 8 common colors. CALLING SEQUENCE: PIXCOLOR, pixvalue, color ;Set color at specified pixel values INPUT PARMETERS: pixvalue - value or range of pixel values whose color will be modified. A single pixel value may be specified by an integer If a range of values is specified, then it must be written as a string, with a colon denoting the range (e.g.'102:123') If omitted, program will prompt for this parameter. OPTIONAL INPUT PARAMETER color - scalar string specifying either a full color name available in CGCOLOR, or a single character string giving one of the specified colors: 'R' (red), 'B' (blue), 'G' (green) 'Y' (yellow), 'T' (turquoise), 'V' (violet), 'W' (white) or 'D' (dark). If omitted, program will prompt for this parameter. OUTPUTS: None PROCEDURE: TVLCT is used in RGB mode to load the specified pixel values. EXAMPLE: Set pixel values of 245 to a color of red IDL> pixcolor,245,'R' Set pixel values 120 to 150 to Magenta IDL> pixcolor,'120:150','Magenta' REVISION HISTORY: Written, W. Landsman ST Systems Corp. February, 1987 Converted to IDL V5.0 W. Landsman September 1997 Allow specification of cgcolor names April 2011
(See $IDLUTILS_DIR/goddard/pro/tv/pixcolor.pro)
PIXWT
NAME: PIXWT PURPOSE: Circle-rectangle overlap area computation. DESCRIPTION: Compute the fraction of a unit pixel that is interior to a circle. The circle has a radius r and is centered at (xc, yc). The center of the unit pixel (length of sides = 1) is at (x, y). CATEGORY: CCD data processing CALLING SEQUENCE: area = Pixwt( xc, yc, r, x, y ) INPUTS: xc, yc : Center of the circle, numeric scalars r : Radius of the circle, numeric scalars x, y : Center of the unit pixel, numeric scalar or vector OPTIONAL INPUT PARAMETERS: None. KEYWORD PARAMETERS: None. OUTPUTS: Function value: Computed overlap area. EXAMPLE: What is the area of overlap of a circle with radius 3.44 units centered on the point 3.23, 4.22 with the pixel centered at [5,7] IDL> print,pixwt(3.23,4.22,3.44,5,7) ==> 0.6502 COMMON BLOCKS: None. PROCEDURE: Divides the circle and rectangle into a series of sectors and triangles. Determines which of nine possible cases for the overlap applies and sums the areas of the corresponding sectors and triangles. Called by aper.pro NOTES: If improved speed is needed then a C version of this routines, with notes on how to linkimage it to IDL is available at ftp://ftp.lowell.edu/pub/buie/idl/custom/ MODIFICATION HISTORY: Ported by Doug Loucks, Lowell Observatory, 1992 Sep, from the routine pixwt.c, by Marc Buie.
(See $IDLUTILS_DIR/goddard/pro/idlphot/pixwt.pro)
PKFIT
NAME: PKFIT PURPOSE: Subroutine of GETPSF to perform a one-star least-squares fit EXPLANATION: Part of the DAOPHOT PSF photometry sequence CALLING SEQUENCE: PKFIT, f, scale, x, y, sky, radius, ronois, phpadu, gauss, psf, errmag, chi, sharp, Niter, /DEBUG INPUTS: F - NX by NY array containing actual picture data. X, Y - the initial estimates of the centroid of the star relative to the corner (0,0) of the subarray. Upon return, the final computed values of X and Y will be passed back to the calling routine. SKY - the local sky brightness value, as obtained from APER RADIUS- the fitting radius-- only pixels within RADIUS of the instantaneous estimate of the star's centroid will be included in the fit, scalar RONOIS - readout noise per pixel, scalar PHPADU - photons per analog digital unit, scalar GAUSS - vector containing the values of the five parameters defining the analytic Gaussian which approximates the core of the PSF. PSF - an NPSF by NPSF look-up table containing corrections from the Gaussian approximation of the PSF to the true PSF. INPUT-OUTPUT: SCALE - the initial estimate of the brightness of the star, expressed as a fraction of the brightness of the PSF. Upon return, the final computed value of SCALE will be passed back to the calling routine. OUTPUTS: ERRMAG - the estimated standard error of the value of SCALE returned by this routine. CHI - the estimated goodness-of-fit statistic: the ratio of the observed pixel-to-pixel mean absolute deviation from the profile fit, to the value expected on the basis of the noise as determined from Poisson statistics and the readout noise. SHARP - a goodness-of-fit statistic describing how much broader the actual profile of the object appears than the profile of the PSF. NITER - the number of iterations the solution required to achieve convergence. If NITER = 25, the solution did not converge. If for some reason a singular matrix occurs during the least- squares solution, this will be flagged by setting NITER = -1. RESTRICTIONS: No parameter checking is performed REVISON HISTORY: Adapted from the official DAO version of 1985 January 25 Version 2.0 W. Landsman STX November 1988 Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/idlphot/pkfit.pro)
PLANCK()
NAME: PLANCK() PURPOSE: To calculate the Planck function in units of ergs/cm2/s/A CALLING SEQUENCE: bbflux = PLANCK( wave, temp) INPUT PARAMETERS: WAVE Scalar or vector giving the wavelength(s) in **Angstroms** at which the Planck function is to be evaluated. TEMP Scalar giving the temperature of the planck function in degree K OUTPUT PARAMETERS: BBFLUX - Scalar or vector giving the blackbody flux (i.e. !pi*Intensity) in erg/cm^2/s/A in at the specified wavelength points. EXAMPLES: To calculate the blackbody flux at 30,000 K every 100 Angstroms between 2000A and 2900 A IDL> wave = 2000 + findgen(10)*100 IDL> bbflux = planck(wave,30000) If a star with a blackbody spectrum has a radius R, and distance,d, then the flux at Earth in erg/cm^2/s/A will be bbflux*R^2/d^2 PROCEDURE: The wavelength data are converted to cm, and the Planck function is calculated for each wavelength point. See Allen (1973), Astrophysical Quantities, section 44 for more information. NOTES: See the procedure planck_radiance.pro in ftp://origin.ssec.wisc.edu/pub/paulv/idl/Radiance/planck_radiance.pro for computation of Planck radiance given wavenumber in cm-1 or wavelength in microns MODIFICATION HISTORY: Adapted from the IUE RDAF August, 1989 Converted to IDL V5.0 W. Landsman September 1997 Improve precision of constants W. Landsman January 2002
(See $IDLUTILS_DIR/goddard/pro/astro/planck.pro)
PLANET_COORDS
NAME: PLANET_COORDS PURPOSE: Find low or high precision RA and DEC for the planets given a date EXPLANATION: For low precision this routine uses HELIO to get the heliocentric ecliptic coordinates of the planets at the given date, then converts these to geocentric ecliptic coordinates ala "Astronomical Algorithms" by Jean Meeus (1991, p 209). These are then converted to RA and Dec using EULER. The accuracy between the years 1800 and 2050 is better than 1 arcminute for the terrestial planets, but reaches 10 arcminutes for Saturn. Before 1850 or after 2050 the accuracy can get much worse. For high precision use the /JPL option ito use the full JPL ephemeris. CALLING SEQUENCE: PLANET_COORDS, DATE, RA, DEC, [ PLANET = , /JD, /JPL] INPUTS: DATE - If /JD is not set, then date is a 3-6 element vector containing year,month (1-12), day, and optionally hour, minute, & second. If /JD is set then DATE is a Julian date. An advantage of the /JD option is that it allows the use of vector dates. OUTPUTS: RA - right ascension of planet(s), J2000 degrees, double precision DEC - declination of planet(s), J2000 degrees, double precision OPTIONAL INPUT KEYWORD: PLANET - scalar string giving name of a planet, e.g. 'venus'. Default is to compute coords for all of them (except Earth). /JD - If set, then the date parameter should be supplied as Julian date JPL - if /JPL set, then PLANET_COORDS will call the procedure JPLEPHINTERP to compute positions 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 JPLEPH.405 is available in http://idlastro.gsfc.nasa.gov/ftp/data/ EXAMPLES: (1) Find the RA, Dec of Venus on 1992 Dec 20 IDL> planet_coords, [1992,12,20], ra,dec ;Compute for all planets IDL> print,adstring(ra[1],dec[1],1) ;Venus is second planet ====> RA = 21 05 2.66 Dec = -18 51 45.7 This position is 37" from the full DE406 ephemeris position of RA = 21 05 5.24 -18 51 43.1 (2) Return the current RA and Dec of all 8 planets using JPL ephemeris IDL> get_juldate, jd ;Get current Julian Date IDL> planet_coords,jd,ra,dec,/jd,/jpl ;Find positions of all planets IDL> forprint,adstring(ra,dec,0) ;Display positions (3) Plot the declination of Mars for every day in the year 2001 IDL> jdcnv,2001,1,1,0,jd ;Get Julian date of midnight on Jan 1 Now get Mars RA,Dec for 365 consecutive days IDL> planet_coords,jd+indgen(365),ra,dec,/jd, planet = 'mars' IDL> plot,indgen(365)+1,dec NOTES: HELIO is based on the two-body problem and neglects interactions between the planets. This is why the worst results are for Saturn. Use the /JPL option or the online ephemeris generator http://ssd.jpl.nasa.gov/horizons.cgi for more accuracy. The procedure returns astrometric coordinates, i.e. no correction for aberration. A correction for light travel time is applied when /JPL is set, but not for the default low-precision calculation. PROCEDURES USED: JULDATE EULER, HELIO - if /JPL is not set JPLEPHREAD, JPLEPHINTERP - if /JPL is set REVISION HISTORY: Written P.Plait & W. Landsman August 2000 Fixed Julian date conversion W. Landsman August 2000 Added /JPL keyword W. Landsman July 2001 Allow vector Julian dates with JPL ephemeris W. Landsman December 2002
(See $IDLUTILS_DIR/goddard/pro/astro/planet_coords.pro)
PLOTERROR
NAME: PLOTERROR PURPOSE: Plot data points with accompanying X or Y error bars. EXPLANATION: This is a greatly enhanced version of the standard IDL Library routine PLOTERR CALLING SEQUENCE: ploterror, [ x,] y, [xerr], yerr [, TYPE=, /NOHAT, HATLENGTH= , NSUM = ERRTHICK=, ERRSTYLE=, ErrcolOR=, NSKIP=, .. PLOT keywords] INPUTS: X = array of abcissae. Y = array of Y values. XERR = array of error bar values (along X) YERR = array of error bar values (along Y) OPTIONAL INPUT KEYWORD PARAMETERS: TYPE = type of plot produced. The possible types are: TYPE = 0 : X Linear - Y Linear (default) TYPE = 1 : X Linear - Y Log TYPE = 2 : X Log - Y Linear TYPE = 3 : X Log - Y Log Actually, if 0 is specified, the XLOG and YLOG keywords are used. If these aren't specified, then a linear-linear plot is produced. This keyword is available to maintain compatibility with the previous version of PLOTERROR. /NOHAT = if specified and non-zero, the error bars are drawn without hats. HATLENGTH = the length of the hat lines in device units used to cap the error bars. Defaults to !D.X_VSIZE / 100). ERRTHICK = the thickness of the error bar lines. Defaults to the THICK plotting keyword. ERRSTYLE = the line style to use when drawing the error bars. Uses the same codes as LINESTYLE. ERRCOLOR = String (e.g. 'red') or scalar integer (0 - !D.N_TABLE) specifying the color to use for the error bars. See CGCOLOR() for a list of possible color names. See http://www.idlcoyote.com/cg_tips/legcolor.php for a warning about the use of indexed color NSKIP = Integer specifying the error bars to be plotted. For example, if NSKIP = 2 then every other error bar is plotted; if NSKIP=3 then every third error bar is plotted. Default is to plot every error bar (NSKIP = 1) NSUM = Number of points to average over before plotting, default=!P.NSUM The errors are also averaged, and then divided by sqrt(NSUM). This approximation is meaningful only when the neighboring error bars have similar sizes. PLOTERROR does not pass the NSUM keyword to the PLOT command, but rather computes the binning itself using the FREBIN function. TRADITIONAL - If set to 0 then a black plot is drawn on a white background in the graphcis window. The default value is 1, giving the traditional black background for a graphics window. WINDOW - Set this keyword to plot to a resizeable graphics window Any valid keywords to the cgPLOT command (e.g. PSYM, YRANGE, AXISCOLOR SYMCOLOR, ASPECT) are also accepted by PLOTERROR via the _EXTRA facility. RESTRICTIONS: Arrays must not be of type string, and there must be at least 1 point. If only three parameters are input, they will be taken as X, Y and YERR respectively. PLOTERROR cannot be used for asymmetric error bars. Instead use OPLOTERROR with the /LOBAR and /HIBAR keywords. Any data points with NAN values in the X, Y, or error vectors are ignored. EXAMPLE: Suppose one has X and Y vectors with associated errors XERR and YERR (1) Plot Y vs. X with both X and Y errors and no lines connecting the points IDL> ploterror, x, y, xerr, yerr, psym=3 (2) Like (1) but plot only the Y errors bars and omits "hats" IDL> ploterror, x, y, yerr, psym=3, /NOHAT WARNING: This an enhanced version of the procedure PLOTERR in the standard IDL distribution. It was renamed from PLOTERR to PLOTERROR in June 1998 in the IDL Astronomy Library to avoid conflict with the RSI procedure. PROCEDURE: A plot of X versus Y with error bars drawn from Y - YERR to Y + YERR and optionally from X - XERR to X + XERR is written to the output device PROCEDURE CALLS: cgPlot, cgPlots FREBIN - used to compute binning if NSUM keyword is present MODIFICATION HISTORY: William Thompson Applied Research Corporation July, 1986 DMS, April, 1989 Modified for Unix Michael R. Greason ST Systems May, 1991 Added most of the plotting keywords, put hats on the error bars. K. Venkatakrishna Added option to plot xerr, May, 1992 Michael R. Greason Corrected handling of reversed axes. Aug. 1992 W. Landsman Use _EXTRA keyword July 1995 W. Landsman Plot more than 32767 points Feb 1996 W. Landsman Fix Y scaling when only XRANGE supplied Nov 1996 W. Landsman Added NSKIP keyword Dec 1996 W. Landsman Use XLOG, YLOG instead of XTYPE, YTYPE Jan 1998 W. Landsman Rename to PLOTERROR, OPLOTERROR Jun 1998 W. Landsman Better default scaling when NSKIP supplied Oct 1998 W. Landsman Ignore !P.PSYM when drawing error bars Jan 1999 W. Landsman Handle NSUM keyword correctly Aug 1999 W. Landsman Fix case of /XLOG but no X error bars Oct 1999 W. Landsman Work in the presence of NAN values Nov 2000 W. Landsman Improve logic when NSUM or !P.NSUM is set Jan 2001 W. Landsman Only draw error bars with in XRANGE (for speed) Jan 2002 W. Landsman Fix Jan 2002 update to work with log plots Jun 2002 W. Landsman Added _STRICT_EXTRA Jul 2005 W. Landsman/D.Nidever Fixed case of logarithmic axes reversed Mar 2009 W. Landsman/S. Koch Allow input to be a single point Jan 2010 W. Landsman Add Coyote Graphics Feb 2011 W. Landsman Make keyword name ERRCOLOR instead of ECOLOR Speedup when no ERRCOLOR defined Feb 2011 D. Fanning Use PLOTS instead of CGPLOTS for speed Jan 2012
(See $IDLUTILS_DIR/goddard/pro/plot/ploterror.pro)
PLOTHIST
NAME: PLOTHIST PURPOSE: Plot the histogram of an array with the corresponding abcissa. CALLING SEQUENCE: plothist, arr, xhist, yhist, [, BIN=, /FILL, /NOPLOT, /OVERPLOT, PEAK=, /AUTOBIN, ...plotting keywords] INPUTS: arr - The array to plot the histogram of. It can include negative values, but non-integral values will be truncated. OPTIONAL OUTPUTS: xhist - X vector used in making the plot ( = lindgen( N_elements(h)) * bin + min(arr) ) yhist - Y vector used in making the plot (= histogram(arr/bin)) OPTIONAL INPUT KEYWORDS: /AUTOBIN - Automatically determines bin size of the histogram as the square root of the number of samples. Only valid when BIN is not set. AXISCOLOR - Color (string or number) of the plotting axes. BIN - The size of each bin of the histogram, scalar (not necessarily integral). If not present (or zero), the bin size is set to 1. /BOXPLOT - If set, then each histogram data value will be plotted "box style" with vertical lines drawn from Y=0 at each end of the bin width COLOR - Color (number or string) of the plotted data. See CGCOLOR for a list of available color names. /HALFBIN - Set this keyword to a nonzero value to shift the binning by half a bin size. This is useful for integer data, where e.g. the bin for values of 6 will go from 5.5 to 6.5. The default is to set the HALFBIN keyword for integer data, and not for non-integer data. /NAN - If set, then check for the occurence of IEEE not-a-number values /NOPLOT - If set, will not plot the result. Useful if intention is to only get the xhist and yhist outputs. /OVERPLOT - If set, will overplot the data on the current plot. User must take care that only keywords valid for OPLOT are used. PEAK - if non-zero, then the entire histogram is normalized to have a maximum value equal to the value in PEAK. If PEAK is negative, the histogram is inverted. /FILL - if set, will plot a filled (rather than line) histogram. /ROTATE - if set, the plot is rotated onto it's side, meaning the bars extend from left to right. Xaxis corresponds to the count within in each bin. Useful for placing a histogram plot at the side of a scatter plot, as shown at the bottom of http://www.dur.ac.uk/j.r.mullaney/pages/software.php WINDOW - Set this keyword to plot to a resizeable graphics window The following keywords take effect only if the FILL keyword is set: FCOLOR - color (string or number) to use for filling the histogram /FLINE - if set, will use lines rather than solid color for fill (see the LINE_FILL keyword in the cgcolorfill routine) FORIENTATION - angle of lines for fill (see the ORIENTATION keyword in the cgcolorfill routine) FPATTERN - the pattern to use for the fill (see the PATTERN keyword in the cgcolorfill routine) FSPACING - the spacing of the lines to use in the fill (see the SPACING keyword in the cgcolorfill routine) FTHICK - the thickness of the lines to use in the fill (see the THICK keyword in the cgcolorfill routine) Any input keyword that can be supplied to the cgPLOT procedure (e.g. XRANGE, AXISCOLOR, LINESTYLE, /XLOG, /YLOG) can also be supplied to PLOTHIST. EXAMPLE: (1) Create a vector of random 1000 values derived from a Gaussian of mean 0, and sigma of 1. Plot the histogram of these values with a binsize of 0.1, and use a box plotting style. IDL> a = randomn(seed,1000) IDL> plothist,a, bin = 0.1, /boxplot (2) As before, but fill the plot with diagonal lines at a 45 degree angle IDL> plothist,a, bin=0.1, /fill, /fline, forient=45 NOTES: David Fanning has written a similar program HISTOPLOT with more graphics options: See http://www.idlcoyote.com/programs/histoplot.pro MODIFICATION HISTORY: Written W. Landsman January, 1991 Add inherited keywords W. Landsman March, 1994 Use ROUND instead of NINT W. Landsman August, 1995 Add NoPlot and Overplot keywords. J.Wm.Parker July, 1997 Add Peak keyword. J.Wm.Parker Jan, 1998 Add FILL,FCOLOR,FLINE,FPATTERN,FSPACING keywords. J.Wm.Parker Jan, 1998 Add /NAN keyword W. Landsman October 2001 Don't plot out of range with /FILL, added HALFBIN keyword, make half bin shift default for integer only W. Landsman/J. Kurk May 2002 Add BOXPLOT keyword, use exact XRANGE as default W.L. May 2006 Allow use of /XLOG and /YLOG keywords W.L. June 2006 Adjust Ymin when /YLOG is used W. L. Sep 2007 Added AXISCOLOR keyword, fix color problem with overplots WL Nov 2007 Check when /NAN is used and all elements are NAN S. Koposov Sep 2008 Added /ROTATE keyword to turn plot on its side. J. Mullaney, 2009. Added FTHICK keyword for thickness of fill lines. L. Anderson Oct. 2010 Use Coyote Graphics W. Landsman Feb 2011 Explicit XSTYLE, YSTYLE keywords to avoid _EXTRA confusion WL. Aug 2011 Fix PLOT keyword problem with /ROTATE WL Dec 2011
(See $IDLUTILS_DIR/goddard/pro/plot/plothist.pro)
PLOTSYM
NAME: PLOTSYM PURPOSE: Define useful plotting symbols not in the standard !PSYM definitions. EXPLANATION: After a symbol has been defined with PLOTSYM, a plotting command should follow with either PSYM = 8 or !P.PSYM = 8 (see USERSYM) For additional rotationally symmetric plotting symbols, see VSYM.PRO or http://www.idlcoyote.com/documents/programs.html#SYMCAT CALLING SEQUENCE: PLOTSYM, PSYM,[ PSIZE, /FILL, THICK=, COLOR=] INPUTS: PSYM - The following integer values of PSYM will create the corresponding plot symbols 0 - circle 1 - downward arrow (upper limit), base of arrow begins at plot value value 2 - upward arrow (lower limt) 3 - 5 pointed star 4 - triangle 5 - upside down triangle 6 - left pointing arrow 7 - right pointing arrow 8 - square Arrows are defined such that their base begins at their origin. OPTIONAL INPUTS: PSIZE - Size of the plotting symbol in multiples of the default size (default PSIZE=1). Does not need to be an integer OPTIONAL INPUT KEYWORD: FILL - Parameter indicating whether to fill the symbol (see USERSYM) The default is 0, unfilled symbol. Does not affect arrows or character symbols. THICK - Thickness of unfilled symbols. Default is 1. COLOR - Color of the symbols, Default is !P.color OUTPUTS: None EXAMPLES: Plot Y vs. X with filled stars as the symbol, twice the default size IDL> PLOTSYM, 3 ,2, /FILL ;Plotting symbol is a filled star, ;twice default size IDL> PLOT,X,Y,PSYM=8 ;Set PSYM = 8 to get star symbol Now plot Y vs. X with an open circle as the symbol IDL> PLOTSYM, 0 ;Plotting symbol is a circle IDL> PLOT,X,Y,PSYM=8 METHOD: Appropriate X,Y vectors are used to define the symbol and passed to the USERSYM command. REVISION HISTORY Written W. Landsman June 1992 18-JAN-1996 Added a square symbol, HCW. 98Aug20 Added keyword thick parameter - RCB. April 2001 Added COLOR keyword WBL
(See $IDLUTILS_DIR/goddard/pro/plot/plotsym.pro)
POIDEV
NAME: POIDEV PURPOSE: Generate a Poisson random deviate EXPLANATION: Return an integer random deviate drawn from a Poisson distribution with a specified mean. Adapted from procedure of the same name in "Numerical Recipes" by Press et al. (1992), Section 7.3 NOTE: This routine became partially obsolete in V5.0 with the introduction of the POISSON keyword to the intrinsic functions RANDOMU and RANDOMN. However, POIDEV is still useful for adding Poisson noise to an existing image array, for which the coding is much simpler than it would be using RANDOMU (see example 1) CALLING SEQUENCE: result = POIDEV( xm, [ SEED = ] ) INPUTS: xm - numeric scalar, vector or array, specifying the mean(s) of the Poisson distribution OUTPUT: result - Long integer scalar or vector, same size as xm OPTIONAL KEYWORD INPUT-OUTPUT: SEED - Scalar to be used as the seed for the random distribution. For best results, SEED should be a large (>100) integer. If SEED is undefined, then its value is taken from the system clock (see RANDOMU). The value of SEED is always updated upon output. This keyword can be used to have POIDEV give identical results on consecutive runs. EXAMPLE: (1) Add Poisson noise to an integral image array, im IDL> imnoise = POIDEV( im) (2) Verify the expected mean and sigma for an input value of 81 IDL> p = POIDEV( intarr(10000) + 81) ;Test for 10,000 points IDL> print,mean(p),sigma(p) Mean and sigma of the 10000 points should be close to 81 and 9 METHOD: For small values (< 20) independent exponential deviates are generated until their sum exceeds the specified mean, the number of events required is returned as the Poisson deviate. For large (> 20) values, uniform random variates are compared with a Lorentzian distribution function. NOTES: Negative values in the input array will be returned as zeros. REVISION HISTORY: Version 1 Wayne Landsman July 1992 Added SEED keyword September 1992 Call intrinsic LNGAMMA function November 1994 Converted to IDL V5.0 W. Landsman September 1997 Use COMPLEMENT keyword to WHERE() W. Landsman August 2008
(See $IDLUTILS_DIR/goddard/pro/math/poidev.pro)
POLINT
NAME: POLINT PURPOSE: Interpolate a set of N points by fitting a polynomial of degree N-1 EXPLANATION: Adapted from algorithm in Numerical Recipes, Press et al. (1992), Section 3.1. CALLING SEQUENCE POLINT, xa, ya, x, y, [ dy ] INPUTS: XA - X Numeric vector, all values must be distinct. The number of values in XA should rarely exceed 10 (i.e. a 9th order polynomial) YA - Y Numeric vector, same number of elements X - Numeric scalar specifying value to be interpolated OUTPUT: Y - Scalar, interpolated value in (XA,YA) corresponding to X OPTIONAL OUTPUT DY - Error estimate on Y, scalar EXAMPLE: Find sin(2.5) by polynomial interpolation on sin(indgen(10)) IDL> xa = indgen(10) IDL> ya = sin( xa ) IDL> polint, xa, ya, 2.5, y ,dy The above method gives y = .5988 & dy = 3.1e-4 a close approximation to the actual sin(2.5) = .5985 METHOD: Uses Neville's algorithm to iteratively build up the correct polynomial, with each iteration containing one higher order. REVISION HISTORY: Written W. Landsman January, 1992 Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/math/polint.pro)
POLREC
NAME: POLREC PURPOSE: Convert 2-d polar coordinates to rectangular coordinates. CATEGORY: CALLING SEQUENCE: polrec, r, a, x, y INPUTS: r, a = vector in polar form: radius, angle (radians). in KEYWORD PARAMETERS: Keywords: /DEGREES means angle is in degrees, else radians. OUTPUTS: x, y = vector in rectangular form, double precision out COMMON BLOCKS: NOTES: MODIFICATION HISTORY: R. Sterner. 18 Aug, 1986. Johns Hopkins University Applied Physics Laboratory. RES 13 Feb, 1991 --- added /degrees. Converted to IDL V5.0 W. Landsman September 1997 1999 May 03 --- Made double precision. R. Sterner. Copyright (C) 1986, 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 $IDLUTILS_DIR/goddard/pro/jhuapl/polrec.pro)
POLYLEG
NAME: POLYLEG PURPOSE: Evaluate a Legendre polynomial with specified coefficients. EXPLANATION: Meant to be used analogously to the POLY function in the IDL User's Library distribution. CALLING SEQUENCE: Result = POLYLEG( X, C ) INPUTS: X - input variable, scalar or vector C - vector of Legendre polynomial coefficients. OUTPUTS: POLYLEG returns a result equal to: C[0] + C[1]*P_1(x) + C[2]*P_2(x) + ... where P_j(x) is the jth Legendre polynomial. The output will have the same dimensions as the input X variable. EXAMPLE: If x = [0.5, 1.0] and C = [2.4, 1.3, 2.5] then print, polyleg(x, c) ====> [2.7375, 6.20] The result can be checked using the first 3 Legendre polynomial terms C[0] + C[1]*x + C[2]*(0.5*(3*x^2-1)) METHOD: Uses the recurrence relation of Legendre polynomials (n+1)*P_n+1(x) = (2n+1)*x*P_n(x) - n*P_n-1(x) evaluated with the Clenshaw recurrence formula, see Numerical Recipes by Press et al. (1992), Section 5.5 REVISION HISTORY: Written W. Landsman Hughes STX Co. April, 1995 Fixed for double precision W. Landsman May, 1997 Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/math/polyleg.pro)
POLY_SMOOTH
NAME: POLY_SMOOTH PURPOSE: Apply a least-squares (Savitzky-Golay) polynomial smoothing filter EXPLANATION: Reduce noise in 1-D data (e.g. time-series, spectrum) but retain dynamic range of variations in the data by applying a least squares smoothing polynomial filter, Also called the Savitzky-Golay smoothing filter, cf. Numerical Recipes (Press et al. 1992, Sec.14.8) The low-pass filter coefficients are computed by effectively least-squares fitting a polynomial in moving window, centered on each data point, so the new value will be the zero-th coefficient of the polynomial. Approximate first derivates of the data can be computed by using first degree coefficient of each polynomial, and so on. The filter coefficients for a specified polynomial degree and window width are computed independent of any data, and stored in a common block. The filter is then convolved with the data array to result in smoothed data with reduced noise, but retaining higher order variations (better than SMOOTH). This procedure became partially obsolete in IDL V5.4 with the introduction of the SAVGOL function, which computes the smoothing coefficients. CALLING SEQUENCE: spectrum = poly_smooth( data, [ width, DEGREE = , NLEFT = , NRIGHT = DERIV_ORDER = ,COEFF = ] INPUTS: data = 1-D array, such as a spectrum or time-series. width = total number of data points to use in filter convolution, (default = 5, using 2 past and 2 future data points), must be larger than DEGREE of polynomials, and a guideline is to make WIDTH between 1 and 2 times the FWHM of desired features. OPTIONAL INPUT KEYWORDS: DEGREE = degree of polynomials to use in designing the filter via least squares fits, (default DEGREE = 2) The higher degrees will preserve sharper features. NLEFT = # of past data points to use in filter convolution, excluding current point, overrides width parameter, so that width = NLEFT + NRIGHT + 1. (default = NRIGHT) NRIGHT = # of future data points to use (default = NLEFT). DERIV_ORDER = order of derivative desired (default = 0, no derivative). OPTIONAL OUTPUT KEYWORD: COEFFICIENTS = optional output of the filter coefficients applied, but they are all stored in common block for reuse, anyway. RESULTS: Function returns the data convolved with polynomial filter coefs. EXAMPLE: Given a wavelength - flux spectrum (w,f), apply a 31 point quadratic smoothing filter and plot IDL> cgplot, w, poly_smooth(f,31) COMMON BLOCKS: common poly_smooth, degc, nlc, nrc, coefs, ordermax PROCEDURE: As described in Numerical Recipies, 2nd edition sec.14.8, Savitsky-Golay filter. Matrix of normal eqs. is formed by starting with small terms and then adding progressively larger terms (powers). The filter coefficients of up to derivative ordermax are stored in common, until the specifications change, then recompute coefficients. Coefficients are stored in convolution order, zero lag in the middle. MODIFICATION HISTORY: Written, Frank Varosi NASA/GSFC 1993. Converted to IDL V5.0 W. Landsman September 1997 Use /EDGE_TRUNCATE keyword to CONVOL W. Landsman March 2006
(See $IDLUTILS_DIR/goddard/pro/math/poly_smooth.pro)
POSANG
NAME: POSANG PURPOSE: Computes rigorous position angle of source 2 relative to source 1 EXPLANATION: Computes the rigorous position angle of source 2 (with given RA, Dec) using source 1 (with given RA, Dec) as the center. CALLING SEQUENCE: POSANG, U, RA1, DC1, RA2, DC2, ANGLE INPUTS: U -- Describes units of inputs and output: 0: everything radians 1: RAx in decimal hours, DCx in decimal degrees, ANGLE in degrees RA1 -- Right ascension of point 1 DC1 -- Declination of point 1 RA2 -- Right ascension of point 2 DC2 -- Declination of point 2 OUTPUTS: ANGLE-- Angle of the great circle containing [ra2, dc2] from the meridian containing [ra1, dc1], in the sense north through east rotating about [ra1, dc1]. See U above for units. PROCEDURE: The "four-parts formula" from spherical trig (p. 12 of Smart's Spherical Astronomy or p. 12 of Green' Spherical Astronomy). EXAMPLE: For the star 56 Per, the Hipparcos catalog gives a position of RA = 66.15593384, Dec = 33.94988843 for component A, and RA = 66.15646079, Dec = 33.96100069 for component B. What is the position angle of B relative to A? IDL> RA1 = 66.15593384/15.d & DC1 = 33.95988843 IDL> RA2 = 66.15646079/15.d & DC2 = 33.96100069 IDL> posang,1,ra1,dc1,ra2,dc2, ang will give the answer of ang = 21.4 degrees NOTES: (1) If RA1,DC1 are scalars, and RA2,DC2 are vectors, then ANGLE is a vector giving the position angle between each element of RA2,DC2 and RA1,DC1. Similarly, if RA1,DC1 are vectors, and RA2, DC2 are scalars, then DIS is a vector giving the position angle of each element of RA1, DC1 and RA2, DC2. If both RA1,DC1 and RA2,DC2 are vectors then ANGLE is a vector giving the position angle between each element of RA1,DC1 and the corresponding element of RA2,DC2. If then vectors are not the same length, then excess elements of the longer one will be ignored. (2) Note that POSANG is not commutative -- the position angle between A and B is theta, then the position angle between B and A is 180+theta PROCEDURE CALLS: ISARRAY() HISTORY: Modified from GCIRC, R. S. Hill, RSTX, 1 Apr. 1998 Use V6.0 notation W.L. Mar 2011
(See $IDLUTILS_DIR/goddard/pro/astro/posang.pro)
POSITIVITY
NAME: POSITIVITY PURPOSE: Map an image uniquely and smoothly into all positive values. EXPLANATION: Take unconstrained x (usually an image), and map it uniquely and smoothly into positive values. Negative values of x get mapped to interval ( 0, sqrt( epsilon )/2 ], positive values go to ( sqrt( epsilon )/2, oo ) with deriv approaching 1. Derivative is always 1/2 at x=0. Derivative is used by the MRL deconvolution algorithm. CALLING SEQUENCE: result = POSITIVITY( x, [ /DERIVATIVE, EPSILON = ) INPUTS: x - input array, unconstrained OUTPUT: result = output array = ((x + sqrt(x^2 + epsilon))/2 if the /DERIV keyword is set then instead the derivative of the above expression with respect to X is returned OPTIONAL INPUT KEYWORDS: DERIV - if this keyword set, then the derivative of the positivity mapping is returned, rather than the mapping itself EPSILON - real scalar specifying the interval into which to map negative values. If EPSILON EQ 0 then the mapping reduces to positive truncation. If EPSILON LT then the mapping reduces to an identity (no change). Default is EPSILON = 1e-9 REVISION HISTORY: F.Varosi NASA/GSFC 1992, as suggested by R.Pina UCSD. Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/image/positivity.pro)
PRECESS
NAME: PRECESS PURPOSE: Precess coordinates from EQUINOX1 to EQUINOX2. EXPLANATION: For interactive display, one can use the procedure ASTRO which calls PRECESS or use the /PRINT keyword. The default (RA,DEC) system is FK5 based on epoch J2000.0 but FK4 based on B1950.0 is available via the /FK4 keyword. Use BPRECESS and JPRECESS to convert between FK4 and FK5 systems CALLING SEQUENCE: PRECESS, ra, dec, [ equinox1, equinox2, /PRINT, /FK4, /RADIAN ] INPUT - OUTPUT: RA - Input right ascension (scalar or vector) in DEGREES, unless the /RADIAN keyword is set DEC - Input declination in DEGREES (scalar or vector), unless the /RADIAN keyword is set The input RA and DEC are modified by PRECESS to give the values after precession. OPTIONAL INPUTS: EQUINOX1 - Original equinox of coordinates, numeric scalar. If omitted, then PRECESS will query for EQUINOX1 and EQUINOX2. EQUINOX2 - Equinox of precessed coordinates. OPTIONAL INPUT KEYWORDS: /PRINT - If this keyword is set and non-zero, then the precessed coordinates are displayed at the terminal. Cannot be used with the /RADIAN keyword /FK4 - If this keyword is set and non-zero, the FK4 (B1950.0) system will be used otherwise FK5 (J2000.0) will be used instead. /RADIAN - If this keyword is set and non-zero, then the input and output RA and DEC vectors are in radians rather than degrees RESTRICTIONS: Accuracy of precession decreases for declination values near 90 degrees. PRECESS should not be used more than 2.5 centuries from 2000 on the FK5 system (1950.0 on the FK4 system). EXAMPLES: (1) The Pole Star has J2000.0 coordinates (2h, 31m, 46.3s, 89d 15' 50.6"); compute its coordinates at J1985.0 IDL> precess, ten(2,31,46.3)*15, ten(89,15,50.6), 2000, 1985, /PRINT ====> 2h 16m 22.73s, 89d 11' 47.3" (2) Precess the B1950 coordinates of Eps Ind (RA = 21h 59m,33.053s, DEC = (-56d, 59', 33.053") to equinox B1975. IDL> ra = ten(21, 59, 33.053)*15 IDL> dec = ten(-56, 59, 33.053) IDL> precess, ra, dec ,1950, 1975, /fk4 PROCEDURE: Algorithm from Computational Spherical Astronomy by Taff (1983), p. 24. (FK4). FK5 constants from "Astronomical Almanac Explanatory Supplement 1992, page 104 Table 3.211.1. PROCEDURE CALLED: Function PREMAT - computes precession matrix REVISION HISTORY Written, Wayne Landsman, STI Corporation August 1986 Correct negative output RA values February 1989 Added /PRINT keyword W. Landsman November, 1991 Provided FK5 (J2000.0) I. Freedman January 1994 Precession Matrix computation now in PREMAT W. Landsman June 1994 Added /RADIAN keyword W. Landsman June 1997 Converted to IDL V5.0 W. Landsman September 1997 Correct negative output RA values when /RADIAN used March 1999 Work for arrays, not just vectors W. Landsman September 2003
(See $IDLUTILS_DIR/goddard/pro/astro/precess.pro)
PRECESS_CD
NAME: PRECESS_CD PURPOSE: Precess the CD (coordinate description) matrix from a FITS header EXPLANATION: The CD matrix is precessed from EPOCH1 to EPOCH2. Called by HPRECESS CALLING SEQUENCE: PRECESS_CD, cd, epoch1, epoch2, crval_old, crval_new, [/FK4] INPUTS/OUTPUT: CD - 2 x 2 CD (coordinate description) matrix in any units (degrees or radians). CD will altered on output to contain precessed values in the same units. On output CD will always be double precision no matter how input. INPUTS: EPOCH1 - Original equinox of coordinates, scalar (e.g. 1950.0). EPOCH2 - Equinox of precessed coordinates, scalar (e.g. 2000.0) CRVAL_OLD - 2 element vector containing RA and DEC in DEGREES of the reference pixel in the original equinox CRVAL_NEW - 2 elements vector giving CRVAL in the new equinox INPUT KEYWORD: /FK4 - If this keyword is set, then the precession constants are taken in the FK4 reference frame. The default is the FK5 frame. RESTRICTIONS: PRECESS_CD should not be used more than 2.5 centuries from the year 1900. PROCEDURE: Adapted from the STSDAS program FMATPREC. Precession changes the location of the north pole, and thus changes the rotation of an image from north up. This is reflected in the precession of the CD matrix. This is usually a very small change. PROCEDURE CALLS: PRECESS REVISION HISTORY: Written, Wayne Landsman, ST Systems February 1988 Fixed sign error in computation of SINRA March 1992 Added /FK4 keyword Feb 1994 Converted to IDL V5.0 W. Landsman September 1997 Use B/Jprecess for conversion between 1950 and 2000 W.L. Aug 2009
(See $IDLUTILS_DIR/goddard/pro/astro/precess_cd.pro)
PRECESS_XYZ
NAME: PRECESS_XYZ PURPOSE: Precess equatorial geocentric rectangular coordinates. CALLING SEQUENCE: precess_xyz, x, y, z, equinox1, equinox2 INPUT/OUTPUT: x,y,z: scalars or vectors giving heliocentric rectangular coordinates THESE ARE CHANGED UPON RETURNING. INPUT: EQUINOX1: equinox of input coordinates, numeric scalar EQUINOX2: equinox of output coordinates, numeric scalar OUTPUT: x,y,z are changed upon return NOTES: The equatorial geocentric rectangular coords are converted to RA and Dec, precessed in the normal way, then changed back to x, y and z using unit vectors. EXAMPLE: Precess 1950 equinox coords x, y and z to 2000. IDL> precess_xyz,x,y,z, 1950, 2000 HISTORY: Written by P. Plait/ACC March 24 1999 (unit vectors provided by D. Lindler) Use /Radian call to PRECESS W. Landsman November 2000 Use two parameter call to ATAN W. Landsman June 2001
(See $IDLUTILS_DIR/goddard/pro/astro/precess_xyz.pro)
PREMAT
NAME: PREMAT PURPOSE: Return the precession matrix needed to go from EQUINOX1 to EQUINOX2. EXPLANTION: This matrix is used by the procedures PRECESS and BARYVEL to precess astronomical coordinates CALLING SEQUENCE: matrix = PREMAT( equinox1, equinox2, [ /FK4 ] ) INPUTS: EQUINOX1 - Original equinox of coordinates, numeric scalar. EQUINOX2 - Equinox of precessed coordinates. OUTPUT: matrix - double precision 3 x 3 precession matrix, used to precess equatorial rectangular coordinates OPTIONAL INPUT KEYWORDS: /FK4 - If this keyword is set, the FK4 (B1950.0) system precession angles are used to compute the precession matrix. The default is to use FK5 (J2000.0) precession angles EXAMPLES: Return the precession matrix from 1950.0 to 1975.0 in the FK4 system IDL> matrix = PREMAT( 1950.0, 1975.0, /FK4) PROCEDURE: FK4 constants from "Computational Spherical Astronomy" by Taff (1983), p. 24. (FK4). FK5 constants from "Astronomical Almanac Explanatory Supplement 1992, page 104 Table 3.211.1. REVISION HISTORY Written, Wayne Landsman, HSTX Corporation, June 1994 Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/astro/premat.pro)
PRIME
NAME: PRIME PURPOSE: Return an array with the specified number of prime numbers. EXPLANATATION: This procedure is similar to PRIMES in the standard IDL distribution, but stores results in a common block, and so is much faster CALLING SEQUENCE: p = prime(n) INPUTS: n = desired number of primes, scalar positive integer OUTPUTS: p = resulting array of primes, vector of positive integers COMMON BLOCKS: prime_com NOTES: Note: Primes that have been found in previous calls are remembered and are not regenerated. MODIFICATION HISTORY: R. Sterner 17 Oct, 1985. R. Sterner, 5 Feb, 1993 --- fixed a bug that missed a few primes. Converted to IDL V5 March 1999 Copyright (C) 1985, 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 $IDLUTILS_DIR/goddard/pro/jhuapl/prime.pro)
PRINT_STRUCT
NAME: PRINT_STRUCT PURPOSE: Print the tag values of an array of structures in nice column format. EXPLANATION: The tag names are displayed in a header line. CALLING SEQUENCE: print_struct, structure, Tags_to_print [ , title, string_matrix FILE=, LUN_OUT=, TNUMS= , TRANGE= , FRANGE=, WHICH= FORM_FLOAT =, MAX_ELEMENTS INPUTS: structure = array of structured variables Tags_to_print = string array specifying the names of tags to print. Default is to print all tags which are not arrays. OPTIONAL INPUT KEYWORDS: FILE = string, optional file name to which output will then be written. LUN_OUT = Logical unit number for output to an open file, default is to print to standard output. TNUMS = tag numbers to print (alternative to specifying tag names). TRANGE = [beg,end] tag number range to print. FRANGE = same as TRANGE. WHICH = optional array of subscripts to select which structure elements to print. FORM_FLOAT = string array of three elements specifying floating point format, ex: FORM=['f','9','2'] means "(F9.2)", (default float format is G12.4). MAX_ELEMENTS = positive integer, print only tags that have less than this number of elements (default is no screening). /NO_TITLE - If set, then the header line of tag names is not printed /STRINGS : instead of printing, return the array of strings in fourth argument of procedure: string_matrix. OUTPUTS: title = optional string, list of tags printed/processed. string_matrix = optional output of string matrix of tag values, instead of printing to terminal or file, if /STRINGS. PROCEDURE: Check the types and lengths of fields to decide formats, then loop and form text string from requested fields, then print. HISTORY: Written: Frank Varosi NASA/GSFC 1991. F.V.1993, fixed up the print formats. F.V.1994, added more keyword options. F.V.1997, added WHICH and MAX_ELEM keyword options. WBL 1997, Use UNIQ() rather than UNIQUE function Remove call to N_STRUCT() W. Landsman March 2004 Avoid overflow with more than 10000 elements W. Landsman Nov 2005 Really remove call to N_STRUCT() W. Landsman July 2009
(See $IDLUTILS_DIR/goddard/pro/structure/print_struct.pro)
PROB_KS
NAME: PROB_KS PURPOSE: Return the significance of the Kolmogoroff-Smirnov statistic EXPLANATION: Returns the significance level of an observed value of the Kolmogorov-Smirnov statistic D for an effective number of data points N_eff. Called by KSONE and KSTWO CALLING SEQUENCE: prob_ks, D, N_eff, probks INPUT PARAMATERS: D - Kolmogorov statistic, floating scalar, always non-negative N_eff - Effective number of data points, scalar. For a 2 sided test this is given by (N1*N2)/(N1+N2) where N1 and N2 are the number of points in each data set. OUTPUT PARAMETERS: probks - floating scalar between 0 and 1 giving the significance level of the K-S statistic. Small values of PROB suggest that the distribution being tested are not the same REVISION HISTORY: Written W. Landsman August, 1992 Corrected typo (termbv for termbf) H. Ebeling/W.Landsman March 1996 Probably did not affect numeric result, but iteration went longer than necessary Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/math/prob_ks.pro)
PROB_KUIPER
NAME: PROB_KUIPER PURPOSE: Return the significance of the Kuiper statistic EXPLANATION: Returns the significance level of an observed value of the Kuiper statistic D for an effective number of data points N_eff. Called by KUIPERONE CALLING SEQUENCE: prob_kuiper, D, N_eff, probks INPUT PARAMATERS: D - Kuiper statistic, floating scalar, always non-negative N_eff - Effective number of data points, scalar. For a 2 sided test this is given by (N1*N2)/(N1+N2) where N1 and N2 are the number of points in each data set. OUTPUT PARAMETERS: probks - floating scalar between 0 and 1 giving the significance level of the Kuiper statistic. Small values of PROB suggest that the distribution being tested are not the same REVISION HISTORY: Written W. Landsman August, 1992 Corrected typo (termbv for termbf) H. Ebeling/W.Landsman March 1996 Probably did not affect numeric result, but iteration went longer than necessary Converted to IDL V5.0 W. Landsman September 1997 Adapted from PROB_KS J. Ballet July 2003
(See $IDLUTILS_DIR/goddard/pro/math/prob_kuiper.pro)
PROGRAMROOTDIR
NAME: ProgramRootDir PURPOSE: The purpose of this function is to provide a portable way of finding the root directory of a program distribution. The directory that is returned is the directory in which the source file using ProgramRootDir resides. The program is useful for distributing applications that have a large number of files in specific program directories. AUTHOR: FANNING SOFTWARE CONSULTING 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com SYNTAX: theDirectory = ProgramRootDir() RETURN_VALUE: theDirectory: The directory in which the program module running ProgramRootDir resides. ARGUMENTS: None. KEYWORDS: NOMARK: Normally, the directory that is returned contains a path separator at its end, so that the directory can easily be concatinated with other file names. If this keyword is set, the final path separator mark is removed from the directory name. ONEUP: Set this keyword if you want to start your search one directory *above* where your source program resides (i.e., "../Source"). This allows you, for example, to put your source files in a Source directory that it at the same level as your Data directory, Utility directory, etc. See the example below. TWOUP: Set this keyword if you want to start your search two directories *above* where your source program resides (i.e., "../../Source"). EXAMPLE: Assume that your application files (and source programs) reside in this root directory: ../app You have placed a DATA directory immediately under the APP directiory, and a RESOURCES directory immedately under the DATA directory. Your directory structure looks like this: ../app ; Contains your application and source (*.pro) files. ../app/data ; Contains your application data files. ...app/data/resources ; Contains your application resource files. The end user can install the APP directory wherever he or she likes. In your program, you will identify the DATA and RESOURCES directory like this: ; Get icon image in resources directory. filename = Filepath(Root_Dir=ProgramRootDir(), Subdirectory=['data','resources'], 'myicon.tif') ; Get default image in data directory. filename = Filepath(Root_Dir=ProgramRootDir(), Subdirectory='data', 'ctscan.tif') Alternatively, you might set up an application directory structure like this: ../app ; Contains your application files. ../app/source ; Contains your application source (*.pro) files. ../app/data ; Contains your application data files. ...app/data/resources ; Contains your application resource files. In this case, you would use the ONEUP keyword to find your data and resource files, like this: ; Get icon image in resources directory. filename = Filepath(Root_Dir=ProgramRootDir(/ONEUP), Subdirectory=['data','resources'], 'myicon.tif') ; Get default image in data directory. filename = Filepath(Root_Dir=ProgramRootDir(/ONEUP), Subdirectory='data', 'ctscan.tif') MODIFICATION_HISTORY: Written by: David W. Fanning, 23 November 2003. Based on program SOURCEROOT, written by Jim Pendleton at RSI (http://www.rsinc.com/codebank/search.aspx?FID=35). Added ONEUP keyword. 10 December 2003. DWF. Added TWOUP keyword. 8 June 2007. DWF. Added NOMARK keyword. 8 June 2007. DWF.
(See $IDLUTILS_DIR/goddard/pro/coyote/programrootdir.pro)
PSCONFIG
The purpose of this program is to allow the user to configure the PostScript device with or without a graphical user interface. This function is essentially a simplified wrapper to the FSC_PSConfig object, which provides a powerful graphical user interface for configuring the IDL PostScript device. :Categories: Utilities, Graphics :Returns: A structure of keywords, appropriate for configuring the PostScript device, is returned. These keywords are generally passed to the PostScript device by means of keyword inheritance:: keywords = PSConfig() ; Obtain PostScript keywords Set_Plot, 'PS' ; Select the PostScript device Device, _Extra=keywords ; Configure the PostScript device with keywords :Params: psobject: in, optional, type=object An FSC_PSCONFIG object reference of the sort returned by this function can be passed as an argument to the function. It is up to the user to destroy the object if passed as an argument. Passing an object argument essentially by-passes the rest of the keywords and the GUI will take its initial values from the values in the input object. This allows the programmer to keep track of how the user last configured the GUI and to set it up in exactly the same way the next time the GUI is invoked. :Keywords: AvantGarde: in, optional, type=boolean, default=0 Set this keyword to select the AvantGarde PostScript font. Bits_per_Pixel: in, optional, type=integer, default=8 The number of image bits saved for each image pixel: 2, 4, or 8. Bold: in, optional, type=boolean, default=0 Set this keyword to select a bold PostScript font. BookStyle: in, optional, type=boolean, default=0 Set this keyword to specify that the book version of the current PostScript font should be used. Bkman: in, optional, type=boolean, default=0 Set this keyword to select the Bookman PostScript font. Cancel: out, optional, type=boolean, default=0 If this keyword is set to 1, the user hit the Cancel button in the GUI. CMYK: in, optional, type=boolean, default=0 Set this keyword to use CMYK colors instead of RGB colors in the output. Color: in, optional, type=boolean, default=1 Set this keyword to 1 to select color or gray-scale output. Courier: in, optional, type=boolean, default=0 Set this keyword to select the Courier font. Debug: in, optional, type=boolean, default=0 Set this keyword to get traceback information when errors are encountered. Decomposed: in, optional, type=boolean, default=0 Set this keyword to turn on 24-bit color support. Set to zero to select indexed color support. Applies only to IDL versions 7.1 and higher. DefaultSetup: in, optional, type=structure Set this keyword to the "name" of a default style. Current styles (you can easily create and add your own to the source code) are the following:: "System (Portrait)" - The normal "default" system set-up. Also, "System". "System (Landcape)" - The normal "default" landscape system set-up. "Centered (Portrait)" - The window centered on the page. Also, "Center" or "Centered". "Centered (Landscape)" - The window centered on the landscape page. Also, "Landscape". "Square (Portrait)" - A square plot, centered on the page. "Square (Landscape)" - A square plot, centered on the landscape page. "Figure (Small)" - A small encapsulated figure size, centered on page. Also, "Encapsulated" or "Encapsulate". "Figure (Large)" - A larger encapsulated figure size, centered on page. Also, "Figure". "Color (Portrait)" - A "centered" plot, with color turned on. Also, "Color". "Color (Landscape)" - A "centered" landscape plot, with color turned on. Demi: in, optional, type=boolean, default=0 Set this keyword to select the Demi font style. Directory: in, optional, type=string Set this keyword to the name of the starting directory. The current directory is used by default. Encapsulated: in, optional, type=boolean, default=0 Set this keyword to 1 to select Encapsulated PostScript output. European: in, optional This keyword is depreciated in favor or `Metric`. Filename: in, optional, type=string, default='idl.ps' Set this keyword to the name of the PostScript file you wish to create. FontInfo: in, optional, type=boolean, default=0 Set this keyword if you wish to see font information in the GUI interface. Since font information has to be interpreted to be used, most users prefer not to see this information on the GUI. FontSize: in, optional, type=integer, default=12 Set this keyword to the desired font size. Values should be between 6 and 32. FontType: out, optional, type=integer This keyword is both an input and an output keyword. It allows you to specify the font type you wish to use, and it also returns the font type the user selected in the GUI. The user is responsibe for configuring the PostScript graphical commands with the appropriate font type, because it cannot be done via the normal Device keyword channel. Normally, this is set to !P.Font. Group_Leader: in, optional, type=long Set this keyword to the identifer of a widget group leader. This program will be destroyed if the group leader application is destroyed. Helvetica: in, optional, type=boolean, default=0 Set this keyword to select the Helvetica PostScript font. Inches: in, optional, type=boolean, default=1 Set this keyword to indicate sizes and offsets are in inches as opposed to centimeters. Set to zero by default if the `Metric` keyword is set. Italic: in, optional, type=boolean, default=0 Set this keyword to select italic type font styling. Isolatin: in, optional, type=boolean, default=0 Set this keyword to select ISOlatin1 encoding. Landscape: in, optional, type=boolean, default=0 Set this keyword to select Landscape page output. Portrait page output is the default. Light: in, optional, type=boolean, default=0 Set this keyword to select the Light PostScript style for the font. Match: in, optional, type=boolean, default=0 If this keyword is set, the initial PostScript window will match the aspect ratio of the current graphics window. Medium: in, optional, type=boolean, default=0 Set this keyword to select the Medium PostScript style for the font. Metric: in, optional, type=boolean, default=0 Set this keyword to indicate metric mode (i.e., A4 page and centimeter units). Name: in, optional, type=string Set this keyword to the "name" of the created FSC_PSConfig object. Narrow: in, optional, type=boolean, default=0 Set this keyword to select the Narrow font style. NoGUI: in, optional, type=boolean, default=0 Set this keyword if you don't want a graphical user interface, but just want to get the return structure of keywords. Oblique: in, optional, type=boolean, default=0 Set this keyword to select the Oblique font style. PageType: in, optional, type=string, default='LETTER' Set this keyword to the "type" of page. Possible values are:: "Letter" - 8.5 by 11 inches. (Default, unless the Metric keyword is set.) "Legal" - 8.5 by 14 inches. "Ledger" - 11 by 17 inches. "A4" - 21.0 by 29.7 centimeters. (Default, if the Metric keyword is set.) Palatino: in, optional, type=boolean, default=0 Set this keyword to select the Palatino font. Preview: in, optional, type=integer, default=0 Set this keyword to select the type of PostScript preview to add to the file. Values 0, 1, or 2. Adding previews to PostScript files created in IDL is not recommended as the results are always poor. There are better methods to add PostScript previews using other software, such as GhostView. Schoolbook: in, optional, type=boolean, default=0 Set this keyword to select the Schoolbook PostScript font. Set_Font: in, optional, type=string Set this keyword to the name of a PostScript hardware or true-type font you want to use. Note that if you specify a true-type font, you must also set the `TrueType` keyword. Symbol: in, optional, type=boolean, default=0 Set this keyword to select the Symbol PostScript font. Times: in, optional, type=boolean, default=0 Set this keyword to select the Times PostScript font. TrueType: in, optional, type=boolean, default=0 Set this keyword to use true-type fonts in the PostScript output. Set the name of the font with the `Set_Font` keyword. XOffset: in, optional, type=float Set this keyword to the X Offset. Uses "System (Portrait)" defaults. (Note: offset calculated from lower-left corner of page.) XSize: in, optional, type=float Set this keyword to the X size of the PostScript "window". Uses "System (Portrait)" defaults. YOffset: in, optional, type=float Set this keyword to the Y Offset. Uses "System (Portrait)" defaults. (Note: offset calculated from lower-left corner of page.) YSize: in, optional, type=float Set this keyword to the Y size of the PostScript "window". Uses "System (Portrait)" defaults. ZapfChancery: in, optional, type=boolean, default=0 Set this keyword to select the ZapfChancery PostScript font. ZapfDingbats: in, optional, type=boolean, default=0 Set this keyword to select the ZapfDingbats PostScript font. :Examples: To have the user specify PostScript configuration parameters, use the program like this:: keywords = PSConfig(Cancel=cancelled) IF cancelled THEN RETURN thisDevice = !D.Name Set_Plot, 'PS' Device, _Extra=keywords Plot, findgen(11) ; Or whatever graphics commands you use. Device, /Close_File Set_Plot, thisDevice :Author: FANNING SOFTWARE CONSULTING:: David W. Fanning 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com :History: Change History:: Written by David W. Fanning, 31 January 2000. Added NOGUI keyword to allow default keywords to be obtained without user interaction. 11 Oct 2004. DWF. Added CMYK option 24 August 2007. Requires LANGUAGE_LEVEL=2 printer. L. Anderson Updated for IDL 7.1 and 24-bt color PostScript support. 24 May 2009. DWF. Added MATCH keyword. 14 Dec 2010. DWF. Changed ENCAPSULATE keyword to ENCAPSULATED, which is what I always type! 29 Jan 2011. DWF. Depreciated EUROPEAN keyword in favor of METRIC. 31 Jan 2011. DWF. :Copyright: Copyright (c) 2000-2012, Fanning Software Consulting, Inc.
(See $IDLUTILS_DIR/goddard/pro/coyote/psconfig.pro)
PSF_GAUSSIAN
NAME: PSF_GAUSSIAN PURPOSE: Create a 1-d, 2-d, or 3-d Gaussian with specified FWHM, center EXPLANATION: Return a point spread function having Gaussian profiles, as either a 1D vector, a 2D image, or 3D volumetric-data. CALLING SEQUENCE: psf = psf_Gaussian( NPIXEL=, FWHM= , CENTROID = [ /DOUBLE, /NORMALIZE, ST_DEV=, NDIMEN= ] ) or: psf = psf_Gaussian( parameters, NPIXEL = ,NDIMEN = ) REQUIRED INPUT KEYWORD: NPIXEL = number pixels for each dimension, specify as an array, or just one number to make all sizes equal. OPTIONAL KEYWORDS: CENTROID = floating scalar or vector giving position of PSF center. default is exact center of requested vector/image/volume. The number of elements in CENTROID should equal the number of dimensions. **The definition of Centroid was changed in March 2002, and now an integer defines the center of a pixel.** /DOUBLE = If set, then the output array is computed in double precision the default is to return a floating point array. FWHM = the desired Full-Width Half-Max (pixels) in each dimension, specify as an array, or single number to make all the same. NDIMEN = integer dimension of result: either 1 (vector), 2 (image), or 3 (volume), default = 2 (an image result). /NORMALIZE causes resulting PSF to be normalized so Total( psf ) = 1. ST_DEV = optional way to specify width by standard deviation param. Ignored if FWHM is specified. XY_CORREL = scalar between 0 and 1 specifying correlation coefficient Use this keyword, for example, to specify an elliptical Gaussian oriented at an angle to the X,Y axis. Only valid for 2-dimensional case. INPUTS (optional): parameters = an NDIMEN by 3 array giving for each dimension: [ maxval, center, st_dev ], overrides other keywords. EXAMPLE: (1) Create a 31 x 31 array containing a normalized centered Gaussian with an X FWHM = 4.3 and a Y FWHM = 3.6 IDL> array = PSF_GAUSSIAN( Npixel=31, FWHM=[4.3,3.6], /NORMAL ) (2) Create a 50 pixel 1-d Gaussian vector with a maximum of 12, centered at pixel 23 with a sigma of 19.2 IDL> psf = psf_gaussian([12,23,19.2],npixel=50) EXTERNAL CALLS: function Gaussian() NOTES: To improve speed, floating underflow exceptions are suppressed (using the MASK=32 keyword of CHECK_MATH() rather than being flagged. HISTORY: Written, Frank Varosi NASA/GSFC 1991. Converted to IDL V5.0 W. Landsman September 1997 Suppress underflow messages, add DOUBLE keyword. **Modified centroid definition so integer position is pixel center** W. Landsman March 2002 Allow use of the ST_DEV (not STDEV) keyword W. Landsman Nov. 2002 Do not modify NPIXEL input keyword W. Landsman
(See $IDLUTILS_DIR/goddard/pro/image/psf_gaussian.pro)
PSWINDOW
NAME: PSWINDOW PURPOSE: This function is used to calculate the size of a PostScript window that has the same aspect ratio (ratio of height to width) as the current display graphics window. It creates the largest possible PostScript output window with the desired aspect ratio. This assures that PostScript output looks similar, if not identical, to normal graphics output on the display. AUTHOR: FANNING SOFTWARE CONSULTING David Fanning, Ph.D. 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com/ CATEGORY: Graphics. CALLING SEQUENCE: pageInfo = PSWINDOW() INPUTS: None. KEYWORD PARAMETERS: ASPECTRATIO: Normally the aspect ratio is matched to the aspect ratio (ratio of height divided by width) of the current graphics window. However, this keyword can be used to select a particular aspect ratio for the PostScript window. This should be a floating point value. CM: Normally the structure value that is returned from this function reports its values in inches. Setting this keyword causes the return values to be in units of centimeters. EUROPEAN: This keyword is depreciated in favor of METRIC. FUDGE: A quick way to set symetrical XFUDGE and YFUDGE factors. If this keyword is set to a value, XFUDGE and YFUDGE keywords are set to the same value. Fudge factors are used only with some printers and generally only when output is being sent to the PRINTER device. (See the description of the XFUDGE and YFUDGE keywords for additional information.) LANDSCAPE: Normally, a landscape page is selected if the current graphics window is wider than it is tall. If you prefer a landscape aspect window on a Portrait page, set the LANDSCAPE keywword to 0. Setting this keyword to 1 will result in a landscape page no matter the size of the current graphics window. MARGIN: The margin around the edges of the plot. The value must be a floating point value between 0.0 and 0.35. It is expressed in normalized coordinate units. The default margin is 0.05. METRIC: If this keyword is set, the program defaults change so that the CM keyword is set to 1 and the PAGESIZE keyword is set to "A4". PAGESIZE: Set this keyword to a string indicating the type of PostScript page size you want. Current values are "LETTER", "LEGAL", and "A4". Default is "LETTER". PRINTER: Set this keyword if the output will be used to configure the PRINTER device, rather than the PS device. (In the PRINTER device, offsets are always calculated from the lower-left corner of the page and do not rotate in Landscape mode, as they do with the PS device.) Note that the PRINTER device is only able to accept these keywords in IDL 5.1 and higher. XFUDGE: Printers calculate the offset point from the printable edge of the paper (sometimes), rather from the corner of the paper. For example, on my Lexmark printer, both X and Y offsets are calculated from a point 0.25 inches in from the edge. This keyword allows you to set a "fudge" factor that will be subtracted from the XOFFSET that is returned to the user. This allows you to create output that is centered on the page. The fudge factor should be in the same units as the returned size and offset values. YFUDGE: Printers calculate the offset point from the printable edge of the paper (sometimes), rather from the corner of the paper. For example, on my Lexmark printer, both X and Y offsets are calculated from a point 0.25 inches in from the edge. This keyword allows you to set a "fudge" factor that will be subtracted from the YOFFSET that is returned to the user. This allows you to create output that is centered on the page. The fudge factor should be in the same units as the returned size and offset values. OUTPUTS: pageInfo: The output value is a named structure defined like this: pageInfo = {PSWINDOW_STRUCT, XSIZE:0.0, YSIZE:0.0, $ XOFSET:0.0, YOFFSET:0.0, INCHES:0, PORTRAIT:0, LANDSCAPE:0} The units of the four size fields are inches unless the CM keyword is set. The output can be used to immediately configure the PostScript or Printer device, like this: Set_Plot, 'PS' ; or 'PRINTER' Device, _Extra=pageInfo RESTRICTIONS: The aspect ratio of the current graphics window is calculated like this: aspectRatio = FLOAT(!D.Y_VSIZE) / !D.X_VSIZE EXAMPLE: To create a PostScript output window with the same aspect ratio as the curently active display window, type: pageInfo = PSWINDOW() SET_PLOT, 'PS' DEVICE, _Extra=pageInfo To configure the PRINTER device: pageInfo = PSWINDOW(/Printer, Fudge=0.25) SET_PLOT, 'PRINTER' DEVICE, _Extra=pageInfo MODIFICATION HISTORY: Written by: David W. Fanning, November 1996. Fixed a bug in which the YOFFSET was calculated incorrectly in Landscape mode. 12 Feb 97. Took out a line of code that wasn't being used. 14 Mar 97. Added correct units keyword to return structure. 29 JUN 98. DWF Fixed a bug in how landscape offsets were calculated. 19 JUL 99. DWF. Fixed a bug in the way margins were used to conform to my original conception of the program. 19 JUL 99. DWF. Added Landscape and Portrait fields to the return structure. 19 JUL 99. DWF. Added PageSize keyword, changed MARGIN keyword, and completely rewrote most of the intenal code. 9 FEB 2000. DWF. Fixed a bug in how I calculated the aspect ratio. 1 MAR 2000. DWF. Added PRINTER keyword to return proper offset values for the PRINTER device, where the offset location is not rotated. 1 MAR 2000. DWF. Added PRINTER fudge factors to take into account that printer offsets are calculated from the printable area of the paper, rather than the corner of the paper. 8 AUG 2000. DWF. Changed the default margin to 0.05 from 0.15. 29 Nov 2004, DWF. Added EUROPEAN keyword and set LANDSCAPE mode if window wider than higher as the default if LANDSCAPE is not set. 13 Dec 2010. DWF. Added ASPECTRATIO keyword to allow user-specified window aspect ratio. 13 Dec 2010. DWF. Depreciated EUROPEAN keyword in favor of METRIC. 31 Jan 2011. DWF.
(See $IDLUTILS_DIR/goddard/pro/coyote/pswindow.pro)
PS_BACKGROUND
:Description: Provides a device-independent way to set the background color in the PostScript device. :Categories: Graphics, Utilities :Params: color: in, required, type=string/integer, default='white' The color that is used for the PostScript background. A polygon of this color is written to the PostScript file and fills the PostScript "window". :Examples: IDL> PS_Background, 'rose' :Author: FANNING SOFTWARE CONSULTING:: David W. Fanning 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com :History: Change History:: Written, 17 November 2010. DWF. Modified to use gcColorFill so that color is done with decomposed color. 24 Dec 2010. DWF. :Copyright: Copyright (c) 2010, Fanning Software Consulting, Inc.
(See $IDLUTILS_DIR/goddard/pro/coyote/ps_background.pro)
PS_END
The purpose of PS_START and PS_END is to make it easy to set-up and close a PostScript file. These programs are used extensively in all Coyote Graphics routines. If `ImageMagick <http://www.imagemagick.org/script/index.php>` is installed on your computer, you can easily convert PostScript output to GIF, JPEG, PNG, and TIFF raster output. If `Ghostscript <http://www.ghostscript.com/download/>` is installed you can convert PostScript output to PDF files. See the appropriate keywords below. When PS_START is called, the current graphics device is set to "PS" (the PostScript device). When PS_END is called the current graphics device is returned to the device in effect when PS_START was called. :Categories: Utilities, Graphics :Keywords: allow_transparent: in, optional, type=boolean, default=0 To make the background of some image files white, rather than transparent, you have to set the "-alpha off" string in the ImageMagick call. This string is automatically added to the ImageMagick call unless this keyword is set, in which case the string is not added and the image background will be transparent. bmp: in, optional, type=boolean, default=0 Set this keyword to convert the PostScript output file to a BMP image. Requires ImageMagick. delete_ps: in, optional, type=boolean, default=0 Setting this keyword will delete the PostScript file that is used as the intermediate file in the conversion to other file types. density: in, optional, type=integer, default=300 The horizontal and vertical density (in dots per inch, DPI) of the image when the PostScript file is converted to a raster format by ImageMagick. gif: in, optional, type=boolean, default=0 Set this keyword to convert the PostScript output file to a GIF image. Requires ImageMagick. gs_path: in, optional, type=string This program assumes that UNIX users can access Ghostscript with the "gs" command. It assumes WINDOWS users have installed Ghostscript in either the C:\gs or C:\Program Files\gs directories. If either of these assumptions is incorrect, you can specify the directory where the Ghostscript executable resides with this keyword. (The Windows 32-bit executable is named gswin32c.exe and the 64-bit executable is named gswin64c.exe.) Passed directly to cgPS2PDF. im_options: in, optional, type=string, default="" A string of ImageMagick "convert" options that can be passed to the ImageMagick convert command. No error checking occurs with this string. jpeg: in, optional, type=boolean, default=0 Set this keyword to convert the PostScript output file to a JPEG image. Requires ImageMagick. nofix: in, optional, type=boolean, default=0 If this keyword is set, then the FixPS program to fix IDL landscape PostScript files is not called. nomessage: in, optional, type=boolean, default=0 If this keyword is set, then no error messages are issued. The keyword is used primarily to allow PS_END to reset the internal structure without a lot of ruckus. outfilename: out, optional, type=string The name of the output filename created by the program. pdf: in, optional, type=boolean, default=0 Set this keyword to convert the PostScript output file to a PDF file. Requires Ghostscript. png: in, optional, type=boolean, default=0 Set this keyword to convert the PostScript output file to a PNG image. Requires ImageMagick. Normally, 24-bit PNG files are created. However, if the IM_PNG8 keyword is set with cgWindow_SetDefs, then PS_End will create an 8-bit PNG file instead. resize: in, optional, type=integer, default=25 If an image is being created from the PostScript file, it is often resized by some amount. You can use this keyword to change the value (e.g, RESIZE=100). The value is passed on to resize argument as a percentage in the ImageMagick call. showcmd: in, optional, type=boolean, default=0 Set this command to show the command used to do any PostScript coversions. tiff: in, optional, type=boolean, default=0 Set this keyword to convert the PostScript output file to a TIFF image. Requires ImageMagick. unix_convert_cmd: in, optional, type=string There are a number of commands on UNIX machines for converting PostScript files to PDF files. This program assumes you are using Ghostscript to do the conversion for you. The Ghostscript command on most UNIX machines is "gs", which is used if this keyword is undefined. However, if you would prefer to use another program to do the conversion for you, you can specify the name of the command here. For example, "pstopdf" or "epstopdf". In creating the actual command, this command will be separated by a space from the input file name. In other words, if the alternative conversion command was "pstopdf", the actual command would be "pstopdf" + " " + ps_file. Any output filename is ignored. This command does not apply to Macintosh or Windows computers. Passed directly to cgPS2PDF. width: in, optional, type=integer Set the keyword to the final pixel width of the output raster image. Applies only to raster image file output (e.g., JPEG, PNG, TIFF, etc.). The height of the image is chosen to preserve the image aspect ratio. :Examples: To create a line plot in a PostScript file named lineplot.ps and also create a PNG file named lineplot.png for display in a browser, type these commands:: PS_Start, FILENAME='lineplot.ps' cgPlot, Findgen(11), COLOR='navy', /NODATA, XTITLE='Time', YTITLE='Signal' cgPlot, Findgen(11), COLOR='indian red', /OVERPLOT cgPlot, Findgen(11), COLOR='olive', PSYM=2, /OVERPLOT PS_End, /PNG :Author: FANNING SOFTWARE CONSULTING:: David W. Fanning 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com :History: Change History:: Written by: David W. Fanning, 20 May 2008. Slight modification to allow filenames with spaces in them. Added NoMatch keyword. 17 March 2009. DWF. Added a number of keywords to make these commands more configurable. 19 March 2009. DWF. Only set thickness system variables if starting system variables are set to their default values (namely, 0). This allows users to set their own system variables before they call PS_START, rather than after. 23 March 2009. DWF. Moved PS_END to its own file to allow the IDLExBr_Assistant to work properly. 7 April 2009. DWF. Reordered ImageMagick commands to put them in the proper sequence to get "alpha" switch to work. 23 April 2009. DWF. Put the switches *ahead* of the PostScript file name. Now resizing works and default size reduction returned to 25%. 23 April 2009. DWF. Still having a devil of a time getting the ImageMagick "convert" command right. Fonts have become a problem. Now trying a "flatten" option in the command. 12 May 2009. DWF. If the PostScript file is in Landscape mode, it is now "fixed" with FixPS to allow it to be displayed right-side up in PostScript viewers. 8 August 2009. DWF. Fixed a problem in not checking the GIF keyword properly. 4 December 2009. DWF. Added NOFIX keyword to the program. 1 November 2010. DWF. Added better handing of errors coming from FIXPS after update to FIXPS. 15 November 2010. DWF. Added DELETE_PS keyword. 16 Jan 2011. DWF. Better protection of code from not finding ImageMagick. 17 Jan 2011. DWF. Collecting result of SPAWN command. Only printing if QUIET=0. 16 Feb 2011. DWF. Changes to handle inability to create raster files from PS encapsulated files in landscape mode. Added NOMESSAGE keyword. 26 Aug 2011. DWF. Added PDF keyword. Requires Ghostscript to use. 6 Dec 2011. DWF. Added SHOWCMD keyword. 9 Dec 2011. DWF. Added OUTFILENAME keyword. 11 Dec 2011. DWF. Just realized a BMP case is missing from one of the CASE statements. 12 Dec 2011. DWF. Added GS_PATH and UNIX_CONVERT_CMD keywords to support PDF output. 14 Dec 2011. DWF. Add the WIDTH keyword. 3 April 2012. DWF. Added a check for IM_PNG8 keyword, using cgWindow_GetDefs to see if an 8-bit or 24-bit PNG file should be created. 3 April 2012. DWF. Modified the ImageMagick commands that resizes the image to a particular width. Necessary to accommodate PNG8 file output. Using ImageMagick 6.7.2-9. 4 April 2012. DWF. :Copyright: Copyright (c) 2008-2012, Fanning Software Consulting, Inc.
(See $IDLUTILS_DIR/goddard/pro/coyote/ps_end.pro)
PS_START
The purpose of PS_START and PS_END is to make it easy to set-up and close a PostScript file. These programs are used extensively in all Coyote Graphics routines. If `ImageMagick <http://www.imagemagick.org/script/index.php>` is installed on your computer, you can easily convert PostScript output to GIF, JPEG, PNG, and TIFF raster output. If `Ghostscript <http://www.ghostscript.com/download/>` is installed you can convert PostScript output to PDF files. See the appropriate keywords to PS_END. When PS_START is called, the current graphics device is set to "PS" (the PostScript device). When PS_END is called the current graphics device is returned to the device in effect when PS_START was called. PS_Start uses the current display window as a template for the Postscript file. Thus, if the display window is wider than it is higher, output is in Landscape mode. To set the size of the PostScript "window" yourself, be sure to set the NOMATCH keyword to 1. To display surface plots correctly the FONT keyword should be set to 1. Otherwise, the default font is 0, or hardware fonts when outputting to PostScript. You can easily configure any modifications you like for your PostScript output by setting fields in the plot and axis system variables (!P, !X, !Y, and !Z). The modifications currently made by default in this program are these:: !P.Thick = 3 !P.CharThick = 3 !X.Thick = 3 !Y.Thick = 3 !Z.Thick = 3 !P.Font = 0 The !P.Charsize variable is set differently on Windows computers, and depending on whether !P.MULTI is being used. On Windows the default is 1.25, or 1.00 for multiple plots. On other computers, the default is 1.5, or 1.25 for multiple plots. If true-type fonts are being used (FONT=1), the default is 1.5, or 1.25 for multiple plots. The PS_Start program contains the common block, _$FSC_PS_START_. See the FSC_PS_SETUP__DEFINE program in the Coyote Library for its definition. :Categories: Utilities, Graphics :Params: filename: in, optional, type=string, default='idl.ps' The name of the PostScript file created. :Keywords: cancel: out, optional, type=boolean, default=0 An output keyword that is set to 1 if the user cancelled from PS_Config. Otherwise, set to 0. charsize: in, optional, type=float If this keyword is set, the !P.Charsize variable is set to this value until PS_END is called. default_thickness: in, optional, type=integer, default=3 Sets the following system variables to this value while creating PostScript output: !P.Thick, !P.CharThick, !X.Thick, !Y.Thick, !Z.Thick. These variables are returned to their original values by `PS_End`. A system variable is set to this value only if it currently contains the IDL default value of 0.0. If it is set to anything else, this default thickness value is ignored. filename: in, optional, type=string, default='idl.ps' The name of the PostScript file created. An alternative, and older, way of setting the `filename` parameter. font: in, optional, type=integer, default=0 Set this to the type of font you want. A -1 selects Hershey fonts, a 0 selects hardware fonts (Helvetica, normally), and a 1 selects a True-Type font. Set to 0 by default. encapsulated: in, optional, type=boolean, default=0 Set this keyword to produce encapsulated PostScript output. gui: in, optional, type=boolean, default=0 The default behavior is to use PSCONFIG to configure the PostScript device silently. If you wish to allow the user to interatively configure the PostScript device, set this keyword. keywords: out, optional, type=structure This output keyword contains the keyword structure returned from PS_Config. landscape: in, optional, type=boolean, default=0 Set this keyword to produce landscape PostScript output. nomatch: in, optional, type=boolean, default=0 Normally, PS_Start will try to "match" the aspect ratio of the PostScript file "window" to the current display window. If this keyword is set, then this doesn't occur, giving the user the option of specifying the size and offsets of the PostScript window directly though appropriate keywords. quiet: in, optional, type=boolean, default=0 If set, informational messages are not set. scale_factor: in, optional, type=float, default=1.0 Set this to the PostScript scale factor. By default: 1. tt_font: in, optional, type=string, default="Helvetica" The name of a true-type font to use if FONT=1. _ref_extra: in, optional Any keyword appropriate for the PostScript configuration program PSConfig, from the Coyote Library can be used with PS_Start. :Examples: To create a line plot in a PostScript file named lineplot.ps and also create a PNG file named lineplot.png for display in a browser, type these commands:: PS_Start, FILENAME='lineplot.ps' cgPlot, Findgen(11), COLOR='navy', /NODATA, XTITLE='Time', YTITLE='Signal' cgPlot, Findgen(11), COLOR='indian red', /OVERPLOT cgPlot, Findgen(11), COLOR='olive', PSYM=2, /OVERPLOT PS_End, /PNG :Author: FANNING SOFTWARE CONSULTING:: David W. Fanning 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com :History: Change History:: Written by: David W. Fanning, 20 May 2008. Slight modification to allow filenames with spaces in them. Added NoMatch keyword. 17 March 2009. DWF. Added a number of keywords to make these commands more configurable. 19 March 2009. DWF. Only set thickness system variables if starting system variables are set to their default values (namely, 0). This allows users to set their own system variables before they call PS_START, rather than after. 23 March 2009. DWF. Moved PS_END to its own file to allow the IDLExBr_Assistant to work properly. 7 April 2009. DWF. Modified to allow PostScript page type to be stored for future processing with FixPS. 9 August 2009. DWF. Added NoFix keyword to PS_END calls to repair previous, but unused set-ups. 1 Nov 2010. DWF. Added Charsize keyword to PS_START. 14 Nov 2010. DWF. Changed the way default character sizes are set. 19 Nov 2010. DWF. Added CANCEL and KEYWORDS output keywords. 16 Jan 2011. DWF. Changes to handle inability to create raster files from PS encapsulated files in landscape mode. 26 Aug 2011. DWF. The SCALE_FACTOR is called at the time the PostScript file is opened to avoid problems with the bounding box not being set to the correct values. 26 October 2011. DWF. Created a DEFAULT_THICKNESS keyword to set the default thicknesses of PostScript system variables. 14 Dec 2011. DWF. Moved the true-type font set-up to *after* changing the graphics device to PostScript. 10 Jan 2012. DWF. :Copyright: Copyright (c) 2008-2011, Fanning Software Consulting, Inc.
(See $IDLUTILS_DIR/goddard/pro/coyote/ps_start.pro)
PUTAST
NAME: PUTAST PURPOSE: Put WCS astrometry parameters into a given FITS header. CALLING SEQUENCE: putast, hdr ;Prompt for all values or putast, hdr, astr, [EQUINOX =, CD_TYPE =, ALT= , NAXIS=] or putast, hdr, cd,[ crpix, crval, ctype], [ EQUINOX =, CD_TYPE =, ALT= ] INPUTS: HDR - FITS header, string array. HDR will be updated to contain the supplied astrometry. ASTR - IDL structure containing values of the astrometry parameters CDELT, CRPIX, CRVAL, CTYPE, LONGPOLE, and PV2 See EXTAST.PRO for more info about the structure definition or CD - 2 x 2 array containing the astrometry parameters CD1_1 CD1_2 CD2_1 CD2_2 in units of DEGREES/PIXEL CRPIX - 2 element vector giving X and Y coord of reference pixel BE SURE THE COORDINATES IN CRPIX ARE GIVEN IN FITS STANDARD (e.g. first pixel in image is [1,1] ) AND NOT IDL STANDARD (first pixel in image is [0,0] CRVAL - 2 element vector giving R.A. and DEC of reference pixel in degrees CTYPE - 2 element string vector giving projection types for the two axes. For example, to specify a tangent projection one should set ctype = ['RA---TAN','DEC--TAN'] OUTPUTS: HDR - FITS header now contains the updated astrometry parameters A brief HISTORY record is also added. OPTIONAL KEYWORD INPUTS: ALT - single character 'A' through 'Z' or ' ' specifying an alternate astrometry system to write in the FITS header. The default is to write 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. CD_TYPE - Integer scalar, either 0, 1 or 2 specifying how the CD matrix is to be written into the header (0) write PCn_m values along with CDELT values (1) convert to rotation and write as a CROTA2 value (+ CDELT) (2) as CDn_m values (IRAF standard) All three forms are valid representations according to Greisen & Calabretta (2002, A&A, 395, 1061), also available at http://fits.gsfc.nasa.gov/fits_wcs.html ) although form (0) is preferred. Form (1) is the former AIPS standard and is now deprecated and cannot be used if any skew is present. If CD_TYPE is not supplied, PUTAST will try to determine the type of astrometry already in the header. If there is no astrometry in the header then the default is CD_TYPE = 2. EQUINOX - numeric scalar giving the year of equinox of the reference coordinates. Default (if EQUINOX keyword is not already present in header) is 2000. NAXIS - By default, PUTAST does not update the NAXIS keywords in the FITS header. If NAXIS is set, and an astrometry structure is supplied then the NAXIS1 and NAXIS2 keywords in the FITS header will be updated with the .NAXIS structure tags values. If an astrometry structure is not supplied, then one can set NAXIS to a two element vector to update the NAXIS1, NAXIS2 keywords. NOTES: The recommended use of this procedure is to supply an astrometry structure. PUTAST does not delete astrometry parameters already present in the header, unless they are explicity overwritten. As of April 2012, PUTAST will add SIP ( http://fits.gsfc.nasa.gov/registry/sip.html ) distortion parameters to a FITS header if present in the astrometry structure. PROMPTS: If only a header is supplied, the user will be prompted for a plate scale, the X and Y coordinates of a reference pixel, the RA and DEC of the reference pixel, the equinox of the RA and Dec and a rotation angle. PROCEDURES USED: ADD_DISTORT, GETOPT(), GET_COORDS, GET_EQUINOX, SXADDPAR, SXPAR(), TAG_EXIST(), ZPARCHECK REVISION HISTORY: Written by W. Landsman 9-3-87 Major rewrite, use new astrometry structure March, 1994 Use both CD and CDELT to get plate scale for CD_TYPE=1 September 1995 Use lower case for FITS keyword Comments W.L. March 1997 Fixed for CD_TYPE=1 and CDELT = [1.0,1.0] W.L September 1997 Default value of CD_TYPE is now 2, Use GET_COORDS to read coordinates to correct -0 problem W.L. September 1997 Update CROTA1 if it already exists W.L. October 1997 Convert rotation to degrees for CD_TYPE = 1 W. L. June 1998 Accept CD_TYPE = 0 keyword input W.L October 1998 Remove reference to obsolete !ERR W.L. February 2000 No longer support CD001001 format, write default tangent CTYPE value consistent conversion between CROTA and CD matrix W.L. October 2000 Use GET_EQUINOX to get equinox value W.L. January 2001 Update CTYPE keyword if previous value is 'LINEAR' W.L. July 2001 Use SIZE(/TNAME) instead of DATATYPE() W.L. November 2001 Allow direct specification of CTYPE W.L. June 2002 Don't assume celestial coordinates W. Landsman April 2003 Make default CD_TYPE = 2 W. Landsman September 2003 Add projection parameters, e.g. PV2_1, PV2_2 if present in the input structure W. Landsman May 2004 Correct interactive computation of image center W. Landsman Feb. 2005 Don't use CROTA (CD_TYPE=1) if a skew exists W. Landsman May 2005 Added NAXIS keyword W. Landsman January 2007 Update PC matrix, if CD_TYPE=0 and CD matrix supplied W.L. July 2007 Don't write PV2 keywords for WCS types that don't use it W.L. Aug 2011 Add SIP distortion parameters if present W.L. April 2012
(See $IDLUTILS_DIR/goddard/pro/astrom/putast.pro)
QDCB_GRID
NAME: QDCB_GRID PURPOSE: Produce an overlay of latitude and longitude lines over a plot or image EXPLANATION: Grid is plotted on the current graphics device assuming that the current plot is a map in the so called quad cube projection. The output plot range is assumed to go from 7.0 to -1.0 on the X axis and -3.0 to 3.0 on the Y axis. Within this plotting space, the quad cube faces are laid out as follows (X=Empty, Astronomical Layout shown - X axis can be swapped for geographic maps): 3.0_ XXX0 4321 -3.0_XXX5 | | 7.0 -1.0 CATEGORY: Mapping Support Routine CALLING SEQUENCE: QDCB_GRID,[,DLONG,DLAT,[LINESTYLE=N,/LABELS] INPUT PARAMETERS: 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. OPTIONAL KEYWORD PARAMETERS: LINESTYLE = Optional input integer specifying the linestyle to use for drawing the grid lines. LABELS = Optional keyword specifying that the lattitude 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 and minutes instead of degrees. OUTPUT PARAMETERS: NONE PROCEDURE: Uses WCSSPH2XY.PRO with projection 23 ("QSC" - COBE Quadrilatieralized Spherical Cube) to compute positions of grid lines and labels. COPYRIGHT NOTICE: Copyright 1991, 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: Jeff Bloch MODIFICATIONS/REVISION LEVEL: %I% %G% Use WCSSPH2XY instead of QDCB Wayne Landsman December 1994 Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/astro/qdcb_grid.pro)
QGET_STRING
NAME: QGET_STRING PURPOSE: To get a string from the keyboard without echoing it to the screen. CALLING SEQUENCE: string = QGET_STRING() INPUTS: None. OUTPUTS: string The string read from the keyboard. SIDE EFFECTS: A string variable is created and filled. PROCEDURE: The IDL GET_KBRD functions is used to get each character in the string. Each character is added to the string until a carriage return is struck. The carriage return is not appended to the string. Striking the delete key or the backspace key removes the previous character from the string. NOTES: For a widget password procedure see http://idlcoyote.com/tip_examples/password.pro MODIFICATION HISTORY: Written by Michael R. Greason, STX, 8 January 1991. Work for Mac and Windows IDL W. Landsman September 1995
(See $IDLUTILS_DIR/goddard/pro/misc/qget_string.pro)
QSIMP
NAME: QSIMP PURPOSE: Integrate using Simpson's rule to specified accuracy. EXPLANATION: Integrate a function to specified accuracy using the extended trapezoidal rule. Adapted from algorithm in Numerical Recipes, by Press et al. (1992, 2nd edition), Section 4.2. This procedure has been partly obsolete since IDL V3.5 with the introduction of the intrinsic function QSIMP(), but see notes below. CALLING SEQUENCE: QSIMP, func, A, B, S, [ EPS = , MAX_ITER =, _EXTRA = ] INPUTS: func - scalar string giving name of function of one variable to be integrated A,B - numeric scalars giving the lower and upper bound of the integration OUTPUTS: S - Scalar giving the approximation to the integral of the specified function between A and B. OPTIONAL KEYWORD PARAMETERS: EPS - scalar specifying the fractional accuracy before ending the iteration. Default = 1E-6 MAX_ITER - Integer specifying the total number iterations at which QSIMP will terminate even if the specified accuracy has not yet been met. The maximum number of function evaluations will be 2^(MAX_ITER). Default value is MAX_ITER = 20 Any other keywords are passed directly to the user-supplied function via the _EXTRA facility. NOTES: (1) The function QTRAP is robust way of doing integrals that are not very smooth. However, if the function has a continuous 3rd derivative then QSIMP will likely be more efficient at performing the integral. (2) QSIMP can be *much* faster than the intrinsic QSIMP() function (as of IDL V7.1). This is because the intrinsic QSIMP() function only requires that the user supplied function accept a *scalar* variable. Thus on the the 16th iteration, the intrinsic QSIMP() makes 32,767 calls to the user function, whereas this procedure makes one call with a 32,767 element vector. Also, unlike the intrinsic QSIMP(), this procedure allows keywords in the user-supplied function. (3) Since the intrinsic QSIMP() is a function, and this file contains a procedure, there should be no name conflict. EXAMPLE: Compute the integral of sin(x) from 0 to !PI/3. IDL> QSIMP, 'sin', 0, !PI/3, S & print, S The value obtained should be cos(!PI/3) = 0.5 PROCEDURES CALLED: TRAPZD, ZPARCHECK REVISION HISTORY: W. Landsman ST Systems Co. August, 1991 Continue after max iter warning message W. Landsman March, 1996 Converted to IDL V5.0 W. Landsman September 1997 Pass keyword to function via _EXTRA facility W. Landsman July 1999
(See $IDLUTILS_DIR/goddard/pro/math/qsimp.pro)
QTRAP
NAME: QTRAP PURPOSE: Integrate using trapezoidal rule to specified accuracy. EXPLANATION: Integrate a function to specified accuracy using the extended trapezoidal rule. Adapted from Numerical Recipes (1992, 2nd edition), Section 4.2. CALLING SEQUENCE: QTRAP, func, A, B, S, [EPS = , MAX_ITER =, _EXTRA = ] INPUTS: func - scalar string giving name of function of one variable to be integrated A,B - numeric scalars giving the lower and upper bound of the integration OUTPUTS: S - Scalar giving the approximation to the integral of the specified function between A and B. OPTIONAL KEYWORD PARAMETERS: EPS - scalar specify the fractional accuracy before ending the iteration. Default = 1E-6 MAX_ITER - Integer specifying the total number iterations at which QTRAP will terminate even if the specified accuracy has not yet been met. The maximum number of function evaluations will be 2^(MAX_ITER). Default value is MAX_ITER = 20 Any other keywords are passed directly to the user-supplied function via the _EXTRA facility. NOTES: QTRAP is robust way of doing integrals that are not very smooth. If the function has a continuous 3rd derivative then the function QSIMP will likely be more efficient at performing the integral. EXAMPLE: Compute the integral of sin(x) from 0 to !PI/3. IDL> QTRAP, 'sin', 0, !PI/3, S & print,S The value obtained should be cos(!PI/3) = 0.5 PROCEDURES CALLED: TRAPZD, ZPARCHECK REVISION HISTORY: W. Landsman ST Systems Co. August, 1991 Continue after Max Iter warning message, W. Landsman March 1996 Converted to IDL V5.0 W. Landsman September 1997 Pass keyword to function via _EXTRA facility W. Landsman July 1999
(See $IDLUTILS_DIR/goddard/pro/math/qtrap.pro)
QUADTERP
NAME: QUADTERP PURPOSE: Quadratic interpolation of X,Y vectors onto a new X grid EXPLANATION: Interpolate a function Y = f(X) at specified grid points using an average of two neighboring 3 point quadratic (Lagrangian) interpolants. Use LINTERP for linear interpolation CALLING SEQUENCE: QUADTERP, Xtab, Ytab, Xint, Yint, [ MISSING = ] INPUT: Xtab - Vector (X TABle) containing the current independent variable Must be either monotonic increasing or decreasing Ytab - Vector (Y TABle) containing the dependent variable defined at each of the points of XTAB. Xint - Scalar or vector giving the values of X for which interpolated Y values are sought OUTPUT: Yint - Interpolated value(s) of Y, same number of points as Xint OPTIONAL INPUT KEYWORD: MISSING - Scalar specifying Yint value(s) to be assigned, when Xint value(s) are outside of the range of Xtab. Default is to truncate the out of range Yint value(s) to the nearest value of Ytab. See the help for the INTERPOLATE function. METHOD: 3-point Lagrangian interpolation. The average of the two quadratics derived from the four nearest points is returned in YTAB. A single quadratic is used near the end points. VALUE_LOCATE is used to locate center point of the interpolation. NOTES: QUADTERP provides one method of high-order interpolation. The RSI interpol.pro function includes the following alternatives: interpol(/LSQUADRATIC) - least squares quadratic fit to a 4 pt neighborhood interpol(/QUADRATIC) - quadratic fit to a 3 pt neighborhood interpol(/SPLINE) - cubic spline fit to a 4 pt neighborhood Also, the IDL Astro function HERMITE fits a cubic polynomial and its derivative to the two nearest points. RESTRICTIONS: Unless MISSING keyword is set, points outside the range of Xtab in which valid quadratics can be computed are returned at the value of the nearest end point of Ytab (i.e. Ytab[0] and Ytab[NPTS-1] ). EXAMPLE: A spectrum has been defined using a wavelength vector WAVE and a flux vector FLUX. Interpolate onto a new wavelength grid, e.g. IDL> wgrid = [1540.,1541.,1542.,1543.,1544.,1545.] IDL> quadterp, wave, flux, wgrid, fgrid FGRID will be a 5 element vector containing the quadratically interpolated values of FLUX at the wavelengths given in WGRID. EXTERNAL ROUTINES: ZPARCHECK REVISION HISTORY: 31 October 1986 by B. Boothman, adapted from the IUE RDAF 12 December 1988 J. Murthy, corrected error in Xint September 1992, W. Landsman, fixed problem with double precision August 1993, W. Landsman, added MISSING keyword June, 1995, W. Landsman, use single quadratic near end points Converted to IDL V5.0 W. Landsman September 1997 Fix occasional problem with integer X table, YINT is a scalar if XINT is a scalar W. Landsman Dec 1999 Use VALUE_LOCATE instead of TABINV W. Landsman Feb. 2000
(See $IDLUTILS_DIR/goddard/pro/math/quadterp.pro)
QUERYDSS
NAME: QueryDSS PURPOSE: Query the digital sky survey (DSS) on-line at the STSCI (or ESO) server EXPLANATION: The script can query the DSS survey and retrieve an image and FITS header either from the the Space Telescope Science Institute (STScI) or European Space Observatory (ESO) servers. See http://archive.eso.org/dss/dss and/or http://archive.stsci.edu/dss/index.html for details. CALLING SEQUENCE: QueryDSS, targetname_or_coords, Im, Hdr, [IMSIZE= , /ESO, Outfile= ] INPUTS: TARGETNAME_OR_COORDS - Either a scalar string giving a target name, (with J2000 coordinates determined by SIMBAD (default) or NED), or a 2-element numeric vector giving the J2000 right ascension in *degrees* and the target declination in degrees. OPTIONAL INPUTS: None OPTIONAL KEYWORD PARAMETERS: ImSize - Numeric scalar giving size of the image to be retrieved in arcminutes. Default is 10 arcminute. /ESO - Use the ESO server for image retrieval. Default is to use the STScI server /NED - Query the Nasa Extragalactic Database (NED) for the target's coordinates. The default is to use Simbad for the target search. OUTPUT - scalar string specifying name of output FITS file. If set, then the output IDL variables are not used. /STSCI - obsolete keyword, now does nothing, since STSCI is the default Server. SURVEY - Scalar string specifying which survey to retrieve. Possible values are '1' - First generation (red), this is the default '2b' - Second generation blue '2r' - Second generation red '2i' - Second generation near-infrared Note that 2nd generation images may not be available for all regions of the sky. Also note that the first two letters of the 'REGION' keyword in the FITS header gives the bandpass 'XP' - Red IIIaF, 'XJ' - Blue IIIaJ, 'XF' - Near-IR IVN /VERBOSE - If set, then the query sent to the DSS server is displayed OUTPUTS: Im - The image returned by the server. If there is an error, this contains a single 0. Hdr - The FITS header of the image. Empty string in case of errors. If the OutFile keyword is set then no outputs are returned (only the file is written). SIDE EFFECTS: If Im and Hdr exist in advance, they are overwritten. RESTRICTIONS: Relies on a working network connection. PROCEDURE: Construct a query-url, call WEBGET() and sort out the server's answer. EXAMPLE: Retrieve an 10' image surrounding the ultracompact HII region G45.45+0.06. Obtain the 2nd generation blue image. IDL> QueryDSS, 'GAL045.45+00.06', image, header, survey = '2b' IDL> tvscl, image IDL> hprint, header IDL> writefits,'dss_image.fits', image, header Note that the coordinates could have been specified directly, rather than giving the target name. IDL> QueryDSS, [288.587, 11.1510], image, header,survey='2b' To write a file directly to disk, use the OutFile keyword IDL> QueryDSS, [288.587, 11.1510], survey='2b', out='gal045_2b.fits' PROCEDURES CALLED: QUERYSIMBAD, WEBGET() MODIFICATION HISTORY: Written by M. Feldt, Heidelberg, Oct 2001 <mfeldt@mpia.de> Option to supply target name instead of coords W. Landsman Aug. 2002 Added OUTFILE, /NED keywords W. Landsman April 2003 Don't abort on Simbad failure W. Landsman/J. Brauher June 2003 Added /VERBOSE keyword W. Landsman Jan 2009 Make /STScI server the default W. Landsman June 2010 Fix OUTPUT option W. Landsman June 2010
(See $IDLUTILS_DIR/goddard/pro/sockets/querydss.pro)
QUERYGSC
NAME: QUERYGSC PURPOSE: Query the Guide Star Catalog (GSC V2.3.2) at STScI by position EXPLANATION: Uses the IDL SOCKET command to query the GSC 2.3.2 database over the Web. Alternatively, (and more reliably) one can query the GSC 2.3.2 catalog using queryvizier.pro and the VIZIER database, e.g. IDL> st = queryvizier('GSC2.3',[23,35],10,/all) GSC2.3 is an all-sky export of calibrated photographic survey plate source parameters from the COMPASS database. The number of unique objects is approximately 945,592,683. All sources are from the second-generation plate-processing pipeline with the exception of Tycho-2 and Skymap sources in the case of very bright objects. The Skymap sources are exported when there is no matching GSC or Tycho sources. Each GSC 2.3 entry contains only one position and one magnitude per bandpass for each unique sky object CALLING SEQUENCE: info = QueryGSC(targetname_or_coords, [ dis, /HOURS] ) INPUTS: TARGETNAME_OR_COORDS - Either a scalar string giving a target name, (with J2000 coordinates determined by SIMBAD), or a 2-element numeric vector giving the J2000 right ascension in *degrees* (or hours if /HOURS is set) and the target declination in degrees. OPTIONAL INPUT: dis - Numeric scalar giving search radius in arcminutes to search around specified target Default is 5 arcminutes OPTIONAL INPUT KEYWORDS: /BOX - if set, then radius gives a box width in arcminutes /HOURS - If set, then the right ascension is both input and output (in the info .ra tag) in hours instead of degrees /VERBOSE - If set, then the CGI command to the Webserver will be displayed ; OUTPUTS: info - IDL structure containing information on the GSC stars within the specified distance of the specified center. There are (currently) 23 tags in this structure -- for further information see http://gsss.stsci.edu/Catalogs/GSC/GSC2/gsc23/gsc23_release_notes.htm .HSTID - GSC 2.3 name for HST operations .GSC1ID - GSC1 name .RA,.DEC - Position in degrees (double precision). RA is given in hours if the /HOURS keyword is set. .RAERR, .DECERR - uncertainty (in arcseconds) in the RA and Dec .EPOCH - mean epoch of the observation .FPGMAG, .FPGERR - magnitude and error in photographic F .JPGMAG, .JPGERR - magnitude and error in photographic J .VPGMAG, .VPGERR - V magnitude and error .NPGMAG, .NPGERR - magnitude and error .UMAG, .UERR - magnitude and error .BMAG, .BERR - magnitude and error .VMAG, .VERR - magnitude and error .RMAG, .RERR - magnitude and error .IMAG, .IERR - magnitude and error .JMAG, .JERR - magnitude and error .HMAG, .HERR - magnitude and error .KMAG, .KERR - magnitude and error .A - semi-major axis in pixels .PA - Position angle of extended objects in degrees .E - eccentricity of extended objects .CLASS - classification (0-5): 0-star, 1-galaxy, 2-blend, 3-nonstar, 4-unclassified, 5-defect .STATUS -10 digit field used to encode more detailed information about the properties of the catalog object. For more info, see http://www-gsss.stsci.edu/Catalogs/GSC/GSC2/gsc23/gsc23_release_notes.htm#ClassificationCodes .VFLAG, MFLAG - Variability nad multiplicity flags .FPGBAND, .NPGBAND, .JPGBAND. UBAND, BBAND, .VBAND - flag as to wether given bandpass is available EXAMPLE: Plot a histogram of the photographic J magnitudes of all GSC 2.3.2 stars within 10 arcminutes of the center of the globular cluster M13 IDL> info = querygsc('M13',10) IDL> plothist,info.jpgmag,xran=[10,20] PROCEDURES USED: QUERYSIMBAD, RADEC, WEBGET() MODIFICATION HISTORY: Written by W. Landsman SSAI August 2002 Fixed parsing of RA and Dec W. Landsman September 2002 Major rewrite to use new STScI Web server, remove magrange keyword W. Landsman Dec 2007 Update server name, added /BOX,/ VERBOSE keywords W.L 19 Dec 2007 Web server now also returns infrared data W.L. Feb 2010 Fixed case where dec neg. and deg or min 0 Pat Fry Jul 2010
(See $IDLUTILS_DIR/goddard/pro/sockets/querygsc.pro)
QUERYSIMBAD
NAME: QUERYSIMBAD PURPOSE: Query the SIMBAD/NED/Vizier astronomical name resolver to obtain coordinates EXPLANATION: Uses the IDL SOCKET command to query either the SIMBAD or NED nameserver over the Web to return J2000 coordinates. ; By default, QuerySimbad first queries the Simbad database, then (if no match found) the NED database, and then the Vizier database. For details on the SIMBAD service, see http://simbad.u-strasbg.fr/Simbad and for the NED service, see http://ned.ipac.caltech.edu/ CALLING SEQUENCE: QuerySimbad, name, ra, dec, [ id, Found=, /NED, /CADC, ERRMSG=, /VERBOSE] INPUTS: name - a scalar string containing the target name in SIMBAD (or NED) nomenclature. For SIMBAD details see http://vizier.u-strasbg.fr/cgi-bin/Dic-Simbad . OUTPUTS: ra - Right ascension of the target in J2000.0 in *degrees*, scalar dec - declination of the target in degrees, scalar OPTIONAL INPUT KEYWORD: /CFA - if set, then use the Simbad server at the Center for Astrophysics rather than the default server in Strasbourg, France. 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. /NED - if set, then only the nameserver of the NASA Extragalactic database is used to resolve the name and return coordinates. Note that /NED cannot be used with Galactic objects /VERBOSE - If set, then the HTTP-GET command is displayed /PRINT - if set, then output coordinates are displayed at the terminal By default, the coordinates are displayed if no output parameters are supplied to QUERYSIMBAD /SILENT - If set, then don't print warnings if multiple SIMBAD objects correspond to the supplied name. OPTIONAL OUTPUT: id - the primary SIMBAD (or NED) ID of the target, scalar string As of June 2009, a more reliable ID seems to be found when using CFA (/CFA) server. OPTIONAL KEYWORD OUTPUT: found - set to 1 if the translation was successful, or to 0 if the the object name could not be translated by SIMBAD or NED Errmsg - if supplied, then any error messages are returned in this keyword, rather than being printed at the terminal. May be either a scalar or array. Server - Character indicating which server was actually used to resolve the object, 'S'imbad, 'N'ed or 'V'izier EXAMPLES: (1) Display the J2000 coordinates for the ultracompact HII region G45.45+0.06 IDL> QuerySimbad,'GAL045.45+00.06' ===>19 14 20.77 +11 09 3.6 PROCEDURES USED: REPSTR(), WEBGET() NOTES: The actual query is made to the Sesame name resolver ( see http://cdsweb.u-strasbg.fr/doc/sesame.htx ). The Sesame resolver first searches the Simbad name resolver, then NED and then Vizier. MODIFICATION HISTORY: Written by M. Feldt, Heidelberg, Oct 2001 <mfeldt@mpia.de> Minor updates, W. Landsman August 2002 Added option to use NED server, better parsing of SIMBAD names such as IRAS F10190+5349 W. Landsman March 2003 Turn off extended name search for NED server, fix negative declination with /NED W. Landsman April 2003 Use Simbad Sesame sever, add /Verbose, /CADC keywords B. Stecklum, TLS Tautenburg/ W. Landsman, Feb 2007 Update NED query to account for new IPAC format, A. Barth March 2007 Update NED query to account for another new IPAC format, A. Barth July 2007 Update message when NED does not find object W.L. October 2008 Remove CADC keyword, add CFA keyword, warning if more than two matches W.L. November 2008 Make NED queries through the Sesame server, add Server output keyword W.L. June 2009 Don't get primary name if user didn't ask for it W.L. Aug 2009 Added /SILENT keyword W.L. Oct 2009 Added /PRINT keyword W.L. Oct 2011
(See $IDLUTILS_DIR/goddard/pro/sockets/querysimbad.pro)
QUERYVIZIER
NAME: QUERYVIZIER PURPOSE: Query any catalog in the Vizier database by position EXPLANATION: Uses the IDL SOCKET command to provide a positional query of any catalog in the the Vizier (http://vizier.u-strasbg.fr/) database over the Web and return results in an IDL structure. CALLING SEQUENCE: info = QueryVizier(catalog, targetname_or_coords, [ dis /ALLCOLUMNS, /CANADA, CONSTRAINT= ,/VERBOSE ]) INPUTS: CATALOG - Scalar string giving the name of the VIZIER catalog to be searched. The complete list of catalog names is available at http://vizier.u-strasbg.fr/vizier/cats/U.htx . Popular VIZIER catalogs include 'II/294' - Sloan SDSS photometric catalog Release 7 (2009) '2MASS-PSC' - 2MASS point source catalog (2003) 'GSC2.3' - Version 2.3.2 of the HST Guide Star Catalog (2006) 'USNO-B1' - Verson B1 of the US Naval Observatory catalog (2003) 'NVSS' - NRAO VLA Sky Survey (1998) 'B/DENIS/DENIS' - 2nd Deep Near Infrared Survey of southern Sky 'I/259/TYC2' - Tycho-2 main catalog (2000) 'I/311/HIP2' - Hipparcos main catalog, new reduction (2007) Note that some names will prompt a search of multiple catalogs and QUERYVIZIER will only return the result of the first search. Thus, setting catalog to "HIP2" will search all catalogs associated with the Hipparcos mission, and return results for the first catalog found. To specifically search the Hipparcos or Tycho main catalogs use the VIZIER catalog names listed above TARGETNAME_OR_COORDS - Either a scalar string giving a target name, (with J2000 coordinates determined by SIMBAD), or a 2-element numeric vector giving the J2000 right ascension in *degrees* and the target declination in degrees. If the targetname is set to 'NONE' then QUERYVIZIER will perform an all-sky search using the constraints given in the CONSTRAINT keyword. OPTIONAL INPUT: dis - scalar or 2-element vector. If one value is supplied then this is the search radius in arcminutes. If two values are supplied then this is the width (i.e., in longitude direction) and height of the search box. Default is a radius search with radius of 5 arcminutes OUTPUTS: info - Anonymous IDL structure containing information on the catalog sources within the specified distance of the specified center. The structure tag names are identical with the VIZIER catalog column names, with the exception of an occasional underscore addition, if necessary to convert the column name to a valid structure tag. The VIZIER Web page should consulted for the column names and their meaning for each particular catalog.. If the tagname is numeric and the catalog field is blank then either NaN (if floating) or -1 (if integer) is placed in the tag. If no sources are found within the specified radius, or an error occurs in the query then -1 is returned. OPTIONAL KEYWORDS: /ALLCOLUMNS - if set, then all columns for the catalog are returned The default is to return a smaller VIZIER default set. /CANADA - By default, the query is sent to the main VIZIER site in Strasbourg, France. If /CANADA is set then the VIZIER site at the Canadian Astronomical Data Center (CADC) is used instead. Note that not all Vizier sites have the option to return tab-separated values (TSV) which is required by this program. CONSTRAINT - string giving additional nonpositional numeric constraints on the entries to be selected. For example, when in the GSC2.3 catalog, to only select sources with Rmag < 16 set Constraint = 'Rmag<16'. Multiple constraints can be separated by commas. Use '!=' for "not equal", '<=' for smaller or equal, ">=" for greater than or equal. See the complete list of operators at http://vizier.u-strasbg.fr/doc/asu.html#AnnexQual For this keyword only, **THE COLUMN NAME IS CASE SENSITIVE** and must be written exactly as displayed on the VIZIER Web page. Thus for the GSC2.3 catalog one must use 'Rmag' and not 'rmag' or 'RMAG'. In addition, *DO NOT INCLUDE ANY BLANK SPACE* unless it is a necessary part of the query. /SILENT - If set, then no message will be displayed if no sources are found. Error messages are still displayed. /VERBOSE - If set then the query sent to the VIZIER site is displayed, along with the returned title(s) of found catalog(s) EXAMPLES: (1) Plot a histogram of the J magnitudes of all 2MASS point sources stars within 10 arcminutes of the center of the globular cluster M13 IDL> info = queryvizier('2MASS-PSC','m13',10) IDL> plothist,info.jmag,xran=[10,20] (2) Find the brightest R magnitude GSC2.3 source within 3' of the J2000 position ra = 10:12:34, dec = -23:34:35 IDL> str = queryvizier('GSC2.3',[ten(10,12,34)*15,ten(-23,34,35)],3) IDL> print,min(str.rmag,/NAN) (3) Find sources with V < 19 in the Magellanic Clouds Photometric Survey (Zaritsky+, 2002) within 5 arc minutes of the position 00:47:34 -73:06:27 Checking the VIZIER Web page we find that this catalog is IDL> catname = 'J/AJ/123/855/table1' IDL> ra = ten(0,47,34)*15 & dec = ten(-73,6,27) IDL> str = queryvizier(catname, [ra,dec], 5, constra='Vmag<19') (4) Perform an all-sky search of the Tycho-2 catalog for stars with BTmag = 13+/-0.1 IDL> str = queryvizier('I/259/TYC2','NONE',constrain='BTmag=13+/-0.1') PROCEDURES USED: GETTOK(), REMCHAR, REPSTR(), STRCOMPRESS2(), WEBGET() TO DO: (1) Allow specification of output sorting MODIFICATION HISTORY: Written by W. Landsman SSAI October 2003 Give structure name returned by VIZIER not that given by user W. Landsman February 2004 Don't assume same format for all found sources W. L. March 2004 Added CONSTRAINT keyword for non-positional constraints WL July 2004 Remove use of EXECUTE() statement WL June 2005 Make dis optional as advertised WL August 2005 Update for change in Vizier output format WL February 2006 Fix problem in Feb 2006 update when only 1 object found WL/D.Apai March 2006 Accept 'E' format for floating point. M. Perrin April 2006 Added /ALLCOLUMNS option to return even more data. M. Perrin, May 2006 Return anonymous structure W. Landsman May 2006 Removed V6.0 notation to restore V5 compatibility W.Landsman July2006 Accept target='NONE' for all-sky search, allow '+/-' constraints W. Landsman October 2006 Use HTTP 1.0 protocol in call to webget.pro Use vector form of IDL_VALIDNAME if V6.4 or later W.L. Dec 2007 Update Strasbourg Web address for target name W.L. 3 March 2008 Also update Web address for coordinate search W.L. 7 March 2008 Allow for 'D' specification format R. Gutermuth/W.L. June 2008 Allow for possible lower-case returned formats W.L. July 2008 Use STRCOMPRESS2()to remove blanks around operators in constraint string W.L. August 2008 Added /SILENT keyword W.L. Jan 2009 Avoid error if output columns but not data returned W.L. Mar 2010 Ignore vector tags (e.g. SED spectra) W.L. April 2011
(See $IDLUTILS_DIR/goddard/pro/sockets/queryvizier.pro)
RADEC
NAME: RADEC PURPOSE: To convert RA and Dec from decimal to sexigesimal units. EXPLANATION: The conversion is to sexigesimal hours for RA, and sexigesimal degrees for declination. CALLING SEQUENCE: radec, ra, dec, ihr, imin, xsec, ideg, imn, xsc, [/HOURS} INPUTS: ra - right ascension, scalar or vector, in DEGREES unless the /HOURS keyword is set dec - declination in decimal DEGREES, scalar or vector, same number of elements as RA OUTPUTS: ihr - right ascension hours (INTEGER*2) imin - right ascension minutes (INTEGER*2) xsec - right ascension seconds (REAL*4 or REAL*8) ideg - declination degrees (INTEGER*2) imn - declination minutes (INTEGER*2) xsc - declination seconds (REAL*4 or REAL*8) OPTIONAL KEYWORD INPUT: /HOURS - if set, then the input righ ascension should be specified in hours instead of degrees. RESTRICTIONS: RADEC does minimal parameter checking. REVISON HISTORY: Written by B. Pfarr, STX, 4/24/87 Converted to IDL V5.0 W. Landsman September 1997 Added /HOURS keyword W. Landsman August 2002
(See $IDLUTILS_DIR/goddard/pro/astro/radec.pro)
RANDOMCHI
NAME: RANDOMCHI PURPOSE: GENERATE CHI-SQUARE DISTRIBUTED RANDOM VARIABLES. AUTHOR : BRANDON C. KELLY, STEWARD OBS., SEP 2005 INPUTS : SEED - THE SEED FOR THE RANDOM NUMBER GENERATOR, CAN BE UNDEFINED. DOF - THE DEGREES OF FREEDOM FOR THE CHI-SQUARED DISTRIBUTION. OPTIONAL INPUTS : NRAND - THE NUMBER OF RANDOM NUMBERS TO DRAW
(See $IDLUTILS_DIR/goddard/pro/math/randomchi.pro)
RANDOMDIR
NAME: RANDOMDIR PURPOSE: GENERATE DIRICHLET-DISTRIBUTED RANDOM VARIABLES. AUTHOR : BRANDON C. KELLY, STEWARD OBS., APRIL 2006 INPUTS : SEED - THE SEED FOR THE RANDOM NUMBER GENERATOR, CAN BE UNDEFINED. ALPHA - THE SHAPE PARAMETERS FOR THE DIRICHLET DISTRIBUTION. THIS SHOULD BE A K-ELEMENT VECTOR. OPTIONAL INPUTS : NRAND - THE NUMBER OF RANDOM NUMBERS TO DRAW CALLED ROUTINES : RANDOMGAM
(See $IDLUTILS_DIR/goddard/pro/math/randomdir.pro)
RANDOMGAM
NAME: RANDOMGAM PURPOSE: GENERATE GAMMA-DISTRIBUTED RANDOM VARIABLES. AUTHOR : BRANDON C. KELLY, STEWARD OBS., APRIL 2006 INPUTS : SEED - THE SEED FOR THE RANDOM NUMBER GENERATOR, CAN BE UNDEFINED. ALPHA, BETA - THE SHAPE PARAMETERS FOR THE GAMMA DISTRIBUTION. OPTIONAL INPUTS : NRAND - THE NUMBER OF RANDOM NUMBERS TO DRAW
(See $IDLUTILS_DIR/goddard/pro/math/randomgam.pro)
RANDOMP
NAME: RANDOMP PURPOSE: Generates an array of random numbers distributed as a power law. CALLING SEQUENCE: RANDOMP, X, Pow, N, [ RANGE_X = [low,high], SEED= ]' INPUTS: Pow: Exponent of power law. The pdf of X is f_X(x) = A*x^pow, low <= x <= high ASTRONOMERS PLEASE NOTE: pow is little gamma = big gamma - 1 for stellar IMFs. N: Number of elements in generated vector. OPTIONAL INPUT KEYWORD PARAMETER: RANGE_X: 2-element vector [low,high] specifying the range of output X values; the default is [5, 100]. OPTIONAL INPUT-OUTPUT KEYWORD PARAMETER: SEED: Seed value for RANDOMU function. As described in the documentation for RANDOMU, the value of SEED is updated on each call to RANDOMP, and taken from the system clock if not supplied. This keyword can be used to have RANDOMP give identical results on different runs. OUTPUTS: X: Vector of random numbers, distributed as a power law between specified range PROCEDURE: "Transformation Method" for random variables is described in Bevington & Robinson, "Data Reduction & Error Analysis for Physical Sciences", 2nd Edition (McGraw-Hill, 1992). p. 83. Output of RANDOMU function is transformed to power-law random variable. EXAMPLE: Create a stellar initial mass function (IMF) with 10000 stars ranging from 0.5 to 100 solar masses and a Salpeter slope. Enter: RANDOMP,MASS,-2.35,10000,RANGE_X=[0.5,100] NOTES: Versions 5.1.1 and V5.2 of IDL have a bug in RANDOMU such that the SEED value is initialized to the same value at the start of each session, rather than being initialized by the system clock. RANDOMP will be affected in a similar manner. MODIFICATION HISTORY: Written by R. S. Hill, Hughes STX, July 13, 1995 July 14, 1995 SEED keyword added at Landsman's suggestion. Documentation converted to standard format. RSH Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/math/randomp.pro)
RANDOMWISH
NAME: RANDOMWISH PURUPOSE: ROUTINE TO DRAW RANDOM MATRICES FROM A WISHART DISTRIBUTION WITH DOF DEGREES OF FREEDOM AND SCALE MATRIX S. AUTHOR : BRANDON C. KELLY, STEWARD OBS., JULY 2006 INPUTS : SEED - THE SEED FOR THE RANDOM NUMBER GENERATOR, CAN BE UNDEFINED. DOF - THE DEGREES OF FREEDOM FOR THE WISHART DISTRIBUTION. S - THE SCALE MATRIX. THE DIMENSION OF S CANNOT BE GREATER THAN DOF. OPTIONAL INPUTS : NRAND - THE NUMBER OF RANDOM MATRICES TO DRAW CALLED ROUTINES : MRANDOMN
(See $IDLUTILS_DIR/goddard/pro/math/randomwish.pro)
RDFITS_STRUCT
NAME: RDFITS_STRUCT PURPOSE: Read an entire FITS file (all extensions) into a single IDL structure. EXPLANATION: Each header, image or table array is placed in a separate structure tag. CALLING SEQUENCE: RDFITS_STRUCT, filename, struct, /SILENT, /HEADER_ONLY, EXTEN= ] INPUT: FILENAME = Scalar string giving the name of the FITS file. One can also specify a gzip (.gz) compressed file OPTIONAL KEYWORD: /HEADER_ONLY - If set, then only the FITS headers (and not the data) are read into the structure. /SILENT - Set this keyword to suppress informational displays at the terminal. OUTPUT: struct = structure into which FITS data is read. The primary header and image are placed into tag names HDR0 and IM0. The ith extension is placed into the tag names HDRi, and either TABi (if it is a binary or ASCII table) or IMi (if it is an image extension) If /HEADER_ONLY is set, then struct will contain tags HDR0, HDR1 ....HDRn containing all the headers of a FITS file with n extensions OPTIONAL INPUT KEYWORD: EXTEN - positive integer array specifying which extensions to read. Default is to read all extensions. PROCEDURES USED: FITS_OPEN, FITS_READ, FITS_CLOSE METHOD: The file is opened with FITS_OPEN which return information on the number and type of each extension. The CREATE_STRUCT() function is used iteratively, with FITS_READ calls to build the final structure. EXAMPLE: Read the FITS file 'm33.fits' into an IDL structure, st IDL> rdfits_struct, 'm33.fits', st IDL> help, /str, st ;Display info about the structure To just read the second and fourth extensions IDL> rdfits_struct, 'm33.fits', st, exten=[2,4] RESTRICTIONS: Does not handle random groups or variable length binary tables MODIFICATION HISTORY: Written K. Venkatakrishna, STX April 1992 Code cleaned up a bit W. Landsman STX October 92 Modified for MacOS I. Freedman HSTX April 1994 Work under Windows 95 W. Landsman HSTX January 1996 Use anonymous structures, skip extensions without data WBL April 1998 Converted to IDL V5.0, W. Landsman, April 1998 OS-independent deletion of temporary file W. Landsman Jan 1999 Major rewrite to use FITS_OPEN and CREATE_STRUCT() W. Landsman Sep 2002 Added /HEADER_ONLY keyword W. Landsman October 2003 Do not copy primary header into extension headers W. Landsman Dec 2004 Do not modify NAXIS when using /HEADER_ONLY W. Landsman Jan 2005 Added EXTEN keyword W. Landsman July 2009
(See $IDLUTILS_DIR/goddard/pro/fits/rdfits_struct.pro)
RDFLOAT
NAME: RDFLOAT PURPOSE: Quickly read a numeric ASCII data file into IDL floating/double vectors. EXPLANATION: Columns of data may be separated by tabs or spaces. This program is fast but is restricted to data files where all columns can be read as floating point (or all double precision). Use READCOL if greater flexibility is desired. Use READFMT to read a fixed-format ASCII file. Use FORPRINT to print columns of data. CALLING SEQUENCE: RDFLOAT, name, v1, [ v2, v3, v4, v5, ... v19] COLUMNS, /DOUBLE, SKIPLINE = , NUMLINE = ] INPUTS: NAME - Name of ASCII data file, scalar string. In VMS, an extension of .DAT is assumed, if not supplied. OPTIONAL INPUT KEYWORDS: COLUMNS - Numeric scalar or vector specifying which columns in the file to read. For example, if COLUMNS = [3,7,11] then the first output variable (v1) would contain column 3, the second would contain column 7 and the third would contain column 11. If the number of elements in the COLUMNS vector is less than the number of output parameters, then consecutive columns are implied. For example, if 3 output parameters are supplied (v1,v2,v3) and COLUMNS = 3, then columns 3,4, and 5 will be read. SKIPLINE - Integer scalar specifying number of lines to skip at the top of file before reading. Default is to start at the first line. NUMLINE - Integer scalar specifying number of lines in the file to read. Default is to read the entire file /DOUBLE - If this keyword is set, then all variables are read in as double precision. /SILENT - Set this keyword to suppress any informative messages OUTPUTS: V1,V2,V3,...V19 - IDL vectors to contain columns of data. Up to 19 columns may be read. All output vectors are of type float, unless the /DOUBLE keyword is set, EXAMPLES: Each row in a file 'position.dat' contains a star number and 6 columns of data giving an RA and Dec in sexigesimal format. Read into IDL variables. IDL> rdfloat,'position.dat',ID,hr,min,sec,deg,dmin,dsec All output vectors will be floating point. To only read the declination vectors (Deg,dmin,dsec) IDL> rdfloat,'position.dat',deg,dmin,dsec,col=4 RESTRICTIONS: (1) All rows in the file must be formatted identically (except for those skipped by SKIPLINE). RDFLOAT reads the first line of the data (after SKIPLINE) to determine the number of columns of data. (2) Cannot be used to read strings PROCEDURES USED: None. REVISION HISTORY: Written W. Landsman September 1995 Call NUMLINES() function February 1996 Read up to 19 columns August 1997 Converted to IDL V5.0 W. Landsman September 1997 Allow to skip more than 32767 lines W. Landsman June 2001 Added /SILENT keyword W. Landsman March 2002 Added COLUMNS keyword, use STRSPLIT W. Landsman May 2002 Use SKIP_LUN if V5.6 or later W. Landsman Nov 2002 V5.6 version, use FILE_LINES() W. Landsman Dec 2002
(See $IDLUTILS_DIR/goddard/pro/misc/rdfloat.pro)
RDPLOT
NAME: RDPLOT PURPOSE: Like CURSOR but with a full-screen cursor and continuous readout option EXPLANATION: This program is designed to essentially mimic the IDL CURSOR command, but with the additional options of continuously printing out the data values of the cursor's position, and using a full-screen cursor rather than a small cross cursor. The full screen cursor uses OPLOT and X-windows graphics masking to emulate the cursor. One difference is that IF the PRINT keyword is set but the DOWN, WAIT, CHANGE, or NOWAIT keywords are not set, then the leftmost mouse button will print a "newline" line-feed, but not exit. CALLING SEQUENCE: RDPLOT [, X, Y] [, WaitFlag] [, /DATA | /DEVICE | /NORMAL] [, /NOWAIT | /WAIT | /DOWN | /CHANGE] [, /FULLCURSOR] [, /NOCLIP] [, /CROSS] [, /ACCUMULATE] [, ERR=, PRINT=, XTITLE=, YTITLE=, XVALUES=, YVALUES= , LINESTYLE=, THICK=, COLOR=, BACKGROUND=] REQUIRED INPUTS: None. OPTIONAL INPUTS: WAITFLAG = Uses the same table as the intrinsic CURSOR command, But note that unlike the CURSOR command, there is no UP keyword. WaitFlag=0 sets the NOWAIT keyword WaitFlag=1 sets the WAIT keyword {default} WaitFlag=2 sets the CHANGE keyword WaitFlag=3 sets the DOWN keyword OPTIONAL OUTPUTS: X - a named variable to receive the final cursor X position, scalar or vector (if /ACCUMULATE is set) Y - a named variable to receive the final cursor Y position, scalar or vector (if /ACCUMULATE is set) OPTIONAL KEYWORD INPUT PARAMETERS: /DATA - data coordinates are displayed and returned. /DEVICE - device coordinates are displayed and returned. /NORMAL - normal coordinates are displayed and returned. Default is to use DATA coordinates if available (see notes). /NOWAIT = if non-zero the routine will immediately return the cursor's present position. /WAIT - if non-zero will wait for a mouse key click before returning. If cursor key is already down, then procedure immediately exits. /DOWN - equivalent to WAIT *except* that if the mouse key is already down when the procedure is called, the procedure will wait until the mouse key is clicked down again. /CHANGE - returns when the mouse is moved OR a key is clicked up or down. PRINT = if non-zero will continuously print out (at the terminal) the data values of the cursor's position. If PRINT>1, program will printout a brief header describing the mouse button functions. However, note that the button functions are overridden if any of the DOWN, WAIT, or CHANGE values are non-zero. XTITLE = label used to describe the values of the abscissa if PRINT>0. YTITLE = label used to describe the values of the ordinate if PRINT>0. XVALUES = a vector corresponding to the values to be printed when the PRINT keyword is set. This allows the user the option of printing out other values rather than the default X coordinate position of the cursor. E.g., if XVALUES is a string vector of dates such as ['May 1', 'May 2', ...], then those dates will be printed rather than the X value of the cursor's position: if X=1 then 'May 2' would be printed, etc. This requires that the values of the X coordinate read by the cursor must be positive (can't access negative elements). If XVALUES=-1, then NO values for X will be printed. YVALUES = analogous to the XVALUES keyword. /FULLCURSOR - if non-zero default cursor is blanked out and full-screen (or full plot window, depending on the value of NOCLIP) lines are drawn; their intersecton is centered on the cursor position. /NOCLIP - if non-zero will make a full-screen cursor, otherwise it will default to the value in !P.NOCLIP. LINESTYLE = style of line that makes the full-screen cursor. THICK = thickness of the line that makes the full-screen cursor. COLOR = color of the full-screen cursor. BACKGROUND = color of the background of the plot device. If this has been set to !P.BackGround, then this keyword is unnecessary. CROSS = if non-zero will show the regular cross AND full screen cursors. /ACCUMULATE - all of the positions for which the left button was clicked are stored in the X and Y variables. Has no effect if X and Y are not present. OPTIONAL KEYWORD OUTPUT PARAMETER: ERR = returns the most recent value of the !mouse.button value. NOTES: Note that this procedure does not allow the "UP" keyword/flag...which doesn't seem to work too well in the origianl CURSOR version anyway. If a data coordinate system has not been established, then RDPLOT will create one identical to the device coordinate system. Note that this kluge is required even if the user specified /NORMAL coordinates, since RDPLOT makes use of the OPLOT procedure. This new data coordinate system is effectively "erased" (!X.CRange and !Y.CRange are both set to zero) upon exit of the routine so as to not change the plot status from the user's point of view. Only tested on X-windows systems. If this program is interrupted, the graphics function might be left in a non-standard state; in that case, run the program RESET_RDPLOT to return the standard graphics functions, or type the command: DEVICE, /CURSOR_CROSS, SET_GRAPHICS=3, BYPASS=0 Robishaw added /ACCUMULATE keyword to pass back all the positions at which the mouse was left-clicked. In addition, the value of the exit click is returned unless the cursor did not change position between the last left-click and the exit click. BUGS: NOTE: (1/27/05) The bugs below have been fixed by Robishaw and tested on Solaris, Linux and OS-X. It is assumed that the current background of the plot is correctly defined by the value in !P.Background. Otherwise, the color of the long cursor probably will not be correct. Sometimes the color doesn't work anyway, and I'm not sure why. NOTE: Robishaw fixed this 1/27/05. There may be some cases (e.g., when THICK>1 and NOCLIP=0) when the full-screen cursor is not correctly erased, leaving "ghost images" on the plot. It just seems that the screen updates get slow or the positions ambiguous with a thick line and the cursor off the plot. NOTE: Robishaw fixed this 1/27/05. PROCEDURE: Basically is a bells-n-whistles version of the CURSOR procedure. All the details are covered in the above discussion of the keywords. EXAMPLES: A silly, but informative one: Months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', $ 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] plot, indgen(12), xrange=[-5, 15] rdplot, /FULL, /PRINT, XTITLE='Month: ', YTITLE='Y-value per month = ', $ xvalues=Months If your plot has a non-black background color, be sure to set either !p.background or the BACKGROUND keyword. Here are examples of how to use a blue full-screen cursor on a plot with a red background and yellow axes and data. First, deal with color decomposition off: device, decomposed=0 tvlct, [255,255,0], [0,255,0], [0,0,255], 1 plot, randomn(seed,1024), XSTYLE=19, PSYM=3, COLOR=2, BACK=1 rdplot, /PRINT, /FULL, THICK=5, /NOCLIP, BACK=1, COLOR=3 For decomposition on (TrueColor or DirectColor only): device, decomposed=1 plot, randomn(seed,1024), XSTYLE=19, PSYM=3, COLOR=65535l, BACK=255l rdplot, /PRINT, /FULL, THICK=5, /NOCLIP, BACK=255l, COLOR=16711680l MODIFICATION HISTORY: Written (originally named CURFULL) by J.Wm.Parker 1993 Nov 22 Created data coordinates if not already present, W. Landsman Nov. 93 Added continuous printout of data values, COLOR and FULLCURSOR keywords (so that default is that it acts just like the cursor command). Changed name from CURFULL to RDPLOT. J.Wm.Parker 1994 Apr 20 Modified (with some translation table assistance from the IDL support group) to correctly plot the crosshair with the desired IDL color using the device's translation table to determine the XOR function and using the BYPASS function. Added the RESET_RDPLOT procedure to cleanup crashes that might occur while running RDPLOT. Other minor changes/bug fixes. J.Wm.Parker 1994 May 21 Modified DOWN, WAIT, CHANGE functions to behave more similar to the generic CURSOR procedure. J.Wm.Parker 1995 April 24 Added XVALUES, YVALUES keywords and cleanup. J.Wm.Parker 1995 April 24 Convert to IDL V5.0, W. Landsman July 1998 Change !D.NCOLORS to !D.TABLE_SIZE for 24 bit displays W. Landsman May 2000 Skip translation table for TrueColor visuals W. Landsman March 2001 Fixed /FULLCURSOR ghosts. Fixed to properly deal with background colors in 24-bit visual classes (TrueColor and DirectColor). Added BACKGROUND keyword. Tim Robishaw 2005 Jan 27 Added /ACCUMULATE keyword. T. Robishaw 2006 Nov 8 Corrected following problems. When /CHANGE and /PRINT were set, returned X & Y were different than those printed. When /PRINT and /NOWAIT were set, or /PRINT and /WAIT were set and the routine was entered with a mouse button clicked, nothing was printed. When /PRINT and /DOWN were set, if routine was started with button down, advertised behavior was that routine would exit on next down click; in practice if cursor was not moved, successive down clicks had no effect. Now, if X is passed as an output variable, requires that Y is also passed, like CURSOR. Bottom line is that RDPLOT now really does behave like CURSOR and when /PRINT is set, the values printed correspond to those returned in X & Y. T. Robishaw 2006 Nov 12 Fixed misbehavior when color decomposition was set to off for TrueColor and DirectColor. Now thoroughly tested on PseudoColor displays as well as both decomposition states for TrueColor and DirectColor. Also made the default cursor color white when decomposition is on (this has been its default value for decomposition off). T. Robishaw 2006 Nov 16
(See $IDLUTILS_DIR/goddard/pro/plot/rdplot.pro)
RDPSF
NAME: RDPSF PURPOSE: Read the FITS file created by GETPSF in the DAOPHOT sequence EXPLANATION: Combines the Gaussian with the residuals to create an output PSF array. CALLING SEQUENCE: RDPSF, PSF, HPSF, [ PSFname] OPTIONAL INPUTS PSFname - string giving the name of the FITS file containing the PSF residuals OUTPUTS psf - array containing the actual PSF hpsf - header associated with psf PROCEDURES CALLED: DAO_VALUE(), MAKE_2D, SXADDPAR, READFITS(), SXPAR() REVISION HISTORY: Written W. Landsman December, 1988 Checked for IDL Version 2, J. Isensee & J. Hill, December, 1990 Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/idlphot/rdpsf.pro)
READCOL
NAME: READCOL PURPOSE: Read a free-format ASCII file with columns of data into IDL vectors EXPLANATION: Lines of data not meeting the specified format (e.g. comments) are ignored. By default, columns may be separated by commas or spaces. Use READFMT to read a fixed-format ASCII file. Use RDFLOAT for much faster I/O (but less flexibility). Use FORPRINT to write columns of data (inverse of READCOL). If you sure that all lines meet the specified format (excluding commented and SKIPed lines) then the speed for reading large files can be significantly improved by setting the /QUICK keyword. CALLING SEQUENCE: READCOL, name, v1, [ v2, v3, v4, v5, ... v40 , COMMENT=, /NAN DELIMITER= ,FORMAT = , /DEBUG , /SILENT , SKIPLINE = , NUMLINE = COUNT =, STRINGSKIP= INPUTS: NAME - Name of ASCII data file, scalar string. OPTIONAL INPUT KEYWORDS: FORMAT - scalar string containing a letter specifying an IDL type for each column of data to be read. Allowed letters are A - string data, B - byte, D - double precision, F- floating point, I - short integer, L - longword, LL - 64 bit integer, U - unsigned short integer, UL - unsigned long integer Z - longword hexadecimal, and X - skip a column. Columns without a specified format are assumed to be floating point. Examples of valid values of FMT are 'A,B,I' ;First column to read as a character string, then 1 column of byte data, 1 column integer data 'L,L,L,L' ;Four columns will be read as longword arrays. ' ' ;All columns are floating point If a FORMAT keyword string is not supplied, then all columns are assumed to be floating point. /SILENT - Normally, READCOL will display each line that it skips over. If SILENT is set and non-zero then these messages will be suppressed. /DEBUG - If this keyword is non-zero, then additional information is printed as READCOL attempts to read and interpret the file. COMMENT - single character specifying comment character. Any line beginning with this character will be skipped. Default is no comment lines. /COMPRESS - If set, then the file is assumed to be gzip compressed. There is no automatic recognition of compressed files by extension type. DELIMITER - Character(s) specifying delimiter used to separate columns. Usually a single character but, e.g. delimiter=':,' specifies that either a colon or comma as a delimiter. Set DELIM = string(9b) to read tab separated data The default delimiter is either a comma or a blank. /NAN - if set, then an empty field will be read into a floating or double numeric variable as NaN; by default an empty field is converted to 0.0. /PRESERVE_NULL - If set, then spaces are considered to be valid fields, useful if the columns contain missing data. Note that between April and December 2006, /PRESERVE_NULL was the default. /QUICK - If set, then READCOL does not check that each individual line matches the supplied format. This makes READCOL less flexible but can provide a significant speed improvement when reading large files. SKIPLINE - Scalar specifying number of lines to skip at the top of file before reading. Default is to start at the first line. NUMLINE - Scalar specifying number of lines in the file to read. Default is to read the entire file STRINGSKIP - will skip all lines that begin with the specified string. (Unlike COMMENT this can be more than 1 character.) Useful to skip over comment lines. OUTPUTS: V1,V2,V3,...V40 - IDL vectors to contain columns of data. Up to 40 columns may be read. The type of the output vectors are as specified by FORMAT. OPTIONAL OUTPUT KEYWORDS: COUNT - integer giving the number of valid lines actually read NLINES - integer giving the total number of lines in the file (as returned by FILE_LINES) EXAMPLES: Each row in a file position.dat contains a star name and 6 columns of data giving an RA and Dec in sexigesimal format. Read into IDL variables. (NOTE: The star names must not include the delimiter as a part of the name, no spaces or commas as default.) IDL> FMT = 'A,I,I,F,I,I,F' IDL> READCOL,'position.dat',F=FMT,name,hr,min,sec,deg,dmin,dsec The HR,MIN,DEG, and DMIN variables will be integer vectors. Alternatively, all except the first column could be specified as floating point. IDL> READCOL,'position.dat',F='A',name,hr,min,sec,deg,dmin,dsec To read just the variables HR,MIN,SEC IDL> READCOL,'position.dat',F='X,I,I,F',HR,MIN,SEC RESTRICTIONS: This procedure is designed for generality and not for speed. If a large ASCII file is to be read repeatedly, it may be worth writing a specialized reader. Columns to be read as strings must not contain the delimiter character (i.e. commas or spaces by default). Either change the default delimiter with the DELIMITER keyword, or use READFMT to read such files. Numeric values are converted to specified format. For example, the value 0.13 read with an 'I' format will be converted to 0. PROCEDURES CALLED GETTOK(), STRNUMBER() The version of STRNUMBER() must be after August 2006. REVISION HISTORY: Written W. Landsman November, 1988 Modified J. Bloch June, 1991 (Fixed problem with over allocation of logical units.) Added SKIPLINE and NUMLINE keywords W. Landsman March 92 Read a maximum of 25 cols. Joan Isensee, Hughes STX Corp., 15-SEP-93. Call NUMLINES() function W. Landsman Feb. 1996 Added DELIMITER keyword W. Landsman Nov. 1999 Fix indexing typos (i for k) that mysteriously appeared W. L. Mar. 2000 Hexadecimal support added. MRG, RITSS, 15 March 2000. Default is comma or space delimiters as advertised W.L. July 2001 Faster algorithm, use STRSPLIT if V5.3 or later W.L. May 2002 Accept null strings separated by delimiter ,e.g. ',,,' Use SCOPE_VARFETCH instead of EXECUTE() for >V6.1 W.L. Jun 2005 Added compile_opt idl2 W. L. July 2005 Added the NaN keyword W. L August 2006 Added /PRESERVE_NULL keyword W.L. January 2007 Assume since V5.6 (FILE_LINES available ) W.L. Nov 2007 Added COUNT output keyword W.L. Aug 2008 Added NLINES output keyword W.L. Nov 2008 Added SKIPSTART keyword Stephane Beland January 2008 Renamed SKIPSTART to STRINGSKIP to keep meaning of SKIP W.L. Feb 2008 Assume since V6.1, SCOPE_VARFETCH available W.L. July 2009 Read up to 40 columns W.L. Aug 2009 Use pointers instead of SCOPE_VARFETCH. Fixes bug with IDL Workbench and runs 20% faster Douglas J. Marshall/W.L. Nov 2009 Recognize LL, UL, and ULL data types, don't use 'val' output from STRNUMBER() W.L. Feb 2010 Graceful return even if no valid lines are present D. Sahnow April 2010 Ability to read tab separated data WL April 2010 Free memory used by pointers WL July 2010 Added /QUICK keyword WL Sep 2010 Accept normal FORTRAN formats (e.g. F5.1) P. Noterdaeme/W.L Jan 2011 Add COMPRESS keyword, IDL 6 notation W. Landsman/J. Bailin Feb 2011 Allow filename to be 1 element array W.Landsman/S.Antonille Apr 2011
(See $IDLUTILS_DIR/goddard/pro/misc/readcol.pro)
READFITS
NAME: READFITS PURPOSE: Read a FITS file into IDL data and header variables. EXPLANATION: READFITS() can read FITS files compressed with gzip or Unix (.Z) compression. FPACK ( http://heasarc.gsfc.nasa.gov/fitsio/fpack/ ) compressed FITS files can also be read provided that the FPACK software is installed. See http://idlastro.gsfc.nasa.gov/fitsio.html for other ways of reading FITS files with IDL. CALLING SEQUENCE: Result = READFITS( Filename/Fileunit,[ Header, heap, /NOSCALE, EXTEN_NO=, NSLICE=, /SILENT , STARTROW =, NUMROW = , HBUFFER=, /CHECKSUM, /COMPRESS, /FPACK, /No_Unsigned, NaNVALUE = ] INPUTS: Filename = Scalar string containing the name of the FITS file (including extension) to be read. If the filename has a *.gz extension, it will be treated as a gzip compressed file. If it has a .Z extension, it will be treated as a Unix compressed file. If Filename is an empty string then the user will be queried for the file name. OR Fileunit - A scalar integer specifying the unit of an already opened FITS file. The unit will remain open after exiting READFITS(). There are two possible reasons for choosing to specify a unit number rather than a file name: (1) For a FITS file with many extensions, one can move to the desired extensions with FXPOSIT() and then use READFITS(). This is more efficient than repeatedly starting at the beginning of the file. (2) For reading a FITS file across a Web http: address after opening the unit with the SOCKET procedure OUTPUTS: Result = FITS data array constructed from designated record. If the specified file was not found, then Result = -1 OPTIONAL OUTPUT: Header = String array containing the header from the FITS file. If you don't need the header, then the speed may be improved by not supplying this parameter. Note however, that omitting the header can imply /NOSCALE, i.e. BSCALE and BZERO values may not be applied. heap = For extensions, the optional heap area following the main data array (e.g. for variable length binary extensions). OPTIONAL INPUT KEYWORDS: /CHECKSUM - If set, then READFITS() will call FITS_TEST_CHECKSUM to verify the data integrity if CHECKSUM keywords are present in the FITS header. Cannot be used with the NSLICE, NUMROW or STARTROW keywords, since verifying the checksum requires that all the data be read. See FITS_TEST_CHECKSUM() for more information. /COMPRESS - Signal that the file is gzip compressed. By default, READFITS will assume that if the file name extension ends in '.gz' then the file is gzip compressed. The /COMPRESS keyword is required only if the the gzip compressed file name does not end in '.gz' or .ftz EXTEN_NO - non-negative scalar integer specifying the FITS extension to read. For example, specify EXTEN = 1 or /EXTEN to read the first FITS extension. /FPACK - Signal that the file is compressed with the FPACK software. http://heasarc.gsfc.nasa.gov/fitsio/fpack/ ) By default, (READFITS will assume that if the file name extension ends in .fz that it is fpack compressed. The FPACK software must be installed on the system HBUFFER - Number of lines in the header, set this to slightly larger than the expected number of lines in the FITS header, to improve performance when reading very large FITS headers. Should be a multiple of 36 -- otherwise it will be modified to the next higher multiple of 36. Default is 180 /NOSCALE - If present and non-zero, then the ouput data will not be scaled using the optional BSCALE and BZERO keywords in the FITS header. Default is to scale. /NO_UNSIGNED - By default, if the header indicates an unsigned integer (BITPIX = 16, BZERO=2^15, BSCALE=1) then READFITS() will output an IDL unsigned integer data type (UINT). But if /NO_UNSIGNED is set, then the data is converted to type LONG. NSLICE - An integer scalar specifying which N-1 dimensional slice of a N-dimensional array to read. For example, if the primary image of a file 'wfpc.fits' contains a 800 x 800 x 4 array, then IDL> im = readfits('wfpc.fits',h, nslice=2) is equivalent to IDL> im = readfits('wfpc.fits',h) IDL> im = im[*,*,2] but the use of the NSLICE keyword is much more efficient. Note that any degenerate dimensions are ignored, so that the above code would also work with a 800 x 800 x 4 x 1 array. NUMROW - Scalar non-negative integer specifying the number of rows of the image or table extension to read. Useful when one does not want to read the entire image or table. POINT_LUN - Position (in bytes) in the FITS file at which to start reading. Useful if READFITS is called by another procedure which needs to directly read a FITS extension. Should always be a multiple of 2880, and not be used with EXTEN_NO keyword. /SILENT - Normally, READFITS will display the size the array at the terminal. The SILENT keyword will suppress this STARTROW - Non-negative integer scalar specifying the row of the image or extension table at which to begin reading. Useful when one does not want to read the entire table. NaNVALUE - This keyword is included only for backwards compatibility with routines that require IEEE "not a number" values to be converted to a regular value. /UNIXPIPE - When a FileUnit is supplied to READFITS(), then /UNIXPIPE indicates that the unit is to a Unix pipe, and that no automatic byte swapping is performed. EXAMPLE: Read a FITS file test.fits into an IDL image array, IM and FITS header array, H. Do not scale the data with BSCALE and BZERO. IDL> im = READFITS( 'test.fits', h, /NOSCALE) If the file contains a FITS extension, it could be read with IDL> tab = READFITS( 'test.fits', htab, /EXTEN ) The function TBGET() can be used for further processing of a binary table, and FTGET() for an ASCII table. To read only rows 100-149 of the FITS extension, IDL> tab = READFITS( 'test.fits', htab, /EXTEN, STARTR=100, NUMR = 50 ) To read in a file that has been compressed: IDL> tab = READFITS('test.fits.gz',h) ERROR HANDLING: If an error is encountered reading the FITS file, then (1) the system variable !ERROR_STATE.CODE is set negative (via the MESSAGE facility) (2) the error message is displayed (unless /SILENT is set), and the message is also stored in !!ERROR_STATE.MSG (3) READFITS returns with a value of -1 RESTRICTIONS: (1) Cannot handle random group FITS NOTES: (1) If data is stored as integer (BITPIX = 16 or 32), and BSCALE and/or BZERO keywords are present, then the output array is scaled to floating point (unless /NOSCALE is present) using the values of BSCALE and BZERO. In the header, the values of BSCALE and BZERO are then reset to 1. and 0., while the original values are written into the new keywords O_BSCALE and O_BZERO. If the BLANK keyword was present (giving the value of undefined elements *prior* to the application of BZERO and BSCALE) then the *keyword* value will be updated with the values of BZERO and BSCALE. (2) The use of the NSLICE keyword is incompatible with the NUMROW or STARTROW keywords. (3) On some Unix shells, one may get a "Broken pipe" message if reading a Unix compressed (.Z) file, and not reading to the end of the file (i.e. the decompression has not gone to completion). This is an informative message only, and should not affect the output of READFITS. PROCEDURES USED: Functions: SXPAR() Procedures: MRD_SKIP, SXADDPAR, SXDELPAR MODIFICATION HISTORY: Original Version written in 1988, W.B. Landsman Raytheon STX Revision History prior to October 1998 removed Major rewrite to eliminate recursive calls when reading extensions W.B. Landsman Raytheon STX October 1998 Add /binary modifier needed for Windows W. Landsman April 1999 Read unsigned datatypes, added /no_unsigned W. Landsman December 1999 Output BZERO = 0 for unsigned data types W. Landsman January 2000 Update to V5.3 (see notes) W. Landsman February 2000 Fixed logic error in use of NSLICE keyword W. Landsman March 2000 Fixed byte swapping for Unix compress files on little endian machines W. Landsman April 2000 Added COMPRESS keyword, catch IO errors W. Landsman September 2000 Option to read a unit number rather than file name W.L October 2001 Fix undefined variable problem if unit number supplied W.L. August 2002 Don't read entire header unless needed W. Landsman Jan. 2003 Added HBUFFER keyword W. Landsman Feb. 2003 Added CHECKSUM keyword W. Landsman May 2003 Restored NaNVALUE keyword for backwards compatibility, William Thompson, 16-Aug-2004, GSFC Recognize .ftz extension as compressed W. Landsman September 2004 Fix unsigned integer problem introduced Sep 2004 W. Landsman Feb 2005 Don't modify header for unsigned integers, preserve double precision BSCALE value W. Landsman March 2006 Use gzip instead of compress for Unix compress files W.Landsman Sep 2006 Call MRD_SKIP to skip bytes on different file types W. Landsman Oct 2006 Make ndata 64bit for very large files E. Hivon/W. Landsman May 2007 Fixed bug introduced March 2006 in applying Bzero C. Magri/W.L. Aug 2007 Check possible 32bit overflow when using NSKIP W. Landsman Mar 2008 Always reset BSCALE, BZERO even for unsigned integers W. Landsman May 2008 Make ndata 64bit for very large extensions J. Schou/W. Landsman Jan 2009 Use PRODUCT() to compute # of data points W. Landsman May 2009 Read FPACK compressed file via UNIX pipe. W. Landsman May 2009 Fix error using NUMROW,STARTROW with non-byte data, allow these keywords to be used with primary array W. Landsman July 2009 Ignore degenerate trailing dimensions with NSLICE keyword W.L. Oct 2009 Add DIALOG_PICKFILE() if filename is an empty string W.L. Apr 2010 Set BLANK values *before* applying BSCALE,BZERO, use short-circuit operators W.L. May 2010 Skip extra SPAWN with FPACK decompress J. Eastman, W.L. July 2010 Fix possible problem when startrow=0 supplied J. Eastman/W.L. Aug 2010 First header is not necessarily primary if unit supplied WL Jan 2011
(See $IDLUTILS_DIR/goddard/pro/fits/readfits.pro)
READFMT
NAME: READFMT PURPOSE: Quickly read a fixed format ASCII data file into IDL variables. EXPLANATION: Lines of data not meeting the specified format (e.g. comments) are ignored. To read a free format ASCII data file use the procedures READCOL or RDFLOAT. To print (formatted or free) columns of data use the procedure FORPRINT. CALLING SEQUENCE: READFMT, name, fmt, v1,[ v2, v3, v4, ..., v25 , /SILENT, /DEBUG, SKIPLINE= , NUMLINE =] INPUTS: NAME - Name of ASCII data file. An extension of .DAT is assumed, if not supplied. FMT - scalar string containing a valid FORTRAN read format. Must include a field length specification. Cannot include internal parenthesis. A format field must be included for each output vector. Multiple format fields are allowed, but the repetition factor must be less than 100, (.i.e. 19X is allowed but 117X is illegal) Examples of valid FMT values are FMT = 'A7,3X,2I4' or FMT = '1H ,5I7,2A7' Examples of INVALID FMT values are FMT = 'A7,B3' ;'B' is not a valid FORTRAN format FMT = 'A7,2(I3,F5.1)' ;Internal parenthesis not allowed FMT = 'A7,F,I' ;Field length not included OUTPUTS: V1,V2,V3,V4... - IDL vectors to contain columns of data. Up to 25 output vectors may be read. The type of the output vectors are specified by FMT. OPTIONAL KEYWORD INPUTS: /SILENT - If this keyword is set and non-zero, then certain terminal output is suppressed while reading the file /DEBUG - Set this keyword to display additional information while reading the file. SKIPLINE - Scalar specifying number of lines to skip at the top of file before reading. Default is to start at first line NUMLINE - Scalar specifying number of lines in the file to read. Default is to read the entire file EXAMPLES: Each row in a fixed-format file POSITION.DAT contains a 5 character star name and 6 columns of data giving an RA and Dec in sexigesimal format. A possible format for such data might be IDL> FMT = 'A5,2I3,F5.1,2x,3I3' and the file could be quickly read with IDL> READFMT,'POSITION', fmt, name, hr, min, sec, deg, dmin, dsec NAME will be a string vector,SEC will be a floating point vector, and the other vectors will be of integer type. RESTRICTIONS: This procedure is designed for generality and not for speed. If a large ASCII file is to be read repeatedly, it may be worth writing a specialized reader. NOTES: When reading a field with an integer format I<n>, the output vector is byte - if n = 1 integer*2 - if 1 < n < 5 integer*4 - in all other cases Octal ('O') and hexadecimal ('Z') formats are read into longwords PROCEDURE CALLS: GETTOK(), REMCHAR, ZPARCHECK REVISION HISTORY: Written W. Landsman November, 1988 Added SKIPLINE and NUMLINE keywords March 92 Allow up to 25 columns to be read June 92 Call NUMLINES() function Feb 1996 Recognize 'O' and 'Z' formats W. Landsman September 1997 Recognize 'G' format, use SKIP_LUN W. Landsman May 2010
(See $IDLUTILS_DIR/goddard/pro/misc/readfmt.pro)
READ_FMR
NAME: READ_FMR PURPOSE: Read a journal (ApJ, AJ) machine-readable table into IDL EXPLANATION: Given a machine readable table name and optionally column numbers, this FUNCTION reads the format information in the meta-header and outputs a IDL function containing either the complete table or only the requested columns. CALLING SEQUENCE: data = read_fmr(filename) INPUTS: filename [STRING]: the name of the file containing the machine readable table. If filename is missing a dialog to select the filename will be presented INPUT KEYWORD PARAMETERS: /HELP - if set show the help COLUMNS - [(array of) integers or strings] of column(s) to be returned. If columns is of type integer they represent indices for which column numbers to return, if they are strings the columns with the corresponding names will be returned in the order as given. MISSINGVALUE [float]: value with which to replace the missing values in the table, default is NaN. /USE_COLNUM - If specified and non-zero then column names will be generated as 'C1, C2, .... Cn' for the number of columns in the table, rather than using the table names. OUTPUTS: The ouput data structure will look like: TYPE STRING 'mr_structure' NAME STRING Array[X] UNIT STRING Array[X] DESCRIPTION STRING Array[X] DATA STRUCT -> <Anonymous> Array[1] where name contains the names of each columns unit contains the given units description contains the short descriptions and data holds the values of the separate columns. By default the tag names are taken from the column names, with modifications necessary to make them a valid tag name. For example, the column name 'B-V' will be converted to 'B_V' to become a valid tag name. If the /USE_COLNUM keyword is set, then the column will be named C0, C1, ... , CX, where X stands for the total number of columns read. RESTRICTIONS: (1) The file to be read should be formatted as a machine readable datafile. (2) Use of the COLUMN keyword currently requires use of the EXECUTE, and so cannot be used with the IDL Virtural machine. EXAMPLE: meas = read_fmr('smith.dat',col=[2,5,6], /Use_colnum) plot,meas.data.c1,ytitle=meas.name[1]+' ('+meas.unit[1]+')' and data = read_fmr('smith.dat',col=['Name','Date'], /Use_colnum) print,meas.data.c0 MODIFICATION HISTORY: Version 1: Written by Sacha Hony (ESA) Nov 14 2003 Based heavily on mrcolextract by Greg Schwarz (AAS Journals staff scientist) on 8/16/00. Version 1.1: Fixed bug where column=[3,4] always returned the first few columns VErsion 2.0 By default use column names as tag names W. Landsman Feb 2010
(See $IDLUTILS_DIR/goddard/pro/disk_io/read_fmr.pro)
READ_KEY
NAME: READ_KEY PURPOSE: To read a keystroke and return its ASCII equivalent EXPLANATION: If an ESCAPE sequence was produced and the sequence is recognized (e.g. up arrow), then a code is returned. This functionality is mostly made obsolete by the addition of the ESCAPE and KEY_NAME keywords to GET_KBRD in IDL V6.2 CALLING SEQUENCE: key = READ_KEY(Wait) INPUTS: Wait - The wait flag. If non-zero, execution is halted until a key is struck. If zero, execution returns immediately and a zero is returned if there was no keystroke waiting in the keyboard buffer. If not specified, zero is assumed. OUTPUT: Returned - The key struck. The ASCII code for non-escape sequences. Escape sequence equivalents: Up Arrow -- 128 Down Arrow -- 130 Left Arrow -- 129 Right Arrow -- 131 Else -- 0 The return value is a byte value. MODIFICATION HISTORY: Written by Michael R. Greason, STX, 22 June 1990. Rewritten for a SUN workstation. MRG, STX, 23 August 1990. Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/misc/read_key.pro)
RECPOL
NAME: RECPOL PURPOSE: Convert 2-d rectangular coordinates to polar coordinates. CATEGORY: CALLING SEQUENCE: recpol, x, y, r, a INPUTS: x, y = vector in rectangular form. in KEYWORD PARAMETERS: Keywords: /DEGREES means angle is in degrees, else radians. OUTPUTS: r, a = vector in polar form: radius, angle. out COMMON BLOCKS: NOTES: MODIFICATION HISTORY: R. Sterner. 18 Aug, 1986. Johns Hopkins University Applied Physics Laboratory. RES 13 Feb, 1991 --- added /degrees. R. Sterner, 30 Dec, 1991 --- simplified. R. Sterner, 25 May, 1993 --- Fixed atan (0,0) problem. Copyright (C) 1986, 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. Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/jhuapl/recpol.pro)
REMCHAR
NAME: REMCHAR PURPOSE: Remove all appearances of character (char) from string (st) CALLING SEQUENCE: REMCHAR, ST, CHAR INPUT-OUTPUT: ST - String from which character will be removed, scalar or vector INPUT: CHAR- Single character to be removed from string or all elements of a string array EXAMPLE: If a = 'a,b,c,d,e,f,g' then IDL> remchar,a, ',' will give a = 'abcdefg' REVISIONS HISTORY Written D. Lindler October 1986 Test if empty string needs to be returned W. Landsman Feb 1991 Work on string arrays W. Landsman August 1997 Avoid 32 bit integer overflow K. Tolbert/W. Landsman Feb 2007
(See $IDLUTILS_DIR/goddard/pro/misc/remchar.pro)
REMOVE
NAME: REMOVE PURPOSE: Contract a vector or up to 25 vectors by removing specified elements CALLING SEQUENCE: REMOVE, index, v1,[ v2, v3, v4, v5, v6, ... v25] INPUTS: INDEX - scalar or vector giving the index number of elements to be removed from vectors. Duplicate entries in index are ignored. An error will occur if one attempts to remove all the elements of a vector. REMOVE will return quietly (no error message) if index is !NULL or undefined. INPUT-OUTPUT: v1 - Vector or array. Elements specifed by INDEX will be removed from v1. Upon return v1 will contain N fewer elements, where N is the number of distinct values in INDEX. OPTIONAL INPUT-OUTPUTS: v2,v3,...v25 - additional vectors containing the same number of elements as v1. These will be contracted in the same manner as v1. EXAMPLES: (1) If INDEX = [2,4,6,4] and V = [1,3,4,3,2,5,7,3] then after the call IDL> remove,index,v V will contain the values [1,3,3,5,3] (2) Suppose one has a wavelength vector W, and three associated flux vectors F1, F2, and F3. Remove all points where a quality vector, EPS is negative IDL> bad = where( EPS LT 0, Nbad) IDL> if Nbad GT 0 then remove, bad, w, f1, f2, f3 METHOD: If more than one element is to be removed, then HISTOGRAM is used to generate a 'keep' subscripting vector. To minimize the length of the subscripting vector, it is only computed between the minimum and maximum values of the index. Therefore, the slowest case of REMOVE is when both the first and last element are removed. REVISION HISTORY: Written W. Landsman ST Systems Co. April 28, 1988 Cleaned up code W. Landsman September, 1992 Major rewrite for improved speed W. Landsman April 2000 Accept up to 25 variables, use SCOPE_VARFETCH internally W. Landsman Feb 2010 Fix occasional integer overflow problem V. Geers Feb 2011 Quietly return if index is !null or undefined W.L. Aug 2011
(See $IDLUTILS_DIR/goddard/pro/misc/remove.pro)
REM_DUP
NAME: REM_DUP PURPOSE: Function to remove duplicate values from a vector. CALLING SEQUENCE: result = rem_dup( a, [ flag ] ) INPUTS: a - vector of values from which duplicates are to be found flag - (optional) if supplied then when duplicates occur, the one with the largest value of flag is selected. If not supplied the the first occurence of the value in a is selected. Should be a vector with the same number of elements as a. OUTPUT: A vector of subscripts in a is returned. Each subscript points to a selected value such that a(rem_dup(a,flag)) has no duplicates. SIDE EFFECTS: The returned subscripts will sort the values in a in ascending order with duplicates removed. EXAMPLES: Remove duplicate values in vector a. a = a[ rem_dup(a)] Remove duplicates in vector WAVE. When duplicate values are found, select the one with the largest intensity, INTE. sub = rem_dup( wave, inte) wave = wave[sub] inte = inte[sub] NOTES: The UNIQ function in the User's Library uses a faster algorithm, but has no equivalent of the "flag" parameter. Also, note that REM_DUP() gives the index of the *first* equal value found, while UNIQ() gives the index of the *last* equal value found. MODIFICATION HISTORY: D. Lindler Mar. 87 11/16/90 JKF ACC - converted to IDL Version 2. August 1997 -- Changed loop index to type LONG October 1997 -- Also changed NGOOD index to LONG April 2007 - Use faster algorithm when Flag vector not set, W. Landsman Feb 2011 - Remove spurious line W.L. Jan 2012 - Call BSORT() to ensure original order maintained for equal values
(See $IDLUTILS_DIR/goddard/pro/misc/rem_dup.pro)
REPCHR
NAME: REPCHR PURPOSE: Replace all occurrences of one character with another in a text string. CATEGORY: CALLING SEQUENCE: new = repchr(old, c1, [c2]) INPUTS: old = original text string. in c1 = character to replace. in c2 = character to replace it with. in default is space. KEYWORD PARAMETERS: OUTPUTS: new = edited string. out COMMON BLOCKS: NOTES: MODIFICATION HISTORY: R. Sterner. 28 Oct, 1986. Johns Hopkins Applied Physics Lab. RES 1 Sep, 1989 --- converted to SUN. R. Sterner, 27 Jan, 1993 --- dropped reference to array. Copyright (C) 1986, 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. Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/jhuapl/repchr.pro)
REPSTR
NAME: REPSTR PURPOSE: Replace all occurences of one substring by another. EXPLANATION: Meant to emulate the string substitution capabilities of text editors For a more sophisticated routine that allows regular expressions look at MG_STRREPLACE() http://docs.idldev.com/idllib/strings/mg_streplace.html CALLING SEQUENCE: result = repstr( obj, in, out ) INPUT PARAMETERS: obj = object string for editing, scalar or array in = substring of 'obj' to be replaced, scalar OPTIONAL INPUT PARMETER: out = what 'in' is replaced with, scalar. If not supplied then out = '', i.e. 'in' is not replaced by anything. OUTPUT PARAMETERS: Result returned as function value. Input object string not changed unless assignment done in calling program. PROCEDURE: Searches for 'in', splits 'obj' into 3 pieces, reassembles with 'out' in place of 'in'. Repeats until all cases done. EXAMPLE: If a = 'I am what I am' then print,repstr(a,'am','was') will give 'I was what I was'. MODIFICATION HISTORY: Written by Robert S. Hill, ST Systems Corp., 12 April 1989. Accept vector object strings, W. Landsman HSTX, April, 1996 Convert loop to LONG, vectorize STRLEN call W. Landsman June 2002 Correct bug in optimization, case where STRLEN(OBJ) EQ STRLEN(IN), C. Markwardt, Jan 2003 Fixed problem when multiple replacements extend the string length D. Finkbeiner, W. Landsman April 2003 Allow third parameter to be optional again W. Landsman August 2003 Remove limitation of 9999 characters, C. Markwardt Dec 2003 Test for empty "in" string (causing infinite loop) W. Landsman Jan 2010 Streamline code W Landsman Dec 2011
(See $IDLUTILS_DIR/goddard/pro/misc/repstr.pro)
RESISTANT_MEAN
NAME: RESISTANT_Mean PURPOSE: Outlier-resistant determination of the mean and standard deviation. EXPLANATION: RESISTANT_Mean trims away outliers using the median and the median absolute deviation. An approximation formula is used to correct for the truncation caused by trimming away outliers CALLING SEQUENCE: RESISTANT_Mean, ARRAY, Sigma_CUT, Mean, Sigma_Mean, Num_RejECTED [/DOUBLE, DIMENSION= , GOODVEC = ] INPUT ARGUMENT: ARRAY = Vector or array to average Sigma_CUT = Data more than this number of standard deviations from the median is ignored. Suggested values: 2.0 and up. OUTPUT ARGUMENT: Mean = the mean of the input array, numeric scalar, If the DIMENSION keyword is set, then MEAN will be an array with one less dimension than the input. OPTIONAL OUTPUTS: Sigma_Mean = the approximate standard deviation of the mean, numeric scalar. This is the Sigma of the distribution divided by sqrt(N-1) where N is the number of unrejected points. The larger SIGMA_CUT, the more accurate. It will tend to underestimate the true uncertainty of the mean, and this may become significant for cuts of 2.0 or less. Num_RejECTED = the number of points trimmed, integer scalar OPTIONAL INPUT KEYWORDS: /DOUBLE - If set, then all calculations are performed internally in double precision. DIMENSION - for a multi-dimensional array, the dimension over which to take the mean, starting at 1. If not set, then the scalar mean over all elements is used. If this argument is present, the result is an array with one less dimension than Array. For example, if the dimensions of Array are N1, N2, N3, and Dimension is 2, then the dimensions of the result are (N1, N3) SUMDIM - Obsolete synonym for DIMENSION OPTIONAL OUTPUT KEYWORD: Goodvec - Indices of non-trimmed elements of the input vector Wused - synonym for Goodvec (for solarsoft compatibility) EXAMPLE: IDL> a = randomn(seed, 10000) ;Normal distribution with 10000 pts IDL> RESISTANT_Mean,a, 3, mean, meansig, num ;3 Sigma clipping IDL> print, mean, meansig,num The mean should be near 0, and meansig should be near 0.01 ( = 1/sqrt(10000) ). PROCEDURES USED: MEAN() - compute simple mean, in Exelis library REVISION HISTORY: Written, H. Freudenreich, STX, 1989; Second iteration added 5/91. Use MEDIAN(/EVEN) W. Landsman April 2002 Correct conditional test, higher order truncation correction formula R. Arendt/W. Landsman June 2002 New truncation formula for sigma H. Freudenriech July 2002 Divide Sigma_mean by Num_good rather than Npts W. Landsman/A. Conley January 2006 Use of double precision S. Bianchi February 2008 More double precision B. Carcich December 2009 Added DIMENSION keyword (from M. Desnoyer) B. Carcich December 2009 Use IDL's MEAN() function instead of AVG() W. Landsman Jan 2012
(See $IDLUTILS_DIR/goddard/pro/robust/resistant_mean.pro)
RINTER
NAME: RINTER PURPOSE: Cubic interpolation of an image at a set of reference points. EXPLANATION: This interpolation program is equivalent to using the intrinsic INTERPOLATE() function with CUBIC = -0.5. However, RINTER() has two advantages: (1) one can optionally obtain the X and Y derivatives at the reference points, and (2) if repeated interpolation is to be applied to an array, then some values can be pre-computed and stored in Common. RINTER() was originally for use with the DAOPHOT procedures, but can also be used for general cubic interpolation. CALLING SEQUENCE: Z = RINTER( P, X, Y, [ DFDX, DFDY ] ) or Z = RINTER(P, /INIT) INPUTS: P - Two dimensional data array, X - Either an N element vector or an N x M element array, containing X subscripts where cubic interpolation is desired. Y - Either an N element vector or an N x M element array, containing Y subscripts where cubic interpolation is desired. OUTPUT: Z - Result = interpolated vector or array. If X and Y are vectors, then so is Z, but if X and Y are arrays then Z will be also. If P is DOUBLE precision, then so is Z, otherwise Z is REAL. OPTIONAL OUTPUT: DFDX - Vector or Array, (same size and type as Z), containing the derivatives with respect to X DFDY - Array containing derivatives with respect to Y OPTIONAL KEYWORD INPUT: /INIT - Perform computations associated only with the input array (i.e. not with X and Y) and store in common. This can save time if repeated calls to RINTER are made using the same array. EXAMPLE: suppose P is a 256 x 256 element array and X = FINDGEN(50)/2. + 100. and Y = X. Then Z will be a 50 element array, containing the cubic interpolated points. SIDE EFFECTS: can be time consuming. RESTRICTION: Interpolation is not possible at positions outside the range of the array (including all negative subscripts), or within 2 pixel units of the edge. No error message is given but values of the output array are meaningless at these positions. PROCEDURE: invokes CUBIC interpolation algorithm to evaluate each element in Z at virtual coordinates contained in X and Y with the data in P. COMMON BLOCKS: If repeated interpolation of the same array is to occur, then one can save time by initializing the common block RINTER. REVISION HISTORY: March 1988 written W. Landsman STX Co. Checked for IDL Version 2, J. Isensee, September, 1990 Corrected call to HISTOGRAM, W. Landsman November 1990 Converted to IDL V5.0 W. Landsman September 1997 Fix output derivatives for 2-d inputs, added /INIT W. Landsman May 2000
(See $IDLUTILS_DIR/goddard/pro/image/rinter.pro)
ROBUST_LINEFIT
NAME: ROBUST_LINEFIT PURPOSE: An outlier-resistant two-variable linear regression. EXPLANATION: Either Y on X or, for the case in which there is no true independent variable, the bisecting line of Y vs X and X vs Y is calculated. No knowledge of the errors of the input points is assumed. CALLING SEQUENCE: COEFF = ROBUST_LINEFIT( X, Y, YFIT, SIG, COEF_SIG, [ /BISECT, BiSquare_Limit = , Close_factor = , NumIT = ] ) INPUTS: X = Independent variable vector, floating-point or double-precision Y = Dependent variable vector OUTPUTS: Function result = coefficient vector. If = 0.0 (scalar), no fit was possible. If vector has more than 2 elements (the last=0) then the fit is dubious. OPTIONAL OUTPUT PARAMETERS: YFIT = Vector of calculated y's SIG = The "standard deviation" of the fit's residuals. If BISECTOR is set, this will be smaller by ~ sqrt(2). COEF_SIG = The estimated standard deviations of the coefficients. If BISECTOR is set, however, this becomes the vector of fit residuals measured orthogonal to the line. OPTIONAL INPUT KEYWORDS: NUMIT = the number of iterations allowed. Default = 25 BISECT if set, the bisector of the "Y vs X" and "X vs Y" fits is determined. The distance PERPENDICULAR to this line is used in calculating weights. This is better when the uncertainties in X and Y are comparable, so there is no true independent variable. Bisquare_Limit Limit used for calculation of bisquare weights. In units of outlier-resistant standard deviations. Default: 6. Smaller limit ==>more resistant, less efficient Close_Factor - Factor used to determine when the calculation has converged. Convergence if the computed standard deviation changes by less than Close_Factor * ( uncertainty of the std dev of a normal distribution ). Default: 0.03. SUBROUTINE CALLS: ROB_CHECKFIT ROBUST_SIGMA, to calculate a robust analog to the std. deviation PROCEDURE: For the initial estimate, the data is sorted by X and broken into 2 groups. A line is fitted to the x and y medians of each group. Bisquare ("Tukey's Biweight") weights are then calculated, using the a limit of 6 outlier-resistant standard deviations. This is done iteratively until the standard deviation changes by less than CLOSE_ENOUGH = CLOSE_FACTOR * {uncertainty of the standard deviation of a normal distribution} REVISION HISTORY: Written, H. Freudenreich, STX, 4/91. 4/13/93 to return more realistic SS's HF 2/94 --more error-checking, changed convergence criterion HF 5/94 --added BISECT option. HF. 8/94 --added Close_Factor and Bisquare_Limit options Jack Saba. 4/02 --V5.0 version, use MEDIAN(/EVEN) W. Landsman
(See $IDLUTILS_DIR/goddard/pro/robust/robust_linefit.pro)
ROBUST_POLY_FIT
NAME: ROBUST_POLY_FIT PURPOSE: An outlier-resistant polynomial fit. CALLING SEQUENCE: COEFF = ROBUST_POLY_FIT(X,Y,NDEGREE ,[ YFIT,SIG, /DOULBE, NUMIT=] ) INPUTS: X = Independent variable vector, floating-point or double-precision Y = Dependent variable vector NDEGREE - integer giving degree of polynomial to fit, maximum = 6 OUTPUTS: Function result = coefficient vector, length NDEGREE+1. IF COEFF=0.0, NO FIT! If N_ELEMENTS(COEFF) > degree+1, the fit is poor (in this case the last element of COEFF=0.) Either floating point or double precision. OPTIONAL OUTPUT PARAMETERS: YFIT = Vector of calculated y's SIG = the "standard deviation" of the residuals OPTIONAL INPUT KEYWORD: /DOUBLE - If set, then force all computations to double precision. NUMIT - Maximum number of iterations to perform, default = 25 RESTRICTIONS: Large values of NDEGREE should be avoided. This routine works best when the number of points >> NDEGREE. PROCEDURE: For the initial estimate, the data is sorted by X and broken into NDEGREE+2 sets. The X,Y medians of each set are fitted to a polynomial via POLY_FIT. Bisquare ("Tukey's Biweight") weights are then calculated, using a limit of 6 outlier-resistant standard deviations. The fit is repeated iteratively until the robust standard deviation of the residuals changes by less than .03xSQRT(.5/(N-1)). PROCEDURES CALLED: POLY(), POLY_FIT() ROB_CHECKFIT() REVISION HISTORY Written, H. Freudenreich, STX, 8/90. Revised 4/91. 2/94 -- changed convergence criterion Added /DOUBLE keyword, remove POLYFITW call W. Landsman Jan 2009
(See $IDLUTILS_DIR/goddard/pro/robust/robust_poly_fit.pro)
ROBUST_SIGMA
NAME: ROBUST_SIGMA PURPOSE: Calculate a resistant estimate of the dispersion of a distribution. EXPLANATION: For an uncontaminated distribution, this is identical to the standard deviation. CALLING SEQUENCE: result = ROBUST_SIGMA( Y, [ /ZERO, GOODVEC = ] ) INPUT: Y = Vector of quantity for which the dispersion is to be calculated OPTIONAL INPUT KEYWORD: /ZERO - if set, the dispersion is calculated w.r.t. 0.0 rather than the central value of the vector. If Y is a vector of residuals, this should be set. OPTIONAL OUPTUT KEYWORD: GOODVEC = Vector of non-trimmed indices of the input vector OUTPUT: ROBUST_SIGMA returns the dispersion. In case of failure, returns value of -1.0 PROCEDURE: Use the median absolute deviation as the initial estimate, then weight points using Tukey's Biweight. See, for example, "Understanding Robust and Exploratory Data Analysis," by Hoaglin, Mosteller and Tukey, John Wiley & Sons, 1983, or equation 9 in Beers et al. (1990, AJ, 100, 32) REVSION HISTORY: H. Freudenreich, STX, 8/90 Replace MED() call with MEDIAN(/EVEN) W. Landsman December 2001 Don't count NaN values W.Landsman June 2010
(See $IDLUTILS_DIR/goddard/pro/robust/robust_sigma.pro)
ROB_CHECKFIT
NAME: ROB_CHECKFIT PURPOSE: Used by ROBUST_... routines to determine the quality of a fit and to return biweights. CALLING SEQUENCE: status = ROB_CHECKFIT( Y, YFIT, EPS, DEL, SIG, FRACDEV, NGOOD, W, B BISQUARE_LIMIT = ) INPUT: Y = the data YFIT = the fit to the data EPS = the "too small" limit DEL = the "close enough" for the fractional median abs. deviations RETURNS: Integer status. if =1, the fit is considered to have converged OUTPUTS: SIG = robust standard deviation analog FRACDEV = the fractional median absolute deviation of the residuals NGOOD = the number of input point given non-zero weight in the calculation W = the bisquare weights of Y B = residuals scaled by sigma OPTIONAL INPUT KEYWORD: BISQUARE_LIMIT = allows changing the bisquare weight limit from default 6.0 PROCEDURES USED: ROBUST_SIGMA() REVISION HISTORY: Written, H.T. Freudenreich, HSTX, 1/94
(See $IDLUTILS_DIR/goddard/pro/robust/rob_checkfit.pro)
SCALE_VECTOR
NAME: SCALE_VECTOR PURPOSE: This is a utility routine to scale the elements of a vector (or an array) into a given data range. The processed vector [MINVALUE > vector < MAXVECTOR] is scaled into the data range given by MINRANGE and MAXRANGE. AUTHOR: FANNING SOFTWARE CONSULTING David Fanning, Ph.D. 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com CATEGORY: Utilities CALLING SEQUENCE: scaledVector = SCALE_VECTOR(vector, [minRange], [maxRange], [MINVALUE=minvalue], [MAXVALUE=maxvalue]) INPUT POSITIONAL PARAMETERS: vector: The vector (or array) to be scaled. Required. minRange: The minimum value of the scaled vector. Set to 0 by default. Optional. maxRange: The maximum value of the scaled vector. Set to 1 by default. Optional. Note that it is the processed vector [MINVALUE > vector < MAXVALUE] that is scaled between minRange and maxRange. See the MINVALUE and MAXVALUE keywords below. INPUT KEYWORD PARAMETERS: DOUBLE: Set this keyword to perform scaling in double precision. Otherwise, scaling is done in floating point precision. MAXVALUE: MAXVALUE is set equal to (vector < MAXVALUE) prior to scaling. The default value is MAXVALUE = Max(vector). MINVALUE: MINVALUE is set equal to (vector > MAXVALUE) prior to scaling. The default value is MINXVALUE = Min(vector). NAN: Set this keyword to enable not-a-number checking. NANs in vector will be ignored. PRESERVE_TYPE: Set this keyword to preserve the input data type in the output. RETURN VALUE: scaledVector: The vector (or array) values scaled into the data range. COMMON BLOCKS: None. EXAMPLES: x = [3, 5, 0, 10] xscaled = SCALE_VECTOR(x, -50, 50) Print, xscaled -20.0000 0.000000 -50.0000 50.0000 Suppose your image has a minimum value of -1.7 and a maximum value = 2.5. You wish to scale this data into the range 0 to 255, but you want to use a diverging color table. Thus, you want to make sure value 0.0 is scaled to 128. You proceed like this: scaledImage = SCALE_VECTOR(image, 0, 255, MINVALUE=-2.5, MAXVALUE=2.5) RESTRICTIONS: Requires the following programs from the Coyote Library: http://www.idlcoyote.com/programs/convert_to_type.pro http://www.idlcoyote.com/programs/fpufix.pro MODIFICATION HISTORY: Written by: David W. Fanning, 12 Dec 1998. Added MAXVALUE and MINVALUE keywords. 5 Dec 1999. DWF. Added NAN keyword. 18 Sept 2000. DWF. Removed check that made minRange less than maxRange to allow ranges to be reversed on axes, etc. 28 Dec 2003. DWF. Added PRESERVE_TYPE and DOUBLE keywords. 19 February 2006. DWF. Added FPUFIX to cut down on floating underflow errors. 11 March 2006. DWF.
(See $IDLUTILS_DIR/goddard/pro/coyote/scale_vector.pro)
SELECT_W
NAME: SELECT_W PURPOSE: Create a non-exclusive widget menu of items EXPLANATION: More than one item may be selected or 'de-selected'. Normally called by SCREEN_SELECT CALLING SEQUENCE: SELECT_W, items ,iselected, [ comments, command_line, only_one ] INPUTS: items - string array giving list of items that can be selected. OPTIONAL INPUTS: comments - comments which can be requested for each item in array selections. NOT YET IMPLEMENTED command_line - optional command line to be placed at the bottom of the screen. It is usually used to specify what the user is selecting. only_one - integer flag. If set to 1 then the user can only select one item. The routine returns immediately after the first selection is made. OPTIONAL KEYWORD INPUT SELECTIN - vector of items to be pre-selected upon input (not used for only_one option) OUTPUT: iselected - list of indices in selections giving the selected items. OPTIONAL OUTPUT KEYWORD: COUNT - Integer scalar giving the number of items selected COMMON BLOCKS: SELECT_W - Used to communicate with the SELECT_W_EVENT procedure MODIFICATION HISTORY: Written, K. Venkatakrishna & W. Landsman, Hughes/STX January, 1992 Widgets made MODAL. M. Greason, Hughes STX, 15 July 1992. Changed handling of MODAL keyword for V5.0 W.Thompson September 1997 Added selectin keyword D. Lindler 01/12/99
(See $IDLUTILS_DIR/goddard/pro/misc/select_w.pro)
SETDECOMPOSEDSTATE
Provides a device-independent way to set the color decomposition state of the current graphics device. Devices that do not have a DECOMPOSED keyword to the DEVICE command are assumed to be in indexed color mode always. I have removed the Z-graphics buffer from being controlled by this program. I do so reluctantly, but I am pragmatic enough to realize that progress forward is necessarily slow and that I must recognize the reality of legacy IDL code. My personal view is that all graphics routines should use 24-bit decomposed color. There are myriad advantages, but basically they boil down to this: (1) You have 16.7 million colors available to you simultaneously, and (2) you don't have to contaminate color tables to use drawing colors. Coyote Graphics routines are in the habit of switching out of whatever color mode the user happens to be using, into 24-bit decomposed color mode, then switching back when finished with its business. But, it is impossible to do this correctly in the Z-graphics buffer. The reason for this is that in the Z-graphics buffer, you need to switch not only the color mode, but also the pixel depth. In other words, I would prefer to set the Z-graphics buffer up like this:: Set_Plot, 'Z' Device, Decomposed=1, Set_Pixel_Depth=24 But, if I do that, then I need to set it back (for 99 people out of a 100) like this:: Device, Decomposed=0, Set_Pixel_Depth=8 Unfortunately, using this command will erase whatever is in the Z-graphics buffer! My solution to this problem is to leave it to the user to configure the Z-graphics buffer the way they want it. If you configure it to use 24-bit decomposed color, all of the Coyote Graphics routines will work as they normally do. If you configure it to use 8-bit indexed color, which is the default configuration, then it will work "normally", but you will be in great danger of contaminating the system color table. The reason for this is that Coyote Graphics cannot "restore" the entry color table in the Z-buffer without obliterating what is already in the graphics window. Users who work with indexed color are probably already very much aware of this problem, so it shouldn't surprise them. (They might not expect this with Coyote Graphics, but this is the price that has to be paid.) My suggestion is to put the Z-graphics configuration in your IDL startup file. Set it up in 24-bit decomposed color mode, use Coyote Graphics to do all your graphical output, and you will find things working perfectly. See `Configuring the Z-Graphics Buffer for Coyote Graphics <http://www.idlcoyote.com/cg_tips/configz.php>` for additional information. :Categories: Graphics, Utilities :Params: state: in, required, type=integer, default=0 Set to 1 to set the current graphics device to decomposed color. Set to 0 to set the current graphics device to indexed color. Devices lacking a DECOMPOSED keyword are assumed to be perpetually in indexed color mode. The Z-graphics buffer is always unchanged after the 24 Dec 2011 update. :Keywords: currentstate: out, optional, type=integer The current decomposition state of the current graphics device when the program is called. A 1 indicates decomposed color. A 0 indicates indexed color. depth: out, optional, type=integer The currnet pixel depth of the graphics device. zdepth: in, optional, type=integer The pixel depth of the Z-graphics device. Set to 8 or 24. Applies ONLY when setting the Z-graphics device state to 0. If undefined, the current depth of the Z-graphics device is unchanged from its current state. No longer used after 24 Dec 2011 update. Code still in place, however. :Examples: To set the device in color decomposition mode, then return it, do something like this:: SetDecomposedState, 1, CurrentState=mode ... SetDecomposeState, mode :Author: FANNING SOFTWARE CONSULTING:: David W. Fanning 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com :History: Change History:: Written, 16 November 2010. DWF. Changes to include SET_PIXEL_DEPTH in Z-graphics buffer. 19 Nov 2010. DWF. Allow PostScript 7.0 to set the decomposition keyword. 12 Dec 2010. DWF. Added DEPTH and ZDEPTH keywords. 31 Dec 2010. DWF. Added a do-nothing NULL device to Case statement. 4 Jan 2011. DWF. Removed the Z-graphics buffer from control by this program. 24 Dec 2011. DWF. :Copyright: Copyright (c) 2010, Fanning Software Consulting, Inc.
(See $IDLUTILS_DIR/goddard/pro/coyote/setdecomposedstate.pro)
SETDEFAULTVALUE
NAME: SetDefaultValue PURPOSE: This procedure sets default values for positional and keyword arguments to IDL procedures and functions. AUTHOR: FANNING SOFTWARE CONSULTING David Fanning, Ph.D. 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com/ CATEGORY: Utilities CALLING SEQUENCE: SetDefaultValue, argument, defaultValue ARGUMENTS: argument: The augument variable you are setting the default value of. If this variable is undefined, the defaultValue will be assigned to it. Otherwise, the argument variable will not change. defaultValue: The default value that will be assigned to the argument variable ONLY if the argument variable is undefined. If this variable is undefined, the argument variable will be treated as if the BOOLEAN keyword had been set. KEYWORDS: BOOLEAN: If this keyword is set, the argument value will always be forced to return with a value of 0 or 1. EXAMPLE: FUNCTION Action, arg1, arg2, MULTIPLY=multiply SetDefaultValue, arg1, 1 SetDefaultValue, arg2, 2 SetDefaultValue, multiply, 1, /BOOLEAN IF multiply THEN RETURN, arg1 * arg2 ELSE RETURN, arg1 + arg2 END MODIFICATION HISTORY: Written by: David W. Fanning, November 26, 2008, from suggestion by Carsten Lechte on IDL newsgroup on this date. Made a change to the way the BOOLEAN keyword works. Now argument is set to BOOLEAN before return, if required. 3 Dec 2008. DWF.
(See $IDLUTILS_DIR/goddard/pro/coyote/setdefaultvalue.pro)
SIGMA_FILTER
NAME: SIGMA_FILTER PURPOSE: Replace pixels more than a specified pixels deviant from its neighbors EXPLANATION: Computes the mean and standard deviation of pixels in a box centered at each pixel of the image, but excluding the center pixel. If the center pixel value exceeds some # of standard deviations from the mean, it is replaced by the mean in box. Note option to process pixels on the edges. CALLING SEQUENCE: Result = sigma_filter( image, box_width, N_sigma=(#), /ALL,/MON ) INPUTS: image = 2-D image (matrix) box_width = width of square filter box, in # pixels (default = 3) KEYWORDS: N_sigma = # standard deviations to define outliers, floating point, recommend > 2, default = 3. For gaussian statistics: N_sigma = 1 smooths 35% of pixels, 2 = 5%, 3 = 1%. RADIUS = alternative to specify box radius, so box_width = 2*radius+1. /ALL_PIXELS causes computation to include edges of image, /KEEP causes opposite effect: pixels with values outside of specified deviation are not changed, pixels within deviation are smoothed. /ITERATE causes sigma_filter to be applied recursively (max = 20 times) until no more pixels change (only allowed when N_sigma >= 2). /MONITOR prints information about % pixels replaced. Optional Outputs: N_CHANGE = # of pixels changed (replaced with neighborhood mean). VARIANCE = image of pixel neighborhood variances * (N_sigma)^2, DEVIATION = image of pixel deviations from neighborhood means, squared. CALLS: function filter_image( ) PROCEDURE: Compute mean over moving box-cars using smooth, subtract center values, compute variance using smooth on deviations from mean, check where pixel deviation from mean is within variance of box, replace those pixels in smoothed image (mean) with orignal values, return the resulting partial mean image. MODIFICATION HISTORY: Written, 1991, Frank Varosi and Dan Gezari NASA/GSFC F.V.1992, added optional keywords /ITER,/MON,VAR=,DEV=,N_CHANGE=. Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/image/sigma_filter.pro)
SIGRANGE()
NAME: SIGRANGE() PURPOSE: Selects the most significant data range in an image. EXPLANATION: Selects out the most significant range in the data to be used in displaying images. The histogram of ARRAY is used to select the most significant range. Useful for scaling an image display. CALLING SEQUENCE: OUTPUT = SIGRANGE( ARRAY ) INPUTS: ARRAY = Array to take most significant range of. OPTIONAL INPUTS: None. OUTPUTS: The function returns an array where values above and below the selected range are set equal to the maximum and minimum of the range respectively. OPTIONAL INPUT KEYWORDS: FRACTION = Fraction of data to consider most significant. Defaults to 0.99 MISSING = Value used to flag missing points. Data points with this value are not considered or changed. OPTIONAL OUTPUT KEYWORD RANGE = 2 element vector, giving the range (minimum and maxmimum) used NOTES: If the image array contains more than 10,000 points then SIGRANGE() uses random indexing of a subset of the points to determine the range (for speed). Thus identical calls to SIGRANGE() might not yield identical results (although they should be very close). RESTRICTIONS: ARRAY must have more than two points. Fraction must be greater than 0 and less than 1. SIGRANGE was originally part of the SERTS image display package. Other routines from this package are available at http://sohowww.nascom.nasa.gov/solarsoft/gen/idl/image/ Note that this version of SIGRANGE does not include the non-standard system variables used in the SERTS package. REVISION HISTORY: Version 1, William Thompson, GSFC, 12 May 1993. Incorporated into CDS library. Version 2, William Thompson, GSFC, 25 May 1993. Changed call to HISTOGRAM to be compatible with OpenVMS/ALPHA Version 3, CDP, RAL, Add RANGE keyword. 16-Apr-96 Version 4, William Thompson, GSFC, 17 April 1996 Corrected some problems when range is too high. Version 5, 13-Jan-1998, William Thompson, GSFC Use random numbers to improve statistics when only using a fraction of the array. Version 6, 06-Mar-1998, William Thompson, GSFC Change default to 0.99
(See $IDLUTILS_DIR/goddard/pro/tv/sigrange.pro)
SIXLIN
NAME: SIXLIN PURPOSE: Compute linear regression coefficients by six different methods. EXPLANATION: Adapted from the FORTRAN program (Rev. 1.1) supplied by Isobe, Feigelson, Akritas, and Babu Ap. J. Vol. 364, p. 104 (1990). Suggested when there is no understanding about the nature of the scatter about a linear relation, and NOT when the errors in the variable are calculable. CALLING SEQUENCE: SIXLIN, xx, yy, a, siga, b, sigb, [WEIGHT = ] INPUTS: XX - vector of X values YY - vector of Y values, same number of elements as XX OUTPUTS: A - Vector of 6 Y intercept coefficients SIGA - Vector of standard deviations of 6 Y intercepts B - Vector of 6 slope coefficients SIGB - Vector of standard deviations of slope coefficients The output variables are computed using linear regression for each of the following 6 cases: (0) Ordinary Least Squares (OLS) Y vs. X (c.f. linfit.pro) (1) Ordinary Least Squares X vs. Y (2) Ordinary Least Squares Bisector (3) Orthogonal Reduced Major Axis (4) Reduced Major-Axis (5) Mean ordinary Least Squares OPTIONAL INPUT KEYWORD: WEIGHT - vector of weights, same number of elements as XX and YY For 1 sigma Gausssian errors, the weights are 1/sigma^2 but the weight vector can be more general. Default is no weighting. NOTES: Isobe et al. make the following recommendations (1) If the different linear regression methods yield similar results then quoting OLS(Y|X) is probably the most familiar. (2) If the linear relation is to be used to predict Y vs. X then OLS(Y|X) should be used. (3) If the goal is to determine the functional relationship between X and Y then the OLS bisector is recommended. REVISION HISTORY: Written Wayne Landsman February, 1991 Corrected sigma calculations February, 1992 Converted to IDL V5.0 W. Landsman September 1997 Added WEIGHT keyword J. Moustakas Februrary 2007
(See $IDLUTILS_DIR/goddard/pro/math/sixlin.pro)
SIXTY()
NAME: SIXTY() PURPOSE: Converts a decimal number to sexigesimal. EXPLANATION: Reverse of the TEN() function. CALLING SEQUENCE: X = SIXTY( SCALAR, [ /TrailSign ] ) INPUTS: SCALAR -- Decimal quantity. OUTPUTS: Function value returned = real vector of three elements, sexigesimal equivalent of input decimal quantity. Double precision if the input is double, otherwise floating point. By default, a negative number is signified by making the first non-zero element of the output vection negative, but this can be modfied with the /TrailSign keyword. OPTIONAL INPUT KEYWORD: /TrailSign - By default, SIXTY() returns a negative sign in the first nonzero element. If /TrailSign is set, then SIXTY() will return always return a negative sign in the first element, even if it is zero PROCEDURE: Mostly involves checking arguments and setting the sign. EXAMPLE: If x = -0.345d then sixty(x) = [0.0, -20.0, 42.0] and sixty(x,/trail) = [-0.0, 20.0, 42.0] MODIFICATION HISTORY: Written by R. S. Hill, STX, 19-OCT-87 Output changed to single precision. RSH, STX, 1/26/88 Accept single element vector W. Landsman Sep. 1996 Converted to IDL V5.0 W. Landsman September 1997 Added /TrailSign keyword, preserve data type B. Stecklum/ W. Landsman March 2006
(See $IDLUTILS_DIR/goddard/pro/astro/sixty.pro)
SKY
NAME: SKY PURPOSE: Determine the sky level in an image EXPLANATION: Approximately 10000 uniformly spaced pixels are selected for the computation. Adapted from the DAOPHOT routine of the same name. The sky is computed either by using the procedure mmm.pro (default) or by sigma clipping (if /MEANBACK is set) CALLING SEQUENCE: SKY, image, [ skymode, skysig ,/SILENT, /MEANBACK, /NAN, CIRCLERAD= ] Keywords available when MEANBACK is not set (passed to mmm.pro): /DEBUG, HIGHBAD=, /INTEGER, MAXITER=. READNOISE= Keywords available when /MEANBACK is set: CLIPSIG=, /DOUBLE, CONVERGE_NUM=, MAXITER=, /VERBOSE INPUTS: IMAGE - One or two dimensional array OPTIONAL OUTPUT ARRAYS: SKYMODE - Scalar, giving the mode of the sky pixel values of the array IMAGE, as determined by the procedures MMM or MEANCLIP SKYSIG - Scalar, giving standard deviation of sky brightness. If it was not possible to derive a mode then SKYSIG is set to -1 INPUT KEYWORD PARAMETERS: CIRCLERAD - Use this keyword to have SKY only select pixels within specified pixel radius of the center of the image. If CIRCLERAD =1, then the radius is set equal to half the image width. Can only be used with square images. /MEANBACK - if set, then the background is computed using the 3 sigma clipped mean (using meanclip.pro) rather than using the mode computed with mmm.pro. This keyword is useful for the Poisson count regime or where contamination is known to be minimal. /NAN - This keyword must be set to ignore NaN values when computing the sky. /SILENT - If this keyword is supplied and non-zero, then SKY will not display the sky value and sigma at the terminal The _EXTRA facility can is used to pass optional keywords to the programs that actually perform the sky computation: either mmm.pro (default) or meanclip.pro (if /MEANBACK) is set. The following keywords are available with the mmm.pro (default) setting HIGHBAD - scalar value of the (lowest) "bad" pixel level (e.g. cosmic rays or saturated pixels) If not supplied, then there is assumed to be no high bad pixels. READNOISE - Scalar giving the read noise (or minimum noise for any pixel). Normally, MMM determines the (robust) median by averaging the central 20% of the sky values. In some cases where the noise is low, and pixel values are quantized a larger fraction may be needed. By supplying the optional read noise parameter, MMM is better able to adjust the fraction of pixels used to determine the median. /INTEGER - Set this keyword if the input SKY image only contains discrete integer values. This keyword is only needed if the SKY image is of type float or double precision, but contains only discrete integer values. If the /MEANBACK keyword is set then the following keywords are available CLIPSIG: Number of sigma at which to clip. Default=3 MAXITER: Ceiling on number of clipping iterations. Default=5 CONVERGE_NUM: If the proportion of rejected pixels is less than this fraction, the iterations stop. Default=0.02, i.e., iteration stops if fewer than 2% of pixels excluded. /DOUBLE - if set then perform all computations in double precision. Otherwise double precision is used only if the input data is double PROCEDURE: A grid of points, not exceeding 10000 in number, is extracted from the srray. The mode of these pixel values is determined by the procedure mmm.pro or meanclip.pro. In a 2-d array the grid is staggered in each row to avoid emphasizing possible bad columns PROCEDURE CALLS: MEANCLIP, MMM, DIST_CIRCLE REVISION HISTORY: Written, W. Landsman STX Co. September, 1987 Changed INDGEN to LINDGEN January, 1994 Fixed display of # of points used March, 1994 Stagger beginning pixel in each row, added NSKY, READNOISE, HIGHBAD W. Landsman June 2004 Adjustments for unbiased sampling W. Landsman June 2004 Added /NAN keyword, put back CIRCLERAD keyword W. Landsman July 2004 Added MEANBACK keyword, _EXTRA kewyord ,preserve data type in calculations W. Landsman November 2005 Fix problem for very large images by requiring at least 2 pixels to be sampled per row. March 2007 W. Landsman Avoid possible out of bounds if /NAN set W. Landsman Jan 2008 Use TOTAL(/INTEGER) June 2009
(See $IDLUTILS_DIR/goddard/pro/idlphot/sky.pro)
SKYADJ_CUBE
NAME: SKYADJ_CUBE PURPOSE: Sky adjust the planes of a datacube. EXPLANATION: When removing cosmic rays from a set of images, it is desirable that all images have the same sky level. This procedure (called by CR_REJECT) removes the sky from each image in a data cube. CALLING SEQUENCE: SKYADJ_CUBE,Datacube,Skyvals,Totsky MODIFIED ARGUMENT: Datacube: 3-D array with one image of same field in each plane. Returned with sky in each plane adjusted to zero. OUTPUT ARGUMENTS: Skyvals: Array of sky values used on each plane of datacube. For a scalar sky, this parameter is a vector containing the sky value for each image plane. For a vector sky, this parameter is a 2-D array where each line corresponds to one image plane. INPUT KEYWORD PARAMETERS: REGION - [X0,X1,Y0,Y1] to restrict area used for computation of sky. Default is 0.1*Xdim, 0.9*Xdim, 0.1*Ydim, 0.9*Ydim. If INPUT_MASK is specified, the two specs are combined, i.e., the intersection of the areas is used. VERBOSE - Flag. If set, print information on skyvals. NOEDIT - Flag. If set, return sky values without changing datacube. XMEDSKY - Flag. If set, return vector sky as a function of X. SELECT - Array of subscripts of planes of the cube to process. (Default=all) EXTRAPR - Applies only in XMEDSKY mode. Subregion to use for polynomial extrapolation of sky vector into portions excluded by REGION parameter. (Default=first and last 10% of pixels; set to zero to defeat extrapolation) EDEGREE - Applies only in XMEDSKY mode. Degree of polynomial for extrapolation (Default=1) INPUT_MASK - Cube of flags corresponding to data cube. If used, the sky computation is restricted to the smallest contiguous rectangle containing all the pixels flagged valid (with 1 rather than 0). PROCEDURE: Uses astronomy library "sky" routine for scalar sky and column-by-column median for vector sky. MODIFICATION HISTORY: 10 Jul. 1997 - Written. R. S. Hill, Hughes STX 20 Oct. 1997 - 1-D sky option. RSH 7 Aug. 1998 - SELECT keyword. RSH 6 Oct. 1998 - Extrapolation. RSH 7 Oct. 1998 - INPUT_MASK added. RSH 21 Oct. 1998 - Fallback to 3-sigma clipped mean if mode fails. RSH 22 Mar. 2000 - Combine mask with region rather having mask override region. Improve comments. RSH 16 June 2000 - On_error and message used. Square brackets for array subscripts. EXTRAP included in this file. WBL & RSH, 16 June 2000
(See $IDLUTILS_DIR/goddard/pro/image/skyadj_cube.pro)
SPEC_DIR()
NAME: SPEC_DIR() PURPOSE: Complete a file specification by appending the default disk or directory CALLING SEQUENCE: File_spec = SPEC_DIR( filename, [ extension ] ) INPUT: filename - character string giving partial specification of a file name. Examples for different operating systems include the following: Unix: 'pro/test.dat', '$IDL_HOME/test','~/subpro' MacOS: ':Programs:test' Windows: '\pro\test.dat','d:\pro\test' OPTIONAL INPUT: exten - string giving a default file name extension to be used if filename does not contain one. Do not include the period. OUTPUT: File_spec - Complete file specification using default disk or directory when necessary. EXAMPLE: IDL> a = spec_dir('test','dat') is equivalent to the commands IDL> cd, current=cdir IDL> a = cdir + delim + 'test.dat' where delim is the OS-dependent separator METHOD: SPEC_DIR() decomposes the file name using FDECOMP, and appends the default directory (obtained from the FILE_EXPAND_PATH) if necessary. SPEC_DIR() does not check whether the constructed file name actually exists. PROCEDURES CALLED: FDECOMP, EXPAND_TILDE() REVISION HISTORY: Written W. Landsman STX July, 1987 Expand Unix tilde if necessary W. Landsman September 1997 Assume since V5.5, use FILE_EXPAND_PATH, remove VMS support W. Landsman September 2006
(See $IDLUTILS_DIR/goddard/pro/misc/spec_dir.pro)
SPHDIST
NAME: SPHDIST PURPOSE: Angular distance between points on a sphere. CALLING SEQUENCE: d = sphdist(long1, lat1, long2, lat2) INPUTS: long1 = longitude of point 1, scalar or vector lat1 = latitude of point 1, scalar or vector long2 = longitude of point 2, scalar or vector lat2 = latitude of point 2, scalar or vector OPTIONAL KEYWORD INPUT PARAMETERS: /DEGREES - means angles are in degrees, else radians. OUTPUTS: d = angular distance between points (in radians unless /DEGREES is set.) PROCEDURES CALLED: RECPOL, POLREC NOTES: (1) The procedure GCIRC is similar to SPHDIST(), but may be more suitable for astronomical applications. (2) If long1,lat1 are scalars, and long2,lat2 are vectors, then SPHDIST returns a vector giving the distance of each element of long2,lat2 to long1,lat1. Similarly, if long1,lat1 are vectors, and long2, lat2 are scalars, then SPHDIST returns a vector giving giving the distance of each element of long1,lat1 to to long2,lat2. If both long1,lat1 and long2,lat2 are vectors then SPHDIST returns vector giving the distance of each element of long1,lat1 to the corresponding element of long2, lat2. If the input vectors are not of equal length, then excess elements of the longer ones will be ignored. MODIFICATION HISTORY: R. Sterner, 5 Feb, 1991 R. Sterner, 26 Feb, 1991 --- Renamed from sphere_dist.pro Copyright (C) 1991, 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. Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/jhuapl/sphdist.pro)
SRCOR
NAME: SRCOR PURPOSE: Correlate the source positions found on two lists. EXPLANATION: Source matching is done by finding sources within a specified radius. If you have position errors available and wish to match by significance level, then try match_xy.pro in the TARA library (http://www.astro.psu.edu/xray/docs/TARA/) CALLING SEQUENCE: srcor,x1in,ylin,x2in,y2in,dcr,ind1,ind2, [MAGNITUDE=,SPHERICAL=,COUNT=,/SILENT] INPUTS: x1in,y1in - First set of x and y coordinates. The program marches through this list element by element, looking in list 2 for the closest match. So, the program will run faster if this is the shorter of the two lists. Unless you use the option or magnitude keyword, there is nothing to guarantee unique matches. x2in,y2in - Second set of x and y coordinates. This list is searched in its entirety every time one element of list 1 is processed. dcr - Critical radius outside which correlations are rejected; but see 'option' below. OPTIONAL KEYWORD INPUT: option - Changes behavior of program and description of output lists slightly, as follows: OPTION=0 or left out Same as older versions of SRCOR. The closest match from list2 is found for each element of list 1, but if the distance is greater than DCR, the match is thrown out. Thus the index of that element within list 1 will not appear in the IND1 output array. OPTION=1 Forces the output mapping to be one-to-one. OPTION=0 results, in general, in a many-to-one mapping from list 1 to list 2. Under OPTION=1, a further processing step is performed to keep only the minimum-distance match, whenever an entry from list 1 appears more than once in the initial mapping. OPTION=2 Same as OPTION=1, except the critical distance parameter DCR is ignored. I.e., the closest object is retrieved from list 2 for each object in list 1 WITHOUT a critical-radius criterion, then the clean-up of duplicates is done as under OPTION=1. magnitude An array of stellar magnitudes corresponding to x1in and y1in. If this is supplied, then the brightest star from list 1 within the selected distance of the star in list 2 is taken. The option keyword is ignored in this case. spherical If SPHERICAL=1, it is assumed that the input arrays are in celestial coordinates (RA and Dec), with x1in and x2in in decimal hours and y1in and y2in in decimal degrees. If SPHERICAL=2 then it is assumed that the input arrays are in longitude and latitude with x1in,x2in,y1in,y2in in decimal degrees. In both cases, the critial radius dcr is in *arcseconds*. Calculations of spherical distances are made with the gcirc program. OUTPUTS: ind1 - index of matched stars in first list, set to -1 if no matches found ind2 - index of matched stars in second list OPTIONAL OUTPUT KEYWORD: Count - integer giving number of matches returned PROCEDURES USED: GCIRC, REMOVE REVISON HISTORY: Adapted from UIT procedure J.Wm.Parker, SwRI 29 July 1997 Improve speed for spherical searches, added /SILENT keyword W. Landsman Mar 2009 Avoid error when no matches found with /SPHERICAL O. Trottier June 2009 Added output Count keyword W.L June 2009 Adjust right ascension for cosine angle W.L. December 2009 Return as soon as no matches found W.L. December 2009 Use some V6.0 notation W.L. February 2011 Fix problem when /Spherical and Option =2 set, and sources separated by more han 180 degrees. W.L. March 2011
(See $IDLUTILS_DIR/goddard/pro/idlphot/srcor.pro)
STARAST
NAME: STARAST PURPOSE: Compute astrometric solution using positions of 2 or 3 reference stars EXPLANATION: Computes an exact astrometric solution using the positions and coordinates from 2 or 3 reference stars and assuming a tangent (gnomonic) projection. If 2 stars are used, then the X and Y plate scales are assumed to be identical, and the axis are assumed to be orthogonal. Use of three stars will allow a unique determination of each element of the CD matrix. CALLING SEQUENCE: starast, ra, dec, x, y, cd, [/Righthanded, HDR = h, PROJECTION=] INPUTS: RA - 2 or 3 element vector containing the Right Ascension in DEGREES DEC- 2 or 3 element vector containing the Declination in DEGREES X - 2 or 3 element vector giving the X position of reference stars Y - 2 or 3 element vector giving the Y position of reference stars OUTPUTS: CD - CD (Coordinate Description) matrix (DEGREES/PIXEL) determined from stellar positions and coordinates. OPTIONAL INPUT KEYWORD: /RightHanded - If only 2 stars are supplied, then there is an ambiguity in the orientation of the coordinate system. By default, STARAST assumes the astronomical standard left-handed system (R.A. increase to the left). If /Right is set then a righthanded coordinate is assumed. This keyword has no effect if 3 star positions are supplied. PROJECTION - Either a 3 letter scalar string giving the projection type (e.g. 'TAN' or 'SIN') or an integer 1 - 25 specifying the projection as given in the WCSSPH2XY procedure. If not specified then a tangent projection is computed. OPTIONAL INPUT-OUTPUT KEYWORD: HDR - If a FITS header string array is supplied, then an astrometry solution is added to the header using the CD matrix and star 0 as the reference pixel (see example). Equinox 2000 is assumed. EXAMPLE: To use STARAST to add astrometry to a FITS header H; IDL> starast,ra,dec,x,y,cd ;Determine CD matrix IDL> crval = [ra[0],dec[0]] ;Use Star 0 as reference star IDL> crpix = [x[0],y[0]] +1 ;FITS is offset 1 pixel from IDL IDL> putast,H,cd,crpix,crval ;Add parameters to header This is equivalent to the following command: IDL> STARAST,ra,dec,x,y,hdr=h METHOD: The CD parameters are determined by solving the linear set of equations relating position to local coordinates (l,m) For highest accuracy the first star position should be the one closest to the reference pixel. REVISION HISTORY: Written, W. Landsman January 1988 Converted to IDL V5.0 W. Landsman September 1997 Added /RightHanded and HDR keywords W. Landsman September 2000 Write CTYPE values into header W. Landsman/A. Surkov December 2002 CD matrix was mistakenly transpose in 3 star solution Added projection keyword W. Landsman September 2003 Test for singular matrix W. Landsman August 2011
(See $IDLUTILS_DIR/goddard/pro/astrom/starast.pro)
STORE_ARRAY
NAME: STORE_ARRAY PURPOSE: Insert array INSERT into the array DESTINATION EXPLANATION: The dimensions of the DESTINATION array are adjusted to accommodate the inserted array. CATEGOBY: Utility CALLING SEQUENCE: STORE_ARRAY, DESTINATION, INSERT, INDEX INPUT: DESTINATION = Array to be expanded. INSERT = Array to insert into DESTINATION. INDEX = Index of the final dimension of DESTINATION to insert INSERT into. OUTPUTS: DESTINATION = Expanded output array. If both input arrays have the same number of dimensions, then the DESTINATION will be replaced with INSERT. RESTRICTIONS: DESTINATION and INSERT have to be either both of type string or both of numerical types. INSERT must not have more dimensions than DESTINATION. MODIFICATION HISTOBY: William Thompson, Feb. 1992, from BOOST_ARRAY by D. Zarro and P. Hick. Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/misc/store_array.pro)
STRCOMPRESS2
NAME: STRCOMPRESS2 PURPOSE: Remove blanks around specified characters in a string CALLING SEQUENCE newstring = strcompress2( st, chars) INPUTS: st - any scalar string chars - scalar or vector string specifing which characters around which blanks should be removed. For example, if chars=['=','-','+'] then spaces around the three characters "=', '-', and '+' will be removed. OUTPUTS: newstring - input string with spaces removed around the specified characters. EXAMPLE: The Vizier constraint string (see queryvizier.pro) does not allow blanks around the operators '=','<', or '>'. But we do not want to remove blanks around names (e.g. 'NGC 5342'): IDL> st = 'name = NGC 5342, v< 23' IDL> print,strcompress2(st, ['=','<','>']) name=NGC 5342, v<23 MODIFICATION HISTORY: Written by W.Landsman July 2008
(See $IDLUTILS_DIR/goddard/pro/misc/strcompress2.pro)
STRN
NAME: STRN PURPOSE: Convert a number to a string and remove padded blanks. EXPLANATION: The main and original purpose of this procedure is to convert a number to an unpadded string (i.e. with no blanks around it.) However, it has been expanded to be a multi-purpose formatting tool. You may specify a length for the output string; the returned string is either set to that length or padded to be that length. You may specify characters to be used in padding and which side to be padded. Finally, you may also specify a format for the number. NOTE that the input "number" need not be a number; it may be a string, or anything. It is converted to string. CALLING SEQEUNCE: tmp = STRN( number, [ LENGTH=, PADTYPE=, PADCHAR=, FORMAT = ] ) INPUT: NUMBER This is the input variable to be operated on. Traditionally, it was a number, but it may be any scalar type. OPTIONAL INPUT: LENGTH This KEYWORD specifies the length of the returned string. If the output would have been longer, it is truncated. If the output would have been shorter, it is padded to the right length. PADTYPE This KEYWORD specifies the type of padding to be used, if any. 0=Padded at End, 1=Padded at front, 2=Centered (pad front/end) IF not specified, PADTYPE=1 PADCHAR This KEYWORD specifies the character to be used when padding. The default is a space (' '). FORMAT This keyword allows the FORTRAN type formatting of the input number (e.g. '(f6.2)') OUTPUT: tmp The formatted string USEFUL EXAMPLES: print,'Used ',strn(stars),' stars.' ==> 'Used 22 stars.' print,'Attempted ',strn(ret,leng=6,padt=1,padch='0'),' retries.' ==> 'Attempted 000043 retries.' print,strn('M81 Star List',length=80,padtype=2) ==> an 80 character line with 'M81 Star List' centered. print,'Error: ',strn(err,format='(f15.2)') ==> 'Error: 3.24' or ==> 'Error: 323535.22' HISTORY: 03-JUL-90 Version 1 written by Eric W. Deutsch 10-JUL-90 Trimming and padding options added (E. Deutsch) 29-JUL-91 Changed to keywords and header spiffed up (E. Deutsch) Ma7 92 Work correctly for byte values (W. Landsman) 19-NOV-92 Added Patch to work around IDL 2.4.0 bug which caused an error when STRN('(123)') was encountered. (E. Deutsch) Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/misc/strn.pro)
STRNUMBER()
NAME: STRNUMBER() PURPOSE: Function to determine if a string is a valid numeric value. EXPLANATION: A string is considered a valid numeric value if IDL can convert it to a numeric variable without error. CALLING SEQUENCE: result = strnumber( st, [val, /HEX] ) INPUTS: st - any IDL scalar string OUTPUTS: 1 is returned as the function value if the string st has a valid numeric value, otherwise, 0 is returned. OPTIONAL OUTPUT: val - (optional) value of the string. double precision unless /L64 is set OPTIONAL INPUT KEYWORD: /HEX - If present and nonzero, the string is treated as a hexadecimal longword integer. /L64 - If present and nonzero, the val output variable is returned as a 64 bit integer. This to ensure that precision is not lost when returning a large 64 bit integer as double precision. This keyword has no effect on the function result. /NAN - if set, then the value of an empty string is returned as NaN, by default the returned value is 0.0d. In either case, an empty string is considered a valid numeric value. EXAMPLES: IDL> res = strnumber('0.2d', val) returns res=1 (a valid number), and val = 0.2000d NOTES: (1) STRNUMBER was modified in August 2006 so that an empty string is considered a valid number. Earlier versions of strnumber.pro did not do this because in very early (pre-V4.0) versions of IDL this could corrupt the IDL session. (2) STRNUMBER will return a string such as '23.45uyrg' as a valid number (=23.45) since this is how IDL performs the type conversion. If you want a stricter definition of valid number then use the VALID_NUM() function. HISTORY: version 1 By D. Lindler Aug. 1987 test for empty string, W. Landsman February, 1993 Hex keyword added. MRG, RITSS, 15 March 2000. An empty string is a valid number W. Landsman August 2006 Added /NAN keyword W. Landsman August 2006 Added /L64 keyword W. Landsman Feb 2010
(See $IDLUTILS_DIR/goddard/pro/misc/strnumber.pro)
STR_INDEX()
NAME: STR_INDEX() PURPOSE: Get indices of a substring (SUBSTR) in string. EXPLANATION: The IDL intrinsic function STRPOS returns only the index of the first occurrence of a substring. This routine calls itself recursively to get indices of the remaining occurrences. CALLING SEQUENCE: result= STR_INDEX(str, substr [, offset]) INPUTS: STR -- The string in which the substring is searched for SUBSTR -- The substring to be searched for within STR OPTIONAL INPUTS: OFFSET -- The character position at which the search is begun. If omitted or being negative, the search begins at the first character (character position 0). OUTPUTS: RESULT -- Integer scalar or vector containing the indices of SUBSTR within STR. If no substring is found, it is -1. CALLS: DELVARX COMMON BLOCKS: STR_INDEX -- internal common block. The variable save in the block is deleted upon final exit of this routine. CATEGORY: Utility, string MODIFICATION HISTORY: Written January 3, 1995, Liyun Wang, GSFC/ARC Converted to IDL V5.0 W. Landsman September 1997 Use size(/TNAME) instead of DATATYPE() W. Landsman October 2001
(See $IDLUTILS_DIR/goddard/pro/misc/str_index.pro)
STR_SIZE
NAME: STR_SIZE PURPOSE: The purpose of this function is to return the proper character size to make a specified string a specifed width in a window. The width is specified in normalized coordinates. The function is extremely useful for sizing strings and labels in resizeable graphics windows. AUTHOR: FANNING SOFTWARE CONSULTING David Fanning, Ph.D. 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com/ CATEGORY: Graphics Programs, Widgets. CALLING SEQUENCE: thisCharSize = STR_SIZE(thisSting, targetWidth) INPUTS: thisString: This is the string that you want to make a specifed target size or width. OPTIONAL INPUTS: targetWidth: This is the target width of the string in normalized coordinates in the current graphics window. The character size of the string (returned as thisCharSize) will be calculated to get the string width as close as possible to the target width. The default is 0.25. KEYWORD PARAMETERS: INITSIZE: This is the initial size of the string. Default is 1.0. STEP: This is the amount the string size will change in each step of the interative process of calculating the string size. The default value is 0.05. XPOS: X position of the output test string. This can be used on the Postscript device, where no pixmap windows are available and where therefore the test strings would appear on the printable area. Default is 0.5 on most devices. If !D.NAME is PS, the default is 2.0 to draw the test string out of the drawable window area. YPOS: Y position of the output test string. This can be used on the Postscript device, where no pixmap windows are available and where therefore the test strings would appear on the printable area. Default is 0.5 on most devices. If !D.NAME is PS, the default is 2.0 to draw the test string out of the drawable window area. OUTPUTS: thisCharSize: This is the size the specified string should be set to if you want to produce output of the specified target width. The value is in standard character size units where 1.0 is the standard character size. EXAMPLE: To make the string "Happy Holidays" take up 30% of the width of the current graphics window, type this: XYOUTS, 0.5, 0.5, ALIGN=0.5, "Happy Holidays", $ CHARSIZE=STR_SIZE("Happy Holidays", 0.3) MODIFICATION HISTORY: Written by: David Fanning, 17 DEC 96. Added a scaling factor to take into account the aspect ratio of the window in determing the character size. 28 Oct 97. DWF Added check to be sure hardware fonts are not selected. 29 April 2000. DWF. Added a pixmap to get proper scaling in skinny windows. 16 May 2000. DWF. Forgot I can't do pixmaps in all devices. :-( Fixed. 7 Aug 2000. DWF. Added support of PostScript at behest of Benjamin Hornberger. 11 November 2004. DWF. Cleaned up the code a bit. 28 Feb 2011. DWF. Fixed non-square window algorithm to reflect my original intentions. 10 June 2011.
(See $IDLUTILS_DIR/goddard/pro/coyote/str_size.pro)
ST_DISKREAD
NAME: ST_DISKREAD PURPOSE: Read HST FITS formatted disk files and reconstruct GEIS (STSDAS) files. CALLING SEQUENCE: ST_DISKREAD, infiles INPUT PARAMETER: infiles - (scalar string) input disk files to be converted into GEIS files. Wildcards are allowed. FILES CREATED: GEIS files: The GEIS file is reconstructed from each input Fits file. The output filename is composed from the rootname of the observation and the appropriate GEIS file extension (i.e. d0h/d, c0h/d, etc.). Tables: If input file is a fits table, the output is an SDAS table. EXAMPLES: a) Reconstruct the GEIS file for disk FITS file z29i020ct*.fits. st_diskread,'z29i020ct*.fits' PROCEDURES CALLED: ST_DISK_DATA, ST_DISK_TABLE, ST_DISK_GEIS FTSIZE,SXPAR(),TAB_CREATE, TAB_WRITE HISTORY: 10/17/94 JKF/ACC - taken from ST_TAPEREAD. 11/02/94 JKF/ACC - added /block on open statement to handle files with 512 bytes/record. 12/6/95 JKF/ACC - include new jitter files...replaces st_read_jitter.pro. 03/5/96 W. Landsman, change FORRD to READU, remove Version 1 type codes, add message facility 05/20/00 W. Landsman, remove obsolete !ERR calls, new calling sequence to FTINFO 09/2006 W. Landsman, remove obsolete keywords to OPEN **************************************************************************** Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/sdas/st_diskread.pro)
ST_DISK_DATA
NAME: ST_DISK_DATA PURPOSE: Routine to read next header and data array from an HST FITS disk file. This is a subroutine of ST_DISKREAD and not intended for stand alone use. CALLING SEQUENCE: st_disk_data,unit,h,data,name,gcount,dimen,opsize,nbytes,itype INPUTS: unit - logical unit number. OUTPUTS: h - FITS header data - data array name - file name gcount - number of groups dimen - data dimensions opsize - parameter blocks size nbytes - bytes per data group itype - idl data type Notes: This is not a standalone program. Use ST_DISKREAD. PROCEDURES CALLED: GETTOK(), SXPAR() HISTORY: 10/17/94 JKF/ACC - taken from ST_TAPE_DATA. ***************************************************************************
(See $IDLUTILS_DIR/goddard/pro/sdas/st_diskread.pro)
ST_DISK_GEIS
NAME: ST_DISK_GEIS PURPOSE: Routine to construct GEIS files from ST FITS disk files. CALLING SEQUENCE: ST_DISK_GEIS, h, data, htab, tab, table_available, name, gcount, dimen,opsize, nbytes_g,itype INPUT PARAMETERS: h - header for data data - data array htab - header for the table tab - fits table table_available - logical variable (1 if table was found) name - data set name gcount - number of groups dimen - data dimensions opsize - original parameter block size nbytes_g - number of bytes per group itype - idl integer data type value for the output data groups SIDE EFFECTS: GEIS file updated with group parameters in unit 1 (already open) and header file created NOTES: This is not a standalone program. Use st_diskread. During the creation of the header, this routine performs the following steps: 1) create a basic fits header (7 keywords) 2) adjust basic fits header for the number of axis present (i.e. >1) 3) adjust basic fits header for parameter keywords (i.e. ptype,etc) 4) from this point, sequentially copies keywords until it hits one of the following keywords 'INSTRUME','INSTRUID', or 'CONFG'. 5) append 'END' statement PROCEDURES CALLED: FTSIZE, SXADDPAR, SXHWRITE HISTORY: 10/17/94 JKF/ACC - taken from ST_DISK_GEIS ****************************************************************************
(See $IDLUTILS_DIR/goddard/pro/sdas/st_diskread.pro)
ST_DISK_TABLE
NAME: ST_DISK_TABLE PURPOSE: Routine to read FITS table from an ST fits on disk. This is a subroutine of st_diskread and not intended for stand alone use. CALLING SEQUENCE: st_disk_table,unit,h,data INPUTS PARAMETER: unit - disk unit number OUTPUTS: h - FITS header data - table array NOTES: This is not a standalone program. Use ST_DISKREAD. HISTORY: 10/17/94 JKF/ACC - taken from ST_TAPE_TABLE. 12/7/95 JKF/ACC - handle tables for jitter data. ****************************************************************************
(See $IDLUTILS_DIR/goddard/pro/sdas/st_diskread.pro)
SUBSTAR
NAME: SUBSTAR PURPOSE: Subtract a scaled point spread function at specified star position(s). EXPLANATION: Part of the IDL-DAOPHOT photometry sequence CALLING SEQUENCE: SUBSTAR, image, x, y, mag, [ id, psfname, /VERBOSE] INPUT-OUTPUT: IMAGE - On input, IMAGE is the original image array. A scaled PSF will be subtracted from IMAGE at specified star positions. Make a copy of IMAGE before calling SUBSTAR, if you want to keep a copy of the unsubtracted image array INPUTS: X - REAL Vector of X positions found by NSTAR (or FIND) Y - REAL Vector of Y positions found by NSTAR (or FIND) MAG - REAL Vector of stellar magnitudes found by NSTAR (or APER) Used to scale the PSF to match intensity at star position. Stars with magnitude values of 0.0 are assumed missing and ignored in the subtraction. OPTIONAL INPUTS: ID - Index vector indicating which stars are to be subtracted. If omitted, (or set equal to -1), then stars will be subtracted at all positions specified by the X and Y vectors. PSFNAME - Name of the FITS file containing the PSF residuals, as generated by GETPSF. SUBSTAR will prompt for this parameter if not supplied. OPTIONAL INPUT KEYWORD: VERBOSE - If this keyword is set and nonzero, then SUBSTAR will display the star that it is currently processing COMMON BLOCKS: The RINTER common block is used (see RINTER.PRO) to save time in the PSF calculations PROCEDURES CALLED: DAO_VALUE(), READFITS(), REMOVE, SXOPEN, SXPAR(), SXREAD() REVISION HISTORY: Written, W. Landsman August, 1988 Added VERBOSE keyword January, 1992 Fix star subtraction near edges, W. Landsman May, 1996 Assume the PSF file is in FITS format W. Landsman July, 1997 Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/idlphot/substar.pro)
SUNPOS
NAME: SUNPOS PURPOSE: To compute the RA and Dec of the Sun at a given date. CALLING SEQUENCE: SUNPOS, jd, ra, dec, [elong, obliquity, /RADIAN ] INPUTS: jd - The Julian date of the day (and time), scalar or vector usually double precision OUTPUTS: ra - The right ascension of the sun at that date in DEGREES double precision, same number of elements as jd dec - The declination of the sun at that date in DEGREES OPTIONAL OUTPUTS: elong - Ecliptic longitude of the sun at that date in DEGREES. obliquity - the obliquity of the ecliptic, in DEGREES OPTIONAL INPUT KEYWORD: /RADIAN - If this keyword is set and non-zero, then all output variables are given in Radians rather than Degrees NOTES: Patrick Wallace (Rutherford Appleton Laboratory, UK) has tested the accuracy of a C adaptation of the sunpos.pro code and found the following results. From 1900-2100 SUNPOS gave 7.3 arcsec maximum error, 2.6 arcsec RMS. Over the shorter interval 1950-2050 the figures were 6.4 arcsec max, 2.2 arcsec RMS. The returned RA and Dec are in the given date's equinox. Procedure was extensively revised in May 1996, and the new calling sequence is incompatible with the old one. METHOD: Uses a truncated version of Newcomb's Sun. Adapted from the IDL routine SUN_POS by CD Pike, which was adapted from a FORTRAN routine by B. Emerson (RGO). EXAMPLE: (1) Find the apparent RA and Dec of the Sun on May 1, 1982 IDL> jdcnv, 1982, 5, 1,0 ,jd ;Find Julian date jd = 2445090.5 IDL> sunpos, jd, ra, dec IDL> print,adstring(ra,dec,2) 02 31 32.61 +14 54 34.9 The Astronomical Almanac gives 02 31 32.58 +14 54 34.9 so the error in SUNPOS for this case is < 0.5". (2) Find the apparent RA and Dec of the Sun for every day in 1997 IDL> jdcnv, 1997,1,1,0, jd ;Julian date on Jan 1, 1997 IDL> sunpos, jd+ dindgen(365), ra, dec ;RA and Dec for each day MODIFICATION HISTORY: Written by Michael R. Greason, STX, 28 October 1988. Accept vector arguments, W. Landsman April,1989 Eliminated negative right ascensions. MRG, Hughes STX, 6 May 1992. Rewritten using the 1993 Almanac. Keywords added. MRG, HSTX, 10 February 1994. Major rewrite, improved accuracy, always return values in degrees W. Landsman May, 1996 Added /RADIAN keyword, W. Landsman August, 1997 Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/astro/sunpos.pro)
SUNSYMBOL
NAME: SUNSYMBOL PURPOSE: Return the Sun symbol as a subscripted postscript character string EXPLANATION: Returns the Sun symbol (circle with a dot in the middle) as a (subscripted) postscript character string. Needed because although the Sun symbol is available using the vector fonts as the string '!9n', it is not in the standard postscript set. CALLING SEQUENCE: result = SUNSYMBOL([FONT= ]) INPUTS: None OPTIONAL INPUT KEYWORDS: font = scalar font graphics keyword (-1,0 or 1) for text. Note that this keyword is useful for printing text with XYOUTS but *not* e.g. the XTIT keyword to PLOT where the font call to PLOT takes precedence. OUTPUTS: result - a scalar string representing the Sun symbol. A different string is output depending (1) the device is postscript and hardware fonts are used (!P.FONT=0), (2) vector fonts are used, or (3) hardware fonts are used on a non-postscript device. For case (3), SUNSYMBOL simply outputs the 3 character string 'Sun' EXAMPLE: To make the X-axis of a plot read M/M_Sun IDL> plot,indgen(10),xtit = 'M / M' + sunsymbol() RESTRICTIONS: (1) The postscript output does not have the dot perfectly centered in the circle. For a better symbol, consider postprocessing with psfrag (see http://www.astrobetter.com/idl-psfrag/ ). (2) SUNSYMBOL() includes subscript output positioning commands in the output string. (3) True type fonts (!p.font = 1) are not supported. If you want to make a Sun symbol with true type fonts, see the discussion of installing the Marvosym font at http://tinyurl.com/mst5q REVISION HISTORY: Written, W. Landsman, HSTX April, 1997 Converted to IDL V5.0 W. Landsman September 1997 Allow font keyword to be passed. T. Robishaw Apr. 2006
(See $IDLUTILS_DIR/goddard/pro/plot/sunsymbol.pro)
SXADDHIST
NAME: SXADDHIST PURPOSE: Procedure to add HISTORY (or COMMENT) line(s) to a FITS header EXPLANATION: The advantage of using SXADDHIST instead of SXADDPAR is that with SXADDHIST many HISTORY or COMMENT records can be added in a single call. CALLING SEQUENCE sxaddhist, history, header, [ /PDU, /COMMENT ] INPUTS: history - string or string array containing history or comment line(s) to add to the FITS header INPUT/OUTPUT header - FITS header (string array). Upon output, it will contain the specified HISTORY records added to the end OPTIONAL KEYWORD INPUTS: /BLANK - If specified then blank (' ') keywords will be written rather than 'HISTORY ' keywords. /COMMENT - If specified, then 'COMMENT ' keyword will be written rather than 'HISTORY ' keywords. Note that according to the FITS definition, any number of 'COMMENT' and 'HISTORY' or blank keywords may appear in a header, whereas all other keywords may appear only once. LOCATION=key - If present, the history will be added before this keyword. Otherwise put it at the end. /PDU - if specified, the history will be added to the primary data unit header, (before the line beginning BEGIN EXTENSION...) Otherwise, it will be added to the end of the header. This has meaning only for extension headers using the STScI inheritance convention. OUTPUTS: header - updated FITS header EXAMPLES: sxaddhist, 'I DID THIS', header ;Add one history record hist = strarr(3) hist[0] = 'history line number 1' hist[1[ = 'the next history line' hist[2] = 'the last history line' sxaddhist, hist, header ;Add three history records SIDE EFFECTS: Header array is truncated to the final END statement LOCATION overrides PDU. HISTORY: D. Lindler Feb. 87 April 90 Converted to new idl D. Lindler Put only a single space after HISTORY W. Landsman November 1992 Aug. 95 Added PDU keyword parameters Converted to IDL V5.0 W. Landsman September 1997 LOCATION added. M. Greason, 28 September 2004.
(See $IDLUTILS_DIR/goddard/pro/fits/sxaddhist.pro)
SXADDPAR
NAME: SXADDPAR PURPOSE: Add or modify a parameter in a FITS header array. CALLING SEQUENCE: SXADDPAR, Header, Name, Value, [ Comment, Location, /SaveComment, BEFORE =, AFTER = , FORMAT= , /PDU] INPUTS: Header = String array containing FITS or STSDAS header. The length of each element must be 80 characters. If not defined, then SXADDPAR 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 'COMMENT' or 'HISTORY' or a blank string then the value will be added to the record without replacement. For these cases, 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. OPTIONAL INPUT PARAMETERS: Comment = String field. The '/' is added by this routine. Added starting in position 31. If not supplied, or set equal to '', or /SAVECOMMENT is set, then the previous comment field is retained (when found) Location = Keyword string name. The parameter will be placed before the location of this keyword. This parameter is identical to the BEFORE keyword and is kept only for consistency with earlier versions of SXADDPAR. OPTIONAL INPUT KEYWORD PARAMETERS: 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. If not supplied then the default is 'G19.12' for double precision, and 'G14.7' for floating point. /PDU = specifies keyword is to be added to the primary data unit header. If it already exists, it's current value is updated in the current position and it is not moved. /SAVECOMMENT = if set, then any existing comment is retained, i.e. the COMMENT parameter only has effect if the keyword did not previously exist in the header. OUTPUTS: Header = updated FITS header array. EXAMPLE: Add a keyword 'TELESCOP' with the value 'KPNO-4m' and comment 'Name of Telescope' to an existing FITS header h. IDL> sxaddpar, h, 'TELESCOPE','KPNO-4m','Name of Telescope' NOTES: The functions SXADDPAR() and FXADDPAR() are nearly identical, with the major difference being that FXADDPAR forces required FITS keywords BITPIX, NAXISi, EXTEND, PCOUNT, GCOUNT to appear in the required order in the header, and FXADDPAR supports the OGIP LongString convention. There is no particular reason for having two nearly identical procedures, but both are too widely used to drop either one. 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 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. RESTRICTIONS: Warning -- Parameters and names are not checked against valid FITS parameter names, values and types. MODIFICATION HISTORY: DMS, RSI, July, 1983. D. Lindler Oct. 86 Added longer string value capability Converted to NEWIDL D. Lindler April 90 Added Format keyword, J. Isensee, July, 1990 Added keywords BEFORE and AFTER. K. Venkatakrishna, May '92 Pad string values to at least 8 characters W. Landsman April 94 Aug 95: added /PDU option and changed routine to update last occurence of an existing keyword (the one SXPAR reads) instead of the first occurence. Comment for string data can start after column 32 W. Landsman June 97 Make sure closing quote supplied with string value W. Landsman June 98 Converted to IDL V5.0 W. Landsman June 98 Increase precision of default formatting of double precision floating point values. C. Gehman, JPL September 1998 Mar 2000, D. Lindler, Modified to use capital E instead of lower case e for exponential formats. Apr 2000, Make user-supplied format upper-case W. Landsman Oct 2001, Treat COMMENT or blank string like HISTORY keyword W. Landsman Jan 2002, Allow BEFORE, AFTER to apply to COMMENT keywords W. Landsman June 2003, Added SAVECOMMENT keyword W. Landsman Jan 2004, If END is missing, then add it at the end W. Landsman May 2005 Fix SAVECOMMENT error with non-string values W. Landsman Oct 2005 Jan 2004 change made SXADDPAR fail for empty strings W.L. May 2011 Fix problem with slashes in string values W.L.
(See $IDLUTILS_DIR/goddard/pro/fits/sxaddpar.pro)
SXDELPAR
NAME: SXDELPAR PURPOSE: Procedure to delete a keyword parameter(s) from a FITS header CALLING SEQUENCE: sxdelpar, h, parname INPUTS: h - FITS or STSDAS header, string array parname - string or string array of keyword name(s) to delete OUTPUTS: h - updated FITS header, If all lines are deleted from the header, then h is returned with a value of 0 EXAMPLE: Delete the astrometry keywords CDn_n from a FITS header, h IDL> sxdelpar, h, ['CD1_1','CD1_2','CD2_1','CD2_2'] NOTES: (1) No message is returned if the keyword to be deleted is not found (2) All appearances of a keyword in the header will be deleted HISTORY: version 1 D. Lindler Feb. 1987 Test for case where all keywords are deleted W. Landsman Aug 1995 Allow for headers with more than 32767 lines W. Landsman Jan. 2003 Use ARRAY_EQUAL, cleaner syntax W. L. July 2009
(See $IDLUTILS_DIR/goddard/pro/fits/sxdelpar.pro)
SXGINFO
NAME: SXGINFO PURPOSE: Return information on all group parameters in an STSDAS header. EXPLANATION: Return datatype, starting byte, and number bytes for all group parameters in an STSDAS file. Obtaining these values greatly speed up execution time in subsequent calls to SXGPAR. CALLING SEQUENCE: sxginfo, h, par, type, sbyte, nbytes INPUTS: h - header returned by SXOPEN par - parameter block returned by SXREAD or multiple parameter blocks stored in array of dimension greater than one. OUTPUT: type - data type (if not supplied or null string, the header is searched for type,sbyte, and nbytes) sbyte - starting byte in parameter block for data nbytes - number of bytes in parameter block for data The number of elements in type,sbyte and nbytes equals the total number of group parameters. METHOD: The parameter type for each parameter is obtained from PDTYPEn keyword. If not found then DATATYPE keyword value is used. If that is not found then BITPIX is used. BITPIX=8, byte; BITPIX=16 integer*2; BITPIX=32 integer*4. NOTES: For an example of the use of SXGINFO, see CONV_STSDAS HISTORY: version 1 W. Landsman Apr. 93 Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/sdas/sxginfo.pro)
SXGPAR
NAME: SXGPAR PURPOSE: Obtain group parameter value in SDAS/FITS file CALLING SEQUENCE: result = sxgpar( h, par, name, [ type, sbyte, nbytes] ) INPUTS: h - header returned by SXOPEN par - parameter block returned by SXREAD or multiple parameter blocks stored in array of dimension greater than one. name - parameter name (keyword PTYPEn) or integer parameter number. OPTIONAL INPUT/OUTPUT type - data type (if not supplied or null string, the header is searched for type,sbyte, and nbytes) sbyte - starting byte in parameter block for data nbytes - number of bytes in parameter block for data OUTPUT: parameter value or value(s) returned as function value SIDE EFFECTS: If an error occured then !err is set to -1 OPERATIONAL NOTES: Supplying type, sbyte and nbytes greatly decreases execution time. The best way to get the types is on the first call pass undefined variables for the three parameters or set type = ''. The routine will then return their values for use in subsequent calls. METHOD: The parameter type for parameter n is obtained from PDTYPEn keyword. If not found then DATATYPE keyword value is used. If that is not found then BITPIX is used. BITPIX=8, byte; BITPIX=16 integer*2; BITPIX=32 integer*4. HISTORY: version 1 D. Lindler Oct. 86 version 2 D. Lindler Jan. 90 added ability to process multiple parameter blocks in single call version 3 D. Lindler (converted to New vaxidl) Apr 14 1991 JKF/ACC - fixed make_array datatypes(float/double) Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/sdas/sxgpar.pro)
SXGREAD
NAME: SXGREAD PURPOSE: Read group parameters from a Space Telescope STSDAS image file CALLING SEQUENCE: grouppar = sxgread( unit, group ) INPUTS: UNIT = Supply same unit as used in SXOPEN. GROUP = group number to read. if omitted, read first group. The first group is number 0. OUTPUTS: GROUPPAR = parameter values from fits group parameter block. It is a byte array which may contain multiple data types. The function SXGPAR can be used to retrieve values from it. COMMON BLOCKS: Uses IDL Common STCOMMN to access parameters. SIDE EFFECTS: IO is performed. MODIFICATION HISTORY: WRITTEN, Don Lindler, July, 1 1987 MODIFIED, Don Neill, Jan 11, 1991 - derived from sxread.pro Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/sdas/sxgread.pro)
SXHCOPY
NAME: SXHCOPY PURPOSE: Copies selected portions of one header to another CALLING SEQUENCE: sxhcopy, h, keyword1, keyword2, hout INPUTS: h - input header keyword1 - first keyword to copy keyword2 - last keyword to copy INPUT/OUTPUT: hout - header to copy the information to. METHOD: the headers lines from keyword1 to keyword2 are copied to the end of the output header. No check is made to verify that a keyword value already exists in the output header. HISTORY: version 1 D. Lindler Sept. 1989 Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/sdas/sxhcopy.pro)
SXHMAKE
NAME: SXHMAKE PURPOSE: Create a basic STSDAS header file from an IDL data array CALLING SEQUENCE: sxhmake, Data, Groups, Header INPUTS: Data = IDL data array of the same type, dimensions and size as are to be written to file. Groups = # of groups to be written. OUTPUTS: Header = String array containing ST header file. PROCEDURE: Call sxhmake to create a header file. Then call sxopen to open output image, followed by sxwrite to write the data. If you do not plan to change the header created by sxhmake before calling sxopen, you might consider using sxmake which does both steps. MODIFICATION HISTORY: Don Lindler Feb 1990 modified from SXMAKE by DMS, July, 1983. D. Lindler April 90 Converted to new VMS IDL M. Greason May 1990 Header creation bugs eliminated. W. Landsman Aug 1997 Use SYSTIME() instead of !STIME for V5.0 Converted to IDL V5.0 W. Landsman September 1997 Recognize unsigned datatype January 2000 W. Landsman
(See $IDLUTILS_DIR/goddard/pro/sdas/sxhmake.pro)
SXHREAD
NAME: SXHREAD PURPOSE: Procedure to read a STSDAS header from disk. EXPLANATION: This version of SXHREAD can read two types of disk files (1) Unix stream files with a CR after every 80 bytes (2) Variable length record files (3) Fixed length (80 byte) record files CALLING SEQUENCE: sxhread, name, header INPUT: name - file name, scalar string. An extension of .hhh is appended if not already supplied. (Note STSDAS headers are required to have a 3 letter extension ending in 'h'.) gzip extensions .gz will be recognized as compressed. OUTPUT: header - STSDAS header, string array NOTES: SXHREAD does not do any checking to see if the file is a valid STSDAS header. It simply reads the file into a string array with 80 byte elements HISTORY: Version 1 D. Lindler July, 1987 Version 2 M. Greason, August 1990 Use READU for certain ST VAX GEIS files W. Landsman January, 1992 Read variable length Unix files E. Deutsch/W. Landsman November, 1994 Converted to IDL V5.0 W. Landsman September 1997 Updated by E. Artigau to handle gzipped fits August 2004 Remove VMS support, W. Lnadsman September 2006
(See $IDLUTILS_DIR/goddard/pro/sdas/sxhread.pro)
SXHWRITE
NAME: SXHWRITE PURPOSE: Procedure to write an STSDAS or FITS header to disk as a *.hhh file. CALLING SEQUENCE: SXHWRITE,name,h INPUTS: name - file name. If an extension is supplied it must be 3 characters ending in "h". h - FITS header, string array SIDE EFFECTS: File with specified name is written. If qualifier not specified then .hhh is used SXHWRITE will modify the header in the following ways, if necessary (1) If not already present, an END statement is added as the last line. Lines after an existing END statment are deleted. (2) Spaces are appended to force each line to be 80 characters. (3) On Unix machines, a carriage return is appended at the end of each line. This is consistent with STSDAS and allows the file to be directly displayed on a stream device PROCEDURES USED: zparcheck, fdecomp HISTORY: version 1 D. Lindler June 1987 conversion cleaned up. M. Greason, June 1990 Add carriage return at the end of Unix files W. Landsman Oct 1991 Use SYSTIME() instead of !STIME for V5.0 compatibility Aug 1997 Assume since V55, remove VMS support
(See $IDLUTILS_DIR/goddard/pro/sdas/sxhwrite.pro)
SXMAKE
NAME: SXMAKE PURPOSE: Create a basic ST header file from an IDL array prior to writing data. CALLING SEQUENCE: sxmake, Unit, File, Data, Par, Groups, Header, [ PSIZE = ] INPUTS: Unit = Logical unit number from 1 to 9. File = file name of data and header files to create. If no file name extension is supplied then the default is to use .hhh for the header file extension and .hhd for the data file extension If an extension is supplied, it should be of the form .xxh where xx are any alphanumeric characters. Data = IDL data array of the same type, dimensions and size as are to be written to file. Par = # of elements in each parameter block for each data record. If set equal to 0, then parameter blocks will not be written. The data type of the parameter blocks must be the same as the data array. To get around this restriction, use the PSIZE keyword. Groups = # of groups to write. If 0 then write in basic format without groups. OPTIONAL INPUT PARAMETERS: Header = String array containing ST header file. If this parameter is omitted, a basic header is constructed. If included, the basic parameters are added to the header using sxaddpar. The END keyword must terminate the parameters in Header. OPTIONAL KEYWORD INPUT PARAMETER: PSIZE - Integer scalar giving the number of bits in the parameter block. If the PSIZE keyword is given, then the Par input parameter is ignored. OPTIONAL OUTPUT PARAMETERS: Header = ST header array, an 80 by N character array. COMMON BLOCKS: Stcommn - as used in sxwrite, sxopen, etc. SIDE EFFECTS: The header file is created and written and then the data file is opened on the designated unit. RESTRICTIONS: Header files must be named .xxh and data files must be named .xxd, where xx are any alphanumeric characters. PROCEDURE: Call sxmake to create a header file. Then call sxwrite to output each group. PROCEDURES USED: GET_DATE, SXADDPAR, SXOPEN MODIFICATION HISTORY: DMS, July, 1983. converted to new VMS IDL April 90 Use SYSTIME() instead of !STIME W. Landsman Aug 1997 Converted to IDL V5.0 W. Landsman September 1997 Added optional PSIZE keyword August 1999 W. Landsman Recognize unsigned datatype January 2000 W. Landsman
(See $IDLUTILS_DIR/goddard/pro/sdas/sxmake.pro)
SXOPEN
NAME: SXOPEN PURPOSE: Open a Space Telescope formatted (STSDAS) header file. EXPLANATION: Saves the parameters required subsequent SX routines in the common block Stcommn. Optionally save the header in the string array Header, and the history in the string array History. Open the data file associated with this header on the same unit. CALLING SEQUENCE: SXOPEN, Unit, Fname [, Header [,History] [,Access]] INPUTS: Unit = IDL unit used for IO. Must be from 1 to 9. Fname = File name of header file. Default extension is .hhh for header files and .hhd for data files. If an extension is supplied it must have the form .xxh where xx are any alphanumeric characters. The data file must have extension .xxd No version number is allowed. Most recent versions of the files are used. OPTIONAL INPUT PARAMETER: Access = 'R' to open for read, 'W' to open for write. OUTPUTS: Stcommn = Common block containing ST parameter blocks. (Long arrays.) OPTIONAL OUTPUT PARAMETERS: Header = 80 char by N string array containing the names, values and comments from the FITS header. Use the function SXPAR to obtain individual parameter values. History = String array containing the value of the history parameter. COMMON BLOCKS: STCOMMN - Contains RESULT(20,10) where RESULT(i,LUN) = 0 - 121147 for consistency check, 1 - Unit for consistency, 2 - bitpix, 3 - naxis, 4 - groups (0 or 1), 5 - pcount, 6 - gcount, 7 - psize, 8 - data type as idl type code, 9 - bytes / record, 10 to 10+N-1 - dimension N, 17 = record length of file in bytes. 18 - # of groups written, 19 = gcount. SIDE EFFECTS: The data and header files are accessed. RESTRICTIONS: Works only for disc files. The data file must have must have the extension ".xxd" and the header file must have the extension ".xxh" where x is any alphanumeric character PROCEDURE: The header file is opened and each line is read. Important parameters are stored in the output parameter. If the last two parameters are specified the parameter names and values are stored. The common block STCOMMN is filled with the type of data, dimensions, etc. for use by SXREAD. If access is for write, each element of the header array, which must be supplied, is written to the header file. The common block is filled with relevant parameters for SXWRITE. A keyword of "END" ends the header. MODIFICATION HISTORY: Written, DMS, May, 1983. D. Lindler Feb. 1990 Modified to allow var. record length header files. D. Lindler April 1990 Conversion to new VMS IDL Added /BLOCK when opening new .hhd file Converted to IDL V5.0 W. Landsman September 1997 Recognize unsigned datatype for V5.1 or greater W. Landsman Jan 2000 Assume since V5.5 W. Landsman Sep 2006
(See $IDLUTILS_DIR/goddard/pro/sdas/sxopen.pro)
SXPAR
NAME: SXPAR PURPOSE: Obtain the value of a parameter in a FITS header CALLING SEQUENCE: result = SXPAR( Hdr, Name, [ Abort, COUNT=, COMMENT =, /NoCONTINUE, /SILENT ]) INPUTS: Hdr = FITS header array, (e.g. as returned by READFITS) string array, each element should have a length of 80 characters Name = String name of the parameter to return. If Name is of the form 'keyword*' then an array is returned containing values of keywordN where N is a positive (non-zero) integer. The value of keywordN will be placed in RESULT[N-1]. The data type of RESULT will be the type of the first valid match of keywordN found. OPTIONAL INPUTS: ABORT - string specifying that SXPAR should do a RETALL if a parameter is not found. ABORT should contain a string to be printed if the keyword parameter is not found. If not supplied, SXPAR will return quietly with COUNT = 0 (and !ERR = -1) if a keyword is not found. OPTIONAL INPUT KEYWORDS: /NOCONTINUE = If set, then continuation lines will not be read, even if present in the header /SILENT - Set this keyword to suppress warning messages about duplicate keywords in the FITS header. OPTIONAL OUTPUT KEYWORDS: COUNT - Optional keyword to return a value equal to the number of parameters found by SXPAR, integer scalar COMMENT - Array of comments associated with the returned values OUTPUTS: Function value = value of parameter in header. If parameter is double precision, floating, long or string, the result is of that type. Apostrophes are stripped from strings. If the parameter is logical, 1b is returned for T, and 0b is returned for F. If Name was of form 'keyword*' then a vector of values are returned. SIDE EFFECTS: !ERR is set to -1 if parameter not found, 0 for a scalar value returned. If a vector is returned it is set to the number of keyword matches found. The use of !ERR is deprecated, and instead the COUNT keyword is preferred If a keyword (except HISTORY or COMMENT) occurs more than once in a header, a warning is given, and the *last* occurence is used. EXAMPLES: Given a FITS header, h, return the values of all the NAXISi values into a vector. Then place the history records into a string vector. IDL> naxisi = sxpar( h ,'NAXIS*') ; Extract NAXISi value IDL> history = sxpar( h, 'HISTORY' ) ; Extract HISTORY records PROCEDURE: The first 8 chacters of each element of Hdr are searched for a match to Name. The value from the last 20 characters is returned. An error occurs if there is no parameter with the given name. If a numeric value has no decimal point it is returned as type LONG. If it contains more than 8 numerals, or contains the characters 'D' or 'E', then it is returned as type DOUBLE. Otherwise it is returned as type FLOAT. Very large integer values, outside the range of valid LONG, are returned as DOUBLE. If the value is too long for one line, it may be continued on to the the next input card, using the OGIP CONTINUE convention. For more info, see http://fits.gsfc.nasa.gov/registry/continue_keyword.html Complex numbers are recognized as two numbers separated by one or more space characters. If a numeric value has no decimal point (or E or D) it is returned as type LONG. If it contains more than 8 numerals, or contains the character 'D', then it is returned as type DOUBLE. Otherwise it is returned as type FLOAT. If an integer is too large to be stored as type LONG, then it is returned as DOUBLE. NOTES: The functions SXPAR() and FXPAR() are nearly identical, although FXPAR() has slightly more sophisticated parsing, and additional keywords to specify positions in the header to search (for speed), and to force the output to a specified data type.. There is no particular reason for having two nearly identical procedures, but both are too widely used to drop either one. PROCEDURES CALLED: GETTOK(), VALID_NUM() MODIFICATION HISTORY: DMS, May, 1983, STPAR Written. D. Lindler Jan 90 added ABORT input parameter J. Isensee Jul,90 added COUNT keyword W. Thompson, Feb. 1992, added support for FITS complex values. W. Thompson, May 1992, corrected problem with HISTORY/COMMENT/blank keywords, and complex value error correction. W. Landsman, November 1994, fix case where NAME is an empty string W. Landsman, March 1995, Added COMMENT keyword, ability to read values longer than 20 character W. Landsman, July 1995, Removed /NOZERO from MAKE_ARRAY call T. Beck May 1998, Return logical as type BYTE W. Landsman May 1998, Make sure integer values are within range of LONG W. Landsman Feb 1998, Recognize CONTINUE convention W. Landsman Oct 1999, Recognize numbers such as 1E-10 as floating point W. Landsman Jan 2000, Only accept integer N values when name = keywordN W. Landsman Dec 2001, Optional /SILENT keyword to suppress warnings W. Landsman/D. Finkbeiner Mar 2002 Make sure extracted vectors of mixed data type are returned with the highest type. W.Landsman Aug 2008 Use vector form of VALID_NUM() W. Landsman Jul 2009 Eliminate internal recursive call W. Landsman Apr 2012 Require vector numbers be greater than 0
(See $IDLUTILS_DIR/goddard/pro/fits/sxpar.pro)
SXREAD
NAME: SXREAD PURPOSE: Read a Space Telescope STSDAS image file CALLING SEQUENCE: result = sxread( Unit, group , [par] ) INPUTS: UNIT = Unit number of file, must be from 1 to 9. Unit must have been opened with SXOPEN. GROUP = group number to read. if omitted, read first record. The first record is number 0. OUTPUTS: Result of function = array constructed from designated record. OPTIONAL OUTPUT: PAR = Variable name into which parameter values from STSDAS group parameter block are read. It is a byte array which may contain multiple data types. The function SXGPAR can be used to retrieve values from it. COMMON BLOCKS: Uses IDL Common STCOMMN to access parameters. NOTES: Use the function SXGREAD to read the group parameter blocks without having to read the group array. If the STSDAS file does not contain groups, then the optional output parameter PAR is returned undefined, but no error message is given. SIDE EFFECTS: IO is performed. MODIFICATION HISTORY: WRITTEN, Don Lindler, July, 1 1987 Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/sdas/sxread.pro)
SXWRITE
NAME: SXWRITE PURPOSE: Write a group of data and parameters in ST format to a STSDAS data file. CALLING SEQUENCE: SXWRITE, Unit, Data,[ Par] INPUTS: Unit = unit number of file. The file must have been previously opened by SXOPEN. Data = Array of data to be written. The dimensions must agree with those supplied to SXOPEN and written into the FITS header. The type is converted if necessary. OPTIONAL INPUT PARAMETERS: Par = parameter block. The size of this array must agree with the Psize parameter in the FITS header. OUTPUTS: None. COMMON BLOCKS: STCOMMN - Contains RESULT(20,10) where RESULT(i,LUN) = 0 - 121147 for consistency check, 1 - Unit for consistency, 2 - bitpix, 3 - naxis, 4 - groups (0 or 1), 5 - pcount, 6 - gcount, 7 - psize, 8 - data type as idl type code, 9 - bytes / record, 10 to 10+N-1 - dimension N, 18 - # of groups written, 19 = gcount. SIDE EFFECTS: The data are written into the next group. RESTRICTIONS: SXOPEN must have been called to initialize the header and the common block. MODIFICATION HISTORY: DMS, July, 1983. D.Lindler July, 1986 - changed block size of file to 512 moved group parameters after the groups data. D.Lindler July, 1987 - modified to allow any size parameter block (in bytes). D. Lindler April, 1990 - converted to new VMS IDL Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/sdas/sxwrite.pro)
SYMCAT
NAME: SYMCAT PURPOSE: This function provides a symbol catalog for specifying a number of plotting symbols. AUTHOR: FANNING SOFTWARE CONSULTING David Fanning, Ph.D. 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com CATEGORY: Graphics CALLING SEQUENCE: Plot, findgen(11), PSYM=SYMCAT(theSymbol) To connect symbols with lines, use a negative value for the PSYM keyword: Plot, findgen(11), PSYM=-SYMCAT(theSymbol) INPUTS: theSymbol: The number of the symbol you wish to use. Possible values are: 0 : No symbol. 1 : Plus sign. 2 : Asterisk. 3 : Dot (period). 4 : Open diamond. 5 : Open upward triangle. 6 : Open square. 7 : X. 8 : Defined by the user with USERSYM. 9 : Open circle. 10 : Histogram style plot. 11 : Open downward triangle. 12 : Open rightfacing triangle. 13 : Open leftfacing triangle. 14 : Filled diamond. 15 : Filled square. 16 : Filled circle. 17 : Filled upward triangle. 18 : Filled downward triangle. 19 : Filled rightfacing triangle. 20 : Filled leftfacing triangle. 21 : Hourglass. 22 : Filled Hourglass. 23 : Bowtie. 24 : Filled bowtie. 25 : Standing Bar. 26 : Filled Standing Bar. 27 : Laying Bar. 28 : Filled Laying Bar. 29 : Hat up. 30 : Hat down. 31 : Hat right. 32 : Hat down. 33 : Big cross. 34 : Filled big cross. 35 : Circle with plus. 36 : Circle with X. 37 : Upper half circle. 38 : Filled upper half circle. 39 : Lower half circle. 40 : Filled lower half circle. 41 : Left half circle. 42 : Filled left half circle. 43 : Right half circle. 44 : Filled right half circle. 45 : Star. 46 : Filled star. RETURN VALUE: The return value is whatever is appropriate for passing along to the PSYM keyword of (for example) a PLOT or OPLOT command. For the vast majority of the symbols, the return value is 8. KEYWORDS: COLOR: Set this keyword to the color (index or 24-bit value) of the color desired. For example: Plot, Findgen(11), COLOR=cgColor('yellow'), PSYM=-SYMCAT(4, COLOR=cgColor('green')) THICK: Set this keyword to the thickness desired. Default is 1. MODIFICATION HISTORY: Written by David W. Fanning, 2 September 2006. Loosely based on the program MC_SYMBOL introduced on the IDL newsgroup 1 September 2006, and MPI_PLOTCONFIG__DEFINE from the Coyote Library. 2 October 2006. DWF. Modified to allow PSYM=8 and PSYM=10 to have their normal meanings. This shifted previous symbols by two values from their old meanings. For example, an hourglass went from symbol number 19 to 21. Whoops! Added two symbols but forgot to change limits to allow for them. 4 May 2007. DWF. Added THICK keyword. 21 Aug 2007. DWF. Added COLOR keyword and made THICK keyword apply to all symbols. 11 Nov 2008. DWF.
(See $IDLUTILS_DIR/goddard/pro/coyote/symcat.pro)
TABINV
NAME: TABINV PURPOSE: To find the effective index of a function value in an ordered vector. CALLING SEQUENCE: TABINV, XARR, X, IEFF, [/FAST] INPUTS: XARR - the vector array to be searched, must be monotonic increasing or decreasing X - the function value(s) whose effective index is sought (scalar or vector) OUTPUT: IEFF - the effective index or indices of X in XARR always floating point, same # of elements as X OPTIONAL KEYWORD INPUT: /FAST - If this keyword is set, then the input vector is not checked for monotonicity, in order to improve the program speed. RESTRICTIONS: TABINV will abort if XARR is not monotonic. (Equality of neighboring values in XARR is allowed but results may not be unique.) This requirement may mean that input vectors with padded zeroes could cause routine to abort. PROCEDURE: VALUE_LOCATE() is used to find the values XARR[I] and XARR[I+1] where XARR[I] < X < XARR[I+1]. IEFF is then computed using linear interpolation between I and I+1. IEFF = I + (X-XARR[I]) / (XARR[I+1]-XARR[I]) Let N = number of elements in XARR if x < XARR[0] then IEFF is set to 0 if x > XARR[N-1] then IEFF is set to N-1 EXAMPLE: Set all flux values of a spectrum (WAVE vs FLUX) to zero for wavelengths less than 1150 Angstroms. IDL> tabinv, wave, 1150.0, I IDL> flux[ 0:fix(I) ] = 0. FUNCTIONS CALLED: None REVISION HISTORY: Adapted from the IUE RDAF January, 1988 More elegant code W. Landsman August, 1989 Mod to work on 2 element decreasing vector August, 1992 Updated for V5.3 to use VALUE_LOCATE() W. Landsman January 2000 Work when both X and Xarr are integers W. Landsman August 2001 Use ARRAY_EQUAL, always internal double precision W.L. July 2009 Allow Double precision output, faster test for monotonicity. WL, January 2012
(See $IDLUTILS_DIR/goddard/pro/math/tabinv.pro)
TABLE_APPEND
NAME: TABLE_APPEND PURPOSE: Routine to append STSDAS tables to create a single table. Input tables must all have identical columns. CALLING SEQUENCE: table_append,list,name INPUTS: list - string array listing the file names or a string scalar giving a file name template. name - output file name. SIDE EFFECTS: a new STSDAS table is created with the specified name. OPERATIONAL NOTES: all input tables must have the same number of columns with the same names, datatypes, and column order. Header parameters are taken only from the first table. HISTORY: version 1 D. Lindler April 1989 Removed call to non-standard system variable !DUMP WBL September 1997 Converted to IDL V5.0 W. Landsman September 1997 Use file_search rather than findfile W. Landsman Sep 2006
(See $IDLUTILS_DIR/goddard/pro/sdas_table/table_append.pro)
TABLE_CALC
NAME: TABLE_CALC PURPOSE: Adds a new table column from a expression using existing columns CALLING SEQUENCE: table_calc, table, expression, table_out INPUTS: table - input SDAS table table expression - expression for new or updated column values. Any legal IDL expression is valid where existing column names can be used as variables. User functions within the expression are allowed if the function is in an IDL library or previously compiled. OPTIONAL INPUT: table_out - output table name. If not supplied, the input name is used. OUTPUTS: a new SDAS table file is created. EXAMPLES: create a column WAVELENGTH in table TAB which is the average of the WLOW and WHIGH columns of table TAB. table_calc,'tab','WAVELENGTH=(WLOW+WHIGH)/2.0' add a column SINX which is the sin of column X to table JUNK. table_calc,'junk','SINX=sin(X)' add 10.0 to an existing column in table MYTAB. table_calc,'mytab','flux=flux+10.0' HISTORY version 1 D. Lindler November, 1989 Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/sdas_table/table_calc.pro)
TABLE_DELETE
NAME: TABLE_DELETE PURPOSE: Delete specified rows from an STSDAS table CALLING SEQUENCE: table_delete, name, rows, [ outname ] INPUT: name - table name rows - row (scalar) or rows(vector) to delete from the table OPTIONAL OUTPUT: outname - output table name, if not supplied the input name is used HISTORY: version 1 D. Lindler April 1989 Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/sdas_table/table_delete.pro)
TABLE_EXT
NAME: TABLE_EXT PURPOSE: Routine to extract columns from an STSDAS table CALLING SEQUENCE: TABLE_EXT, name, columns, v1, [v2,v3,v4,v5,v6,v7,v8,v9] INPUTS: name - table name, scalar string 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 EXAMPLES: Read wavelength and throughput vectors from STSDAS table, wfpc_f725.tab IDL> table_ext,'wfpc_f725.tab','wavelength,throughput',w,t or IDL> table_ext,'wfpc_f725.tab',[1,2],w,t PROCEDURES CALLED: GETTOK(), TAB_READ, TAB_VAL() HISTORY: version 1 D. Lindler May 1989 Accept Column Numbers as well as names, W. Landsman February 1996 Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/sdas_table/table_ext.pro)
TABLE_HELP
NAME: TABLE_HELP PURPOSE: Procedure to decribe an SDAS table file. CALLING SEQUENCE: table_help, tcb, header table_help, name INPUTS: tcb - table control block returned by TAB_READ or TAB_CREATE name - the table name OPTIONAL INPUTS: header - header array returned by TAB_READ. If supplied it will be printed, otherwise it won't. SIDE EFFECTS: text output as specified by !textout HISTORY: version 1 D. Lindler JAN 1988 Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/sdas_table/table_help.pro)
TABLE_LIST
NAME: TABLE_LIST PURPOSE: List the contents of an STSDAS table. EXPLANATION: Procedure to list contents of an STSDAS table. This does not print the table in tabular form but instead for each row prints the column name followed by its value (one column per output line. CALLING SEQUENCE: table_list, name, row1, row2, [ TEXTOUT=, /HEADER ] INPUTS: name - table name OPTIONAL KEYWORD INPUT: TEXTOUT - Scalar string giving output file name, or integer (1-5) specifying output device. See TEXTOPEN for more info. Default is to display output at the terminal HEADER - if set, the header is printed before the selected row printout OPTIONAL INPUTS: row1 - first row to list (default = first row) row2 - last row to list (default = last row) OUTPUT: text output is written to the output device specified by the TEXTOUT keyword, or the nonstandard system variable !TEXTOUT PROCEDURES USED: TAB_COL, TAB_READ, TAB_SIZE, TAB_VAL(), TEXTOPEN, TEXTCLOSE HISTORY: version 1 D. Lindler May 1989 July 1996, DJL, added /header keyword to optionally print header August 1996, WBL, added TEXTOUT keyword Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/sdas_table/table_list.pro)
TABLE_PRINT
NAME: TABLE_PRINT PURPOSE: Routine to print an stsdas table. CALLING SEQUENCE: table_print, name, columns, row1, row2 INPUTS: name - table name OPTIONAL INPUTS: columns - vector of column numbers to be printed or a string with column names separated by commas. If not supplied or set to the null string, all columns are printed. row1 - first row to print. (default=0) row2 - last row to print. (default=last row in table) SIDE EFFECTS: text is printed as directed by !textout HISTORY: version 1, D. Lindler Apr 89 Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/sdas_table/table_print.pro)
TABLE_SORT
NAME: TABLE_SORT PURPOSE: Procedure to sort an STSDAS table by the specified column CALLING SEQUENCE: table_sort, name, column, [ name_out ] INPUTS: name - table name column - column to sort on OPTIONAL INPUTS: name_out - output table name. If not supplied, input name is used. HISTORY: version 1 D. Lindler MAY 1989 Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/sdas_table/table_sort.pro)
TAB_ADDCOL
NAME: TAB_ADDCOL PURPOSE: Procedure to add a new column to an existing STSDAS table. CALLING SEQUENCE: tab_addcol, name, data, tcb, tab INPUTS: name - column name data - sample data of type to be written to the column. This parameter is only used to determine data type. INPUT/OUTPUTS: tcb - table control block tab - table array HISTORY: version 1 D. Lindler April 89 Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/sdas_table/tab_addcol.pro)
TAB_COL
NAME: TAB_COL PURPOSE: Procedure to extract column information from table control block CALLING SEQUENCE: tab_col, tcb, column, offset, width, datatype, name, units, format INPUTS: tcb - table control block returned by tab_open. column - column name (string) or column number OUTPUTS: offset - column offset bytes width - column width in bytes datatype - column data type: 6 - real*4 7 - real*8 4 - integer*4 1 - boolean 2 - character string name - column name units - column units format - format code SIDE EFFECTS: If the column is not found then !err is set to -1. Otherwise !err is set to the column number (starting at one). HISTORY: version 1 D. Lindler Jan 88 Converted to NEW IDL April 90 Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/sdas_table/tab_col.pro)
TAB_CREATE
NAME: TAB_CREATE PURPOSE: Procedure to create a new table file. CALLING SEQUENCE: tab_create, tcb, tab, maxcol, maxrows, row_len, tb_type OUTPUTS: tcb - table control block for reading from and writing to the file (see tab_open for description) tab - table array OPTIONAL INPUTS: maxcol - maximum allocated number of columns [default=10] maxrows - maximum allocated number of rows [default=100] row_len - row length in 2 byte units [default=2*maxcol] tb_type - table type 'row' or 'column' ordered SIDE EFFECTS: Table file is created and left opened to unit number tcb(0,0) for writing. HISTORY: version 1 D. Lindler Dec. 88 Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/sdas_table/tab_create.pro)
TAB_DEL
NAME: TAB_DEL PURPOSE: Delete specified row(s) from an STSDAS table CALLING SEQUENCE: tab_del, tcb, tab, rows INPUT/OUTPUTS tcb - table control block tab - table array OPTIONAL INPUTS: rows - row (scalar) or rows(vector) to delete from the table If not supplied all rows are deleted. HISTORY: version 1 D. Lindler April 1989 Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/sdas_table/tab_del.pro)
TAB_EXPAND
NAME: TAB_EXPAND PURPOSE: routine to expand the size of an SDAS table file. CALLING SEQUENCE: tab_expand, tcb, tab, maxcol, maxrow, rowlen INPUT/OUTPUT: tcb - table control block returned by routine TAB_READ or TAB_CREATE. tab - table array OPTIONAL INPUTS: maxcol - new maximum number of columns. maxrow - new maximum number of rows. rowlen - new maximum row length in 2 byte units. If maxcol, maxrow, or rowlen are supplied with values less than the previous maximums, the previous maximums are used. All values are defaulted to zero if not supplied. HISTORY: Version 1 D. Lindler Dec. 88 Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/sdas_table/tab_expand.pro)
TAB_FORTOSPP
NAME: TAB_FORTOSPP PURPOSE: Procedure to convert a FORTRAN format to an SPP format specfication. CALLING SEQUENCE: sppformat, format, sppformat INPUTS: format - fortran format specification OUTPUTS: sppformat - sppformat specification HISTORY: version 1 D. Lindler Jan, 1989 Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/sdas_table/tab_fortospp.pro)
TAB_MODCOL
NAME: TAB_MODCOL PURPOSE: Modify column description in a STSDAS table CALLING SEQUENCE: tab_modcol, tcb, column, units, format, newname INPUTS: tcb - table control block column - column name or number to be modified OPTIONAL INPUTS: units - string giving physical units for the column. If not supplied or set to the null string the units are not changed. format - print format (either fortran or SPP format) An spp format should be preceeded by a '%'. If not supplied or set to a null string, the print format for the column is not changed. newname - new name for the column. If not supplied or set to a null string, the name is not changed EXAMPLES: change the wavelength column to WAVE with a new format of 'F10.3' and columns units of ANGSTROMS. tab_modcol,tcb,'wavelength','ANGSTROMS','F10.3','WAVE' Change to print format of column 3 to spp format 20.10e tab_modcol,tcb,3,'','%20.10e' HISTORY: version 1 D. Lindler Apr 1989 Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/sdas_table/tab_modcol.pro)
TAB_NULL
NAME: TAB_NULL PURPOSE: function to locate null values within a vector of values from an STSDAS table. CALLING SEQUENCE result = tab_null(values) INPUTS: values - data value(s) OUTPUTS: a boolean variable is returned with the same length as values. 1 indicates that the corresponding value was null OPERATIONAL NOTES: Boolean columns in an STSDAS table does not presently have the capability to flag null values. HISTORY: version 1 D. Lindler April 1989 Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/sdas_table/tab_null.pro)
TAB_NULLROW
NAME: TAB_NULLROW PURPOSE: Insert null row(s) into a STSDAS table CALLING SEQUENCE: tab_nullrow, tcb, tab, [ row1, row2 ] INPUTS: tcb - table control block INPUT/OUTPUTS: tab - table array OPTIONAL INPUTS: row1 - first row number to insert nulls (default=0) row2 - last row number to insert nulls (default = last row) HISTORY: version 1, D. Lindler Apr 89 Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/sdas_table/tab_nullrow.pro)
TAB_PRINT
NAME: TAB_PRINT PURPOSE: Routine to print an stsdas table. CALLING SEQUENCE: tab_print, tcb, tab, columns, row1, row2 INPUTS: tcb - table control block returned by TAB_READ tab - table array read by TAB_READ OPTIONAL INPUTS: columns - vector of column numbers to be printed or a string with column names separated by commas. If not supplied or set to the null string, all columns are printed. row1 - first row to print. (default=0) row2 - last row to print. (default=last row in table) SIDE EFFECTS: text is printed as directed by !textout HISTORY: version 1, D. Lindler Apr 89 April 90 Converted to NEW IDL D. Lindler Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/sdas_table/tab_print.pro)
TAB_PUT
NAME: TAB_PUT PURPOSE: Procedure to place new values into a STSDAS table. CALLING SEQUENCE: tab_put, column, values, tcb, tab, row INPUTS: column - column name or number (if it is a new column then a column name must be specified) values - data values to add to the table INPUT/OUTPUTS: tcb - table control block tab - table array OPTIONAL INPUT: row - starting row to insert values HISTORY: version 1 D. Lindler April 1989 Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/sdas_table/tab_put.pro)
TAB_READ
NAME: TAB_READ PURPOSE: Procedure to read an SDAS table file CALLING SEQUENCE: tab_read,name,tcb,table,header INPUTS: name - name of the table file OUTPUTS: tcb - table control block Longword array of size 16 x maxcols+2 where maxcols is the maximum number of columns allocated for the table. tcb(*,0) contains: word 0 SPARE 1 number of user parameters 2 max. number of user par. allowed 3 number of rows in the table 4 number of allocated rows (for col. ordered tab) 5 number of columns defined 6 max number of columns 7 length of row used (in units of 2-bytes) 8 max row length (in units of 2-bytes) relevant only for row ordered tables. 9 table type (11 for row order, 12 for col. order) 15 update flag (0-readonly, 1-update) tcb(*,i) contains description of column i word 0 column number 1 offset for start of row in units of 2-bytes 2 width or column in 2-byte units 3 data type 6 = real*4 7 = real*8 4 = integer*4 1 = boolean*4 2 = character string 4-8 ascii column name up to 19 characters 9-13 column units (up to 19 characters) 14-15 format string tcb(*,max number of columns+1)= file name table - table array, Byte array row length (bytes) x nrows header - header parameters in form usable by sxpar, sxaddhist, sxaddpar, ect. HISTORY: Version 1 D. Lindler Jan 88 Converted to NEW IDL April 90 D. Lindler Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/sdas_table/tab_read.pro)
TAB_SIZE
NAME: TAB_SIZE PURPOSE: Routine to extract the table size from a table control block CALLING SEQUENCE: tab_size, tcb, nrows, ncols, maxrows, maxcols, rowlen, max_rowlen INPUTS: tcb - table control block OUTPUTS: nrows - number of rows in the table ncols - number of columns in the table maxrows - number of rows allocated maxcols - number of columns allocated rowlen - length of the rows in bytes max_rowlen - allocated row length HISTORY: version 1 D. Lindler April 1989 Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/sdas_table/tab_size.pro)
TAB_SORT
NAME: TAB_SORT PURPOSE: Procedure to sort table by the specified column CALLING SEQUENCE: tab_sort, column, tcb, tab INPUTS: column - column name or number to sort on tcb - table control block INPUT/OUTPUTS: tab - table array HISTORY: version 1 D. Lindler April 1989 Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/sdas_table/tab_sort.pro)
TAB_SPPTOFOR
NAME: TAB_SPPTOFOR PURPOSE: This procedure converts an spp format specification to a normal Fortran format specification. CALLING SEQUENCE: tab_spptofor, sppformat, format, width INPUTS: sppformat - spp format specification (without preceeding %) OUTPUTS: forformat - fortran format specification (string) width - field width (integer) HISTORY: version 1 D. Lindler Jan 1989 Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/sdas_table/tab_spptofor.pro)
TAB_VAL
NAME: TAB_VAL PURPOSE: Routine to read a column from an SDAS table file CALLING SEQUENCE: values = tab_val( tcb, table, column, [ rows ] ) INPUTS: tcb - table control block returned by tab_val table - table array returned by tab_val column - scalar column name or number OPTIONAL INPUT: rows - scalar giving row number or vector giving rows. If not supplied all rows are returned. OUTPUT: the values for the specified column (and rows) is returned as the function value. If row is specified as a scalar (single row) then the result will be a scalar. HISTORY: version 1 D. Lindler Jan. 1988 Allow for a null column Landsman/Feggans April 1992 Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/sdas_table/tab_val.pro)
TAB_WRITE
NAME: TAB_WRITE PURPOSE: Routine to write an stsdas table to disk CALLING SEQUENCE: tab_write, name, tcb, tab, header INPUTS: name - file name (default extension = .tab) tcb - table control block tab - table array OPTIONAL INPUT: header - FITS header array HISTORY: version 1 D. Lindler April 1989 Converted to IDL V5.0 W. Landsman September 1997 Remove VMS-specific OPEN statement W. Landsman September 2006
(See $IDLUTILS_DIR/goddard/pro/sdas_table/tab_write.pro)
TAG_EXIST()
NAME: TAG_EXIST() PURPOSE: To test whether a tag name exists in a structure. EXPLANATION: Routine obtains a list of tagnames and tests whether the requested one exists or not. The search is recursive so if any tag names in the structure are themselves structures the search drops down to that level. (However, see the keyword TOP_LEVEL). CALLING SEQUENCE: status = TAG_EXIST(str, tag, [ INDEX =, /TOP_LEVEL, /QUIET ] ) INPUT PARAMETERS: str - structure variable to search tag - tag name to search for, scalar string OUTPUTS: Function returns 1b if tag name exists or 0b if it does not. OPTIONAL INPUT KEYWORD: /TOP_LEVEL = If set, then only the top level of the structure is searched. /QUIET - if set, then do not print messages if invalid parameters given /RECURSE - does nothing but kept for compatibility with the Solarsoft version for which recursion is not the default http://sohowww.nascom.nasa.gov/solarsoft/gen/idl/struct/tag_exist.pro OPTIONAL OUTPUT KEYWORD: INDEX = index of matching tag, scalar longward, -1 if tag name does not exist EXAMPLE: Determine if the tag 'THICK' is in the !P system variable IDL> print,tag_exist(!P,'THICK') PROCEDURE CALLS: None. MODIFICATION HISTORY: : Written, C D Pike, RAL, 18-May-94 Passed out index of matching tag, D Zarro, ARC/GSFC, 27-Jan-95 William Thompson, GSFC, 6 March 1996 Added keyword TOP_LEVEL Zarro, GSFC, 1 August 1996 Added call to help Use SIZE(/TNAME) rather than DATATYPE() W. Landsman October 2001 Added /RECURSE and /QUIET for compatibility with Solarsoft version W. Landsman March 2009 Slightly faster algorithm W. Landsman July 2009 July 2009 update was not setting Index keyword W. L Sep 2009. Use V6.0 notation W.L. Jan 2012 Not setting index again, sigh W.L./ K. Allers Jan 2012
(See $IDLUTILS_DIR/goddard/pro/structure/tag_exist.pro)
TBDELCOL
NAME: TBDELCOL PURPOSE: Delete a column of data from a FITS binary table CALLING SEQUENCE: TBDELCOL, h, tab, name INPUTS-OUPUTS h,tab - FITS binary 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: Delete the column "FLUX" from FITS binary table test.fits IDL> tab = readfits('test.fits',h,/ext) ;Read table IDL> tbdelcol, h, tab, 'FLUX' ;Delete Flux column IDL> modfits,'test.fits',tab,h,/ext ;Write back table PROCEDURES USED: SXADDPAR, TBINFO, TBSIZE REVISION HISTORY: Written W. Landsman STX Co. August, 1988 Use new structure returned by TBINFO, August, 1997 Use SIZE(/TNAME) instead of DATATYPE() October 2001 Use /NOSCALE in call to TBINFO, update TDISP W. Landsman March 2007
(See $IDLUTILS_DIR/goddard/pro/fits_table/tbdelcol.pro)
TBDELROW
NAME: TBDELROW PURPOSE: Delete specified row or rows of data from a FITS binary table CALLING SEQUENCE: TBDELROW, h, tab, rows INPUTS-OUPUTS h,tab - FITS binary 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 First row has index 0. If a vector it will be sorted and duplicates removed by TBDELROW EXAMPLE: Compress a table to include only non-negative flux values flux = TBGET(h,tab,'FLUX') ;Obtain original flux vector bad = where(flux lt 0) ;Find negative fluxes TBDELROW,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 $IDLUTILS_DIR/goddard/pro/fits_table/tbdelrow.pro)
TBGET
NAME: TBGET PURPOSE: Return value(s) from specified column in a FITS binary table CALLING SEQUENCE values = TBGET( h, tab, field, [ rows, nulls, /NOSCALE] ) or values = TBGET( tb_str, tab, field, [ rows, nulls, /NOSCALE] ) INPUTS: h - FITS binary table header, e.g. as returned by FITS_READ or tb_str - IDL structure extracted from FITS header by TBINFO. Use of the IDL structure will improve processing speed tab - FITS binary table array, e.g. as returned by FITS_READ field - field name or number, scalar 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 OPTIONAL KEYWORD INPUT: /NOSCALE - If this keyword is set and nonzero, then the TSCALn and TZEROn keywords will *not* be used to scale to physical values Default is to perform scaling CONTINUE - This keyword does nothing, it is kept for consistency with with earlier versions of TBGET(). 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. Only used for integer data types, B, I, and J 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 extension of a FITS file 'spectra.fits' into IDL vectors w and f IDL> fits_read,'spectra.fits',tab,htab,exten=2 ;Read 2nd extension IDL> w = tbget(htab,tab,'wavelength') IDL> f = tbget(htab,tab,'flux') NOTES: (1) If the column is variable length ('P') format, then TBGET() will return the longword array of pointers into the heap area. TBGET() currently lacks the ability to actually extract the data from the heap area. (2) Use the higher-level procedure FTAB_EXT (which calls TBGET()) to extract vectors directly from the FITS file. (3) Use the procedure FITS_HELP to determine which extensions are binary tables, and FTAB_HELP or TBHELP to determine the columns of the table PROCEDURE CALLS: TBINFO, TBSIZE HISTORY: Written W. Landsman February, 1991 Work for string and complex W. Landsman April, 1993 Default scaling by TSCALn, TZEROn, Added /NOSCALE keyword, Fixed nulls output, return longword pointers for variable length binary tables, W. Landsman December 1996 Added a check for zero width column W. Landsman April, 1997 Add TEMPORARY() and REFORM() for speed W. Landsman May, 1997 Use new structure returned by TBINFO W. Landsman August 1997 Add IS_IEEE_BIG(), No subscripting when all rows requested W. Landsman March 2000 Use SIZE(/TNAME) instead of DATATYPE() W. Landsman October 2001 Bypass IEEE_TO_HOST call for improved speed W. Landsman November 2002 Cosmetic changes to SIZE() calls W. Landsman December 2002 Added unofficial support for 64bit integers W. Landsman February 2003 Support unsigned integers, new pointer types of TSCAL and TZERO returned by TBINFO W. Landsman April 2003 Add an i = i[0] for V6.0 compatibility W. Landsman August 2003 Use faster BYTEORDER byteswapping W. Landsman April 2006 Free pointers if FITS header supplied W. Landsman March 2007
(See $IDLUTILS_DIR/goddard/pro/fits_table/tbget.pro)
TBHELP
NAME: TBHELP PURPOSE: Routine to print a description of a FITS binary table header CALLING SEQUENCE: TBHELP, h, [TEXTOUT = ] INPUTS: h - FITS header for a binary table, string array OPTIONAL INPUT KEYWORD: TEXTOUT - scalar number (0-7) or string (file name) controling output device (see TEXTOPEN). Default is TEXTOUT=1, output to the user's terminal METHOD: FITS Binary Table keywords NAXIS*,EXTNAME,TFIELDS,TTYPE*,TFORM*,TUNIT*, are read from the header and displayed at the terminal A FITS header is recognized as bein for a binary table if the keyword XTENSION has the value 'BINTABLE' or 'A3DTABLE' NOTES: Certain fields may be truncated in the display SYSTEM VARIABLES: Uses the non-standard system variables !TEXTOUT and !TEXTUNIT. These are automatically defined by TBHELP if they have not been defined previously. PROCEDURES USED: REMCHAR, SXPAR(), TEXTCLOSE, TEXTOPEN, ZPARCHECK HISTORY: W. Landsman February, 1991 Parsing of a FITS binary header made more robust May, 1992 Added TEXTOUT keyword August 1997 Define !TEXTOUT if not already present W. Landsman November 2002 Slightly more compact display W. Landsman August 2005 Fix Aug 2005 error omitting TFORM display W. Landsman Sep 2005
(See $IDLUTILS_DIR/goddard/pro/fits_table/tbhelp.pro)
TBINFO
NAME: TBINFO PURPOSE: Return an informational IDL structure from a FITS binary table header. CALLING SEQUENCE: tbinfo, h, tb_str, [ERRMSG = ] INPUTS: h - FITS binary table header, e.g. as returned by READFITS() OUTPUTS: tb_str - IDL structure with extracted info from the FITS binary table header. Tags include .tbcol - starting column position in bytes, integer vector .width - width of the field in bytes, integer vector .idltype - idltype of field, byte vector 7 - string, 4- real*4, 3-integer*4, 5-real*8 .numval - repeat count, longword vector .tunit - string unit numbers, string vector .tnull - integer null value for the field, stored as a string vector so that an empty string indicates that TNULL is not present .tform - format for the field, string vector .ttype - field name, string vector .maxval- maximum number of elements in a variable length array, long vector .tscal - pointer array giving the scale factor for converting to physical values, default 1.0 .tzero - pointer array giving the additive offset for converting to physical values, default 0.0 .tdisp - recommended output display format All of the output vectors will have same number of elements, equal to the number of columns in the binary table. The .tscal and .tzero values are stored as pointers so as to preserve the individual data types (e.g. float or double) which may differ in different columns. For example, to obtain the value of TSCAL for the third column use *tab_str.tscal[2] OPTIONAL INPUT KEYWORD: /NOSCALE - if set, then the TSCAL* and TZERO* keywords are not extracted from the FITS header, and the .tscal and .tzero pointers do not appear in the output structure. OPTIONAL OUTPUT KEYWORD: ERRMSG = if present, then error messages are returned in this keyword rather than displayed using the MESSAGE facility PROCEDURES USED: SXPAR() NOTES: For variable length ('P' format) column, TBINFO returns values for reading the 2 element longward array of pointers (numval=2, idltype = 3, width=4) HISTORY: Major rewrite to return a structure W. Landsman August 1997 Added "unofficial" 64 bit integer "K" format W. Landsamn Feb. 2003 Store .tscal and .tzero tags as pointers, so as to preserve type information W. Landsman April 2003 Treat repeat count for string as specifying string length, not number of elements, added ERRMSG W. Landsman July 2006 Treat logical as character string 'T' or 'F' W. Landsman October 2006 Added NOSCALE keyword W. Landsman March 2007
(See $IDLUTILS_DIR/goddard/pro/fits_table/tbinfo.pro)
TBPRINT
NAME: TBPRINT PURPOSE: Procedure to print specified columns & rows of a FITS binary table CALLING SEQUENCE: TBPRINT, h, tab, columns, [ rows, TEXTOUT =, FMT=, NUM_HEADER= ] or TBPRINT,tb_str, tab, columns, [ rows, TEXTOUT =, FMT=, NUM_HEADER = ] INPUTS: h - FITS header for table, string array or tb_str - IDL structure extracted from FITS header by TBINFO, useful when TBPRINT is called many times with the same header 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. If set to '*' then all columns are printed in table format (1 row per line, binary tables only). 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: FMT = Format string for print display. If not supplied, then any formats in the TDISP keyword fields of the table will be used, otherwise IDL default formats. NUM_HEADER_LINES - Number of lines to display the column headers default = 1). By setting NUM_HEADER_LINES to an integer larger than 1, one can avoid truncation of the column header labels. In addition, setting NUM_HEADER_LINES will display commented lines indicating a FORMAT for reading the data, and a suggested call to readfmt.pro. NVAL_PER_LINE - The maximum number of values displayed from a multivalued column when printing in table format. Default = 6 TEXTOUT - scalar number (0-7) or string (file name) determining output device (see TEXTOPEN). Default is TEXTOUT=1, output to the user's terminal SYSTEM VARIABLES: Uses nonstandard system variables !TEXTOUT and !TEXTOPEN Set !TEXTOUT = 3 to direct output to a disk file. The system variable is overriden by the value of the keyword TEXTOUT EXAMPLES: tab = readfits('test.fits',htab,/ext) ;Read first extension into vars tbprint,h,tab,'STAR ID,RA,DEC' ;print id,ra,dec for all stars tbprint,h,tab,[2,3,4],indgen(100) ;print columns 2-4 for first 100 stars tbprint,h,tab,text="stars.dat" ;Convert entire FITS table to ;an ASCII file named 'stars.dat' PROCEDURES USED: GETTOK(), STRNUMBER(), TEXTOPEN, TEXTCLOSE, TBINFO 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. Use NUM_HEADER_LINES to avoid truncation. (3) Program does not check for null values (4) Does not work with variable length columns (5) Will only the display the first value of fields with multiple values (unless there is one row each with the same number of mulitple values) If printing in table format (column='*') then up to 6 values can be printed per line. HISTORY: version 1 D. Lindler Feb. 1987 Accept undefined values of rows,columns W. Landsman August 1997 Use new structure returned by TBINFO W. Landsman August 1997 Made formatting more robust W. Landsman March 2000 Use STRSPLIT to parse string column listing W. Landsman July 2002 Wasn't always printing last row W. Landsman Feb. 2003 Better formatting (space between columns) W. Landsman Oct. 2005 Use case-insensitive match with TTYPE, use STRJOIN W.L. June 2006 Fixed check for multiple values W.L. August 2006 Fixed bad index value in August 2006 fix W.L Aug 15 2006 Free-up pointers after calling TBINFO W.L. Mar 2007 Add table format capability W.L. Mar 2010 Add NUM_HEADER_LINE keyword P. Broos Apr 2010
(See $IDLUTILS_DIR/goddard/pro/fits_table/tbprint.pro)
TBSIZE
NAME: TBSIZE PURPOSE: Procedure to return the size of a FITS binary table. CALLING SEQUENCE: tbsize, h, tab, ncols, nrows, tfields, ncols_all, nrows_all INPUTS: h - FITS table header tab - FITS table 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 PROCEDURES USED: SXPAR() HISTORY D. Lindler July, 1987 Converted to IDL V5.0 W. Landsman September 1997 Remove obsolete !ERR call W. Landsman May 2000
(See $IDLUTILS_DIR/goddard/pro/fits_table/tbsize.pro)
TDB2TDT
NAME: TDB2TDT AUTHOR: Craig B. Markwardt, NASA/GSFC Code 662, Greenbelt, MD 20770 craigm@lheamail.gsfc.nasa.gov UPDATED VERSIONs can be found on my WEB PAGE: http://cow.physics.wisc.edu/~craigm/idl/idl.html PURPOSE: Relativistic clock corrections due to Earth motion in solar system MAJOR TOPICS: Planetary Orbits CALLING SEQUENCE: corr = TDB2TDT(JD, TBASE=, DERIV=deriv) DESCRIPTION: The function TDB2TDT computes relativistic corrections that must be applied when performing high precision absolute timing in the solar system. According to general relativity, moving clocks, and clocks at different gravitational potentials, will run at different rates with respect to each other. A clock placed on the earth will run at a time-variable rate because of the non-constant influence of the sun and other planets. Thus, for the most demanding astrophysical timing applications -- high precision pulsar timing -- times in the accelerating earth observer's frame must be corrected to an inertial frame, such as the solar system barycenter (SSB). This correction is also convenient because the coordinate time at the SSB is the ephemeris time of the JPL Planetary Ephemeris. In general, the difference in the rate of Ti, the time kept by an arbitrary clock, and the rate of T, the ephemeris time, is given by the expression (Standish 1998): dTi/dT = 1 - (Ui + vi^2/2) / c^2 where Ui is the potential of clock i, and vi is the velocity of clock i. However, when integrated, this expression depends on the position of an individual clock. A more convenient approximate expression is: T = Ti + (robs(Ti) . vearth(T))/c^2 + dtgeo(Ti) + TDB2TDT(Ti) where robs is the vector from the geocenter to the observer; vearth is the vector velocity of the earth; and dtgeo is a correction to convert from the observer's clock to geocentric TT time. TDB2TDT is the value computed by this function, the correction to convert from the geocenter to the solar system barycenter. As the above equation shows, while this function provides an important component of the correction, the user must also be responsible for (a) correcting their times to the geocenter (ie, by maintaining atomic clock corrections); (b) estimating the observatory position vector; and and (c) estimating earth's velocity vector (using JPLEPHINTERP). Users may note a circularity to the above equation, since vearth(T) is expressed in terms of the SSB coordinate time. This appears to be a chicken and egg problem since in order to get the earth's velocity, the ephemeris time is needed to begin with. However, to the precision of the above equation, < 25 ns, it is acceptable to replace vearth(T) with vearth(TT). The method of computation of TDB2TDT in this function is based on the analytical formulation by Fairhead, Bretagnon & Lestrade, 1988 (so-called FBL model) and Fairhead & Bretagnon 1990, in terms of sinusoids of various amplitudes. TDB2TDT has a dominant periodic component of period 1 year and amplitude 1.7 ms. The set of 791 coefficients used here were drawn from the Princeton pulsar timing program TEMPO version 11.005 (Taylor & Weisberg 1989). Because the TDB2TDT quantity is rather expensive to compute but slowly varying, users may wish to also retrieve the time derivative using the DERIV keyword, if they have many times to convert over a short baseline. Verification This implementation has been compared against a set of FBL test data found in the 1996 IERS Conventions, Chapter 11, provided by T. Fukushima. It has been verified that this routine reproduces the Fukushima numbers to the accuracy of the table, within 10^{-14} seconds. Fukushima (1995) has found that the 791-term Fairhead & Bretagnon analytical approximation use here has a maximum error of 23 nanoseconds in the time range 1980-2000, compared to a numerical integration. In comparison the truncated 127-term approximation has an error of ~130 nanoseconds. PARAMETERS: JD - Geocentric time TT, scalar or vector, expressed in Julian days. The actual time used is (JD + TBASE). For maximum precision, TBASE should be used to express a fixed epoch in whole day numbers, and JD should express fractional offset days from that epoch. KEYWORD PARAMETERS: TBASE - scalar Julian day of a fixed epoch, which provides the origin for times passed in JD. Default: 0 DERIV - upon return, contains the derivative of TDB2TDT in units of seconds per day. As many derivatives are returned as values passed in JD. RETURNS: The correction offset(s) in units of seconds, to be applied as noted above. EXAMPLE: Find the correction at ephemeris time 2451544.5 (JD): IDL> print, tdb2tdt(2451544.5d) -0.00011376314 or 0.11 ms. REFERENCES: Princeton TEMPO Program http://pulsar.princeton.edu/tempo/ FBL Test Data Set ftp://maia.usno.navy.mil/conventions/chapter11/fbl.results Fairhead, L. & Bretagnon, P. 1990, A&A, 229, 240 (basis of this routine) Fairhead, L. Bretagnon, P. & Lestrade, J.-F. 1988, in *The Earth's Rotation and Reference Frames for Geodesy and Geodynamics*, ed. A. K. Babcock and G. A. Wilkins, (Dordrecht: Kluwer), p. 419 (original "FBL" paper) Fukushima, T. 1995, A&A, 294, 895 (error analysis) Irwin, A. W. & Fukushima, T. 1999, A&A, 348, 642 (error analysis) Standish, E. M. 1998, A&A, 336, 381 (description of time scales) Taylor, J. H. & Weisberg, J. M. 1989, ApJ, 345, 434 (pulsar timing) SEE ALSO JPLEPHREAD, JPLEPHINTERP, JPLEPHTEST MODIFICATION HISTORY: Original logic from Fairhead & Bretagnon, 1990 Drawn from TEMPO v. 11.005, copied 20 Jun 2001 Documented and vectorized, 30 Jun 2001 $Id: tdb2tdt.pro,v 1.4 2001/07/01 07:37:40 craigm Exp $
(See $IDLUTILS_DIR/goddard/pro/astro/tdb2tdt.pro)
TEN()
NAME: TEN() PURPOSE: Converts a sexigesimal number or string to decimal. EXPLANATION: Inverse of the SIXTY() function. CALLING SEQUENCES: X = TEN( [ HOUR_OR_DEG, MIN, SEC ] ) X = TEN( HOUR_OR_DEG, MIN, SEC ) X = TEN( [ HOUR_OR_DEG, MIN ] ) X = TEN( HOUR_OR_DEG, MIN ) X = TEN( [ HOUR_OR_DEG ] ) <-- Trivial cases X = TEN( HOUR_OR_DEG ) <-- or X = TEN(HRMNSC_STRING) INPUTS: HOUR_OR_DEG,MIN,SEC -- Scalars giving sexigesimal quantity in in order from largest to smallest. or HRMNSC_STRING - String giving sexigesmal quantity separated by spaces or colons e.g. "10 23 34" or "-3:23:45.2" Any negative values should begin with a minus sign. OUTPUTS: Function value returned = double real scalar, decimal equivalent of input sexigesimal quantity. A minus sign on any nonzero element of the input vector causes all the elements to be taken as < 0. EXAMPLES: IDL> print,ten(0,-23,34) --> -0.39277778 IDL> print,ten("-0:23:34") --> -0.39277778 PROCEDURE: Mostly involves checking arguments and setting the sign. The procedure TENV can be used when dealing with a vector of sexigesimal quantities. MODIFICATION HISTORY: Written by R. S. Hill, STX, 21 April 87 Modified to allow non-vector arguments. RSH, STX, 19-OCT-87 Recognize -0.0 W. Landsman/B. Stecklum Dec 2005 Work with string input W. Landsman Dec 2008
(See $IDLUTILS_DIR/goddard/pro/astro/ten.pro)
TENV()
NAME: TENV() PURPOSE: Converts sexigesimal number or string vector to decimal. EXPLANATION: Like TEN() but allows vector input. CALLING SEQUENCES: Result = TENV( dd, mm ) ; result = dd + mm/60. Result = TENV( dd, mm, ss) ; result = dd + mm/60. + ss/3600. or Result = TENV(ddmmss_string) INPUTS: dd - Sexigesimal element(s) corresponding to hours or degrees mm - Sexigesimal element(s) corresponding to minutes ss - Sexigesimal element(s) corresponding to seconds (optional) The input parameters can be scalars or vectors. However, the number of elements in each parameter must be the same. HRMNSC_STRING - String scalar or vector giving sexigesmal quantity separated by spaces or colons e.g. "10 23 34" or "-3:23:45.2" Any negative values should begin with a minus sign. OUTPUTS: Result - double, decimal equivalent of input sexigesimal quantities. Same number of elements as the input parameters. If the nth element in any of the input parameters is negative then the nth element in Result will also be negative. EXAMPLE: If dd = [60,60,0], and mm = [30,-30,-30], then IDL> Result = TENV(dd,mm) ====> Result = [60.5,-60.5,-0.5] Alternatively, the input could be written as the string vector IDL> str = ['60:30','-60:30','-0:30'] IDL> print,tenv(str) ====> Result = [60.5,-60.5,-0.5] WARNING: TENV() will recognize floating point values of -0.0 as negative numbers. However, there is no distinction in the binary representation of -0 and 0 (integer values), and so TENV will treat both values as positive. PROCEDURES USED: GETTOK(), REPCHR() for string processing. PROCEDURE: Mostly involves checking arguments and setting the sign. MODIFICATION HISTORY: Written by W.B. Landsman April, 1991 Recognize -0.0 W. Landsman/B. Stecklum Dec 2005 Work with string input W. Landsman Feb 2009
(See $IDLUTILS_DIR/goddard/pro/astro/tenv.pro)
TEXTCLOSE
NAME: TEXTCLOSE PURPOSE: Close a text outpu file previously opened with TEXTOPEN EXPLANATION: procedure to close file for text output as specifed by the (non-standard) system variable !TEXTOUT. CALLING SEQUENCE: textclose, [ TEXTOUT = ] KEYWORDS: textout - Indicates output device that was used by TEXTOPEN SIDE EFFECTS: if !textout is not equal to 5 and the textunit is opened. Then unit !textunit is closed and released HISTORY: D. Lindler Dec. 1986 (Replaces PRTOPEN) Test if TEXTOUT is a scalar string W. Landsman August 1993 Can't close unit -1 (Standard Output) I. Freedman April 1994 Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/misc/textclose.pro)
TEXTOPEN
NAME: TEXTOPEN PURPOSE: Open a device specified by TEXTOUT with unit !TEXTUNIT EXPLANATION: Procedure to open file for text output. The type of output device (disk file or terminal screen) is specified by the TEXTOUT keyword or the (nonstandard) system variable !TEXTOUT. CALLING SEQUENCE: textopen, program, [ TEXTOUT =, /STDOUT, /SILENT, MORE_SET=, WIDTH= ] INPUTS: program - scalar string giving name of program calling textopen OPTIONAL INPUT KEYWORDS: TEXTOUT - Integer scalar (0-7) specifying output file/device to be opened (see below) or scalar string giving name of output file. If TEXTOUT is not supplied, then the (non-standard) system variable !TEXTOUT is used. /SILENT - By default, TEXTOPEN prints an informational message when opening a file for hardcopy output. Set /SILENT (or !QUIET) to suppress this message. /STDOUT - if this keyword is set and non-zero, then the standard output (unit = -1) is used for TEXTOUT=1 or TEXTOUT=2. The use of STDOUT has 2 possible advantages: (1) the output will appear in a journal file (2) Many Unix machines print spurious control characters when printing to /dev/tty. These characters are eliminated by setting /STDOUT The disadvantage of /STDOUT is that the /MORE option is not available. WIDTH - Specify line width for hardcopy output line wrapping (passed onto OPENW). OPTIONAL OUTPUT KEYWORD: MORE_SET - Returns 1 if the output unit was opened with /MORE. This occurs if (1) TEXTOUT = 1 and (2) the device is a tty, and (3) /STDOUT is not set. User can use the returned value of MORE_SET to determine whether to end output when user presses 'Q'. SIDE EFFECTS: The following dev/file is opened for output. Different effects occur depending whether the standard output is a GUI (Macintosh, Windows, Unix/IDLTool) or a TTY 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) The unit to be opened is obtained with the procedure GET_LUN unless !TEXTOUT=5. The unit number is placed in system variable !TEXTUNIT. For !TEXTOUT=5 the user must set !TEXTUNIT to the appropriate unit number. NOTES: When printing to a TTY terminal, the output will *not* appear in an IDL JOURNAL session, unlike text printed with the PRINT command. NON-STANDARD SYSTEM VARIABLES: TEXTOPEN will automatically define the following system variables if they are not previously defined: DEFSYSV,'!TEXTOUT',1 DEFSYSV,'!TEXTUNIT',0 HISTORY: D. Lindler Dec. 1986 Keyword textout added, J. Isensee, July, 1990 Made transportable, D. Neill, April, 1991 Trim input PROGRAM string W. Landsman Feb 1993 Don't modify TEXTOUT value W. Landsman Aug 1993 Modified for MacOS I. Freedman April 1994 Modified for output terminals without a TTY W. Landsman August 1995 Added /STDOUT keyword W. Landsman April 1996 added textout=7 option, D. Lindler, July, 1996 Exit with RETURN instead of RETALL W. Landsman June 1999 In IDL V5.4 filepath(/TERMINAL) not allowed in the IDLDE WL August 2001 Added MORE_SET output keyword W.Landsman January 2002 Added /SILENT keyword W. Landsman June 2002 Define !TEXTOUT and !TEXTUNIT if needed. R. Sterner, 2002 Aug 27 Return Calling Sequence if no parameters supplied W.Landsman Nov 2002 Remove VMS specific code W. Landsman Sep 2006 Make sure MORE_SET is always defined W. Landsman Jan 2007 Added WIDTH keyword J. Bailin Nov 2010 Use V6.0 notation W. Landsman April 2011
(See $IDLUTILS_DIR/goddard/pro/misc/textopen.pro)
TICLABELS
NAME: TICLABELS PURPOSE: Create tic labels for labeling astronomical images. EXPLANATION: Used to display images with right ascension or declination axes. This routine creates labels for already determined tic marks (every other tic mark by default) CALLING SEQUENCE: TICLABELS, minval, numtics, incr, ticlabs, [ RA = ,DELTA = ] INPUTS: minval - minimum value for labels (degrees) numtics - number of tic marks incr - increment in minutes for labels OUTPUTS: ticlabs - array of charater string labels OPTIONAL INPUT KEYWORDS: /RA - if this keyword is set then the grid axis is assumed to be a Right Ascension. Otherwise a declination axis is assumed DELTA - Scalar specifying spacing of labels. The default is DELTA = 2 which means that a label is made for every other tic mark. Set DELTA=1 to create a label for every tic mark. FONT - scalar font graphics keyword (-1,0 or 1) for text PROCEDURES USED: RADEC RESTRICTIONS: Invalid for wide field (> 2 degree) images since it assumes that a fixed interval in Y (or X) corresponds to a fixed interval in Dec (or RA) REVISON HISTORY: written by B. Pfarr, 4/15/87 Added DELTA keywrd for compatibility with IMCONTOUR W. Landsman Nov 1991 Added nicer hms and dms symbols when using native PS fonts Deutsch 11/92 Added Patch for bug in IDL <2.4.0 as explained in NOTES E. Deutsch 11/92 Fix when crossing 0 dec or 24h RA Fix DELTA keyword so that it behaves according to the documentation W. Landsman Hughes STX, Nov 95 Allow sub arcsecond formatting W. Landsman May 2000 Better formatting for non-unity DELTA values W. Landsman July 2004 Allow FONT keyword to be passed. T. Robishaw Apr. 2006 Write 0h rather than 24h W. L. August 2008 Fix problem when tic values is exactly 0 degrees Mar 2012
(See $IDLUTILS_DIR/goddard/pro/astro/ticlabels.pro)
TICPOS
NAME: TICPOS PURPOSE: Specify distance between tic marks for astronomical coordinate overlays EXPLANATION: User inputs number an approximate distance between tic marks, and the axis length in degrees. TICPOS will return a distance between tic marks such that the separation is a round multiple in arc seconds, arc minutes, or degrees CALLING SEQUENCE: TICPOS, deglen, pixlen, ticsize, incr, units INPUTS: deglen - length of axis in DEGREES pixlen - length of axis in plotting units (pixels) ticsize - distance between tic marks (pixels). This value will be adjusted by TICPOS such that the distance corresponds to a round multiple in the astronomical coordinate. OUTPUTS: ticsize - distance between tic marks (pixels), positive scalar incr - incremental value for tic marks in round units given by the UNITS parameter units - string giving units of ticsize, either 'ARC SECONDS', 'ARC MINUTES', or 'DEGREES' EXAMPLE: Suppose a 512 x 512 image array corresponds to 0.2 x 0.2 degrees on the sky. A tic mark is desired in round angular units, approximately every 75 pixels. IDL> ticsize = 75 IDL> TICPOS,0.2,512,ticsize,incr,units ==> ticsize = 85.333, incr = 2. units = 'Arc Minutes' i.e. a good tic mark spacing is every 2 arc minutes, corresponding to 85.333 pixels. REVISON HISTORY: written by W. Landsman November, 1988 Converted to IDL V5.0 W. Landsman September 1997 Don't use all capital letters W. Landsman May 2003 Fix case where incr crosses degree/minute or minute/degree boundary A. Mortier/W.Landsman April 2005
(See $IDLUTILS_DIR/goddard/pro/astro/ticpos.pro)
TICS
NAME: TICS PURPOSE: Compute a nice increment between tic marks for astronomical images. EXPLANATION: For use in labelling a displayed image with right ascension or declination axes. An approximate distance between tic marks is input, and a new value is computed such that the distance between tic marks is in simple increments of the tic label values. CALLING SEQUENCE: tics, radec_min, radec_max, numx, ticsize, incr, [ /RA ] INPUTS: radec_min - minimum axis value (degrees) radec_max - maximum axis value (degrees) numx - number of pixels in x direction INPUT/OUTPUT ticsize - distance between tic marks (pixels) OUTPUTS: incr - incremental value for tic labels (in minutes of time for R.A., minutes of arc for dec.) REVISON HISTORY: written by B. Pfarr, 4/14/87 Added some more tick precision (i.e. 1 & 2 seconds in case:) EWD May92 Added sub arcsecond tick precision W. Landsman May 2000 Plate scale off by 1 pixel W. Landsman July 2004
(See $IDLUTILS_DIR/goddard/pro/astro/tics.pro)
TIC_ONE
NAME: TIC_ONE PURPOSE: Determine the position of the first tic mark for astronomical images. EXPLANATION: For use in labelling images with right ascension and declination axes. This routine determines the position in pixels of the first tic. CALLING SEQUENCE: tic_one, zmin, pixx, incr, min2, tic1, [RA = ] INPUTS: zmin - astronomical coordinate value at axis zero point (degrees or hours) pixx - distance in pixels between tic marks (usually obtained from TICS) incr - increment in minutes for labels (usually an even number obtained from the procedure TICS) OUTPUTS: min2 - astronomical coordinate value at first tic mark tic1 - position in pixels of first tic mark EXAMPLE: Suppose a declination axis has a value of 30.2345 degrees at its zero point. A tic mark is desired every 10 arc minutes, which corresponds to 12.74 pixels. Then IDL> TIC_ONE, 30.2345, 1, 12.74, min2, tic1 yields values of min2 = 30.333 and tic1 = 5.74, i.e. the first tic mark should be labeled 30 deg 20 minutes and be placed at pixel value 5.74 REVISION HISTORY: by B. Pfarr, 4/15/87 Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/astro/tic_one.pro)
TO_HEX
NAME: TO_HEX PURPOSE: Translate a non-negative decimal integer to a hexadecimal string CALLING SEQUENCE: HEX = TO_HEX( D, [ NCHAR ] ) INPUTS: D - non-negative decimal integer, scalar or vector. If input as a string, (e.g. '32') then all leading blanks are removed. OPTIONAL INPUT: NCHAR - number of characters in the output hexadecimal string. If not supplied, then the hex string will contain no leading zeros. OUTPUT: HEX - hexadecimal translation of input integer, string EXAMPLES: IDL> A = TO_HEX([11,16]) ==> A = ['B','10'] IDL> A = TO_HEX(100,3) ==> A = '064' METHOD: The hexadecimal format code '(Z)' is used to convert. No parameter checking is done. PROCEDURES CALLED: None. REVISION HISTORY: Written W. Landsman November, 1990 Converted to IDL V5.0 W. Landsman September 1997 Use FSTRING() for more than 1024 values March 2000 Assume since V5.4, omit FSTRING() call April 2006
(See $IDLUTILS_DIR/goddard/pro/misc/to_hex.pro)
TRANSFORM_COEFF()
NAME: TRANSFORM_COEFF() PURPOSE: Compute new polynomial coefficients under a linear transformation EXPLANATION: Suppose one has a (nonlinear) polynomial (similar to the POLY() function) y = C[0] + C[1]*x + C[2]*x^2 + C[3]*x^3 + ... and one has a linear transformation in X x = alpha*x' + beta This function computes the new polynomial coefficients under the linear transformation. CALLING SEQUENCE: newcoeff = TRANSFORM_COEFF( coeff, alpha, beta) INPUTS: Coeff - vector of polynomial coefficients (as with POLY()). The degree of the polynomial is N_elements(coeff) - 1 Alpha, Beta - numeric scalars defining the linear transformation in X OUTPUTS: NewCoeff - Vector (same size as Coeff) giving the new polyomial coefficients EXAMPLE: Suppose one has polynomial mapping a nonlinear distortion in the X direction of a spectrum y = 0.2 + 1.1*x + 0.1*x^2 if one rebins the spectrum to half the size then the linear transformation is x = 2.*x' so alpha = 2 and beta = 0 The new coefficients are IDL> print, transform_coeff([0.2,1.1,0.1],2.,0) ==> [0.2, 2.2, 0.4] METHOD: Performs a binomial expansion of the polynomial and collect like terms groups.google.com/group/comp.lang.idl-pvwave/msg/11132d96d9c0f93d?hl=en& REVISION HISTORY: Written W. Landsman December 2007
(See $IDLUTILS_DIR/goddard/pro/math/transform_coeff.pro)
TRAPZD
NAME: TRAPZD PURPOSE: Compute the nth stage of refinement of an extended trapezoidal rule. EXPLANATION: This procedure is called by QSIMP and QTRAP. Algorithm from Numerical Recipes, Section 4.2. TRAPZD is meant to be called iteratively from a higher level procedure. CALLING SEQUENCE: TRAPZD, func, A, B, S, step, [ _EXTRA = ] INPUTS: func - scalar string giving name of function to be integrated. This must be a function of one variable. A,B - scalars giving the limits of the integration INPUT-OUTPUT: S - scalar giving the total sum from the previous iterations on input and the refined sum after the current iteration on output. step - LONG scalar giving the number of points at which to compute the function for the current iteration. If step is not defined on input, then S is intialized using the average of the endpoints of limits of integration. OPTIONAL INPUT KEYWORDS: Any supplied keywords will be passed to the user function via the _EXTRA facility. NOTES: (1) TRAPZD will check for math errors (except for underflow) when computing the function at the endpoints, but not on subsequent iterations. (2) TRAPZD always uses double precision to sum the function values but the call to the user-supplied function is double precision only if one of the limits A or B is double precision. REVISION HISTORY: Written W. Landsman August, 1991 Always use double precision for TOTAL March, 1996 Pass keyword to function via _EXTRA facility W. Landsman July 1999 Don't check for floating underflow W.Landsman April 2008
(See $IDLUTILS_DIR/goddard/pro/math/trapzd.pro)
TSC
NAME: TSC PURPOSE: Interpolate an irregularly sampled field using a Triangular Shaped Cloud EXPLANATION: This function interpolates an irregularly sampled field to a regular grid using Triangular Shaped Cloud (nearest grid point gets weight 0.75-dx^2, points before and after nearest grid points get weight 0.5*(1.5-dx)^2, where dx is the distance from the sample to the grid point in units of the cell size). CATEGORY: Mathematical functions, Interpolation CALLING SEQUENCE: Result = TSC, 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 TSC 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. TSC weights are computed for each sample. Samples are interpolated to the grid. Grid point values are computed (sum or average of samples). EXAMPLE: nx=20 ny=10 posx=randomu(s,1000) posy=randomu(s,1000) value=posx^2+posy^2 field=tsc(value,posx*nx,nx,posy*ny,ny,/average) surface,field,/lego NOTES: Use csc.pro or ngp.pro for lower order interpolation schemes. A standard reference for these interpolation methods is: R.W. Hockney and J.W. Eastwood, Computer Simulations Using Particles (New York: McGraw-Hill, 1981). MODIFICATION HISTORY: Written by Joop Schaye, Feb 1999. Check for overflow for large dimensions P. Riley/W. Landsman Dec. 1999
(See $IDLUTILS_DIR/goddard/pro/math/tsc.pro)
TSUM
NAME: TSUM PURPOSE: Trapezoidal summation of the area under a curve. EXPLANATION: Adapted from the procedure INTEG in the IUE procedure library. CALLING SEQUENCE: Result = TSUM(y) or Result = TSUM( x, y, [ imin, imax ] ) INPUTS: x = array containing monotonic independent variable. If omitted, then x is assumed to contain the index of the y variable. x = lindgen( N_elements(y) ). y = array containing dependent variable y = f(x) OPTIONAL INPUTS: imin = scalar index of x array at which to begin the integration If omitted, then summation starts at x[0]. imax = scalar index of x value at which to end the integration If omitted then the integration ends at x[npts-1]. OUTPUTS: result = area under the curve y=f(x) between x[imin] and x[imax]. EXAMPLE: IDL> x = [0.0,0.1,0.14,0.3] IDL> y = sin(x) IDL> print,tsum(x,y) ===> 0.0445843 In this example, the exact curve can be computed analytically as 1.0 - cos(0.3) = 0.0446635 PROCEDURE: The area is determined of individual trapezoids defined by x[i], x[i+1], y[i] and y[i+1]. If the data is known to be at all smooth, then a more accurate integration can be found by interpolation prior to the trapezoidal sums, for example, by the standard IDL User Library int_tabulated.pro. MODIFICATION HISTORY: Written, W.B. Landsman, STI Corp. May 1986 Modified so X is not altered in a one parameter call Jan 1990 Converted to IDL V5.0 W. Landsman September 1997 Allow non-integer values of imin and imax W. Landsman April 2001 Fix problem if only 1 parameter supplied W. Landsman June 2002
(See $IDLUTILS_DIR/goddard/pro/math/tsum.pro)
TVBOX
NAME: TVBOX PURPOSE: Draw a box(es) or rectangle(s) of specified width EXPLANATION: Positions can be specified either by the cursor position or by supplying a vector of X,Y positions. By default, TVBOX now (since Jan 2012) assumes data coordinates if !X.crange is set. CALLING SEQUENCE: TVBOX, width, [ x, y, color, /DATA, ANGLE= ,COLOR =, _EXTRA = ] INPUTS: WIDTH - either a scalar giving the width of a box, or a 2 element vector giving the length and width of a rectangle. OPTIONAL INPUTS: X - x position for box center, scalar or vector Y - y position for box center, scalar or vector. If vector, then Y must have the same number of elements as X Positions are specified in device coordinates unless /DATA is set If X and Y are not specified, and device has a cursor, then TVBOX will draw a box at current cursor position COLOR - String or integer specifying the color to draw the box(es) If COLORS is a scalar then all boxes are drawn with the same color value. Otherwise, the Nth box is drawn with the Nth value of color. Color can also be specified as string (e.g.'red'). See cgCOLOR for a list of available color names. Default = "opposite". OUTPUTS: None OPTIONAL KEYWORD INPUTS: ANGLE - numeric scalar specifying the clockwise rotation of the boxes or rectangles. COLOR - Scalar or vector, overrides the COLOR input parameter Color can be specified as a string (e.g. 'red') or intensity value. See cgCOLOR() for a list of color names. Default = 'opposite' (i.e. color opposite the background). /DATA - if this keyword is set and non-zero, then the box width and X,Y position center are interpreted as being in DATA coordinates. Note that data coordinates must be previously defined (with a PLOT or CONTOUR call). The default is to assume data coordinates if !X.CRANGE is set. Force device coordinates by setting DATA = 0 or /DEVICE /DEVICE Set this keyword to force use of device coordinates /FILL - If set, fill the box using cgCOLORFILL /SQUARE - If set, then a square is drawn, even if in data coordinates with unequal X and Y axes. The X width is used for the square width, and the Y width is ignored. Any keyword recognized by cgPLOTS (or cgCOLORFILL if /FILL is set) is also recognized by TVBOX. In particular, the linestyle, thickness and clipping of the boxes is controlled by the LINESTYLE, THICK and NOCLIP keywords. (Clipping is turned off by default, set NOCLIP=0 to activate it.) If /FILL is set then available keywords include LINE_FILL and FILL_PATTERN. SIDE EFFECTS: A square or rectangle will be drawn on the device For best results WIDTH should be odd when using the default DEVICE coordinates. (If WIDTH is even, the actual size of the box will be WIDTH + 1, so that box remains centered.) EXAMPLES: (1) Draw a double thick box of width 13, centered at 221,256 in the currently active window IDL> tvbox, 13, 221, 256, thick=2 (2) Overlay a "slit" with dimension 52" x 2" on a previously displayed image at a position angle (East of North) of 32 degrees. The slit is to be centered at XC, YC and the plate scale arcsec_per_pixel is known. IDL> w = [2.,52.]/arcsec_per_pixel ;Convert slit size to pixel units IDL> tvbox,w,XC,YC,ang=-32 ;Draw slit RESTRICTIONS: Allows use of only device (default) or data (if /DATA is set) coordinates. Normalized coordinates are not allowed PROCEDURES USED: cgpolygon, zparcheck REVISON HISTORY: Written, W. Landsman STX Co. 10-6-87 Modified to take vector arguments. Greg Hennessy Mar 1991 Fixed centering of odd width W. Landsman Sep. 1991 Let the user specify COLOR=0, accept vector color, W. Landsman Nov. 1995 Fixed typo in _EXTRA keyword W. Landsman August 1997 Added ANGLE keyword W.Landsman February 2000 Make sure ANGLE is a scalar W. Landsman September 2001 Don't round coordinates if /DATA is set. M. Perrin August 2005 Use STRICT_EXTRA to flag valid keywords W. Landsman Sep 2005 Check that width has only 1 or 2 elements W. Landsman August 2010 Use Coyote Graphcis W. Landsman February 2011 Added /FILL keyword W. Landsman July 2011 Default to data coordinates if !X.crange present WL Jan 2012 Added Square keyword WL. April 2012
(See $IDLUTILS_DIR/goddard/pro/tv/tvbox.pro)
TVCIRCLE
NAME: TVCIRCLE PURPOSE: Draw circle(s) of specified radius at specified position(s) EXPLANATION: If a position is not specified, and device has a cursor, then a circle is drawn at the current cursor position. By default, TVCIRCLE now (since Jan 2012) assumes data coordinates if !X.crange is set. CALLING SEQUENCE: TVCIRCLE, rad, x, y, color, [ /DATA, /FILL, _EXTRA = ] INPUTS: RAD - radius of circle(s) to be drawn, positive numeric scalar OPTIONAL INPUT: X - x position for circle center, vector or scalar Y - y position for circle center, vector or scalar If X and Y are not specified, and the device has a cursor, then program will draw a circle at the current cursor position COLOR - color name or intensity value(s) (0 - !D.N_COLORS) used to draw the circle(s). If COLOR is a scalar then all circles are drawn with the same color value. Otherwise, the Nth circle is drawn with the Nth value of color. See cgCOLOR() for a list of color names. Default = 'opposite' (i.e. color opposite the background). OPTIONAL KEYWORD INPUTS: /DATA - if this keyword is set and non-zero, then the circle width and X,Y position center are interpreted as being in DATA coordinates. Note that data coordinates must be previously defined (with a PLOT or CONTOUR call). TVCIRCLE will internally convert to device coordinates before drawing the circle, in order to maintain optimal smoothness. The default is to assume data coordinates if !X.CRANGE is set. Force device coordinates by setting DATA = 0 or /DEVICE /DEVICE - If set, then force use of device coordinates.. /FILL - If set, fill the circle using cgCOLORFILL Any keyword recognized by cgPLOTS (or cgCOLORFILL if /FILL is set) is also recognized by TVCIRCLE. In particular, the color, linestyle, thickness and clipping of the circles are controlled by the COLOR, LINESTYLE, THICK and NOCLIP keywords. (Clipping is turned off by default, set NOCLIP=0 to activate it.) If /FILL is set then available keywords are LINE_FILL and FILL_PATTERN. OUTPUTS: None RESTRICTIONS: (1) Some round-off error may occur when non-integral values are supplied for both the radius and the center coordinates (2) TVCIRCLE does not accept /NORMAL coordinates. (3) TVCIRCLE always draws a circle --- even when in data coordinates and the X and Y data scales are unequal. (The X data scale is used to define the circle radius.) If this is not the behaviour you want, then use TVELLIPSE instead. EXAMPLE: (1) Draw circles of radius 9 pixels at the positions specified by X,Y vectors, using double thickness lines IDL> tvcircle, 9, x, y, THICK = 2 Now fill in the circles using the LINE_FILL method IDL> tvcircle, 9, x, y, /FILL, /LINE_FILL METHOD: The method used is that of Michener's, modified to take into account the fact that IDL plots arrays faster than single points. See "Fundamental of Interactive Computer Graphics" by Foley and Van Dam" p. 445 for the algorithm. REVISON HISTORY: Original version written by B. Pfarr STX 10-88 Major rewrite adapted from CIRCLE by Allyn Saroyan LNLL Wayne Landsman STX Sep. 91 Added DATA keyword Wayne Landsman HSTX June 1993 Added FILL keyword. R. S. Hill, HSTX, 4-Nov-1993 Always convert to device coords, add _EXTRA keyword, allow vector colors. Wayne Landsman, HSTX, May 1995 Allow one to set COLOR = 0, W. Landsman, HSTX, November 1995 Check if data axes reversed. P. Mangifico, W. Landsman May 1996 Use strict_extra to check input keywords W. Landsman July 2005 Update documentation to note NOCLIP=0 option W.L. Oct. 2006 Make all integers default to LONG W. Landsman Dec 2006 Use Coyote Graphics procedures W. Landsman Feb 2011 Default to data coordinates if !X.crange present WL Jan 2012 Add /DEVICE coords, fix Jan 2012 update. Mar 2012
(See $IDLUTILS_DIR/goddard/pro/tv/tvcircle.pro)
TVELLIPSE
NAME: TVELLIPSE PURPOSE: Draw an ellipse on the current graphics device. CALLING SEQUENCE: TVELLIPSE, rmax, rmin, xc, yc, [ pos_ang, color, COLOR= ,/DATA, NPOINTS= LINESTYLE=, THICK=, /MAJOR, /MINOR ] INPUTS: RMAX,RMIN - Scalars giving the semi-major and semi-minor axes of the ellipse OPTIONAL INPUTS: XC,YC - Scalars giving the position on the TV of the ellipse center If not supplied (or if XC, YC are negative and /DATA is not set), and an interactive graphics device (e.g. not postscript) is set, then the user will be prompted for X,Y POS_ANG - Position angle of the major axis, measured counter-clockwise from the X axis. Default is 0. COLOR - Scalar integer or string specifying color to draw ellipse. See cgcolor.pro for a list of possible color names OPTIONAL KEYWORD INPUT: COLOR - Intensity value or color name used to draw the circle, overrides parameter value. Default = 'opposite' See cgCOLOR() for a list of color names.; /DATA - if this keyword is set and non-zero, then the ellipse radii and X,Y position center are interpreted as being in DATA coordinates. Note that the data coordinates must have been previously defined (with a PLOT or CONTOUR call). The default is to assume data coordinates if !X.CRANGE has been set by a previous plot. Force device coordinates by setting DATA = 0. /DEVICE - Set to force use of device coordinates. /FILL - If set, then fill the ellipse using cgCOLORFILL NPOINTS - Number of points to connect to draw ellipse, default = 120 Increase this value to improve smoothness /MAJOR - Plot a line along the ellipse's major axis /MINOR - Plot a line along the ellipse's minor axis Any keyword recognized by cgPLOTS is also recognized by TVELLIPSE. In particular, the color, linestyle, thickness and clipping of the ellipses are controlled by the COLOR, LINESTYLE, THICK and NOCLIP keywords. (Clipping is turned off by default, set NOCLIP=0 to activate it.) If /FILL is set then available keywords include LINE_FILL and FILL_PATTERN. RESTRICTIONS: TVELLIPSE does not check whether the ellipse is within the boundaries of the window. The ellipse is evaluated at NPOINTS (default = 120) points and connected by straight lines, rather than using the more sophisticated algorithm used by TVCIRCLE TVELLIPSE does not accept normalized coordinates. TVELLIPSE is not vectorized; it only draws one ellipse at a time EXAMPLE: Draw an ellipse of semi-major axis 50 pixels, minor axis 30 pixels, centered on (250,100), with the major axis inclined 25 degrees counter-clockwise from the X axis. Use a double thickness line and device coordinates IDL> tvellipse,50,30,250,100,25,thick=2,/device NOTES: Note that the position angle for TVELLIPSE (counter-clockwise from the X axis) differs from the astronomical position angle (counter-clockwise from the Y axis). REVISION HISTORY: Written W. Landsman STX July, 1989 Converted to use with a workstation. M. Greason, STX, June 1990 LINESTYLE keyword, evaluate at 120 points, W. Landsman HSTX Nov 1995 Added NPOINTS keyword, fixed /DATA keyword W. Landsman HSTX Jan 1996 Check for reversed /DATA coordinates P. Mangiafico, W.Landsman May 1996 Work correctly when X & Y data scales are unequal December 1998 Removed cursor input when -ve coords are entered with /data keyword set P. Maxted, Keele, 2002 Use _EXTRA keywords including NOCLIP W. Landsman October 2006 Add plotting of major and minor axes and /MAJOR, /MINOR keywords; fixed description of RMAX,RMIN (semi-axes). J. Guerber Feb. 2007 Update to use Coyote graphics W. Landsman Feb 2011 Default to data coordinates if a previous plot has been made (X.crange is non-zero) W. Landsman Jan 2012 Added /DEVICE keyword W. Landsman Mar 2012 Added /FILL keyword W. Landsman Mar 2012
(See $IDLUTILS_DIR/goddard/pro/tv/tvellipse.pro)
TVLASER
NAME: TVLASER PURPOSE: Prints screen or image array onto a Postscript file or printer. Information from FITS header is optionally used for labeling. CALLING SEQUENCE: TVLASER, [header, Image, BARPOS = ,CARROWS =, CLABELS = ,/COLORPS, COMMENTS = ,CSIZE = ,CTITLE = , DX = , DY =, /ENCAP, FILENAME = HEADER = ,/HELP, IMAGEOUT = ,/INTERP, /MAGNIFY, /NoCLOSE, /NoDELETE, /NO_PERS_INFO, /NoEIGHT, /NoPRINT, /NoRETAIN, /PORTRAIT, PRINTER = , /REVERSE, /SCALE, TITLE = , /TrueColor, XDIM=, XSTART=, YDIM=, YSTART=, BOTTOMDW=, NCOLORSDW= ] Note that the calling sequence was changed in May 1997 OPTIONAL INPUTS: HEADER - FITS header string array. Object and astrometric info from the FITS header will be used for labeling, if available IMAGE - if an array is passed through this parameter, then this image will be used rather than reading off the current window. This allows easy use of large images. It is usually preferable to optimally byte scale IMAGE before supplying it to TVLASER OPTIONAL KEYWORD INPUT PARAMETERS: BARPOS - A four- or five-element vector giving the position and orientation of the color bar. The first four elements [X0,Y0,XSize,YSize] indicate the position and size of the color bar in INCHES, relative to origin of the displayed image. (X0,Y0) are the position of the lower left corner and (XSize,YSize) are the width and height. The fifth element is optional, and if present, the color bar will be printed horizontally rather than vertically. If BARPOS is set to anything but a four- or five-element vector, the bar is NOT printed. The default value is BARPOS = [-0.25, 0.0, 0.2, 2.0] BOTTOMDW - The lowest value to use in building the density wedge. Used with NCOLORSDW. Compatible with BOTTOM and NCOLORS keywords of XLOADCT. CARROWS - The color to print the North-East arrows. Default is dark. Three types of values can be passed: SCALAR: that value's color in the current color table 3-ELEMENT VECTOR: the color will be [R,G,B] STRING: A letter indicating the color. Valid names are: 'W' (white), 'D' (dark/black), 'R' (red), 'G' (green), 'B' (blue), 'T' (turquoise), 'V' (violet), 'Y' (yellow), If the keyword is set to a value of -1, the arrows are NOT printed. COLORPS - If present and non-zero, the idl.ps file is written using color postscript. COMMENTS - A string that will be included in the comment line below the image. For multi-line comments you can either use "!C" in the string as a carriage return {although the vertical spacing might be a little off} or, preferably, make the COMMENTS a string array with each line as a separate element. CLABELS - Color to print the labels, same format as for CARROWS. CSIZE - Color to print the size-scale bar and label, same format as for CARROWS. CTITLE - Color to print the title, same format as for CARROWS. DX,DY - offsets in INCHES added to the position of the figure on the paper. As is the case for the device keywords XOFFSET and YOFFSET, when in landscape mode DX and DY are the same *relative to the paper*, not relative to the plot (e.g., DX is the horizontal offset in portrait mode, but the *vertical* offset in landscape mode). ENCAP - If present and non-zero, the IDL.PS file is written in encapsulated postscript for import into LaTeX documents FILENAME - scalar string giving name of output postscript file. Default is idl.ps. Automatically sets /NODELETE HEADER = FITS header. This is an alternative to supplying the FITS header in the first parameter. HELP - print out the sytax for this procedure. INTERP - If present and non-zero, current color table will be interpolated to fill the full range of the PostScript color table (256 colors). Otherwise, the current color table will be directly copied. You probably will want to use this if you are using IMAGE keyword and a shared color table. MAGNIFY - The net magnification of the entire figure. At this point, the figure is not automatically centered on the paper if the value of MAGNIFY is not equal to 1, but the DX and DY keywords can be used to shift location. For example, to fit a full plot on the printable area (8.5x8.5 inches) of the Tek PhaserIISD color printer use: MAGNIFY=0.8, DX=0.5, DY=0.5.; NCOLORSDW - The number of values to include in the density wedge. Used with BOTTOMDW. Compatible with BOTTOM/NCOLORS keywords of XLOADCT. NoCLOSE - If present and non-zero, then the postscript file is not closed (or printed), the device is set to 'PS', and the data coordinate system is set to match the image size. This allows the user to add additional plotting commands before printing. For example, to include a 15 pixel circle around a source at coordinates (150,160), around an image, im, with FITS header array, h IDL> tvlaser,h,im,/NoClose ;Write image & annotation IDL> tvcircle,15,150,160,/data ;Draw circle IDL> device,/close ;Close postscript file & print NoDELETE - If present and non-zero, the postscript file is kept AND is also sent to the printer NoEIGHT - if set then only four bits sent to printer (saves space) NO_PERS_INFO - if present and non-zero, output notation will NOT include date/user block of information. NoPRINT - If present and non-zero, the output is sent to a file (default name 'idl.ps'), which is NOT deleted and is NOT sent to the printer. NoRETAIN - In order to avoid possible problems when using TVRD with an obscured window, TVLASER will first copy the current window to a temporary RETAIN=2 window. Set /NORETAIN to skip this step and improve performance PORTRAIT - if present and non-zero, the printer results will be in portrait format; otherwise, they will be in landscape format. If labels are requested, image will be in portrait mode, regardless PRINTER - scalar string giving the OS command to send a the postscript file to the printer. Under Unix, the default value of PRINTER is 'lpr ' while for other OS it is 'print ' REVERSE - if present and non-zero, color table will be fliped, so black and white are reversed. SCALE - if present and non-zero, image will be bytscaled before being sent to postscript file. TITLE - if present and non-zero, the string entered here will be the title of the picture. Default is the OBJECT field in the header (if present). TRUECOLOR - if present and non-zero, the postscript file is created using the truecolor switch (i.e. true=3). The colorbar is not displayed in this mode. XDIM,YDIM - Number of pixels. Default is from !d.x_size and !d.y_size, or size of image if passed with IMAGE keyword. XSTART,YSTART - lower left corner (default of (0,0)) OPTIONAL KEYWORD OUTPUT PARAMETER IMAGEOUT = the image byte array actually sent to the postscript file. SIDE EFFECTS: A postscript file is created in the current directory. User must have write privileges in the current directory. The file is named idl.ps unless the FILENAME keyword is given. The file is directed to the printer unless the /ENCAP, /NoCLOSE, or /NOPRINT keywords are given. After printing, the file is deleted unless the /NODELETE or FILENAME keywords are given. PROCEDURE: Read display or take IMAGE and then redisplay into a postscript file. If a header exists, printout header information. If header has astrometry, then print out orientation and scale information. PROCEDURES USED: ARROWS, EXTAST, FDECOMP, GETROT, PIXCOLOR, SXPAR(), XYAD, ZPARCHECK *EXAMPLE: 1) Send a true color image (xsize,ysize,3) to a printer (i.e. print23l), tvlaser,huv,cpic,/colorps,/truecolor,printer="print23l" % TVLASER: Now printing image: $print23l idl.ps MODIFICATION HISTORY: Major rewrite from UIT version W. Landsman Dec 94 Massive rewrite. Added North-East arrows, pixel scale bar, color bar, and keywords DX, DY, MAGNIFY, INTERP, HELP, and COMMENTS. Created ablility to define colors for annotation and text. Repositioned text labels. J.Wm.Parker, HITC, 5/95 Make Header and Image parameters instead of keywords. Add PRINTER keyword. Include alternate FITS keywords. W. Landsman May 97 Copy to a RETAIN=2 window, work without FITS header W. Landsman June 97 Cleaner output when no astrometry in header W. Landsman June 97 Added /INFO to final MESSAGE W. Landsman July 1997 12/4/97 jkf/acc - added TrueColor optional keyword. Added /NoClose keyword, trim Equinox format W. Landsman 9-Jul-1998 Don't display coordinate labels if no astrometry, more flexible formatting of exposure time W. Landsman 30-Aug-1998 BottomDW and NColorsDW added. R. S. Hill, 1-Mar-1999 Apply func tab to color bar if not colorps. RSH, 21 Mar 2000 Fix problem with /NOCLOSE and unequal X,Y sizes W. Landsman Feb 2001 Use TVRD(True=3) if /TRUECOLOR set W. Landsman November 2001 More synonyms, check for header supplied W. Landsman November 2007
(See $IDLUTILS_DIR/goddard/pro/tv/tvlaser.pro)
TVLIST
NAME: TVLIST PURPOSE: Cursor controlled listing of image pixel values in a window. CALLING SEQUENCE: TVLIST, [image, dx, dy, TEXTOUT=, OFFSET= , ZOOM= ] OPTIONAL INPUTS: IMAGE - Array containing the image currently displayed on the TV. If omitted, the byte pixel intensities are read from the TV If the array does not start at position (0,0) on the window then the OFFSET keyword should be supplied. DX -Integer scalar giving the number of pixels in the X direction to be displayed. If omitted then DX = 18 for byte images, and DX = 14 for integer images. TVLIST will display REAL data with more significant figures if more room is availble to print. DY - Same as DX, but in Y direction. If omitted, then DY = DX OPTIONAL INPUT 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. TEXTOUT - Optional keyword that determines output device. The following dev/file is opened for output. textout=1 TERMINAL using /more option (default) textout=2 TERMINAL without /more option textout=3 <program>.prt textout=4 laser.tmp textout=5 user must open file textout=7 Append to an existing <program>.prt file if it exists textout = filename (default extension of .prt) If TEXTOUT > 3 or set to a filename, then TVLIST will prompt for a brief description to be included in the output file OUTPUTS: None. PROCEDURE: Program prompts user to place cursor on region of interest in image display. Corresponding region of image is then displayed at the terminal. A compression factor between the image array and the displayed image is determined using the ratio of image sizes. If necessary, TVLIST will divide all pixel values in a REAL*4 image by a (displayed) factor of 10^n (n=1,2,3...) to make a pretty format. SYSTEM VARIABLE: The nonstandard system variable !TEXTOUT is used as an alternative to the keyword TEXTOUT. The procedure ASTROLIB can be used to define !TEXTOUT (and !TEXTUNIT) if necessary. RESTRICTIONS: TVLIST may not be able to correctly format all pixel values if the dynamic range near the cursor position is very large. Probably does not work under Mac IDL which does not allow the cursor to be positioned with TVCRS PROCEDURES CALLED: IMLIST, UNZOOM_XY REVISION HISTORY: Written by rhc, SASC Tech, 3/14/86. Added textout keyword option, J. Isensee, July, 1990 Check for readable pixels W. Landsman May 1992 Use integer format statement from F_FORMAT W. Landsman Feb 1994 Added OFFSET, ZOOM keywords W. Landsman Mar 1996 More intelligent formatting of longword, call TEXTOPEN with /STDOUT W. Landsman April, 1996 Added check for valid dx value W. Landsman Mar 1997 Converted to IDL V5.0 W. Landsman September 1997 Major rewrite to call IMLIST, recognize new integer data types W. Landsman Jan 2000 Remove all calls to !TEXTUNIT W. Landsman Sep 2000 Always call UNZOOM_XY for MOUSSE compatibility W. Landsman Sep. 2004
(See $IDLUTILS_DIR/goddard/pro/tv/tvlist.pro)
T_APER
NAME: T_APER PURPOSE: Driver procedure (for APER) to compute concentric aperture photometry. EXPLANATION: Data is read from and written to disk FITS ASCII tables. Part of the IDL-DAOPHOT photometry sequence CALLING SEQUENCE: T_APER, image, fitsfile, [ apr, skyrad, badpix, PRINT=, NEWTABLE=, /EXACT, /SILENT, SETSKYVAL = ] INPUTS: IMAGE - input data array FITSFILE - disk FITS ASCII table name (from T_FIND). Must contain the keywords 'X' and 'Y' giving the centroid of the source positions in FORTRAN (first pixel is 1) convention. An extension of .fit is assumed if not supplied. OPTIONAL INPUTS: User will be prompted for the following parameters if not supplied. 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 BADPIX - Two element vector giving the minimum and maximum value of a good pixel (Default [-32765,32767]) OPTIONAL KEYWORDS INPUTS: /EXACT - If this keyword is set, then intersection of the circular aperture is computed exactly (and slowly) rather than using an approximation. See APER for more info. /PRINT - if set and non-zero then NSTAR will also write its results to a file aper.prt. One can specify a different output file name by setting PRINT = 'filename'. /SILENT - If this keyword is set and non-zero, then APER will not display photometry results at the screen, and the results will be automatically incorporated in the FITS table without prompting the user NEWTABLE - Name of output disk FITS ASCII table, scalar string. If not supplied, then the input FITSFILE will be updated with the aperture photometry results. 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. PROMPTS: T_APER requires the number of photons per analog digital unit (PHPADU), so that it can compute Poisson noise statistics to assign photometry errors. It first tries to find the PHPADU keyword in the original image header, and if not found will look for the GAIN, CCDGAIN and finally ATODGAIN keywords. If still not found, T_APER will prompt the user for this value. PROCEDURES: APER, FTADDCOL, FTGET(), FTINFO, FTPUT, READFITS(), SXADDPAR, SXPAR(), WRITEFITS REVISON HISTORY: Written W. Landsman ST Systems Co. May 1988 Store results as flux or magnitude August 1988 Added SILENT keyword W. Landsman Sep. 1991 Changed ERR SKY to ERR_SKY W. Landsman March 1996 Replace TEXTOUT keyword with PRINT keyword W. Landsman May 1996 Check CCDGAIN or ATODGAIN keywords to find phpadu W. Landsman May 1997 Converted to IDL V5.0 W. Landsman September 1997 Updated for new FTINFO calling sequence W. Landsman May 2000 Added /EXACT keyword W. Landsman June 2000
(See $IDLUTILS_DIR/goddard/pro/idlphot/t_aper.pro)
T_FIND
NAME: T_FIND PURPOSE: Driver procedure (for FIND) to locate stars in an image. EXPLANATION: Finds positive brightness perturbations (i.e stars) in a 2 dimensional image. Output is to a FITS ASCII table. CALLING SEQUENCE: T_FIND, image, im_hdr, [ fitsfile, hmin, fwhm, sharplim, roundlim, PRINT = , /SILENT ] INPUTS: image - 2 dimensional image array (integer or real) for which one wishes to identify the stars present im_hdr - FITS header associated with image array OPTIONAL INPUTS: T_FIND will prompt for these parameters if not supplied fitsfile - scalar string specifying the name of the output FITS ASCII table file fwhm - FWHM to be used in the convolving filter hmin - Threshold intensity for a point source - should generally be 3 or 4 sigma above background level sharplim - 2 element vector giving low and high Limit for sharpness statistic (Default: [0.2,1.0] ) roundlim - 2 element vector giving low and high Limit for roundness statistic (Default: [-1.0,1.0] ) OPTIONAL INPUT KEYWORDS: /PRINT - if set and non-zero then NSTAR will also write its results to a file find.prt. One can specify the output file name by setting PRINT = 'filename'. /SILENT - If this keyword is set and non-zero, then FIND will work silently, and not display each star found OUTPUTS: None PROCEDURES CALLED: CHECK_FITS, FDECOMP, FIND, FTADDCOL, FTCREATE, SXADDHIST, SXADDPAR, SXDELPAR, SXPAR(), WRITEFITS REVISION HISTORY: Written W. Landsman, STX May, 1988 Added phpadu, J. Hill, STX, October, 1990 New calling syntax output to disk FITS table, W. Landsman May 1996 Work with more than 32767 stars W. Landsman August 1997 Converted to IDL V5.0 W. Landsman September 1997 Remove obsolete !ERR system variable W. Landsman May 2000
(See $IDLUTILS_DIR/goddard/pro/idlphot/t_find.pro)
T_GETPSF
NAME: T_GETPSF PURPOSE: Driver procedure (for GETPSF) to generate a PSF from isolate stars. EXPLANATION: Generates a point-spread function from one or more isolated stars. List of stars is read from the FITS ASCII table output of T_APER. PSF is represented as a sum of a Gaussian plus residuals. Ouput residuals are written to a FITS image file. CALLING SEQUENCE: T_GETPSF, image, fitsfile, [ idpsf, psfrad, fitrad, psfname, /DEBUG, NEWTABLE =] INPUTS: IMAGE - image array FITSFILE - scalar string giving name of disk FITS ASCII table. Must contain the keywords 'X','Y' (from T_FIND) and 'AP1_MAG','SKY' (from T_APER). OPTIONAL INPUTS: IDPSF - vector of stellar ID indices indicating which stars are to be used to create the PSF. Not that the PSF star should be specified *not* by its STAR_ID value, but rather by the its row number (starting with 0) in the FITS table PSFRAD - the radius for which the PSF will be defined FITRAD - fitting radius, always smaller than PSFRAD PSFNAME - name of FITS image file to contain PSF residuals, scalar string GETPSF will prompt for all the above values if not supplied. OPTIONAL KEYWORD INPUT NEWTABLE - scalar string specifying the name of the output FITS ASCII table. If not supplied, then the input table is updated with the keyword PSF_CODE, specifying which stars were used for the PSF. DEBUG - if this keyword is set and non-zero, then the result of each fitting iteration will be displayed. PROMPTS: T_GETPSF will prompt for the readout noise (in data numbers), and the gain (in photons or electrons per data number) so that pixels can be weighted during the PSF fit. To avoid the prompt, add the keywords RONOIS and PHPADU to the FITS ASCII table header. PROCEDURES USED: FTADDCOL, FTGET(), FTPUT, GETPSF, READFITS(), SXADDHIST, SXADDPAR, SXPAR(), WRITEFITS, ZPARCHECK REVISION HISTORY: Written W. Landsman STX May, 1988 Update PSF_CODE to indicate PSF stars in order used, W. Landsman Mar 96 I/O to FITS ASCII disk files W. Landsman May 96 Converted to IDL V5.0 W. Landsman September 1997 Update for new FTINFO call W. Landsman May 2000
(See $IDLUTILS_DIR/goddard/pro/idlphot/t_getpsf.pro)
T_GROUP
NAME: T_GROUP PURPOSE: Driver procedure (for GROUP) to place stars in non-overlapping groups. EXPLANATION: This procedure is part of the DAOPHOT sequence that places star positions with non-overlapping PSFs into distinct groups Input and output are to FITS ASCII tables CALLING SEQUENCE: T_GROUP, fitsfile, [ rmax, XPAR = , YPAR = , NEWTABLE = ] INPUTS: FITSFILE - Name of disk FITS ASCII table containing the X,Y positions in FITS (FORTRAN) convention (first pixel is 1,1) OPTIONAL INPUTS: rmax - maximum allowable distance between stars in a single group OPTIONAL INPUT KEYWORDS: XPAR, YPAR - scalar strings giving the field name in the output table containing the X and Y coordinates. If not supplied, then the fields 'X' and 'Y' are read. NEWTABLE - scalar giving name of output disk FITS ASCII table. If not supplied, PROCEDURES: FTADDCOL, FTGET(), FTINFO, FTPUT, GROUP, READFITS(), SXADDHIST, SXADDHIST, WRITEFITS REVISION HISTORY: Written, W. Landsman STX Co. May, 1996 Converted to IDL V5.0 W. Landsman September 1997 Updated for new FTINFO call W. Landsman May 2000
(See $IDLUTILS_DIR/goddard/pro/idlphot/t_group.pro)
T_NSTAR
NAME: T_NSTAR PURPOSE: Driver procedure (for NSTAR) for simultaneous PSF fitting. EXPLANATION: Input and output are to disk FITS ASCII tables. CALLING SEQUENCE: T_NSTAR, image, fitsfile, [psfname, groupsel, /SILENT, /PRINT NEWTABLE = , /VARSKY ] INPUTS: IMAGE - 2-d image array FITSFILE - scalar string giving name of disk FITS ASCII table. Must contain the keywords 'X','Y' (from T_FIND) 'AP1_MAG','SKY' (from T_APER) and 'GROUP_ID' (from T_GROUP). This table will be updated with the results of T_NSTAR, unless the keyword NEWTABLE is supplied. OPTIONAL INPUTS: PSFNAME - Name of the FITS file created by T_GETPSF containing PSF residuals, scalar string GROUPSEL - Scalar or vector listing the groups to process. For example, to process stars in groups 2 and 5 set GROUPSEL = [2,5]. If omitted, or set equal to -1, then NSTAR will process all groups. OPTIONAL KEYWORD INPUTS: VARSKY - If this keyword is set and non-zero, then the mean sky level in each group of stars, will be fit along with the brightness and positions. /SILENT - if set and non-zero, then NSTAR will not display its results at the terminal /PRINT - if set and non-zero then NSTAR will also write its results to a file NSTAR.PRT. One can specify the output file name by setting PRINT = 'filename'. NEWTABLE - Name of output disk FITS ASCII table to contain the results of NSTAR. If not supplied, then the input FITSFILE will be updated. DEBUG - if this keyword is set and non-zero, then the result of each fitting iteration will be displayed. PROCEDURES CALLED: FTADDCAL, FTINFO, FTGET(), FTPUT, NSTAR, SXADDHIST, SXADDPAR, SXPAR(), READFITS(), WRITEFITS REVISION HISTORY: Written W. Landsman STX Co. May, 1988 Check for CCDGAIN, ATODGAIN keywords to get PHPADU W. Landsman May 1997 Fixed typo preventing compilation, groupsel parameter W.L. July 1997 Converted to IDL V5.0 W. Landsman September 1997 Update for new FTINFO call W. Landsman May 2000
(See $IDLUTILS_DIR/goddard/pro/idlphot/t_nstar.pro)
T_SUBSTAR
NAME: T_SUBSTAR PURPOSE: Driver procedure (for SUBSTAR) to subtract scaled PSF values EXPLANATION: Computes residuals of the PSF fitting program CALLING SEQUENCE: T_SUBSTAR, image, fitsfile, id,[ psfname, /VERBOSE, /NOPSF ] INPUT-OUTPUT: IMAGE - On input, IMAGE is the original image array. A scaled PSF will be subtracted from IMAGE at specified star positions. Make a copy of IMAGE before calling SUBSTAR, if you want to keep a copy of the unsubtracted image array INPUTS: FITSFILE - scalar string giving the name of the disk FITS ASCII produced as an output from T_NSTAR. OPTIONAL INPUTS: ID - Index vector indicating which stars are to be subtracted. If omitted, (or set equal to -1), then stars will be subtracted at all positions specified by the X and Y vectors. (IDL convention - zero-based subscripts) PSFNAME - Name of the FITS file containing the PSF residuals, as generated by GETPSF. SUBSTAR will prompt for this parameter if not supplied. OPTIONAL INPUT KEYWORD: /VERBOSE - If this keyword is set and non-zero, then the value of each star number will be displayed as it is processed. /NOPSF - if this keyword is set and non-zero, then all stars will be be subtracted *except* those used to determine the PSF. An improved PSF can then be derived from the subtracted image. If NOPSF is supplied, then the ID parameter is ignored NOTES: T_SUBSTAR does not modify the input FITS table. PROCEDURES USED: FTGET(), FTINFO, READFITS(), REMOVE, SUBSTAR REVISION HISTORY: Written, R. Hill, ST Sys. Corp., 22 August 1991 Added NOPSF keyword W. Landsman March, 1996 Use FITS format for PSF resduals July, 1997 Converted to IDL V5.0 W. Landsman September 1997 Call FTINFO first to improve efficiency W. Landsman May 2000
(See $IDLUTILS_DIR/goddard/pro/idlphot/t_substar.pro)
UNDEFINE
NAME: UNDEFINE PURPOSE: The purpose of this program is to delete or undefine an IDL program variable from within an IDL program or at the IDL command line. It is a more powerful DELVAR. Pointer and structure variables are traversed recursively to undefine any variables pointed to in the pointer or in a structure dereference. AUTHOR: FANNING SOFTWARE CONSULTING David Fanning, Ph.D. 1642 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com CATEGORY: Utilities. CALLING SEQUENCE: UNDEFINE, variable REQUIRED INPUTS: variable: The variable to be deleted. Up to 10 variables may be specified as arguments. SIDE EFFECTS: The variable no longer exists. EXAMPLE: To delete the variable "info", type: IDL> Undefine, info IDL> var = ptr_new({a:ptr_New(5), b:findgen(11), c: {d:ptr_New(10), f:findgen(11)}}) IDL> Help, /Heap Heap Variables: # Pointer: 3 # Object : 0 <PtrHeapVar3> LONG = 5 <PtrHeapVar4> LONG = 10 <PtrHeapVar5> STRUCT = -> <Anonymous> Array[1] IDL> Undefine, var IDL> Help, /Heap Heap Variables: # Pointer: 0 # Object : 0 IDL> Help, var VAR UNDEFINED = <Undefined> MODIFICATION HISTORY: Written by David W. Fanning, 8 June 97, from an original program given to me by Andrew Cool, DSTO, Adelaide, Australia. Simplified program so you can pass it an undefined variable. :-) 17 May 2000. DWF Simplified it even more by removing the unnecessary SIZE function. 28 June 2002. DWF. Added capability to delete up to 10 variables at suggestion of Craig Markwardt. 10 Jan 2008. DWF. If the variable is a pointer, object or structure reference the variable is recursively traversed to free up all variables pointed to before the variable is itself destroyed. 10 June 2009. DWF. Updated to allow undefining of pointer arrays. 8 October 2009. DWF.
(See $IDLUTILS_DIR/goddard/pro/coyote/undefine.pro)
UNZOOM_XY
NAME: UNZOOM_XY PURPOSE: Converts X, Y position on the image display to the the X,Y position on the corresponding image array. (These positions are identical only for an unroamed, unzoomed image with with pixel (0,0) of the image placed at position (0,0) on the TV.) CALLING SEQUENCE: UNZoom_XY, Xtv,Ytv,Xim,Yim, [ OFFSET =, ZOOM = ] INPUTS: XTV - Scalar or vector giving X position(s) as read on the image display (e.g. with CURSOR,XTV,YTV,/DEVICE) XTV - Scalar or vector giving Y position(s) on the image display. If only 2 parameters are supplied then XTV and YTV will be modfied on output to contain the image array coordinates. OPTIONAL KEYWORD INPUT: 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. OUTPUTS: XIM,YIM - X and Y coordinates of the image corresponding to the cursor position on the TV display. COMMON BLOCKS: If present, ZOOM_XY will use the TV and IMAGE common blocks which are defined in the MOUSSE software system (see http://archive.stsci.edu/uit/analysis.html) If the user is not using the MOUSSE software (which keeps track of the offset and zoom in each window) then the common blocks are ignored. NOTES: The integer value of a pixel is assumed to refer to the *center* of a pixel. REVISON HISTORY: Adapted from MOUSSE procedure W. Landsman March 1996 Converted to IDL V5.0 W. Landsman September 1997 Proper handling of offset option S. Ott/W. Landsman May 2000 Put back common blocks for MOUSSE compatibility September 2004
(See $IDLUTILS_DIR/goddard/pro/tv/unzoom_xy.pro)
UPDATE_DISTORT
NAME: UPDATE_DISTORT PURPOSE: Update SIP nonlinear distortion coefficients for a linear transformation EXPLANATION: The SIP coefficients can account for nonlinearities in the astrometry of an astronomical image. When the image is compressed or expanded these coefficients must be adjusted in a nonlinear way. CALLING SEQUENCE: UPDATE_DISTORT, distort, xcoeff, ycoeff INPUT/OUTPUT: distort - structure giving SIP coefficients. See extast.pro for description of the SIP distortion structure xcoeff - 2 element numeric vector describing the linear transformation xp = xcoeff[0]*x + xcoeff[1] xcoeff - 2 element numeric vector describing the linear transformation yp = ycoeff[0]*x + ycoeff[1] METHOD: The procedure TRANSFORM_COEFF is used to determine how the coefficients change under the linear transformation. See example of usage in hrebin.pro REVISION HISTORY: Written, December 2007 W. Landsman
(See $IDLUTILS_DIR/goddard/pro/astrom/update_distort.pro)
UVBYBETA
NAME: UVBYBETA PURPOSE: Derive dereddened colors, metallicity, and Teff from Stromgren colors. EXPLANATION: Adapted from FORTRAN routine of same name published by T.T. Moon, Communications of University of London Observatory, No. 78. Parameters can either be input interactively (with /PROMPT keyword) or supplied directly. CALLING SEQUENCE: uvbybeta, /PROMPT ;Prompt for all parameters uvbybeta,by,m1,c1,Hbeta,n ;Supply inputs, print outputs uvbybeta, by, m1, c1, Hbeta, n, Te, Mv, Eby, delm0, radius, [ TEXTOUT=, Eby_in =, Name = ] INPUTS: by - Stromgren b-y color, scalar or vector m1 - Stromgren line-blanketing parameter, scalar or vector c1 - Stromgren Balmer discontinuity parameter, scalar or vector Hbeta - H-beta line strength index. Set Hbeta to 0 if it is not known, and UVBYBETA will estimate a value based on by, m1,and c1. Hbeta is not used for stars in group 8. n - Integer (1-8), scalar or vector, giving approximate stellar classification (1) B0 - A0, classes III - V, 2.59 < Hbeta < 2.88,-0.20 < c0 < 1.00 (2) B0 - A0, class Ia , 2.52 < Hbeta < 2.59,-0.15 < c0 < 0.40 (3) B0 - A0, class Ib , 2.56 < Hbeta < 2.61,-0.10 < c0 < 0.50 (4) B0 - A0, class II , 2.58 < Hbeta < 2.63,-0.10 < c0 < 0.10 (5) A0 - A3, classes III - V, 2.87 < Hbeta < 2.93,-0.01 < (b-y)o< 0.06 (6) A3 - F0, classes III - V, 2.72 < Hbeta < 2.88, 0.05 < (b-y)o< 0.22 (7) F1 - G2, classes III - V, 2.60 < Hbeta < 2.72, 0.22 < (b-y)o< 0.39 (8) G2 - M2, classes IV _ V, 0.20 < m0 < 0.76, 0.39 < (b-y)o< 1.00 OPTIONAL INPUT KEYWORD: Eby_in - numeric scalar specifying E(b-y) color to use. If not supplied, then E(b-y) will be estimated from the Stromgren colors NAME - scalar or vector string giving name(s) of star(s). Used only when writing to disk for identification purposes. /PROMPT - if set, then uvbybeta.pro will prompt for Stromgren indicies interactively TEXTOUT - Used to determine output device. If not present, the value of the !TEXTOUT system variable is used (see TEXTOPEN) textout=1 Terminal with /MORE (if a tty) textout=2 Terminal without /MORE textout=3 uvbybeta.prt (output file) textout=4 Laser Printer textout=5 User must open file textout=7 Append to existing uvbybeta.prt file textout = filename (default extension of .prt) /PRINT - if set, then force display output information to the device specified by !TEXTOUT. By default, UVBYBETA does not display information if output variables are supplied (and TEXTOUT is not set). OPTIONAL OUTPUTS: Te - approximate effective temperature MV - absolute visible magnitude Eby - Color excess E(b-y) delm0 - metallicity index, delta m0, (may not be calculable for early B stars). radius - Stellar radius (R/R(solar)) EXAMPLE: Suppose 5 stars have the following Stromgren parameters by = [-0.001 ,0.403, 0.244, 0.216, 0.394 ] m1 = [0.105, -0.074, -0.053, 0.167, 0.186 ] c1 = [0.647, 0.215, 0.051, 0.785, 0.362] hbeta = [2.75, 2.552, 2.568, 2.743, 0 ] nn = [1,2,3,7,8] ;Processing group number Determine stellar parameters and write to a file uvbybeta.prt IDL> uvbybeta, by,m1,c1,hbeta, nn, t=3 ==> E(b-y) = 0.050 0.414 0.283 0.023 -0.025 Teff = 13060 14030 18420 7250 5760 M_V = -0.27 -6.91 -5.94 2.23 3.94 radius= 2.71 73.51 39.84 2.02 1.53 SYSTEM VARIABLES: The non-standard system variables !TEXTOUT and !TEXTUNIT will be automatically defined if they are not already present. DEFSYSV,'!TEXTOUT',1 DEFSYSV,'!TEXTUNIT',0 NOTES: (1) **This procedure underwent a major revision in January 2002 and the new calling sequence may not be compatible with the old** (NAME is now a keyword rather than a parameter.) (2) Napiwotzki et al. (1993, A&A, 268, 653) have written a FORTRAN program that updates some of the Moon (1985) calibrations. These updates are *not* included in this IDL procedure. PROCEDURES USED: DEREDD, TEXTOPEN, TEXTCLOSE REVISION HISTORY: W. Landsman IDL coding February, 1988 Keyword textout added, J. Isensee, July, 1990 Made some constants floating point. W. Landsman April, 1994 Converted to IDL V5.0 W. Landsman September 1997 Added Eby_in, /PROMPT keywords, make NAME a keyword and not a parameter W. Landsman January 2002
(See $IDLUTILS_DIR/goddard/pro/astro/uvbybeta.pro)
VACTOAIR
NAME: VACTOAIR PURPOSE: Convert vacuum wavelengths to air wavelengths EXPLANATION: Corrects for the index of refraction of air under standard conditions. Wavelength values below 2000 A will not be altered. Accurate to about 10 m/s. CALLING SEQUENCE: VACTOAIR, WAVE_VAC, [WAVE_AIR] INPUT/OUTPUT: WAVE_VAC - Vacuum Wavelength in Angstroms, scalar or vector If the second parameter is not supplied, then this will be updated on output to contain double precision air wavelengths. OPTIONAL OUTPUT: WAVE_AIR - Air wavelength in Angstroms, same number of elements as WAVE_VAC, double precision EXAMPLE: If the vacuum wavelength is W = 2000, then IDL> VACTOAIR, W yields an air wavelength of W = 1999.353 Angstroms METHOD: Formula from Ciddor 1996 Applied Optics , 35, 1566 REVISION HISTORY Written, D. Lindler 1982 Documentation W. Landsman Feb. 1989 Use Ciddor (1996) formula for better accuracy in the infrared Added optional output vector, W Landsman Mar 2011
(See $IDLUTILS_DIR/goddard/pro/astro/vactoair.pro)
VALID_NUM()
NAME: VALID_NUM() PURPOSE: Check if a string is a valid number representation. EXPLANATION: The input string is parsed for characters that may possibly form a valid number. It is more robust than simply checking for an IDL conversion error because that allows strings such as '22.3qwert' to be returned as the valid number 22.3 This function had a major rewrite in August 2008 to use STREGEX and allow vector input. It should be backwards compatible. CALLING SEQUENCE: IDL> status = valid_num(string [,value] [,/integer]) INPUTS: string - the string to be tested, scalar or array RETURNS status - byte scalar or array, same size as the input string set to 1 where the string is a valid number, 0 for invalid OPTIONAL OUTPUT: value - The value the string decodes to, same size as input string. This will be returned as a double precision number unless /INTEGER is present, in which case a long integer is returned. OPTIONAL INPUT KEYWORD: /INTEGER - if present code checks specifically for an integer. EXAMPLES: (1) IDL> print,valid_num(3.2,/integer) --> 0 ;Since 3.2 is not an integer (2) IDL> str =['-0.03','2.3g', '3.2e12'] IDL> test = valid_num(str,val) test = [1,0,1] & val = [-0.030000000 ,NaN ,3.2000000e+12] REVISION HISTORY: Version 1, C D Pike, RAL, 24-May-93 Version 2, William Thompson, GSFC, 14 October 1994 Added optional output parameter VALUE to allow VALID_NUM to replace STRNUMBER in FITS routines. Version 3 Wayne Landsman rewrite to use STREGEX, vectorize Version 4 W.L. (fix from C. Markwardt) Better Stregex expression, was missing numbers like '134.' before Jan 1 2010
(See $IDLUTILS_DIR/goddard/pro/misc/valid_num.pro)
VECT
NAME: VECT PURPOSE: Print a set of numbers as a string with delimiters included EXPLANATION: This function returns the given vector in parenthesized coordinates as in the form (X,Y). No limit on the number of dimensions. Also note that the vector does not need to be numbers. It may also be a string vector. e.g. ['X','Y'] CALLING SEQEUNCE: tmp = VECT( vctr, [ form, FORMAT = , DELIM = ] ) INPUT: VCTR The vector to be displayed e.g. [56,44] OPTIONAL KEYWORD INPUT: FORMAT This KEYWORD allows the specification of a format for the elements. e.g.: VECT([2,3],format='(f7.1)') gives '(2.0,3.0)' DELIM This KEYWORD specifies the delimeter. The default is ',' but other useful examples might be ', ' or ':' OPTIONAL INPUT FORM This parameter may be used instead of the keyword FORMAT OUTPUT: tmp A returned string of the parenthesized vector Other Procedures/Functions Called: STRN HISTORY: 03-JUL-90 Version 1 written by Eric W. Deutsch 24-AUG-91 Format='' keyword added (E. Deutsch) 29-AUG-91 FORM parameter added (E. Deutsch) Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/misc/vect.pro)
VSYM
NAME: VSYM PURPOSE: Create "Mongo"-like polygonal plot symbols EXPLANATION: This procedure generates a subset of Mongo-like plot symbols. The symbols are the rotationally symmetric ones that have a specified number of vertices and are either open or filled. (The half-filled symbols are not included.) After defining the plot symbol with VSYM, make the call to PLOT (or PLOTS or OPLOT) with PSYM=8. CATEGORY: Graphics CALLING SEQUENCE: VSYM, Nvert INPUT POSITIONAL PARAMETERS: Nvert: Number of vertices in plot symbol. Maximum value used is 24. INPUT KEYWORD PARAMETERS: STAR: Set this flag to get a star. E.g., vsym, 5,/star gets you a pentagram. SKELETON: Set this flag to get an asterisk-like symbol, where the center is connected to each vertex. E.g., vsym, 4, /skel gets you an X. POLYGON: Set this flag to get a regular polygon. This is the default symbol type. FILL: Set this flag to get filled symbol. Default=open ROT: Rotation of symbol about center, in degrees. E.g., vsym, 4, rot=45 gets you a diamond, whereas vsym, 4 gets you a square. THICK: Line thickness of symbol. Default=!P.thick MODIFICATION HISTORY: Written by: R. S. Hill, RITSS, 2 Oct 98
(See $IDLUTILS_DIR/goddard/pro/plot/vsym.pro)
WCSSPH2XY
NAME: WCSSPH2XY PURPOSE: Convert spherical coordinates to x and y (map) angular coordinates EXPLANATION: Convert spherical (longitude and latitude -- sky) coordinates to x and y (map) angular coordinates. This procedure is the inverse of WCSXY2SPH. See WCS_DEMO for example of use. This is a lower level procedure -- given a FITS header, the user will usually use ADXY which will then call WCSSPH2XY with the appropriate parameters. CATEGORY: Mapping and Auxiliary FITS Routine CALLING SEQUENCE: wcssph2xy, longitude, latitude, x, y, [ map_type , CTYPE = , FACE =,PV2= , CRVAL = , CRXY = , LONGPOLE = , LATPOLE = , NORTH_OFFSET =, SOUTH_OFFSET =, BADINDEX =] INPUT PARAMETERS: longitude - longitude of data, scalar or vector, in degrees latitude - latitude of data, same number of elements as longitude, in degrees map_type - optional positional parameter, numeric scalar (0-26) corresponding to a particular map projection. This is not a FITS standard, it is simply put in to allow function similar to that of less general map projection procedures (eg AITOFF). The following list gives the map projection types and their respective numbers. FITS Number Name Comments code code ---- ------ ----------------------- ----------------------------------- DEF 0 Default = Cartesian AZP 1 Zenithal perspective PV2_1 required TAN 2 Gnomic AZP w/ mu = 0 SIN 3 Orthographic PV2_1,PV2_2 optional STG 4 Stereographic AZP w/ mu = 1 ARC 5 Zenithal Equidistant ZPN 6 Zenithal polynomial PV2_0, PV2_1....PV2_20 possible ZEA 7 Zenithal equal area AIR 8 Airy PV2_1 required CYP 9 Cylindrical perspective PV2_1 and PV2_2 required CAR 10 Cartesian MER 11 Mercator CEA 12 Cylindrical equal area PV2_1 required COP 13 Conical perspective PV2_1 and PV2_2 required COD 14 Conical equidistant PV2_1 and PV2_2 required COE 15 Conical equal area PV2_1 and PV2_2 required COO 16 Conical orthomorphic PV2_1 and PV2_2 required BON 17 Bonne's equal area PV2_1 required PCO 18 Polyconic SFL 19 Sanson-Flamsteed PAR 20 Parabolic AIT 21 Hammer-Aitoff MOL 22 Mollweide CSC 23 Cobe Quadrilateralized convergence of inverse is poor Spherical Cube QSC 24 Quadrilateralized Spherical Cube TSC 25 Tangential Spherical Cube SZP 26 Slant Zenithal Projection PV2_1,PV2_2, PV2_3 optional HPX 27 HealPix HCT 28 HealCart (Cartesian approximation of Healpix) OPTIONAL INPUT KEYWORD PARAMETERS: CTYPE - One, two, or three element vector containing 8 character strings corresponding to the CTYPE1, CTYPE2, and CTYPE3 FITS keywords: CTYPE[0] - first four characters specify standard system ('RA--','GLON' or 'ELON' for right ascension, Galactic longitude or ecliptic longitude respectively), second four letters specify the type of map projection (eg '-AIT' for Aitoff projection) CTYPE[1] - first four characters specify standard system ('DEC-','GLAT' or 'ELAT' for declination, galactic latitude or ecliptic latitude respectively; these must match the appropriate system of ctype1), second four letters of ctype2 must match second four letters of ctype1. CTYPE[2] - if present must be the 8 character string,'CUBEFACE', only used for spherical cube projections to identify an axis as containing the face on which each x and y pair of coordinates lie. 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. The first element corresponds to PV2_1, the second to PV2_2, etc. CRVAL - 2 element vector containing standard system coordinates (the longitude and latitude) of the reference point CRXY - 2 element vector giving the x and y coordinates of the reference point, if this is not set the offset is [0,0] This is not a FITS standard -- it is similar to CRPIX but in angular X,Y coordinates (degrees) rather than pixel coordinates LATPOLE - native latitude of the standard system's North Pole LONGPOLE - native longitude of standard system's North Pole, default is 180 degrees for Zenithal systems NORTH_OFFSET - offset (radians) added to input points near north pole. SOUTH_OFFSET - offset (radians) added to input points near south pole. BADINDEX - vector, list of transformed points too close to poles. OUTPUT PARAMETERS: x - x coordinate of data, same number of elements as longitude, in degrees; if CRXY is set, then x will be returned offset by crxy(0). NOTE: x in all map projections increases to the left, not the right. y - y coordinate of data, same number of elements as longitude, in degrees; if CRXY is set, y will be returned offset by crxy[1] bad - vector returning index to transformed points close to pole. OPTIONAL OUTPUT KEYWORD PARAMETERS: FACE - a output variable used for spherical cube projections to designate the face of the cube on which the x and y coordinates lie. Will contain the same number of elements as X and Y. Must contain at least 1 arbitrary element on input If FACE is NOT defined on input, it is assumed that the spherical cube projection is laid out over the whole sky in the "sideways T" configuration. NOTES: The conventions followed here are described in more detail in "Representations of Celestial Coordinates in FITS" by Calabretta and Greisen (2002, A&A, 395, 1077; also see http://fits.gsfc.nasa.gov/fits_wcs.html). The general scheme outlined in that article is to first use WCS_ROTATE to convert coordinates in one of three standard systems (celestial, galactic, or ecliptic) into a "native system" of latitude and longitude. The latitude and longitude are then converted into x and y coordinates which depend on the map projection which is performed. The rotation from standard to native coordinates can be skipped if one so desires. This procedure necessitates two basic sections. The first converts "standard" coordinates to "native" coordinates while the second converts "native" coordinates to x and y coordinates. The first section is simply a call to WCS_ROTATE, while the second contains the guts of the code in which all of the map projection is done. This procedure can be called in a form similar to AITOFF, EQPOLE, or QDCB by calling wcssph2xy with a fifth parameter specifying the map projection by number and by not using any of the keywords related to the map projection type (e.g. CTYPE). PROCEDURE: The first task of the procedure is to do general error-checking to make sure the procedure was called correctly and none of the parameters or keywords conflict. This is particularly important because the procedure can be called in two ways (either using FITS-type keywords or using a number corresponding to a map projection type). All variables are converted into double precision values and angular measurements are converted from degrees into radians. If necessary, longitude values are converted into the range -pi to pi. Any latitude points close to the of the poles are mapped to a specific latitude of from the pole so that the map transformations become completely invertible. The magnitude of this correction is given by the keywords NORTH_OFFSET and SOUTH_OFFSET and a list of affected points is optionally returned in the "badindex" output parameter. The next task of the procedure is to convert the "standard" coordinates to "native" coordinates by rotating the coordinate system. This rotation is performed by the procedure WCS_ROTATE and is governed by the keywords CRVAL and LONGPOLE. The final task of the WCSSPH2XY is to take "native" latitude and longitude coordinates and convert them into x and y coordinates. Any map specific error-checking is done at this time. All of the equations were obtained from "Representations of Celestial Coordinates in FITS" and cases needing special attention are handled appropriately (see the comments with individual map projections for more information on special cases). Note that a further transformation (using the CD matrix) is required to convert the (x,y) coordinates to pixel coordinates. COMMON BLOCKS: none PROCEDURES CALLED: WCS_ROTATE AUTHOR: Rick Balsano MODIFICATIONS/REVISION LEVEL: 1.1 8/31/93 2.3 9/15/93 W. Landsman (HSTX) Update quad cube coords, vectorize keywords 2.4 12/29/93 I. Freedman (HSTX) Eliminated LU decomposition 2.5 1/5/93 I. Freedman (HSTX) Offset keywords / bad point index 2.6 Dec 94 Compute pole for transformations where the reference pixel is at the native origin W. Landsman (HSTX) 2.7 May 95 Change internal variable BETA for V4.0 compatibility 2.8 June 95 Change loop indices from integer to long 2.9 3/18/96 Change FACE usage for cube projections to match WCSLIB C/FORTRAN software library. 2.10 02/18/99 Fixed implementation of ARC algorithm 2.11 June 2003 Update conic projections, add LATPOLE keyword 2.12 Aug 2003, N.Rich - Fix pre-V5.5 bug from previous update 2.13 Sep 2003, W. Landsman CTYPE keywords need not be 8 characters 2.14 Jan 2004, W. Landsman don't modify scalars, fix PARabolic code 2.15 Feb 2004, W. Landsman Fix AZP and AIR algorithms 3.0 May 2004 W. Landsman Support extended SIN (=NCP), slant zenithal (SZP), and zenithal polynomail (ZPN) projections, use PV2 keyword vector instead of PROJP1, PROJP2 3.1 Jul 2005 W.Landsman/C. Markwardt Set unprojectable points in tangent projection to NaN 3.1.1 Jul 2005 Fixed 3.1 mod to work for scalars 3.2 Dec 2005 Fixed Airy projection for latitude centered at 90 deg 3.3 Aug 2007 R. Munoz, W.Landsman Correct treatment of PV1_2 and PV2_2 parameters 3.4 Oct 2007 Sergey Koposov Support HEALPIX projection 3.4.1 June 2009 Check for range of validity of ZPN polynomial W.L. 3.5 May 2012 Benjamin Alan Weaver, Add nonstandard HEALCART projection, Allow map_index to be > 25
(See $IDLUTILS_DIR/goddard/pro/astrom/wcssph2xy.pro)
WCSXY2SPH
NAME: WCSXY2SPH PURPOSE: Convert x and y (map) coordinates to spherical coordinates EXPLANATION: To convert x and y (map) coordinates to spherical (longitude and latitude or sky) coordinates. This procedure is the inverse of WCSSPH2XY. This is a lower level procedure -- given a FITS header, the user will usually use XYAD which will then call WCSXY2SPH with the appropriate parameters. CATEGORY: Mapping and Auxilary FITS Routine CALLING SEQUENCE: wcsxy2sph, x, y, longitude, latitude, [map_type], [ CTYPE = ,$ FACE = ,PV2 = ,CRVAL =, CRXY =, LONGPOLE=, LATPOLE=] INPUT PARAMETERS: x - x coordinate of data, scalar or vector, in degrees, NOTE: x increases to the left, not the right y - y coordinate of data, same number of elements as x, in degrees map_type - optional positional parameter, scalar corresponding to a particular map projection. This is not a FITS standard, it is simply put in to allow function similar to that of less general map projection procedures (eg AITOFF). The following list gives the map projection types and their respective numbers. FITS Number Name Comments code code ---- ------ ----------------------- ----------------------------------- DEF 0 Default = Cartesian AZP 1 Zenithal perspective pv2_1 required TAN 2 Gnomic AZP w/ pv2_1 = 0 SIN 3 Orthographic pv2_1, pv2_2 optional STG 4 Stereographic AZP w/ pv2_1 = 1 ARC 5 Zenithal Equidistant ZPN 6 Zenithal polynomial PV2_0, PV2_1....PV2_20 possible ZEA 7 Zenithal equal area AIR 8 Airy pv2_1 required CYP 9 Cylindrical perspective pv2_1 and pv2_2 required CAR 10 Cartesian MER 11 Mercator CEA 12 Cylindrical equal area pv2_1 required COP 13 Conical perspective pv2_1 and pv2_2 required COD 14 Conical equidistant pv2_1 and pv2_2 required COE 15 Conical equal area pv2_1 and pv2_2 required COO 16 Conical orthomorphic pv2_1 and pv2_2 required BON 17 Bonne's equal area pv2_1 required PCO 18 Polyconic SFL 19 Sanson-Flamsteed PAR 20 Parabolic AIT 21 Hammer-Aitoff MOL 22 Mollweide CSC 23 Cobe Quadrilateralized inverse converges poorly Spherical Cube QCS 24 Quadrilateralized Spherical Cube TSC 25 Tangential Spherical Cube SZP 26 Slant Zenithal perspective PV2_1,PV2_2, PV2_3 optional HPX 27 HealPix HCT 28 HealCart (Cartesian approximation of Healpix) OPTIONAL KEYWORD PARAMETERS: CTYPE - One, two, or three element vector containing 8 character strings corresponding to the CTYPE1, CTYPE2, and CTYPE3 FITS keywords: CTYPE[0] - first four characters specify standard system ('RA--','GLON' or 'ELON' for right ascension, galactic longitude or ecliptic longitude respectively), second four letters specify the type of map projection (eg '-AIT' for Aitoff projection) CTYPE[1] - first four characters specify standard system ('DEC-','GLAT' or 'ELAT' for declination, galactic latitude or ecliptic latitude respectively; these must match the appropriate system of ctype1), second four letters of ctype2 must match second four letters of ctype1. CTYPE[2] - if present must be the 8 character string,'CUBEFACE', only used for spherical cube projections to identify an axis as containing the face on which each x and y pair of coordinates lie. FACE - a input variable used for spherical cube projections to designate the face of the cube on which the x and y coordinates lie. Must contain the same number of elements as X and Y. CRVAL - 2 element vector containing standard system coordinates (the longitude and latitude) of the reference point CRXY - 2 element vector giving the x and y coordinates of the reference point, if this is not set the offset of the x coordinate is assumed to be 0. LATPOLE - native latitude of the standard system's North Pole LONGPOLE - native longitude of standard system's North Pole, default is 180 degrees, numeric scalar 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. The first element corresponds to PV2_1, the second to PV2_2, etc. OUTPUT PARAMETERS: longitude - longitude of data, same number of elements as x, in degrees latitude - latitude of data, same number of elements as x, in degrees Longitude and latitude will be set to NaN, wherever elements of X,Y have no corresponding longitude, latitude values. NOTES: The conventions followed here are described in more detail in the paper "Representations of Celestial Coordinates in FITS" by Calabretta & Greisen (2002, A&A, 395, 1077, also see http://fits.gsfc.nasa.gov/fits_wcs.html). The general scheme outlined in that article is to convert x and y coordinates into a "native" longitude and latitude and then rotate the system into one of three generally recognized systems (celestial, galactic or ecliptic). This procedure necessitates two basic sections. The first converts x and y coordinates to "native" coordinates while the second converts "native" to "standard" coordinates. The first section contains the guts of the code in which all of the map projection is done. The second step is performed by WCS_ROTATE and only involves rotation of coordinate systems. WCSXY2SPH can be called in a form similar to AITOFF, EQPOLE, or QDCB by calling wcsxy2sph with a fifth parameter specifying the map projection by number and by not using any of the keywords related to the map projection type (eg ctype1 and ctyp2). PROCEDURE: The first task of the procedure is to do general error-checking to make sure the procedure was called correctly and none of the parameters or keywords conflict. This is particularly important because the procedure can be called in two ways (either using FITS-type keywords or using a number corresponding a map projection type). All variables are converted into double precision values. The second task of the procedure is to take x and y coordinates and convert them into "native" latitude and longitude coordinates. Map-specific error-checking is done at this time. All of the equations were obtained from "Representations of Celestial Coordinates in FITS" and cases needing special attention are handled appropriately (see the comments with individual map projections for more information on special cases). WCS_ROTATE is then called to convert the "native" coordinates to "standard" coordinates by rotating the coordinate system. This rotation is governed by the keywords CRVAL, and LONGPOLE. The transformation is a straightforward application of euler angles. Finally, longitude values are converted into the range from 0 to 360 degrees. COMMON BLOCKS: none PROCEDURES CALLED: WCS_ROTATE AUTHOR: Rick Balsano MODIFICATIONS/REVISION LEVEL: 1.1 8/31/93 1.2 9/12/93 W. Landsman Vectorized CRXY, CRVAL, CTYPE 1.3 29/12/93 I. Freedman Eliminated LU decomposition 1.4 22/09/94 W. Landsman If scalar input, then scalar output 1.5 02/03/05 W. Landsman Change variable name BETA for V4.0 compatibility 1.6 06/07/05 W. Landsman Change loop index from integer to long 1.7 02/18/99 W. Landsman Fixed implementation of ARC algorithm 1.8 June 2003 W. Landsman Update conic projections, add LATPOLE keyword 1.81 Sep 2003 W. Landsman Avoid divide by zero 1.82 Sep 2003 W. Landsman CTYPE keywords need not be 8 characters 1.83 Sep 2003 W. Landsman Preserve input array sizes 1.9 Jan 2004 W. Landsman don't modify scalars, fix PARabolic code 2.0 Feb 2004 W. Landsman Fix AIR and AZP projections 2.1 Feb 2004 W. Landsman Fix tangent projection for matrix input 3.0 May 2004 W. Landsman Support extended SIN (=NCP), slant zenithal (SZP), and zenithal polynomial (ZPN) projections, use PV2 keyword vector instead of PROJP1, PROJP2 3.1 May 2004 W. Landsman/J. Ballet Handle NaN values, flag invalid output for AITOFF projection 3.1.1 Dec 2005 W. Landsman/W. Thompson Fixed problem with Airy projection centered on 90 degree latitude 3.1.2 May 2006 W. Landsman/Y.Sato Fix problem selecting the correct root for the ZPN projection 3.2 Aug 2007 W. Landsman Correct treatment of PVi_j parameters 3.3 Oct 2007 Sergey Koposov Support HEALPIX projection 3.4 May 2012 Benjamin Alan Weaver, Add nonstandard HEALCART projection, Allow map_index to be > 25
(See $IDLUTILS_DIR/goddard/pro/astrom/wcsxy2sph.pro)
WCS_DEMO
NAME: WCS_DEMO PURPOSE: Demonstrate the basic capabilities of procedures WCSSPH2XY & WCSXY2SPH CATEGORY: Mapping and Auxilary FITS Demo Routine CALLING SEQUENCE: .run wcs_demo: compiles wcs_demo and the supporting demo routines wcs_demo: run the demo INPUT PARAMETERS: none OUTPUT PARAMETERS: none PROCEDURE: This is a demo program which is meant to call the routines wcssph2xy.pro and wcsxy2sph.pro. Since the purpose of this routine is both to show what the routines can do and what the user has to do, a file is created with all of the commands needed to complete the desired operation. Wcs_demo actually executes this command file, so the user can exactly duplicate the results by simply re-executing this file. Also, this allows a user to edit an already existing file which calls wcssph2xy.pro and wcsxy2sph.pro properly and extend the file's usefulness. This demo program allows several possible tests. The first option is to simply draw a grid of evenly spaced latitude and longitude lines in a particular map transformation. Another possibility is to do a full loop, creating a Cartesian grid of latitude and longitude lines and calling wcssph2xy.pro to convert them to a particular map. Then, wcsxy2sph.pro is called to invert the process and the difference between the original and final latitudes and longitudes can be plotted. This allows one to assess the level of the numerical errors introduced by the mapping routines. A third possible option is to look at some of the map transformations and include rotations of the reference points so that a different perspective is given. COMMON BLOCKS: none PROCEDURES CALLED: SPHDIST(), WCSXY2SPH, WCSSPH2XY COPYRIGHT NOTICE: Copyright 1991, 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: Rick Balsano MODIFICATIONS/REVISION LEVEL: 1.1 8/31/93 1.2 3/19/96 - J. Bloch - LANL - Made compatible with wcslib-2.2 by Calabretta. Converted to IDL V5.0 W. Landsman September 1997 Updated for conical projections W. Landsman July 2003
(See $IDLUTILS_DIR/goddard/pro/astrom/wcs_demo.pro)
WCS_GETPOLE
NAME: WCS_GETPOLE PURPOSE: Compute the coordinates of the native pole for a non-polar projection EXPLANATION: For non-polar (cylindrical or conic) projections, the native pole is not at the reference point, and WCS_GETPOLE is used to determine the position of the native pole. See section 2.4 of the paper "Representation of Celestial Coordinates in FITS" by Calabretta Greisen (2002, A&A, 395, 1077, also available at http://fits.gsfc.nasa.gov/fits_wcs.html Called by WCS_ROTATE CALLING SEQUENCE: WCS_GETPOLE, crval, lonpole, theta0, alpha_p, delta_p, LATPOLE= ] INPUT PARAMETERS: crval - 2 element vector containing standard system coordinates (the longitude and latitude) of the reference point in degrees lonpole - native longitude of the celestial North Pole (degrees) theta0 - native latitude of the fiducial point OUTPUT PARAMETERS: alpha_p, delta_p - celestial longitude and latitude of the native pole (Radians) OPTIONAL KEYWORD INPUT PARAMETERS: LATPOLE - native latitude of the celestial North Pole (degrees) REVISION HISTORY: Written W. Landsman June, 2003 Fix calculation when theta0 is not 0 or 90 February 2004 E. Hivon: alpha_p, delta_p consistenly in Radians May 2010
(See $IDLUTILS_DIR/goddard/pro/astrom/wcs_getpole.pro)
WCS_ROTATE
NAME: WCS_ROTATE PURPOSE: Rotate between standard (e.g. celestial) and native coordinates EXPLANATION: Computes a spherical coordinate rotation between native coordinates and standard celestial coordinate system (celestial, Galactic, or ecliptic). Applies the equations in Appendix B of the paper "Representation of Celestial Coordinates in FITS" by Calabretta Greisen (2002, A&A, 395, 1077). Also see http://fits.gsfc.nasa.gov/fits_wcs.html CATEGORY: Mapping and Auxiliary FITS Routine CALLING SEQUENCE: WCS_ROTATE, longitude, latitude, phi, theta, crval, [LONGPOLE = , LATPOLE = , /REVERSE, /ORIGIN ] INPUT PARAMETERS: crval - 2 element vector containing standard system coordinates (the longitude and latitude) of the reference point INPUT OR OUTPUT PARAMETERS longitude - longitude of data, scalar or vector, in degrees, in the standard celestial coordinate system latitude - latitude of data, same number of elements as longitude, in degrees phi - longitude of data in the native system, in degrees, scalar or vector theta - latitude of data in the native system, in degrees, scalar or vector If the keyword(REVERSE) is set then phi and theta are input parameters and longitude and latitude are computed. Otherwise, longitude and latitude are input parameters and phi and theta are computed. OPTIONAL KEYWORD INPUT PARAMETERS: ORIGIN - If this keyword is set and non-zero, then the reference point given by CRVAL in the native system is assumed to be at the origin of the coordinates, rather than at the North Pole. ORIGIN should be set for cylindrical projections (Cylindrical perspective-CYP, Cartesian - CAR, Mercator - MER, Cylindrical Equal area - CEA) and conventional projections (Bonne's equal area - BON, Polyconic - PCO, Sinusoidal - GLS, Parabolic - PAR, Aitoff - AIT, Mollweide - MOL, COBE quadrilateralized sphere - CSC, Quadrilateralized Spherical Cube - QSC, and Tangential Spherical Cube - TSC) LONGPOLE - native longitude of standard system's North Pole, default for a Zenithal system is 180 degrees LATPOLE - native latitude of the standard system's North Pole /REVERSE - if set then phi and theta are input parameters and longitude and latitude are computed. By default, longitude and latitude are input parameters and phi and theta are computed. REVISION HISTORY: Written W. Landsman December, 1994 Fixed error in finding North Pole if /ORIGIN and LONGPOLE NE 180 Xiaoyi Wu and W. Landsman, March, 1996 Fixed implementation of March 96 error, J. Thieler, April 1996 Updated to IDL V5.0 W. Landsman December 1997 Fixed determination of alpha_p if /ORIGIN and LONGPOLE EQ 180 W. Landsman May 1998 Ensure argument of ASIN() is -1<x<-1 after roundoff W. Landsman/R. Arendt June 2002 Call WCS_GETPOLE, accept LATPOLE keyword, update cylindrical coords W. Landsman June 2003 Don't attempt to rotate NaN values W. Landsman May 2004
(See $IDLUTILS_DIR/goddard/pro/astrom/wcs_rotate.pro)
WEBGET()
NAME: WEBGET() PURPOSE: Use the IDL SOCKET procedure to get data from http servers EXPLANATION: WEBGET() can access http servers - even from behind a firewall - and perform simple downloads. Currently, text and FITS files can be accessed. CALLING SEQUENCE: a=webget(URL) INPUTS: URL - scalar string giving a fully qualified url of the form 'http://server.eso.org/path/file.html'. WEBGET() can also use other valid URLs that contain 'GET' or 'POST' codes. OPTIONAL INPUT KEYWORD PARAMETERS: COPYFILE - if set to a valid filename (file must have write permission), the data contents of the web server's answer is copied to that file. HTTP10 - If set, then use the HTTP 1.0 POST - if set to a structure, the structure tags and values will be used as post variables and POST'ed to the URL. If POST is not set, the normal HTTP GET is used to retrieve the URL. /SILENT - If set, the information error messages are suppressed TIMEOUT - Integer scalar giving number of seconds to wait to connect or for data to arrive before giving up and issuing an error. Default=15 seconds OUTPUTS: A structure with the following fields: .Header - the HTTP header sent by the server .Text - The text part of the downloaded file. If the content type of the file was not of class 'text', this will be an empty string. .ImageHeader - Header file of a FITS-image. FITS images are read when the content type is 'image/fits' or 'application/octet-stream' (for dss-access). If the file is not a FITS image, this will be an empty string. .Image - The FITS image read from the server. If the file did not contain a FITS image, this will be zero. RESTRICTIONS: The mime-type recognition is extremely limited. Only the content-type is determined. Any text-file will be stored in out.Text. The only other category which can be fetched is FITS files, which will be stored in out.Image and out.ImageHeader. PROXY: If you are behind a firewall and have to access the net through a Web proxy, set the environment variable 'http_proxy' to point to your proxy server and port, e.g. 'setenv http_proxy=http://web-proxy.mpia-hd.mpg.de:3128' The URL *MUST* begin with "http://". PROCEDURE: Open a socket to the webserver and download the header. After deciding whether it is text or binary, either store the text or try to read a FITS file. EXAMPLE: IDL> a=webget('http://www.mpia.de/index.html') IDL> print,a.Text or > PointingRA=0.0 > PointingDE=30.0 > QueryURL = strcompress("http://archive.eso.org/dss/dss/image?ra="+$ > string(PointingRA)+$ > "&dec="+$ > string(PointingDE)+$ > "&x=10&y=10&Sky-Survey=DSS1&mime-type=download-fits", $ > /remove) > a=webget(QueryURL) > tvscl,a.Image > print,a.ImageHead MODIFICATION HISTORY: Written by M. Feldt, Heidelberg, Oct 2001 <mfeldt@mpia.de> Use /swap_if_little_endian keyword to SOCKET W. Landsman August 2002 Less restrictive search on Content-Type W. Landsman April 2003 Modified to work with FIRST image server- A. Barth, Nov 2006 Better recovery from errors W. Landsman April 2007 Add support for POST access J.D. Smith June 2007 Recognize "fits" image type used by SKYVIEW W. Landsman June 2007 Upgraded, partially, to HTTP 1.1 M. Perrin, July 2007 The HTTP 1.1 support is presently INCOMPLETE: virtual servers are supported, but chunked transfer encoding is not yet supported, so technically this is not fully HTTP 1.1 compliant. Added http10 keyword W. Landsman August 2007 Assume since V5.6, sockets always available W. Landsman Nov 2007 Fix problem when using proxy server W. Landsman July 2008 Fix problem with /SILENT keyword W. Landsman Jan 2009 Added check for missing Mime TYPE in CLASSANDTYPE, Zarro, December 2011 Timeout applies to connecting as well as reading, default is now 15 seconds W Landsman January 2012
(See $IDLUTILS_DIR/goddard/pro/sockets/webget.pro)
WFPC2_METRIC
NAME: WFPC2_METRIC PURPOSE: Compute the distortion in a WFPC2 image and optionally return coordinates EPLANATION: Uses the distortion solution of Anderson & King (2003, PASP, 115, 113) Pixel 424, 424 on each chip remains fixed, and other pixel positions are mapped to remove nonlinearities. If /GLOBAL is set, then all chips are put on the same reference frame where pixel 424, 424 in the WF3 chip remains fixed. CALLING SEQUENCE: WFPC2_METRIC, xin, yin, xout, yout, [ChipNum, HEADER=, /GLOBAL YEAR =, FILTER= or WFPC2_METRIC, xin, yin, a, d, HEADER=, /RAdec, /GLOBAL ] INPUTS: XIN, YIN - X,Y positions (0-799) on a WFPC2 chip in IDL convention (first pixel is 0,0), scalar or vectors OUTPUTS: XOUT, YOUT - X,Y positions in the undistorted frame, same number of elements as XIN, YIN or if /RADEC is set AA, DD - Right ascension and declination (in degrees) corresponding to the input coordinates after distortion correction. OPTIONAL INPUT: ChipNum - Integer 1, 2, 3, or 4 specifying the WFPC2 chip number 1-PC, 2-WF2, 3-WF3, 4-WF4. If not supplied, then WFPC2_METRIC will try to read the value from the DETECTOR in the FITS header. OPTIONAL INPUTS: /GLOBAL - If set, then positions are returned in a master reference frame with pixel 424,424 of WF3 remaining fixed. Thus, information concerning the interchip separation and orientation (with a weak dependence on time and filter) is incorporated. Header - FITS header with astrometry for a particular chip. If both /RADec and /Global are set, then the header must be from the WF3 chip. /RADec - If set, then astrometry information in the FITS header (which must be supplied as a keyword) is used to convert the output to Right Ascension and declination (both in degrees). FILTER - Filter name needed if /GLOBAL is set, must be either 'F300W' 'F336W', 'F439W', 'F555W' or 'F814W'; otherwise the plate scale for F555W is assumed. WFPC2_METRIC will try to read this value from the FITS header if not supplied as a keyword. YEAR - Observation year including fraction (e.g. 1998.56) needed if /GLOBAL is set. WFPC2_METRIC will try to read this value from the FITS header if not supplied as a keyword. The time correction is currently applied through the year 2002; later dates will use the year 2002 correction. EXAMPLES: (1) Find the undistorted X,Y coordinates of position 682.3,234.2 on chip 1 (the PC chip). IDL> WFPC2_METRIC, 682.3, 234.2, xout, yout, 1 ==> xout = 681.13 yout = 235.05 (2) Determine the RA and Dec of position 682.3, 234.2 on chip 1 on the WFPC2 image U2Z30201T IDL> WFPC2_READ, 'u2z30201t.c0h', im,h ;Get header for chip 1 IDL> WFPC2_METRIC, 682.3, 234.2, aa, dd, header= h,/RADec IDL> print, adstring(aa,dd,2) 05 20 53.572 -69 35 18.17 Note that a chip number did not need to be specified since its value is in the FITS header (3) As above, but now compute coordinates in the global frame, needed for example, to compute the distance between stars on two different chips. First get headers for chips 1 and 3 IDL> WFPC2_READ, 'u2z30201t.c0h', im1,h1, im3,h3,num=[1,3] IDL> WFPC2_METRIC, 682.3, 234.2, aa, dd, 1, header=h3,/RADec,/GLOBAL IDL> print, adstring(aa,dd,2) 05 20 53.513 -69 35 17.98 Note that with /GLOBAL set, that the header must be for WF3, even though coordinates are being computed for chip 1. Also note that the time and filter will be read from the FITS header. Finally, note that the coordinates given in examples (2) and (3) differ slightly, because the chip separations incorporated in the FITS headers differ slightly from those in the Anderson & King solution. PROCEDURES USED: LINTERP, SXPAR(), XYAD, YMD2DN() REVISION HISTORY: Written W. Landsman March 2003
(See $IDLUTILS_DIR/goddard/pro/astrom/wfpc2_metric.pro)
WFPC2_READ
NAME: WFPC2_READ PURPOSE: Read WFPC2 images in either FITS or STSDAS format into IDL variables. EXPLANATION: This a versatile procedure for reading Wide Field Planetary Camera 2 (WFPC2) images. One can read either multi-extension FITS or STSDAS or STSDAS converted to FITS format, and specific chip or chips. One can also read all four chips into a "batwing" mosaic-- so-called because the PC chip (chip 1) has a plate scale of 0.045", while the other three WF chips have a plate scale of 0.1" CALLING SEQUENCE: WFPC2_READ,filename,chip1,hdr1,chip2,hdr2,chip3,hdr3,chip4,hdr4 or WFPC2_READ,filename,chip,hdr, NUM_CHIP = [1,2,3,4], [/TRIM, PATH = ] or WFPC2_READ,filename,image,hdr,/BATWING INPUTS: filename - Name of FITS or STSDAS file with a stack of images from the four WF/PC-2 chips, followed by a FITS ASCII table with header parameters for each chip. If the file name extension ends in 'h' then it is assumed to be an STSDAS file. If no extension is supplied, and the file is is not found, then WFPC2_READ first tries appending a '.fits' extension, and then tries appending a '.c0h' extension. The file may als be gzip compressed (with a .gz extension) INPUT KEYWORD PARAMETERS: NUM_CHIP - Integer scalar or vector, subset of 1, 2, 3, 4, specifying particular chip numbers to read. Outputs will be in same order as specification of subset. (See Example 2.) /TRIM - If set, trim off areas with no image and re-orient so that all the chips have a common orientation suitable for insertion into "bat-wing" mosaic (no image distortion removal, however). PATH - scalar string specifying a !PATH-like list of directories in which to search for the file. Default is to look only in the current directory. /BATWING - Return a 1600 x 1600 array containing all four chips in a "bat wing" mosaic formation. This image is mainly for display purposes, since the PC chip is compressed to match the plate scale of the WF chips. In addition, a small astrometry error is introduced since chips do not have the same rotation, nor are they aligned at the integer pixel level. OUTPUTS: chipN - 800 X 800 image from chip N. If /TRIM is set then the output size is somewhat smaller (e.g. 756 x 757) headerN - Individual FITS header for chip N with correct astrometry. PROCEDURES USED: For FITS I/O: FITS_CLOSE, FITS_OPEN, FITS_READ For STSDAS I/O: EXTGRP, FTGET(), SXOPEN, SXREAD() Other procedures: CHECK_FITS, FDECOMP, FIND_WITH_DEF(), FREBIN, HEXTRACT, HROTATE, SXADDHIST, SXADDPAR, SXPAR() EXAMPLE: (1) Read all four chips of the FITS file u2ou0201t_c0f.fits IDL> wfpc2_read,'u2ou0201t_c0f',c1,h1,c2,h2,c3,h3,c4,h4 (2) Note that supplying the .fits extension is optional. Now read only chips 1 (the PC chip) and 3. Trim off portions of the arrays where there is no image. IDL> wfpc2_read,'u2ou0201t_c0f',c1,h1,c3,h3,num=[1,3],/trim (3) Note that with the /TRIM option the output chip sizes are no longer 800 x 800 but odd sizes such as 770 by 753. Now read all 4 chips into a 1600 x 1600 "batwing" mosaic IDL> wfpc2_read,'u2ou0201t_c0f',im,h,/batwing MODIFICATION HISTORY: Written by W. Landsman, Raytheon STX, for IDL V5.0 June 1998 Based on code by Robert Hill, Raytheon STX Better astrometry of PC image in "batwing" configuration, W. Landsman August 1999 Use vector call to SXADDHIST W. Landsman March 2003 Don't use EXECUTE() for V6.1 or later W. Landsman Dec 2006 Assume since V6.1 W. Landsman June 2009 Ability to read multi-extension format FITS W. Landsman May 2010 Correct header in MEF form when only reading PC chip. W.L. July 2010
(See $IDLUTILS_DIR/goddard/pro/disk_io/wfpc2_read.pro)
WHERENAN()
NAME: WHERENAN() PURPOSE: Find the indices of all big-endian NaN values in an array. OBSOLETE EXPLANATION: Find the positions of all values within an array that correspond to the big-endian NaN (not-a-number) special values. THIS PROCEDURE ONLY IDENTIFIES BIG_ENDIAN NaN VALUES. DO NOT USE IT TO IDENTIFY NaN VALUES IN GENERAL. Instead, to identify NaN values on the host machine use the FINITE() function IDL> result = where( finite(array,/NAN) ) The main purpose of this routine is to catch NaN special values written in big_endian format (e.g. FITS data) on a little endian machine prior to conversion with e.g. IEEE_TO_HOST. It was needed many years ago because VMS machines could not handle big-endian special values, but this routine is now kept only for backwards compatibility. CALLING SEQUENCE: Result = WHERENAN( ARRAY [, COUNT ] ) INPUT PARAMETERS: ARRAY = Array to test against the IEEE NaN special values. Must be of either floating point, double-precision, or complex type. OUTPUTS: The result of the function is the indices of all values of ARRAY corresponding to the IEEE NaN specification, similar to the IDL WHERE function. OPTIONAL OUTPUT PARAMETERS: COUNT = Number of values found corresponding to IEEE NaN. SIDE EFFECTS: If no NaN values are found, or if ARRAY is not of type float, double precision, or complex, then -1 is returned, and COUNT is set to 0. RESTRICTIONS: ARRAY must be of type float, double-precision, or complex. PROCEDURE: The bit patterns of the numbers being tested are compared against the IEEE NaN standard. MODIFICATION HISTORY: William Thompson, Feb. 1992. William Thompson, Oct. 1992, fixed bug regarding order of bytes on VAX machines. Converted to IDL V5.0 W. Landsman September 1997
(See $IDLUTILS_DIR/goddard/pro/misc/wherenan.pro)
WHERE_TAG
NAME: WHERE_TAG PURPOSE: Like WHERE but works on structure tag names EXPLANATION: Obtain subscripts of elements in structure array for which a particular Tag has values in a range or matching specified values. Like the WHERE function but for use with structures CATEGORY: Structures CALLING SEQUENCE: w = where_tag( struct, [ Nfound, TAG_NAME=, TAG_NUMBER = , RANGE =, VALUES =, RANGE =, ISELECT =, /NOPRINT ] INPUTS: Struct = structure array to search. INPUT KEYWORDS: User *must* specify (1) TAG_NAME or TAG_NUMBER to search, and (2) the VALUES or RANGE to search on TAG_NAME = Scalar string specifying Tag Name TAG_NUMBER = otherwise give the Tag Number, RANGE = [min,max] range to search for in Struct, VALUES = one or array of numbers to match for in Struct, ISELECT= specifies indices to select only part of structure array, (use it to recycle subscripts from previous searches). /NOPRINT = suppress informational messages about nothing found. OUTPUTS: Nfound = # of occurences found. RESULT: Function returns subscripts (indices) to desired elements. EXAMPLES: Suppose STR is a structure with tags CAT_NO:indgen(10), and NAME:strarr(10). Find the indices where STR.CAT_NO is between 3 and 5. IDL> print, WHERE_TAG( str, TAG_NAME = 'CAT_NO', VALUE = [3,4,5] ) ;or IDL> print, WHERE_TAG( str, TAG_NUM = 0, RANGE = [3,5]) PROCEDURE: Get tag number and apply the WHERE function appropriately. MODIFICATION HISTORY: written 1990 Frank Varosi STX @ NASA/GSFC Stop printing "Tag <xxx> not found" with /NOPRINT, CD Pike 8-Jun-93 Use STRJOIN for display W.L. July 2009
(See $IDLUTILS_DIR/goddard/pro/structure/where_tag.pro)
WINDOWAVAILABLE
NAME: WindowAvailable PURPOSE: This function returns a 1 if the specified window index number is currently open or available. It returns a 0 if the window is currently closed or unavailable. AUTHOR: FANNING SOFTWARE CONSULTING David Fanning, Ph.D. 1645 Sheely Drive Fort Collins, CO 80526 USA Phone: 970-221-0438 E-mail: david@idlcoyote.com Coyote's Guide to IDL Programming: http://www.idlcoyote.com CATEGORY: Utilities CALLING SEQUENCE: available = WindowAvaiable(windowIndexNumber) INPUTS: windowIndexNumber: The window index number of the window you wish to know is available or not. KEYWORDS: None. NOTES: The window vector obtained from the DEVICE command is not always the same length. It is normally (on my machine) 65 elements long, but can be much longer if you have lots of IDL windows open (by calling PickColorName, for example). But if no windows with index numbers greater than 65 are open, IDL shinks the larger vector to the smaller one as part of its housekeeping operations, which means it happens on their timetable, not yours. This can result in the user having "stale" index numbers greater than 65, but no larger vector to check them against. I have modified the code to return a 0 in this case, assuming that whatever window your index number points to is long gone. I have not experience any ill effects by doing this, but I STRONGLY advice you to ALWAYS know what window you are drawing into when you issue a graphics command. MODIFICATION HISTORY: Written by David W. Fanning, June 2005. Modified to return 0 if the window index number is larger than the number of elements in the WINDOW_STATE array. 25 June 2008. DWF.
(See $IDLUTILS_DIR/goddard/pro/coyote/windowavailable.pro)
WRITEFITS
NAME: WRITEFITS PURPOSE: Write IDL array and header variables to a disk FITS file. EXPLANATION: A minimal FITS header is created if not supplied. WRITEFITS works for all types of FITS files except random groups CALLING SEQUENCE: WRITEFITS, filename, data [, header, /APPEND, /COMPRESS, /CHECKSUM] INPUTS: FILENAME = String containing the name of the file to be written. DATA = Image array to be written to FITS file. If DATA is undefined or a scalar, then only the FITS header (which must have NAXIS = 0) will be written to disk OPTIONAL INPUT: HEADER = String array containing the header for the FITS file. If variable HEADER is not given, the program will generate a minimal FITS header. HEAP - A byte array giving the heap area following, e.g. a variable length binary table OPTIONAL INPUT KEYWORD: /APPEND - If this keyword is set then the supplied header and data array are assumed to be an extension and are appended onto the end of an existing FITS file. If the file does not exist, then WRITEFITS will create one with a minimal primary header (and /EXTEND keyword) and then append the supplied extension header and array. Note that the primary header in an existing file must already have an EXTEND keyword to indicate the presence of an FITS extension. /COMPRESS - If this keyword is set, then the FITS file is written as a gzip compressed file. An extension '.gz' is appended to to the file name if it does not already exist. The /COMPRESS option is incompatible with the /APPEND option. /Checksum - If set, then the CHECKSUM keywords to monitor data integrity will be included in the FITS header. For more info, see http://heasarc.gsfc.nasa.gov/docs/heasarc/fits/checksum.html By default, checksum keywords will updated if they are already in the FITS header. NaNvalue - Value in the data array which represents missing pixels. This keyword is only used when missing pixels are not represented by NaN values in the input array. OUTPUTS: None RESTRICTIONS: (1) It recommended that BSCALE and BZERO not be used (or set equal to 1. and 0) except with integer data (2) WRITEFITS will remove any group parameters from the FITS header (3) As of Feb 2008, WRITEFITS no longer requires the primary header of a FITS file with extension contain the EXTEND keyword, consistent with the draft revised FITS standard. A warning is still given. http://fits.gsfc.nasa.gov/fits_draft.html EXAMPLE: Write a randomn 50 x 50 array as a FITS file creating a minimal header. IDL> im = randomn(seed, 50, 50) ;Create array IDL> writefits, 'test', im ;Write to a FITS file "test" PROCEDURES USED: CHECK_FITS, FITS_ADD_CHECKSUM, MKHDR, MRD_HREAD, SXDELPAR, SXADDPAR, SXPAR() MODIFICATION HISTORY: WRITTEN, Jim Wofford, January, 29 1989 Added call to IS_IEEE_BIG() W. Landsman Apr 96 Make sure SIMPLE is written in first line of header W. Landsman Jun 97 Use SYSTIME() instead of !STIME W. Landsman July 97 Create a default image extension header if needed W. Landsman June 98 Write unsigned data types W. Landsman December 1999 Update for IDL V5.3, add /COMPRESS keyword W. Landsman February 2000 Correct BZERO value for unsigned data W. Landsman July 2000 Eliminate duplication of input array if possible W. Landsman April 2001 Use FILE_SEARCH for V5.5 or later W. Landsman April 2002 Create the file if not already present and /APPEND is set W. Landsman September 2002 Proper call to MRD_HREAD if /APPEND is set W. Landsman December 2002 Added /CHECKSUM keyword W. Landsman December 2002 Restored NANvalue keyword, William Thompson, October 2003 Write BZERO in beginning of header for unsigned integers WL April 2004 Added ability to write heap array WL October 2004 Correct checksum if writing heap array WL November 2004 Assume since V5.5, no VMS support, use file_search() WL September 2006 Set nbytes variable to LONG64 for very large files WL May 2007 Update CHECKSUM keywords if already present WL Oct 2007 EXTEND keyword no longer required in FITS files with extensions WL Feb 2008 Bug fix when filename ends with '.gz' and COMPRESS is used, the output file must be compressed S. Koposov June 2008 Use V6.0 notation WL Feb 2011
(See $IDLUTILS_DIR/goddard/pro/fits/writefits.pro)
XDISPSTR
NAME: XDISPSTR PURPOSE: Display a string array in a text widget with a simple search capability. EXPLANATION: Similar to the IDL XDISPLAYFILE procedure but includes a search capbility. CALLING SEQUENCE: xdispstr, array, [/BLOCK, WIDTH= , HEIGHT=, TITLE=, GROUP_LEADER=, FONT= TOP_LINE = ] INPUT PARAMETER: array - String array (.e.g. FITS header) to be displayed OPTIONAL INPUT KEYWORD PARAMETERS: block - Set to 1 to make widget blocking. Default = block=0 width, height - Scalars giving number of characters per line, number of lines. Default = 80x24 title - Scalar Title for outermost base widget. group_leader - Group leader for top level base. top_line - first line in the string array to display (default is 0) font - Display font for text. MODIFICATION HISTORY: Written by R. S. Hill, RITSS, 17 Nov 2000 Use cumulative keyword to TOTAL W. Landsman May 2006
(See $IDLUTILS_DIR/goddard/pro/misc/xdispstr.pro)
XMEDSKY
NAME: XMEDSKY PURPOSE: Subtract sky from an image as a 1-D function of X EXPLANATION: This procedure is designed to remove the sky from slitless spectra. The sky is assumed to vary with wavelength (along a row) but not with position (along a column). The sky is computed as the column-by-column median of pixels within 3 sigma of the image global median. This procedure is called by the cosmic ray rejection routine CR_REJECT CALLING SEQUENCE: XMEDSKY, Image, Bkg, [ CLIP=[x0, x1, y0, y1], NSIG= ] INPUTS: Image: Input image for which sky vector is to be computed. INPUT KEYWORD PARAMETERS: CLIP: [x0, x1, y0, y1]: region of image to be used for all statistical computations. Default is to use the entire image. For STIS 1024 x 512 slitless spectra, the suggested value is CLIP = [32,1023,12,499] NSIG: Positive scalar giving the number of sigma a pixel must be above the global median to be reject. Default is 3 sigma. OUTPUT PARAMETER: Bkg: Vector of sky values. ; MODIFICATION HISTORY: Written by: R. S. Hill, Hughes STX, 20 Oct. 1997 Converted to V5.0, use STDDEV() W. Landsman June 1998 Check for valid WHERE, added NSIG keyword W. Landsman December 2000 Assume since V5.1 so always use STDDEV W. Landsman Feb 2004 Assume since V5.6 use DIMEN keyword to MEDIAN W. Landsman Jan 2008
(See $IDLUTILS_DIR/goddard/pro/image/xmedsky.pro)
XY2AD
NAME: XY2AD PURPOSE: Compute R.A. and Dec from X and Y and a FITS astrometry structure EXPLANATION: The astrometry structure must first be extracted by EXTAST from a FITS header. The offset from the reference pixel is computed and the CD matrix is applied. If distortion is present then this is corrected. If a WCS projection (Calabretta & Greisen 2002, A&A, 395, 1077) is present, then the procedure WCSXY2SPH is used to compute astronomical coordinates. Angles are returned in degrees. XY2AD is meant to be used internal to other procedures. For interactive purposes use XYAD. CALLING SEQUENCE: XY2AD, x, y, astr, a, d INPUTS: X - row position in pixels, scalar or vector Y - column position in pixels, scalar or vector X and Y should be in the standard IDL convention (first pixel is 0), and not the FITS convention (first pixel is 1). 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 physical increment at reference pixel .CRPIX - 2 element vector giving X and Y coordinates of reference pixel (def = NAXIS/2) .CRVAL - 2 element vector giving R.A. and DEC of reference pixel in DEGREES .CTYPE - 2 element vector giving projection types .LONGPOLE - scalar longitude of north pole .LATPOLE - scalar giving native latitude of the celestial pole .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 distortion parameters OUTPUT: A - R.A. in DEGREES, same number of elements as X and Y D - Dec. in DEGREES, same number of elements as X and Y RESTRICTIONS: Note that all angles are in degrees, including CD and CRVAL Also note that the CRPIX keyword assumes an FORTRAN type array beginning at (1,1), while X and Y give the IDL position beginning at (0,0). No parameter checking is performed. 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(), WCSXY2SPH REVISION HISTORY: Written by R. Cornett, SASC Tech., 4/7/86 Converted to IDL by B. Boothman, SASC Tech., 4/21/86 Perform CD multiplication in degrees W. Landsman Dec 1994 Understand reversed X,Y (X-Dec, Y-RA) axes, W. Landsman October 1998 Consistent conversion between CROTA and CD matrix W. Landsman Oct. 2000 No special case for tangent projection W. Landsman June 2003 Work for non-WCS coordinate transformations W. Landsman Oct 2004 Use CRVAL reference point for non-WCS transformation W.L. March 2007 Use post V6.0 notation W.L. July 2009
(See $IDLUTILS_DIR/goddard/pro/astrom/xy2ad.pro)
XYAD
NAME: XYAD PURPOSE: Use a FITS header to convert pixel (X,Y) to world coordinates EXPLANATION: Use astrometry in a FITS image header to compute world coordinates in decimal degrees from X and Y. If spherical coordinates (Calabretta & Greisen 2002, A&A, 395, 1077) are not present, then XYAD will still perform the transformation specified by the CD, CRVAL, and CRPIX keywords. CALLING SEQUENCE: XYAD, HDR ;Prompt for X and Y positions XYAD, HDR, X, Y, A, D, [ /PRINT, /Galactic, /Celestial, /Ecliptic, ALT =, PRECISION=] INPUTS: HDR - FITS Image header containing astrometry info OPTIONAL INPUTS: X - row position in pixels, scalar or vector Y - column position in pixels, scalar or vector X and Y should be in IDL convention, (first pixel is (0,0) where the integral value corresponds to the center of the pixel.) OPTIONAL OUTPUT: A - Output longitude in decimal DEGREES (for spherical coordinates), same number of elements as X and Y. For celestial coordinates, this is the Right ascension. D - Output latitude in decimal DEGREES. For celestial coordinates, this is the declination. OPTIONAL KEYWORD INPUT: 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. PRECISION - Integer scalar (0-4) specifying the number of digits displayed after the decimal of declination. The RA is automatically one digit more. See ADSTRING() for more info. Default value is 1, and the keyword is ignored if results are not displayed at the terminal /PRINT - If this keyword is set and non-zero, then results are displayed at the terminal.in both decimal and sexigesimal notation. The default for XYAD is to return the coordinate system present in in the FITS header. However, the following mutually exclusive keywords can be used to convert to a particular coordinate system: /CELESTIAL - Output is Right Ascension and declination /ECLIPTIC - Output is Ecliptic longitude and latitude /GALACTIC - Output is Galactic longitude and latitude OPERATIONAL NOTES: If less than 5 parameters are supplied, or if the /PRINT keyword is set, then the computed astronomical coordinates are displayed at the terminal. If this procedure is to be used repeatedly with the same header, then it would be faster to use XY2AD. EXAMPLE: A FITS header, hdr, contains astrometric information in celestial coordinates. Find the RA and Dec corresponding to position X=23.3 Y = 100.2 on an image IDL> xyad, hdr, 23.3, 100.2 ;Displays results at the terminal To display the results in Galactic coordinates IDL> xyad, hdr, 23.3, 100.2, /GALACTIC PROCEDURES CALLED ADSTRING(), EULER, EXTAST, GSSSXYAD, REPCHR(), XY2AD REVISION HISTORY: W. Landsman STX Jan, 1988 Use astrometry structure W. Landsman Jan, 1994 Recognize GSSS header W. Landsman June, 1994 Changed ADSTRING output format W. Landsman September 1995 Converted to IDL V5.0 W. Landsman September 1997 Use vector call to ADSTRING() W. Landsman February 2000 Added ALT input keyword W. Landsman June 2003 Add precision keyword W. Landsman February 2004 Fix display if 'RA','DEC' reversed in CTYPE W. Landsman Feb. 2004 Handle display of NaN values W. Landsman May 2004 Work for non-spherical coordinate transformations W. Landsman Oct 2004 Fix output display units if ALT keyword used W. Landsman March 2005 More informative error message if no astrometry present W.L Nov 2007 Fix display when no equinox in header W.L. Dec 2007 Fix header display for noncelestial coords W.L. Jan 2008
(See $IDLUTILS_DIR/goddard/pro/astrom/xyad.pro)
XYXY
NAME: XYXY PURPOSE: To use a pair of headers to convert X/Y positions from one frame to another. CALLING SEQUENCE: XYXY, hdra, hdrb, xa, ya, [ xb, yb ] INPUTS: hdra - The header containing the plate solution describing the frame of reference being converted FROM. hdra - The header containing the plate solution describing the frame of reference being converted TO. xa - A scalar or vector containing the x coordinate(s) to convert. ya - A scalar or vector containing the y coordinate(s) to convert. Must have the same number of elements as 'xa'. OUTPUTS: xb - The converted x coordinate(s). If this parameter is not specified, it is returned through 'xa'. yb - The converted y coordinate(s). If this parameter is not specified, it is returned through 'ya'. PROCEDURE: The procedures 'xyad' and 'adxy' are used to perform the conversion. The equinoxes of each header are checked with "get_equinox" to make sure that they are identical, and "precess" is used if they are not. HEULER used if the headers have a different coordinate system (e.g. Celestial, Galactic, Ecliptic) Note that all X,Y coordinates are in the IDL convention (starting with 0,0) and not the FITS convention (first pixel is 1,1) PROCEDURES USED: GET_EQUINOX(), EXTAST, XYAD, ADXY, PRECESS, HEULER MODIFICATION HISTORY: Written by Michael R. Greason, Hughes-STX, 13 April 1992. Updated to use ASTROMETRY structures. J.D.Offenberg, HSTX, Jan 1993 Converted to IDL V5.0 W. Landsman September 1997 Check coordinate system J. Ballet/ W. Landsman April 2004
(See $IDLUTILS_DIR/goddard/pro/astrom/xyxy.pro)
XYZ
NAME: XYZ PURPOSE: Calculate geocentric X,Y, and Z and velocity coordinates of the Sun EXPLANATION: Calculates geocentric X,Y, and Z vectors and velocity coordinates (dx, dy and dz) of the Sun. (The positive X axis is directed towards the equinox, the y-axis, towards the point on the equator at right ascension 6h, and the z axis toward the north pole of the equator). Typical position accuracy is <1e-4 AU (15000 km). CALLING SEQUENCE: XYZ, date, x, y, z, [ xvel, yvel, zvel, EQUINOX = ] INPUT: date: reduced julian date (=JD - 2400000), scalar or vector OUTPUT: x,y,z: scalars or vectors giving heliocentric rectangular coordinates (in A.U) for each date supplied. Note that sqrt(x^2 + y^2 + z^2) gives the Earth-Sun distance for the given date. xvel, yvel, zvel: velocity vectors corresponding to X, Y and Z. OPTIONAL KEYWORD INPUT: EQUINOX: equinox of output. Default is 1950. EXAMPLE: What were the rectangular coordinates and velocities of the Sun on Jan 22, 1999 0h UT (= JD 2451200.5) in J2000 coords? NOTE: Astronomical Almanac (AA) is in TDT, so add 64 seconds to UT to convert. IDL> xyz,51200.5+64.d/86400.d,x,y,z,xv,yv,zv,equinox = 2000 Compare to Astronomical Almanac (1999 page C20) X (AU) Y (AU) Z (AU) XYZ: 0.51456871 -0.76963263 -0.33376880 AA: 0.51453130 -0.7697110 -0.3337152 abs(err): 0.00003739 0.00007839 0.00005360 abs(err) (km): 5609 11759 8040 NOTE: Velocities in AA are for Earth/Moon barycenter (a very minor offset) see AA 1999 page E3 X VEL (AU/DAY) YVEL (AU/DAY) Z VEL (AU/DAY) XYZ: -0.014947268 -0.0083148382 -0.0036068577 AA: -0.01494574 -0.00831185 -0.00360365 abs(err): 0.000001583 0.0000029886 0.0000032077 abs(err) (km/sec): 0.00265 0.00519 0.00557 PROCEDURE CALLS: PRECESS_XYZ REVISION HISTORY Original algorithm from Almanac for Computers, Doggett et al. USNO 1978 Adapted from the book Astronomical Photometry by A. Henden Written W. Landsman STX June 1989 Correct error in X coefficient W. Landsman HSTX January 1995 Added velocities, more terms to positions and EQUINOX keyword, some minor adjustments to calculations P. Plait/ACC March 24, 1999
(See $IDLUTILS_DIR/goddard/pro/astro/xyz.pro)
YDN2MD
NAME: YDN2MD PURPOSE: Convert from year and day number of year to month and day of month. CALLING SEQUENCE: YDN2MD,yr,dy,m,d INPUTS: yr = 4 digit year (like 1988), integer scalar dy = day number in year (like 310), integer scalar or vector OUTPUTS: m = month number (1-12, e.g. 11 = Nov) d = day of month (like 5). Note: On error returns m = d = -1. EXAMPLE: Find the month/day of days 155 and 255 in the year 2001 IDL> ydn2md, 2001, [155,255], m, d ==> m = [6,9] & d = [4,12] ; = June 4 and September 12 MODIFICATION HISTORY: Adapted from Johns Hopkins University/Applied Physics Laboratory Update to use VALUE_LOCATE, W. Landsman January 2001
(See $IDLUTILS_DIR/goddard/pro/astro/ydn2md.pro)
YMD2DN
NAME: YMD2DN PURPOSE: Convert from year, month, day to day number of year. CATEGORY: CALLING SEQUENCE: dy = ymd2dn(yr,m,d) INPUTS: yr = year (like 1988). scalar or vector m = month number (like 11 = Nov). scalar or vector d = day of month (like 5). scalar or vector KEYWORD PARAMETERS: OUTPUTS: dy = day number in year (like 310). out COMMON BLOCKS: NOTES: MODIFICATION HISTORY: Written by R. Sterner, 20 June, 1985. Johns Hopkins University Applied Physics Laboratory. RES 18 Sep, 1989 --- converted to SUN R. Sterner, 1997 Feb 3 --- Made work for arrays. Copyright (C) 1985, 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. Converted to IDL V5.0 W. Landsman 2-Jan-1998
(See $IDLUTILS_DIR/goddard/pro/jhuapl/ymd2dn.pro)
ZANG
NAME: ZANG PURPOSE: Determine the angular size of an object as a function of redshift EXPLANATION: Requires an input size in kpc and returns an angular size in arc seconds Default cosmology has a Hubble constant of 70 km/s/Mpc, Omega (matter) =0.3 and a normalized cosmological constant Lambda = 0.7; however these values can be changed with appropriate keywords. CALLING SEQUENCE: angsiz = zang( dl, [ z, H0 =, Omega_m =, Lambda0 = , q0 = , k =, /SILENT] ) INPUTS: dl - linear size of the object *in kpc*, non-negative scalar or vector z - redshift of object, postive scalar or vector Either dl and z must have the same number of elements, or at least one of them must be a vector. OPTIONAL INPUT KEYWORDS H0 - Hubble constant in km/s/Mpc, default is 70 No more than two of the following four parameters should be specified. None of them need be specified, default values are given k - curvature constant, normalized to the closure density. Default is 0, indicating a flat universe Omega_m - Matter density, normalized to the closure density, default is 0.3. Must be non-negative Lambda0 - Cosmological constant, normalized to the closure density, default is 0.7 q0 - Deceleration parameter, numeric scalar = -R*(R'')/(R')^2, default is -0.55 Note that Omega_m + lambda0 + k = 1 and q0 = 0.5*omega_m - lambda0 OUTPUT: angsiz - Angular size of the object at the given redshift in arc seconds EXAMPLE: (1) What would be the angular size of galaxy of diameter 50 kpc at a redshift of 1.5 in an open universe with Lambda = 0 and Omega (matter) = 0.3. Assume the default Hubble constant value of 70 km/s/Mpc. IDL> print,zang(50,1.5, Lambda = 0,omega_m = 0.3) ====> 6.58 arc seconds (2) Now plot the angular size of a 50 kpc diameter galaxy as a function of redshift for the default cosmology (Lambda = 0.7, Omega_m=0.3) up to z = 0.5 IDL> z = findgen(50)/10. + 0.1 ;Angular size undefined at z = 0 IDL> plot,z,zang(50,z),xtit='z',ytit='Angular Size (")' NOTES: This procedure underwent a major revision in April 2000 to allow for a cosmological constant, ***including a change of the calling sequence*** Be sure to supply the input linear size dl in units of kpc. PROCEDURES CALLED: LUMDIST() -- Calculates the luminosity distance REVISION HISTORY: Written J. Hill STX July, 1988 Converted to IDL V5.0 W. Landsman September 1997 Major rewrite to call LUMDIST function W. Landsman April 2000
(See $IDLUTILS_DIR/goddard/pro/astro/zang.pro)
ZBRENT
NAME: ZBRENT PURPOSE: Find the zero of a 1-D function up to specified tolerance. EXPLANTION: This routine assumes that the function is known to have a zero. Adapted from procedure of the same name in "Numerical Recipes" by Press et al. (1992), Section 9.3 CALLING: x_zero = ZBRENT( x1, x2, FUNC_NAME="name", MaX_Iter=, Tolerance=, _EXTRA = ) INPUTS: x1, x2 = scalars, 2 points which bracket location of function zero, that is, F(x1) < 0 < F(x2). Note: computations are performed with same precision (single/double) as the inputs and user supplied function. REQUIRED INPUT KEYWORD: FUNC_NAME = function name (string) Calling mechanism should be: F = func_name( px ) where: px = scalar independent variable, input. F = scalar value of function at px, should be same precision (single/double) as input. OPTIONAL INPUT KEYWORDS: MAX_ITER = maximum allowed number iterations, default=100. TOLERANCE = desired accuracy of minimum location, default = 1.e-3. Any other keywords are passed directly to the user-supplied function via the _EXTRA facility. OUTPUTS: Returns the location of zero, with accuracy of specified tolerance. PROCEDURE: Brent's method to find zero of a function by using bracketing, bisection, and inverse quadratic interpolation, EXAMPLE: Find the root of the COSINE function between 1. and 2. radians IDL> print, zbrent( 1, 2, FUNC = 'COS') and the result will be !PI/2 within the specified tolerance MODIFICATION HISTORY: Written, Frank Varosi NASA/GSFC 1992. FV.1994, mod to check for single/double prec. and set zeps accordingly. Use MACHAR() to define machine precision W. Landsman September 2002 Added _EXTRA keyword W. Landsman December 2011 Need to check whether user function accepts keywords W.L. Jan 2012
(See $IDLUTILS_DIR/goddard/pro/math/zbrent.pro)
ZENPOS
NAME: ZENPOS PURPOSE: Return the zenith RA and Dec in radians for a given Julian date. CALLING SEQUENCE: ZENPOS, Date, Ra, Dec INPUT: Date The Julian date, in double precision, of the date and time for which the zenith position is desired, scalar or vector. OUTPUTS: Ra The right ascension in RADIANS of the zenith. Dec The declination in RADIANS of the zenith. PROCEDURE: The local sidereal time is computed; this is the RA of the zenith. It and the observatories latitude (corresponding to the Dec.) are converted to radians and returned as the zenith direction. PROMPTS: ZENPOS will prompt for the following 3 parameters if they are not defined in the common block SITE (see below) LAT,LNG - north latitude and east longitude of the desired location in DEGREES TZONE - Time Zone (in hours) of the desired location (e.g. 4 = EDT, 5 = EST) COMMON BLOCKS: SITE - This common block should contain the three scalars LAT, LNG and TZONE PROCEDURE CALLS: CT2LST - Convert to Local Mean Sidereal Time MODIFICATION HISTORY: Written by Michael R. Greason, STX, 14 October 1988. Converted to IDL V5.0 W. Landsman September 1997 Update documentation, longitude now *east* of Greenwich W.L. July 2000
(See $IDLUTILS_DIR/goddard/pro/astro/zenpos.pro)
ZOOM_XY
NAME: ZOOM_XY PURPOSE: Converts X, Y position on the image array to the the X,Y position in the current window. (These positions are identical only for an unroamed, zoomed image with with pixel (0,0) of the image placed at position (0,0) on the TV.) CALLING SEQUENCE: ZOOM_XY, Xim,Yim,Xtv,Ytv, [ OFFSET =, ZOOM = ] INPUTS: XIM - Scalar or vector giving X position(s) as read on the image display (e.g. with CURSOR,XIM,YIM,/DEVICE) YIM - Like XTV but giving Y position(s) as read on the image display. If only 2 parameters are supplied then XIM and YIM will be modfied on output to contain the converted coordinates. OPTIONAL KEYWORD INPUT: 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. OUTPUTS: XTV,YTV - REAL*4 X and Y coordinates of the image corresponding to the cursor position on the TV display. Same number of elements as XIM, YIM. COMMON BLOCKS: If present, ZOOM_XY will use the TV and IMAGE common blocks which are defined in the MOUSSE software system (see http://archive.stsci.edu/uit/analysis.html) If the user is not using the MOUSSE software (which keeps track of the offset and zoom in each window) then the common blocks are ignored. NOTES: The integer value of a pixel is assumed to refer to the *center* of a pixel. REVISON HISTORY: Adapted from MOUSSE procedure of the same name W. Landsman HSTX Mar 1996 Converted to IDL V5.0 W. Landsman September 1997 Properly include ZOOM keyword W. Landsman May 2000 Put back common blocks for MOUSSE compatibility September 2004
(See $IDLUTILS_DIR/goddard/pro/tv/zoom_xy.pro)
ZPARCHECK
NAME: ZPARCHECK PURPOSE: Routine to check user parameters to a procedure CALLING SEQUENCE: zparcheck, progname, parameter, parnum, types, dimens, [ message ] INPUTS: progname - scalar string name of calling procedure parameter - parameter passed to the routine parnum - integer parameter number types - integer scalar or vector of valid types 1 - byte 2 - integer 3 - int*4 4 - real*4 5 - real*8 6 - complex 7 - string 8 - structure 9 - double complex 10 - pointer 11 - object ref 12 - Unsigned integer 13 - unsigned int*4 14 - int*8 15 - Unsigned int*8 dimens - integer scalar or vector giving number of allowed dimensions. OPTIONAL INPUT: message - string message describing the parameter to be printed if an error is found OUTPUTS: none EXAMPLE: IDL> zparcheck, 'HREBIN', hdr, 2, 7, 1, 'FITS Image Header' This example checks whether the parameter 'hdr' is of type string (=7) and is a vector (1 dimension). If either of these tests fail, a message will be printed "Parameter 2 (FITS Image Header) is undefined" "Valid dimensions are 1" "Valid types are string" SIDE EFFECTS: If an error in the parameter is a message is printed a RETALL issued HISTORY version 1 D. Lindler Dec. 86 documentation updated. M. Greason, May 1990. Recognize double complex datatype W. Landsman September 1995 Converted to IDL V5.0 W. Landsman September 1997 Check for new data types (e.g. unsigned) W. Landsman February 2000 Print a traceback if an error occurs W. Landsman Aug 2011
(See $IDLUTILS_DIR/goddard/pro/misc/zparcheck.pro)