IDL Help for SDSSIDL

This page was created by the IDL library routine make_html_help. For more information on this routine, refer to the IDL Online Help Navigator or type:

     ? make_html_help

at the IDL command line prompt.

Last modified: Thu Apr 10 13:43:10 2008.


List of Routines


Routine Descriptions

ADD_ARRVAL

[Next Routine] [List of Routines]

 NAME:
    ADD_ARRVAL
       
 PURPOSE:
    Add an element to an array. If input array is undefined, 
    set it equal to the new value.

 CALLING SEQUENCE:
    add_arrval, newval, array, front=front

 INPUTS: 
    newval: the new value to be added

 KEYWORD PARAMETERS:
    /front: If set then put the new value at the front of the array, else
       put at end.

 SIDE EFFECTS: 
    array is created or augmented.       

 REVISION HISTORY:
    14-NOV-2000 Erin Scott Sheldon UofMich
       
                                      

(See pro/util//add_arrval.pro)


ADD_LABELS

[Previous Routine] [Next Routine] [List of Routines]

 NAME:
    ADD_LABELS
       
 PURPOSE:
    Add labels to an axis.  Ticks are not added, so it is recommended
     to only label existing ticks.

 CALLING SEQUENCE:
    add_labels, xtickv=xtickv, ytickv=ytickv, xaxis=xaxis, yaxis=yaxis

 OPTIONAL INPUTS:
    xtickv=xtickv: the x-values to label. See plotting keywords in idl online help.
    ytickv=ytickv: the y-values to label. 
    ztickv=ztickv: the y-values to label. 
    xaxis=xaxix: which x-axis? See plotting keywords in idl online help.
    yaxis=yaxis: which y-axis?
    zaxis=zaxis: which z-axis?
    
 KEYWORD PARAMETERS:
    NONE
       
 OUTPUTS: 
    Plots labels on current device.

 OPTIONAL OUTPUTS:
    NONE

 CALLED ROUTINES:
    AXIS
 
 PROCEDURE: 
    run AXIS procedure, sending [XYZ]tickv and [XYZ]ticks keywords
	

 REVISION HISTORY:
    Creation:
      7-FEB-2002, Erin Scott Sheldon  UofMIch
       
                                      

(See pro/plotting//add_labels.pro)


ADD_TITLE

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  add_title

 PURPOSE:
  Add a title to a plot. Designed to create a single title for an
  axis even when multiple plot regions are in use (e.g. with !p.multi
  settings).

 CATEGORY:
  Plotting

 CALLING SEQUENCE:
  add_title, type, text, offset=, _extra=

 INPUTS:
  type: Title type.  Currently supported:
          'title','xtitle','ytitle'

 KEYWORD PARAMETERS:
   offset=: Offset of the text with respect to the default position. 
   _extra=: Extra plotting keywords

 EXAMPLE:
  !p.multi = [0,2,2]
  .... bunch of plots....
  add_title, 'ytitle', 'Rest Frame g-r'

 MODIFICATION HISTORY:
  Created from code in MPLOT.pro 2007-01-04, Erin Sheldon, NYU

(See pro/plotting//add_title.pro)


AETA_LAMBDA

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
   aeta_lambda

 PURPOSE:
   Calculate the conformal time to redshift z in a flat universe given omegam.
   Uses 4th order polynomial approximation 
    see Pen, U., 1999, ApJ Supplement, 20, 49.
    For z between 0.2 and 1.0 the error is about .4% 
    (Exact for omega_matter = 1.0)

 CALLING SEQUENCE:
   aeta = aeta_lambda(z, omegamat)
 
 MODIFICATION HISTORY
   Author: Erin Sheldon, UChicago
   First documented, 1-August-2005.   

(See pro/astro//aeta_lambda.pro)


ALTER_TAGS()

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  ALTER_TAGS()

 PURPOSE:
  Alter the tag definitions in a structure.  A second structure is input and
  tags from that structure that match the original struct are altered to the
  new data type.  The original struct is copied into the new using the
  struct_assign builtin procedure with the /nozero option.  Thus if the
  data type is compatible with the old one, the type is converted and 
  copied in, otherwise they are left as defined.

 CALLING SEQUENCE:
  newstruct = alter_tags(struct, defstruct)

 INPUTS:
  struct: The original structure.  May be an array.
  defstruct: A struct defining the tags.

 OUTPUTS:
  A new structure with tags altered.

 EXAMPLE:
  ; Convert a tag from int to float.
  struct = {a:35, b:66}
  newstruct = alter_tags(struct, {a:0.0})
  print,newstruct.a
    35.0000

 MODIFICATION HISTORY:
  Early 2006: Erin Sheldon, NYU

(See pro/struct//alter_tags.pro)


ANGDIST

[Previous Routine] [Next Routine] [List of Routines]

 NAME: 
    ANGDIST
       
 PURPOSE: 
    Calculate angular diameter distance between zmin and zmax in a lambda cosmology

 CALLING SEQUENCE: 
    result = angdist(zmin, zmax, omega_m=, omega_l=, omega_k=, flat=, h=, npts=, Dl=)
 INPUTS:  
   zmin, zmax: The min and max redshifts

 OPTIONAL INPUTS:
   omega_m, omega_l, omega_k: The omegas. Defaults (0.27, 0.73, 0.0)
   flat: Default is 1 (true)
   h: Default 1.0
   npts: # points for Ez integration, default 5 good to 1.e-7

 OUTPUTS: 
    Distance in MPC/h

 REVISION HISTORY: 
   Author: Erin Scott Sheldon 2/24/99
   Converted to lambda cosmology with full integration.  Uses cosmology IDL class.
       2007-04-28, Erin Sheldon, NYU
                                      

(See pro/astro//angdist.pro)


ANGDIST_LAMBDA

[Previous Routine] [Next Routine] [List of Routines]

 NAME: 
    ANGDIST_LAMBDA
       
 PURPOSE: 
    calculate angular diameter from zmin to zmax in flat lambda universe
    Uses 4th order polynomial approximation 
    see Pen, U., 1999, ApJ Supplement, 20, 49.
    For z between 0.2 and 1.0 the error is about .4% 
    (Exact for omega_matter = 1.0)
	

 CALLING SEQUENCE: 
    result = angdist(zmax, [zmin, h=h, omegamat=omegamat, dlum=dlum, 
                     verbose=verbose])
      
 INPUTS:  
    z: redshift

 OPTIONAL INPUTS: 
    h: hubble parameter       default is 1.0
    omegamat:  omega matter   default is .3

 OPTIONAL OUTPUTS:
    dlum: the luminosity distance.

 OPTIONAL KEYWORDS: 
    /verbose:  print distances.
       
 OUTPUTS: distance in megaparsecs.

 REVISION HISTORY: 
    Author: Erin Scott Sheldon 2/24/99                                      

(See pro/astro//angdist_lambda.pro)


APPLY_PIXEL_MASK

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  APPLY_PIXEL_MASK


 PURPOSE:
  Test input clambda,ceta points against Ryan Scranton's SDSSPix masks.  Calls
  a version of Ryan's mask code, linked into IDL via a Dynamically Loadable
  Module (DLM).  Additional C modules were added to Ryan's code to check for
  edges and holes.


 CATEGORY:
  SDSS specific routine.


 CALLING SEQUENCE:
    apply_pixel_mask, clambda, ceta, masked, unmasked, maskflags, 
                      maskfile=, $
                      /basic, /simple, $
                      /bound, /combined, $
                      $
                      maxangle=, $
                      /twoquad, status=


 INPUTS:
  clambda, ceta: SDSS survey coordinates (corrected) to be tested against the
                 mask.  These can be arrays. Use eq2csurvey to convert ra/dec
                 to clambda, ceta


 OPTIONAL INPUTS:
  maskFile=: Which mask file to use. The default is to use the "basic" masked
             defined in the config file (see also keyword parameters).
  maxAngle=: The maximum angle around each object.  When this is given, then
             edges will be checked for within this radius.


 KEYWORD PARAMETERS:
   FOR MASK EXPLANATION, see below

  /basic: Use the "basic" mask defined in the config file.
  /simple: Use the "simple" mask defined in the config file.
  /bound: Use the "bound" mask.
  /combined: Use the "combined" mask.

  /twoquad: When the maxAngle are sent and and /twoquad is set, objects pass
            the mask if two adjacent quadrants are unmasked.



 OUTPUTS:
  masked: Indices of points in the input list were masked out.
  unmasked: Indices of points in the input list were not masked.
  maskflags: The mask flags for each object.  

      FLAGS_MASKED = '1'X     ; Central point masked, or quadrants masked
      FLAGS_QUAD1_MASKED = '2'X  ; Quadrant masked in simple test
      FLAGS_QUAD2_MASKED = '4'X  
      FLAGS_QUAD3_MASKED = '8'X
      FLAGS_QUAD4_MASKED = '10'X

      FLAGS_QUAD1_MASKED_MONTE = '20'X  ; Quadrant masked in monte-carlo test
      FLAGS_QUAD2_MASKED_MONTE = '40'X
      FLAGS_QUAD3_MASKED_MONTE = '80'X
      FLAGS_QUAD4_MASKED_MONTE = '100'X

   See PIXEL_MASKFLAGS_SELECT.PRO for examples of how to use these flags.


 MASK EXPLANATION:

  "_basic": This mask contains the rough geometry for the current data set.
            It delineates the ends of the data in each stripe as well as any
            gaps in the middle of stripes where data is missing from one or
            both strips.

  "_simple": The first level of additional complexity.  This mask includes all
             of the pixels in the "_basic" mask as well as smaller masks to
             block out small areas lost to missing fields in otherwise
             continuous data.  As with the masks in "_basic", these masks are
             all made by hand.  In the dr3 implementation, this mask blocked
             out an additional 17 square degrees compared to the area masked
             in the "_basic" mask.

  "_bound": The next level in complexity.  This contains all of the pixels in
            "_simple" as well as masks to remove areas around bright stars.
            These bright star masks are the first ones included which are not
            made by hand.  In the dr3 implementation, this mask blocked out an
            additional 100 square degrees compared to the area masked in the
            "_simple" mask.

  "_combined": The final level of complexity.  This contains all of the pixels
               in "_bound" as well as pixels removing areas where systematic
               errors are likely to contaminate data.  In the dr3
               implementation,, 0 < reddening < 0.2, 0.85 < seeing < 1.4) ,
               this mask blocked out an additional 1210 square degrees
               compared to the area masked in the "_bound" mask.

 RESTRICTIONS:
  You must have compiled the code.  See the README file in the base directory
  of the SDSSIDL distribution.


 EXAMPLE:
  apply_pixel_mask, clambda, ceta, masked, unmasked, maskflags, /combined


 MODIFICATION HISTORY:
    Created: Erin Sheldon, UChicago, some time in 2003
    Converted from call_external to DLM: E.S. Nov-2004

(See pro/sdsspix//apply_pixel_mask.pro)


APPLY_SPHPOLY_MASK

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  APPLY_SPHPOLY_MASK


 PURPOSE:
  Call sphpoly_completeness to get the completenss for a set of ra/dec points,
  then return indices of those which pass the completeness cut.


 CATEGORY:
  SDSS routine.


 CALLING SEQUENCE:
   apply_sphpoly_mask, ra, dec, masked, unmasked, 
            /lameta, 
            maskfile=, 
            completeness=, 
            compcut=, 
            poly_id=, 
            poly_area=, 
            /silent=


 INPUTS:
  ra/dec: Scalar or arrays of points in double precision.


 OPTIONAL INPUTS:
  maskFile=: The mask file to use. Default is the sphpoly_mask_file entry in
             config file.
  compcut=: The completeness cut to use, default is > 0.0


 KEYWORD PARAMETERS:
  /lameta: The inputs are clambda/ceta instead of ra/dec
  /silent: Don't print stuff

 OUTPUTS:
  masked, unmasked: indices of masked and unmasked objects.

 OPTIONAL OUTPUTS:
  poly_id: The polygon id for each object
  poly_area: The polygon area for each object.

 RESTRICTIONS:
  You must have compiled the code.  See the README file in the base directory
  of the SDSSIDL distribution.


 MODIFICATION HISTORY:
   Created Erin Sheldon, UChicago, some time in 2003

(See pro/spherical_polygons//apply_sphpoly_mask.pro)


ARRAY_INTERSECT()

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  ARRAY_INTERSECT()

 PURPOSE:
  Pick the common elements from two arrays. Duplicates are removed.  The
  type of the returned array is that of array1.

 CALLING SEQUENCE:
  intersection = array_intersect(array1, array2 [, nkeep])

 INPUTS:
  array1, array2

 OUTPUTS:
  intersection: The elements common to both arrays, with the type of array1.
  nkeep: number kept.

 MODIFICATION HISTORY:
  30-Sept-2005, Created, Erin Sheldon, NYU

(See pro/util//array_intersect.pro)


ARRAY_UNION()

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  ARRAY_UNION()

 PURPOSE:
  Return the union of elements in two arrays.  Duplicates are removed.
  The type of the returned array is that of array1.

 CALLING SEQUENCE:
  union = array_union(array1, array2 [, nkeep])

 INPUTS:
  array1, array2

 OUTPUTS:
  union: All unique values from both arrays.
  nkeep: number kept.

 MODIFICATION HISTORY:
  30-Sept-2005, Created, Erin Sheldon, NYU

(See pro/util//array_union.pro)


ARRSCL

[Previous Routine] [Next Routine] [List of Routines]

 NAME:
    ARRSCL
       
 PURPOSE:
    Rescale the range of an array.

 CALLING SEQUENCE:
    result = arrscl(arr, min, max, arrmin=, arrmax=)
                 
 INPUTS: 
    arr:  The array.
    min:  new minimum.
    max:  new maximum.

 OPTIONAL INPUTS:
    arrmin:  A number to be used as minimum of array range.
    arrmax:  A number to be used as maximum of array range.

    NOTE:  These are useful if the original array is known to only be a
           sample of possible range.  e.g. if 
                arr=randomu(seed,20) 
           then one might wish to give arrmin=0, arrmax=1
       
 OUTPUTS:
    The rescaled array. 
	
 REVISION HISTORY:
    Author: Erin Scott Sheldon UofMich 10/18/99                                        

(See pro/util//arrscl.pro)


BAYES_EVAL_POLY2D

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
    BAYES_EVAL_POLY2D


 PURPOSE:
  Util for bayes_prob.pro

 MODIFICATION HISTORY:
    Creation:  ??-??-?? Dave Johnston, UofChicago

     Current version: 1.5

(See pro/probgal//bayes_eval_poly2d.pro)


BAYES_PARS

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
   BAYES_PARS


 PURPOSE:
  Util for bayes_prob.pro

 MODIFICATION HISTORY:
    Creation:  ??-??-?? Dave Johnston, UofChicago

     Current version: 1.5

(See pro/probgal//bayes_pars.pro)


BAYES_PROB

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
   BAYES_PROB


 PURPOSE:
   Calculate bayesian probabilities for an object being a galaxy

 CALLING SEQUENCE:
  bayes_prob, cat, probflags, probgal, rat, ls, lg, c, see, mag

 MODIFICATION HISTORY:
    Creation:  ??-??-?? Dave Johnston, UofChicago

     Current version: 1.5

(See pro/probgal//bayes_prob.pro)


BAYES_PROB_NC

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
    BAYES_PROB_NC


 PURPOSE:
    Util for bayes_prob.pro Create p from prob using number counts,m

 MODIFICATION HISTORY:
    Creation:  ??-??-?? Dave Johnston, UofChicago

     Current version: 1.5

(See pro/probgal//bayes_prob_nc.pro)


BAYES_SET_COMMON

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  BAYES_SET_COMMON


 PURPOSE:
  Set the common block used by the bayesian s/g routines


 CATEGORY:
  SDSS specific routine.


 CALLING SEQUENCE:
  bayes_set_common


 MODIFICATION HISTORY:
  ??-??-2004 Ryan Scranton

     Current version: 1.5

(See pro/probgal//bayes_set_common.pro)


BEGPLOT

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
	BEGPLOT	

 PURPOSE:
	Redirect plotting to the 'PS' device. See also ENDPLOT.

 CATEGORY:

	Misc.

 CALLING SEQUENCE:

	BEGPLOT, plotfile, ...keywords

 INPUTS:

	None.

 KEYWORD PARAMETERS:

	These keywords are applicable to all graphics/display devices.

	LAYOUT:  Name of file containing keywords.  See example below.
            Note, pslayout is run automatically to set defaults.
	DEVICE:  Name of graphics device.
       INVBW: Invert b&w color table and make axes labels black for
              printing b&w spectrograms.

	These keywords are applicable to the 'PS', 'PCL', and 'HP'
	graphics device.  See also "IDL Graphics Devices" in IDL
	Reference Manual.

	INCHES:  Set to express sizes and offsets in inches.
	LANDSCAPE:  Set for 'landscape' orientation.  
	XOFFSET: Offset relative to lower left hand corner in
                portrait(default) orientation. Default is 0.75 inches.
	YOFFSET: Offset relative to lower left hand corner in
                portrait(default) orientation. Default is 1.0 inches.
	XSIZE:  Width of graphics output. Default = 5.0 inches.
	YSIZE:  Height of graphics output. Default = 9.0 inches.

	These keywords are specific to the 'PS' graphics device.

	BITS_PER_PIXEL: Integer (1,2,4,8) specifing resolution.
                       Default = 4 unless COLOR keyword set then
                       default = 8.
	BOLD: Set to use bold version of current PostScript font.
	COLOR: Set to enable color output.
	DEMI: Set to use demi version of current PostScript font.
	ENCAPSULATED: Set to create encapsulated PostScript font.
                     Suitable for importing into other documents.
	FONT: Name of PostScript font. See IDL Reference Manual for
             complete list.
	ITALIC: Set to use italic version of current PostScript font.
	LIGHT: Set to use light version of current PostScript font.
	MEDIUM: Set to use meduim version of current PostScript font.
	NARROW: Set to use narrow version of current PostScript font.
	OBLIQUE: Set to use oblique versin of current PostScript font.
	PREVIEW: Set to add 'device independent screen preview' to
                output file when using ENCAPSULATED.
	SCALE_FACTOR: Specifies scale factor applied to entire plot.
                     Default = 1.
 	CT: Number of color table to apply when using COLOR. Default =
           6 (prism).

 COMMON BLOCKS:

	PLOTFILE_COM:
		plotfile - name of output file.
		save_device - name of previous graphics device.
		spool - flag to prevent printing if ENCAPSULATED.

 RESTRICTIONS:
	
	!P.FONT must be set to 0 (zero) for the hardware-drawn (PostScript)
	fonts. If !P.FONT = -1, Hershey vector drawn fonts are used.  Vector 
	fonts should always be used for 3-dimensional plots.

 EXAMPLES:

	To redirect a plot to an Encapsulated PostScript (EPS) file
	and inhibit printing:

	BEGPLOT,'test.eps',/ENCAPSUATED
	PLOT,x,y
	ENDPLOT

	Layout files can to used to set up the graphics device
	keywords. A syntax similar to Xdefaults files is used.  Each
	line looks like "device.keyword:value". 'device' is the
	name of graphcis device used by SET_PLOT. ('ps' is currently
	the only device supported).  'keyword' is the name of the
	keyword to send to DEVICE, and 'value' is the value to send
	with the keyword (1 is used to set and 0 to unset). A layout
	file to produce a half-page, portrait, EPS file  using the
	Times-Roman 12 point font and PREVIEW would look like:

	ps.font:times
	ps.font_size:12
	ps.portrait:1
	ps.encapsulated:1
	ps.preview:1
	ps.inches:1
	ps.xsize:5.0
	ps.ysize:5.0

	All of the keywords defined above can be set in this manner.

	To abort after running BEGPLOT but before running ENDPLOT, run
	KILLPLOT. This will close the plotfile and reset the graphics
	device to the one being used before BEGPLOT was called.

	See also the documentation for KILLPLOT and ENDPLOT.

 COPYRIGHT NOTICE:

	Copyright 1993, 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.

 MODIFICATION HISTORY:

 	Based on BEGPLT by Phil Klingner, NIS-3, LANL.

	Modified and renamed BEGPLOT. Michael J. Carter, NIS-1, LANL,
	March, 1994.

       Fixed landscape mode bug.  mjc, 1/24/95.

       Added INVBW keyword to load inverse black & white color map - 
       useful for printing spectrograms.
  
       Major rewrite. Use !pslayout system variable.  Added parameters
       to layout. Run setupplot if necessary. 
              3-Jul-2002  Erin S. Sheldon UofMich
       No longer support printing; just out to file. E.S.S.

(See pro/plotting//begplot.pro)


BINARY_SEARCH

[Previous Routine] [Next Routine] [List of Routines]

 NAME:
    BINARY_SEARCH

 CALLING SEQUENCE:
    binary_search,arr,x,index [, /round ]

 PURPOSE:
    Perform a binary search on arr, an input array, for the closest match
    to x.  

    Will give closest element of arr that is _smaller_ than x.  Set /round to 
    gaurantee you get the closest overall element. -E.S.S.
    Set /edgedefault to use endpoint if input x is gr arr[n-1] or x is lt arr[0]
                                                   -E.S.S.

 Modification History
   Author: Dave Johnston.
   Added round keyword  04/29/00  Erin Scott Sheldon  UofMich
   Added edgedefault keyword 07-Mar-2001
 

(See pro/util//binary_search.pro)


BINNER

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
   binner

 PURPOSE:
   Generic binning routine.  Bins 1- or 2-d data sets and supports weighted
   histograms and binning into groups with N elements, as well as the usual
   fixed binsize.  For 1-d it generates histograms, returning info about bin 
   edges and centers and allowing weighted histograms.  For 2-d the data are 
   binned by x and the y values are averaged in each bin using a specified 
   method.  NOTE for 2-d, bins containing no objects are not returned in the 
   result.  The result is a structure containing the relevant information.

 CATEGORY:
   statistics

 CALLING SEQUENCE:
   binstruct = binner(x [, y, (all histogram keywords), weights=, method=, nperbin=, reverse_indices=, /add_index)

 INPUTS:
   x: Array of data.
   y (optional): Optional y data.  If y is sent, the data are binned in x 
     and statistics are also returned for the y data in each bin.  Note in
     this case bins with zero members are not included in the result.

 OPTIONAL KEYWORD INPUTS:
   _extra: All the inputs which can be sent to histogram, such as binsize, 
       min, max, etc get passed through the _extra argument.  These will be
       used when appropriate for the requested method.
   method: Allowed values depend on 1-d or 2-d.  
       For 1-d:
           'full': Calculate more statistics for each bin. This requires using
               reverse indices from histogram, which is slower and uses more 
               memory. These default to the center of the bin when no data 
               is present.
                   xmean: the mean position in the bin 
                   xmedian: the median position in the bin.
           'weighted': if sent, a weighted histogram "whist" is also returned. 
               Weights must also be sent, and in fact sending weights without
               sending method implies method='weighted'.  When weighted is sent, this also
               implies 'full' as described above.
           'standard': just run histogram and return bin stats. DEFAULT
       For 2-d:
           'mean': Calculate all stats using standard mean, variance, etc. DEFAULT
           'median': Use the median instead of the mean.
           'sigmaclip': Use sigma clipping to find the mean.  nsig=3.5, niter=4
           'weighted': Calculate weighted statistics. Weights must be sent, and 
               sending weights without sending method implies method='weighted'.

   weights: Weight for each point. Will be used for weighted histogram and 
       weighted statistics in the 2-d case.  Inclusion of this keyword implies
       method='weighted' if that keyword is not sent.
   nperbin: Bin such that there this many points per bin.  If this keyword is not
       sent then equal sized bins are used according to the histogram keywords.

 OUTPUTS:
  binstruct: A structure containing statistics for the requested binning.
       1-d: 
           method: the method used, 'full', 'weighted', or 'standard'
           xlow: lower side of bin
           xcenter: center of bin
           xhigh: right size of bin
           hist: the histogram
           if method is 'full' or 'weighted'
               xmean: mean of data in bin
               xmedian: median of data in bin
           If weighted:
               whist: the weighted histogram, sum of weights in each bin

       2-d:
           'method': method for calculating statistics
           xmean: mean if x data in bin
           ymean: mean if y data in bin, calculated using 'method'
           yerr:  error on mean in bin
           ysdev: standard deviation in bin
           hist: histogram of data in the bins
           if method is 'weighted':
               whist: the weighted histogram, sum of weights in each bin
        

 OPTIONAL OUTPUTS:
   reverse_indices: from histogram.  Will always be available for 2-d data,
       but for 1-d it will only be available when the 'full' or 'weighted' 
       methods are used.
   index_array: An array of pointers each of which points to
       an array of indices for objects in the bin. Only can be returned in
       the same situations where reverse_indices is present

 RESTRICTIONS:
   Requires IDL 5.6 or later for the locations keyword to histogram. Only
   a restriction for the 1-d case when not binning by number.

 EXAMPLE:
   1-d:
       bs = binner(x, min=0.1, max=20)
       pplot, bs.xcenter, bs.hist, psym=10
       
       bs = binner(x, method='weighted', weights=wts)
       pplot, bs.xcenter, bs.whist, psym=10
   2-d:
       bs = binner(x, y, method='median')
       pplot, bs.xmean, bs.ymean, yerr=bs.yerr, psym=8

       bs = binner(x, y, method='weighted', weights=wts)
       pplot, bs.xmean, bs.ymean, yerr=bs.yerr, psym=8
   
 MODIFICATION HISTORY:
   Creation: Conglomerated from many programs. 2007-04-04 Erin Sheldon, NYU

(See pro/statistics//binner.pro)


BOLO_MAG

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  BOLO_MAG


 PURPOSE:
  compute bolometric magnitude of g,r,i mag and zeropoint is (5,n)


 CATEGORY:
  sdss routine


 CALLING SEQUENCE:
  bolo_mag,mag,sn,zeropoint,bflux,bsn,bmag,see,seew

 MODIFICATION HISTORY:
   Creation: 19-Nov-2002, Dave Johnston, UofChicago

(See pro/sdss//bolo_mag.pro)


BOOTSTRAP

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
   bootstrap

 PURPOSE:
   Create bootstrap samples and calculate statistics for input variables.
   The input data are up to 8 equal length arrays where each element 
   represents information about the same event or object. For example they
   could be the flux in different wavelenghts of some astronomical object,
   or parameters of an event in a detector.

 CATEGORY:
   Statistics.

 CALLING SEQUENCE:
   struct = bootstrap(nsample, v1, ..., v8, /verbose)

 INPUTS:
   nsample: Number of bootstrap samples to perform.
   v1..v8: Up to 8 data arrays of equal length.  The number of 8 comes
       from the IDL limit of 8 dimensions in an array.

 KEYWORD PARAMETERS:
   /verbose: Report progress.

 OUTPUTS:
   struct: A structure containing the mean and standard deviation of the
       bootstrap data.  For 2-d input these are arrays with lenght the number
       of variables.  For 2-d the covariance between variables is also returned.

 EXAMPLE:
   bs = bootstrap(1000, x, y)

 MODIFICATION HISTORY:
   Documented: 2007-04-24, Erin Sheldon, NYU

(See pro/statistics//bootstrap.pro)


BOOT_HIST

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
   boot_hist

 PURPOSE:
   Create a histogram with bootstrapped errors.

 CATEGORY:
   statistics

 CALLING SEQUENCE:
   binstruct = boot_hist(nsample, data, weights=, indarray=, /silent, 
                           bhist=, wbhist=wbhist, 
                           _extra=histogram keywords)

 INPUTS:
   nsample: Number of bootstrap samples to create.
   data: An array of data.

 OPTIONAL INPUTS:
   weights: Weights for each point.
   _extra: Keywords sent to histogram such as binsize, min, max, etc. 
       Keywords special to the binner() program are also accepted.

 KEYWORD PARAMETERS:
   /silent: Do not print progress reports.

 OUTPUTS:
   binstruct: A structure with bin info, incliding bin centers, histogram
       optional weighted histogram, and errors from bootstrapping.

 OPTIONAL OUTPUTS:
   bhist: The histogram bootstrap samples used.
   wbhist: The weighted histogram bootstrap samples used.

 MODIFICATION HISTORY:
   2007-04-24, Documented, Erin Sheldon, NYU

(See pro/statistics//boot_hist.pro)


BOOT_INDICES

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
   boot_indices
 PURPOSE:
   Returns random indices between 0 and imax-1 drawn with replacement for use in bootstrapping.
   If only imax is sent, then imax randoms are returned in this range.  
   If the nsample argument is sent and is not 1 then a [nsample,imax]
   array is returned.
 CATEGORY:
   statistics.
 CALLING SEQUENCE:
   ind = boot_indices(imax, nsample=)
 INPUTS:
   imax: Randoms are returned with values from 0 to imax-1. By default
       the returned array is also this length.
 OPTIONAL INPUTS:
   nsample: If not 1 an [nsample,imax] array is returned.
 OUTPUTS:
   Random indices from 0 to imax-1 drawn with replacement.
 MODIFICATION HISTORY:
   2007-04-24 Documented, Erin Sheldon, NYU

(See pro/statistics//boot_indices.pro)


BOOT_SAMPLES

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
   boot_samples

 PURPOSE:
   Create bootstrap data for input variables. The input data are up to 
   8 equal length arrays where each element represents information about 
   the same event or object. For example they could be the flux in different 
   wavelenghts of some astronomical object, or parameters of an event in a 
   detector. The output is the mean of each bootstrap sample, for each input
   variable, in an [nsample, nvar] array, or 1-d for nvar=1.  

 CATEGORY:
   Statistics.

 CALLING SEQUENCE:
   samples = boot_samples(nsample, v1, ..., v8, /verbose)

 INPUTS:
   nsample: Number of bootstrap samples to perform.
   v1..v8: Up to 8 data arrays of equal length.  The number of 8 comes
       from the IDL limit of 8 dimensions in an array.

 KEYWORD PARAMETERS:
   /verbose: Report progress.

 OUTPUTS:
   samples: The mean of each bootstrap sample in a [nsample, nvar] array.
       The reform() program is run to reduce [nsample,1] arrays.

 EXAMPLE:
   bs = bootstrap(1000, x, y)

 MODIFICATION HISTORY:
   Documented: 2007-04-24, Erin Sheldon, NYU

(See pro/statistics//boot_samples.pro)


BOOT_STATS

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
   boot_stats

 PURPOSE:
   Calculate the statistics (mean, sdev, covariance) for a set of bootstrap samples. 
   This program does not create bootstrap samples, see boot_indices() and 
   boot_samples() for that.  The input data are a 1-d array of bootstrap samples
   or a 2-d [nsample, nvar] array with the second dimension representing the value
   of different variables for each bootstrap sample.

 CATEGORY:
   statistics

 CALLING SEQUENCE:
   struct = boot_stats(data)

 INPUTS:
   data: A 1-d or 2-d array of bootstrap data.  For 1-d this is just all the
       bootstrap data for a single variable.  For 2-d input it must be of the
       shape [nsample, nvar]

 OUTPUTS:
   struct: A structure containing the mean and standard deviation of the
       bootstrap data.  For 2-d input these are arrays with lenght the number
       of variables.  For 2-d the covariance between variables is also returned.

 EXAMPLE:
   ; We have variables x and y measured for a given event.
   ; First create the averages of these for various bootstrap samples.
   nsample = 100
   bsamples = boot_samples(nsample, x, y)
   bs = boot_stats(bsamples)
       

 MODIFICATION HISTORY:
   Documented: 2006-04-24, Erin Sheldon, NYU

(See pro/statistics//boot_stats.pro)


CASID2PHOTOID

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  casid2photoid

 PURPOSE:
  Convert a set of CAS ids (skyserver ids) to a photoids.

 CATEGORY:
  SDSS

 CALLING SEQUENCE:
  pid = casid2photoid(casid)

 INPUTS:
  casid: A scalar or array of CAS ids.

 OUTPUTS:
  photoid(s).  See the program photoid.pro

 OPTIONAL OUTPUTS:
  sky_version, first_field. Extra info kept in CAS ids not 
    kept in photoids.

 MODIFICATION HISTORY:
  Created: 2007-04-03. Erin Sheldon, NYU

(See pro/sdss//casid2photoid.pro)


CASID_EXTRACT

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
   CASID_EXTRACT

 PURPOSE:
   Extract run,rerun,camcol,field,id (and sky, first_field) 
   from a casid (long64) from the cas (skyserver) or as created
   by the casid.pro program.

 CATEGORY:
   SDSS specific routine

 CALLING SEQUENCE:
   casid_extract, super, run, rerun, camcol, field, id, 
      sky_version=, first_field=

 INPUTS:
   super: A super id

 OUTPUTS:
   run,rerun,camcol,field,id

 OPTIONAL OUTPUTS:
   sky_version, first_field

 EXAMPLE:
   superid = casid(run,rerun,camcol,field,id)
   casid_extract, superid, run, rerun, camcol, field, id

 MODIFICATION HISTORY:
   Created: ?/?/? Ryan Scranton

(See pro/sdss//casid_extract.pro)


CETA2STRIPENUM

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
    CETA2STRIPENUM
 PURPOSE:
    Find which stripe goes with this eta.
 CALLING SEQUENCE:
    stripe = ceta2stripenum(ceta, /allowfan)
 INPUTS: 
    ceta: Corrected SDSS survey longitude.
 KEYWORD PARAMETERS:
   /closest:  In the southern stripes take the closest of stripes 76, 82, 86.
       This allows for the fanning out of runs near the ends of stripes.
 OUTPUTS: 
    stripe
 REVISION HISTORY:
    14-NOV-2000 Taken from astrotools.  Works with modified corrected coords.

(See pro/sdss//ceta2stripenum.pro)


CIRC_RADEC

[Previous Routine] [Next Routine] [List of Routines]

 NAME: 
    circ_radec
       
 PURPOSE: 
    Circles an ra and dec position on the current display.  We need 
    a photo structure, an index and the position of the object with that
    index inorder to complete the mapping.	

 CALLING SEQUENCE: 
    circ_radec, photostr, index, objx, objy, ra, dec, 
    nodisplay=nodisplay, radius=radius,color=color,box=box
      
                 

 INPUTS: photostr: a photo structure
         index: the index of an object in that structure
         objx, objy: the x and y positions of index object.
         ra, dec:  the ra and dec to be circled.

 INPUT KEYWORD PARAMETERS:
         radius=: radius of the circle.  Default is image size/10.0
         pos_ang=, rmax=, rmin=: instead of just circle, overplot an ellipse
         clr=: color index to make the mapping from.

         order=: order=0 (default) means images was plotted 0,0 in bottom
                 left,  order=1 is top left.  Note objx,objy
                 is still given in the original coord. system. User must input
                 ny for the transformation.
         ny=: number of pixels in the y-direction.
         /box: use a box instead of a circle.  radius will be side of box
         /silent: Shut off the messages except errors.

       
 OUTPUTS: none

 CALLED ROUTINES: 
                  CONVERT2XY
                  POLYWARP
                  KMAP
                  (RDIS_SETUP)
                  (RDIS)
                  TVCIRCLE
                  (TVBOX)

 
 PROCEDURE: 
	convert the ra and dec to x y coordinates
	

 REVISION HISTORY:
	Author: Erin Scott Sheldon Umich 5/25/99
       
                                      

(See pro/sdss//circ_radec.pro)


CLASSIFY_GALAXIES

[Previous Routine] [Next Routine] [List of Routines]

 NAME:   CLASSIFY_GALAXIES
    
       
 PURPOSE:  
   Classifies galaxies based on morphology and color. 
   Can classify into spiral, or elliptical.  Can also return single parameter 
   scaling from 0 to 1 with elliptical < Spiral.
    

 CALLING SEQUENCE:  
     classify_galaxies,pstruct,classprob,plot=plot,view=view,
                     silent=silent,con=con,corrparams=corrparams,cut=cut
                     ,cd=cd,ad=ad,urd=urd,wd=wd
    

 INPUTS: 
     pstruct:  photo structure of galaxy with tag for classification
   
 KEYWORD PARAMETERS:
     plot:  set to plot Con vs. u-r, Asym vs. Con, Asym vs. u-r
     view:  set to view random images of any class
     silent:  set to view no output
     con:  returns concentration
     corrparams:  recalculates parameters that depend on k-correction
     cut:  set if desired different cut for spiral/elliptical division
           default = .35
       
 OUTPUTS:  
     prints number in each classification bin if keyword silent not set
     returns classifications into tag .classification and .class
    
 CALLED ROUTINES:  
     tfasym
     view_galaxies
     tag_names
     aplot
     fetch_dir
     get_atlas
    
 
 PROCEDURE: 
     Measures these parameters from photo outputs and atlas images.
     u' - r'
     Concentration=petror50/petror90
     two-fold asymmetry  - see tfasym.pro
     Then they are scaled based on a clean sample that was scaled with 
       STANDARIZE() and adjusted to have a mean of .5 and a variance of .25
     Scaled parameters are combined with a weighted mean by their errors
     Flags are set in .classification and continuous parameter set in .class
       and error in .classerr or can be output by program


 NOTE:
     To decipher classifications use:
         make_clflag_struct
         clflag_select
         plot_clflags
         print_clflags

     Galaxy Structure needs these tags:
         .classification
         .petror50
         .petror90
         .petrocounts
         .petrocountserr
         .petrorad
         .petroraderr
         .reddening
         .e1
         .e2
         .ixx
         .iyy
         .colc
         .rowc
         will be filled if tag is there:
            .asymmetry
            .asymmetryerr
            .class
            .classerr
         if keyword set /corrparams and .z1d then tags filled:
             .lum
             .absmag
             .kcorr

 REVISION HISTORY:  Judith Racusin   8/7/00
                          Uses c asym and gr to make a class probability
                          2/13/01 changed scaleing of params in version 3
                                  changed from petro g-r to petro u-r
                          5/9/01  added errors and changed class
                          5/17/01 changed from tfasym3 to tfasym5, 
                                  now uses variable centers
                          6/13/02 changed cut from 0.45 to 0.35 to adjust for
                                  new asyms from bug fixed in tfasym5

(See pro/classgal//classify_galaxies.pro)


CLFLAG_SELECT

[Previous Routine] [Next Routine] [List of Routines]

 NAME:  CLFLAG_SELECT
    
       
 PURPOSE:  
    Makes cuts based on classification flags using input classification structure.
      These cuts are "anded" together, they must all be true for object to
      survive.
    

 CALLING SEQUENCE:
     clflag_select,pstruct,clflag_struct,select_index
    

 INPUTS: 
     pstruct:  A photo output structure (must have classification tag).
     clflag_struct:  premade classification flag structure.  This will require
          any flags set to 'Y' and insist that any flag set to 'N' be off

 OUTPUTS: 
    select_index:  indices of selected objects

 REVISION HISTORY:  Judith Racusin 6/15/00, modified from flag_select by Tim Mckay
                    8/6/01 added bad_asymmetry and bad_concentration
       
                                      

(See pro/classgal//clflag_select.pro)


CLOSE_MATCH

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
 close_match

 PURPOSE:
 this will find close matches between 2 sets of points (t1,s1)
 and (t2,s2) (note t1,t2,s1,s2 are all arrays) in a 2 dimentional space.
 differnt then close_match in that it gives the 'allow' CLOSEST matches
 CALLING SEQUENCE:
 close_match,t1,s1,t2,s2,m1,m2,ep,allow,miss1

 INPUTS:
 t1,s1: the coordinates of the first set
 t2,s2: the coordinates of the second set
 ep:  this is the error which defines a close match. A pair is considered
 a match if |t1-t2| AND |s1-s2| are both less than ep. This is faster
 than doing a euclidean measure on the innermost loop of the program
 and just as good.
 allow: how many matches in the (t2,s2) space will you allow for
 each (t1,s1)

 OUTPUTS:
 m1,m2: the indices of the matches in each space. That is  
 (t1(m1),s1(m1)) matches (t2(m2),s2(m2))
 miss1: this gives the index of the things in x1 NOT found to match (optional)

 OPTIONAL KEYWORD PARAMETERS:
 none

 NOTES:
 It sorts the t2 list so that it can do a binary search for each t1.
 It then carves out the sublist of t2 where it is off by less than ep.
 It then only searches that sublist for points where s1 and s2 differ
 by less than ep. 
 PROCEDURES CALLED:
 binary_search, rem_dup
 REVISION HISTORY:
 written by David Johnston -University of Michigan June 97

   Tim McKay August 97
 	bug fixed, matcharr extended to "long" to accomodate ROTSE I images
   Tim McKay July 99
	bug fixed to correctly handle the first object in list 2, and 
	especially the case with a single object in list 2

(See pro/util//close_match.pro)


CLOSE_MATCH_RADEC

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
 close_match_radec

 PURPOSE:
 this will find close matches between 2 sets of points (ra1,dec1)
 and (ra2,dec2) (note ra1,ra2,dec1,dec2 are all arrays) in ra dec space.
 
 CALLING SEQUENCE:
 close_match_radec,ra1,dec1,ra2,dec2,m1,m2,ep,allow,miss1

 INPUTS:
 ra1,dec1: the ra dec of the first set
 ra2,dec2: the ra dec of the second set
 ep:  this is the error which defines a close match. A pair is considered
 a match if their spherical separation is <= ep.
 allow: how many matches in the (ra2,dec2) space will you allow for
 each (ra1,dec1)

 OUTPUTS:
 m1,m2: the indices of the matches in each space. That is  
 (ra1(m1),dec1(m1)) matches (ra2(m2),dec2(m2))
 miss1: this gives the index of the things in x1 NOT found to match (optional)

 OPTIONAL KEYWORD PARAMETERS:
 none

 NOTES:
 It sorts the ra2 list so that it can do a binary search for each ra1.
 It then carves out the sublist of ra2 where it is off by less than ep.
 It then only searches that sublist for points where dec1 and dec2 differ
 by less than ep. 
 PROCEDURES CALLED:
 binary_search, rem_dup
 REVISION HISTORY:
 written by David Johnston -University of Michigan June 97

   Tim McKay August 97
 	bug fixed, matcharr extended to "long" to accomodate ROTSE I images
   Tim McKay 6/23/98
	Altered to be an ra dec match, with appropriate scaling of ra range...
   Tim McKay 7/8/99
	Altered to order matches by distance, rather than just ra dec distance
   Erin Scott Sheldon 08-Mar-2001
       Made code human readable. Fixed bug where miss1 was not returned
       when no matches found.
   E.S.S.  Fixed bug where some matches could be returned outside of the
           requested distance cut.  10-June-2004

(See pro/astro//close_match_radec.pro)


COMBINE_GRI

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
    COMBINE_GRI


 PURPOSE:
    Combine g,r, and i fluxes and output new magnitudes for psfcounts
    and counts_exp.  Also, make a combined seeing from the three bandpasses.
    Thanks Zelko for corrections on flux conversion  

 CATEGORY:
    SDSS specific routine for galaxy probability calculations


 CALLING SEQUENCE:
    combine_gri,cat,mag,see,c,detnum,det=det,av=av


 INPUTS:
    cat: PHOTO structure containing adaptive moments, psfcounts, counts_exp
         flags, flags2


 MODIFICATION HISTORY:
     Created: 29-APR-2003 Dave Johnston
     Modified: 13-OCT-2003 Ryan Scranton; added model and cmodel switches
     Modified: 5-APR-2004 Ryan Scranton; switched to flux-weighted combination

     Current version: 1.5

(See pro/probgal//bayes_combine_gri.pro)


COMBINE_PTRLIST

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  COMBINE_PTRLIST


 PURPOSE:
  Combine a ptrarr, each containg pointers to list of the same types of 
  objects, into a normal idl variable array. The objects must be able
  to be replicated with the REPLICATE() function.  The pointers are freed
  unless the /nofree keyword is sent.


 CATEGORY:
  Utility.


 CALLING SEQUENCE:
  output = combine_ptrlist(ptrlist, /nofree, status=)


 INPUTS:
  ptrlist: An array or scalar of pointers.

 KEYWORD PARAMETERS
  /nofree: If set, the data is copied rather than freed.

 OUTPUTS:
  The data from the ptrlist combined into a single IDL variable.


 OPTIONAL OUTPUTS:
  status=: 0 success, otherwise failure.

 SIDE EFFECTS:
  The pointers are freed.

 EXAMPLE:
  ptr[0] = ptr_new(struct1, /no_copy)
  ...
  ptr[n] = ptr_new(structn, /no_copy)
  data = combine_ptrlist(ptr)


 MODIFICATION HISTORY:
  Doc created 1-August-2005: Erin Sheldon, UChicago

(See pro/util//combine_ptrlist.pro)


COMPUTE_BAYES_PROB

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
    COMPUTE_BAYES_PROB


 PURPOSE:
    Compute Bayesian probability for SG separation cat. Must have psfcounts,
    counts_exp, seeing (from adaptive moments).  Outputs the galaxy
    probability and fills in objc_prob_psf with 1-probgal if the tag exists.
    Fills in objc_prob_flags if it exists.

 CATEGORY:
    SDSS specific routine


 CALLING SEQUENCE:
    compute_bayes_prob, cat, probgal, probflags


 INPUTS:
    cat: PHOTO structure containing tags psfcounts,
         counts_exp, seeing (from adaptive moments)


 OPTIONAL INPUTS:
    NONE


 KEYWORD PARAMETERS:
    /byfield: split catalog by field
    /noiter: don't iterate on the number counts


 OUTPUTS:
   probgal: Probability of being a galaxy: default is 10000. (so objc_prob_psf
            will be -9999. by default)
   probflags: diagnostic flags


 OPTIONAL OUTPUTS:
   NONE


 COMMON BLOCKS:
   NONE


 SIDE EFFECTS:
   cat.objc_prob_psf and cat.objc_prob_flags are filled in if they exist


 RESTRICTIONS:
   If the structure already contains cmodel_counts, then it needs thest tags:

     CMODEL_COUNTS, CMODEL_COUNTSERR, PSFCOUNTS, PSFCOUNTSERR, M_RR_CC_PSF,
       FLAGS, FLAGS2
   
   Otherwise, cmodel_counts will be computed, in which case these tags are
   required:

     COUNTS_DEV, COUNTS_DEVERR, COUNTS_EXP, COUNTS_EXPERR, FRACPSF

   If /byfield, then need RUN, RERUN, CAMCOL, FIELD, ID

 PROCEDURE:



 EXAMPLE:



 MODIFICATION HISTORY:
    Creation:  Version 1.0 ??-??-?? Dave Johnston, UofChicago
               Version 1.2 29-April-2003 DJ
               Version 1.5 ??-??-2004 Ryan Scranton, Pitt

(See pro/probgal//compute_bayes_prob.pro)


COMPUTE_ZEROPOINT

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
    COMPUTE_ZEROPOINT


 PURPOSE:
    compute zeropoint,zpt, from from calib info a,b,c,k are from fcPCalib 
    file single 5-float X is airmass in fpField file single 5-float
    UG,IZ model_colors 1d-arrays of anylength


 CATEGORY:
    SDSS specific routine


 CALLING SEQUENCE:
    compute_zeropoint,a,b,c,k,X,UG,IZ,zpt

 MODIFICATION HISTORY:
    Creation: 19-Nov-2002, Dave Johnston, UofChicago

(See pro/sdss//compute_zeropoint.pro)


CONVERT2RD

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
    CONVERT2RD

 CALLING SEQUENCE:
    convert2rd,x,y,ra,dec,rac=rac,decc=decc

 PURPOSE:
    Convert from x-y to ra and dec

(See pro/astro//convert2rd.pro)


CONVERT2XY

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
    CONVERT2XY

 CALLING SEQUENCE:
    convert2xy,ra,dec,xout,yout,rac=rac,decc=decc

 PURPOSE:
    Convert from ra and dec to x-y

(See pro/astro//convert2xy.pro)


COSMOLOGY (IDL CLASS FILE)

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
   cosmology (IDL Class file)

 PURPOSE:
   Implements some common distance measurements in cosmology. Follows
   conventions in Hogg astro-ph/9905116

 CALLING SEQUENCE:
   c=obj_new('cosmology')

 METHODS:
   DH(h=) 
       Hubble distance
   Ez_inverse(z, omega_m=, omega_l=, omega_k=, flat=) 
       1.0/sqrt( omega_m*(1+z)^3 + omega_k*(1+z)^2 + omega_l )
   Ezinv_integral(z1, z2, omega_m=, omega_l=, omega_k=, flat=, npts=)
       Integral of 1/E(z) from z1 to z2
   Dc(z1, z2, omega_m=, omega_l=, omega_k=, flat=, h=, npts=)
       Comoving distance (line of sight) in Mpc/h
   Dm(z1, z2, omega_m=, omega_l=, omega_k=, flat=, h=, npts=)
       Comoving distance (transverse) between two events in Mpc/h
   Da(z1, z2, omega_m=, omega_l=, omega_k=, flat=, h=, npts=, Dl=)
       angular diameter distance. e.g. angular size = physical size/Da in Mpc/h
   Dl(z1, z2, omega_m=, omega_l=, omega_k=, flat=, h=, npts=, Da=)
       luminosity distance. 
   distmod(z, omega_m=, omega_l=, omega_k=, flat=, h=, npts=)
       distance modulus. mag = absmag + distmod
   velement(z, omega_m=, omega_l=, omega_k=, flat=, h=, npts=, /comoving)
       volume element, optionally comoving in (Mpc/h)^3
   volume(zmin, zmax, omega_m=, omega_l=, omega_k=, flat=, h=, npts=, vnpts=, /comoving)
       volume between zmin,zmax optionally comoving in (Mpc/h)^3

   genrandz(nrand, zmin, zmax, omega_m=, omega_l=, omega_k=, flat=, h=, npts=, /comoving)
       Generate random redshifts uniformly in a volume specified by zmin, zmax

 EXAMPLE:
   c=obj_new('cosmology')
   z=0.3
   omega_m=0.2
   ; Calculate angular diameter distance from 0 to 0.3
   da = c->Da(0.0, z, omega_m=omega_m)

 RESTRICTIONS:
   Requires gauleg, a C extension for calculating gauss-legendre weights. This
   is easy to compile, just do ./configure and then make in the sdssidl base
   directory

 MODIFICATION HISTORY:
   Created some time in 2006, Erin Sheldon, NYU

(See pro/astro//cosmology__define.pro)


CREATE_PHOTOMAP

[Previous Routine] [Next Routine] [List of Routines]
  NAME:
    create_photomap

  PURPOSE:
    Map ra/dec to pixel coordinates.

  Created:
    2002, Erin Sheldon, UofMichigan

(See pro/sdss//create_photomap.pro)


CSURVEY2EQ

[Previous Routine] [Next Routine] [List of Routines]

 NAME:
    CSURVEY2EQ
       
 PURPOSE:

    Convert from corrected lambda, eta (SDSS survey coordinates) to ra, dec
    The system is corrected so that the longitude eta ranges from 
    [-180.0, 180.0] and the latitude lambda ranges from [-90.0,90.0].  
    The standard lambda/eta both range from [-180.0,180.0] which doesn't 
    make sense. NOTE: lambda is often referred to as longitude but this
    is incorrect since it has poles at [-90,90]


 CALLING SEQUENCE:
    csurvey2eq, clambda, ceta, ra, dec

 INPUTS: 
    clambda: Survey longitude in degrees
    ceta: Survey latitude in degrees

 OUTPUTS: 
    ra: Equatorial latitude in degrees
    dec: Equatorial longitude in degrees

 REVISION HISTORY:
    Written: 26-Sep-2002  Erin Scott Sheldon
                                        

(See pro/sdss//csurvey2eq.pro)


DCENTER

[Previous Routine] [Next Routine] [List of Routines]

 NAME:
    DCENTER
       
 PURPOSE:
    Center up the display

 CALLING SEQUENCE:
    dcenter, xsize, ysize, px, py, silent=silent

 INPUTS: 
    xsize, ysize: the size of the plot.

 OPTIONAL INPUTS:
    NONE

 KEYWORD PARAMETERS:
    NONE
       
 OUTPUTS: 
    px,py: the new positions of the plot region.

 OPTIONAL OUTPUTS:
    NONE

 CALLED ROUTINES:
    
 
 EXAMPLE: 
    plot, [0,1], [0,1], /nodata, xstyle=4, ystyle=4
    pxold = !x.window*!d.x_vsize
    pyold = !y.window*!d.y_vsize
    xsize = px[1] - px[0]
    ysize = py[1] - py[0]
    dcenter, xsize, ysize, px, py
    position=[ [ px(0), py(0)], [ px(1), py(1) ] ]

    plot, x, y, position=position, /device, /noerase, _extra=extra

 REVISION HISTORY:
    ??-??-2000 Erin Scott Sheldon
       
                                      

(See pro/plotting//dcenter.pro)


DDIR

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
   ddir

 PURPOSE:
   Generate a directory name based upon input elements.  Combined with dfile defines a generic naming scheme for directories and files.

 CALLING SEQUENCE:
   dir = ddir(pathlist, root=, file=) 

 OPTIONAL INPUTS:
   pathlist: An array of path elements above the root.
   root: The root directory.  Default is the empty string.

 OUTPUTS:
   directory build up as the level elements combined with the root dir.  These
   are connected using the operating system's path separator.  On UNIX:
       root/level1/level2/....

 OPTIONAL OUTPUTS:
   filebase: The basic file element associated with this directory structure.
           level1-level2-level3
       This is used by dfile to build a file name. Note root is not includec. 

 NOTES:
   If there are no inputs the empty string is returned.

 EXAMPLE:
   dir = ddir(root='~/project', ['output','sample01','split16'], filebase=filebase)
   print,dir
   ~/project/output/sample01/split16
   print,filebase
   'output-sample01-split16

 MODIFICATION HISTORY:
   Created: 2007-04-22.  Moved to main archive. Erin Sheldon, NYU

(See pro/files//ddir.pro)


DEFSYMBOLS

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  DEFSYMBOLS

 OBSOLETE:
   Note: this program is mostly obsoleted by the very nice textoidl() program.

 PURPOSE:
    Define symbols in true-type and vector type fonts. System variables
    !TSYM AND !VSYM, structures, are created. !CSYM is also created and will
    contain the common symbols. It will copy in symbols from !TSYM or !VSYM
    depending on !p.font (1 or 0 for true-type, -1 for vector)
 
    If you change font types be sure to rerun defsymbols


 CATEGORY:
    Plotting


 CALLING SEQUENCE:
    defsymbols


 INPUTS:
    None

 SIDE EFFECTS:
    System variables created:
       !tsym: true-type fonts
       !vsym: vector vonts
       !csym: The fonts that are contained in both of the above font sets.

 EXAMPLE:
    ; True type fonts
    IDL> !p.font = 1
    IDL> defsymbols
    IDL> x=findgen(100)/10
    IDL> alpha = 1./9
    IDL> y = sin(alpha*x)
    IDL> plot,x,y,xtitle='x',ytitle='sin('+!csym.alpha+'*x)',charsize=2
    ; vector fonts
    IDL> !p.font = -1
    ; repeate above code

 MODIFICATION HISTORY:
    ??-??-????: Erin Sheldon, UChicago

(See pro/plotting//defsymbols.pro)


DELVARX

[Previous Routine] [Next Routine] [List of Routines]

 NAME:
    DELVARX
       
 PURPOSE:
    Make input variables undefined. Similar to intrinsic DELVAR, but
    works at any calling level (e.g. within procedures)
    This is a factor of 40 times faster than the astronomy
    library version of delvarx.

 CALLING SEQUENCE:
    delvarx, v1, v2, ..., v16

 INPUTS: 
    v1,v2,..... any idl variable
 
 REVISION HISTORY:
    Created 23-Apr-2001, Erin Scott Sheldon UofMich
       

(See pro/util//delvarx.pro)


DFILE

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
   dfile

 PURPOSE:
   Create a generic filename based upon the directory structure.  Combined with ddir defines a generic naming scheme for directories and files.

 CALLING SEQUENCE:
   file = dfile(pathlist, root=, prefix=, postfix=, extension=)

 INPUTS:

 OPTIONAL INPUTS:
   pathlist: An array of path elements above the root.
   root: The root directory.  Default is the empty string ''
   prefix: A prefix added to the front of the file name.  Default ''
   postfix: A postfix added to the end of the file name.  Default ''
   extension: A file extension. Default ''

 KEYWORDS:
   /nodir: Don't add the directory to the file name.

 OUTPUTS:
   file: A generic file name.  Directory elements are connected with the path 
       separator for the current operating system.  The file name contains the
       same elements separted by dashes '-'.  On UNIX this looks like:
           root/level1/..../levelN/prefix-level1-...-levelN-postfix.ext 

 OPTIONAL OUTPUTS:
   dir: Set to a named variable to return the directory for this file.

 NOTES:
   If there are no inputs the empty string is returned.

 EXAMPLE:
   file = dfile(root='~/project', ['output','sample10','split16'], 
                prefix='proj', postfix='02', ext='.dat')
   print,file
   ~/project/output/sample01/split16/proj-output-sample10-split16-02.dat

 MODIFICATION HISTORY:
   Created: 2007-04-22.  Moved to main archive. Erin Sheldon, NYU

(See pro/files//dfile.pro)


DISPLAY_EXISTS

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  DISPLAY_EXISTS


 PURPOSE:
  Test if there is an X display. Works on *nix systems with the sh shell.
  Note: if no display exists, but you log into a remote machine with 
  X-forwarding, then this program will incorrecly think the display exists.
  This result in a crash if a window, for example, is created.

 CALLING SEQUENCE:
  if display_exists() then ..... else ....

 RESTRICTIONS:
  Only works on *nix systems.

 EXAMPLE:
  if display_exists() then window,1


 MODIFICATION HISTORY:
  ??-??-2003  Erin Sheldon UChicago
  27-Oct-2004 Forced use of sh shell. Tom Downes UChicago

(See pro/plotting//display_exists.pro)


DISPLAY_FCHART

[Previous Routine] [Next Routine] [List of Routines]

 NAME: 
    DISPLAY_FCHART
       
 PURPOSE: display a photo finding chart and circle the object that was used to
          make the chart.  Label axis with arcminutes from the center.  Output
          inmages, .jpg, .png, or .ps if requested.  Gif no longer supported
          by idl.
	

 CALLING SEQUENCE:  
      
                 

 INPUTS: fchart:  The finding chart
         object:  The photo object struct used to make the finding chart.
         objx:    x-position of object in the finding chart.
         objy:    y-position
         clr:     color index the finding chart was made from 
                                          used in the title.

 INPUT KEYWORD PARAMETERS:
         order=: Order to draw images. default is order=0 is 0,0 at bottom
                 left. for order=1, 0,0 is top left.
         /box:  Draw a box instead of a circle.
         /jpeg: Write a jpeg from display.
         /png: Write a png from display.
         /ps:   If set a postscript files are created for the requested items.
         fnamepng: name of png file. Default fchart.png
         fnameps: name of ps file.  Default is fchart.ps
         fnamegif: name if gif file.  Default is fchart.gif
         silent:  If set, program will be silent except for error messages.
         nodisplay: If set, there will be No x-window display of the chart.  
               -May still make ps files.-
         hideradec: Don't show the ra and dec on the plots.
         circ_rad: radius of circle.
         nocirc:  if set, no circle is drawn.
         _extra: any extra plotting command keywords.
       
 OUTPUTS: 

 OPTIONAL OUTPUTS: May output .ps or .gif files if requested.

 CALLED ROUTINES:

                  RADECSTR
                     RADEC
                  SIGMA_CLIP
                  BEGPLOT
                  ENDPLOT
                  RDIS_SETUP
                  RDIS:
                      TVIM2_SCL:
                               TVIM2
                  TVCIRCLE
                  TVBOX


 REVISION HISTORY: 
      Author: Erin Scott Sheldon  Umich 5/25/99
      Changed order in title: run-rerun-camcol-field-id 
      Fixed circle color problem.
                                               02-Jul-2002
       
                                      

(See pro/sdss//display_fchart.pro)


DOC_METHOD

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  doc_method

 PURPOSE:
  Display the documentation for a method of an IDL class.  This requires that
  the method has documention surrounded by 
         ;docstart::classname::methodname
         ;docend::classname::methodname

 CATEGORY:
  IDL Classes,objects

 CALLING SEQUENCE:
  doc_method, methodname, /class

 INPUTS:
  methodname: Format:  classname::methodname

 KEYWORD PARAMETERS:
  /class:  Display the doc for the class. This is equivalent to 
         doc_library, 'classname__define'

 RESTRICTIONS:
  The method doc must be formatted properly with text surrounded by
         ;docstart::classname::methodname
         ;docend::classname::methodname

 EXAMPLE:
  doc_method, 'postgres::query

 MODIFICATION HISTORY:
  Created: 2006, Erin Sheldon, NYU

(See pro/util//doc_method.pro)


ENDPLOT

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
	ENDPLOT	

 PURPOSE:
	Closes and saves the current plotfile and returns to 'X'. See also BEGPLOT.


 CALLING SEQUENCE:
   endplot, /trim_bbox, /landfix, /setup, /help

 KEYWORD PARAMETERS:
   /landfix: 
      fix the landscape so its not flipped (which is the only way IDL writes
      landscape mode)
   /trim_bbox: 
      trim the bounding box on encapsulated ps files. Requires that the
      external program "epstool" is installed.  This must be the later mature
      version that accepts --bbox, etc as options.
             http://www.cs.wisc.edu/~ghost/gsview/epstool.htm
   /setup: 
      run setupplot after closing device.  If !pslayout.runsetup is true then
      this will be run automatically.
   /help: 
      print this doc

 COMMON BLOCKS:
   PLOTFILE_COM:  See the documentation for BEGPLOT.

 EXAMPLE:
       begplot, 'test.ps'
       plot, .....
       endplot

 MODIFICATION HISTORY: 
  Originally based on ENDPLOT by Michael J. Carter.  Almost complete rewrite
       Erin Sheldon, March 2001.

(See pro/plotting//endplot.pro)


EQ2CSURVEY

[Previous Routine] [Next Routine] [List of Routines]

 NAME:
    EQ2CSURVEY
       
 PURPOSE:
    Convert from ra, dec to the corrected clambda, ceta 
    SDSS survey coordinate system.  It is corrected so that the
    longitude eta ranges from [-180.0, 180.0] and the latitude
    lambda ranges from [-90.0,90.0].  The standard lambda/eta 
    both range from [-180.0,180.0] which doesn't make sense.
    NOTE: lambda is often referred to as longitude but this
    is incorrect since it has poles at [-90,90]

 CALLING SEQUENCE:
    eq2csurvey, ra, dec, clambda, ceta

 INPUTS: 
    ra: Equatorial latitude in degrees 
    dec: Equatorial longitude in degrees

 OUTPUTS: 
    clambda: Corrected Survey longitude (actually lattitude) in degrees
    ceta: Corrected Survey latitude (actually logitude) in degrees

 REVISION HISTORY:
    Written: 26-Sep-2002  Erin Scott Sheldon
                                      

(See pro/sdss//eq2csurvey.pro)


EQ2GC

[Previous Routine] [Next Routine] [List of Routines]

 NAME:
    EQ2GC
       
 PURPOSE:
    convert from equatorial to great circle coordinates

 CALLING SEQUENCE:
    eq2gc, ra, dec, node, inc, mu, nu

 INPUTS: 
    ra, dec: equatorial
    node, inc: node and inclination of the stripe.
       
 OUTPUTS: 
   mu, nu: great circle coords

 PROCEDURE: 
    Taken from astrotools

 REVISION HISTORY:
    14-NOV-2000  Erin Scott Sheldon UofMich Taken from astrotools
       

(See pro/sdss//eq2gc.pro)


EQ2SURVEY

[Previous Routine] [Next Routine] [List of Routines]

 NAME:
    EQ2SURVEY
       
 PURPOSE:
    Convert from ra, dec to lambda, eta (SDSS survey coordinates)
    Use of these coordinates are not recommended because they do
    not form a meaningful system.  See the documentation for eq2csurvey.

 CALLING SEQUENCE:
    eq2survey, ra, dec, lambda, eta

 INPUTS: 
    ra: Equatorial latitude in degrees 
    dec: Equatorial longitude in degrees
       
 OUTPUTS: 
    lambda: Survey longitude in degrees
    eta: Survey latitude in degrees

 REVISION HISTORY:
    Written: 5/15/2000  Erin Scott Sheldon
                        Taken from astrotools.
                                      

(See pro/sdss//eq2survey.pro)


ERRFILL

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  errfill

 PURPOSE:
  Fill in the region x, y, y+/-yerr, which is the allowed range around x,y 
  given the errors yerr. The plot and data coordinates must have already 
  been created as required by the polyfill procedure.

 CATEGORY:
  Plotting

 CALLING SEQUENCE:
  errfill, x, y, yerr, _extra=

 INPUTS:
  x, y, yerr:  points and error bars. Must all be the same length.

 OPTIONAL INPUTS:
  _extra: extra plotting keywords, such as color, /line_fill, pattern, etc.
          see POLYFILL for more details.

 EXAMPLE:
  plot, x, y
  errfill, x, y, yerr, color=!red

 MODIFICATION HISTORY:
  Created, 2007-01-23 Erin Sheldon, NYU

(See pro/plotting//errfill.pro)


ETA2STRIPENUM

[Previous Routine] [Next Routine] [List of Routines]

 NAME:
    ETA2STRIPENUM
       
 PURPOSE:
    Find which stripe goes with this eta.

 CALLING SEQUENCE:
    stripe = eta2stripenum(eta, southern=southern)

 INPUTS: 
    eta: SDSS survey longitude.

 OPTIONAL INPUTS:
    NONE

 KEYWORD PARAMETERS:
    /southern: This is a southern stripe
       
 OUTPUTS: 
    stripe

 OPTIONAL OUTPUTS:
    NONE

 CALLED ROUTINES:
    NTOSTR
 
 PROCEDURE: 
    
	

 REVISION HISTORY:
    14-NOV-2000 Taken from astrotools
       
                                      

(See pro/sdss//eta2stripenum.pro)


EXTRACT_TAGS()

[Previous Routine] [Next Routine] [List of Routines]

 NAME:
    EXTRACT_TAGS()
       
 PURPOSE:
   Extract the specified tags from input structure and return in a new
   struct ordered as requested.

 CALLING SEQUENCE:
    newstruct = extract_tags(oldstruct, tagnames)

 INPUTS: 
    oldstruct: the original structure
    tagnames: the names of tags to keep.

 OUTPUTS: 
   newstruct: the new structure with requested tags. Tags are in the order
       requested.

 CALLED ROUTINES:
    MATCH
    
 PROCEDURE: 
    
	

 REVISION HISTORY:
   Created: 2007-08-03, Erin Sheldon, NYU
       
                                      

(See pro/struct//extract_tags.pro)


FCHART

[Previous Routine] [Next Routine] [List of Routines]
 NAME: 
    FCHART
       
 PURPOSE: 
    Create a finding chart for an SDSS object.
	
 CALLING SEQUENCE: 

    fchart, pstruct, index, radius, clr, fchart, dir=dir, 
            /shift2r, 
            objx=objx, objy=objy, impos=impos, silent=silent, 
            nonoise=nonoise, useind=useind

 COMMENTS:  The wrapper obj_info is a very convenient way to use FCHART
            since it makes a nice display.

 INPUTS: 
    
    pstruct:  A photo structure.
              IMPORTANT NOTE: This MUST have certain tags, such as
              rowc,colc,field,id,parent,nchild

    index:    The index of the object in the photo structure which needs
              a finding chart.
    radius:   The box which the object is in will have sides 2*radius
              unless radius is too big. (e.g. bigger that 2048 pixels)
    clr:      The color used to make the finding chart. This follows the
              photo convention: 0,1,2,3,4 -> u,g,r,i,z

 INPUT KEYWORD PARAMETERS:
         dir:  The directory to find the atlas images.
         /shift2r: Perform sub-pixel shifts based on astrometry to align the
                   atlas images with the r-band.  For some reason, only
                   integer shifts were stored in the atlas images.  This slows
                   things down only a small amount.
         /silent: If silent is set, nothing is printed except some errors
         /nonoise: if set, no noise is added to image.
         maxsize: deprecated
         
 OUTPUTS: 

    fchart:  The image of the finding chart. 

 OPTIONAL OUTPUTS: 
    objx: The x-position of the input object in pixels in image
               coordinates (as opposed to photo [colc,rowc]
    objy: Same for y.
    impos: Absolute position of left hand corner of image as defined
           by this equation:
           impos[0] = colc 
           impos[1] = rowc + 1361.*(field - fieldmin)

 CALLED ROUTINES: 

    GET_FAMILY
    GET_ATLAS
 
 PROCEDURE: 
  Create a finding chart around an input object from all the objects nearby.
  The trick is to use atlas images of objects in such a way that flux is
  only added once.  I choose nchild == 0 to do this.
	
  From here, the atlas image of each good neighbor is the proper color is 
  found and placed within the appropriate box.  The registration is determined
  by comparing positions in the different colors.

  Note the box may not center on the main object if it is less that 'radius'
  from either the edge of the frame in the column direction. This is also, 
  true if it is near either end of the series of frames read into pstruct.


 REVISION HISTORY: 
     Author  Erin Scott Sheldon UM 03/21/99
     Dave Johnston - was adding way too much noise
        to background in some cases , now it just adds a 
        trace amount of noise to background 
        sky rms sqrt(30)  5/15/99	
     Now allows objects with center outside image to 
     contribute light to the image. Object centers must
     be within maxsize.  14-NOV-2000
     30-Aug-2002: Better way to calculate positions: just use r-band
         positions and translate the other bands to r-band using the
         bottom-left corners of the atlas images.
     11-Sep-2002: 
         -Fixed bug where light from some objects was added
          twice if the objects spanned more than one field.  
         -Fixed bug where some objects were not being used.
                -- E.S.S.
         -Added optional sub-pixel shifting, so can get better alignment with
         the r-band (for color images..)
     23-Feb-2005:  Use new read_atlas routine.  E.S.S.
                                      

(See pro/sdss//fchart.pro)


FCHART_CIRC_RADEC

[Previous Routine] [Next Routine] [List of Routines]

 NAME: 
    FCHART_CIRC_RADEC
       
 PURPOSE: 
    Build a finding chart and (unless requested otherwise ) circle positions 
    in ra and dec arrays.
	

 CALLING SEQUENCE: 
    fchart_circ_radec, photostr, ra, dec, fchart, $
                      clr=clr, $
                      radius=radius, radarcsec=radarcsec, $
                      radarcmin=radarcmin,$
                      tol=tol, $
                      linestyle=linestyle,$
                      nonoise=nonoise, $
                      circ_rad = circ_rad, $
                      circ_color=circ_color,$
                      circ_obj=circ_obj,                $
                      nodisplay=nodisplay, psfile=psfile, $
                      silent=silent, $
                      objx=objx, objy=objy, photoid=photoid, $
                      nocirc = nocirc, $
                      pos_ang=pos_ang, rmax=rmax, rmin=rmin,$
                      _extra=extra

 INPUTS: photostr:  A photo structure.  Must contain RUN and CAMCOL tags to
             find atlas directory (calls fetch_dir) Also must contain RA and
             DEC so that CIRC_RADEC can make a good mapping from row,col to
             ra and dec
         ra, dec:   The arrays of ra and dec positions to be circled.  Finding
             chart is made for object in photostr that most closely matches
             the _first_ ra and dec in list.  Note, if you set /nocirc, none
             of the objects in the list will be circled.

 OPTIONAL INPUTS:
         clr:       Color to make finding chart.  [0,1,2,3,4]->[u,g,r,i,z]
                 default is clr=2
         radius:    Optional input.  Radius to make finding chart in pixels.
         radarcsec: radius in arcseconds (takes precedence over radius)
         radarcmin: radius in arcminutes (takes precedence over radarcsec)
         tol:       Optional input tolerance (in arcsec) used to find nearest 
                    object to ra dec. This should be large to gaurantee it 
                    will find and object.  Default is 500 arcsec. Will search 
                    on first ra dec in list. 
         cird_rad:  array of radii used to make circle around objects in 
                    the list.  Default is size of finding chart/10.0 for the
                    first and 1/20. for the rest
         circ_color: colors to use for circles. Default is all white or
                     black depending on device
         circ_obj: If set, circle the object used to make finding chart.
         psfile:    Name of psfile in which to plot.
         photoid:   Can input photoid to make fchart from, else it will find
                    nearest match in ra,dec. If not input, can
                    be returned with this keyword. See below.
        pos_ang, rmax, rmin: instead of just circle, overplot an ellipse
         _extra:    Extra plotting options.

 KEYWORD PARAMETERS:
         /nonoise: keyword sent to fchart.  Set for no noise added to fchart.
         /nodisplay:  If set, won't display the image.
         /silent:   Shut off messages except errors.
         /nocirc: If set, no circling is done.

 OPTIONAL OUTPUTS:
         fchart:  Return the image.
         objx, objy:  The position of object used to make finding chart.
         photoid:   If not input, returns id used to make finding chart

 CALLED ROUTINES:
                  (CLOSE_MATCH_RADEC)
                  FCHART
                  (DISPLAY_FCHART)
                  (CIRC_RADEC)
                  FETCH_DIR
                  (FETCH_RERUN)
 
 PROCEDURE: 
   if not input in photoid, match first ra and dec in structure to 
   the photostr.  Then make a finding chart and circle all the ra and dec.
	

 REVISION HISTORY:
	Author: Erin Scott Sheldon Umich 5/25/99
       Added radarcsec and radarcmin keyword parameters. 02-Jul-2002
       
                                      

(See pro/sdss//fchart_circ_radec.pro)


FEXIST

[Previous Routine] [Next Routine] [List of Routines]

 NAME:
    FEXIST
       
 PURPOSE:
    Check if a file exists. This now uses built-in function file_test()
    for versions of IDL >= 5.4  For efficiency the user should use that
    function if possible.  Otherwise a test using the openr function is 
    used. In that case directories cannot be checked.

 CALLING SEQUENCE:
    file_exists=fexist(file, _extra=_extra)

 INPUTS: 
    file: A full path filename.

 OPTIONAL INPUTS:
    _extra: For IDL >= 5.4 these are the options to the file_test() function

 KEYWORD PARAMETERS:
    NONE
       
 OUTPUTS: 
    1 or 0: 1 means the file exists, 0 means the file does not exist.

 OPTIONAL OUTPUTS:
    NONE

 EXAMPLE:
    outfile='test.dat'
    ;; don't overwrite existing file
    if fexist(file) then outfile = 'some other name'
    openw, lun, file, /get_lun
    ....etc.

 CALLED ROUTINES:
    FILE_TEST (IDL >= 5.4)
    OPENR (IDL < 5.4 )
    FREE_LUN (IDL < 5.4 )

	

 REVISION HISTORY:
    07-DEC-2000 Creation. Erin Scott Sheldon
    01-MAR-2003 Added use of FILE_TEST function                                      

(See pro/files//fexist.pro)


FIELD2STRING

[Previous Routine] [Next Routine] [List of Routines]

 NAME: 
    FIELD2STRING
       
 PURPOSE: 
    Function outputs a string containing field of a photo tsObj 
    file in the correct format: width of 4 with zero padding.
	

 CALLING SEQUENCE: 
    result = field2string(field)
      
 INPUTS: 
    field number (May be an array)
	
 REVISION HISTORY:
     Author: Erin Scott Sheldon  Umich 5/25/99
     Now just use a format string.  2006-10-07, Erin Sheldon, NYU
                                      

(See pro/sdss//field2string.pro)


FIELD_INDICES

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  FIELD_INDICES


 PURPOSE:
  Takes arrays of run,rerun,camcol,field and finds the number of uniq hashs
  (ie run-rerun-camcol-field congomerates) and returns the reverse_index (see
  IDL "histogram" function docs) so that they can be grouped together easily
  it also returns an index and a structure with {run,rerun,camcol,field}
  such that the array str(index).run is equal to run etc. This attemps to be
  clever and do things quickly and with minimal memory use

 CATEGORY:
  SDSS specific routine.


 CALLING SEQUENCE:
  field_indices, run, rerun, camcol, field, num, rev, index, str, h

 INPUTS:
   run,rerun,camcol,field: in integer form

 OUTPUTS:
   num:  the number of uniq field combos
   rev: the reverse indices of histogram
   index: described above, same number of elements as run,rerun...
   str: array of num structures with run,rerun,camcol,field
   h:   the histogram it self

 MODIFICATION HISTORY:
  April 05 2003 Dave Johnston

(See pro/sdss//field_indices.pro)


FINDABTHETA

[Previous Routine] [Next Routine] [List of Routines]

 NAME: 
    FINDABTHETA
       
 PURPOSE: 
    find the axis ratio and position angle of an object with
          e1 and e2 as ellipticity parameters.  Currently only
          works for unweighted or adaptively weighted moments
          and lupton 1/r weighting
	

 CALLING SEQUENCE: 
    findabtheta, e1, e2, aratio, posangle, verbose=verbose
      
                 

 INPUTS: 
    e1, e2: ellipticity parameters.

 INPUT KEYWORD PARAMETERS: 
         /verbose: print the output e1 and e2
         /lupton: if this is set, then use formulae for q and u

       
 OUTPUTS: 
    aratio: axis ratio
    posangle: position angle from the x-axis.

 PROCEDURE: 
	
	

 REVISION HISTORY:
	Author: Erin Scott Sheldon    UofM  5/??/99  

(See pro/astro//findabtheta.pro)


FINDE

[Previous Routine] [Next Routine] [List of Routines]

 NAME: 
    finde
       
 PURPOSE: 
    Find the e1 and  for a perfectly elliptal object with the 
          given axis ratio.  e1_ad and e2_ad are for unweighted or adaptively
          weighted moments.  e1_lup and e2_lup are Robert Luptons q and u
          which are in SDSS PHOTO catalogs.
	

 CALLING SEQUENCE:
    
     finde, aratio, posangle, e1_ad, e2_ad, e1_lup, e2_lup, silent=silent
      
 INPUTS: 
    aratio:  The axis ratio of the object.
    posangle: The positon angle from the x-axis.

 INPUT KEYWORD PARAMETERS:
         /verbose: Print out the result.
       
 OUTPUTS: 
    e1_ad, e2_ad:  Ellipticity parameters in unweighted for adaptively
                   weighted moments.

 OPTIONAL OUTPUTS: 
    e1_lup, e2_lup:  q and u from PHOTO catalog.


 REVISION HISTORY:
	
   Author: Erin Scott Sheldon   U of M  5/25/99 
                                             

(See pro/astro//finde.pro)


FIND_RADEC

[Previous Routine] [Next Routine] [List of Routines]

 NAME:
       FIND_RADEC
       
 PURPOSE:
	Find the run, camcol and field that contain the input ra and dec.
       More than one run may be returned if ra,dec is in overlap region
       between the runs.
 
 CALLING SEQUENCE:
       find_radec, ra, dec [, run, camcol, field, 
                   runstr=runstr, colstr=colstr, fstr=fstr, 
                   /first, /silent, /astrans]
                 
 INPUTS: 
       ra, dec: The positions in degrees.

 KEYWORD PARAMETERS:
       /first: just find the first run that matches
       silent=: silent=1: don't print run, camcol, field
                silent>1: don't print anything.
       /astrans: call find_radec_astrans to find run. Slower but more accurate
       
 OUTPUTS: 
       run, camcol, field

 OPTIONAL OUTPUTS:
       runstr=runstr: run string with standard padded zeros
       colstr=colstr: column string
       fstr=fstr: field string with standard padded zeros.
       
 PROCEDURE: 

       Must have The configuration variables RADEC_SEARCH_DIR, SEARCH_RUNS,
       and the RUN_STATUS info must be defined. The directory contains the
       files created by FIELD_RANGE.PRO, which finds the lambda-eta range of
       each field.  SEARCH_RUNS is all the runs which have been run through
       FIELD_RANGE.  These files contain structures for each field with the
       following tags: field, cetamin, cetamax, clambdamin, clambdamax. Assumes
       that fields are approximately square in lambda-eta.  RUN_STATUS has
       all the runs we know about on the current machine.

 REVISION HISTORY:
	Author: Erin Scott Sheldon  UofMich 10/15/99 
       Converged to survey coords. 9-OCT-2000 E.S.S.
                                      

(See pro/sdss//find_radec.pro)


FIND_RADEC_ASTRANS

[Previous Routine] [Next Routine] [List of Routines]

 NAME:
       FIND_RADEC_ASTRANS
       
 PURPOSE:
	Find the run, camcol and field that contain the input ra and dec.
       More than one run may be returned if ra,dec is in overlap region
       between the runs. Uses astrans file; more accurate than find_radec
       without /astrans keyword, but slower
 
 CALLING SEQUENCE:
       find_radec_astrans, ra, dec [, run, camcol, field, 
                   runstr=runstr, colstr=colstr, fstr=fstr, 
                   /first, /silent]
                 
 INPUTS: 
       ra, dec: The positions in degrees.

 KEYWORD PARAMETERS:
       /first: just find the first run that matches
       /silent: silent=1: don't print run, camcol, field
                silent>1: don't print anything.
       
 OUTPUTS: 
       run, camcol, field

 OPTIONAL OUTPUTS:
       runstr=runstr: run string with standard padded zeros
       colstr=colstr: column string
       fstr=fstr: field string with standard padded zeros.
       

 CALLED ROUTINES:
 
       EQ2SURVEY
       ETA2STRIPENUM
       (SDSSIDL_SETUP)
       sdss_read() 


 PROCEDURE: 

 REVISION HISTORY:
	Created: 15-AUG-2002 Erin Sheldon UofMich
                                      

(See pro/sdss//find_radec_astrans.pro)


FIND_RADEC_FCHART

[Previous Routine] [Next Routine] [List of Routines]

 NAME:
       FIND_RADEC_FCHART

 PURPOSE:
	Create a finding chart for the input coordinates.

 CALLING SEQUENCE:
       find_radec_fchart, ra, dec, fchart, pstruct, $
                      clr=clr, $
                      radius=radius, radarcsec=radarcsec, radarcmin=radarcmin, $
                      tol=tol, $
                      nonoise=nonoise, $
                      nocirc=nocirc, $
                      circ_rad=circ_rad,$
                      circ_color=circ_color,$
                      nodisplay=nodisplay, psfile=psfile, $
                      silent=silent, $
                      photoid=photoid, $
                      objx=objx, objy=objy, $
                      linestyle=linestyle,$
                      _extra=extra, runuse=runuse, astrans=astrans

 INPUTS: 
       ra, dec:   position of interest in degrees. If is an array, then
                  search is based on first element only.

 OPTIONAL INPUTS:
       clr:       bandpass of images from which to create finding chart.
                  Must be an integer [r,g,u,i,z] -> [0,1,2,3,4]
                  Default is red (2)
       radius:    Half length of the square finding chart in pixels.
       radarcsec: radius in arcseconds (takes precedence over radius)
       radarcmin: radius in arcminutes (takes precedence over radarcsec)

       tol:       Tolerance for finding nearby object in arcseconds.  
                  Default is 100.
       cird_rad:  array of radii used to make circle around objects in 
                    the list.  Default is size of finding chart/10.0 for the
                    first and 1/20. for the rest
         circ_color: colors to use for circles. Default is all white or
                     black depending on device
       psfile: make ps file with this name
       linestyle: linestyles for circles. Default is all 0 (solid line)
       runuse: find_radec may return more than one run. Set this value
            to an integer to choose which run.
       _extra:    Extra plotting keywords.

 KEYWORD PARAMETERS:
       /nodisplay: don't display, just make fchart and return
       /nonoise:   Set for no noise in fchart.
       /nocirc: don't draw circles
       /astrans: use direct astrans method

 OPTIONAL OUTPUTS: 
       fchart:    The finding chart
       pstruct:   A photo structure containing all objects in the frame 
                  of ra,dec as well as the two frames before and after (if 
                  its the first or last frame then it uses next two or 
                  previous two.
       altdir: atlas directory used to make fchart
       photoid:     Returns Id of nearest object.
       objx,objy: x,y positon of object used to make fchart

 CALLED ROUTINES:

       FIND_RADEC 
       TSOBJ_NAME
            RUN_DIR
       READ_PHOTO_COL
       FCHART_CIRC_RADEC
            CIRC_RADEC
       (SAO)

 PROCEDURE: 
	
	Use find_radec to get the run, camcol, and field of an object that
       is nearby to ra,dec and then read in the nearby objects.  Then create 
       a finding chart and circle the ra,dec postion.

 REVISION HISTORY:
	Author: Erin Scott Sheldon  UofMich 10/15/99  
       Added radarcsec and radarcmin keyword parameters. 02-Jul-2002
       
                                      

(See pro/sdss//find_radec_fchart.pro)


FLAG_SELECT()

[Previous Routine] [Next Routine] [List of Routines]

 NAME:
  flag_select()

 PURPOSE:
  Check the bits in a set of input flags.  The flags, flag type, and
  a structure describing the flags to check are input.  The flags can
  be ANDED or OR-ED together.  The indices of the input that match
  the selection criteria is returned, or -1 if none.

 CALLING SEQUENCE:

  si = sdss_flag_select(flags, flagtype, select_struct, [nkeep, 
                       /orflags, input_index=]
  
 INPUTS:
  flags: A set of flags.  May be an array.
  flagtype: The flag type. Currently supported flags may be listed 
      using the
         IDL> sf->print_flagtypes 
      method, but is most likely at least
         OBJECT1, OBJECT2, PRIMTARGET, SECTARGET, STATUS

  select_struct:  A structure with flag names and select criteria. The 
      available flags can be listed with the method:
         IDL> sf->print_allflags
      The select criteria are
         'y', 'n', or 'd' (yes it is set, no it isn't set, don't care)
      e.g For OBJECT1 flags:
         IDL> fs = {child: 'y', satur: 'n'}
      The flag names for a given flag type may be gotten:
         IDL> fnames=sf->flagnames(flagtype)
      or
         IDL> sf->print_allflags


 OPTIONAL INPUTS:
  /orflags: OR the flags. Default is to AND them.
  input_index=: A beginning index to restrict the search.

 OPTIONAL OUTPUTS:
   nkeep: The number that matched the selection criteria.

 EXAMPLES:
   IDL> fst = {galaxy_red:  'Y'}
   IDL> si = sdss_flag_select(st.primtarget, 'primtarget', fst}

   IDL> fst = {child: 'y', satur: 'n'}
   IDL> si = sdss_flag_select(st.flags[2], 'object1', fst)

   ; Choose either lrg or main sample galaxies usign the /orflags option.
   IDL> fst = {galaxy_red: 'Y', galaxy: 'Y'}
   IDL> si = sdss_flag_select(st.primtarget, 'primtarget', fst, /orflags}


 MODIFICATION HISTORY:
  Created: Mid-2005  Erin Sheldon Uchicago

(See pro/sdss//sdss_flag_select.pro)


FLUX2LUP

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  flux2lup

 PURPOSE:
  Convert flux to SDSS luptitudes; this has different conventions than nmgy2lups which gives the expected result for the princeton redux. 

 CATEGORY:
  SDSS specific routine

 CALLING SEQUENCE:
   flux2lup, flux, mag, fluxerr, magerr,b=b

 INPUTS:
  flux: flux array.  Can be either full 5-bandpass array or single.

 OPTIONAL INPUTS:
   fluxerr: err in flux.  If there then magerr will be returned.
   b=b: If single bandpass, must be specified with b=0, 1, 2, 3, or 4

 OUTPUTS:
   mag: mags in luptitudes

 OPTIONAL OUTPUTS:
   magerr: only returned if fluxerr is sent.


 MODIFICATION HISTORY:
   ??-??-?? Dave Johnston. Translation of Zeljko's SM code

(See pro/sdss//flux2lup.pro)


FSHIFT

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
   fshift
 
 PURPOSE:
   Routine to shift an image by non-integer values

 CALLING SEQUENCE:
	results = fshift(image,delx,dely)

 INPUTS:
	image - 2D image to be shifted
	delx - shift in x (same direction as IDL SHIFT function)
	dely - shift in y

 OUTPUTS:
	shifted image is returned as the function results

 HISTORY:
	version 2  D. Lindler  May, 1992 - rewritten for IDL version 2
	19-may-1992	JKF/ACC		- move to GHRS DAF.

(See pro/util//fshift.pro)


FXPOSIT2

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
	FXPOSIT2
 PURPOSE:
	Return the unit number of a file positioned to the beginning
       of a particular extension.

 CALLING SEQUENCE:
	unit=FXPOSIT(FILE, EXT_NO, /READONLY)

 INPUT PARAMETERS:
	FILE	= FITS file name, scalar string
       EXT_NO  = Extension to be moved to, scalar nonnegative integer

 RETURNS:
       Unit number of file or -1 if an error is detected.

 OPTIONAL KEYWORD PARAMETER:
	READONLY - If this keyword is set and non-zero, then OPENR rather 
		than OPENU will be used to open the FITS file.

 COMMON BLOCKS:
	None.
 SIDE EFFECTS:
	Opens and returns the descriptor of a file.
 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:
	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 
	W. Landsman 26-May-1997    Non-unix is not just VMS
	Converted to IDL V5.0   W. Landsman   September 1997

(See pro/fits//fxposit2.pro)


GC2CSURVEY

[Previous Routine] [Next Routine] [List of Routines]

 NAME:
    GC2CSURVEY
       
 PURPOSE:
    convert from SDSS great circle to corrected SDSS survey coordinates

 CALLING SEQUENCE:
    gc2csurvey, mu, nu, node, inc, clambda, ceta

 INPUTS: 
    mu, nu: great circle coords.
    node, inc: node and inclination of the stripe.
       
 OUTPUTS: 
   clambda, ceta: survey coords. 

 REVISION HISTORY:
    26-Sep2002  Erin Scott Sheldon UofChicago
       
                                      

(See pro/sdss//gc2csurvey.pro)


GC2EQ

[Previous Routine] [Next Routine] [List of Routines]

 NAME:
    GC2EQ
       
 PURPOSE:
    convert from great circle to equatorial coordinates

 CALLING SEQUENCE:
    gc2eq, mu, nu, node, inc, ra, dec

 INPUTS: 
    mu, nu: great circle coords.
    node, inc: node and inclination of the stripe.
       
 OUTPUTS: 
   ra,dec: equatorial coords. 

 PROCEDURE: 
    Taken from astrotools

 REVISION HISTORY:
    14-NOV-2000  Erin Scott Sheldon UofMich Taken from astrotools
       
                                      

(See pro/sdss//gc2eq.pro)


GC2SURVEY

[Previous Routine] [Next Routine] [List of Routines]

 NAME:
    GC2SURVEY
       
 PURPOSE:
    convert from SDSS great circle to SDSS survey coordinates

 CALLING SEQUENCE:
    gc2survey, mu, nu, node, inc, lambda, eta

 INPUTS: 
    mu, nu: great circle coords.
    node, inc: node and inclination of the stripe.
       
 OUTPUTS: 
   lambda, eta: survye coords. 


 CALLED ROUTINES:
   GC2EQ
   GC2SURVEY

 PROCEDURE: 
    Call gc2eq, then eq2survey
	

 REVISION HISTORY:
    26-Sep-2002  Erin Scott Sheldon
       
                                      

(See pro/sdss//gc2survey.pro)


GENRAND

[Previous Routine] [Next Routine] [List of Routines]

 NAME:  
    GENRAND
       
 PURPOSE:  
    Generate random numbers from an input probability function.
	
 CALLING SEQUENCE:
      genrand, prob, xvals , nrand, [, rand, /cumulative, /double, /quadratic,
      plt=plt, bin=bin])
                 
 INPUTS: 
    prob: input probablility function.  
    xvals: abscissae
    nrand: How many points to generate from the probability function.

 KEYWORD PARAMETERS:
         method=method: method=0 (default) use integral technique
                        method=1 use 2-d cut technique 
         cumulative: tells the program that prob is the cumulative 
	         probablility.  Using this option saves processing time.
                Note for method=1 this is not applicable.
         /double: use double precision?
         /quadratic: use quadratic interpolation? Ignored for idl versions
                     less than 5.4
         /plt: plot histogram if requested
         bin: how to bin the histogram (irrelevent if not /plt )
       
 OUTPUTS: 
    rand:  an array of random numbers generated from prob. size nrand
 
 PROCEDURE: 
  Method=0 (default)
    Generates random numbers from the input distribution by inverting
    the cumulative probability function.  Performs interpolation
    using the interpol function.
	
  Method=1
  Generates random numbers from the input distribution by generating x,y
           values uniformly and keeping those that lie beneath the 
           probability distribution
  
 REVISION HISTORY:
	Author: Erin Scott Sheldon  UofM  1/??/99
       March 2003: Use interpolation.  Introduced method=1 E.S.S.
       
                                      

(See pro/statistics//genrand.pro)


GENRAND2D

[Previous Routine] [Next Routine] [List of Routines]

 NAME:  
    GENRAND2D
       
 PURPOSE:  
    Generate random numbers from a 2d probability function.
	

 CALLING SEQUENCE:
      genrand2d, prob, xvals, yvals, nrand, xrand, yrand, $
                 double=double, nxbins=nxbins, nybins=nybins, /plt
                 

 INPUTS: 
    prob: input probablility function.  
    xvals, yvals: x-y values corresponding to the surface prob z values
    nrand: How many points to generate from the probability function.

 KEYWORD PARAMETERS:
         /double: Return double precision?
         /plt: make a plot of the generated data and input distribution
         nxbins=nxbins, nybins=nybins: number of bins to use in plot
       
 OUTPUTS: 
    xrand, yrand:  arrays of random numbers generated from prob
 
 PROCEDURE: 
  Generates random numbers from the input distribution by generating x,y,z
           values uniformly and keeping those that lie beneath the probability
           surface.

 REVISION HISTORY:
	Author: Erin Scott Sheldon  UofChicago 02-Mar-2003
                                      

(See pro/statistics//genrand2d.pro)


GET_CONSECUTIVE

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  get_consecutive

 PURPOSE:
  Return indices for first/last pairs of consecutive integers.
  The same index is returned for first/last if integer is isolated.

 CALLING SEQUENCE:
  get_consecutive, numbers, first, last

 INPUTS:
  numbers: A sorted array of numbers. 

 OUTPUTS:
  first,last: Arrays containing indices to first/last of integers.

 MODIFICATION HISTORY:
  Created 2005, Erin Sheldon, UChicago

(See pro/util//get_consecutive.pro)


GET_FAMILY

[Previous Routine] [Next Routine] [List of Routines]
 NAME: 
    GET_FAMILY

 PURPOSE: 
    retrieves atlas images for an object and any other objects
    associated with it in a blend.
                                                                            
 Inputs: pstruct: the photo output structure. Must use sarahtags.     
         index: the object's index in pstruct

 Optional inputs: dir: directory of atlas images
                  field: field of the object. 
		   run: run object is from
                  camcol: camera column of object (1-6)
                  maxsize: maximum size for images.  [500,500] is default.
                  prompt: prompting for prompt=1
                  nodisplay: no display if nodisplay =1
                  silent: will run silently unless bad images or missing
                          images are found
                                                                   
 Outputs: parent: the array containing the index of the parent    
	  children: the array containing the indices of the children 
         siblings: the array containing the indices of the siblings  
         im: the atlas image

 Examples:

  View the family of an object and return family.

 IDL> struct = sdss_read('tsobj', run, camcol, field=field)
 IDL> index = 33
 IDL> get_family, struct, index, parent, children, siblings
           				
 Author: Sarah Monk			
 Dave Johnston : only look in a vicinity of the original object
	not the whole structure. Speeds it up considerably.
                                                                 	

(See pro/sdss//get_family.pro)


HDR2STRUCT

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
   hdr2struct

 PURPOSE:
   Convert a string array with the format of a FITS header 
       into a single structure

 CALLING SEQUENCE:
   struct = hdr2struct(hdr)

 INPUTS:
   hdr:        FITS-(like) header (array of strings)

 OUTPUTS:
   struct:     Single structure with keyword(s) and comment(s)

 OPTIONAL INPUTS:

 COMMENTS:
   Only passes back anonymous structures as it appends as it works
    through all the header keywords.  Use struct_append to make an
    array from an array of headers.

 PROCEDURES CALLED:
   headfits()

 REVISION HISTORY:
   17-Jul-2001 Written by Burles

(See pro/fits//hdr2struct.pro)


HIST2D

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
    HIST2D

 PURPOSE:
    like the IDL built in function hist_2d
    but better since it can accept floats
    output histogram is a longarray(nxbins,nybins)
    uses only the relevent data in range

  Dave Johnston
   added return of reverse_indices April 1 2003
       Erin Sheldon, UofChicago. Added calculation of mean in x and y direction
             30-Jul-2003

(See pro/statistics//hist2d.pro)


HISTOGRAM_2D

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
	histogram_2d

PURPOSE:
	takes two dimentional data x,y and makes a histogram, 
	hist,with hist_2d.  hist is a structure that also contains
	the scaling parameters so one can display
	it with the right x,y, scale etc.

CALLING SEQUENCE:

	-syntax hist=histogram_2d(x,y,hist,nxbins,nybins,xrange=,yrange=,silent=silent)

INPUTS:
	x ,y : the two one-dimentional arrays that you want histogrammed
	
OUTPUTS:
	hist : the histogram structure contains 3 fields
	.map (the 2D array) , .xrange, .yrange (the two ranges)
	these ranges permit mapping from the data to the histogram map
	and vice versa.  also contains the mean x and mean y (xbins,ybins)

KEYWORDS:
	xrange,yrange : the range to include data from
	these are output and saved in the hist structure
	the default is min, max
	if these are flipped like [12,3]
	it will use 3 as min and 12 as max and then flip the histogram
	
	nxbins, nybins : the number of bins for each dimention

	silent : speak no evil	

EXTERNAL CALLS:
	none

METHOD:
	uses hist2d rather than the built in
	IDL routine hist_2d because it has to work with floating
	point numbers as well

EXAMPLE:
  IDL> histogram2d,radius,mag,hist,[0,6],[24,14],250,250
  IDL> tvim2,hist.map,range=[0,100],xrange=hist.xrange,yrange=hist.yrange

NOTES

HISTORY:  written by David Johnston -University of Chicago
       Physics Department 1999
       Erin Sheldon, UofChicago. Added calculation of mean in x and y direction
             30-Jul-2003
       Returns bin ranges and bin middles as well as mean in each bin from
       data.  July 2006 Erin Sheldon , NYU

(See pro/statistics//histogram_2d.pro)


HISTOGRAM_POINTS

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  histogram_points

 PURPOSE:
  Return as set of points which when plotted show a histogram representation
  of the input x-y points.  This is equivalent to psym=10 for normal
  "horizontal" histograms.  This procedure also allows "vertical" histograms
  which can be plotted against the y-axis.

 CATEGORY:
  Plotting

 CALLING SEQUENCE:
  histogram_points, x, y, xp, yp, type=

 INPUTS:
  x, y: The x and y points.  These could be the result of a call to
    histogram.

 OPTIONAL INPUTS:
  type: The type of histogram, either 'horizontal' or 'vertical'.  Default
    is 'horizontal'

 OUTPUTS:
  xp, yp: The points for plotting.

 EXAMPLE:
  ; two-dimensional histogram.  Plot the image and also project along
  ; each axis and show 1-d histogram.
  hist2d, x, y, hist, xbins=xbins, ybins=ybins
  xr = [min(xbins), max(xbins)]
  yr = [min(ybins), max(ybins)]
  implot, hist, xrange=xr, yrange=yr
  hx = total(hist,2)
  hy = total(hist,1)
  histogram_points, xbins, hx, xp, yp
  yp = yp/max(yp)*max(ybins)/5.0
  oplot, xp, yp
  histogram_points, ybins, hy, xp, yp
  xp = xp/max(xp)*max(xbins)/5.0
  oplot, xp, yp

 MODIFICATION HISTORY:
   ??-??-?? Erin Sheldon, NYU

(See pro/plotting//histogram_points.pro)


HTM_BIN2FITS

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  htm_bin2fits

 PURPOSE:
  Convert a binary output file created by htm_match into a FITS file.

 CALLING SEQUENCE:
  htm_bin2fits, file [, outfile, /remove]

 INPUTS:
  file: The path to a binary file.

 OPTIONAL INPUTS:
  outfile: The name of the output fits file.  If not entered,
      the file is set to file+'.fits'

 KEYWORD PARAMETERS:
  /remove: Remove the old binary file after converting.

 MODIFICATION HISTORY:
  Created: 2006-08-15 Erin Sheldon, NYU

(See pro/htm//htm_bin2fits.pro)


HTM_MATCH

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  HTM_MATCH


 PURPOSE:
  Match two sets of ra/dec points using the Heierarchical 
  Triangular Mesh code.  This is an IDL wrapper for htmmatchc
  IDL DLM, and uses the DLM htm_index when these are not sent.
  This is very efficient for large search angles and large lists.
  May seem slow otherwise due to overhead creating htm indices.
  Currently returns all matches within the search radius.


 CATEGORY:
  Astronomy.


 CALLING SEQUENCE:
   htm_match, ra1, dec1, ra2, dec2, angle, m1, m2, distance12, $
               maxmatch=, $
               htmid2=, htmrev2=, $
               minid=, maxid=, $
               depth=, 
               file=, 
               status=


 INPUTS:
  ra1,dec1,ra2,dec2: ra,dec lists. Must be double precision.
  angle: The search angle in radians.  May be a scalar or an
     array same length as ra1,dec1.


 KEYWORD PARAMETERS:
  maxmatch=: The maximum number of allowed matches per point. Defaults
      to 100,000,000
  depth=: the depht of the HTM tree.  Defaults to 10.
  htmid2=: the htm indexes for the second list.  If not sent
      they are generated internally.
  htmrev2=: The result of
           h=histogram(htmid2-min(htmid20), min=0, rev=htmrev2) 
      If not sent will be created internally.
  minid=, maxid=: If htmrev2 is sent with these, there is no need
      to calculate htmid2.
  file=: A file into which will be written the indices and distances.
         When this keyword is sent, no arrays are returned.  This is
         useful when the match data will not fit into memory.
         The file is an unformatted binary file. It can be read with 
         htm_readbin() and converted to a FITS file with htm_bin2fits

 OUTPUTS:
  m1,m2: The indices of matches in list 1 and 2.
  distance12:  The distance between matches in radians.


 OPTIONAL OUTPUTS:
  status=: 0 is all well, 2 is no matches, 1 (or something else) 
      is failure.

 RESTRICTIONS:
  The C++ DLM htmmatchc must be compiled and in your IDL_DLM_PATH

 EXAMPLE:



 MODIFICATION HISTORY:
  Working version: 19-April-2006  Erin Sheldon NYU

(See pro/htm//htm_match.pro)


HTM_READBIN

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  htm_readbin

 PURPOSE:
  Read a binary output file created by htm_match into a structure.

 CALLING SEQUENCE:
  struct = htm_readbin(file, status=)

 INPUTS:
  file: The path to a binary file.

 OPTIONAL OUTPUTS:
  status: The status: 0 is success.

 MODIFICATION HISTORY:
  Created: 2006-08-15 Erin Sheldon, NYU

(See pro/htm//htm_readbin.pro)


ID2STRING

[Previous Routine] [Next Routine] [List of Routines]

 NAME: 
    ID2STRING
       
 PURPOSE: 
    Function outputs a string containing id of a photo object
    in the correct format: length 5 with zero padding.
	

 CALLING SEQUENCE: 
    result = id2string(id)
      
 INPUTS: 
    id: may be an array.
	
 REVISION HISTORY:
     Author: Erin Scott Sheldon  UChicago 25-Feb-2004
     Now just use a format string.  2006-10-07, Erin Sheldon, NYU
                                      

(See pro/sdss//id2string.pro)


IDLSTRUCT2FITS

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  idlstruct2fits

 PURPOSE:
  Convert idlstruct files back and forth from fits files.

 CATEGORY:
  File I/O

 CALLING SEQUENCE:
  idlstruct2fits, infiles, outfiles, /reverse, status=

 INPUTS:
  infiles: idlstruct file name(s).
  outfiles: fits file name(s).

 KEYWORD PARAMETERS:
  /reverse:  The infiles are actually a list of fits filenames
     and outfiles are a set of idlstruct file names.

 OPTIONAL OUTPUTS:
  status: 0 for success.

 MODIFICATION HISTORY:
  Created: 2005, ErinSheldon, UChicago

(See pro/idlstruct_files//idlstruct2fits.pro)


IDLSTRUCT_HCLEAN()

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  IDLSTRUCT_HCLEAN()

 PURPOSE:
  Remove internal tags from an idlstruct header.
    nrows, data_format, byte_order, idlstruct_version, 
    field_names, field_types, field_descriptions, field_lengthts
    field_input_formats

 CALLING SEQUENCE:
  newhdr = idlstruct_hclean(hdr, status=)

 INPUTS:
  hdr: An idlstruct header, as read by read_idlheader()

 OUTPUTS:
  The cleaned header, or -1 of all tags removed.

 OPTIONAL OUTPUTS:
  status: 0 for success.

 MODIFICATION HISTORY:
  Created  02-Jul-2004 Erin Sheldon, UofChicago

(See pro/idlstruct_files//idlstruct_hclean.pro)


IMPLOT_SETUP

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  IMPLOT_SETUP

 PURPOSE:
  Given an image, generate position vectors and xrange/yrange vectors which
  can be sent to plot

 CATEGORY:
  plotting

 CALLING SEQUENCE:
  implot_setup, image, xsize, ysize, px, py, xrange, yrange, /center

 INPUTS:
  image: image, dimenstions of which are used to generate display info


 KEYWORD PARAMETERS:
  /center: center the image


 OUTPUTS:
  xsize,ysize: size of the image in device units
  px,py: position vectors in device units
  xrange,yrange: can be sent to xrange/yrange keywords in plot

 EXAMPLE:
  ;; in X-windows
  implot_setup, image, xsize, ysize, px, py, xrng, yrng, /center
  tv, congrid(image, xsize, ysize),px[0],py[0]
  pos = [px[0], py[0], px[1], py[1]]
  
   plot, [0,0], [0,0], xstyle=5, ystyle=5, $
     title=title, $
     xrange=xrng, yrange=yrng, position=pos,$
     /noerase, /device, /nodata


 MODIFICATION HISTORY:
   2005 Erin Sheldon, NYU

(See pro/plotting//implot_setup.pro)


INTFUNC

[Previous Routine] [Next Routine] [List of Routines]

 NAME: 
    INTFUNC
       
 PURPOSE: 
    Make a cumulative integral function.  Basically just tabulate
    the integral up to each xi
	

 CALLING SEQUENCE:
   intfunc,f, x [, intfi, plot=plot]

 INPUTS: 
    f: the function
    x: the abcissae

 KEYWORD PARAMETERS:
         /plot: make a plot of the output function
       
 OUTPUTS: 
    the integrated function.

 CALLED ROUTINES: 
          INT_TABULATED
 

 REVISION HISTORY:
	Author: Erin Scott Sheldon UofM  1/??/99
       
                                      

(See pro/util//intfunc.pro)


KMAP

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
    KMAP

 CALLING SEQUENCE:
   kmap,xin,yin,xout,yout,kx,ky

 PURPOSE:
    this maps (xin,yin) to (xout,yout)
    with the transformation kx,ky
    that were presumably found with polywarp
    the formula is (summation over i,j)
    xout=(kx)ij * xin^j * yin^i
    yout=(ky)ij * xin^j * yin^i
    hence the two matrices kx and ky hold all the 
    transformation coefficients

(See pro/util//kmap.pro)


KMAP_INV

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
    KMAP_INV

 CALLING SEQUENCE:
    kmap_inv,x2,y2,x,y,kx,ky,kxi=kxi,kyi=kyi,npoints=npoints

 PURPOSE:
  this find the inverse map for kx and ky (any order)
  and applies it to x2,y2 to output x,y
  note that kx,ky does not in general have an inverse
  this procedure only works when the the map kx,ky is
  approximately a nonsingular linear transformation
  ie. the higher order terms do not dominate the map
  it works by first linearizing the map
  and finding the inverse matrix and using this to generate
  the approximate inverse map range (ie. the domain for kx,ky)
  using this range it maps test points to the x2,y2 neighborhood
  with kx,ky and uses polwarp on their image under the map kx,ky
  to find the right tranformation from x2,y2 to x,y
  it then applies this to x2,y2 to get x,y
  it then checks for accuracy
  then it returns kxi,kyi so that kmap can be used with these 
  for the inverse map in the future
  npoints is the number of points used to find the transformation
  if absent it will be set to the smaller of size(x2) or 10,000

(See pro/util//kmap_inv.pro)


LOGLABELS

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  LOGLABELS

 PURPOSE:
  Generate nice labels for a log plot. 

 CATEGORY:
  Plotting

 CALLING SEQUENCE:
  This is used with the [xyz]tickformat keyword to plotting routines. e.g.
  plot, x, y, /xlog, xtickf='loglabels'

 MODIFICATION HISTORY:
  Written by Erin Sheldon UofChicago

(See pro/plotting//loglabels.pro)


LUMDIST

[Previous Routine] [Next Routine] [List of Routines]

 NAME: 
    LUMDIST
       
 PURPOSE:
    calculate luminosity distance
    Currently only works for lambda = 0 universe.  See angdist_lambda.
	

 CALLING SEQUENCE: 
    result = lumdist(z, h=h, omegamat=omegamat, verbose=verbose, $
                   plot=plot,oplot=oplot)
      
 INPUTS:  
    z: redshift

 OPTIONAL INPUTS: 
    h: hubble parameter      default 1.
    omegamat:  omega matter  default 1.
       
 OUTPUTS: 
   dist in Mpc.

 REVISION HISTORY: Erin Scott Sheldon 2/24/99
                                      

(See pro/astro//lumdist.pro)


LUP2FLUX

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  lup2flux

 PURPOSE:
  convert SDSS luptitudes to flux; this has different conventions than lups2nmgy which gives the expected result for the princeton redux. 

 CATEGORY:
  SDSS specific routine

 CALLING SEQUENCE:
   lup2flux, mag, flux, magerr, fluxerr, b=b

 INPUTS:
   mag: magnitude array.  Can be either full 5-bandpass array or single.

 OPTIONAL INPUTS:
   magerr: err in mags.  If there then fluxerr will be returned.
   b=b: If single bandpass, must be specified with b=0, 1, 2, 3, or 4

 OUTPUTS:
   flux: Linear flux

 OPTIONAL OUTPUTS:
   fluxerr: only returned if err is sent.


 MODIFICATION HISTORY:
   ??-??-?? Dave Johnston. Translation of Zeljko's SM code

(See pro/sdss//lup2flux.pro)


LUPS2NMGY

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
   lups2nmgy

 PURPOSE:
   Convert asinh mags, or luptitudes, to nanomaggies.

 CATEGORY:
   SDSS

 CALLING SEQUENCE:
   nmgy = lups2nmgy(lups, lups_err=, band=, ivar=)

 INPUTS:
   lups: Asinh mags, or luptitudes. May be a scalar or array.  If 
       a [nband,n] array and nband is not 5 then the band= argument 
       must be sent to specify the bands present.

 OPTIONAL INPUTS:
   lups_err: The mag errors.
   band: The bandpasses present. Default [0,1,2,3,4]

 OUTPUTS:
   Nanomaggies.

 OPTIONAL OUTPUTS:
   ivar: Inverse variance of nanomaggies. If lups_err is sent 
       then ivar may be returned through a named variable.

 MODIFICATION HISTORY:
   2007-04-?? Erin Sheldon, NYU.  

(See pro/sdss//lups2nmgy.pro)


MAKEGAUSS

[Previous Routine] [Next Routine] [List of Routines]
 NAME: 
    makegauss

 PURPOSE: 
    make an array with values set to a gaussian. Assumes center of
    pixel is (0,0), same as the adaptive moment code. Note, SDSS
    convention is that bottom-left corner is (0,0)
    Dave J.  My changes E.S.S.

(See pro/util//makegauss.pro)


MAKE_CLFLAG_STRUCT

[Previous Routine] [Next Routine] [List of Routines]

 NAME:  
    MAKE_CLFLAG_STRUCT
    
 PURPOSE:  
    Sets up parameter structure for galaxy classification flag selection.
    

 CALLING SEQUENCE:
     make_clflag_struct,clflag_struct
    

 INPUTS: 
     clflag_struct:  classification flag structure


 REVISION HISTORY:  Judith Racusin 6/15/00, modified from make_flag_struct by Tim Mckay
    
       
                                      

(See pro/classgal//make_clflag_struct.pro)


MAKE_CMODEL_COUNTS

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  MAKE_CMODEL_COUNTS


 PURPOSE:
  Create model magnitudes by combining the exponential fit with the
  devaucoleur fit using cflux = fracpsf*devflux + (1.0-fracpdf)*expflux


 CATEGORY:
  SDSS specific routine


 CALLING SEQUENCE:
  make_cmodel_counts, cat, cmodel, cmodelerr


 INPUTS:
  cat: must contain these tags:
    COUNTS_DEV, COUNTS_DEVERR
    COUNTS_EXP, COUNTS_EXPERR
    FRACPSF
    FLAGS

 OUTPUTS:
  cmodel, cmodelerr: combined model mags and error

 PROCEDURE:
  cflux = fracpsf*devflux + (1.0-fracpdf)*expflux

 MODIFICATION HISTORY:
  ??-??-??: Ryan Scranton Pitt
  02-Apr-2004: Added /defaults keyword.  For bad measurements, just copy in
               the default -9999. for measurements and errors.

(See pro/sdss//make_cmodel_counts.pro)


MAKE_COLOR_FLAG

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
	make_color_flag
PURPOSE:
	takes the str from search color_space
	and sets the flag depending on whether the object
	lies in that region of color space (and size-mag space)
	flag values are anded together
	they range from 0 to 15  (four different bits may be set
	depending on whether that object is in each region)
	objects in all four regions have flag=15

CALLING SEQUENCE:
	-syntax make_color_flag,cat,str,flag,
	 psfcounts=psfcounts,petrocounts=petrocounts

INPUTS:
	cat : the sdss photo output structure
	str : the structure output by search_color_space 
	
OUTPUTS:
	flag : the flag arrays, each obejct has a nember 0 to 15	

KEYWORDS:
	psf : if set will use psfcounts rather than the
		    default fibercounts
	petro : if set will use petrocounts rather than the
		    default fibercounts

EXTERNAL CALLS:
	none
	
METHOD:
	just extract the value in each region of str.map
	and sum them
	see search_color_space for details
	
EXAMPLE

NOTES

HISTORY:  written by David Johnston -University of Chicago
	Physics Department 1999

(See pro/sdss//make_color_flag.pro)


MAKE_DEVAUC

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
   MAKE_DEVAUC

 PURPOSE:
 Dave Johnston's code.  My Changes. E.S.S.
 This code makes de Vaucouleurs intensity profile, used for elliptal galaxies

(See pro/util//make_devauc.pro)


MAKE_EXP

[Previous Routine] [Next Routine] [List of Routines]
 NAME: 
    make_exp

 PURPOSE: 
    make an array with values set to an ellitical exponential.

(See pro/util//make_exp.pro)


MAKE_GAUSSIAN

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
   MAKE_GAUSSIAN

 PURPOSE:
   make an array with a gaussian in it

(See pro/util//make_gaussian.pro)


MAKE_RAINBOW()

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  make_rainbow()

 PURPOSE:
  Return a set of N colors equally spaced along the rainbow. By default
  the colors start at the blue end.  For X the colors range from a dark
  violet to red. For PS they range from black to red.  The order of colors
  may be reversed with the corresponding keyword.

 CALLING SEQUENCE:
  colors = make_rainbow(number_of_colors, /reverse)

 INPUTS:
  number_of_colors:  The number of colors to be returned.

 KEYWORD PARAMETERS:
  /reverse: Normally the colors start from the blue end. If /reverse is
     set then they start from the red end.

 OUTPUTS:
  The colors.

 EXAMPLE:
  col = make_rainbow(25)
  for i=0L, 24 do oplot, x[i,*], y[i,*], color=col[i]

 MODIFICATION HISTORY:
  Created: 2007-01-23, Erin Sheldon, NYU

(See pro/plotting//make_rainbow.pro)


MARKXY

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  MARKXY


 PURPOSE:
  Mark the specified x,y point on the current device using one of the 
  pre-defined marks.  These include a cross with a user-defined hole at
  the center, a circle, an ellipse, or a box.  The details can be all
  specified with a mark structure, or by specifying each separately.


 CATEGORY:
  Plotting

 CALLING SEQUENCE:
  markxy, markstruct -OR- radius, x, y, 
       mark_type=, 
       /cross, hole_fraction=, 
       /box, 
       /circle, 
       /ellipse, axis_ratio=, pos_angle=,
       color=, linestyle=, _extra=


 INPUTS:
  Either of the following formats:
    markstruct: a structure defining the mark.  Can contain the following:
       x, y, radius, mark_type, hole_fraction, axis_ratio, pos_angle,
       color, linestyle

    radius, x, y:  The basics for the mark, with other info being specified 
       through keywords.  These can all be set with a markstruct as well.


 OPTIONAL INPUTS:
    /cross: Use a cross for the mark (default).
    hole_fraction: The size of the hole in the cross as a percentage. Default
       is 1/3

    /box: Mark the position with a box
    /circle: Mark the position with a circle

    /ellipse: Mark the position with a ellipse
    axis_ratio: axis ratio of ellipse. Default 1.
    pos_angle: position angle of ellipse.  default is 0.

    color=, linestyle=: Style for drawing marks.
    _extra: extra stuff sent to plot routine.

 EXAMPLES:
   IDL> markxy, radius, x, y, /box

   IDL> markstruct = {x: 2.5, y: 2.6, type:'circle', color:!red}
   IDL> markxy, markstruct
   
 MODIFICATION HISTORY:
  Created: sometime in 2005.  Documented, andded to archive, 23-Sep-2005.
     Erin Sheldon, Uchicago/NYU

(See pro/plotting//markxy.pro)


MARK_RADEC

[Previous Routine] [Next Routine] [List of Routines]

 NAME: 
    mark_radec
       
 PURPOSE: 
    Marks an ra and dec position on the current display using the input
    mapping structure.  The default mark is a cross centered on the
    position, with a hole at the center

 CALLING SEQUENCE: 
    mark_radec, mapStruct, radius, ra, dec
      
                 

 INPUTS: mapStruct: Structure containing the info needed to map ra/dec to x-y
            position.  The map structure is created using the CREATE_PHOTOMAP
            procedure.  procedure.  
         radius: radius of the mark in data coordinates.
         ra, dec: the ra and dec to be circled.

 INPUT KEYWORD PARAMETERS:
         /cross: use a cross to mark the ra/dec.
         hole_fraction: leave a central hole in the cross with this fraction 
                   of radius.

         /box: use a box instead of a circle.  radius will be side of box.

         /ellipse: use an ellipse. Largest side of ellipse is set to radius.
         axis_ratio: The axis ratio of the ellipse
         pos_angle: position angle of ellipse in degrees.

         order=: order=0 (default) means images was plotted 0,0 in bottom
                 left,  order=1 is top left.  Note objx,objy
                 is still given in the original coord. system. User must input
                 ny for the transformation.
         ny=: number of pixels in the y-direction.
         /silent: Shut off the messages except errors.

       
 OUTPUTS: A mark is drawn on the current device.

 EXAMPLE:
  map_order = 1
  create_photomap, $
    map_order, $
    pstruct.ra, pstruct.dec, pstruct.rowc[2], pstruct.colc[2], mapStruct

  ;.....plot some image
  xoffset = objx - pstruct[id].colc[2]
  yoffset = objy - pstruct[id].rowc[2]

  mark_radec, mapStruct, ra, dec, 30.0, $
     /cross, holeradius = 10.0, $
     xoffset=xoffset, yoffset=yoffset

 CALLED ROUTINES: 
    CREATE_PHOTOMAP
    TVCIRCLE
    TVBOX
    PLOT_CROSS

 REVISION HISTORY:
	Author: Erin Scott Sheldon UChicago  18-Oct-2004
                                      

(See pro/sdss//mark_radec.pro)


MATCH_DUP

[Previous Routine] [Next Routine] [List of Routines]

 NAME:
    match_dup
       
 PURPOSE:
    Find the matching elements of two arrays of integers (arr1 and arr2), 
    each of which may have duplicates.  Unlike the match.pro program, 
    match arrays (match1 and match2) may not correspond directly 
    due to the possibility of duplicates.  However, one can use the 
    reverse_indices arrays to find that correspondence (if /SORT is not set)

 CALLING SEQUENCE:
    match_dup, arr1, arr2, match1, match2, $
               numlist1=, h1=, reverse_indices1=, $
               numlist2=, h2=, reverse_indices2=, $
               /SORT

 INPUTS: 
    arr1: integer array which may contain duplicates.
    arr2: integer array which may contain duplicates.


 KEYWORD PARAMETERS:
    /sort:  use a sorting algorithm to find matches instead of histogram.
      This is generally slower (~factor of 2), but may be better for sparse 
      arrays containing large integers, which may cause memory
      problems for histogram.  numlist, h, and rev_arr are not available
      when this keywod is set.
       
 OUTPUTS: 
    match1: match indices for first array.
    match2: match indices for second array. 

 OPTIONAL OUTPUTS: 
    ** these only returned if n_elements(arr1) gt 1 and
    ** n_elements(arr2) gt 1, and the /SORT keyword is not set
    numlist1: Total num. of matches for each unique element that 
               matched
    h1: the histogram of arr1 in intersection(arr1,arr2)
    reverse_indices1=reverse_indices1: the reverse indices from the 
         histogram function on arr1
    ** same for arr2

 CALLED ROUTINES:
    histogram
    match 
    uniq

	
 REVISION HISTORY:
    29-May-2002: Erin Scott Sheldon UofMich in IDL v5.2

(See pro/util//match_dup.pro)


MATCH_MULTI

[Previous Routine] [Next Routine] [List of Routines]

 NAME:
   match_multi 
       
 PURPOSE:
   Find the elements of an array of integers (arr2, which may contain
   duplicates) which have a match in another array (arr1, which may not
   contain duplicates).

 CALLING SEQUENCE:
    match_multi, arr1, arr2, match2, numlist=, hist=, $
       match1=, dupmatch1=, reverse_indices=

 INPUTS: 
    arr1: integer array containing unique integers
    arr2: integer array which may contain duplicates.

 OUTPUTS: 
    match2: match indices. The indices of the second list that have matches
          in the first. 

 OPTIONAL OUTPUTS:
   numlist: the number that matched each element in arr1
   hist: the histogram of arr2, for numbers 0 to max(arr1)
   reverse_indices: the reverse indices from the histogram function on arr2
   match1: The array of match indices from array 1.  This may not be the same
       length as the match array for array 2.  See dupmatch1 for that.
   dupmatch1: An array of matches from array 1 that correspond direclty
       to all matches from array2.  E.g.
           arr1 = [0,2,3,5,6]
           arr2 = [2,3,3,4,5,6,6,7]
           match_multi, arr1, arr2, m2, match1=m1, dupmatch1=dm1
             1           0
             2           1
             2           2
             3           4
             4           5
             4           6

 CALLED ROUTINES:
    histogram
 
 PROCEDURE: 
    see code
	

 REVISION HISTORY:
    Jun-18-2002: Erin Scott Sheldon UofMich
       Adapted from the old match2rand program
                                      

(See pro/util//match_multi.pro)


METHODS

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  methods

 PURPOSE:
  Display a list of methods for the input IDL class.

 CALLING SEQUENCE:
  methods, classname, grepfor=

 INPUTS:
  classname: The class name in string form.

 OPTIONAL INPUTS:
  grepfor: A string to grep for in the list of methods.
    Only lines that match the patter will be displayed.

 EXAMPLE:
  IDL> methods, 'postgres'


 MODIFICATION HISTORY:
   Created: 2006, Erin Sheldon, NYU

(See pro/files//methods.pro)


MFACT

[Previous Routine] [Next Routine] [List of Routines]
 NAME: 
    mfact

 PURPOSE: 
    find the factorial of each element in an array.

 CALLING SEQUENCE:
    result = mfact(array)

 INPUTS: 
    array (of numbers)

 OUTPUTS: 
    farray: the array of factorials.

 REVISION HISTORY:
   Author: Erin Scott Sheldon UofM  5/??/98

(See pro/util//mfact.pro)


MKSTR

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  MKSTR

 PURPOSE:
  Make a string of a give length.  Default is an empty string, but a value can be sent. Can optionally make string arrays.

 CATEGORY:
  String manipulation.

 CALLING SEQUENCE:
  str = mkstr(len [, d1, ..., d8, val=)

 INPUTS:
  len: The length of of the string.

 OPTIONAL INPUTS:
  d1...d8:  The size of up to 8 dimensions (IDL's limit).

 KEYWORD PARAMETERS:
  val=:  The value of each string element.  By default it is a space ' '.

 OUTPUTS:
  The string.


 MODIFICATION HISTORY:
  Created 24-May-2005.  Author Erin Sheldon UofChicago

(See pro/util//mkstr.pro)


MOM2SEEING

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
    MOM2SEEING

 PURPOSE:
    Take the adaptive moments of the psf and convert this a "seeing" value 
    or FWHM assumes the psf is Gaussian

 CALLING SEQUENCE:
    mom2seeing, mom, seeing

 MODIFICATION HISTORY:
    Creation:  ??-??-?? Dave Johnston, UofChicago

(See pro/astro//mom2seeing.pro)


MRDFITS3

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
       MRDFITS3

 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 

 CALLING SEQUENCE:
       Result = MRDFITS3( fileunit,[Extension, Oldextension, Header],
                       /deja_vu, 
                       /FSCALE , /DSCALE , /USE_COLNUM, /NO_TDIM,
                       RANGE=[a,b], Columns=[a,b,...]), error_action=x

 INPUTS:
       Fileunit = Unit of opened file. Position in file will be saved
             after call.

       Extension= Extension number to be read, 0 for primary array.
                  Assumed 0 if not specified.
       Oldextension= the previous extension position.

 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.  Column names are truncated to 15 characters
               if longer, spaces are removed, and invalid characters
               are replaced by underscores.
               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.  If the length
               of each element of a variable length column is 0 then
               the column is deleted.

               For FITS files with more than 127 columns, data in the first
               64 elements of the structure are stored in the primary
               structure, the next 64 as a substructure of the 65th
               element, the next 64 as a substructure of the 66th element
               and so forth.

 OPTIONAL OUTPUT:
       Header = String array containing the header from the FITS extenion.

 OPTIONAL INPUT KEYWORDS:
       DEJA_VU: if set, mrdfits3 reads into the previously defined 
           struct. Saves much time when mrdfits3 is called repeatedly
           to read from files that all have the same structure.
       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.
       DSCALE - As with FSCALE except that the resulting data is
                stored in doubles.
       SILENT - Suppress informative messages.
       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].
       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.
       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.
       NO_TDIM  - Disable processing of TDIM keywords.  If NO_TDIM
                is specified MRDFITS will ignore TDIM keywords in
                binary tables.
	TEMPDIR - The tempdir keyword allows the user to specify
		 the directory where temporary files may be created.
		 This directory should be both in the IDL path
                and writable by the user.
	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. (If USE_COLNUM is specified this 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.
       ERROR_ACTION - Set the on_error action to this value (defaults
                to 2).

 EXAMPLE:
       Read a FITS primary array:
               a = mrdfits('TEST.FITS')    or
               a = mrdfits('TEST.FITS', 0, header)
       The second example also retrieves header information.

       Read rows 10-100 of the second extension of a FITS file.
               a = mrdfits('TEST.FITS', 2, header, range=[10,100])

       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)

 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.

 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, IEEE_TO_HOST, FXPOSIT, IS_IEEE_BIG()
           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
	Converted to IDL V5.0   W. Landsman  2-Nov-1997
       Modified by Phil Fisher from MRDFITS
       Modified by Dave Johnston from MRDFITS2
       Changed all sub-programs to end in *3 so they will not conflict
       with new versions. Erin Scott Sheldon

(See pro/fits//mrdfits3.pro)


MRDFITS_MULTI

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  MRDFITS_MULTI

 PURPOSE:
  Read binary tables from multiple FITS files using mrdfits. Return
  a single structure containing all data.

 CALLING SEQUENCE:
  struct = mrdfits_multi(files, $
                         extension=, $
                         /diff, $
                         columns=, $
                         /unsigned=, $
                         /compress, $
                         count=, $
                         /silent, $
                         error_action=, $
                         status=)


 INPUTS:
  files: A set of fits file names.

 OPTIONAL INPUTS:
  extension=: the extension to read from each file. Default is 1.
  columns: The columns to read.

 KEYWORD PARAMETERS:
  /diff:  This informs that the structures from each file may be different. A
         slower but safer method is used that defines the output structure
         based upon the first file and just copies the matching tags
         afterward.
  /unsigned,/compress, /silent, error_action=, status=: See mrdfits

 OUTPUTS:
  Combined structure.

 OPTIONAL OUTPUTS:
  count: the total count of rows read.

 MODIFICATION HISTORY:
  Author: Erin Sheldon, NYU
  Documented: 2006-July-21.  E.S.

(See pro/fits//mrdfits_multi.pro)


MRDFITS__DEFINE

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
     MRDFITS__DEFINE

 PURPOSE:
     Read all standard FITS data types into arrays or structures. This is a
     version that is methods so we can access some of the routines outside of
     mrdfits.

 EXPLANATION:
      Further information on MRDFITS is available at
      http://idlastro.gsfc.nasa.gov/mrdfits.html 

 CALLING SEQUENCE:
      Result = MRDFITS( Filename/FileUnit,[Extension, Header],
                       /FSCALE , /DSCALE , /UNSIGNED,
                       ALIAS=strarr[2,n], /USE_COLNUM,
                       /NO_TDIM, ROWS = [a,b,...], $
                       /POINTER_VAR, /FIXED_VAR,
                       RANGE=[a,b], COLUMNS=[a,b,...]), ERROR_ACTION=x,
                       COMPRESS=comp_prog, STATUS=status, /VERSION )

 INPUTS:
      Filename = String containing the name of the file to be read or
                 file number of an open unit.  If a unit is specified
                 if will be left open positioned to read the next HDU.
                 Note that the file name may be of the form
                 name.gz or name.Z on UNIX systems.  If so
                 the file will be dynamically decompressed.
      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

      Extension= 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.

 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.
       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.
       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)
       /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.   
               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:
       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.

       As of version 2.5 MRDFITS support 64 bit integer data types.
       These are not standard FITS.  64 bit data also requires
       IDL version 5.2 or greater.
    

 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, IEEE_TO_HOST, FXPOSIT, FXMOVE(), IS_IEEE_BIG()
           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
       Converted to IDL V5.0   W. Landsman  2-Nov-1997
       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

(See pro/fits//mrdfits__define.pro)


MULTIPLOT

[Previous Routine] [Next Routine] [List of Routines]
 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.

       erase & multiplot, [4,3], /square, gap=0.1, mXtitle='R', mYtitle='F(R)'
       for i=0,4*3-1 do begin
           plot, 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
	Converted to IDL V5.0   W. Landsman   September 1997
       
   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
      

(See pro/plotting//multiplot.pro)


MUNU2ROWCOL

[Previous Routine] [Next Routine] [List of Routines]

 NAME:
   munu2rowcol 
       
 PURPOSE:
    convert from great circle coordinates to row/col, ignoring higher
    order terms in the transformation. Good to .1 pixels or so

 CALLING SEQUENCE:
    munu2rowcol, trans, field, mu, nu, row, col, ri=, /nonlinear, status=

 INPUTS: 
    trans: the astrans file for this run,camcol,bandpass. Use 
          READ_ASTRANS to get the astrans file.
    field: the field
    mu,nu: great circle coordinates

 Optional Inputs:
    ri=: the r-i color used in color term of transform
    /nonlinear:  use a non-linear transform.

 OUTPUTS: 
    row,col: row/col in the bandpass of the trans structure

 OPTIONAL OUTPUTS:
    status: 1 for success, 0 for failure

 REVISION HISTORY:
    15-AUG-2002 Creation.  Erin Scott Sheldon UofMich
       
                                      

(See pro/sdss//munu2rowcol.pro)


NMGY2LUPS

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
   nmgy2lups

 PURPOSE:
   Convert flux in nanomaggies to asinh mags, or luptitudes. 

 CATEGORY:
   SDSS

 CALLING SEQUENCE:
   lups = nmgy2lups(nmgy, ivar=, band=, lups_err=)

 INPUTS:
   nmgy: Flux in nanomaggies.  May be a scalar or array.  If 
       a [nband,n] array and nband is not 5 then the band= argument 
       must be sent to specify the bands present. There some ambiguity
       when the input is an array of 5 and band is not sent. The code
       assumes this is 5-band input for a single object.

 OPTIONAL INPUTS:
   ivar: The inverse variance of the flux, same shape as nmgy.
   band: The bandpasses present. Default [0,1,2,3,4]

 OUTPUTS:
   Asinh mags, or luptitudes.

 OPTIONAL OUTPUTS:
   lups_err: If ivar is sent then lups_err may be returned through
       a named variable.

 EXAMPLE:
   st = pgsql_query('select * from datasweep limit 1000')
   lups = nmgy2lups(st.modelflux)

 MODIFICATION HISTORY:
   2007-04-?? Erin Sheldon, NYU.  Got much from Blanton's maggies2lups
       but added some extra functionality, error handling, and units of
       nanomaggies.

(See pro/sdss//nmgy2lups.pro)


NTOSTR

[Previous Routine] [Next Routine] [List of Routines]

 NAME: 
    ntostr
       
 PURPOSE: 
    Convert a number to a string.  Cuts off white spaces.
	
 CALLING SEQUENCE: 
    result = ntostr(num, format=)

 INPUTS: 
    num:  the object to be converted. May be an array.

 OPTIONAL INPUTS:
   format= The format to send to the string() function.  This is the
      most natural way to format the output.

 EXAMPLES:
  IDL> print,ntostr(3.528162895)
  3.52816
  IDL> print,ntostr(3.528162895,format='(F10.2)')
  3.53
  IDL> print,ntostr([3.528162895,421.3812166],format='(F10.2)')
  3.53 421.38
  IDL> print,ntostr([32,157231],format='(I20.5)')
  00032 157231

 REVISION HISTORY:
	Author: Erin Scott Sheldon  UofM 6/1/99
       Added format keyword.  Some time in 2002, ESS, UChicago                                      

(See pro/util//ntostr.pro)


OBJ_INFO

[Previous Routine] [Next Routine] [List of Routines]
 NAME: 
    OBJ_INFO
       
 PURPOSE: 
    For a list of objects (index) make color-color diagrams, size
    vs brightness plot, find its family, and make its own 
    FINDING CHART.

 WARNING: write_gif will not work if plot window is minimized.  i.e. you
          won't have good gifs when you are done if it is minimized.
	

 CALLING SEQUENCE: obj_info, pstruct, index, clr, dir=dir, radius=radius, 
        gif=gif, ps=ps, outdir=outdir,fchart=fchart, all=all, 
        noprompt=noprompt, silent=silent, nodisplay=nodisplay,
	 hideradec=hideradec
                       
 INPUTS: pstruct: photo structure.  
         IMPORTANT NOTE: This MUST have objc_rowc as a continuously added 
             number, not restarted at the beginning of each frame.  Such
             boundaries are artificial and make it difficult to make 
             finding charts centered on the object.  
             This is done automatically by READ_PHOTO_COL.

         index:  The objects for which to get info.
         clr: The color to use when making the fchart.

 INPUT KEYWORD PARAMETERS: 
           dir:      The directory holding the atlas images.
           radius:   The finding chart for each object will have sides
                     2*radius unless radius is too big. (e.g. radius > 2048)
           radarcsec: radius in arcseconds (takes precedence over radius)
           radarcmin: radius in arcminutes (takes precedence over radarcsec)
           gif:      Set gif keyword to print gifs of all images in cwd.
           ps:       Set ps keyword to print postscripts of all images.
           outdir:   Where to put the output files
           all:      If all is set, then all objects (not just stars) 
                       are used for the locus of the color-color plots
           noprompt: If noprompt is set, then there is no prompting
           silent:   If silent is set, there will be no messages except
                        for some errors.
	    hideradec: If set it will not include ra dec on anything
		       for example if you are showing unpublished results
		       at a conference and want to be descreet.
           hist:   Will hand this to plot_colors to use 2D histograms
                   instead of scatter plots. Good for large catalogs.
           radrange:  range on petrorads to plot. handed to plot_colors

 OUTPUTS: Files:  (only output if /gif or /ps is used)

     a) The following files are created in the cwd for each object:

            Obj-run-rerun-colorcamcol-field-id-type.extension

        examples:
            Obj-000259-1-3-0248-0234-atlas.gif
            Obj-000259-1-3-0248-0234-atlas.ps
            Obj-000259-1-3-0248-0234-colors.gif
            Obj-000259-1-3-0248-0234-colors.ps
            Obj-000259-1-3-0248-0234-fchart.gif
            Obj-000259-1-3-0248-0234-fchart.ps

     b) If index contains more that one object then a color-color plot is
        made with all of them in it.  It uses the entire pstruct
        to make the locus
	The file name is:
            Obj-000259-1-3-0248-0234-colors-multi.gif
	with the info refering to the FIRST object in the list

 OPTIONAL OUTPUTS: fchart:  The image of the fchart may be returned.

           
 CALLED ROUTINES:  EXTRACT_STARS:
                      MAKE_FLAG_STRUCT
                      FLAG_SELECT
                   PLOT_COLORS
                   BEGPLOT
                   ENDPLOT
                   GET_FAMILY:
                      GET_ATLAS (calls many pros)
                   FCHART
                   DISPLAY_FCHART
                   

 SUBROUTINES: OBJ_PROMPT_USER, OBJ_DISPLAY_FCHART

 EXAMPLES:  This will work on sdss3 if typed exactly:
   (Until we move the data)

 IDL> file='/sdss3/data4/run109/tsObj-000109-3-0-0011.fit'
 IDL> read_photo_col, file, pstruct, struct_typ='all', nframes=20

 IDL> dir='/sdss3/data4/run109/'
 IDL> r=2
 IDL> index = 1002
 IDL> obj_info, pstruct, index, r, dir=dir
 
    Lets say you have a program that selects quasars.  It returns the
      indices of the quasars. Also, you want to generate all the ps and gif
      files at once without any keyboard prompting:

 IDL> findqso, pstruct, index
 IDL> obj_info, pstruct, index, r, dir=dir, /noprompt, /ps, /gif

   If you only want to make the ps files:

 IDL> obj_info, pstruct, index, r, dir=dir, /noprompt, /nodisplay, /ps 

 REVISION HISTORY:  
      Author: Erin Scott Sheldon  UMich 03/21/99
	       David Johnston - changed filename formats to what is described 
                    above. Fixed some bugs with the 'sky' program 5/12/99
              E.S.S.  Made obj_display_fchart in to stand alone proc.
                    display_fchart.pro
              E.S.S.:
              Changed order in names/titles: run-rerun-camcol-field-id
              Addec radarcsec keyword.
	       Added outdir keyword 02-Jul-2002
	


(See pro/sdss//obj_info.pro)


PARSE_CONFIG

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  PARSE_CONFIG


 PURPOSE:
  Parse simple 2 column "option value" config file. Each is read in as a 
    string. Everything to the right of a comment character # is ignored,
    as are empty lines. The outputs are string arrays for the keywords
    and values.  A optional output 'struct' is a structure with each keyword
    value pair as tag and value in the structure.

 CALLING SEQUENCE:
  parse_config, config_file, keywords, values

 INPUTS:
  config_file: full path to file

 OUTPUTS:
  keywords: the names of the config variables
  values: values of config variables

 OPTIONAL OUTPUTS:
  status=: 0 if success

 MODIFICATION HISTORY:
  ??-??-2002  Erin Sheldon UofMichigan
  02-Apr-2004: Allow comments, empty lines

(See pro/util//parse_config.pro)


PATH_JOIN

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
   path_join

 PURPOSE:
   Join path elements using the default path separator, such as directory and filenames.

 CALLING SEQUENCE:
   f = path_join(path1, path2) ; e.g. directory, path

 INPUTS:
   path1, path2: Path elements.  The first must be a scaler. For example:
       path1 could be a directory and path2 a filename.  Each element can contain 
       path elements. path2 May be an array.

 OUTPUTS:
   New path with all paths joined.

 EXAMPLE:
   On UNIX:
       IDL> print,path_join('/blah/stuff', 'tmp/things.txt')
       /blah/stuff/tmp/things.txt

 MODIFICATION HISTORY:
   Moved to main archive: 2007-04-22, Erin Sheldon, NYU

(See pro/files//path_join.pro)


PHOTOID

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
   PHOTOID


 PURPOSE:
   Create unique super id from run,rerun,camcol,field,id


 CATEGORY:
   SDSS Specific routine.


 CALLING SEQUENCE:
   superid = photoid(run,rerun,camcol,field,id)
    OR
   superid = photoid(struct)


 INPUTS:
   run,rerun,camcol,field,id (may be arrays)
    OR
   struct: must contain the above (may be array of structs)

 OUTPUTS:
   A superid is returned

 PROCEDURE:
   super = id + field*10^6 + camcol*10^11 + rerun*ten^12 + run*ten^15

 MODIFICATION HISTORY:
   Created ??-??-2002 Erin Sheldon UofMichigan



  Copyright (C) 2005  Erin Sheldon, NYU.  erin dot sheldon at gmail dot com

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

                                       

(See pro/sdss//photoid.pro)


PHOTOID2CASID

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  photoid2casid

 PURPOSE:
  Convert a set of photoids to CAS ids (skyserver ids)

 CATEGORY:
  SDSS

 CALLING SEQUENCE:
  cid = photoid2casid(pid)

 INPUTS:
  pid: A scalar or array of photoids as created by the photoid.pro
   program.

 OPTIONAL OUTPUTS:
  sky_version, first_field. Extra info kept in CAS ids not 
    kept in photoids.  See the casid() program for more info.

 OUTPUTS:
  casid(s).  

 MODIFICATION HISTORY:
  Created: 2007-04-03. Erin Sheldon, NYU

(See pro/sdss//photoid2casid.pro)


PHOTOID_EXTRACT

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
   PHOTOID_EXTRACT

 PURPOSE:
   Extract run,rerun,camcol,field,id from a superid (Ulong64) created with
   the photoid.pro function.

 CATEGORY:
   SDSS specific routine

 CALLING SEQUENCE:
   photoid_extract, super, run, rerun, camcol, field, id

 INPUTS:
   super: A super id created using the photoid.pro function

 OUTPUTS:
   run,rerun,camcol,field,id

 EXAMPLE:
   superid = photoid(run,rerun,camcol,field,id)
   photoid_extract, superid, run, rerun, camcol, field, id

 MODIFICATION HISTORY:
   Created: 5/30/2003 Erin Sheldon UofChicago

(See pro/sdss//photoid_extract.pro)


PHOTOMAP

[Previous Routine] [Next Routine] [List of Routines]

 NAME: 
   PHOTOMAP
       
 PURPOSE: 
     map ra and dec to row and col.  The map centers on the first
     ra-dec position in the lists.
     NOTE: If clr is not given, then the program uses
           RED (clr=2) to find the map.
	

 CALLING SEQUENCE:
    photomap, pstruct, order, ra, dec, row, col
                 

 INPUTS: 
     pstruct: a photo structure.  Should cover ra and dec.
         order: order of polynomial to fit
         ra: the ra positions to trasform in degrees.
         dec: the dec positions to transform in degrees.

 OPTIONAL INPUTS: clr:  The index to use for mapping.

 OUTPUTS: row, col:  mapped ra and dec positions.

 CALLED ROUTINES:
                CONVERT2XY
                POLYWARP
                KMAP
 

 REVISION HISTORY:
	Erin Scott Sheldon  U of Michigan  7/8/99
       
                                      

(See pro/sdss//photomap.pro)


PHOTO_MATCH

[Previous Routine] [Next Routine] [List of Routines]

 NAME:
    PHOTO_MATCH
       
 PURPOSE:
    Match to lists of photo objects by their run, rerun, camcol, field, 
    and rerun.  This uniquely defines each object.  

 CALLING SEQUENCE:
    photo_match, run1, rerun1, camcol1, field1, id1, $
                 run2, rerun2, camcol2, field2, id2, $
                 matches1, matches2,
                 count=count, /silent

 INPUTS: 
    run1, rerun1, camcol1, field1, id1:   unique info for object list #1
    run2, rerun2, camcol2, field2, id2:   unique info for object list #2

 OPTIONAL INPUTS:
    None.

 KEYWORD PARAMETERS:
    /silent: don't print out removal of duplicates
       
 OUTPUTS: 
    matches1, matches2:  match indices for each list.

 OPTIONAL OUTPUTS:
    count: number of matches

 CALLED ROUTINES:
    MATCH
 
 PROCEDURE: 
    Match two photo lists putting their run,rerun,camcol,field,id
    into one super index which is a 64 bit number encoding these
    to a unique number . Then a regular "sort match" can be run
    this is therefore a n_log(n) algorithm. Duplicates are
    removed before matching.
	
 REVISION HISTORY:
    Dave Johnston  11/12/99  UChicago
    Remove Duplicates: Erin S. Sheldon ??  UofMich
    David Johnston: fixed bug that limited runs to 1844 by taking away
      an uneeded digit from camcol ,added check for values that are too big
      the bug would probably never cause a mismatch even for run > 1844.
      added a check for things out of range.  04/07/2003 

(See pro/sdss//photo_match.pro)


PIXEL_MASKFLAGS_SELECT

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  PIXEL_MASKFLAGS_SELECT


 PURPOSE:
  Select objects based on their SDSSPIX flags.


 CATEGORY:
  SDSS routine.


 CALLING SEQUENCE:
  pixel_maskflags_select, maskflags, keep, nkeep, /noedges, /twoquad, 
                          out=out, nout=nout


 INPUTS:
  maskflags: The maskflags for a set of objects, as output by the 
             sdsspix_mask DLM

 KEYWORD PARAMETERS:
  /noedges: No edges can be hit.
  /twoquad: Its ok if two adjacent quadrants don't hit an edge.


 OUTPUTS:
  keep=: The indices which pass the mask.
  nkeep=: The number that passed.


 OPTIONAL OUTPUTS:
  out=: The indices of objects that were masked.
  nout=: The number that were masked.

 MODIFICATION HISTORY:
  Created: Erin Sheldon, UofChicago, sometime in 2003.

(See pro/sdsspix//pixel_maskflags_select.pro)


PLOTH

[Previous Routine] [Next Routine] [List of Routines]
 NAME:		
		ploth

PURPOSE:	like plotting points but makes a two dimentional
		histogram first and displays that as an image with tvim2
		and returns a histogram structure

CALLING SEQUENCE:
	 ploth,x,y,hist,median=3

INPUTS:	 
	x ,y : the two one-dimentional arrays that you want histogrammed

OUTPUTS:
	hist : the histogram structure contains 3 fields
	.map (the 2D array) , .xrange, .yrange (the two ranges)
	these ranges permit mapping from the data to the histogram map
	and vice versa

KEYWORDS:
	xrange,yrange : the range to include data from
	these are output and saved in the hist structure
	the default is min, max
	if these are flipped like [12,3]
	it will use 3 as min and 12 as max and then flip the histogram
	
	nxbins, nybins : the number of bins for each dimention

	range : the display range given to tvim2
		default is to go around the mean by three sigma
		uses sigma clipping algorithm

	log, sqrt : use log or square root scaling

	median : do a median filter smoothing on a square this size
		should be an odd integer

	smooth : so boxcar average smoothing on a square this size
		should be an odd integer	
	
	g_smooth : do gaussian smoothing with a gaussian of fwhm
		of this amount. Should be a float > 1.0.

	silent : speak no evil	

EXTERNAL CALLS:

	histogram_2d
	tvim2
	make_gaussian

METHOD: call histogram_2d which calls hist_2d (a built in IDL routine)

EXAMPLE

NOTES

	if median,smooth or g_smooth are set the resultant hist.map
	will be smoothed upon output, though if log or sqrt are set they 
	hist.map will NOT be scaled as it is displayed

HISTORY:  written by David Johnston -University of Chicago 
       Physics Department 1999

(See pro/plotting//ploth.pro)


PLOTHIST

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
   PLOTHIST
 PURPOSE:
   Plot the histogram of an array with the corresponding abcissa. This is an
   enhanced version of the original Landsman program from the Goddard 
   library. Enhancements include weighting of points, aspect ratio control,
   bootstrapping for errors, and allowing all histogram keywords.

 CALLING SEQUENCE:
   plothist, array, weights=, 
       peak=, norm=, aspect=, /error, nboot=, 
       /noplot, /overplot, 
       /fill, fcolor=, /fline, forientation=, fpattern=, fspacing=
       xhist=, yhist=, reverse_indices=
       ...plotting keywords...histogram keywords]

 INPUTS:
   array: data to histogram and plot.

 OPTIONAL INPUTS:
   histogram keywords: See docs on histogram on it bins data. 
       E.g. binsize, nbin, min, max, etc.
   weights: Weights for each point.  Plotted histogram will be total of weights
       rather than simple counts in bins.
   peak: Peak value for plotted histogram.
   norm: normalization of histogram (intergration is simple rectangle 
       integration)
   aspect: Aspect ratio of the plot.
   /error: Plot poisson error bars for unweighted histograms.
   nboot: Bootstrap the histogram to get errors using this number of samples.
       Is most useful for weighted histograms.
   /noplot: Don't plot, just get the bin statistics.
   /overplot: overplot on current plot.
   /fill: Fill the histogram.  See below for fill keywords.
   extra plotting keywords: See docs on plot 
    

 OPTIONAL OUTPUTS:
   xhist - X vector used in making the plot  
   yhist - Y vector used in making the plot
   reverse_indices: See docs for the histogram program.
   bstruct: Lots of statistics for the bins.

 The following keywords take effect only if the FILL keyword is set:
      fcolor - color 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 POLYFILL routine)
      forientation - angle of lines for fill (see the ORIENTATION keyword
              in the POLYFILL routine)
      fpattern - the pattern to use for the fill (see the PATTERN keyword
              in the POLYFILL routine)
      fspacing - the spacing of the lines to use in the fill (see the SPACING
              keyword in the POLYFILL routine)

 EXAMPLES:
       IDL> a = randomn(seed,1000)
       IDL> plothist,a, binsize = 0.1

       IDL> plothist, a, nbin=25, norm=1.0

 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
	Converted to IDL V5.0   W. Landsman 21-Jan-1998
   Allowed min/max to be sent. Erin Scott Sheldon UofMich Jun-07-2001
   Added norm= keyword Erin Scott Sheldon UChicago 17-Oct-2002
   Now uses bin centers rather than the leading edge of the bin.
       Erin Scott Sheldon UChicago 25-Nov-2003
   Big rewrite using the binner.pro and pplot.pro functions.  Now 
       allows weighted histograms and all histogram keywords.  Also 
       allows pplot keywords such as aspect for aspect ratio.
                    Erin Sheldon, NYU, 2007-04-07
   Allow bootstrapping using the nboot keyword. Calls boot_hist.pro in
       this case.  2007-04-24 Erin Sheldon, NYU

(See pro/plotting//plothist.pro)


PLOTPOSITION

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  plotposition

 PURPOSE:
  Return the normalized plot position.  If !p.position is set it is
  returned.  Otherwise a dummy plot is generated in the current 
  device and the coordinates of that are returned.  Note, if using 
  !p.multi the following plot must be overplotted without an erase
  or the next (incorrect) cell will be used. Flags will have 2^0 
  added in this case. The result is an array 
       [ px0, py0, px1, py1 ]

 CATEGORY:
  plotting

 CALLING SEQUENCE:
  pos = plotposition(flags=flags)

 EXAMPLE:

 MODIFICATION HISTORY:
  Created: 2007-01-03, Erin Sheldon, NYU

(See pro/plotting//plotposition.pro)


PLOT_1COLOR

[Previous Routine] [Next Routine] [List of Routines]

 NAME:  
    PLOT_1COLOR
       
 PURPOSE:  
       make color-color plot from sloan colors.  Plot one set of data
	from obj_struct.  Over plot, if requested, from oplot_str
	

 CALLING SEQUENCE:  
   oplot_colors, obj_struct, color, oplot_str=oplot_str,
	index=index, size=size, carr=carr, opcarr=opcarr
      
                 

 INPUTS: 
         obj_struct:  photo objc structure.
	  color:       indicates which colors to plot. 
		       color = 1 for g-r vs u-g
                      color = 2 for r-i vs g-r
                      color = 3 for i-z vs r-i

         oplot_str:   (optional) struct to overplot
         index:       (optional) indexes on obj_struct to use in plotting
	  size:        (optional) if set, oplot_colors also plots size v 
 				brightness

 OUTPUTS:  
           carr:  (optional) output struct containing colors for obj_struct 
	    opcarr:  (optional) output struct containing colors for oplot_str

 OPTIONAL OUTPUT ARRAYS:  
     carr:  (optional) output struct containing colors 
            for obj_struct 
     opcarr:  (optional) output struct containing colors
	       for oplot_str

 INPUT KEYWORD PARAMETERS:
 
 PROCEDURE: 
	
	

 REVISION HISTORY: 
    Authro: Erin Sheldon UM  2/6/99
	
       
                                      

(See pro/sdss//plot_1color.pro)


PLOT_BOX

[Previous Routine] [Next Routine] [List of Routines]
  NAME:
   plot_box

  PURPOSE:
   Plot a box with input set of coords.

  CALLING SEQUENCE:
   plot_box, minx, maxx, miny, maxy, /polyfill, _extra=_extra

  MODIFICATION HISTORY:
   Created: 2000, Erin Sheldon, UofMichigan

(See pro/plotting//plot_box.pro)


PLOT_CLFLAGS

[Previous Routine] [Next Routine] [List of Routines]

 NAME:  PLOT_CLFLAG
    
       
 PURPOSE:  
    Plots classification flags for a set of objects.
    

 CALLING SEQUENCE:
    plot_clflags,pstruct,index,log=log
    

 INPUTS: 
    pstruct: a photo output structure (must have .classification tag)


 REVISION HISTORY:  Judith Racusin 6/15/00, modified from plot_flags by Tim Mckay
    
       
                                      

(See pro/classgal//plot_clflags.pro)


PLOT_COLORS

[Previous Routine] [Next Routine] [List of Routines]

 NAME:  
    PLOT_COLORS
       
 PURPOSE:  
       make color-color plots from sloan colors.  Plot one set of data
	from obj_struct.  Over plot, if requested, from oplot_str.

	DEFAULTS are COUNTS_MODEL for colors, PETRORAD vs. PETROCOUNTS for
       size vs mag plots.  PLOT_COLORS will search for other arrays if
       these are not present.  If the keywords /fibercounts or /psfcounts
       are given, then these arrays are used (if present) for both
       colors and magnitude.

       NOTE: For stars, COUNTS_MODEL is closer to psfcounts than petrocounts or 
             fibercounts.  Also, COUNTS_MODEL give the best colors for galaxies.
             Thus, it is best for showing both stars and galaxies on the same 
             color-color diagrams. That is why it is the default. If you are
             just plotting stars and quasars, then PSFCOUNTS may be the way
             to go; set the /psfcounts keyword.

 CALLING SEQUENCE:  
     plot_colors, obj_struct, oplot_str=oplot_str,index=index, size=size, 
            carr=carr,opcarr=opcarr, psfcounts=psfcounts, fibercounts=fibercounts, 
            psym=psym,title=title,hist=hist,radrange=radrange,
            oplot_clr=oplot_clr, _extra=_extra

 INPUTS: obj_struct:  photo objc structure.  

 OPTIONAL INPUTS:
     index:       indexes on obj_struct to use in plotting
     oplot_str:   struct to overplot
     oplot_clr: The color of the overplotted symbols.  If this is set, 
               the procedure simpctable is called, which sets certain 
               system variables (the value of these depends on the device and
               if the device is X, the number of colors available):

              !black
              !white
              !red
              !green
              !blue
              !yellow
              !cyan or !lightblue
              !magenta
              
            Therefore, if you don't want to remember the numbers, just
            call simpctable before calling plot_colors, and use
                         oplot_clr=!magenta  
            or whatever. You can get back to black and white with loadct,0
            Note that the background will always be set to black and the 
            axes white, and these are reversed when you send to postscript.
            WARNING: doesn't work well with the /hist keyword

     radrange:  the range on petrorad to plot
     psym: The over plotting symbol.  Default is a cross-hair.
     title=title: title for upper left hand plot (g-r) vs (u-g)
     _extra=_extra   any extra plotting stuff. 

 INPUT KEYWORD PARAMETERS:
     /size: if set, oplot_colors also plots size v 
            brightness.  DEFAULT is PETROCOUNTS vs. PETRORAD
     /psfcounts:   If set, use psfcounts for colors and magnitude
     /fibercounts: if set, use fibercounts for colors and magnitude
           NOTE: Defaults are 1. COUNTS_MODEL for colors
                              2. PETROCOUNTS for magnitude if /size
     /hist:  use 2D histograms instead of scatter plots , displays them 
              with tvim2

 OPTIONAL OUTPUT ARRAYS:  
    carr:  (optional) output struct containing colors for obj_struct 
    opcarr:  (optional) output struct containing colors for oplot_str

 
 PROCEDURE: 
	
	

 REVISION HISTORY:  Tim Mckay UM
		     Erin Sheldon UM  2/6/99  added over-plotting, comments
		     Dave Johnston UC 5/15/99 made DEFAULT over-plot symbol 
                             to be crosshairs
		     Dave Johnston 7/23/99 added 2D histogram option instead of
				scatter plots. This is good for speed and also
				appearance. Added radrange as a keyword
				this is the range in petrorad to plot.		
                    Erin Sheldon Made plots square
                    Erin Sheldon 05/04/00 Added color overplotting. Improved
                         error handling by checking for existence of 
                         magnitude arrays and size arrays with subroutine
                         PLOT_COLORS_CHECK_TAGS. Improved memory
                         usage.
                                      

(See pro/sdss//plot_colors.pro)


PLOT_CROSS

[Previous Routine] [Next Routine] [List of Routines]
  NAME:
   plot_cross

  PURPOSE:
   Plot a cross with input size and center.

  CALLING SEQUENCE:
   plot_cross, radius, x, y, hole_fraction=, _extra=

  INPUTS:
   radius: rad in data units.
   x,y: pos in data units.
  
  OPTIONAL INPUTS:
   hole_fraction:  Place a hole at the center of the cross
     this fraction of "radius" in size. Default zero.
   
  MODIFICATION HISTORY:
   Created: 2000, Erin Sheldon, UofMichigan

(See pro/plotting//plot_cross.pro)


PLOT_ELLIPSE

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
	PLOT_ELLIPSE

 PURPOSE:
	Draw an ellipse on the current graphics device.

 CALLING SEQUENCE:
  plot_ellipse, radius, x, y, axis_ratio=, pos_angle=, /device,
                npoints=, _extra=
 
 REVISION HISTORY:
   Converted tvellipse to be more powerful and intuitive.
      Erin Sheldon UChicago 18-Oct-2004

(See pro/plotting//plot_ellipse.pro)


PLOT_NE_ARROWS

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  plot_ne_arrows

 PURPOSE:
  Plot a north and east arrow, with tails back to
  back, in the upper right corner of the current plot device.

 CALLING SEQUENCE:
  plot_ne_arrows, angle, fracsize=, offset_frac=, order=

 INPUTS:
  angle: Angle on the device in radians.

 OPTIONAL INPUTS:
  fracsize: Size of arrows relative to plot region. Default 0.1
  offset_frac: Offset from side of plot region relative to
    size of arrows.
  order: Is image flipped?

 MODIFICATION HISTORY:
  Created: 2003, Erin Sheldon, UChicago

(See pro/plotting//plot_ne_arrows.pro)


POSTGRES (IDL CLASS FILE)

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  POSTGRES   (IDL Class file)


 PURPOSE:
  An IDL class file wrapping the pgsql_query() function, which provides
  an interface to the postgres database.

 CALLING SEQUENCE:
  pg = obj_new('postgres', connect_info=)

 OPTIONAL INPUTS:
  connect_info: This is stored at initialization so can be used later
    without sending. Useful if not using the database listed in the
    PGDATABASE environment variable for example.

 METHODS:
  All the functionality comes from the pgsql_query() function.  This
  class provides some wrapper methods for complex but often-used queries.
  Use:
          methods,'postgres' 

  to list the methods and 
          doc_method,'postgres::methodname' 

  to see the full documentation for each. Use 
          doc_method,'postgres',/class  (or doc_library,'postgres__define')
  to see this doc.
 

  The most useful methods:
    ::query()
       Send a query and return the results.

    ::struct2table: Stuff a structure into a postgres table, creating a
       new table if necessary.

    ::tables()
       Return a list of tables in the database.
    ::table_exists() 
       Return 1 if the table exists, 0 if not.
    ::describe
       Print a description of a table or, if no arguments, short descriptions 
       of all tables.
    ::table_indexes 
       Print index information for a table.

    ::status_val()
       Return the query status value given the name
    ::status_name()
       Return status name given the value

    ::tablerows()
       Postgres does not store the number of rows for a table, it counts them
       each time you run select count(*) from table....  If this info has been
       stored in a table called tablename_meta it is retrieved, otherwise an
       error is given and execution is stopped.

 RESTRICTIONS:



 MODIFICATION HISTORY:
   Created: Mid-2005, Erin Sheldon, Uchicago

(See pro/postgres//postgres__define.pro)


PPLOT

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  PPLOT

 PURPOSE:
  A complete replacement for plot and ploterr that allows plotting of error bars in x and y as well as a user defined axis ratio.

 CALLING SEQUENCE:
    pplot, x, y, xerror=, yerror=, aspect=, /center,
           errcolor=, errstyle=, errthick=, /nohat, hatlength=, nskip=,
           _extra='


 INPUTS:
  x, y: x and y vectors.  The same restrictions as the builtin plot program.
        Note if y is not sent, then plot, x is run and error bars are ignored.


 KEYWORD PARAMETERS:

  xerror: Error bars on x
  yerror: Error bars on y
  aspect: Aspect ratio xsize/ysize.  I know many people will expect this to
          be reversed, but this is historical from the APLOT program.
  /center: Re-center the display after applying aspect ratio.
  
   ; These deal with the style of errors bars. This stuff stolen from the
   ; Goddard ploterror program.
 
  errcolor: Color for error bars. Unlike ploterror, defaults to same color as
            the points.
  errstyle: Line style for error bars.
  errthick: Line thickness for error bars.
  /nohat: Don't use a hat on the error bar.
  hatlength: Lenght of hat.  Defaults to !d.(x|y)_vsize/100.0
  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)

 EXAMPLES:
   pplot, x, y, aspect=1.0
   pplot, x, y, yerror=yerr
   pplot, x, y, xerror=xerr, yerror=yerr, errcolor=greenid


 MODIFICATION HISTORY:
   Created: 11-May-2006, Erin Sheldon, NYU.  An amalgomation of
     many procedures, including ploterror.pro (Goddard) and aplot.pro (ES)
     designed to do all in one in an intuitive way.

(See pro/plotting//pplot.pro)


PRINT_CLFLAGS

[Previous Routine] [Next Routine] [List of Routines]

 NAME:  PRINT_CLFLAG
    
       
 PURPOSE:  
    Prints classification flags for a single object
    

 CALLING SEQUENCE:
    print_clflags,pstruct,index
    

 INPUTS: 
    pstruct: a photo output structure (must have .classification tag)
    index: index of object of interest


 REVISION HISTORY:  Judith Racusin 6/15/00, modified from print_flags by Tim Mckay
    
       
                                      

(See pro/classgal//print_clflags.pro)


PRO2HTML

[Previous Routine] [Next Routine] [List of Routines]

 NAME:
    PRO2HTML
       
 PURPOSE:
    Convert an IDL .pro file into a pretty HTML document, with EMACS-like
    color coding.

 CALLING SEQUENCE:
    pro2html, pro_file, html_file, signature=

 INPUTS: 
    pro_file: the full path of the IDL .pro file
    html_file: the full path name of the output html file

 OPTIONAL INPUTS:
    signature: Some text to put at the end.

 PROCEDURE: 
    Look for reserved IDL words, comments, and strings and color-code them,
    converting html senstive characters into codes.  You can change the color
    coding by changing the style definitions in the header.
	

 REVISION HISTORY:
    Created: 18-NOV-2000 Erin Scott Sheldon UofMich
    Inspired by the emacs htmlize.el, moved over to using styles
    for a more compact and stable result.  E.S. NYU  2006-July-15 
       

(See pro/util//pro2html.pro)


PROMPT_KBRD

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  prompt_kbrd

 PURPOSE:
  Prompt the user for an input key.  Wrapper for get_kbrd() that only prompts
  if the display type is 'X'.

 CALLING SEQUENCE:
  key = prompt_kbrd('optional prompt string',format=)

 OPTIONAL INPUTS:
  prompt_string: Optional string to display while waiting for input.
  format: a format for printing the string.

 EXAMPLE:
  key = prompt_kbrd('Hit a key')

 MODIFICATION HISTORY:
  Created: 2005, Erin Sheldon, Uchicago

(See pro/util//prompt_kbrd.pro)


PSLANDFIX

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
   PSLANDFIX

 PURPOSE:
   Fix the upside-down landscape that IDL generates.

 CALLING SEQEUNCE:
   pro pslandfix,[filename]

 INPUT:
   FILENAME   Name the idl PostScript file to fix.  Default is 'idl.ps'

 OUTPUT:
   Fixed PosctScript file
 NOTES:
   none
 HISTORY:
   10-AUG-95 Version 1 written    E. Deutsch

(See pro/plotting//pslandfix.pro)


PSLAYOUT

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
    PSLAYOUT


 PURPOSE:
    Set up the system variable !PSLAYOUT which contains information for
    setting up the X, Z, or PS devices.  The user, if not satisfied with these
    settings, should copy pslayout into their code directory and make the
    required modifications.

 CATEGORY:
    Plotting routine

 CALLING SEQUENCE:
    pslayout

 SIDE EFFECTS:
    The !PSLAYOUT variable is created if not already in existence.  If in
    existence, it will NOT be modified.


 MODIFICATION HISTORY:
    Creation:  ??-??-2001 Erin Sheldon UofMichigan

(See pro/plotting//pslayout.pro)


PTIME

[Previous Routine] [Next Routine] [List of Routines]

 NAME: 
    ptime
       
 PURPOSE: 
    print a time interval in a nice format if days,hours,minuties,seconds.   
	
 CALLING SEQUENCE: 
    ptime, t [, num, tstr=, command=, savetime=]
      
                 
 INPUTS: 
    t: a time in seconds.

 OPTIONAL INPUTS: 
    num: number of places to keep in seconds. Default is 4, 
         which includes any decimal places.

 KEYWORD PARAMETERS:
    command=: An execution string to be timed.
    /savetime: if this is set, then t is set to the current systime(1)
               and returned without printing
       
 OPTIONAL OUTPUTS: 
    tstr: a string containing the time in hr min sec format.

 EXAMPLES:
  IDL> tm=systime(1)
  IDL> run_some_command
  IDL> ptime, systime(1)-tm
  Time: 5 min 35.2000 sec

  IDL> ptime, command='some_command'
  Time: 3.0079839 seconds

 REVISION HISTORY:
	Author: Erin Scott Sheldon UofM  7/8/99

(See pro/util//ptime.pro)


PUT_CLR_SCL

[Previous Routine] [Next Routine] [List of Routines]
 ROUTINE:    put_clr_scl

 USEAGE:     PUT_CLR_SCL,x1,y1,range[,inc,ysize=ysize,charsize=charsize]

 PURPOSE:   Draws a numbered color scale

   INPUT:   

  x1,y1        device coordinates of lower left hand corner of color bar

  range        array which contains full range of physical values,
               The number scale limits are computed fron min(range) and
               max(range).
  inc          increment step of the number scale in physical units

   OPTIONAL KEYWORD INPUT:

  charsize     character size on number scale. Defaults to !p.charsize.
  ysize        vertical size of color bar in device units. 

  invert	used to invert the color scale.

  nolabels	Used to inhibit labels.

 AUTHOR:       Paul Ricchiazzi    oct92 
               Earth Space Research Group, UCSB

 MODIFIED:	Jeff Bloch	From put_color_scale to handle
				inverted color scales indicated by
				the new keyword INVERT. Also default
				character size taken from !p.charsize.

				10/13/95	1.4

(See pro/plotting//put_clr_scl.pro)


QU2E

[Previous Routine] [Next Routine] [List of Routines]

 NAME: 
    qu2e
       
 PURPOSE: 
    Convert Robert Luptons q and u shape parameters to ellipticity
    parameters as measured by unweighted moments and Gary Bernstein's
    adaptive moments.
	

 CALLING SEQUENCE: 
    qu2e, q, u, e1, e2
      
 INPUTS: 
    q: Shape parameter corresponding to 'e1'
    u: Shape parameter corresponding to 'e2'


 OUTPUTS: 
    e1 and e2.  ellipticity parameters.

 
 PROCEDURE: 
    Robert's scheme uses a 1/r weighting scheme for measuring 
        
          (ixx - iyy)/(ixx + iyy)   and  2ixy/(ixx + iyy)

    For his method, these are equal to:
 
        q = ( 1-r )/( 1+r )*cos(2*theta)
        u = ( 1-r )/( 1+r )*sin(2*theta)

   Where r=axis ratio of object and theta=position angle from x axis

   For unweighted and adaptive schemes, the formulae the same with 
          
        r -> r^2
	

 REVISION HISTORY:
	
   Author: Erin Scott Sheldon  UofM  6/1/99

(See pro/astro//qu2e.pro)


RADEC2ROWCOL

[Previous Routine] [Next Routine] [List of Routines]

 NAME:
   radec2rowcol
       
 PURPOSE:
    convert from equatorial coordinates to row/col, ignoring higher
    order terms in the transformation. Good to .1 pixels or so. For this
    crude program, you need to read in the transformation file and know
    the sdss field to do the transformation.  

 CALLING SEQUENCE:
    radec2rowcol, trans, node, inc, field, ra, dec, row, col, status=

 INPUTS: 
    trans: the astrans file for this run,camcol,bandpass. Use 
          sdss_read() to get the astrans file.
    field: the field
    ra,dec: equatorial coordinates

 Optional Inputs:
    ri=: the r-i color used in color term of transform
    /nonlinear:  use a non-linear transform.

 OUTPUTS: 
    row,col: row/col in the bandpass of the trans structure

 OPTIONAL OUTPUTS:
    status: 1 for success, 0 for failure

 PROCEDURE: 
    We know the ra/dec are in field 562 of run 756
    run=756
    rerun=44
    camcol=3
    field = 562
    band=2
    trans=sdss_read('astrans',run,camcol,band=band,node=node,inc=inc)
    radec2rowcol, trans, node, inc, field, ra, dec, row, col
	

 REVISION HISTORY:
    15-AUG-2002 Creation.  Erin Scott Sheldon UofMich
       
                                      

(See pro/sdss//eq2rowcol.pro)


RADECSTR

[Previous Routine] [Next Routine] [List of Routines]

 NAME: 
    RADECSTR
       
 PURPOSE: 
    Wrapper for radec.  Returns string versions of ra and dec.
	

 CALLING SEQUENCE: radecstr, ra, dec, rastr, decstr
      
                 

 INPUTS: ra, dec in degrees.
       
 OUTPUTS: rastr, decstr.  Strings containing ra and dec.

 CALLED ROUTINES: radec
 
 EXAMPLE:
	
	

 REVISION HISTORY: Erin Scott Sheldon U of Mich.  3/28/99
	Dave Johnston	changed h m s to colons and added 
			a little more accuracy to last digits
			of arcseconds ,since the seconds of ra needs 3 
			digits after the decimal to be accurate to	
			subarcsecond level
       Dave Johnston   made it output the negative sign on dec
                       on the "degrees" part even if it is -0

                                      

(See pro/astro//radecstr.pro)


RADEC_MATCH

[Previous Routine] [Next Routine] [List of Routines]
 NAME:	
    RADEC_MATCH

 CALLING SEQUENCE:	
    radec_match.pro,m1,m2,newmatch

 INPUTS:	
    m1: first match structure
    m2: second match structure

 OUTPUTS:	newmatch: combined structure, merged on (ra,dec)
	
 INPUT KEYWORDS:
		angdiff: angular difference (in ") to allow
			
 PROCEDURE:	Merges the two matched structures into a single list
		by matching in ra,dec for the whole thing.

 REVISION HISTORY:  
	Tim McKay		UM	6/23/98	Created

(See pro/astro//radec_match.pro)


RAINBOW_RGB()

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  RAINBOW_RGB()


 PURPOSE:
  Produce rgb colors based on hue.  Wrapper for COLOR_CONVERT so the
  user only has to supply the hue, although luminance and saturation can
  optionally be sent.
  
 CALLING SEQUENCE:
  color = rainbow_rgb(hue, luminance=luminance, sataturation=saturation)

 INPUTS:
  hue:  hue on the color wheel: [0,360] from red-green-blue and back.


 OPTIONAL INPUTS:
  luminance=: In [0,1]
  saturation: In [0,1]

 KEYWORD PARAMETERS:


 OUTPUTS:
  The corresponding rgb color which can be sent to IDL plotting routines.

 EXAMPLE:
  color = rainbow_rgb(125)
  oplot, data, color=color


 MODIFICATION HISTORY:
  Created:  ??-July-2005.  Erin Sheldon, UChicago

(See pro/plotting//rainbow_rgb.pro)


RD2XY

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
	RD2XY
 PURPOSE:
	Compute an X and Y position given the RA and DEC and an astrometry
	structure from a FITS header.  A tangent (gnomonic) projection is
	computed directly; other projections are computed using WCSXY2SPH.  
	AD2XY is 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. in DEGREES, scalar or vector
	D -     Dec. 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)
	 .CRVAL - 2 element vector giving R.A. and DEC of reference pixel 
		in DEGREES
	 .CTYPE - 2 element vector giving projection types 

 OUTPUTS:
	X     - row position in pixels, scalar or vector
	Y     - column position in pixels, scalar or vector

 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	
	Changed to RD2XY forces tangent projection  David Johnston 1998

(See pro/astro//rd2xy.pro)


RDIS

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
    RDIS

 PURPOSE:
    Wrapper for tvim2.  One can zoom, rescale, flip across x or y, or 
    rotate by 180 degrees.

 CALLING SEQUENCE:
       imdis, image [, pls, 
          sigmahigh=sigmahigh, sigmalow=sigmalow,$
          xmn=xmn, xmx=xmx, ymn=ymn, ymx=ymx, $
          low=low, high=high, $
          log=log, zoom=zoom, full=full, $
          flipx=flipx, flipy=flipy, rot=rot, $
          silent=silent, _extra=extra]

 INPUTS:
       image: image to be displayed
	
 OPTIONAL INPUTS:
       pls:  the plot structure.  If not input, rdis_setup is called.
             You can call rdis_setup yourself and set the equilavent of
             the keywords in the structure:
                         xmn, xmx, ymn, ymx, low, high

 INPUT KEYWORD PARAMETERS:
    THESE OVERIDE PLS
    xmn, xmx, ymn, ymx:  range of x and y values of image to display.
                         these can be set in pls.
    low, high: low and high of image.  
    full: show the full image.
    rot: rotate image
    silent: be quiet.

 PROCEDURE:
	

 REVISION HISTORY:
	Tim McKay	UM	1/29/97
       Erin Scott Sheldon made pls optional input 
                          Cleaned up, added comments.  11/24/99  

(See pro/plotting//rdis.pro)


RDIS_SETUP

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
       RDIS_SETUP
 PURPOSE:
	Set up a parameter structure for rdis

 CALLING SEQUENCE:
       rdis_setup

 INPUTS:
       
 OUTPUTS:
	lot_struct: a structure containing all the parameters needed
		      to run rdis

 OPTIONAL OUTPUT ARRAYS:

 INPUT KEYWORD PARAMETERS:
 
 PROCEDURE: This just creates a little structure useful for image display

 REVISION HISTORY:
	Tim McKay	UM	1/8/98
	Tim McKay	UM	3/7/98  
		Added check for environment variables 
			EXTRACT_CONFIG, and EXTRACT_PAR
	Tim McKay	UM 	4/27/98
		Altered from rextract_setup 

(See pro/plotting//rdis_setup.pro)


READ_ATLAS

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  READ_ATLAS


 PURPOSE: 
  Read atlas images specified by SDSS run,rerun,camcol,field,id,
  or from a structure containing that info.  This is a wrapper for the rdAtlas
  procedure which reads from input file name and id (type rdAtlas at a prompt
  to see the syntax).  That program is more efficient but you must feed it
  the atlas image file name.


 CATEGORY:
  SDSS specific routine


 CALLING SEQUENCE:
    read_atlas, objStruct -OR- run, camcol, field, id, rerun=,
                image=, 
                atlas_struct=,
                imu=, img=, imr=, imi=, imz=, 
                clr=, 
                index=, 
                dir=, 
                col0=, row0=, dcol=, drow=, ncol=, nrow=,
                atlas_struct=, 
                status=, 
                /silent



 INPUTS: The user can either input the 
                  run,rerun,camcol,field,id: Unique SDSS identifier
         OR
                  objStruct: a photo structure containig the id information.


 OPTIONAL KEYWORD INPUTS:
         clr: The bandpass to read. Will be returned in the image keyword.
              must be a scalar.
         dir: directory of atlas images. THIS IS OPTIONAL, since this
              information can be generated from the id info and the config
              variable DATA_DIR
         index: Index for when input structure is an array.  Defaults to zero,
              the first element in struct.


 OUTPUT KEYWORDS:
         image: 
            An array containing the image(s).  If clr= is sent, just that
            bandpass is returned through this keyword. Otherwise, If one of
            the imr=imr type arguments is not sent and atlas_struct is not
            present, then all images are copied into this argument as a
            [5,nx,ny] array.

         atlas_struct: 
            A structure with all images and statistics.

         imu=, img=, imr=, imi=, imz=:  
            The images for individual bandpasses. Just set these equal to a 
            named variable to return the image you need.

         row0=, col0=:  objc_rowc, objc_colc position of bottom left corner
                        of atlas cutout in the original image.
         dcol=, drow=: positional difference between each band and the r-band
         nrow=, ncol=: number of columns, rows in each image.
         status= The exit status.  0 is good, anything else is bad

 KEYWORD PARAMETERS:
         /silent: will run silently unless bad images or missing
                 images are found

 RESTRICTIONS:
    The C-function rdAtlas must be compiled, and the DLM directory must be in
    the user's $IDL_DLM_PATH.  Also, the directory configuration variable
        DATA_DIR
    must be set and the runs must be visible from there with the usual
    directory structure.  If not, then the directory can be sent with the
    dir=dir keyword.

 EXAMPLE:
  - Read an r-band atlas image into memory
    IDL> read_atlas, run, rerun, camcol, field, id, imr=imr
  - Read using a structure; get all images in atlas_struct
    IDL> read_atlas, objStruct, atlas_struct=as


 MODIFICATION HISTORY:
   Created: 17-Nov-2004 from old get_atlas.  Erin Sheldon, UChicago.

(See pro/sdss//read_atlas.pro)


READ_IDLHEADER

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  READ_IDLHEADER


 PURPOSE:
  Read the header from a ".st" (idl structure) file. The result is a
  structure containing the NROWS, FORMAT keywords and the field names, types
  and descriptions, as well as any other keyword-value pairs the user has
  added.  Strings are returned as strings, all others are returned as double
  precision floating point.  Arrays are allows for numbers.


 CATEGORY:
  File I/O


 CALLING SEQUENCE:
  hstruct = read_idlheader(filename/unit)'


 INPUTS:
  filename or unit: Name of the file to be read, or the logical unit of an
                    open file.

 OUTPUTS:
  A structure containing the NROWS, FORMAT keywords and the field names, types
  and descriptions.  Possible also user added keyword-value pairs (which may
  be arrays for numbers).

 EXAMPLE:
  file = 'test.st'
  hstruct = read_idlheader(file)


 MODIFICATION HISTORY:
  Created  02-Jul-2004 Erin Sheldon, UofChicago

(See pro/idlstruct_files//read_idlheader.pro)


READ_IDLSTRUCT

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  READ_IDLSTRUCT


 PURPOSE:
  Read from the standardized file format ".st" into an array of structures.
  These file formats are written by the WRITE_IDLSTRUCT procedure.  See the
  documentation for that procedure for more info.


 CATEGORY:
  File I/O


 CALLING SEQUENCE:
    struct = read_idlstruct(filename, columns=, rows=, numrows=, 
                           hdrstruct=, status=, /silent, error=)


 INPUTS:
  filename: Name of the file to be read.


 OPTIONAL INPUTS:

  columns: A string or integer (zero offset) array or scalar containing the
           names of the columns to extract from the structure.  By default all
           columns are returned.  If the binary_read or ascii_read C++
           programs is compiled and available, this is used to save memory and
           speed, otherwise the whole thing is read and the desired columns
           are extracted, with the expected limitations.

  rows: A numerical array, zero offset, with the requested rows to read.  By
        Default all rows are read.  Again, if binary_read or ascii_read is
        available it is used (see columns).  Takes precedence over numrows=
  numrows=: Read the first numrows of the file.  Useful if you have a very
            large file and you just want to check out what the first few rows
            look like without using lots of memory or time.
  /silent: don't print informational messages


 OUTPUTS:
  struct: The data read from the file.

 OPTIONAL OUTPUTS:
  hdrstruct: The header for the idlst file.
  error=error
  status=status

 PROCEDURES CALLED:
  READ_IDLHEADER
  (SWAP_ENDIAN)
  (IEEE_TO_HOST)
  (ASCII_READ)
  (BINARY_READ)

 EXAMPLE:
  file = '~/blah.st'
  struct = read_idlstruct(file)

 MODIFICATION HISTORY:
  Created  02-Jul-2004 Erin Sheldon, UofChicago
  ES: Added columns keyword.  07-Mar-2004  
  ES: Added use of binary_read C function when available if columns 
      or rows are requested.  7-Nov-2005
  ES: Added use of ascii_read C function when available and if
      columns, rows requested.  28-April-2006

(See pro/idlstruct_files//read_idlstruct.pro)


READ_IDLSTRUCT_MULTI

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  READ_IDLSTRUCT_MULTI

 PURPOSE:
  Read binary tables from multiple FITS files using mrdfits.  Return
  a single structure containing all data.

 CALLING SEQUENCE:
  struct = read_idlstruct_multi(files, $
                                /diff, $
                                columns=, $
                                count=, $
                                /silent, $
                                status=)


 INPUTS:
  files: A set of fits file names.

 OPTIONAL INPUTS:
  columns: The columns to read.

 KEYWORD PARAMETERS:
  /diff:  This informs that the structures from each file may be different. A
          slower but safer method is used that defines the output structure
          based upon the first file and just copies the matching tags
          afterward.
  /silent: Be quiet except for errors.

 OUTPUTS:
  Combined structure.

 OPTIONAL OUTPUTS:
  count: the total count of rows read.

 MODIFICATION HISTORY:
  Author: Erin Sheldon, NYU
  Documented: 2006-July-21.  E.S.

(See pro/idlstruct_files//read_idlstruct_multi.pro)


READ_OBJMASK()

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  read_objmask()

 PURPOSE:
  Read in object mask data for objects in an SDSS atlas file.

 CATEGORY:
  SDSS routine.

 CALLING SEQUENCE:
  st = read_objmask(run, camcol, field, rerun=, idlist=, status=)

 INPUTS:
  run,camcol,field: SDSS field info.

 OPTIONAL INPUTS:
  rerun: The sdss rerun. If not sent it is taken as the latest available.
  idlist: List of sdss ids.  If not sent all are retrieved.

 OUTPUTS:
  Structure with mask info for each object.
    run, rerun, camcol, field, id, 
    row0[5], col0[5], rowmax[5], colmax[5], drow[5], dcol[5]

 OPTIONAL OUTPUTS:
  status: 0 for success.

 RESTRICTIONS:
  Must have DLM rdObjmask compiled and linked in.

 MODIFICATION HISTORY:
  Created: 2007-02-26, Erin Sheldon, NYU

(See pro/sdss//read_objmask.pro)


READ_SPDIAG1D

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  READ_SPDIAG1D


 PURPOSE:
  read in the spDiag file for a given plateid (mjd)


 CATEGORY:
  SDSS specific routine.


 CALLING SEQUENCE:
  read_spdiag1d, plateID, spdiag, mjd=mjd, spec_vers=spec_vers, /silent


 INPUTS:
  plateID: plate number in integer form.


 OPTIONAL INPUTS:
  mjd: modified julian date
  spec_vers: version of the spectra.  Default is to use SPEC_VERS from the
             configuraton file.

 KEYWORD PARAMETERS:
  /silent: do not print out informative messages.


 OUTPUTS:
  spDiag:  the contents of the spDiag file.


 RESTRICTIONS:
  The user needs yanny_read.pro and the spectra data on disk.  SPEC_VERS
  and SPEC_DIR must be defined in the config file


 PROCEDURE:
  Use yanny_read to read the contents of the spDiag file.


 EXAMPLE:
  read_spDiag1D, 1026, spDiag


 MODIFICATION HISTORY:
  Creation: ??-??-2003.  Erin Sheldon UofChicago

(See pro/sdss//read_spdiag1d.pro)


READ_SPEC1D

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  READ_SPEC1D


 PURPOSE: 
  Read spectra data for the input plateid and fiberid.  The mjd is optional; 
  if not entered, the latest mjd is used.

 CATEGORY:
  SDSS specific routine


 CALLING SEQUENCE:
  read_spec1d, plateid, fiberid, sp_struct, $
               mjd=mjd, $
               spec_vers=spec_vers, $
               file=file, $
               $
               /no_substructs, $
               silent=silent, $
               $
               z=z, err_z=err_z,$
               $
               plot=plot, $   ;Plotting stuff
               /nolegend, $'
               /nolines, $
               nsmooth=nsmooth, $
               errclr=errclr, $
               leg_charsize=leg_charsize, $
               label_charsize=label_charsize
               _extra=_extra


 INPUTS:
  plateid: the plate number
  fiberid: fiber number

 OPTIONAL INPUTS:
  mjd: The mjd; if not input, the latest mjd is used.
  spec_vers: a string containing the spectro rerun id.  e.g. '1d_23'.  The
             default is to read this from the SPEC_VERS config variable.
  file: the file to read. Otherwise, it is created from the inputs.

 KEYWORD PARAMETERS:
  /no_substructs: Don't add the structures found in the other HDU's as nested
                  structures to sp_struct. This is useful if the user wants to
                  save the structure in a fits file with MWRFITS.PRO, which
                  does not allow nested structures. These structures can be
                  returned individually; see below.

  /silent: don't print out informative messages
  /plot: make a plot of the spectra. Calls plot_spec1d.pro
  ** inputs if /plot is set: nsmooth=nsmooth: boxcar smooth over this many
                               adjacent pixels
                             errclr=errclr:  color for the error curve.
                               Default is green in X,Z and blue in PS
                             /nolegend: don't plot the legend, with the type,
                                        redshift, and ra/dec 
                             /nolines: don't plot and label the lines
                             leg_charsize=leg_charsize: the charsize for the
                                               legend
                             label_charsize=label_charsize: the charsize for
                                               the line labels.
                             _extra=_extra:  Plotting keywords

 OPTIONAL OUTPUTS:
  sp_struct: all elements of the header are placed in a structure using the
             hdr2struct procedure.  This includes redshift, classification,
             etc. 
  z=z: the redshift.  This is also contained in the sp_struct.
  err_z=err_z: The uncertainty in redshift.

  These are the binary tables from higher HDU's.  They can be returned
    invidually with these keywords.  They are also added to the returned
    sp_struct unless /no_substructs is set.
        lines_auto: all lines found automatically by the wavelet filter, with
              no apriori knowledge of the redshift.
        lines_redshift: all lines measured based on their expected positions
                        from the highest-confidence emission line redshift
        em_z: Redshift determinations based on sets of emission lines. There
              may be multiple entries, with each entry corresponding to a
              different set of lines. 
        cc_z: Redshift determinations from cross-correlations. More than one
              peak may be measured in each cross-correlation function (i.e.,
              for each template).
        line_indices: Standard line indices and flux ratios are stored
              here.  Lick indices, Brodie & Hanes, and Diaz, Terlevich, &
              Terlevich are measured.
        mask_res: The masks as passed from spPlate*.fit (the mask bit values
              are a subset of those used in the mask array above), as well as
              the resolution. The length of this table should be the same as
              the length of the spectrum
        *** See: http://www-sdss.fnal.gov:8000/edoc/dm/flatFiles/spSpec.html
                 for more info 
 RESTRICTIONS:
  You need the Goddard idl astronomy procedures and the Umich SDSS idl
  libraries.  You need the SPEC_DIR Config variable set.


 EXAMPLES:
  read_spec1d, 550, 125, sp_struct
  read_spec1d,550,125,sp_struct,/plot,nsmooth=10


 MODIFICATION HISTORY:
   Creation: 15-Aug-2003: Erin Sheldon UofChicago  Based roughly on Dave
      Johnston's read_spec.pro

(See pro/sdss//read_spec1d.pro)


REFORM_PTRLIST()

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  REFORM_PTRLIST()


 PURPOSE:
  Take an array of pointers, each of which may point to arrays themselves, 
  and return an array of pointers in which the pointers each point to 
  individual objects only.  The original pointers are freed unless the
  /nofree keyword is set.

 CATEGORY:
  Utility


 CALLING SEQUENCE:
   output = reform_ptrlist(ptrlist, /nofree)


 INPUTS:
  ptrlist: Array of pointers.

 KEYWORD PARAMETERS:
  /nofree: The original pointers are freed unless this keyword is sent.

 OUTPUTS:
  A new pointer array as described in the purpose.


 OPTIONAL OUTPUTS:
  status=: 0 for success

 MODIFICATION HISTORY:
   1-August-2005  Erin Sheldon, UChicago

(See pro/util//reform_ptrlist.pro)


REMOVE_TAGS()

[Previous Routine] [Next Routine] [List of Routines]

 NAME:
    REMOVE_TAGS()
       
 PURPOSE:
   Remove the specified tags from input structure and return what is
   left.

 CALLING SEQUENCE:
    newstruct = remove_tags(oldstruct, tagnames)

 INPUTS: 
    oldstruct: the original structure
    tagnames: the names of tags to be removed (can be an array)

 OUTPUTS: 
    newstruct: the new structure without tags.

 CALLED ROUTINES:
    MATCH
    
 PROCEDURE: 
    
	

 REVISION HISTORY:
    ????? Judith Racusin
    25-OCT-2000 Modified to handle arbitrary tag types. Also error 
          handling. Erin Scott Sheldon
    2006-May-31: Converted to a function. Return -1 when all tags removed.
       
                                      

(See pro/struct//remove_tags.pro)


RENAME_TAGS()

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  RENAME_TAGS()

 PURPOSE:
  Rename tags in a structure

 CALLING SEQUENCE:
  newstruct = rename_tags(struct, oldtagnames, newtagnames)

 INPUTS:
  struct: The original structure. May be an array.
  oldtagnames: names of tags to change
  newtagnames: new names for tags

 OUTPUTS:
  A new structure with tags renamed.

 OPTIONAL INPUTS:
  verbose: set to greater than 0 for verbose mode.  Each changed tag will
    be printed.

 MODIFICATION HISTORY:
  Early 2006: Erin Sheldon, NYU

(See pro/struct//rename_tags.pro)


REORDER_TAGS()

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  REORDER_TAGS()

 PURPOSE:
  Reorder the tags in a structure

 CALLING SEQUENCE:
  newstruct = reorder_tags(struct, ordered_tagnames)

 INPUTS:
  struct: The original structure. May be an array.
  ordered_tagnames: Tags to be placed in the front of the struct in the
    specified order.  Other tags are placed at the end in their original
    order.

 OUTPUTS:
  A new structure with tags reordered.

 Example:
  st = {a: 35, b: 66.0, c: 25.2, d: [3.5, 2.2]}
  nst = reorder_tags(st, ['c','a'])
  print,tag_names(nst)
    C A B D

 MODIFICATION HISTORY:
  Early 2006: Erin Sheldon, NYU

(See pro/struct//reorder_tags.pro)


RGBFCHART

[Previous Routine] [Next Routine] [List of Routines]

 NAME:
    RGBFCHART
       
 PURPOSE:
    Create a color finding chart for the input ra/dec position
    Calls FIND_RADEC_FCHART to create an r-band fchart, then constructs
    the g and i fcharts.  Then RGBVIEW is called to create and display
    the color image.  Various images can be written or the postscript
    device can be opened before calling RGBFCHART

 CALLING SEQUENCE:
 THERE ARE TOO WAYS TO CALL RGBFCHART:
    rgbfchart, ra, dec, $ OR
                    run, rerun, camcol, field, id, 
                    $                ; How big is the image?
                    /pixels, $
                    /arcminutes, $
                    /arcseconds, $
                    $           ; radius of chart
                    radius=, $
                    $
                    runuse=,   $ ; sometimes don't want to use first run found when ra/dec searching
                    $
                    $           ; Should we mark positions?
                    /markPosition, $
                    markStruct=, $ ; mark style structure for ra/dec (object)
                    extra_markStruct=, $ ; extra marking structs
                    $           ; Draw N-E direction arrows?
                    /directions, $
                    $           ; display parameters for rgbview
                    nonlinearity=, $
                    alpha=, $
                    low_cut=, $
                    /sdss, $
                    /addu,$
                    /prompt, $
                    $           ; For writing images
                    jpegfile=, pngfile=, $
                    expand=, $
                    jpegfchart=, pngfchart=,$
                    z_resolution=, $
                    $           
                    $           ; These can be returned
                    $           
                    fu=, fg=, fr=, fi=, fz=, $
                    struct=, $ ; struct for fields used
                    photoid=, $ ; index of closest object
                    objx=, objy=, $
                    useind=, $
                    imtot=, $
                    $           ; Style for X or Z display
                    addtitle=, title=, xtitle=, $
                    order=, $
                    /nodisplay, $
                    rmap=, gmap=, bmap=, $ ; 8-bit color maps
                    astrans=,$ ; Use the astrans to find radec?
                    status=, $ ; exit status
                    maguse=

         FOR COMPATABILITY ONLY
               saturation=saturation,contrast=contrast, gamma=gamma,$
               giffile=giffile, giffchart=giffchart, clip=clip,maxsize=

 INPUTS: 
    Either of these:
      ra/dec: coordinates in degrees.  This position will be marked in the 
           image if the /markPosition keyword is sent, and the mark style 
           can be controlled with the markstruct keyword.  Other objects 
           may be marked using the extra_markstruct input keyword.
      run,rerun,camcol,field,id: SDSS id info for object chart is built 
            around.

 OPTIONAL INPUTS:
    /pixels: Use pixel units for all entered quantities.
    /arcminutes: Use arcminte units (default)
    /arcseconds: Use arcsecond units.
    radius:  Half length of the square finding chart in specifiied units.

    runuse: find_radec may return more than one run. Set this value
            to an integer to choose which run.

    /markPosition:  Mark the position of entered object or nearest object if 
                    ra/dec was specified.  Default is a cross.
    markStruct=: Mark structure describing the mark. e.g
         markstruct = {ra: 200.0, dec: 0.0, type: 'circle', radius: 0.5}
         for more options, see markstruct_copy_defaults.pro
    extra_markStruct=: other positions to be marked.

    /direction:  Print N-W direction arrows.

    nonlinearity: scaled image = asihn(nonlinearity*alpha*(im-sky))/nonlin
    alpha:
    low_cut: Lowest value in image to use
    /sdss:   Use SDSS parameters to rescale counts to energy.
    /addu:  add the u-band to the g image
    /prompt: Use a prompt in rgbview to interactively change display
             parameters.

    jpegfile: File to write full-res jpeg to.
    pngfile:  same for png
    expand=: Integer factor by which to expand the image. 
    jpegfchart:  Name of jpeg file to write a finding chart. 
                  If sent write_jpeg will be called and the image will be 
                  written from the X-window.
    pngfchart: png finding chart file.
    z_resolution: resoluton in z-buffer, used when no display exists.
    addtitle: Additional title to tack on
    title: Title
    xtitle: xtitle
    order: IDL image order

    /astrans: use astrans method to find radec
    maguse: which magnitude used.


 OPTIONAL OUTPUTS:
    fu, fg, fr, fi, fz: finding charts individual bands
    struct: the PHOTO structure read in to make finding chart
    objx, objy: positions in finding chart.
    useind: index of objects used as "center".
    photoid: index into struct of nearest object to ra/dec
    imtot: the bytescaled total rgb image
    rmap=rmap, gmap=gmap, bmap=bmap: 
          If on 8-bit display, one can set these keywords to 
          a  named variable which will be set to the color map
    status: if status ne 0 then something went wrong

 CALLED ROUTINES:
    FIND_RADEC_FCHART (calls many programs)
    FCHART
    RGBVIEW
    CIRC_RADEC
 
 PROCEDURE: 
    
	

 REVISION HISTORY:
    Created ??-??-2001.  Documentation added 3-Jul-2002
              Erin S. Sheldon UofMich
       
                                      

(See pro/sdss//rgbfchart.pro)


RGBVIEW

[Previous Routine] [Next Routine] [List of Routines]

 NAME:
    RGBVIEW
       
 PURPOSE:
    Create and display a RGB image from red, green, and blue input images.
    This program designed for use with astronomical images: 
      * The image has the "sky" removed, so that the sky is black.
      * An asinh stretch is used, as described in Lupton et al.
        astro-ph/0312483  

    SDSS should use red=i, grn=r, blue=g although this will have false
    color. This can be input for each image, or the median is used.

    If the device is postscript, then a color postscript is made.
    NOTE: The color map is NOT inverted so there is often large amounts
          of black space.

    Works best on devices with 16 million+ colors, but will work sensibly
    with any number of available colors (e.g. 256 in postscript)

    Also note that the number of colors on your display does not affect
    the optional jpeg/png files that RGBVIEW outputs because it uses full
    color range when producing them.

    WARNING: this program can use lots of memory. It makes 
    a copy of each image for speed: each image is converted to float and
    sky subtracted. If your images are already sky-subtracted and float then
    you should modify this program.

 CALLING SEQUENCE:
    rgbview, rr, gg, bb, $
             $                  ; control the stretch
             nonlinearity=nonlinearity, $
             alpha=alpha, $
             scales=scales, $   ; multiply images by this number
             sdss=sdss, $       ; set scales for sdss
             $                  ; range in image
             low_cut=low_cut, high_cut=high_cut, $
             $                  ; sky is subtracted
             rsky=rsky, gsky=gsky, bsky=bsky, $
             nodisplay=nodisplay, $ ; display?
             prompt=prompt, $  ;should we interact with user for display?
             $                  ; Write jpeg or png
             jpegfile=jpegfile, $
             pngfile=pngfile, $
             expand=expand, $   ; factor to expand pixels when writing image
             $                  ; read from the screen? 
             tvread=tvread, $
             $                  ; some of the images used
             color_im=color_im, imtot=imtot, $
             $                  ; color map used for 8-bit
             rmap=rmap, gmap=gmap, bmap=bmap, $
             $                  ; some screen parameters
             xrange=xrange, yrange=yrange, $
             title=title, xtitle=xtitle, ytitle=ytitle, $
             subtitle=subtitle, $
             noframe=noframe, nolabels=nolabels, $
             silent=silent, $
             _extra=extra_key

 THESE KEYWORDS ARE KEPT FOR COMPATABILITY ONLY, AND WILL BE QUIETLY IGNORED
             gamma=gamma, saturation=saturation, 
             contrast=contrast, 
             rsig=rsig, gsig=gsig, bsig=bsig, 
             giffile=giffile ;gif no longer supported by IDL

 INPUTS: 
    red, grn, blue: The red, green and blue images.  Images must be same size.

 OPTIONAL INPUTS:

    nonlinearity: Image is scaled as
                  asinh(alpha*nonlinearity*(image-sky))/nonlinearity The
                  default is 8, which works well with alpha=0.02 for SDSS
                  images.
    alpha: default 0.02.  Controls where the linearity kicks in, i.e. where
           the asihn behaves linearly.
           For the HDF, I found that nonlinearity=8, alpha=1 works well.
    scales: scale for each image 3 elem. array'

    low_cut:      Lowest value in image to use in the image.
    high_cut:     Highest value to use in the image.

    rsky, gsky, bsky: input sky value of r,g,b images.  Avoides running
                      sigma-clipping to find sky.  If not input, these values
                      can be returned through these keywords.

    jpegfile: If a string is sent in this keyword, rgbview will write a jpeg
              file containing the image with this filename.  Written directly
              at full resolution from the images unless /tvread is set.
    pngfile: same as above except writes png image file.  
    expand: Factor to expand pixels when writing image (not tvread)

    xrange, yrange, noframe, nolabels: see tvim2
    title,xtitle,ytitle,subtitle: Plot labels.
    _extra=extra_key:  Other plotting keywords.

 KEYWORD PARAMETERS:
    /sdss: if set, rescales images by energy based on sdss filters.  
    /nodisplay: if set, no display is made.  You might use this if you are
          just outputting the jpeg files, maybe in a batch job if used in
          conjunction with /prompt
    /prompt: if set then user can interactively change display parameters.
    /tvread: write the image to file from the display rather than directly
             from the composite image.
    /silent:
       
 OPTIONAL OUTPUTS: 
    imtot: image containing ar, ag, ab in the form bytarr(3, n, m).  Can be 
         input directly to write_jpeg to produce 24-bit image.
    rmap,gmap,bmap: color map vectors.  These are the vectors used to display 
         this image.  If using an 8-bit display, they can be sent to 

                IDL> WRITE_PNG, filename, TVRD(), rmap, gmap, bmap
           
         If on 8-bit display, you might need to go back to BW linear display
         The color map can be reset to BW linear with loadct,0
 
    color_im: a byte 2-d image containing the image used for display with the 
        8-bit color maps above
  
 CALLED ROUTINES: (lower case are built in IDL procedures)
    DCENTER
    SIGMA_CLIP
    color_quan
    bytscl
    tv
    tvlct
    (device)
    (write_gif)
    (write_jpeg)

 PROCEDURE: 
    

 REVISION HISTORY:
    Author: Erin Scott Sheldon  UofMich  11/28/99
                                             

(See pro/plotting//rgbview.pro)


RND

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  RND

 PURPOSE:
  Round a number to the nearest decimal point.  Similar to build-in round, but
  can round to any digit.


 CATEGORY:
  Util.


 CALLING SEQUENCE:
  num = rnd(number [, digit])


 INPUTS:
  number: the number to be rounded

 OPTIONAL INPUTS:
  digit: The rounding digit.  Default is digit=0, or integer rounding.


 OUTPUTS:
  number rounded to requested digit.

 EXAMPLE:
  IDL> print,rnd(3.14159, 4)
      3.14160


 MODIFICATION HISTORY:
  First documented 1-August-2005.  Author, Erin Sheldon Uchicago

(See pro/util//rnd.pro)


ROWCOL2EQ

[Previous Routine] [Next Routine] [List of Routines]

 NAME:
   rowcol2eq
       
 PURPOSE:
    convert from row/col to equatorial coords, ignoring higher
    order terms in the transformation. For this
    crude program, you need to read in the transformation file and know
    the sdss field to do the transformation.  

 CALLING SEQUENCE:
    rowcol2eq, trans, node, inc, field, row, col, ra, dec, status=

 INPUTS: 
    trans: the astrans file for this run,camcol,bandpass. Use 
          READ_ASTRANS to get the astrans file.
    field: the field
    row,col: sdss row/col coordinates for a given bandpass

 OUTPUTS: 
    ra,dec: equatorial coordinates

 OPTIONAL OUTPUTS:
    status: 1 for success, 0 for failure

 PROCEDURE: 
    The row,col are from 562 of run 756, the r-band
    run=756
    rerun=44
    camcol=3
    field = 562
    bandpass=2
    trans=sdss_read('astrans',run,camcol,bandpass=bandpass,node=node,inc=inc)
    rowcol2eq, trans, node, inc, field, row, col, ra, dec
	

 REVISION HISTORY:
    15-AUG-2002 Creation.  Erin Scott Sheldon UofMich
       
                                      

(See pro/sdss//rowcol2eq.pro)


ROWCOL2MUNU

[Previous Routine] [Next Routine] [List of Routines]

 NAME:
   rowcol2munu 
       
 PURPOSE:
    convert from row-column to great circle coordinates (mu,nu)

 CALLING SEQUENCE:
    rowcol2munu, trans, field, row, col, mu, nu, ri=ri

 INPUTS: 
    trans: the astrans file for this run,camcol,bandpass. Use 
          READ_ASTRANS to get the astrans file.
    field: the field
    row,col: the row,column to be converted to mu,nu

 OPTIONAL INPUTS:
    ri: the r-i color of the objects. 

 OUTPUTS: 
    mu,nu: SDSS great circle coords.

 OPTIONAL OUTPUTS:
    status: 1 for success, 0 for failure

 REVISION HISTORY:
    14-NOV-2000 Creation.  Erin Scott Sheldon UofMich
       
                                      

(See pro/sdss//rowcol2munu.pro)


RUN2STRING

[Previous Routine] [Next Routine] [List of Routines]

 NAME: 
    RUN2STRING
       
 PURPOSE: 
    Function outputs a string containing run of a photo tsObj 
    file in the correct format: length 6 with zero padding.
	

 CALLING SEQUENCE: 
    result = run2string(run)
      
 INPUTS: 
    run: may be an array.

 REVISION HISTORY:
     Author: Erin Scott Sheldon  Umich 5/25/99
     Now just use a format string.  2006-10-07, Erin Sheldon, NYU
                                      

(See pro/sdss//run2string.pro)


SDSSIDL_CONFIG

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  SDSSIDL_CONFIG

 PURPOSE:
  Return the value of an sdssidl configuration variable

 CATEGORY:
  SDSS Specific routine

 CALLING SEQUENCE:
  value = sdssidl_config(varName, /struct, exists=exists)

 INPUTS:
  varName: The name of the SDSSIDL config. variable to get.

 KEYWORD PARAMETERS:
  /struct: Return the structure containing all the configuration variables. In
           this case the user need not send any arguments.

 OUTPUTS:
  By default, either the value of the configuration varaible or -1 if it does
    not exist. 
  If /struct, then the configuration structure, or -1 if it cannot be read. 

 OPTIONAL OUTPUTS:
  exists=exists:  1 if the variable exists or 0 if not

 COMMON BLOCKS:
  sdssidl_config_block, configStruct, tags


 SIDE EFFECTS:
  If the config file has not been loaded, then sdssidl_load_config is run and
  the common block above is modified.

 EXAMPLE:
  ;; Read the sdss data_dir config variable
  data_dir = sdssidl_config('data_dir')
  
  ;; List the available configuration variables
  help,sdssidl_config(/struct),/str

  ;; Check for a variable and if it is defined, continue
  lss_dir = sdssidl_config('lss_dir', exists=lss_dir_exists)
  if lss_dir_exists then begin 
      file = lss_dir + '......'


 MODIFICATION HISTORY:
  Created: Nov-2004, Erin Sheldon UChicago

(See pro/sdss//sdssidl_config.pro)


SDSSIDL_LOAD_CONFIG

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  SDSSIDL_LOAD_CONFIG


 PURPOSE: 
  Load the configuration file.  The $SDSSIDL_CONFIG variable msut be set by
  the user.  The configuration variables are loaded into a structure, stored
  in a common block.  In addition, the hostname and the ra/dec search runs are
  loaded.


 CATEGORY:
  SDSS specific routine.


 CALLING SEQUENCE:
  sdssidl_load_config

 COMMON BLOCKS:
  sdssidl_config_block


 SIDE EFFECTS:
  configStruct and tags, from the common block, are set


 RESTRICTIONS:
  The $SDSSIDL_CONFIG environment variable must be set by the user.

 MODIFICATION HISTORY:
  Created: Erin Sheldon UofChicago

(See pro/sdss//sdssidl_load_config.pro)


SDSSIDL_SETUP

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  SDSSIDL_SETUP

 PURPOSE:
  Set up SDSSIDL variables. The global variable !sdss is created.  This
  is an instance of the sdss class.  This class inherits sdss_files, 
  sdss_flags, and sdss_util classes.

 CATEGORY:
  SDSS specific routine.

 CALLING SEQUENCE:
  sdssidl_setup, /silent, /reload_config

 RESTRICTIONS:
  To load the config file, the user must set the $SDSSIDL_CONFIG environment
  variable.  This is automatically set if the sdssidl_setup shell script
  is sourced.

 MODIFICATION HISTORY:
  Created: Erin Sheldon, UofChicago

(See pro/sdss//sdssidl_setup.pro)


SDSS_EXTRACT

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
    SDSS_EXTRACT
 PURPOSE:

    Applies a user defined extraction function to an SDSS column....
  
 INPUTS:  
    filename: name of input fits file
    ofilename: output fits file (will overwrite existing file)
    command_name: command to use for extraction
		This MUST take as arguments
			list (input)
			index (output)
		It should return -1 in the index if nothing passes.
    taglist:  A list of photo tags in all CAPS that the user wants
                    in struct
    nframes:  Optional parameter which tells how many frames to read
                    from filename
    start:    Beginning fram
    max_mag: maximum magnitude to use (default=20)
    sig_clip: Number of sigma for clipping large radius objects (default=3)
    addrow:   Optional parameter which tells how many rows the user
                    wants to add to objc_rowc (That tag must be in taglist)
    groupn: How many frames to take together
 Outputs: fits file containing stars

 Author:  Phil Fischer
 Date: 1/14/9
	
 Modified: Tim McKay
 Date: 5/6/99

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(See pro/sdss//sdss_extract.pro)


SDSS_FILE()

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  sdss_file()

 PURPOSE:
  Return an SDSS file name for the input filetype, and id information.

 CATEGORY:
  SDSS specific

 CALLING SEQUENCE:
   file=sdss_file(type, run, camcol, rerun=, bandpass=, fields=, 
                  dir=, /nodir, /stuffdb, exists=)
  

 INPUTS:
   type: file type.  For a list of types do
     print,!sdss->supported_filetypes()
   run: The sdss run.
   camcol: The camcol.  This is optional for some file types.

 OPTIONAL INPUTS:
   rerun: SDSS rerun.  If not sent, the run_status structure is searched
       for the run and the latest rerun is returned.
   bandpass: The bandpass in numerical of string form where
       u,g,r,i,z -> 0,1,2,3,4
   fields: The fields to read. Defaults to a pattern with '*' for the 
       field number.
   /nodir: Do not prepend the directory.
   /stuffdb:  Filenames for db stuffing.

 OUTPUTS:
   The file name.

 OPTIONAL OUTPUTS:
   dir: The directory.
   exists: 1 for yes, 0 for no

 RESTRICTIONS:
   If rerun is not sent, the run must be defined in the run status structure.

 MODIFICATION HISTORY:
   Created Erin Sheldon, UChicago 

(See pro/sdss//sdss_file.pro)


SDSS_FILES__DEFINE

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  SDSS_FILES__DEFINE


 PURPOSE:
  A class definition file containing methods for dealing with sdss files.  
  This is a much more compact way to store these programs and avoids 
  namespace collisions.

 SOME METHODS Defined in this class file:

  INITIALIZE A NEW OBJECT:
    IDL> sf = obj_new('sdss_files')

  RUN_EXISTS
    IDL> if sf->run_exists(run, reruns=, info=) then ...
    can return array of available reruns and info structs

  RERUN_EXISTS
    IDL> if sf->rerun_exists(run, rerun) then ....

  RERUN
    IDL> reruns = sf->rerun(runs, /min)
    By default it finds latest rerun for the input run.  Set /min to find
    earliest. Can send an array of runs.

  STRIPE
    IDL> stripes = sf->stripe(runs)

  STRIP
    IDL> strips = sf->strip(runs)

  RUNS
    IDL> runs = sf->runs()
    Get a list of all unique runs
  RUNS_RERUNS
    IDL> sf->runs_reruns, runs, reruns
    Get a list of runs and reruns.  Runs may be duplicated here.

  RUNDIR
    IDL> rundir = sf->rundir(run, rerun=, /min, /corrected, exists=)
    Get the directory for an sdss run. See rerun for /min.

  FILEDIR
    IDL> dir = sf->filedir(subdir, run, rerun=, camcol=, /corrected, exists=])
    Get the directory for a subdir of a run.  Valid subdirs:
         astrom, calibChunks, corr, nfcalib, objcs, photo, zoom, rezoom,
         combined.  If camcol is sent, and there are camcol subdirectories for
         this type, then that is appended to the directory.

  FILE2FIELD
    IDL> fields = sf->file2field(files)
    Extract the field numbers from a set of sdss files.  Assumes last 0000
    represent the field, as in tsObj-000756-3-44-0803.fit

  FILELIST
    IDL> files = sf->filelist(filetype, run, camcol, rerun=, bandpass=,
                              fields=, dir=, exists=)
    Get all the files of a certain type.  Valid file types:
         tsObj, tsField, fpObjc, fpAtlas, fpM, fpBin, psField, adatc

  FILE
    IDL> name = sf->file(type, run, [camcol, fields=, rerun=, bandpass=, dir=,
                         /nodir, /stuffdb])
    Supported file types:  asTrans, tsObj, tsField,
                           fpObjc, fpAtlas, fpM, fpBIN, fpFieldStat,
                           psField, psBB, adatc
    All types except asTrans require that the camcol is entered.
    For fpM, fpBIN, and psBB you must enter the bandpass as an integer or
      string. 
    If fields is not entered, a value of '*' is used.  Useful for making file
      patterns.  Fields can be an array.
    Examples:
        IDL> fname = sf->name('tsObj', 756, 2, field=125, /nodir)
        IDL> file = sf->name('asTrans', 756)

  READ
    This is still basic.  Will add more functionality such as is in
    read_tsobj.
    IDL> struct = sf->read(type, run, [camcol, fields=, rerun=, bandpass=, 
                           taglist=, wstring=, /pointers, status=)


  STRIPE2STRING
    IDL> result = sf->stripe2string(stripes)
  RUN2STRING
    IDL> result = sf->run2string(runs)
  FIELD2STRING
    IDL> result = sf->field2string(fields)
  ID2STRING
    IDL> result = sf->id2string(ids)

  METHODS
    IDL> methods,'sdss_files'
    IDL> doc_method,'sdss_files::read'

  HELP
    Print the documentation for this class


 COMMON BLOCKS:
   sdss_files_filelist_block, filetype_old, run_old, rerun_sent, rerun_old, $
       camcol_sent, camcol_old, files_old

 RESTRICTIONS:
  Needs to read the run_status file for most operations. 

 MODIFICATION HISTORY:
   Created: 12-Apr-2005, Erin Sheldon, UofChicago.  Consolidated from
            existing procedures.

(See pro/sdss//sdss_files__define.pro)


SDSS_FLAG

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  SDSS_FLAG

 PURPOSE:
  Return the SDSS flag value given the flag name.

 CATEGORY:
  SDSS specific

 CALLING SEQUENCE:
  flagval = sdss_flag(flag_type, flag_name, status=)

 INPUTS:
  flag_type: The flag type. A list of supported types can be gotten from
     The !sdss->flagtypes() function.  E.g. OBJECT1, PRIMTARGET, etc.
  flag_name: The flag name, e.g. GALAXY, or PRIMARY

 OUTPUTS:
  The flag value

 OPTIONAL OUTPUTS:
  status: 1 for success, 0 for failure

 EXAMPLES:
   IDL> print,sdss_flag('target', 'galaxy_red')
       32
   if (primtarget and sdss_flag('target','galaxy_red')) ne 0 then .....

 MODIFICATION HISTORY:
  Added to archive mid 2005 from ancient existing code. Erin Sheldon, UChicago

(See pro/sdss//sdss_flag.pro)


SDSS_FLAGS__DEFINE (AN IDL CLASS FILE)

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  SDSS_FLAGS__DEFINE  (An IDL Class File)

 PURPOSE:
  Defines a set of methods for doing SDSS flag selection.

 CATEGORY:
  SDSS 

 CALLING SEQUENCE:
  sf=obj_new('sdss_files')

 SIDE EFFECTS:
  The sdss flagvals file is read and internal pointers are created to
  the data.

 RESTRICTIONS:
  The flagvals.idl data file must exist in the expected place.
     getenv("SDSSIDL_DIR")+'/data/flagvals.idl'

 METHODS:
  Use the methods procedure to list the methods of this file.
     IDL> methods, 'sdss_files'
  And the doc_method procedure to get documentation on individual
  methods.
     IDL> doc_method, 'sdss_files::flag_select'

  A quick list of useful methods:
  
    ::flag_select(flags,type,select_struct)  - Do flag selection using a flag struct
    ::flag(type,name)  - Return the flag value for the input type and name
    ::flagtypes()    - Return available flag types.
    ::flagnames(type)  - Return flag names for a given flag type.
    ::print_flagdefs - Print all available flag info.

 EXAMPLES:
   IDL> sf=obj_new('sdss_flags')
   IDL> fst = {galaxy_red:  'Y'}
   IDL> si = sf->flag_select(st.primtarget, 'primtarget', fst}

   IDL> fst = {child: 'y', satur: 'n'}
   IDL> si = sf->flag_select(st.flags[2], 'object1', fst)

   ; Choose either lrg or main sample galaxies usign the /orflags option.
   IDL> fst = {galaxy_red: 'Y', galaxy: 'Y'}
   IDL> si = sf->flag_select(st.primtarget, 'primtarget', fst, /orflags}

   NOTE: If sdssidl_setup is run, you can use these methods from the
     !sdss object.  e.g.
       IDL>  print, !sdss->flag('object1','bright')


 MODIFICATION HISTORY:
  Created: Mid-2005  Erin Sheldon Uchicago

(See pro/sdss//sdss_flags__define.pro)


SDSS_FLAG_PLOT

[Previous Routine] [Next Routine] [List of Routines]

 NAME:
   sdss_flag_plot

 PURPOSE:
   Plot a histogram of the flags set for a set of objects.

 CALLING SEQUENCE:
   sdss_flag_plot, flags, flagtype, _extra=_extra

 INPUTS:
   flags: a flag array.
   flagtype: The flag type. Currently supported flags may be listed 
      using the
         IDL> sf->print_flagtypes 
      method, but is most likely at least
         OBJECT1, OBJECT2, PRIMTARGET, SECTARGET, STATUS

 OPTIONAL INPUTS:
   _extra: Extra plotting keywords.

 EXAMPLE:
   sdss_flag_plot, struct.primtarget, 'primtarget'

 MODIFICATION HISTORY:
   Generalized from old program.  2006-12-3, Erin Sheldon, NYU.

(See pro/sdss//sdss_flag_plot.pro)


SDSS_FLAG_PRINT

[Previous Routine] [Next Routine] [List of Routines]

 NAME:
   sdss_flag_print

 PURPOSE:
   Print all flags that are set.

 CALLING SEQUENCE:
   sdss_flag_print, flags, flagtype, _extra=_extra

 INPUTS:
   flags: a flag array.
   flagtype: The flag type. Currently supported flags may be listed 
      using the
         IDL> sf->print_flagtypes 
      method, but is most likely at least
         OBJECT1, OBJECT2, PRIMTARGET, SECTARGET, STATUS

 EXAMPLE:
   sdss_flag_print, struct.flags2, 'object2'

 MODIFICATION HISTORY:
   Generalized from old program.  2006-12-3, Erin Sheldon, NYU.

(See pro/sdss//sdss_flag_print.pro)


SDSS_FLAG_SELECT_STRUCT

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
   sdss_flag_select_struct

 PURPOSE:
   Return a flag selection structure for a given flag type.  This can be
   sent to sdss_flag_select.  This will also show you all the possible
   flags for a given type, although not all elements must be in the
   structure sent to sdss_flag_select.

 CATEGORY:
   SDSS specific routine

 CALLING SEQUENCE:
   fs = sdss_flag_select_struct(flagtype, default=, status=)

 INPUTS:
  flagtype: The flag type. Currently supported flags may be listed 
      using the
         IDL> ft = sf->flagtypes()
      or
         IDL> sf->print_flagdefs
      methods, but are most likely at least
         OBJECT1, OBJECT2, PRIMTARGET, SECTARGET, STATUS, RUNSTATUS

 OPTIONAL INPUTS:
  default: The default selection value. 
        'y': yes, the flag is set
        'n': no, the flag is not set
        'd': Don't care
     The default value is 'd'

 OUTPUTS:
   A flag select structure that can be sent to sdss_flag_select

 OPTIONAL OUTPUTS:
   status: 1 for success, 0 for failure.

 EXAMPLES:
   IDL> fs=sdss_flag_select_struct('object2')
   IDL> fs.bright = 'N'
   IDL> fs.satur = 'N'
   IDL> keep = sdss_flag_select(struct.flags2, 'object2', fs)

   Alternatively, if you already know the flags to check:
   IDL> fs = {bright:'n', satur:'n'}
   IDL> keep = sdss_flag_select(struct.flags2, 'object2', fs)

 MODIFICATION HISTORY:

(See pro/sdss//sdss_flag_select_struct.pro)


SDSS_FLAG_TRUCT([FLAGTYPE], STATUS=)

[Previous Routine] [Next Routine] [List of Routines]

 NAME:
  sdss_flag_truct([flagtype], status=)

 PURPOSE:
  Return the flag structure for all types or a given type if
  the flagtype parameter is sent.  This structure contains the
  flag values by name; e.g. if no flagtype is sent, the object1
  flag "bright" is given by:
    flagstruct.object1.bright
  if flagtype "object1" is sent then this is simplified:
    flagstruct.bright
  Note, individual flag values can be extracted with the flag
  method, or sdss_flag() procedure:
    print,sdss_flag(flagtype,flagname)

 CALLING SEQUENCE:
  si = sdss_flag_struct(flagstype)
  
 INPUTS:
  flagtype: The flag type. Currently supported flags may be listed 
      using the
         IDL> ft = sf->flagtypes()
         IDL> sf->print_flagdefs
      methods, but is most likely at least
         OBJECT1, OBJECT2, PRIMTARGET, SECTARGET, STATUS
 OUTPUTS:
   The flag structure.

 OPTIONAL OUTPUTS:
  status: 1 if success, 0 if failure

 EXAMPLES:
  IDL> fs=sdss_flagstruct('object1')

 MODIFICATION HISTORY:
  Created: Mid-2004  Erin Sheldon Uchicago

(See pro/sdss//sdss_flag_struct.pro)


SDSS_GENRAND

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  SDSS_GENRAND


 PURPOSE:
  Generate random points for photometric or spectroscopic galaxies using
  masks. For photometric galaxies, hierarchical pixel masks are used
  (generated by Ryan Scranton).  For spectroscopic galaxies spherical polygons
  are used, based on the tiling (generated by Max Tegmark).  One can also
  apply the photometric mask to the spectroscopic random points with
  /photmask.  Edge checking can also be performed for specgals (not yet
  implemented).

  NOTE: This code uses apply_sphpoly_mask.pro and apply_pixel_mask.pro. 
        These routines call complied C code, which must be compiled before
        running this program.  Also, the pixel code uses the gsl (gnu
        scientific libraries) which must also be installed on the system.


 CATEGORY:
  SDSS specific routine


 CALLING SEQUENCE:
  sdss_genrand


 INPUTS:
  stripes: For which stripes should be generate random points? e.g. [10,11,12]
     nrand: number of random points.


 OPTIONAL INPUTS:
  phot_maskfile: The mask file for the photometric pixel mask.
  spec_maskfile: The mask file for the specgal spherical polygon mask.
  primary_bound_array: the overall boundaray array for these stripes.  By default, the
     boundary array is created from primary_bound_multi, stripes, each_bound,
     bound_array. Note: Currently the pixel maks code implements bounds based
     on the primary survey area.
  angmax: max angle around each point to search for edges.  If this is sent,
     edges are checked.  Only used if /photmask is also set.
  compcut: A completeness cut for the specgal points.  Each point in the sky
     has a completeness based on the existing spectroscopy. compcut=0 will
     cover all the area observed spectroscopically, but not all
     this area is complete.  By setting this to, say, 0.95, one gaurantees
     that 95% of the target objects in each region actually has a spectra.
     This avoids over-populating incomplete areas with lots of random points.
     One should also apply this cut to the actual specgals used.

 KEYWORD PARAMETERS:
  Types of masks:
    /basic, /simple, /bound, /combined. See apply_pixel_mask for an
    explanation. Default is /basic
  /photmask: apply the boundary photometric mask to the spectra
  /twoquad: when checking for edges (angmax is sent), use the two quadrant
     check method.  In this case, a point is still ok if two adjacent
     quadrants do not find an edge or hole.
  /silent: Don't print anything (note the C programs print things anyway).

 OUTPUTS:
  clambda, ceta: The random points in corrected lambda/eta coordinates.


 OPTIONAL OUTPUTS:
  edgeflag=edgeflag: will be returned if edges are checked.
  maskflags=: Flags from the mask code.



 EXAMPLES:
  * To generate spectro objects with completeness greater than 0.9
  stripes = [10,11,12]
  nrand = 100000
  compcut=0.9
  sdss_genrand, stripes, nrand, clambda, ceta, /spec, compcut=compcut

  * To generate with a cut on the photometric masks:
  sdss_genrand, stripes, nrand, clambda, ceta, /spec, /photmask

  * To check for edges against the photometric mask
  angmax = replicate(0.2, nrand)  ;degrees
  sdss_genrand, stripes, nrand, clambda, ceta, /spec, /photmask, angmax=angmax

  * To generate random points from the photometric mask, not including the
  * combined or "junk" masks
  sdss_genrand, stripes, nrand, clambda, ceta

  * To include the junk masks
  sdss_genrand, stripes, nrand, clambda, ceta, /combined

 EXTERNAL ROUTINES:

  primary_bound_multi.pro
        |-> primary_bound.pro
  apply_sphpoly_mask.pro
        |-> sphpoly_completeness.pro
  apply_pixel_mask.pro

  arrscl.pro

 MODIFICATION HISTORY:
  Created: 25-May-2003 Erin Scott Sheldon

(See pro/sdss//sdss_genrand.pro)


SDSS_MAGUSE

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  SDSS_MAGUSE


 PURPOSE:
  Given a structure, look for magnitude arrays and return the tag index of the
  first one found.  The default is to look for CMODEL_COUNTS, then 
  COUNTS_MODEL, PETROCOUNTS, FIBERCOUNTS, PSFCOUNTS. The user can tell it
  to look for a specific tag as well using the magUse keyword.


 CATEGORY:
  SDSS specific routine


 CALLING SEQUENCE:
  wmag = sdss_maguse(struct, magUse=magUse, /silent)


 INPUTS:
  struct: A structure.


 OPTIONAL INPUTS:
  magUse: the name of the magnitude to look for.


 KEYWORD PARAMETERS:
  /silent: no informative messages.


 OUTPUTS:
  the tag index of the matching magnitude array.


 EXAMPLE:
  run=756
  rerun=40
  camcol=3
  field=125
  nFrames=20
  read_tsobj, [run,rerun,camcol], struct, start=field, nFrames=nFrames
  wmag = sdss_maguse(struct)


 MODIFICATION HISTORY:
   Creation: ??-??-2003  Erin Sheldon UofChicago

(See pro/sdss//sdss_maguse.pro)


SDSS_OBJNAME

[Previous Routine] [Next Routine] [List of Routines]
  NAME:
    sdss_objname
  PURPOSE:
    Generate a standard sdss filename chunk from SDSS id info.
  CALLING SEQUENCE:
    name = sdss_objname(run,rerun,camcol,field,id,front=)
  EXAMPLE:
    IDL> print,sdss_objname(756,137,2,125,221, front='myobject-')
    myobject-000756-137-2-0125-00221

  CREATED:
    Erin Sheldon, UofMichigan, ????

(See pro/sdss//sdss_objname.pro)


SDSS_POSTGRES__DEFINE (IDL CLASS FILE)

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  sdss_postgres__define   (IDL Class File)

 PURPOSE:
  This class inherits the POSTGRES class and provides a simple way to access
  postgres tables by SDSS id information (run, rerun, camcol, field, id) and
  the composite 64-bit id "photoid".  The user can send various levels of id
  information, from just runs to individual run,rerun,camcol,field,ids (or
  photoids).

 CATEGORY:
  SDSS routine.

 CALLING SEQUENCE:
  sp=obj_new('sdss_postgres', connect_info=)

 OPTIONAL INPUTS:
  connect_info: This is stored at initialization so can be used later
    without sending. Useful if not using the database listed in the
    PGDATABASE environment variable for example.

 METHODS:

  You can list the methods using 
    IDL> methods,'postgres' and see the
  individual documentaion for each using 
    IDL> doc_method,'postgres::methodname' 
  This class also inherits all the methods of POSTGRES.
 
    sdss_postgres::readbyid()  
       Read data given the any of the id information, from just runs to the 
       full run,camcol,field,id (rerun optional).
    sdss_postgres::read_photoids()
       Read data for a list of photoids. Given an input list of photoids,
       generates a set of queries to retrieve the data.  There is a limit to
       lenght of a query, so this program breaks up the list into multiple
       queries.  Assumes the query length has been increases so it can send
       about 10,000 photoids in a single query.

       Alternatively, a structure with run,rerun,camcol,field,id may be
       sent and photoids will be generated.
         
       photoids are generated from run,rerun,camcol,field,id with the 
       sdss_util::photoid() method.

    sdss_postgres::send_queries
       Takes a list of input queries and collates the results from each and
       returns a single structure.  This takes care of the bookkeeping for
       multiple queries.

    The readbyid() function calls one of a number of functions depending on 
    the arguments.
       sdss_postgres::read_runs(): If only runs are sent.
       sdss_postgres::read_camcol(): If runs,camcols sent.
       sdss_postgres::read_fields(): If runs,camcols,fields sent.
       sdss_postgres::read_ids(): If runs,camcols,fields,ids sent.
          |-> sdss_postgres::read_photoids().


 RESTRICTIONS:


 EXAMPLE:
  IDL> sp=obj_new('sdss_postgres')
  IDL> res = sp->readbyid('datasweep', 756, 3, [125, 166, 172])

  IDL> res = sp->readbyid('datasweep', struct, columns=['ra','dec'])

  IDL> pid = sp->photoid(struct)
  IDL> res = sp->read_photoids('datasweep', pid, clauses='modelfux > 200000')


 MODIFICATION HISTORY:
  Created: Mid-2005 Erin Sheldon.

(See pro/sdss//sdss_postgres__define.pro)


SDSS_PSFREC()

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  sdss_psfrec()

 PURPOSE:
  reconstruct the psf at position (row,col) in an sdss
  field from the KL-decompositions. These can be read
  from the psField files using sdss_read()

 CATEGORY:
  SDSS specific routine.

 CALLING SEQUENCE:
  psf=sdss_psfrec(struct, row, col, counts=)

 INPUTS:
  struct: A PSF KL-decomposition structure read from
       a psField file.
  row,col: row and column in the field.

 OPTIONAL INPUTS:
  counts: The total counts in the image. Default is 
       whatever comes from the reconstruction, which
       is usually close to unity.

 OUTPUTS:
  An image of the PSF.

 EXAMPLE:
  kl=sdss_read('psfield',run, camcol, field=field, extension=3)
  psf=sdss_psfrec(kl, row, col, counts=1000)

 MODIFICATION HISTORY:
  Added to archive, 2007-03-26, written by Dave Johnston
  in the depths of time. 

(See pro/sdss//sdss_psfrec.pro)


SDSS_READ()

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  sdss_read()

 PURPOSE:
  Generic SDSS file reader. Reads asTrans, tsObj, tsField, fpObjc, psField...
  Atlas files have a special reader read_atlas.  psField files are normally
  read the same way as tsObj, etc for extension 6 (the default).  For the
  other extensions you can send an extension and read a single field only. 

 CATEGORY:
  SDSS routine.

 CALLING SEQUENCE:
   st = sdss_read(type, run, camcol, rerun=, bandpass=, fields=, /all,
                  taglist=, wstring=, ex_struct=, extension=, dir=, 
                  /pointers, verbose=, status=)

   if type is 'astrans' the extra keywords node= and inc= exist.

 INPUTS:
   type: The file type. Currently supported types are:
            astrans, tsobj, tsfield, fpobjc, psfield  
         Note: for psField, Multiple files can only be read for 
               extension=6 (the default)

         Atlas files have a special reader sf->atlas read, or for the
         procedural interface read_atlas.
   run, camcol: SDSS id info.

 OPTIONAL INPUTS:
   rerun: Rerun number.  If not sent, latest is used.
   bandpass:  For files that require a bandpass.
   fields: Field number(s).  If not sent, the first is read.
   /all: read all fields.
   taglist: List of tags to read. Default is all.
   wstring: A string that can be sent to the where function to select
     objects.  Should refer the structure as "lnew"
   ex_struct: A structure that will be added to the output structure
     definition.
   extension: FITS extension to read.
   indir: Directory from which to read.  Overrides default directory.
   dir: Directory used for the read.  

   /pointers:  Return an array of pointers rather than an array of structures.
      This saves a factor of two in memory since no copy must be made.
   verbose=: Verbosity level.  0 for silent, 1 for some info, 2 for lots.
             default 1
   /silent: Same as verbose=0.  Verbose keyword takes precedence.

 OUTPUTS:
   An array structure or array of pointers if /pointers is sent.

 OPTIONAL OUTPUTS:
   status: 0 for success, 1 for failure

 EXAMPLES:
   run=756
   camcol=3
   fields=[35,88]
   st = sdss_read('tsobj', run, camcol, fields=fields)

   kl=sdss_read('psfield', run, camcol, field=field, extension=3)
   psf=sdss_psfrec(kl, row, col)

 MODIFICATION HISTORY:
   Conglomeration of various read tools.  Erin Sheldon, NYU

(See pro/sdss//sdss_read.pro)


SDSS_RECFRAME

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  sdss_recframe

 PURPOSE:
  Reconstruct an SDSS frame from atlas images.

 CALLING SEQUENCE:
  sdss_recframe, run, camcol, field, rerun=, imu=,img=,imr=,imi=,imz=,
    idlist=, struct=, status= 

 INPUTS:
  run,camcol,field,rerun=: SDSS field id.

 OPTIONAL INPUTS:
  idlist:  The list of objects to use for reconstruction by SDSS id. If not
     sent, this list is chosen as all objects in the field with no children.

 OUTPUTS:
  imu,img,imr,imi,imz=: The optional images returned.  If the keyword arg
     is not present, then that image is not retrieved from disk.  This can
     save considerable time.

 RESTRICTIONS:
  The sdss atlas images and either tsobj or fpobjc must be on disk and 
  in the directories listed in the sdssidl config file.
 
 EXAMPLE:
  sdss_recframe, 756, 3, 125, imr=imr

 MODIFICATION HISTORY:
  Created sometime in 2004.  Documented 2006. Erin Sheldon, NYU

(See pro/sdss//sdss_recframe.pro)


SDSS_RUNSTATUS()

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
    sdss_runstatus()

 PURPOSE:
    Return the runstatus information structure.  Load the data if needed.
    The runstatus structure contains information about each run on disk,
    such as stripe, strip, rerun, and whether certain files are found.

 CATEGORY:
    SDSS utility

 CALLING SEQUENCE:
    rs = sdss_runstatus(exists=, /reload)

 KEYWORD PARAMETERS:
    /reload:  Reload the runstatus file.

 OUTPUTS:
    The runstatus structure.

 OPTIONAL OUTPUTS:
    exists=:  1 if the data was loaded, 0 if not.
    /silent:  Print nothing.

 COMMON BLOCKS:
    runstatus_block, runstatus
 EXAMPLE:
    rs = sdss_runstatus()
    runs = rs.run
    reruns = rs.reruns

 MODIFICATION HISTORY:
    Some time in 2004.  Erin Sheldon, NYU

(See pro/sdss//sdss_runstatus.pro)


SDSS_RUNSTATUS_CREATE

[Previous Routine] [Next Routine] [List of Routines]

 NAME:
    sdss_runstatus_create
       
 PURPOSE:
    Find files and other info for the runs in the SDSS DATA_DIR and
    SHAPECORR_DIR

 CALLING SEQUENCE:
    sdss_runstatus_create, file=, /photoop

 OPTIONAL INPUTS:
    file: The output file.
    /photoop: Indicates we are working with photoop outputs instead
       of fermilab.

 OUTPUTS: 
    Outputs RUN_STATUS_FILE, a fits file containing info about
    known runs.


 REVISION HISTORY:
    14-NOV-2000 Erin Scott Sheldon UofMich
    30-Nov-2006: Renamed
                                      

(See pro/sdss//sdss_runstatus_create.pro)


SDSS_RUNSTATUS_PRINT

[Previous Routine] [Next Routine] [List of Routines]

 NAME:
    sdss_runstatus_print 
       
 PURPOSE:
    Decode and print the status for the input run/rerun

 CALLING SEQUENCE:
    print_runstatus, run, rerun

 INPUTS: 
    run: photo run
    rerun: photo rerun

 OUTPUTS: 
    print to screen

 REVISION HISTORY:
    
       Creation:
          ??-??-2000: Erin Scott Sheldon UofChicago
          18-Nov-2002: Added bad2 flag checking: tsField files
                                      

(See pro/sdss//sdss_runstatus_print.pro)


SDSS_SPECLINE_NAME

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  sdss_specline_name


 PURPOSE:
  Convert the restframe wavelength of a line to its name. 


 CATEGORY:
  Spectra


 CALLING SEQUENCE:
  name = sdss_specline_name(input_line, type=type, position=position)


 INPUTS:
  line wavelength in angstroms


 OPTIONAL INPUTS:
  none

 OUTPUTS:
  the name in string form, e.g. 'OIII'

 CAVEATS:  This set of lines only works for 1d_22 for now, there are some in
          1d_23 that don't match.  So don't panic if some lines don't show;
          I'll fix it soon.

 OPTIONAL OUTPUTS:
  type: what kind of line it is.
  positions: used by plot_spec1d. A relative position on the plot device.


 MODIFICATION HISTORY:
  Creation: 15-Aug-2003: Erin Sheldon UofChicago

(See pro/sdss//sdss_specline_name.pro)


SDSS_SPEC_TYPE

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  SDSS_SPEC_TYPE


 PURPOSE:
  Convert the spec class number to a string representing the type of the
  object.  For example, sdss_spec_type(2) is "GALAXY"


 CATEGORY:
  SDSS specific routine.


 CALLING SEQUENCE:
  st = sdss_spec_type(spec_cln)

 INPUTS:
  spec_cln: the spec classification number from spectro 1d. This can be an
            array. 

 OUTPUTS:
  The string version of the classification is returned


 MODIFICATION HISTORY:
   Dave Johnston ??/??/??  
   Added to archive, documented.  Erin Sheldon 15-Aug-2003

(See pro/sdss//sdss_spec_type.pro)


SDSS_TRANSFORM__DEFINE (AND IDL CLASS FILE)

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
   sdss_transform__define  (and IDL class file)

 PURPOSE:
   Defines a set of methods for coordinate transformations.

 CATEGORY:
   SDSS specific

 METHODS:
   A list of methods can be obtained with 
     IDL> methods,'sdss_transform'
   Documentation can be obtained with
     IDL> doc_method,'sdss_transform::methodname'
 
     ::eq2csurvey - From equatorial to corrected survey coords.
     ::csurvey2eq - From corrected survey to equatorial.
     ::eq2gc - From equatorial to SDSS great circle coords.
     ::gc2eq - From great circle to equatorial
     ::munu2rowcol - From mu,nu to CCD row,col
     ::rowcol2munu - From CCD row,col to mu,nu
     ::eq2rowcol - From equatorial to CCD row,col
     ::rowcol2eq - From CCD row,col to equatorial.
   
  These involve the poorly defined "survey coordinates"
     ::eq2survey - From equatorial to survey coords.
     ::survey2eq - From survey to equatorial.
     ::gc2survey - From great circle to survey coords.
     ::survey2gc - From survey to great circle coords.

 MODIFICATION HISTORY:
   Consolidated all programs into a class file.  2006-12-3 Erin Sheldon NYU

(See pro/sdss//sdss_transform__define.pro)


SDSS_UTIL__DEFINE (AN IDL CLASS FILE)

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  SDSS_UTIL__DEFINE  (An IDL Class File)

 PURPOSE:
  Defines a set of utility methods usefule for SDSS data manipulation.
  Generally one uses the "sdss" class which inherits this one and
  some others.

 CATEGORY:
  SDSS 

 CALLING SEQUENCE:
  su=obj_new('sdss_util')

 METHODS:
  Use the methods procedure to list the methods of this file.
     IDL> methods, 'sdss_util'
  And the doc_method procedure to get documentation on individual
  methods.
     IDL> doc_method, 'sdss_util::photoid'

  A quick list of useful methods:
  
    ::photoid() - return a unique id given run,rerun,camcol,field,id
                  or a struct containing those tags..
    ::photoid_extract: Convert a photoid to the corresponding run,rerun...
    ::histid() - Return a tree structure for a given set of sdss ids
                 with the leaves as indices.
    ::histid_destroy - free the pointers in the tree
    ::histid_print - print the tree structure.
    ::psfrec: Reconstruct the psf image given a psf structure as read
              with sdss_files::psfield_read()

 EXAMPLES:
   IDL> su=obj_new('sdss_util')
   IDL> phid = su->photoid(run,rerun,camcol,field,id)
   ;; Get tree structure for objects by run,rerun
   IDL> histid = su->histid(run,rerun)
   ;; Get tree structure for objects by run,rerun,camcol
   IDL> histid = su->histid(run,rerun,camcol)


 TODO:
   Move many of the procedures in the sdss directory into this class.
 

 MODIFICATION HISTORY:
  Created: Mid-2005  Erin Sheldon Uchicago

(See pro/sdss//sdss_util__define.pro)


SDSS__DEFINE (AN IDL CLASS FILE)

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  SDSS__DEFINE    (An IDL Class File)

 PURPOSE:
   The main SDSS class file.  Inherits sdss_util, sdss_files, sdss_flags.
   So far the whole point of this class is to inherit the others and 
   simplify the interface.  Most useful if an object is created at 
   IDL startup as a system variable, e.g. !sdss.  This is done by 
   sdssidl_setup which should be put in your startup file.  The startup
   file SDSSIDL_SETUP creates a system variable from an instance of this
   class !SDSS and all methods may be accessed from there without the
   user each time performing the kludgy IDL object declaration.  This also
   prevents the tedious by-hand memory cleanup of IDL objects.

 CALLING SEQUENCE:
   sd=obj_new('sdss')


 EXAMPLES:
  After running sdssidl_setup:
    IDL> struct = !sdss->read('tsobj', 756, 2, fields=[35,112])

    IDL> if !sdss->run_exists(756) then ....
    
    IDL> fst = {galaxy_red: 'y'}
    IDL> si = !sdss->flag_select(struct.primtarget, 'primtarget', fst)
   
 MODIFICATION HISTORY:
  Created Mid 2005 Erin Sheldon, UChicago

(See pro/sdss//sdss__define.pro)


SEARCH_COLOR_SPACE

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
	search_color_space
PURPOSE:
	For taking an sdss catalog and selecting objects of desired	
	colors,magnitude and size. Does this by plotting four plots.
	u-g versus g-r
	g-r versus r-i
	r-i versus i-z
	r versus petrorad(in r color) 
	Then it prompts you to draw a closed curve on all four plots.
	Then it makes a structure with this information stored in it.	
	The structure and a photo catalog can be handed to make_color_flag
	which will then flag each objects with a number 0 to 15
	ie. it will set each of four bits depending on whether the object
	was in each one of the four regions selected. So an object with
	flag =15 was inside of all closed curves drawn.
	This structure can be saved as a binary table and used later for doing
	NON-interactive selections. For example one could define the stellar
	locus once and save it to use again another day.
	

CALLING SEQUENCE:
	-syntax search_color_space,cat,str,qso=qso,
	        all=all,psf=psf,petro=petro,qsofile=qsofile,
	        hist=hist,radrange=radrange

INPUTS:
	cat : the sdss photo-output structure
	
OUTPUTS:
	str : the structure containing your selected regions
	      and the transformation parameters to map
	      the data onto this array. This is used by 
	      make_color_flag.				

KEYWORDS:
	all : if set will use all objects not just stars
	psf : if set will use psfcounts rather than fibercounts
	petro : if set will use petrocounts rather than fobercounts
	qso : if set will over plot known quasars to aid selection
		of quasars	
	qfile : fits binary file of a certain format
		will try default file if this is not given
		quasars from (G. Richards and D. Schneider)
	hist : if set it will use 2D histograms instead of scatter plots
		 (see  "ploth" procedure)
	radrange : the range to use on petrorad default=[0,6]
	_extra=ex : extra keywords handed to ploth or plot

EXTERNAL CALLS:
	extract_stars : called if all is NOT set
	ploth : if hist is set
	mrdfits : if overplotting quasars
	exist
	
METHOD:
	uses IDL function defroi (Define Region Of Interest)
	to make an array having four regions
	the first set to 2^0=1 the second set to 2^1=2 the third 2^2=4
	and the fourth 2^3=8. All other are set to 0.
	The parameters for the linear transformation
	from data to device coordinated are all saved with this array in 
	the structure str. So later one can map a star or galaxy onto this 
	array and read its pixlel. It will map onto four pixles 
	since it has four pairs of data points and these can be summed
	to give it a flag 0 to 15 indicating uniquely whether it is in 
	each of the regions of interest. Most often people will
	use this with "select_colors" wrapper which just outputs the 
	index of objects flagging to 15 (ie. they are in all regions) 
	but this program is slightly more general.	
	
EXAMPLE
	see select_colors
NOTES
DO NOT CHANGE THE WINDOW SIZE
it must remain [640,640] for defroi to work

HISTORY:  written by David Johnston -University of Chicago
	Physics Department 1999

(See pro/sdss//search_color_space.pro)


SELECT_COLORS

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
	select_colors

PURPOSE:
	An interactive tool for selection sdss objects based on their
	colors ,  magnitudes and size. It will make the following four plots:
	u-g versus g-r
	g-r versus r-i
	r-i versus i-z
	r versus petrorad(in r color) 
	Then it prompts you to draw an arbitrary closed curve on all 
	four plots. From these curves it selects the objects having
	parameters contained in all four regions and outputs their index.
		
CALLING SEQUENCE:
   -syntax select_colors,cat,index,str,stars=stars,qso=qso
	qfile=qsofile,hist=hist,radrange=radrange,psf=psf,petro=petro

INPUTS:
	cat : the sdss photo-output structure
	
OUTPUTS:
	index : the index of selected points
	str : the structure that is made by search_color_space
		and given to make_color_fLag
		can be saved as a fits binary table for later use
		(see those two programs for details)
	
KEYWORDS:
	stars : if set will dispay only stars 
	        (so one can see the locus better)
	qso : if set will overplot known quasar colors (to aid 
		selection of quasars)
	qfile : fits binary file of known quasar colors
                 if not given will try the default file		
	hist : if set it will use 2D histograms rather than scatter plots.
		Aids visualization when many objects are plotted and is faster
		when there are many thousands to plot.
	radrange : the range on petrorad , the default is [0,6]
	psf : if set it will use psfcounts instead of fibercounts
	petro  : if set it will use petrocounts instead of fibercounts
	_extra=ex : extra keywords eventually handed to ploth or plot 

EXTERNAL CALLS:
	search_color_space
	make_color_flag
	
METHOD:
	uses IDL function defroi (Define Region Of Interest)
	explained in search_color_space
	and make_color_flag
	
EXAMPLE OF USES:
	defining the stellar locus
	selecting objects with quasar colors
	star galaxy seperation
	looking for interesting objects
	make multiple selections like so:

	IDL> select_colors,cat,stellar
	IDL> select_colors,cat(stellar),qsocolor

	IDL> qsoindex=stellar(qsocolor)
   we have indexed the index so that cat(qsoindex) are indeed the
   selected quasars 		
	
	
NOTES

HISTORY:  written by David Johnston -University of Chicago
	Physics Department 1999

(See pro/sdss//select_colors.pro)


SETFONT

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
   setfont

 PURPOSE:
   Set the font.  Currently only supports vector fonts, for which it is
       more important since it is difficult to do properly on the fly.

 CALLING SEQUENCE:
   setfont, font

 INPUTS:
   font: The vector font number.
 OPTIONAL INPUTS:
   tmpdir=:  The directory to hold the temporary file.  Default is /tmp

 SIDE EFFECTS:
   The default font is set.

 RESTRICTIONS:
   Must be able to create a temporary file in tmpdir.

 EXAMPLE:
   ; Use the Complex Roman font
   setfont, 6

 MODIFICATION HISTORY:
   2007-08-25: Creation, Erin Sheldon, NYU

(See pro/plotting//setfont.pro)


SETUPPLOT

[Previous Routine] [Next Routine] [List of Routines]

 NAME:
    SETUPPLOT
       
 PURPOSE:
    Set up default plotting parameters. Parameters are taken from
    the !pslayout system variable, created by the pslayout procedure.
    The user should put a copy of pslayout in their path and change
    the defaults to suit them. Note pslayout contains tags for setting
    up X and Z buffer as well as PS

    Also runs simpctable, to create a set of colors, and defsymbols
    to define the system variables !tsym for true-type font symbols
    and !vsym for vector drawn font symbols, and !csym for use with
    either true-type or vector drawn fonts.  Note, this is obsoleted
    by the textoidl() program which allows one to type tex symbols.

 CALLING SEQUENCE:
    setupplot [, type, /help, /test, true=true, /invbw, tmpdir=]

 OPTIONAL INPUTS:
    type: if given, the type is set using set_plot, type
    tmpdir=: Temporary directory used by setfont for setting the vector
       font. Default is /tmp
 KEYWORD PARAMETERS:
    /true: Can set /true to use true-type fonts. Can be used to override
           the x_true and ps_true tags in !pslayout
    /test: run a test showing all the symbols created by defsymbols.pro
    /help: print simple syntax/help.
    /invbw: flip colors

 OUTPUTS: 
    None unless /test, in which case some plots are made.

 OPTIONAL OUTPUTS:
    None

 CALLED ROUTINES:
    PSLAYOUT
    SIMPCTABLE
    DEFSYMBOLS
 
 REVISION HISTORY:
    19-Mar-2001 Erin Scott Sheldon UofMich
    2007-08-28: Added setfont calls for vector fonts.
                                             

(See pro/plotting//setupplot.pro)


SIGMA_CLIP

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
    SIGMA_CLIP

 PURPOSE:
    a simple sigma clipping algoritm

 CALLING SEQUENCE:
  sigma_clip, array, amean, asigma, nsig=, niter=, 
              /silent, pause=, index=, /plot, _extra=

(See pro/statistics//sigma_clip.pro)


SIMPCTABLE

[Previous Routine] [Next Routine] [List of Routines]

 NAME:
    SIMPCTABLE
       
 PURPOSE:
    Define a set of colors for plotting. If the display is 8-bit, a color
    table is created.

 CALLING SEQUENCE:
    simpctable, red_ct, green_ct, blue_ct, bits=bits, help=help

 COMMENTS: 
    Sets system variables with values that correspond to colors.

     !Black !White !Red !Green !Blue !Yellow !Cyan !Magenta'

     !LightSteelBlue     !SkyBlue         !DarkSlateGrey'
     !SlateGrey          !LightBlue       !MidnightBlue'
     !NavyBlue           !RoyalBlue       !DodgerBlue'
     !DarkBlue           !Turquoise       !DarkGreen'
     !SeaGreen           !ForestGreen     !LightGreen'
     !Sienna             !Firebrick       !Salmon'
     !Orange             !OrangeRed       !HotPink'               
     !DeepPink           !Violet          !DarkRed'
     !Purple'

     !grey0 grey1 ... !grey100'

 For 8-bit device or display this is the default set of colors.  This set
 can be returned through the colorlist keyword on any device, also including
 !p.color at the beginning.

 On a true-color display, many more colors are defined: all the colors that
 are in the rgb.txt file on unix systems (see the showrgb program). 
 You can send the keyword /showcolors the command showrgb, which shows
 the color names. 

 On an 8-bit display or device (such as postscript) a new color table is
 loaded. 33 colors above are defined plus greys !grey00 to !grey100.  Other
 grey values are also available in the color table.  you want all greys from
 0 to 255, run loadct,0

 INPUTS: 
    None

 OPTIONAL INPUTS:
    bits=bits: input the bits/pixel.  Must be either 8 or 24.
               If not set, simpctable will
               determine it from the number of available colors.

 KEYWORD PARAMETERS:
    /help: if set, a help message is printed showing the 
           the system variables set by SIMPCTABLE
    /showcolors: run the program showrgb if it exists on the machine
       
 OUTPUTS: 
    colorlist=: Array of the standard colors listed above.

 OPTIONAL OUTPUTS:
     red_ct, green_ct, blue_ct: The red, green, and blue color arrays
     loaded for 8-bit devices
     Useful for writing gif files from the plotting window. This only
     makes sense on 8-bit devices
 CALLED ROUTINES:
    (TVLCT) if 8-bit device
 
 EXAMPLE:
    IDL> simpctable
    IDL> plot, [0], /nodata, yrange=[-1.2,1.2],xrange=[0,2.*!pi], $
    IDL>    color=!black, background=!white, xstyle=1
    IDL> x = findgen(300)/299.*2.*!pi
    IDL> y = sin(x) + randomn(seed,300)/5.
    IDL> oplot, x, y, color=!blue
    IDL> oplot, x, sin(x), color=!red
    
	

 REVISION HISTORY:
    Written May 09 2000, Erin Scott Sheldon, U. of Michigan
    Revision History:
      28-Feb-2002  Added all colors in rgb.txt (some 657 colors)
                                      

(See pro/plotting//simpctable.pro)


SPHEREDIST

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
   spheredist
 PURPOSE:
   Compute great circle distances and angles between sets of points.
 CALLING SEQUENCE:
   dis = spheredist(ra1, dec1, ra2, dec2, units=, theta=)
 INPUTS:
   ra1,dec1: First list of positions in degrees.
   ra2, dec2: Second list of positions in degrees.
       The lengths of these sets of coordss must make sense for calculations 
       such as as sin(dec1)*sin(dec2) + cos(dec1)*cos(dec2)*cos(ra1-ra2)
       A typical use is a single ra1,dec1 and a longer list of ra2,dec2.
 KEYWORDS:
   units=: Units of inputs and outputs.  Default 1.
       1: Input positions in degrees.  Outputs in radians.
       2: Input positions in degrees.  Outputs in degrees.
       3: Input positions in radians.  Outputs in radians.
       4: Input positions in radians.  Outputs in degrees.
 OUTPUTS:
   distance: The distance in radians.
 OPTIONAL OUTPUTS:
   theta=: Angle east of north from ra1,dec1 (the origin) to the 
           ra2,dec2 point. (The x-axis points toward the celestial pole; 
           the y-axis points toward increasing R.A. along a line of constant 
           dec.) Either the sets 1 and 2 must be the same length or one of 
           the sets must be length 1. 

 MODIFICATION HISTORY:
   Created 2002 Erin Sheldon, UofMich. Inspired by gcirc.pro and by AEK UW
       

(See pro/astro//spheredist.pro)


SPHOTO_MATCH

[Previous Routine] [Next Routine] [List of Routines]

 NAME:
    SPHOTO_MATCH
       
 PURPOSE:
    Match two photo structs by their run, rerun, camcol, field, 
    and rerun.  This uniquely defines each object.  Same as
    PHOTO_MATCH but works on structs

 CALLING SEQUENCE:
    sphoto_match, pstruct1, pstruct2, matches1, matches2, $
                  count=count, /silent

 INPUTS: 
    pstruct1, pstruct2: photo structures. must contain:
       run, rerun, camcol, field, id:   unique info for each object

 OPTIONAL INPUTS:
    None.

 KEYWORD PARAMETERS:
    /silent: don't print out removal of duplicates
       
 OUTPUTS: 
    matches1, matches2:  match indices for each list.

 OPTIONAL OUTPUTS:
    count: number of matches

 CALLED ROUTINES:
    MATCH
 
 PROCEDURE: 
    Call PHOTO_MATCH 

 REVISION HISTORY:
    ??/??/00  Erin S. Sheldon
       
                                      

(See pro/sdss//sphoto_match.pro)


SPHPOLY_COMPLETENESS

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  SPHPOLY_COMPLETENESS


 PURPOSE:
  Call Andreas' spherical polygon code, which checks ra/dec points against a
  spherical polygon mask, and return the completeness.


 CATEGORY:
  SDSS routine


 CALLING SEQUENCE:
  sphpoly_completeness, ra, dec, completeness, $
                        poly_id=poly_id, poly_area=poly_area, $
                        maskfile=maskfile, verbose=verbose


 INPUTS:
  ra/dec: scalar or arrays of ra/dec in double precision.


 OPTIONAL INPUTS:
  maskFile=: The mask file to use.  Default is from the config file


 KEYWORD PARAMETERS:
  /verbose: Print messages.


 OUTPUTS:
  completeness: The completeness for each ra/dec point.


 OPTIONAL OUTPUTS:
  poly_id: The polygon id for each object.
  poly_area: The area of the polygon each object is in.


 RESTRICTIONS:
  You must have compiled the code.  See the README file in the base directory
  of the SDSSIDL distribution.

 MODIFICATION HISTORY:
   Created Erin Sheldon, UChicago, some time in 2003

(See pro/spherical_polygons//sphpoly_completeness.pro)


STRINGREP

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
   stringrep

 PURPOSE:
   Get a string representation that can be used with execute() to create a 
   variable.  This also allows it to be used with mrd_struct() to create
   a structure tag.  If the /structure keyword is sent then this is 
   equivalent to size(var, /structure) but the returned structure is 
   augmented with a new tag 'stringrep' containing the string description.
   Currently, only 'NONE' is returned for structures, scalar complex, 
   objects, and undefined variables.  Support for structures and scalar
   complex may be added in the future.

 CALLING SEQUENCE:
   d=stringrep(variable, /structure)

 INPUTS:
   variable: an IDL variable.

 KEYWORD PARAMETERS:
   /structure: Same as the result for size(var, /structure) but the returned
       structure is augmented with the 'stringrep' tag containing the string 
       description of the variable.

 OUTPUTS:
   String description of type structure.

 MODIFICATION HISTORY:
   Created: 2007-07-23.  The descriptor code is based on the old datatype()
       program from the Goddard libraries.

(See pro/util//stringrep.pro)


STRIPE2STRING

[Previous Routine] [Next Routine] [List of Routines]

 NAME: 
    STRIPE2STRING
       
 PURPOSE: 
    Function outputs a string containing stripe of a photo tsObj 
    file in the correct format: length 2 with zero padding.
	

 CALLING SEQUENCE: 
    result = stripe2string(stripe)
      
 INPUTS: 
    stripe: may be an array.
	
 REVISION HISTORY:
     Author: Erin Scott Sheldon  Umich 23-OCT-2001
     Now just use a format string.  2006-10-07, Erin Sheldon, NYU
                                      

(See pro/sdss//stripe2string.pro)


STRUCT_ADDTAGS

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
   struct_addtags
       
 PURPOSE:
   Add new tags to the structure. 

 CALLING SEQUENCE:
   newstruct = struct_addtags(oldstruct, tagnames, values, structype=)

 INPUTS: 
   oldstruct: The original structure (or array of structures)
   tagnames: new tag name(s), can be an array
   values: string containing values for tagnames. must be same size
            array as tagnames. Same format as MRD_STRUCT.PRO

 KEYWORD PARAMETERS:
   structyp: a string with the name of the new structure.
     if already defined the program will crash.
       
 OUTPUTS: 
   newstruct: The structure with the new tags in it.

 OPTIONAL OUTPUTS:
   NONE

 EXAMPLE: 
   tagnames=['ra', 'dec', 'image', 'name']
   values  =['0d', '0d',  'intarr(1000, 1000)', "'NGC3035'"]
   newst = struct_addtags(oldstruct, tagnames, values)

 CALLED ROUTINES:
   MRD_STRUCT
   STRUCT_COMBINE
 
 PROCEDURE: 
   Use mrd_struct to create a new structure.
	

 REVISION HISTORY:
   25-OCT-2000, Erin Scott Sheldon
   2007-08-09, Converted from add_tags to function. Erin Sheldon, NYU
                                             

(See pro/struct//struct_addtags.pro)


STRUCT_COMBINE

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
   struct_combine

 PURPOSE:
   Combine 2 equal length arrays of structures into one array of structures,
   with the UNION of the tags.  Values from the common tags will be from the
   first structure.  

 CATEGORY:
   IDL Structures

 CALLING SEQUENCE:
   newst=struct_combine(struct_array1, struct_array2)

 INPUTS:
   struct_array1, struct_array2: equal length arrays of structures.

 OUTPUTS:
   new_struct: the output struct with the UNION of the tags.  Values from the
             common tags will be from the first structure.

 PROCEDURE:
   Get the union of the tags and tag descriptions.  The names are
   concatenated and the duplicates removed.  The order of tags is preserved
   except when common tags are found; then the order will be that of the 
   second structure and the tag definition is also from the second.
   COPY_STRUCT is used to copy, first from struct_array2 then from 
   struct_array1.

 MODIFICATION HISTORY:
   04-June-2004: created, E. Sheldon, UofChicago
   2006-10-06: Now preserves name order.  Also, when structs have the 
       exactly same tags, struct1 is returned. Renamed to struct_combine 
       because it completely subsumes the functionality of that program.
   2007-08-09: Renamed struct_combine and made a function. Erin Sheldon NYU

(See pro/struct//struct_combine.pro)


STRUCT_CONCAT

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
   struct_concat
 
 PURPOSE:
   for concatenating two arrays of structures of the same type
   but not necessarily the same name or order of tag names.

 CALLING SEQUENCE:
   newst=struct_concat(str1, str2, /different)

 INPUTS:
   str1, str2: 2 structures with the same tags to be concatenated.

 OUTPUTS:
   strsum: concatenetion of str1, str2, with tag names in the order
        of str1. If tags have same name but different type, then
        a type conversion is performed, with result having type
        of tag in str1.  Resulting structure has name of str1.
        If tags differ and /different is sent, then the common tags 
        are kept.

 KEYWORD PARAMETERS:
    /different:  Allow different structs keeping the common tags.

 Original Author: Dave Johnston  UofM
 Rewrote and included ability to concat different structures keeping
   common tags. Erin Sheldon, NYU
 2007-08-09: Renamed struct_concat and made into a function.

(See pro/struct//struct_concat.pro)


SURVEY2EQ

[Previous Routine] [Next Routine] [List of Routines]

 NAME:
    SURVEY2EQ
       
 PURPOSE:
    Convert from lambda, eta (SDSS survey coordinates) to ra, dec
    Use of these coordinates are not recommended because they do
    not form a meaningful system.  See the documentation for eq2csurvey.

 CALLING SEQUENCE:
    survey2eq, lambda, eta, ra, dec

 INPUTS: 
    lambda: Survey longitude in degrees
    eta: Survey latitude in degrees
 
 OUTPUTS: 
    ra: Equatorial latitude in degrees
    dec: Equatorial longitude in degrees

 REVISION HISTORY:
    Written: 5/15/2000  Erin Scott Sheldon
                        Taken from astrotools.


 REVISION HISTORY:
    Written: 5/15/2000  Erin Scott Sheldon
                        Taken from astrotools.
       
                                      

(See pro/sdss//survey2eq.pro)


TEXTOIDL[1]

[Previous Routine] [Next Routine] [List of Routines]
 SPECIAL NOTE: 
       The file textoidl_trans_sub_super.pro contains two functions,
       textoidl_trans_sub_super, and textoidl_sub_sup.  The former is the
       generic routine for processing TeX sub/superscripts, the
       latter is used only by textoidl_trans_sub_super and has no general
       utility.  Hence it lives here.  You will see documentation for
       textoidl_trans_sub_super second if you use DOC_LIBRARY.

(See pro/plotting//textoidl.pro)


TEXTOIDL[2]

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
       TEXTOIDL
 PURPOSE:
       Convert a valid TeX string to a valid IDL string for plot labels.
 CATEGORY:
       text/strings
 CALLING SEQUENCE:
       new = textoidl(old)
 INPUTS:
       old            -- TeX string to be converted.  Will not be     in
                         modified.  old may be a string array.
 KEYWORD PARAMETERS:
       FONT           -- Set to 0 to use hardware font, -1 to use 
                         vector.  Note that the only hardware font 
                         supported is PostScript.
       /TEX_SEQUENCES -- return the available TeX sequences
       /HELP          -- print out info on use of the function
                         and exit.
 OUTPUTS:
       new            -- IDL string corresponding to old.             out
 COMMON BLOCKS:
 SIDE EFFECTS:
 NOTES:
       - Use the procedure SHOWTEX to get a list of the available TeX
         control sequences.  
       - The only hardware font for which translation is available is
         PostScript. 
       - The only device for which hardware font'
         translation is available is PostScript.'
       - The FONT keyword overrides the font selected'
         by !p.font'
 EXAMPLE:
       out = TeXtoIDL('\Gamma^2 + 5N_{ed}')
       The string out may be used in XYOUTS or other IDL text
       display routines.  It will be an uppercase Gamma, with an
       exponent of 2, then a plus sign, then an N with the subscript
       ed.
 MODIFICATION HISTORY:
       $Id: textoidl.pro,v 1.8 2004/07/19 16:48:04 schlegel Exp $
       $Log: textoidl.pro,v $
       
       Revision: Added \odot symbol. 2007-08-28, Erin Sheldon, NYU
       Revision 1.8  2004/07/19 16:48:04  schlegel
       Replace calls to the obsolete function RSTRPOS() with STRPOS(/REVERSE_SEARCH).

       Revision 1.7  2000/11/20 02:27:24  dfink
       Added \AA option for Anstroms

       Revision 1.6  2000/07/12 14:31:33  hogg
       fixed another ()/[] bug.

       Revision 1.5  2000/06/15 18:21:23  hogg
       fixed tiny () -> [] bugs

       Revision 1.4  2000/06/03 17:12:42  dfink
       Fink's new textoidl - all procedures in one file; avoid name conflict

       Revision 1.4  1996/06/14 20:00:27  mcraig
       Updated Copyright info.

       Revision 1.3  1996/05/09 00:22:17  mcraig
       Added error handling, cleaned up documentation.

       Revision 1.2  1996/02/08 18:52:50  mcraig
       Added ability to use hardware fonts for PostScript device.

       Revision 1.1  1996/01/31 18:47:37  mcraig
       Initial revision

 RELEASE:
       $Name:  $

 COPYRIGHT:
  Copyright (C) 1996 The Regents of the University of California, All
  Rights Reserved.  Written by Matthew W. Craig.
  See the file COPYRIGHT for restrictions on distrubting this code.
  This code comes with absolutely NO warranty; see DISCLAIMER for details.

(See pro/plotting//textoidl.pro)


TEXTOIDL_MATCHDELIM

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
       TEXTOIDL_MATCHDELIM
 PURPOSE:
        Match open/close delimiters in a string.
 CATEGORY:
        text/strings
 CALLING SEQUENCE:
        position = textoidl_matchdelim( strn, [openpos])
 INPUTS:
        strn        -- a string containing an open                 in
                       delimiter (e.g. '{') in which you 
                       want to find the matching closing  
                       delimiter (e.g. '}')
 KEYWORD PARAMETERS:
        OPEN_DELIM  -- A single character containing the opening   in
                       delimiter (e.g. '(').  Default is '{'
        CLOSE_DELIM -- A single character containing the closing   in
                       delimiter (e.g. ')').  Default is '}'
 OUTPUTS:
        position -- returns the position in strn of the            out
                    closing delimiter, -1 if no closing found.
        openpos  -- Set to a named variable to receive the         out
                    position of the first opening delimiter.
                    Optional.
 COMMON BLOCKS:
 SIDE EFFECTS:
 NOTES:
        - Any pair of (nonidentical) characters can be used as
          delimiters. 
 EXAMPLE:
        textoidl_matchdelim('{one{two}}three') returns 9, the character just
        before 'three'.  
 MODIFICATION HISTORY:
       $Id: textoidl.pro,v 1.8 2004/07/19 16:48:04 schlegel Exp $
       $Log: textoidl.pro,v $
       Revision 1.8  2004/07/19 16:48:04  schlegel
       Replace calls to the obsolete function RSTRPOS() with STRPOS(/REVERSE_SEARCH).

       Revision 1.7  2000/11/20 02:27:24  dfink
       Added \AA option for Anstroms

       Revision 1.6  2000/07/12 14:31:33  hogg
       fixed another ()/[] bug.

       Revision 1.5  2000/06/15 18:21:23  hogg
       fixed tiny () -> [] bugs

       Revision 1.4  2000/06/03 17:12:42  dfink
       Fink's new textoidl - all procedures in one file; avoid name conflict

       Revision 1.3  1996/06/14 20:00:27  mcraig
       Updated Copyright info.

       Revision 1.2  1996/05/09 00:22:17  mcraig
       Removed restriction that open delim must be first char.  Added argument
       to allow for return of position of open delim.

       Revision 1.1  1996/01/31 18:41:06  mcraig
       Initial revision

 RELEASE:
       $Name:  $

 COPYRIGHT:
  Copyright (C) 1996 The Regents of the University of California, All
  Rights Reserved.  Written by Matthew W. Craig.
  See the file COPYRIGHT for restrictions on distrubting this code.
  This code comes with absolutely NO warranty; see DISCLAIMER for details.

(See pro/plotting//textoidl.pro)


TEXTOIDL_NEXTTOK

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
       TEXTOIDL_NEXTTOK
 PURPOSE:
       Find the next occurance of any of a set of characters in a
       string and return the character which occurs next.
 CATEGORY:
       text/strings
 CALLING SEQUENCE:
       tok = textoidl_nexttok( strn, tokens )
 INPUTS:
       strn   -- string to be searched for sub/superscripts    in
       tokens -- string containing characters to be found.     in
 KEYWORD PARAMETERS:
       POSITION -- Set to a named variable to get position     out
                   of next token, or -1 if none found.
       /HELP    -- Print useful message and exit.
 OUTPUTS:
       tok    -- Contains the character among tokens which     out
                 occurs next in strn, or null '' if none found.
 COMMON BLOCKS:
 SIDE EFFECTS:
 NOTES:
 EXAMPLE:
       textoidl_nexttok( 'x^2 + N_j^3', '^_', position=pos ) returns '^' and sets
       pos to 1.
 MODIFICATION HISTORY:
       $Id: textoidl.pro,v 1.8 2004/07/19 16:48:04 schlegel Exp $
       $Log: textoidl.pro,v $
       Revision 1.8  2004/07/19 16:48:04  schlegel
       Replace calls to the obsolete function RSTRPOS() with STRPOS(/REVERSE_SEARCH).

       Revision 1.7  2000/11/20 02:27:24  dfink
       Added \AA option for Anstroms

       Revision 1.6  2000/07/12 14:31:33  hogg
       fixed another ()/[] bug.

       Revision 1.5  2000/06/15 18:21:23  hogg
       fixed tiny () -> [] bugs

       Revision 1.4  2000/06/03 17:12:42  dfink
       Fink's new textoidl - all procedures in one file; avoid name conflict

       Revision 1.3  1996/06/14 20:00:27  mcraig
       Updated Copyright info.

       Revision 1.2  1996/05/09 00:22:17  mcraig
       Generalized so that the next occurence of any of a set of characters will
       be returned.

       Revision 1.1  1996/01/31 18:41:06  mcraig
       Initial revision

 RELEASE:
       $Name:  $

 COPYRIGHT:
  Copyright (C) 1996 The Regents of the University of California, All
  Rights Reserved.  Written by Matthew W. Craig.
  See the file COPYRIGHT for restrictions on distrubting this code.
  This code comes with absolutely NO warranty; see DISCLAIMER for details.

(See pro/plotting//textoidl.pro)


TEXTOIDL_STRCNT

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
       TEXTOIDL_STRCNT
 PURPOSE:
       Count number of occurrences of a substring in a string.
 CATEGORY:
       text/strings
 CALLING SEQUENCE:
       num = textoidl_strcnt(strn, substring, [pos])
 INPUTS:
       string    -- The string in which to count occurences.     in
       substring -- The substring to count occurrences of.       in
       pos       -- the position at which to begin the search.   [in]
                    If not supplied, start at beginning of
                    string.
 KEYWORD PARAMETERS:
       /HELP     -- Print useful message and return.
 OUTPUTS:
       num       -- Number of occurances of substring in string. out
 COMMON BLOCKS:
 SIDE EFFECTS:
 NOTES:
       Overlapping occurances are not counted separately.  For
       example, counting occurances of 'bb' in 'blah bbb' returns one
       occurance. 
 EXAMPLE:
 MODIFICATION HISTORY:
       $Id: textoidl.pro,v 1.8 2004/07/19 16:48:04 schlegel Exp $
       $Log: textoidl.pro,v $
       Revision 1.8  2004/07/19 16:48:04  schlegel
       Replace calls to the obsolete function RSTRPOS() with STRPOS(/REVERSE_SEARCH).

       Revision 1.7  2000/11/20 02:27:24  dfink
       Added \AA option for Anstroms

       Revision 1.6  2000/07/12 14:31:33  hogg
       fixed another ()/[] bug.

       Revision 1.5  2000/06/15 18:21:23  hogg
       fixed tiny () -> [] bugs

       Revision 1.4  2000/06/03 17:12:42  dfink
       Fink's new textoidl - all procedures in one file; avoid name conflict

       Revision 1.3  1996/06/14 20:00:27  mcraig
       Updated Copyright info.

       Revision 1.2  1996/05/09 00:22:17  mcraig
       Added fast processing using BYTE arrays if we are counting occurences of
       a single character.  Added error handling.

       Revision 1.1  1996/01/31 18:47:37  mcraig
       Initial revision

 RELEASE:
       $Name:  $

 COPYRIGHT:
  Copyright (C) 1996 The Regents of the University of California, All
  Rights Reserved.  Written by Matthew W. Craig.
  See the file COPYRIGHT for restrictions on distrubting this code.
  This code comes with absolutely NO warranty; see DISCLAIMER for details.

(See pro/plotting//textoidl.pro)


TEXTOIDL_STRTOK

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
       TEXTOIDL_STRTOK
 PURPOSE:
       Retrieve portion of string up to token.
 CATEGORY:
       text/strings
 CALLING SEQUENCE:
       new = textoidl_strtok( old, token )
 INPUTS:
       old   -- String to be split.  Contains text after    in, out
                token on output.
       token -- Token to use in splitting old.              in
 KEYWORD PARAMETERS:
       /TRIM -- set to remove leading blanks from old 
                before returning.
       /HELP -- print useful message and exit.
 OUTPUTS:
       new   -- portion of string up to token.              out
       old   -- portion of old after token.                 out, in
 COMMON BLOCKS:
 SIDE EFFECTS:
       Input parameter old is modified.
 NOTES:
       Token may be one or more characters.
       If token is not found, returns old and sets old to ''.
 EXAMPLE:
       If old is 'foo44 bar', then textoidl_strtok( old, '44' ) would return
       'foo', and upon return, old will be left with ' bar'.  If /TRIM
       were set, old would be 'bar' on return.

       If old='xyz', then new=textoidl_strtok(old,'a') would return with
       new='xyz' and old=''.
 THANKS:
       To D. Linder who wrote GETTOK, part of the goddard library,
       upon which this is based.
 MODIFICATION HISTORY:
       $Id: textoidl.pro,v 1.8 2004/07/19 16:48:04 schlegel Exp $
       $Log: textoidl.pro,v $
       Revision 1.8  2004/07/19 16:48:04  schlegel
       Replace calls to the obsolete function RSTRPOS() with STRPOS(/REVERSE_SEARCH).

       Revision 1.7  2000/11/20 02:27:24  dfink
       Added \AA option for Anstroms

       Revision 1.6  2000/07/12 14:31:33  hogg
       fixed another ()/[] bug.

       Revision 1.5  2000/06/15 18:21:23  hogg
       fixed tiny () -> [] bugs

       Revision 1.4  2000/06/03 17:12:42  dfink
       Fink's new textoidl - all procedures in one file; avoid name conflict

       Revision 1.3  1996/06/14 20:00:27  mcraig
       Updated Copyright info.

       Revision 1.2  1996/05/09 00:22:17  mcraig
       Added built in help.

       Revision 1.1  1996/01/31 18:47:37  mcraig
       Initial revision

 RELEASE:
       $Name:  $

 COPYRIGHT:
  Copyright (C) 1996 The Regents of the University of California, All
  Rights Reserved.  Written by Matthew W. Craig.
  See the file COPYRIGHT for restrictions on distrubting this code.
  This code comes with absolutely NO warranty; see DISCLAIMER for details.

(See pro/plotting//textoidl.pro)


TEXTOIDL_STRTRANS

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
       TEXTOIDL_STRTRANS
 PURPOSE:
       Translate all occurences of one substring to another.
 CATEGORY:
       text/strings
 CALLING SEQUENCE:
       new = textoidl_strtrans(oldstr,from,to,ned)
 INPUTS:
       oldstr -- string on which to operate.              in
                 May be an array.
       from   -- substrings to be translated. May be      in
                 an array.
       to     -- what strings in from should be           in
                 translated to. May be an array.
 KEYWORD PARAMETERS:
       /HELP  -- Set this to print useful message and 
                 exit.
 OUTPUTS:
       new    -- Translated string. Array if oldstr is    out          
                 an array.
       ned    -- number of substitutions performed in     out
                 oldstr.  Array if oldstr is an array.
 COMMON BLOCKS:
 SIDE EFFECTS:
 NOTES:
       - Any of old, from, and to can be arrays.  
       - from and to must have the same number of elements.
 EXAMPLE:
       inp='Many*bad!chars+in_here'
       from=['*','!','+','_']
       to  =[' ',' ',' ',' ']
       out = textoidl_strtrans(inp,from,to,ned)
       Will produce out='Many bad chars in here', and set ned to 4.
 MODIFICATION HISTORY:
       $Id: textoidl.pro,v 1.8 2004/07/19 16:48:04 schlegel Exp $
       $Log: textoidl.pro,v $
       Revision 1.8  2004/07/19 16:48:04  schlegel
       Replace calls to the obsolete function RSTRPOS() with STRPOS(/REVERSE_SEARCH).

       Revision 1.7  2000/11/20 02:27:24  dfink
       Added \AA option for Anstroms

       Revision 1.7  2000/11/19 18:25:00  dfink / Jonathan Swift
       Added \AA option for Anstroms

       Revision 1.6  2000/07/12 14:31:33  hogg
       fixed another ()/[] bug.

       Revision 1.5  2000/06/15 18:21:23  hogg
       fixed tiny () -> [] bugs

       Revision 1.4  2000/06/03 17:12:42  dfink
       Fink's new textoidl - all procedures in one file; avoid name conflict

       Revision 1.3  1996/06/14 20:00:27  mcraig
       Updated Copyright info.

       Revision 1.2  1996/05/09 00:22:17  mcraig
       Sped up significantly by using str_sep to handle the translation.  No longer
       relies on routines fromother user libraries.

       Revision 1.1  1996/01/31 18:47:37  mcraig
       Initial revision

 RELEASE:
       $Name:  $

 COPYRIGHT:
  Copyright (C) 1996 The Regents of the University of California, All
  Rights Reserved.  Written by Matthew W. Craig.
  See the file COPYRIGHT for restrictions on distrubting this code.
  This code comes with absolutely NO warranty; see DISCLAIMER for details.

(See pro/plotting//textoidl.pro)


TEXTOIDL_SUB_SUP

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
       TEXTOIDL_SUB_SUP
 PURPOSE:
       Return the proper IDL font positioning command for TeX
       sub/superscripts. 
 CATEGORY:
       TeXtoIDL
 CALLING SEQUENCE:
       fnt = textoidl_sub_sup( strn )
 INPUTS:
       strn      -- Either '^' or '_', the TeX super/subscript       in
                    characters
 KEYWORD PARAMETERS:
       /FORCE_UD -- Set this to use !U/!D instead of !E/!I for
                    sub/superscripts .
       /HELP     -- Set to print useful message and exit.
 OUTPUTS:
       fnt       -- Either '!U' or !E' for superscripts,             out
                    or '!D' or '!I' for subscripts.
 COMMON BLOCKS:
 SIDE EFFECTS:
 NOTES:
       Used only by textoidl_trans_sub_super.  Should be kept in same
       file. 
 EXAMPLE:
 MODIFICATION HISTORY:
       $Id: textoidl.pro,v 1.8 2004/07/19 16:48:04 schlegel Exp $
       $Log: textoidl.pro,v $
       Revision 1.8  2004/07/19 16:48:04  schlegel
       Replace calls to the obsolete function RSTRPOS() with STRPOS(/REVERSE_SEARCH).

       Revision 1.7  2000/11/20 02:27:24  dfink
       Added \AA option for Anstroms

       Revision 1.6  2000/07/12 14:31:33  hogg
       fixed another ()/[] bug.

       Revision 1.5  2000/06/15 18:21:23  hogg
       fixed tiny () -> [] bugs

       Revision 1.4  2000/06/03 17:12:42  dfink
       Fink's new textoidl - all procedures in one file; avoid name conflict

       Revision 1.4  1996/06/14 20:00:27  mcraig
       Updated Copyright info.

       Revision 1.3  1996/05/09 00:22:17  mcraig
       Changed some function calls to reflect changes in those functions, moved
       some code out of the main loop that didn't need to be there, added
       documentation.

       Revision 1.1  1996/01/31 18:47:37  mcraig
       Initial revision

 RELEASE:
       $Name:  $
 COPYRIGHT:
  Copyright (C) 1996 The Regents of the University of California, All
  Rights Reserved.  Written by Matthew W. Craig.
  See the file COPYRIGHT for restrictions on distrubting this code.
  This code comes with absolutely NO warranty; see DISCLAIMER for details.

(See pro/plotting//textoidl.pro)


TEXTOIDL_TABLE

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
       TEXTOIDL_TABLE
 PURPOSE:
       Returns a translation table from TeX to IDL.
 CATEGORY:
       text/strings
 CALLING SEQUENCE:
       table = textoidl_table()
 INPUTS:
       None
 KEYWORD PARAMETERS:
       /POSTSCRIPT -- If set, return postscript translation
                      table rather than vector fonts table.
                      Default is translations for vector
                      fonts.
       /HELP       -- Print help and exit.
 OUTPUTS:
       table -- a 2D text array.  table(0,*) contains          out
                the words to be translated away, table(1,*)
                contains the words to translate them to.   
 COMMON BLOCKS:
 SIDE EFFECTS:
 NOTES:
       To find out what TeX sequences are available, look at
       table(0,*).
 EXAMPLE:
 MODIFICATION HISTORY:
       $Id: textoidl.pro,v 1.8 2004/07/19 16:48:04 schlegel Exp $
       $Log: textoidl.pro,v $

       Revision: Added \odot symbol. 2007-08-28, Erin Sheldon, NYU
       Revision 1.8  2004/07/19 16:48:04  schlegel
       Replace calls to the obsolete function RSTRPOS() with STRPOS(/REVERSE_SEARCH).

       Revision 1.7  2000/11/20 02:27:24  dfink
       Added \AA option for Anstroms

       Revision 1.6  2000/07/12 14:31:33  hogg
       fixed another ()/[] bug.

       Revision 1.5  2000/06/15 18:21:23  hogg
       fixed tiny () -> [] bugs

       Revision 1.4  2000/06/03 17:12:42  dfink
       Fink's new textoidl - all procedures in one file; avoid name conflict

       Revision 1.7  1996/07/22 23:56:08  mcraig
       Added \vartheta.

       Revision 1.6  1996/07/12 21:31:42  mcraig
       Fixed \varphi in vector font, added \circ.

       Revision 1.5  1996/06/14 20:00:27  mcraig
       Updated Copyright info.

       Revision 1.4  1996/05/09 00:22:17  mcraig
       Added command to return to previous font after switching to Greek or
       symbol font.

       Revision 1.3  1996/02/08 19:49:35  mcraig
       Removed control sequence \perp because the postscript code for it is '^'.

       Revision 1.2  1996/02/08 18:53:38  mcraig
       Added translations for PostScript fonts, and added several new TeX
       control sequences.

       Revision 1.1  1996/01/31 18:47:37  mcraig
       Initial revision

 RELEASE:
       $Name:  $

 COPYRIGHT:
  Copyright (C) 1996 The Regents of the University of California, All
  Rights Reserved.  Written by Matthew W. Craig.
  See the file COPYRIGHT for restrictions on distrubting this code.
  This code comes with absolutely NO warranty; see DISCLAIMER for details.

(See pro/plotting//textoidl.pro)


TEXTOIDL_TRANS_SUB_SUPER

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
       TEXTOIDL_TRANS_SUB_SUPER
 PURPOSE:
       Translate TeX sub/superscripts to IDL sub/superscripts.
 CATEGORY:
       text/strings
 CALLING SEQUENCE:
       new = textoidl_trans_sub_super( old )
 INPUTS:
       old       -- string to be translated from TeX to IDL.   in
 KEYWORD PARAMETERS:
       /RECURSED -- set if this function is being called 
                    recursively.                  
       /HELP     -- Set to print useful message and exit.
 OUTPUTS:
       new       -- string old converted from TeX to IDL       out
 COMMON BLOCKS:
 SIDE EFFECTS:
 NOTES:
       - For best results, when both a sub and superscript are used,
         place the shorter of the two first (e.g. 'N^{a}_{bbbb}' is
         better than 'N_{bbbb}^{a}').
       - Single character sub/super scripts do not need to be
         protected by braces.
       - Sub/superscripts may be nested (e.g. 'N^{N_1^N}').
 EXAMPLE:
       out = textoidl_trans_sub_super( 'N^2_{big}' )
       Then out='N!U2!N!Dbig!N' which looks like it should on the
       display. 
 LIBRARY FUNCTIONS CALLED:
       textoidl_strtok      -- Text/string (mcraig)
       textoidl_sub_sup -- contained in this file
 MODIFICATION HISTORY:
       $Id: textoidl.pro,v 1.8 2004/07/19 16:48:04 schlegel Exp $
       $Log: textoidl.pro,v $
       Revision 1.8  2004/07/19 16:48:04  schlegel
       Replace calls to the obsolete function RSTRPOS() with STRPOS(/REVERSE_SEARCH).

       Revision 1.7  2000/11/20 02:27:24  dfink
       Added \AA option for Anstroms

       Revision 1.6  2000/07/12 14:31:33  hogg
       fixed another ()/[] bug.

       Revision 1.5  2000/06/15 18:21:23  hogg
       fixed tiny () -> [] bugs

       Revision 1.4  2000/06/03 17:12:42  dfink
       Fink's new textoidl - all procedures in one file; avoid name conflict

       Revision 1.4  1996/06/14 20:00:27  mcraig
       Updated Copyright info.

       Revision 1.3  1996/05/09 00:22:17  mcraig
       Changed some function calls to reflect changes in those functions, moved
       some code out of the main loop that didn't need to be there, added
       documentation.

       Revision 1.2  1996/02/08 18:54:20  mcraig
       Changed default sub/superscript size to be !D/!U rather than !I/!E to
       improve readability of plat annotations.

       Revision 1.1  1996/01/31 18:47:37  mcraig
       Initial revision

 RELEASE:
       $Name:  $

 COPYRIGHT:
  Copyright (C) 1996 The Regents of the University of California, All
  Rights Reserved.  Written by Matthew W. Craig.
  See the file COPYRIGHT for restrictions on distrubting this code.
  This code comes with absolutely NO warranty; see DISCLAIMER for details.

(See pro/plotting//textoidl.pro)


TMPFILE

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
    TMPFILE

 PURPOSE:
    Create a temporary, non-existent filename based on random numbers.

 CALLING SEQUENCE:
	s = tmpfile(prefix=, suffix=, tmpdir=)

 OPTIONAL INPUTS:
   prefix: A prefix to add to the file name.
   suffix: A suffix for the file name.
   tmpdir: A directory to prepend to the file name.

 Example:
	IDL> print,tmpfile(prefix='temp-', suffix='.tmp', tmpdir='/tmp')
   /tmp/temp-1187981506047-217287.tmp
       
 Revision History:
   Creator: Dave Johnston
   Name was not unique enough.  Sometimes when two programs called this
   one within one second, they could get the same file name. 
   Cleaned up the code some.
       2005-01-28, Erin Sheldon UofChicago
   Added tmpdir
       2007-08-24, Erin Sheldon, NYU

(See pro/files//tmpfile.pro)


TVASINH

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  TVASINH


 PURPOSE:
  Display an input image using an asinh stretch (Lupton, et al...)


 CATEGORY:
  Plotting routine.


 CALLING SEQUENCE:
   tvasinh, image, $
            scaled_image=scaled_image, $
            order=, $
            nonlinearity=, alpha=, $
            sky=, high=, $
            /zoom, $
            /noframe, /nolabels, $
            xtitle=, ytitle=, title=, subtitle=, $
            /invbw, $
            max_color=, $
            _extra=_extra


 INPUTS:
  image: two-dimensional image.


 OPTIONAL INPUTS:
  order=:  Image order, flips across y-axis.
  nonlinearity: Nonlinearity parameter in Lupton's asinh stretch.
  alpha: alpha parameter in Lupton's asinh stretch.
  sky=: The sky value, saves time.
  high: The high value to use, rather than the max in the image.

  xtitle=, ytitle=, title=, subtitle=: Plotting keywords
 
  max_color=: Maximum color index available.


 KEYWORD PARAMETERS:
  /zoom: Allow the user to interactively zoom into the image.
  /noframe: Don't draw a frame around the plot.
  /nolabels: Don't draw labels on the plot.
  /invbw: Invert the greyscale.

 OPTIONAL OUTPUTS:
  scaled_image=: The user can return the asinh scaled image through this
                 keyword. 

 MODIFICATION HISTORY:
   Created: Erin Sheldon, UChicago, some time in 2003

(See pro/plotting//tvasinh.pro)


TVIM2

[Previous Routine] [Next Routine] [List of Routines]
 NAME:   
    tvim2

 USEAGE:   tvim2,a

           tvim2,a,title=,xtitle=,ytitle=,xrange=,yrange=,subtitle=,$
                   scale=,range=,/noframe,aspect=

 PURPOSE:  
    Display an image.
            1. numbered color scale 
            2. plot title
            3. annotated x and y axis 
            4. simplified OPLOT capability

 INPUT    a           image quantity

 Optional keyword input:

	   **NOTE**: This routine now uses the _extra mechanism to pass
		     keywords for put_clr_scl.

          title       plot title

          xtitle      x axis title
 
          ytitle      y axis title

	   subtitle    x axis subtitle

          xrange      array spanning entire x axis range.  
                      NOTE:  TVIM2 only uses XRANGE(0) and
				XRANGE(N_ELEMENTS(XRANGE)-1).

          yrange      array spanning entire y axis range.  
                      NOTE:  TVIM2 only uses YRANGE(0) and
				YRANGE(N_ELEMENTS(YRANGE)-1).

          scale       if set draw color scale.  SCALE=2 causes steped
                      color scale

          range       two or three element vector indicating physical
                      range over which to map the color scale.  The
                      third element of RANGE, if specified, sets the
                      step interval of the displayed color scale.  It
                      has no effect when SCALE is not set. E.g.,
                      RANGE=[0., 1., 0.1] will cause the entire color
                      scale to be mapped between the physical values
                      of zero and one; the step size of the displayed 
                      color scale will be set to 0.1.

          aspect      the x over y aspect ratio of the output image
                      if not set aspect is set to (size_x/size_y) of the
                      input image. If set it -1, no aspect ratio is forced. 

          /noCenter:  if set, don't center the display

          noframe     if set do not draw axis box around image

	   nolabels    If set, inhibits labels on plot and scale.
	  
	   invbw       To invert the color table ie. array=!d.n_colors-1-array
		       before calling tv. The deault is invbw=1 for the
		       postscript device and invbw=0 else.		


 SIDE EFFECTS:        Setting SCALE=2 changes the color scale using the
                      STEP_CT procedure.  The color scale may be returned
                      to its original state by the command, STEP_CT,/OFF

 PROCEDURE            TVIM first determins the size of the plot data window
                      with a dummy call to PLOT.  When the output device is
                      "X", CONGRID is used to scale the image to the size of
                      the available data window.  Otherwise, if the output
                      device is Postscript, scaleable pixels are used in the
                      call to TV.  PUT_COLOR_SCALE draws the color scale and
                      PLOT draws the x and y axis and titles.

 DEPENDENCIES:        PUT_COLOR_SCALE, STEP_CT

 AUTHOR:              Paul Ricchiazzi    oct92 
                      Earth Space Research Group, UCSB

                      Modified version of TVIM by Jeff Bloch, SST-9, LANL

			1.12	10/13/95
		       Added invbw keyword to invert the color table. 
		       The default is invbw=1 for postscript and invbw=0 else.
		       Changed a line to use bytscl function.
				David Johnston UChicago July 1999
                      Centered up the display. Comments, Cleaned up. 
                      Erin Scott Sheldon UMich 11/24/99

(See pro/plotting//tvim2.pro)


TVIM2_SCL

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
   tvim2_scl

 PURPOSE:
   View a peice of an image and retain the coordinates of the original image
   in that peice

 CALLING SEQUENCE:
 tvim2_scl,image,xm,xx,ym,yx,range

 INPUTS:
 image is the name of the image to be viewed
 xm is the minimum x coordinate
 xx is the maximum x coordinate
 ym is the minimum y coordinate
 yx is the maximum y coordinate
 range is the range with which to view the image
 
 OUTPUTS:
 A zoomed in peice of an image retaining its original coordinates
 
 OPTIONAL KEYWORD PARAMETERS:
 none

 NOTES:
 
 PROCEDURES CALLED:
 tvim2
 REVISION HISTORY:
 written by Susan Amrose -University of Michigan July 97

(See pro/plotting//tvim2_scl.pro)


VIEW_ATLAS

[Previous Routine] [Next Routine] [List of Routines]

 NAME:
       VIEW_ATLAS
 PURPOSE:
	Display the atlas images for an object.  Images are read using the
       dynamically linked DLM rdAtlas (type rdAtlas at the prompt for 
       syntax).

 CALLING SEQUENCE:
        view_atlas, objStruct -OR- run, rerun, camcol, field, id, 
                    clr=, 
                    dir=, 
                    index=, 
                    imu=, img=, imr=, imi=, imz=, 
                    imtot=, 
                    col0=, row0=, dcol=, drow=, ncol=, nrow=,
                    status=, 
                    /info, 
                    maguse=, 
                    /hideradec, 
                    /silent,
                    _extra=_extra

 INPUTS: The user can either input the 
                  run,rerun,camcol,field,id: Unique SDSS identifier
         OR
                  objStruct: a photo structure containig the id information.
 
 OPTIONAL INPUTS: 
         clr: indices of colors to use.  Can be an array. Default is all
              bands. Follows photo convention: 0,1,2,3,4 -> u,g,r,i,z

         dir: directory of atlas images. THIS IS NOW OPTIONAL, since this
              information is stored in a system variable.
         index: Index for when input structure is an array.  Defaults to zero.
         _extra=extra: extra keywords for plotting.

 KEYWORD PARAMETERS:
         /info: add information to the plot, such as magnitudes, colors,
                ra/dec, and position angle when the object is a double.
	  /hideradec: will not include ra dec in titles 
         /silent: will run silently unless bad images or missing
                 images are found

 OPTIONAL OUTPUTS: 
         imu=, img=, imr=, imi=, imz=:  The images for individual
                 colors.  
         imtot=:  An composite image containing all requested bands.  
         row0=, col0=:  objc_rowc, objc_colc position of bottom left corner
                        of atlas image.  
         dcol=, drow=: positional difference between each band and the r-band
         nrow=, ncol=: number of columns, rows in each image.
         status= The exit status.  0 is good, anything else is bad

 RESTRICTIONS:
    The C-function rdAtlas must be compiled, and the DLM directory must be in
    the user's $IDL_DLM_PATH.  Also, the directory configuration variable
        DATA_DIR
    must be set and the runs must be visible from there with the usual
    directory structure.  If not, then the directory can be sent with the
    dir=dir keyword.
 
 EXAMPLES:
   Look at the atlas images in each bandpass for first 10 objects in frame 35
   of run 109

 IDL> run=745 & rerun=20 & camcol=3 & field = 123 & id = 27
 IDL> view_atlas, run, rerun, camcol, field, id

   Use an input struct. Save the r-band image.

 IDL> view_atlas, struct[27], clr=2, imr=red_image
 

 REVISION HISTORY:
       Author:
       16-Nov-2004: Erin Scott Sheldon UChicago  
                        Based on obsolete get_atlas.pro
       Renamed to view_spec1d.  30-Nov-2006, ES NYU

(See pro/sdss//view_atlas.pro)


VIEW_SPEC1D

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  view_spec1d


 PURPOSE:
  Plot an SDSS spectra.  The redshift, spectral classification, spectro id,
  and photo object id are also placed on the plot. Lines are labeled if that
  information is available.

 CATEGORY:
  SDSS specific routine


 CALLING SEQUENCE:
    By id: '
       -Syntax: view_spec1d, plateid, fiberid, $'
            /noprompt, $'
            /nolegend, $'
            /nolines, $
            mjd=mjd, spec_vers=spec_vers, nsmooth=nsmooth, $'
            errclr=errclr, $'
            leg_charsize=leg_charsize, $
            label_charsize=label_charsize
            _extra=_extra'
    From structure: '
       -Syntax: view_spec1d, struct, $'
            /nolegend, $'
            /nolines, $
            mjd=mjd, nsmooth=nsmooth, $'
            errclr=errclr, $'
            leg_charsize=leg_charsize, $
            label_charsize=label_charsize
            _extra=_extra'


 INPUTS:
   Either 
      *plateid, fiberid: identifier for SDSS plate number and the fiber number
                         of the object in the plate. These can be arrays.
   Or
      *struct: The spectra structure for this object.
   view_spec1d will figure out what the user wants based on the inputs.

 KEYWORD PARAMETERS:
   /noprompt: if plateid and fiberid sent as arrays, then the user will be
              prompted to move to the next/previous object in 'X' device. This
              behaviour can be turned off with /noprompt.
   /nolegend: don't plot the legend, with the type, redshift, and ra/dec 
   /nolines: don't plot and label the lines

 OPTIONAL INPUTS:
   mjd=mjd: if plateid/fiberid are entered, then view_spec1d will find the
            latest mjd unless this input is given.  Must be the same size as
            the plateid and fiberid inputs.
   spec_vers: a string containing the spectro rerun id.  e.g. '1d_23'.  The
              default is to read this from the SPEC_VERS config variable.
   nsmooth=nsmooth: boxcar smooth over this many adjacent pixels
   errclr=errclr: color for the error curve. Default is green in X,Z and
                  blue in PS
   nsmooth=nsmooth: Number of neighbors to use in a boxcar average smoothing.
   errclr=errclr: color for the noise curve.
   leg_charsize=leg_charsize: the charsize for the legend
   label_charsize=label_charsize: the charsize for the line labels.

   _extra=_extra: plotting keywords

 OUTPUTS:
   A plot is made on the screen.

 RESTRICTIONS:
  You need the Goddard idl astronomy procedures and the Umich SDSS idl
  libraries.  You need the SPEC_DIR variable set in the configuration file.


 EXAMPLE:
  view_spec1d,550,125,nsmooth=10
  plates=[550,655]
  fibers=[125,36]
  view_spec1d,plates,fibers,nsmooth=10


 MODIFICATION HISTORY:
  Creation: 15-Aug-2003: Erin Sheldon UofChicago

(See pro/sdss//view_spec1d.pro)


WHICH

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
	WHICH

 PURPOSE:
	Determine in which library/directory the procedure or function
	specified is located in the !PATH.  This is useful for finding
	out which library a certain procedure comes from, particularly
	when there are duplicates.  This is similar to the unix
	'which' command.

 CALLING SEQUENCE:
    WHICH, [ proc_name ]          ;Find PROC_NAME in !PATH and display

 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.
       /show: if set, will show the user the first file found
       /help: print syntax

 OUTPUTS:
	files: An array containing the filenames

 SIDE EFFECTS
	None.

 PROCEDURE:
	The system variable !PATH is parsed into individual libraries or 
	directories.   Each library or directory is then searched for the
	procedure name.  

 EXAMPLE:
	Find out where the procedure CURVEFIT lives.

	IDL> which, 'curvefit'

 RESTRICTIONS:
	None.

 REVISION HISTORY:
	29-MAY-94  Modified from getpro.pro by E. Deutsch
	14-JUL-95  Fixed for IDL 4.0
       03-DEC-2000 Added files and show keywords. Erin Sheldon
       21-JUN-2004 Use FILE_WHICH procedure for IDL > 5.3  for significant
             speed increase. Fixed intrinsic procedure searching. E.S.

(See pro/files//which.pro)


WMOM

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
    WMOM

 PURPOSE:
    Find weighted mean,stdev,err of an input array.

 CALLING SEQUENCE: 
    wmom, array, sigma, wmean, wsig, werr, inputweights=, inputmean=, 
          weights=weights, /noweights, /calcerr

 INPUTS:
    array: an array of numbers
    sigma: the errors on each array element. See below.

 OPTIONAL INPUTS:
    inputmean: use this number as the mean instead of
       re-calculating the mean
    weights: Use these as the weights for each point rather than 1/sigma^2.  If input, 
       the sigma input parameter is ignored.  If not input but a named variable is
       present, the used weights will be returned. (note the inputweights keyword is
       still supported but deprecated).

 OUTPUTS: 
    wmean: weighted mean
    wsig: weighted standard deviation
    werr: weighted error in mean
    /noweights: no weight: straight mean/variance is done.
    /calcerr: Default is to set the error on the mean to
              sqrt(1../total(weights)) where weights = 1/sigma^2 which
              is correct for a gaussian distribution.  If /calcerr, then the
              formula below is used

 PROCEDURE: 
    wi      = 1/sig[i]^2 (or use inputweights[i])
    wmean   = sum( xi*wi)/sum(wi) (or =inputmean)
    wsig^2  = sum( wi*(xi-wmean)^2 )/sum(wi)
            
    the error on the mean is simple if the user inputs the
    sigmas:  
         werr = 1./sqrt(sum(wi))

    If the user inputs weights, which may not be 1/err^2 then
    this formula is used:

         werr^2 = sum( wi^2*(xi - wmean)^2 ) / ( sum(wi) )^2

    This formula is also used if /calcerr. 

 REVISION HISTORY:
    Author: Erin Scott Sheldon UofMich  8/99
    Revision History:
       Added optional inputmean, inputweights inputs
       Added weights as returned variable
       Added noweights keyword. E.S.S. 13-Nov-2001

(See pro/statistics//wmom.pro)


WRITE_IDLSTRUCT

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
  WRITE_IDLSTRUCT


 PURPOSE: 
   Write a structure array to a standardized file type ".st".  The file is
   self-describing such that it can be read using READ_IDLSTRUCT() without
   prior knowledge of the file structure.  The data is either written as
   unformatted binary in the native or IEEE formats or as ascii when the
   /ascii keyword is sent.  These procedures provide a natural way to write
   and read IDL data in ascii or binary form.  Unlike fits files, all IDL data
   types other than complex and pointers are supported for both formats,
   including array fields for strings.  Data can be appended naturally using
   the /append keyword.  Because the user can use the native byte order, read
   of files can be much faster, up to a factor of 3 over fits files.


 CATEGORY:
  File I/O

 CALLING SEQUENCE:
  write_idlstruct, struct, filename, 
                   /ascii, /csv, /no_c_write, 
                   /ieee_big, /ieee_little, 
                   /append, /noheader, 
                   hdrStruct=hdrStruct, 
                   info_struct=info_struct, 
                   error=error, 
                   status=status


 INPUTS:

  struct: An IDL structure array. All basic IDL data types other than
          complex and pointers are supported for both binary
          and ascii formats.

  filename: Name of the file to be written or appended.

 OPTIONAL INPUTS:

  hdrStruct=: The user can input keyword-value to be written into the header
              through this structure.  For example: 
                 IDL> hdr={date:"12-May-1974", val1:[2.5, 66.7], val2:33} 
                 IDL> write_idlstruct, struct, file, hdrStruct=hdr

  info_struct=: This structure contains info on the makeup of the structure,
                and output formatting for ascii.  It can be returned on the
                first call and sent again when appending to save time. 

 KEYWORD PARAMETERS:

  /ascii: write an ascii data file rather than unformatted binary.  If the
          system routine ASCII_WRITE is present it will be used unless
          /no_c_write is sent

  /csv: For ascii, use commas to separate values rather than the default
        tabs. Note in order to read csv with strings using read_idlstruct you
        must have the ascii_read procedure compiled and in your DLM path; tab
        separated and csv with numbers can always be read.

  /no_c_write: Don't attempt to use the ascii_write C DLM.

  /ieee_big: Use IEEE XDR byte ordering rather than the native for
             LITTLE_ENDIAN machines (they are the same for BIG_ENDIAN) Using
             native format can increase the speed of reads and writes by a
             large amount, but then BIG_ENDIAN users must swap the byteorder
             to use the data. All this swapping is done automatically by
             read_idlstruct so, unlike fits, the user can use whatever is
             desired.  

  /ieee_little: Use LITTLE_ENDIAN byte ordering.  

  /append: append to the file and update the header.  Strings will be written
           with the same length as previous writes; otherwise the file could
           not be read (except for ascii when ascii_read is available).  

  /noheader: don't write a header.

 OUTPUTS:
  The structure is written to a file


 OPTIONAL OUTPUTS:
  info_struct: see above
  status=: 0 for success, otherwise failure.
  error=:  Description of error that occured.
     -1000: Input data is not a structure.
     -3000: Unsupported complex type sent
     -4000: Other unsupported type
     Plus the errors returned by openw
 

 SDSSIDL ROUTINES CALLED:
  STRINGREP

 SIDE EFFECTS:

  For string fields in the structure, the strings are padded to the largest
  string in the array for that field.  This can take up a lot of extra space
  if you have one string in a million that is really long, so you might
  consider trimming them yourself.  Also, beware of appending with strings
  since write_idlstruct will use the previous string length.

 COMMON BLOCKS:
  write_idlstruct_block, ROW_STRING_FORMAT, isbig_endian, version, 
                         use_c_write, old_info_struct

 EXAMPLE:
  struct = {a:findgen(10), b:dindgen(10,10), c:23353233}
  struct = replicate(struct, 1000)
  write_idlstruct, struct, 'test.st'
  write_idlstruct, struct, 'test2.st', /ascii


 MODIFICATION HISTORY:
  Created  02-Jul-2004 Erin Sheldon, UofChicago
  Improved /append now ensures proper string lengths.  7-Nov-2005 E.S.
  Added support for CSV.  Made default delimiter tab rather than space.
    Supported styles are tab and csv now. E.S.S, but old space delimited
    files can still be read by read_idlstruct.pro.  27-April-2006

(See pro/idlstruct_files//write_idlstruct.pro)


XY2RD

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
	XY2RD

 PURPOSE:
	Compute R.A. and Dec in degrees from X and Y and an astrometry structure
	(extracted by EXTAST)  from a FITS header.   A tangent (gnomonic) 
	projection is computed directly; other projections are computed using 
	WCSXY2SPH.
	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
	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 (default = 180) 
        .PROJP1 - Scalar parameter needed in some projections
	 .PROJP2 - Scalar parameter needed in some projections

 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.

 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
	Rename xy2rd forces tangent projection	David Johnston

(See pro/astro//xy2rd.pro)


ZERO_STRUCT

[Previous Routine] [List of Routines]

 NAME:
    ZERO_STRUCT
       
 PURPOSE:
    "Zero" all the elements in a structure. Numbers are set to zero,
           strings to '', pointers and objects references to NULL

 CALLING SEQUENCE:
    zero_struct, struct

 INPUTS: 
    struct: Structure to be zeroed. Can be an array of structures.

 REVISION HISTORY:
    Created 26-OCT-2000 Erin Scott Sheldon
    Better way using struct_assign. 2006-July-21 E.S.                                      

(See pro/struct//zero_struct.pro)