PANE example: IMAGE HDU from HIRES Mosaic

The first few cards are the mandatory keywords as inserted by the CFITSIO library.
XTENSION= 'IMAGE   '           / IMAGE extension
BITPIX  =                   16 / number of bits per data pixel
NAXIS   =                    2 / number of data axes
NAXIS1  =                  708 / length of data axis 1
NAXIS2  =                  568 / length of data axis 2
PCOUNT  =                    0 / required keyword; must = 0
GCOUNT  =                    1 / required keyword; must = 1
    
Note above that BITPIX=16, which indicates that the FITS file contains big-endian signed 16-bit two's complement integers (range -32768 to +32767). It is the case for all of the UCO/Lick CCD hardware that the analog-to-digital conversion produces unsigned 16-bit integers (range 0 to 65535). The structure of two's complement arithmetic allows these data values to be written into a FITS file simply by flipping the high order (sign) bit and setting the next two FITS keywords to these values.
BZERO   =                32768 / offset data range to that of unsigned short
BSCALE  =                    1 / default scaling factor
    
This is the date that CFITSIO obtained by querying the system clock for the POSIX time_t value. It is the time at which the lickserv2 process requested the creation of this HDU as part of the skeletal MEF file into which the pixel stream was descrambled. It does not directly indicate anything about the time of the exposure or the time of the movements of the camera shutter.
DATE    = '2004-05-20T22:22:47' / file creation date (YYYY-MM-DDThh:mm:ss UT)
    
The CCD crates designed at Lick do not have code intended to indicate a NULL pixel value. Under normal operation the digital values from the A/D conversion are set such that they are always significantly greater than zero. That allows us to suppose that any pixel with value zero is intended to be NULL. Given the values of BZERO and BSCALE above, the following keyword gives the FITS array value which corresponds to a data value of zero.
BLANK   =               -32768 / FITS array value of NULL pixel
    

In order to decode the pixel stream from the mosaic detectors designed at Lick, the lickserv2 process uses data structures which contain a complete description of the layout of the various mosaics, the detectors in each mosaic, and the manner in which the cables and electronics transfer the pixel values. For a description see XML schema for documenting mosaics of detectors. The notion is that all of the metadata describing the provenance of the data values in the pixels will be documented by FITS keywords.

The EXTNAME keyword indicates the reason that this IMAGE HDU has been included in the MEF file. In this case the pixels originate from Video Input number 1 and they are recorded here as a result of Pane number 1.

EXTNAME = 'VidInp1+Pane1'      / name of this image extension
    
The metadata about this mosaic are documented by the following keywords whose values come from the data structure. Note in particular that the AMPWIRES keyword gives the name of this particular permutation of the co-axial cables which connect the pre-amplifiers on the dewar to the video inputs on the CCD controller. This demonstrates that the data structure is intended to be able to correctly document the provenance of each pixel value even if the many cables happen to be permuted. (Such a permutation might occur as a part of activities which are trying to diagnose a failing component in one of the video signal pathways.)
DETCNFID=                 1002 / mosaic detector configuration Id
DETCNFIG= 'HIRES Science mosaic' / mosaic detector configuration
MOSAIC  = 'HIRES Science Mosaic' / mosaic detector
MOSDESIN= 'HIRES Mosaic'       / mosaic detector design
AMPWIRES= 'HIRES Wiring, 6-amplifier' / mosaic amplifier wiring
    
The following keywords are intended to give complete metadata documenting the identity of the mosaic components which produced these pixels.
VIDEOINP=                    1 / see HIRES engineering drawing H9604
AMPLOC  = '1       '           / see HIRES engineering drawing H9604
AMPTYPE = 'A       '           / type of amplifier
CCDLOC  = '1       '           / see HIRES engineering drawing H9604
CCDGEOM = 'MIT/LL 2k*4k'       / geometry of CCD
CCDNAME = '17-7-1  '           / name of CCD
CCDTYPE = 'High Resistivity'   / type of CCD
    
Some CCD controllers are able to hasten the CCD readout by reading some rows of interest, quickly skipping past other rows which are not part of any active PANEn, and then reading more rows which are part of an active PANEn. A value of REXTID other than zero will indicate that such skipping has happened.
REXTID  =                    0 / row extent of this readout
PANEID  =                    1 / PANE which inspired this HDU
    
There is a longstanding convention from NOAO/IRAF that sub-regions of the FITS array are described by "sections" with a Fortran-like syntax in the FITS keyword value. The most relevant of all such section keywords is DATASEC, for it indicates the region of the FITS array which consists of pixels with information about photons received by the detector. DATASEC is used by the IRAF mosaic image display and by the SAO ds9 image display.
DATASEC = '[13:628,1:568]'     / NOAO/IRAF data section
DETSIZE = '[1:6144,1:4096]'    / NOAO mosaic detector size for ds9
DETSEC  = '[409:1024,712:1279]' / NOAO mosaic detector section for ds9
    
The lickserv2 program writes FITS World Coordinate System (WCS) keywords for several different coordinate systems.
The WCS which is intended to be used during most conversations about the pixels in a mosaic is the pane coordinate system. The pane coordinates are an idealized notion of the layout of the mosaic which ignores the gaps between detectors and which is independent of the binning used in any particular readout.
CRPIX1P =                  13. / reference pixel along FITS axis j
CRPIX2P =                   1. / reference pixel along FITS axis j
CRVAL1P =                408.5 / coordinate value for WCS axis i at refpix
CRVAL2P =                711.5 / coordinate value for WCS axis i at refpix
CD1_1P  =                   1. / CTM i_j from pixel to WCS
CD1_2P  =                   0. / CTM i_j from pixel to WCS
CD2_1P  =                   0. / CTM i_j from pixel to WCS
CD2_2P  =                   1. / CTM i_j from pixel to WCS
CTYPE1P = 'PANE_X  '           / coordinate/projection type for WCS axis i
CTYPE2P = 'PANE_Y  '           / coordinate/projection type for WCS axis i
CUNIT1P = 'pixel   '           / physical unit for WCS axis i
CUNIT2P = 'pixel   '           / physical unit for WCS axis i
WCSNAMEP= 'pane    '           / UCO/Lick mosaic PANE coordinates
CRDER1P =                   0. / coordinate random error for WCS axis i
CRDER2P =                   0. / coordinate random error for WCS axis i
CSYER1P =                   0. / coordinate systematic error for WCS axis i
CSYER2P =                   0. / coordinate systematic error for WCS axis i
    
The amplifier coordinates are intended to indicate the coordinate of a pixel with respect to the amplifier through which its datum was read. This coordinate makes sense to specify only if the pixel values from each amplifier are stored in separate FITS IMAGE extensions.
CRPIX1A =                  13. / reference pixel along FITS axis j
CRPIX2A =                   1. / reference pixel along FITS axis j
CRVAL1A =                 409. / coordinate value for WCS axis i at refpix
CRVAL2A =                 712. / coordinate value for WCS axis i at refpix
CD1_1A  =                   1. / CTM i_j from pixel to WCS
CD1_2A  =                   0. / CTM i_j from pixel to WCS
CD2_1A  =                   0. / CTM i_j from pixel to WCS
CD2_2A  =                   1. / CTM i_j from pixel to WCS
CTYPE1A = 'AMPLIFIER_X'        / coordinate/projection type for WCS axis i
CTYPE2A = 'AMPLIFIER_Y'        / coordinate/projection type for WCS axis i
CUNIT1A = 'pixel   '           / physical unit for WCS axis i
CUNIT2A = 'pixel   '           / physical unit for WCS axis i
WCSNAMEA= 'amplifier'          / imaging pixels thru this amplifier
CRDER1A =                   0. / coordinate random error for WCS axis i
CRDER2A =                   0. / coordinate random error for WCS axis i
CSYER1A =                   0. / coordinate systematic error for WCS axis i
CSYER2A =                   0. / coordinate systematic error for WCS axis i
    
The CCD coordinates are intended to indicate the coordinate of a pixel with respect to the silicon structure of a particular chip. The choice of coordinate origin on a chip is documented by the mosaic metadata keywords mentioned above.
CRPIX1C =                  13. / reference pixel along FITS axis j
CRPIX2C =                   1. / reference pixel along FITS axis j
CRVAL1C =                 409. / coordinate value for WCS axis i at refpix
CRVAL2C =                 712. / coordinate value for WCS axis i at refpix
CD1_1C  =                   1. / CTM i_j from pixel to WCS
CD1_2C  =                   0. / CTM i_j from pixel to WCS
CD2_1C  =                   0. / CTM i_j from pixel to WCS
CD2_2C  =                   1. / CTM i_j from pixel to WCS
CTYPE1C = 'CCD_X   '           / coordinate/projection type for WCS axis i
CTYPE2C = 'CCD_Y   '           / coordinate/projection type for WCS axis i
CUNIT1C = 'pixel   '           / physical unit for WCS axis i
CUNIT2C = 'pixel   '           / physical unit for WCS axis i
WCSNAMEC= 'ccd     '           / NOAO mosaic CCD coordinates
CRDER1C =                   0. / coordinate random error for WCS axis i
CRDER2C =                   0. / coordinate random error for WCS axis i
CSYER1C =                   0. / coordinate systematic error for WCS axis i
CSYER2C =                   0. / coordinate systematic error for WCS axis i
    
The detector coordinates are intended to match the definition from the description of the NOAO/IRAF mosaic keywords in the documents by Frank Valdes.
CRPIX1D =                  13. / reference pixel along FITS axis j
CRPIX2D =                   1. / reference pixel along FITS axis j
CRVAL1D =                 409. / coordinate value for WCS axis i at refpix
CRVAL2D =                 712. / coordinate value for WCS axis i at refpix
CD1_1D  =                   1. / CTM i_j from pixel to WCS
CD1_2D  =                   0. / CTM i_j from pixel to WCS
CD2_1D  =                   0. / CTM i_j from pixel to WCS
CD2_2D  =                   1. / CTM i_j from pixel to WCS
CTYPE1D = 'DETECTOR_X'         / coordinate/projection type for WCS axis i
CTYPE2D = 'DETECTOR_Y'         / coordinate/projection type for WCS axis i
CUNIT1D = 'pixel   '           / physical unit for WCS axis i
CUNIT2D = 'pixel   '           / physical unit for WCS axis i
WCSNAMED= 'detector'           / NOAO mosaic CCD coordinates
CRDER1D =                   0. / coordinate random error for WCS axis i
CRDER2D =                   0. / coordinate random error for WCS axis i
CSYER1D =                   0. / coordinate systematic error for WCS axis i
CSYER2D =                   0. / coordinate systematic error for WCS axis i
    
The image coordinates are intended to be a redundant reiteration of the Fortran-like default FITS array coordinate for the pixels.
CRPIX1I =                   1. / reference pixel along FITS axis j
CRPIX2I =                   1. / reference pixel along FITS axis j
CRVAL1I =                   1. / coordinate value for WCS axis i at refpix
CRVAL2I =                   1. / coordinate value for WCS axis i at refpix
CD1_1I  =                   1. / CTM i_j from pixel to WCS
CD1_2I  =                   0. / CTM i_j from pixel to WCS
CD2_1I  =                   0. / CTM i_j from pixel to WCS
CD2_2I  =                   1. / CTM i_j from pixel to WCS
CTYPE1I = 'IMAGE_X '           / coordinate/projection type for WCS axis i
CTYPE2I = 'IMAGE_Y '           / coordinate/projection type for WCS axis i
CUNIT1I = 'pixel   '           / physical unit for WCS axis i
CUNIT2I = 'pixel   '           / physical unit for WCS axis i
WCSNAMEI= 'image   '           / redundant reiteration of default FITS
CRDER1I =                   0. / coordinate random error for WCS axis i
CRDER2I =                   0. / coordinate random error for WCS axis i
CSYER1I =                   0. / coordinate systematic error for WCS axis i
CSYER2I =                   0. / coordinate systematic error for WCS axis i
    
The primary coordinates are the same as the Pane coordinates in order to indicate that we believe this coordinate system is the best one for use in conversation.
CRPIX1  =                  13. / reference pixel along FITS axis j
CRPIX2  =                   1. / reference pixel along FITS axis j
CRVAL1  =                408.5 / coordinate value for WCS axis i at refpix
CRVAL2  =                711.5 / coordinate value for WCS axis i at refpix
CD1_1   =                   1. / CTM i_j from pixel to WCS
CD1_2   =                   0. / CTM i_j from pixel to WCS
CD2_1   =                   0. / CTM i_j from pixel to WCS
CD2_2   =                   1. / CTM i_j from pixel to WCS
CTYPE1  = 'PANE_X  '           / coordinate/projection type for WCS axis i
CTYPE2  = 'PANE_Y  '           / coordinate/projection type for WCS axis i
CUNIT1  = 'pixel   '           / physical unit for WCS axis i
CUNIT2  = 'pixel   '           / physical unit for WCS axis i
WCSNAME = 'pane    '           / UCO/Lick mosaic PANE coordinates
CRDER1  =                   0. / coordinate random error for WCS axis i
CRDER2  =                   0. / coordinate random error for WCS axis i
CSYER1  =                   0. / coordinate systematic error for WCS axis i
CSYER2  =                   0. / coordinate systematic error for WCS axis i
    
The gap coordinates are intended to give a rough indication of the actual geometry of the detectors in the mosaic including the gaps between them. This allows the SAO ds9 image display to show something very close to the actual layout of the focal plane.
CRPIX1G =                  13. / reference pixel along FITS axis j
CRPIX2G =                   1. / reference pixel along FITS axis j
CRVAL1G =                 409. / coordinate value for WCS axis i at refpix
CRVAL2G =                 712. / coordinate value for WCS axis i at refpix
CD1_1G  =                   1. / CTM i_j from pixel to WCS
CD1_2G  =                   0. / CTM i_j from pixel to WCS
CD2_1G  =                   0. / CTM i_j from pixel to WCS
CD2_2G  =                   1. / CTM i_j from pixel to WCS
CTYPE1G = 'GAP_X   '           / coordinate/projection type for WCS axis i
CTYPE2G = 'GAP_Y   '           / coordinate/projection type for WCS axis i
CUNIT1G = 'pixel   '           / physical unit for WCS axis i
CUNIT2G = 'pixel   '           / physical unit for WCS axis i
WCSNAMEG= 'ccd2gap '           / approximate gap coordinates
CRDER1G =                   1. / coordinate random error for WCS axis i
CRDER2G =                   1. / coordinate random error for WCS axis i
CSYER1G =                   1. / coordinate systematic error for WCS axis i
CSYER2G =                   1. / coordinate systematic error for WCS axis i
    
The last thing that write_image does before flushing the FITS file to disk is to ask CFITSIO to perform the FITS checksum operation on each of the HDUs. In the case of the PHDU it is possible to compare the value of the DATE keyword with the comment of the checksum keywords and see how much time elapsed between the creation of the skeletal FITS file by lickserv2 and the completion of keyword insertion by write_image.
CHECKSUM= 'ZSHEgR99ZRGEfR99'   / HDU checksum updated 2004-05-20T22:23:22
DATASUM = '649738213'          / data unit checksum updated 2004-05-20T22:23:22
END
    

Steve Allen <sla@ucolick.org>
Initial deployment 2010-04-16
$Date: 2010/04/16 22:22:00 $