Index: /trunk/extsrc/gpcsw/gpcsrc/fits/libfh/fh_registry.asm
===================================================================
--- /trunk/extsrc/gpcsw/gpcsrc/fits/libfh/fh_registry.asm	(revision 41704)
+++ /trunk/extsrc/gpcsw/gpcsrc/fits/libfh/fh_registry.asm	(revision 41705)
@@ -1,786 +1,786 @@
-DETCOM_SIMPLE MACRO ARG
-    COBJ "detcom:dheader 0.0 SIMPLE \"\ARG\" \"Standard FITS\""
-    ENDM
-DETCOM_XTENSION MACRO ARG
-    COBJ "detcom:dheader 0.0 XTENSION \"\ARG\" \"\""
-    ENDM
-DETCOM_BITPIX MACRO ARG
-    COBJ "detcom:dheader 1.0 BITPIX \"\ARG\" \"Bits per pixel\""
-    ENDM
-DETCOM_NAXIS MACRO ARG
-    COBJ "detcom:dheader 2.0 NAXIS \"\ARG\" \"Number of axes\""
-    ENDM
-DETCOM_NAXIS1 MACRO ARG
-    COBJ "detcom:dheader 2.1 NAXIS1 \"\ARG\" \"Number of pixel columns\""
-    ENDM
-DETCOM_NAXIS2 MACRO ARG
-    COBJ "detcom:dheader 2.2 NAXIS2 \"\ARG\" \"Number of pixel rows\""
-    ENDM
-DETCOM_NAXIS3 MACRO ARG
-    COBJ "detcom:dheader 2.3 NAXIS3 \"\ARG\" \"Number of stacked frames (cube)\""
-    ENDM
-DETCOM_EXTEND MACRO ARG
-    COBJ "detcom:dheader 3.0 EXTEND \"\ARG\" \"File contains extensions\""
-    ENDM
-DETCOM_NEXTEND MACRO ARG
-    COBJ "detcom:dheader 3.1 NEXTEND \"\ARG\" \"Number of extensions\""
-    ENDM
-DETCOM_GROUPS MACRO ARG
-    COBJ "detcom:dheader 4.0 GROUPS \"\ARG\" \"File contains random groups records\""
-    ENDM
-DETCOM_PCOUNT MACRO ARG
-    COBJ "detcom:dheader 5.0 PCOUNT \"\ARG\" \"Random parameters before each array in a group\""
-    ENDM
-DETCOM_GCOUNT MACRO ARG
-    COBJ "detcom:dheader 6.0 GCOUNT \"\ARG\" \"Number of random groups\""
-    ENDM
-DETCOM_TFIELDS MACRO ARG
-    COBJ "detcom:dheader 7.0000 TFIELDS \"\ARG\" \"Number of fields in a row\""
-    ENDM
-DETCOM_TFORM1 MACRO ARG
-    COBJ "detcom:dheader 7.0011 TFORM1 \"\ARG\" \"Table format for field 1\""
-    ENDM
-DETCOM_TBCOL1 MACRO ARG
-    COBJ "detcom:dheader 7.0012 TBCOL1 \"\ARG\" \"Start Column for field 1\""
-    ENDM
-DETCOM_TFORM2 MACRO ARG
-    COBJ "detcom:dheader 7.0021 TFORM2 \"\ARG\" \"Table format for field 2\""
-    ENDM
-DETCOM_TBCOL2 MACRO ARG
-    COBJ "detcom:dheader 7.0022 TBCOL2 \"\ARG\" \"Start Column for field 2\""
-    ENDM
-DETCOM_TFORM3 MACRO ARG
-    COBJ "detcom:dheader 7.0031 TFORM3 \"\ARG\" \"Table format for field 3\""
-    ENDM
-DETCOM_TBCOL3 MACRO ARG
-    COBJ "detcom:dheader 7.0032 TBCOL3 \"\ARG\" \"Start Column for field 3\""
-    ENDM
-DETCOM_TFORM4 MACRO ARG
-    COBJ "detcom:dheader 7.0041 TFORM4 \"\ARG\" \"Table format for field 4\""
-    ENDM
-DETCOM_TBCOL4 MACRO ARG
-    COBJ "detcom:dheader 7.0042 TBCOL4 \"\ARG\" \"Start Column for field 4\""
-    ENDM
-DETCOM_TFORM5 MACRO ARG
-    COBJ "detcom:dheader 7.0051 TFORM5 \"\ARG\" \"Table format for field 5\""
-    ENDM
-DETCOM_TBCOL5 MACRO ARG
-    COBJ "detcom:dheader 7.0052 TBCOL5 \"\ARG\" \"Start Column for field 5\""
-    ENDM
-DETCOM_CMMTOBS MACRO ARG
-    COBJ "detcom:dheader 51.0 CMMTOBS \"\ARG\" \"\""
-    ENDM
-DETCOM_CMMTSEQ MACRO ARG
-    COBJ "detcom:dheader 52.0 CMMTSEQ \"\ARG\" \"\""
-    ENDM
-DETCOM_OBJECT MACRO ARG
-    COBJ "detcom:dheader 53.0 OBJECT \"\ARG\" \"\""
-    ENDM
-DETCOM_OBSERVER MACRO ARG
-    COBJ "detcom:dheader 54.0 OBSERVER \"\ARG\" \"\""
-    ENDM
-DETCOM_PI_NAME MACRO ARG
-    COBJ "detcom:dheader 55.0 PI_NAME \"\ARG\" \"\""
-    ENDM
-DETCOM_RUNID MACRO ARG
-    COBJ "detcom:dheader 56.0 RUNID \"\ARG\" \"\""
-    ENDM
-DETCOM_FILENAME MACRO ARG
-    COBJ "detcom:dheader 71.00 FILENAME \"\ARG\" \"Base filename at acquisition\""
-    ENDM
-DETCOM_PATHNAME MACRO ARG
-    COBJ "detcom:dheader 71.01 PATHNAME \"\ARG\" \"Original directory name at acquisition\""
-    ENDM
-DETCOM_EXTNAME MACRO ARG
-    COBJ "detcom:dheader 71.10 EXTNAME \"\ARG\" \"Extension name\""
-    ENDM
-DETCOM_EXTVER MACRO ARG
-    COBJ "detcom:dheader 71.20 EXTVER \"\ARG\" \"Extension version\""
-    ENDM
-DETCOM_DATE MACRO ARG
-    COBJ "detcom:dheader 74.00 DATE \"\ARG\" \"UTC Date of file creation\""
-    ENDM
-DETCOM_HSTTIME MACRO ARG
-    COBJ "detcom:dheader 74.10 HSTTIME \"\ARG\" \"Local time in Hawaii\""
-    ENDM
-DETCOM_IMAGESWV MACRO ARG
-    COBJ "detcom:dheader 77.00 IMAGESWV \"\ARG\" \"Image creation software version\""
-    ENDM
-DETCOM_DETECTOR MACRO ARG
-    COBJ "detcom:dheader 91.0 DETECTOR \"\ARG\" \"Science Detector\""
-    ENDM
-DETCOM_INSTRUME MACRO ARG
-    COBJ "detcom:dheader 92.0 INSTRUME \"\ARG\" \"Instrument Name\""
-    ENDM
-DETCOM_INSTMODE MACRO ARG
-    COBJ "detcom:dheader 92.1 INSTMODE \"\ARG\" \"Instrument Mode\""
-    ENDM
-DETCOM_DETSIZE MACRO ARG
-    COBJ "detcom:dheader 102.0 DETSIZE \"\ARG\" \"Total data pixels in full mosaic\""
-    ENDM
-DETCOM_RASTER MACRO ARG
-    COBJ "detcom:dheader 103.0 RASTER \"\ARG\" \"\""
-    ENDM
-DETCOM_CCDSUM MACRO ARG
-    COBJ "detcom:dheader 105.0 CCDSUM \"\ARG\" \"Binning factors\""
-    ENDM
-DETCOM_CCDBIN1 MACRO ARG
-    COBJ "detcom:dheader 105.1 CCDBIN1 \"\ARG\" \"Binning factor along first axis\""
-    ENDM
-DETCOM_CCDBIN2 MACRO ARG
-    COBJ "detcom:dheader 105.2 CCDBIN2 \"\ARG\" \"Binning factor along second axis\""
-    ENDM
-DETCOM_PIXSIZE MACRO ARG
-    COBJ "detcom:dheader 110.0 PIXSIZE \"\ARG\" \"Pixel size for both axes (microns)\""
-    ENDM
-DETCOM_PIXSIZE1 MACRO ARG
-    COBJ "detcom:dheader 111.1 PIXSIZE1 \"\ARG\" \"Pixel size for axis 1 (microns)\""
-    ENDM
-DETCOM_PIXSIZE2 MACRO ARG
-    COBJ "detcom:dheader 111.2 PIXSIZE2 \"\ARG\" \"Pixel size for axis 2 (microns)\""
-    ENDM
-DETCOM_PIXSCAL1 MACRO ARG
-    COBJ "detcom:dheader 112.1 PIXSCAL1 \"\ARG\" \"Pixel scale for axis 1 (arcsec/pixel)\""
-    ENDM
-DETCOM_PIXSCAL2 MACRO ARG
-    COBJ "detcom:dheader 112.2 PIXSCAL2 \"\ARG\" \"Pixel scale for axis 2 (arcsec/pixel)\""
-    ENDM
-DETCOM_AMPLIST MACRO ARG
-    COBJ "detcom:dheader 130.0 AMPLIST \"\ARG\" \"List of amplifiers for this image\""
-    ENDM
-DETCOM_AMPNAME MACRO ARG
-    COBJ "detcom:dheader 131.0 AMPNAME \"\ARG\" \"Amplifier name\""
-    ENDM
-DETCOM_CCDSIZE MACRO ARG
-    COBJ "detcom:dheader 140.0 CCDSIZE \"\ARG\" \"Detector imaging area size\""
-    ENDM
-DETCOM_DETSEC MACRO ARG
-    COBJ "detcom:dheader 140.1 DETSEC \"\ARG\" \"Mosaic area of the detector\""
-    ENDM
-DETCOM_DETSECA MACRO ARG
-    COBJ "detcom:dheader 140.11 DETSECA \"\ARG\" \"Mosaic area of the detector from Amp A\""
-    ENDM
-DETCOM_DETSECB MACRO ARG
-    COBJ "detcom:dheader 140.12 DETSECB \"\ARG\" \"Mosaic area of the detector from Amp B\""
-    ENDM
-DETCOM_DETSECC MACRO ARG
-    COBJ "detcom:dheader 140.13 DETSECC \"\ARG\" \"Mosaic area of the detector from Amp C\""
-    ENDM
-DETCOM_DETSECD MACRO ARG
-    COBJ "detcom:dheader 140.14 DETSECD \"\ARG\" \"Mosaic area of the detector from Amp D\""
-    ENDM
-DETCOM_DATASEC MACRO ARG
-    COBJ "detcom:dheader 140.2 DATASEC \"\ARG\" \"Imaging area of the detector\""
-    ENDM
-DETCOM_BIASSEC MACRO ARG
-    COBJ "detcom:dheader 140.3 BIASSEC \"\ARG\" \"Overscan (bias) area of the detector\""
-    ENDM
-DETCOM_ASECA MACRO ARG
-    COBJ "detcom:dheader 141.11 ASECA \"\ARG\" \"Section from Amp A (non-contig. bias excluded)\""
-    ENDM
-DETCOM_ASECB MACRO ARG
-    COBJ "detcom:dheader 141.12 ASECB \"\ARG\" \"Section from Amp B (non-contig. bias excluded)\""
-    ENDM
-DETCOM_ASECC MACRO ARG
-    COBJ "detcom:dheader 141.13 ASECC \"\ARG\" \"Section from Amp C (non-contig. bias excluded)\""
-    ENDM
-DETCOM_ASECD MACRO ARG
-    COBJ "detcom:dheader 141.14 ASECD \"\ARG\" \"Section from Amp D (non-contig. bias excluded)\""
-    ENDM
-DETCOM_BSECA MACRO ARG
-    COBJ "detcom:dheader 141.21 BSECA \"\ARG\" \"Overscan (bias) area from Amp A\""
-    ENDM
-DETCOM_BSECB MACRO ARG
-    COBJ "detcom:dheader 141.22 BSECB \"\ARG\" \"Overscan (bias) area from Amp B\""
-    ENDM
-DETCOM_BSECC MACRO ARG
-    COBJ "detcom:dheader 141.23 BSECC \"\ARG\" \"Overscan (bias) area from Amp C\""
-    ENDM
-DETCOM_BSECD MACRO ARG
-    COBJ "detcom:dheader 141.24 BSECD \"\ARG\" \"Overscan (bias) area from Amp D\""
-    ENDM
-DETCOM_CSECA MACRO ARG
-    COBJ "detcom:dheader 141.31 CSECA \"\ARG\" \"Section in full CCD for DSECA\""
-    ENDM
-DETCOM_CSECB MACRO ARG
-    COBJ "detcom:dheader 141.32 CSECB \"\ARG\" \"Section in full CCD for DSECB\""
-    ENDM
-DETCOM_CSECC MACRO ARG
-    COBJ "detcom:dheader 141.33 CSECC \"\ARG\" \"Section in full CCD for DSECC\""
-    ENDM
-DETCOM_CSECD MACRO ARG
-    COBJ "detcom:dheader 141.34 CSECD \"\ARG\" \"Section in full CCD for DSECD\""
-    ENDM
-DETCOM_DSECA MACRO ARG
-    COBJ "detcom:dheader 141.41 DSECA \"\ARG\" \"Imaging area from Amp A\""
-    ENDM
-DETCOM_DSECB MACRO ARG
-    COBJ "detcom:dheader 141.42 DSECB \"\ARG\" \"Imaging area from Amp B\""
-    ENDM
-DETCOM_DSECC MACRO ARG
-    COBJ "detcom:dheader 141.43 DSECC \"\ARG\" \"Imaging area from Amp C\""
-    ENDM
-DETCOM_DSECD MACRO ARG
-    COBJ "detcom:dheader 141.44 DSECD \"\ARG\" \"Imaging area from Amp D\""
-    ENDM
-DETCOM_TSECA MACRO ARG
-    COBJ "detcom:dheader 141.51 TSECA \"\ARG\" \"Trim section for Amp A\""
-    ENDM
-DETCOM_TSECB MACRO ARG
-    COBJ "detcom:dheader 141.52 TSECB \"\ARG\" \"Trim section for Amp B\""
-    ENDM
-DETCOM_TSECC MACRO ARG
-    COBJ "detcom:dheader 141.53 TSECC \"\ARG\" \"Trim section for Amp C\""
-    ENDM
-DETCOM_TSECD MACRO ARG
-    COBJ "detcom:dheader 141.54 TSECD \"\ARG\" \"Trim section for Amp D\""
-    ENDM
-DETCOM_CCDNAME MACRO ARG
-    COBJ "detcom:dheader 150.1 CCDNAME \"\ARG\" \"Name of the CCD (manufacturer reference)\""
-    ENDM
-DETCOM_CCDNICK MACRO ARG
-    COBJ "detcom:dheader 150.2 CCDNICK \"\ARG\" \"Nickname of the CCD\""
-    ENDM
-DETCOM_MAXLIN MACRO ARG
-    COBJ "detcom:dheader 152.0 MAXLIN \"\ARG\" \"Maximum linearity value (ADU)\""
-    ENDM
-DETCOM_MAXLINA MACRO ARG
-    COBJ "detcom:dheader 152.01 MAXLINA \"\ARG\" \"Maximum linearity value for Amp A (ADU)\""
-    ENDM
-DETCOM_MAXLINB MACRO ARG
-    COBJ "detcom:dheader 152.02 MAXLINB \"\ARG\" \"Maximum linearity value for Amp B (ADU)\""
-    ENDM
-DETCOM_MAXLINC MACRO ARG
-    COBJ "detcom:dheader 152.03 MAXLINC \"\ARG\" \"Maximum linearity value for Amp C (ADU)\""
-    ENDM
-DETCOM_MAXLIND MACRO ARG
-    COBJ "detcom:dheader 152.04 MAXLIND \"\ARG\" \"Maximum linearity value for Amp D (ADU)\""
-    ENDM
-DETCOM_SATURATE MACRO ARG
-    COBJ "detcom:dheader 152.1 SATURATE \"\ARG\" \"Saturation value (ADU)\""
-    ENDM
-DETCOM_GAIN MACRO ARG
-    COBJ "detcom:dheader 155.0 GAIN \"\ARG\" \"Amplifier gain (electrons/ADU)\""
-    ENDM
-DETCOM_GAINA MACRO ARG
-    COBJ "detcom:dheader 155.01 GAINA \"\ARG\" \"Amp A gain (electrons/ADU)\""
-    ENDM
-DETCOM_GAINB MACRO ARG
-    COBJ "detcom:dheader 155.02 GAINB \"\ARG\" \"Amp B gain (electrons/ADU)\""
-    ENDM
-DETCOM_GAINC MACRO ARG
-    COBJ "detcom:dheader 155.03 GAINC \"\ARG\" \"Amp C gain (electrons/ADU)\""
-    ENDM
-DETCOM_GAIND MACRO ARG
-    COBJ "detcom:dheader 155.04 GAIND \"\ARG\" \"Amp D gain (electrons/ADU)\""
-    ENDM
-DETCOM_RDNOISE MACRO ARG
-    COBJ "detcom:dheader 156.0 RDNOISE \"\ARG\" \"Read noise (electrons)\""
-    ENDM
-DETCOM_RDNOISEA MACRO ARG
-    COBJ "detcom:dheader 156.01 RDNOISEA \"\ARG\" \"Amp A read noise (electrons)\""
-    ENDM
-DETCOM_RDNOISEB MACRO ARG
-    COBJ "detcom:dheader 156.02 RDNOISEB \"\ARG\" \"Amp B read noise (electrons)\""
-    ENDM
-DETCOM_RDNOISEC MACRO ARG
-    COBJ "detcom:dheader 156.03 RDNOISEC \"\ARG\" \"Amp C read noise (electrons)\""
-    ENDM
-DETCOM_RDNOISED MACRO ARG
-    COBJ "detcom:dheader 156.04 RDNOISED \"\ARG\" \"Amp D read noise (electrons)\""
-    ENDM
-DETCOM_DCURRENT MACRO ARG
-    COBJ "detcom:dheader 157.0 DCURRENT \"\ARG\" \"Dark current (ADU/pixel/second)\""
-    ENDM
-DETCOM_DARKCUR MACRO ARG
-    COBJ "detcom:dheader 157.1 DARKCUR \"\ARG\" \"Dark current (e-/pixel/hour)\""
-    ENDM
-DETCOM_QEPOINTS MACRO ARG
-    COBJ "detcom:dheader 158.0 QEPOINTS \"\ARG\" \"QE%@wavelength in nm\""
-    ENDM
-DETCOM_CONSWV MACRO ARG
-    COBJ "detcom:dheader 170.0 CONSWV \"\ARG\" \"Controller software DSPID and SERNO versions\""
-    ENDM
-DETCOM_DETSTAT MACRO ARG
-    COBJ "detcom:dheader 180.0 DETSTAT \"\ARG\" \"Detector status\""
-    ENDM
-DETCOM_DETTEM MACRO ARG
-    COBJ "detcom:dheader 190.0 DETTEM \"\ARG\" \"Detector temperature\""
-    ENDM
-DETCOM_TELESCOP MACRO ARG
-    COBJ "detcom:dheader 501.1 TELESCOP \"\ARG\" \"\""
-    ENDM
-DETCOM_ORIGIN MACRO ARG
-    COBJ "detcom:dheader 501.2 ORIGIN \"\ARG\" \"Canada-France-Hawaii Telescope\""
-    ENDM
-DETCOM_TELSTAT MACRO ARG
-    COBJ "detcom:dheader 503.0 TELSTAT \"\ARG\" \"Telescope Control System status\""
-    ENDM
-DETCOM_TIMESYS MACRO ARG
-    COBJ "detcom:dheader 510.0 TIMESYS \"\ARG\" \"Time System for DATExxxx\""
-    ENDM
-DETCOM_UTIME MACRO ARG
-    COBJ "detcom:dheader 512.0 UTIME \"\ARG\" \"Time at start of observation (UT)\""
-    ENDM
-DETCOM_SIDTIME MACRO ARG
-    COBJ "detcom:dheader 514.0 SIDTIME \"\ARG\" \"Sidereal time at start of observation\""
-    ENDM
-DETCOM_EPOCH MACRO ARG
-    COBJ "detcom:dheader 521.0 EPOCH \"\ARG\" \"Equinox of coordinates\""
-    ENDM
-DETCOM_EQUINOX MACRO ARG
-    COBJ "detcom:dheader 521.1 EQUINOX \"\ARG\" \"Equinox of coordinates\""
-    ENDM
-DETCOM_RADECSYS MACRO ARG
-    COBJ "detcom:dheader 522.0 RADECSYS \"\ARG\" \"Coordinate system for equinox (FK4/FK5/GAPPT)\""
-    ENDM
-DETCOM_RA MACRO ARG
-    COBJ "detcom:dheader 522.1 RA \"\ARG\" \"Object right ascension\""
-    ENDM
-DETCOM_DEC MACRO ARG
-    COBJ "detcom:dheader 522.2 DEC \"\ARG\" \"Object declination\""
-    ENDM
-DETCOM_CTYPE1 MACRO ARG
-    COBJ "detcom:dheader 525.211 CTYPE1 \"\ARG\" \"WCS Coordinate type\""
-    ENDM
-DETCOM_CTYPE2 MACRO ARG
-    COBJ "detcom:dheader 525.212 CTYPE2 \"\ARG\" \"WCS Coordinate type\""
-    ENDM
-DETCOM_CD1_1 MACRO ARG
-    COBJ "detcom:dheader 525.411 CD1_1 \"\ARG\" \"WCS Coordinate scale matrix\""
-    ENDM
-DETCOM_CD1_2 MACRO ARG
-    COBJ "detcom:dheader 525.412 CD1_2 \"\ARG\" \"WCS Coordinate scale matrix\""
-    ENDM
-DETCOM_CD2_1 MACRO ARG
-    COBJ "detcom:dheader 525.421 CD2_1 \"\ARG\" \"WCS Coordinate scale matrix\""
-    ENDM
-DETCOM_CD2_2 MACRO ARG
-    COBJ "detcom:dheader 525.422 CD2_2 \"\ARG\" \"WCS Coordinate scale matrix\""
-    ENDM
-DETCOM_NGUIDER MACRO ARG
-    COBJ "detcom:dheader 530.0 NGUIDER \"\ARG\" \"TCS Number of guiders\""
-    ENDM
-DETCOM_NGUISTAR MACRO ARG
-    COBJ "detcom:dheader 530.01 NGUISTAR \"\ARG\" \"TCS number of guide stars/probes in use\""
-    ENDM
-DETCOM_GUINAME MACRO ARG
-    COBJ "detcom:dheader 530.1 GUINAME \"\ARG\" \"TCS guider name\""
-    ENDM
-DETCOM_GUIEQUIN MACRO ARG
-    COBJ "detcom:dheader 530.21 GUIEQUIN \"\ARG\" \"TCS guider equinox\""
-    ENDM
-DETCOM_GUIRADEC MACRO ARG
-    COBJ "detcom:dheader 530.22 GUIRADEC \"\ARG\" \"TCS guider system for equinox\""
-    ENDM
-DETCOM_GUIRA MACRO ARG
-    COBJ "detcom:dheader 530.23 GUIRA \"\ARG\" \"TCS guider right ascension\""
-    ENDM
-DETCOM_GUIDEC MACRO ARG
-    COBJ "detcom:dheader 530.24 GUIDEC \"\ARG\" \"TCS guider declination\""
-    ENDM
-DETCOM_GUIOBJN MACRO ARG
-    COBJ "detcom:dheader 530.3 GUIOBJN \"\ARG\" \"TCS guider object name\""
-    ENDM
-DETCOM_GUIFLUX MACRO ARG
-    COBJ "detcom:dheader 530.6 GUIFLUX \"\ARG\" \"TCS guider flux\""
-    ENDM
-DETCOM_SKYFLUX MACRO ARG
-    COBJ "detcom:dheader 530.8 SKYFLUX \"\ARG\" \"TCS total sky flux\""
-    ENDM
-DETCOM_GUINAME1 MACRO ARG
-    COBJ "detcom:dheader 531.1 GUINAME1 \"\ARG\" \"TCS guider #1 identification\""
-    ENDM
-DETCOM_GUIEQUI1 MACRO ARG
-    COBJ "detcom:dheader 531.21 GUIEQUI1 \"\ARG\" \"TCS guider #1 equinox\""
-    ENDM
-DETCOM_GUIRADE1 MACRO ARG
-    COBJ "detcom:dheader 531.22 GUIRADE1 \"\ARG\" \"TCS guider #1 system for equinox\""
-    ENDM
-DETCOM_GUIRA1 MACRO ARG
-    COBJ "detcom:dheader 531.23 GUIRA1 \"\ARG\" \"TCS guider #1 right ascension\""
-    ENDM
-DETCOM_GUIDEC1 MACRO ARG
-    COBJ "detcom:dheader 531.24 GUIDEC1 \"\ARG\" \"TCS guider #1 declination\""
-    ENDM
-DETCOM_GUIOBJN1 MACRO ARG
-    COBJ "detcom:dheader 531.3 GUIOBJN1 \"\ARG\" \"TCS guider #1 object name\""
-    ENDM
-DETCOM_GUIFLUX1 MACRO ARG
-    COBJ "detcom:dheader 531.6 GUIFLUX1 \"\ARG\" \"TCS guider #1 flux\""
-    ENDM
-DETCOM_GUINAME2 MACRO ARG
-    COBJ "detcom:dheader 532.1 GUINAME2 \"\ARG\" \"TCS guider #2 identification\""
-    ENDM
-DETCOM_GUIEQUI2 MACRO ARG
-    COBJ "detcom:dheader 532.21 GUIEQUI2 \"\ARG\" \"TCS guider #2 equinox\""
-    ENDM
-DETCOM_GUIRADE2 MACRO ARG
-    COBJ "detcom:dheader 532.22 GUIRADE2 \"\ARG\" \"TCS guider #2 system for equinox\""
-    ENDM
-DETCOM_GUIRA2 MACRO ARG
-    COBJ "detcom:dheader 532.23 GUIRA2 \"\ARG\" \"TCS guider #2 right ascension\""
-    ENDM
-DETCOM_GUIDEC2 MACRO ARG
-    COBJ "detcom:dheader 532.24 GUIDEC2 \"\ARG\" \"TCS guider #2 declination\""
-    ENDM
-DETCOM_GUIOBJN2 MACRO ARG
-    COBJ "detcom:dheader 532.3 GUIOBJN2 \"\ARG\" \"TCS guider #2 object name\""
-    ENDM
-DETCOM_GUIFLUX2 MACRO ARG
-    COBJ "detcom:dheader 532.6 GUIFLUX2 \"\ARG\" \"TCS guider #2 flux\""
-    ENDM
-DETCOM_GUINAME3 MACRO ARG
-    COBJ "detcom:dheader 533.1 GUINAME3 \"\ARG\" \"TCS guider #3 identification\""
-    ENDM
-DETCOM_GUIEQUI3 MACRO ARG
-    COBJ "detcom:dheader 533.21 GUIEQUI3 \"\ARG\" \"TCS guider #3 equinox\""
-    ENDM
-DETCOM_GUIRADE3 MACRO ARG
-    COBJ "detcom:dheader 533.22 GUIRADE3 \"\ARG\" \"TCS guider #3 system for equinox\""
-    ENDM
-DETCOM_GUIRA3 MACRO ARG
-    COBJ "detcom:dheader 533.23 GUIRA3 \"\ARG\" \"TCS guider #3 right ascension\""
-    ENDM
-DETCOM_GUIDEC3 MACRO ARG
-    COBJ "detcom:dheader 533.24 GUIDEC3 \"\ARG\" \"TCS guider #3 declination\""
-    ENDM
-DETCOM_GUIOBJN3 MACRO ARG
-    COBJ "detcom:dheader 533.3 GUIOBJN3 \"\ARG\" \"TCS guider #3 object name\""
-    ENDM
-DETCOM_GUIFLUX3 MACRO ARG
-    COBJ "detcom:dheader 533.6 GUIFLUX3 \"\ARG\" \"TCS guider #3 flux\""
-    ENDM
-DETCOM_GUINAME4 MACRO ARG
-    COBJ "detcom:dheader 534.1 GUINAME4 \"\ARG\" \"TCS guider #4 identification\""
-    ENDM
-DETCOM_GUIEQUI4 MACRO ARG
-    COBJ "detcom:dheader 534.21 GUIEQUI4 \"\ARG\" \"TCS guider #4 equinox\""
-    ENDM
-DETCOM_GUIRADE4 MACRO ARG
-    COBJ "detcom:dheader 534.22 GUIRADE4 \"\ARG\" \"TCS guider #4 system for equinox\""
-    ENDM
-DETCOM_GUIRA4 MACRO ARG
-    COBJ "detcom:dheader 534.23 GUIRA4 \"\ARG\" \"TCS guider #4 right ascension\""
-    ENDM
-DETCOM_GUIDEC4 MACRO ARG
-    COBJ "detcom:dheader 534.24 GUIDEC4 \"\ARG\" \"TCS guider #4 declination\""
-    ENDM
-DETCOM_GUIOBJN4 MACRO ARG
-    COBJ "detcom:dheader 534.3 GUIOBJN4 \"\ARG\" \"TCS guider #4 object name\""
-    ENDM
-DETCOM_GUIFLUX4 MACRO ARG
-    COBJ "detcom:dheader 534.6 GUIFLUX4 \"\ARG\" \"TCS guider #4 flux\""
-    ENDM
-DETCOM_FOCUSID MACRO ARG
-    COBJ "detcom:dheader 550.0 FOCUSID \"\ARG\" \"Telescope focus in use\""
-    ENDM
-DETCOM_TELCONF MACRO ARG
-    COBJ "detcom:dheader 550.1 TELCONF \"\ARG\" \"Telescope focus in use\""
-    ENDM
-DETCOM_FOCUSPOS MACRO ARG
-    COBJ "detcom:dheader 551.0 FOCUSPOS \"\ARG\" \"Telescope focus encoder readout\""
-    ENDM
-DETCOM_TELFOCUS MACRO ARG
-    COBJ "detcom:dheader 551.1 TELFOCUS \"\ARG\" \"Telescope focus encoder readout\""
-    ENDM
-DETCOM_ISUSTATE MACRO ARG
-    COBJ "detcom:dheader 560.4 ISUSTATE \"\ARG\" \"ISU control state (Off/Only/TCS/Full/Frozen)\""
-    ENDM
-DETCOM_FSASTATE MACRO ARG
-    COBJ "detcom:dheader 570.4 FSASTATE \"\ARG\" \"FSA control state (Off/On/Paused)\""
-    ENDM
-DETCOM_FSANMOVE MACRO ARG
-    COBJ "detcom:dheader 570.5 FSANMOVE \"\ARG\" \"FSA number of actual moves in last 10 minutes\""
-    ENDM
-DETCOM_TCSGPSBC MACRO ARG
-    COBJ "detcom:dheader 580.11 TCSGPSBC \"\ARG\" \"TCS GPS read out in BCD\""
-    ENDM
-DETCOM_TCSRBUSS MACRO ARG
-    COBJ "detcom:dheader 580.13 TCSRBUSS \"\ARG\" \"TCS RBUSS clock time\""
-    ENDM
-DETCOM_TCSEPICS MACRO ARG
-    COBJ "detcom:dheader 580.14 TCSEPICS \"\ARG\" \"TCS EPICS clock time\""
-    ENDM
-DETCOM_TCSAMODE MACRO ARG
-    COBJ "detcom:dheader 580.15 TCSAMODE \"\ARG\" \"TCS acquisition mode - T/O/G/g for t/o/g coords\""
-    ENDM
-DETCOM_TCSENHA MACRO ARG
-    COBJ "detcom:dheader 580.51 TCSENHA \"\ARG\" \"TCS hour angle encoder bits reading\""
-    ENDM
-DETCOM_TCSENDEC MACRO ARG
-    COBJ "detcom:dheader 580.52 TCSENDEC \"\ARG\" \"TCS declination encoder bits reading\""
-    ENDM
-DETCOM_AOBLOOP MACRO ARG
-    COBJ "detcom:dheader 711.0 AOBLOOP \"\ARG\" \"AOB closed loop Open/Closed\""
-    ENDM
-DETCOM_LOOPNES MACRO ARG
-    COBJ "detcom:dheader 713.0 LOOPNES \"\ARG\" \"Loop type \"Nested\"/\"Tip/Tilt\"/\"Single\"\""
-    ENDM
-DETCOM_LOOPOPT MACRO ARG
-    COBJ "detcom:dheader 715.0 LOOPOPT \"\ARG\" \"Optimized loop control True/False\""
-    ENDM
-DETCOM_WFSGOPT MACRO ARG
-    COBJ "detcom:dheader 716.0 WFSGOPT \"\ARG\" \"WFS optical gain\""
-    ENDM
-DETCOM_WFSCOUNT MACRO ARG
-    COBJ "detcom:dheader 722.0 WFSCOUNT \"\ARG\" \"Total flux count on WFS\""
-    ENDM
-DETCOM_ADCPOS MACRO ARG
-    COBJ "detcom:dheader 751.0 ADCPOS \"\ARG\" \"AOB ADC position In/Out\""
-    ENDM
-DETCOM_BEAMSPID MACRO ARG
-    COBJ "detcom:dheader 754.0 BEAMSPID \"\ARG\" \"Beam splitter ID\""
-    ENDM
-DETCOM_BEAMSP MACRO ARG
-    COBJ "detcom:dheader 755.0 BEAMSP \"\ARG\" \"Beam splitter description\""
-    ENDM
-DETCOM_MIRSLIDE MACRO ARG
-    COBJ "detcom:dheader 756.0 MIRSLIDE \"\ARG\" \"AOB mirror slide \"F/20\"/\"F/8\"\""
-    ENDM
-DETCOM_WFSNDID MACRO ARG
-    COBJ "detcom:dheader 757.0 WFSNDID \"\ARG\" \"WFS ND filter position\""
-    ENDM
-DETCOM_FFLAMPON MACRO ARG
-    COBJ "detcom:dheader 910.0 FFLAMPON \"\ARG\" \"flatfield lamp status ON/OFF\""
-    ENDM
-DETCOM_FFLAMP MACRO ARG
-    COBJ "detcom:dheader 911.0 FFLAMP \"\ARG\" \"flatfield lamp intensity\""
-    ENDM
-DETCOM_CLAMP0ON MACRO ARG
-    COBJ "detcom:dheader 920.0 CLAMP0ON \"\ARG\" \"comparison lamp 0 status ON/OFF\""
-    ENDM
-DETCOM_CLAMP0 MACRO ARG
-    COBJ "detcom:dheader 920.1 CLAMP0 \"\ARG\" \"comparison lamp 0 description\""
-    ENDM
-DETCOM_CLAMP1ON MACRO ARG
-    COBJ "detcom:dheader 921.0 CLAMP1ON \"\ARG\" \"comparison lamp 1 status ON/OFF\""
-    ENDM
-DETCOM_CLAMP1 MACRO ARG
-    COBJ "detcom:dheader 921.1 CLAMP1 \"\ARG\" \"comparison lamp 1 description\""
-    ENDM
-DETCOM_CLAMP2ON MACRO ARG
-    COBJ "detcom:dheader 922.0 CLAMP2ON \"\ARG\" \"comparison lamp 2 status ON/OFF\""
-    ENDM
-DETCOM_CLAMP2 MACRO ARG
-    COBJ "detcom:dheader 922.1 CLAMP2 \"\ARG\" \"comparison lamp 2 description\""
-    ENDM
-DETCOM_CLAMP3ON MACRO ARG
-    COBJ "detcom:dheader 923.0 CLAMP3ON \"\ARG\" \"comparison lamp 3 status ON/OFF\""
-    ENDM
-DETCOM_CLAMP3 MACRO ARG
-    COBJ "detcom:dheader 923.1 CLAMP3 \"\ARG\" \"comparison lamp 3 description\""
-    ENDM
-DETCOM_CALIBL0 MACRO ARG
-    COBJ "detcom:dheader 930.0 CALIBL0 \"\ARG\" \"lamp 0 ON/OFF\""
-    ENDM
-DETCOM_CALIBL1 MACRO ARG
-    COBJ "detcom:dheader 931.0 CALIBL1 \"\ARG\" \"lamp 1 ON/OFF\""
-    ENDM
-DETCOM_CALIBL2 MACRO ARG
-    COBJ "detcom:dheader 932.0 CALIBL2 \"\ARG\" \"lamp 2 ON/OFF\""
-    ENDM
-DETCOM_CALIBL3 MACRO ARG
-    COBJ "detcom:dheader 933.0 CALIBL3 \"\ARG\" \"lamp 3 ON/OFF\""
-    ENDM
-DETCOM_CALIBL4 MACRO ARG
-    COBJ "detcom:dheader 934.0 CALIBL4 \"\ARG\" \"lamp 4 ON/OFF\""
-    ENDM
-DETCOM_CALIBL5 MACRO ARG
-    COBJ "detcom:dheader 935.0 CALIBL5 \"\ARG\" \"lamp 5 ON/OFF\""
-    ENDM
-DETCOM_CALIBL6 MACRO ARG
-    COBJ "detcom:dheader 936.0 CALIBL6 \"\ARG\" \"lamp 6 ON/OFF\""
-    ENDM
-DETCOM_CALIBL7 MACRO ARG
-    COBJ "detcom:dheader 937.0 CALIBL7 \"\ARG\" \"lamp 7 ON/OFF\""
-    ENDM
-DETCOM_CALIBL8 MACRO ARG
-    COBJ "detcom:dheader 938.0 CALIBL8 \"\ARG\" \"lamp 8 ON/OFF\""
-    ENDM
-DETCOM_CALIBL9 MACRO ARG
-    COBJ "detcom:dheader 939.0 CALIBL9 \"\ARG\" \"lamp 9 ON/OFF\""
-    ENDM
-DETCOM_FILTERID MACRO ARG
-    COBJ "detcom:dheader 1010.1 FILTERID \"\ARG\" \"wheel position\""
-    ENDM
-DETCOM_FILTER MACRO ARG
-    COBJ "detcom:dheader 1010.2 FILTER \"\ARG\" \"description of filter\""
-    ENDM
-DETCOM_FILTERBW MACRO ARG
-    COBJ "detcom:dheader 1010.3 FILTERBW \"\ARG\" \"filter bandwidth\""
-    ENDM
-DETCOM_FILTERWL MACRO ARG
-    COBJ "detcom:dheader 1010.4 FILTERWL \"\ARG\" \"filter wavelength\""
-    ENDM
-DETCOM_FILTERLB MACRO ARG
-    COBJ "detcom:dheader 1010.5 FILTERLB \"\ARG\" \"lower bound of filter (units/%?)\""
-    ENDM
-DETCOM_FILTERUB MACRO ARG
-    COBJ "detcom:dheader 1010.6 FILTERUB \"\ARG\" \"upper bound of filter (units/%?)\""
-    ENDM
-DETCOM_FILTSLID MACRO ARG
-    COBJ "detcom:dheader 1010.7 FILTSLID \"\ARG\" \"filter drawer number\""
-    ENDM
-DETCOM_WHEELAID MACRO ARG
-    COBJ "detcom:dheader 1020.1 WHEELAID \"\ARG\" \"'wheel' A position\""
-    ENDM
-DETCOM_WHEELADE MACRO ARG
-    COBJ "detcom:dheader 1020.2 WHEELADE \"\ARG\" \"description of filter\""
-    ENDM
-DETCOM_WHEELALB MACRO ARG
-    COBJ "detcom:dheader 1020.5 WHEELALB \"\ARG\" \"lower bound of filter A (units/%?)\""
-    ENDM
-DETCOM_WHEELAUB MACRO ARG
-    COBJ "detcom:dheader 1020.6 WHEELAUB \"\ARG\" \"upper bound of filter A (units/%?)\""
-    ENDM
-DETCOM_WHEELBID MACRO ARG
-    COBJ "detcom:dheader 1030.1 WHEELBID \"\ARG\" \"'wheel' B position\""
-    ENDM
-DETCOM_WHEELBDE MACRO ARG
-    COBJ "detcom:dheader 1030.2 WHEELBDE \"\ARG\" \"description of filter\""
-    ENDM
-DETCOM_WHEELBLB MACRO ARG
-    COBJ "detcom:dheader 1030.5 WHEELBLB \"\ARG\" \"lower bound of filter B (units/%?)\""
-    ENDM
-DETCOM_WHEELBUB MACRO ARG
-    COBJ "detcom:dheader 1030.6 WHEELBUB \"\ARG\" \"upper bound of filter B (units/%?)\""
-    ENDM
-DETCOM_INSTFOC MACRO ARG
-    COBJ "detcom:dheader 1101.0 INSTFOC \"\ARG\" \"internal instrument focus value\""
-    ENDM
-DETCOM_GRISMID MACRO ARG
-    COBJ "detcom:dheader 4101.0 GRISMID \"\ARG\" \"grism position\""
-    ENDM
-DETCOM_GRISM MACRO ARG
-    COBJ "detcom:dheader 4102.0 GRISM \"\ARG\" \"grism description\""
-    ENDM
-DETCOM_GRISSLID MACRO ARG
-    COBJ "detcom:dheader 4103.0 GRISSLID \"\ARG\" \"grism drawer number\""
-    ENDM
-DETCOM_MASKID MACRO ARG
-    COBJ "detcom:dheader 4111.0 MASKID \"\ARG\" \"mask position\""
-    ENDM
-DETCOM_MASK MACRO ARG
-    COBJ "detcom:dheader 4112.0 MASK \"\ARG\" \"mask description\""
-    ENDM
-DETCOM_MASKSLID MACRO ARG
-    COBJ "detcom:dheader 4113.0 MASKSLID \"\ARG\" \"mask slider number\""
-    ENDM
-DETCOM_DISPEL MACRO ARG
-    COBJ "detcom:dheader 4201.0 DISPEL \"\ARG\" \"grating description\""
-    ENDM
-DETCOM_DISPAXIS MACRO ARG
-    COBJ "detcom:dheader 4202.0 DISPAXIS \"\ARG\" \"dispersion axis (1 or 2)\""
-    ENDM
-DETCOM_DISPANG MACRO ARG
-    COBJ "detcom:dheader 4203.0 DISPANG \"\ARG\" \"grating angle in degrees\""
-    ENDM
-DETCOM_WAVELENG MACRO ARG
-    COBJ "detcom:dheader 4204.0 WAVELENG \"\ARG\" \"central wavelength in angstroms\""
-    ENDM
-DETCOM_ORDER MACRO ARG
-    COBJ "detcom:dheader 4205.0 ORDER \"\ARG\" \"spectral order\""
-    ENDM
-DETCOM_GRSETUP MACRO ARG
-    COBJ "detcom:dheader 4206.0 GRSETUP \"\ARG\" \"grating setup constant in degrees\""
-    ENDM
-DETCOM_OPENANG2 MACRO ARG
-    COBJ "detcom:dheader 4207.0 OPENANG2 \"\ARG\" \"setup const in degrees (opening angle / 2)\""
-    ENDM
-DETCOM_GRISMANG MACRO ARG
-    COBJ "detcom:dheader 4208.0 GRISMANG \"\ARG\" \"rel.angle between prisms in degrees\""
-    ENDM
-DETCOM_SLICER MACRO ARG
-    COBJ "detcom:dheader 4210.0 SLICER \"\ARG\" \"image slicer in place\""
-    ENDM
-DETCOM_HART1A MACRO ARG
-    COBJ "detcom:dheader 4221.0 HART1A \"\ARG\" \"hartman mask 1a position OPEN/CLOSED\""
-    ENDM
-DETCOM_HART1B MACRO ARG
-    COBJ "detcom:dheader 4221.1 HART1B \"\ARG\" \"hartman mask 1b position OPEN/CLOSED\""
-    ENDM
-DETCOM_HART2 MACRO ARG
-    COBJ "detcom:dheader 4222.0 HART2 \"\ARG\" \"hartman mask 2 position OPEN/CLOSED\""
-    ENDM
-DETCOM_HART3 MACRO ARG
-    COBJ "detcom:dheader 4223.0 HART3 \"\ARG\" \"hartman mask 3 position OPEN/CLOSED\""
-    ENDM
-DETCOM_HART4 MACRO ARG
-    COBJ "detcom:dheader 4224.0 HART4 \"\ARG\" \"hartman mask 4 position OPEN/CLOSED\""
-    ENDM
-DETCOM_COUDETRN MACRO ARG
-    COBJ "detcom:dheader 4230.0 COUDETRN \"\ARG\" \"coude train color UV/RED/CAFE\""
-    ENDM
-DETCOM_EMFILTER MACRO ARG
-    COBJ "detcom:dheader 4240.0 EMFILTER \"\ARG\" \"exposure meter filter description\""
-    ENDM
-DETCOM_EMCNTS MACRO ARG
-    COBJ "detcom:dheader 4241.0 EMCNTS \"\ARG\" \"exposure meter counts at end\""
-    ENDM
-DETCOM_MIDEXPTM MACRO ARG
-    COBJ "detcom:dheader 4242.0 MIDEXPTM \"\ARG\" \"mid-exposure time (seconds)\""
-    ENDM
-DETCOM_CAFE MACRO ARG
-    COBJ "detcom:dheader 4290.0 CAFE \"\ARG\" \"CAFE is being used Null/INUSE\""
-    ENDM
-DETCOM_AUXINST MACRO ARG
-    COBJ "detcom:dheader 4301.0 AUXINST \"\ARG\" \"fabry perot etalon description\""
-    ENDM
-DETCOM_NUMCHAN MACRO ARG
-    COBJ "detcom:dheader 4303.0 NUMCHAN \"\ARG\" \"number of channels per scan\""
-    ENDM
-DETCOM_CURCHAN MACRO ARG
-    COBJ "detcom:dheader 4304.0 CURCHAN \"\ARG\" \"current channel\""
-    ENDM
-DETCOM_BINVAL MACRO ARG
-    COBJ "detcom:dheader 4305.0 BINVAL \"\ARG\" \"binary control value\""
-    ENDM
-DETCOM_GRFPPOS MACRO ARG
-    COBJ "detcom:dheader 4320.0 GRFPPOS \"\ARG\" \"GriF position of FP carriage - In/Out\""
-    ENDM
-DETCOM_GRWAVORD MACRO ARG
-    COBJ "detcom:dheader 4321.1 GRWAVORD \"\ARG\" \"GriF wavelength of order used to scan\""
-    ENDM
-DETCOM_GRWAVCAL MACRO ARG
-    COBJ "detcom:dheader 4321.2 GRWAVCAL \"\ARG\" \"GriF wavelength of calibration spectral line\""
-    ENDM
-DETCOM_GRBCVCAL MACRO ARG
-    COBJ "detcom:dheader 4321.3 GRBCVCAL \"\ARG\" \"GriF BCV at calibration line\""
-    ENDM
-DETCOM_GRSCANTY MACRO ARG
-    COBJ "detcom:dheader 4322.0 GRSCANTY \"\ARG\" \"GriF type of scan - bcv, wave, velocity\""
-    ENDM
-DETCOM_GRWAVBEG MACRO ARG
-    COBJ "detcom:dheader 4323.1 GRWAVBEG \"\ARG\" \"GriF wavelength at beginning of scan\""
-    ENDM
-DETCOM_GRWAVSTP MACRO ARG
-    COBJ "detcom:dheader 4323.2 GRWAVSTP \"\ARG\" \"GriF wavelength step\""
-    ENDM
-DETCOM_GRWAVCUR MACRO ARG
-    COBJ "detcom:dheader 4323.3 GRWAVCUR \"\ARG\" \"GriF current observed wavelength\""
-    ENDM
-DETCOM_GRBCVBEG MACRO ARG
-    COBJ "detcom:dheader 4324.1 GRBCVBEG \"\ARG\" \"GriF Binary Contol Value at beginning of scan\""
-    ENDM
-DETCOM_GRBCVSTP MACRO ARG
-    COBJ "detcom:dheader 4324.2 GRBCVSTP \"\ARG\" \"GriF BCV step\""
-    ENDM
-DETCOM_GRBCVCUR MACRO ARG
-    COBJ "detcom:dheader 4324.3 GRBCVCUR \"\ARG\" \"GriF applied BCV\""
-    ENDM
-DETCOM_GRNBCHAN MACRO ARG
-    COBJ "detcom:dheader 4325.1 GRNBCHAN \"\ARG\" \"GriF number of channels in scan\""
-    ENDM
-DETCOM_GRCURRCH MACRO ARG
-    COBJ "detcom:dheader 4325.2 GRCURRCH \"\ARG\" \"GriF current channel\""
-    ENDM
-DETCOM_GRBCV_X MACRO ARG
-    COBJ "detcom:dheader 4326.1 GRBCV_X \"\ARG\" \"GriF X Binary Control Value FP\""
-    ENDM
-DETCOM_GRBCV_Y MACRO ARG
-    COBJ "detcom:dheader 4326.2 GRBCV_Y \"\ARG\" \"GriF Y Binary Control Value FP\""
-    ENDM
-DETCOM_CRUNID MACRO ARG
-    COBJ "detcom:dheader 15101.0 CRUNID \"\ARG\" \"Elixir camera run ID\""
-    ENDM
+DETCOM_E MACRO ARG
+    COBJ "detcom:dheader 0.0 E \"\ARG\" \"Standard FITS\""
+    ENDM
+DETCOM_N MACRO ARG
+    COBJ "detcom:dheader 0.0 N \"\ARG\" \"\""
+    ENDM
+DETCOM_X MACRO ARG
+    COBJ "detcom:dheader 1.0 X \"\ARG\" \"Bits per pixel\""
+    ENDM
+DETCOM_S MACRO ARG
+    COBJ "detcom:dheader 2.0 S \"\ARG\" \"Number of axes\""
+    ENDM
+DETCOM_1 MACRO ARG
+    COBJ "detcom:dheader 2.1 1 \"\ARG\" \"Number of pixel columns\""
+    ENDM
+DETCOM_2 MACRO ARG
+    COBJ "detcom:dheader 2.2 2 \"\ARG\" \"Number of pixel rows\""
+    ENDM
+DETCOM_3 MACRO ARG
+    COBJ "detcom:dheader 2.3 3 \"\ARG\" \"Number of stacked frames (cube)\""
+    ENDM
+DETCOM_D MACRO ARG
+    COBJ "detcom:dheader 3.0 D \"\ARG\" \"File contains extensions\""
+    ENDM
+DETCOM_D MACRO ARG
+    COBJ "detcom:dheader 3.1 D \"\ARG\" \"Number of extensions\""
+    ENDM
+DETCOM_S MACRO ARG
+    COBJ "detcom:dheader 4.0 S \"\ARG\" \"File contains random groups records\""
+    ENDM
+DETCOM_T MACRO ARG
+    COBJ "detcom:dheader 5.0 T \"\ARG\" \"Random parameters before each array in a group\""
+    ENDM
+DETCOM_T MACRO ARG
+    COBJ "detcom:dheader 6.0 T \"\ARG\" \"Number of random groups\""
+    ENDM
+DETCOM_S MACRO ARG
+    COBJ "detcom:dheader 7.0000 S \"\ARG\" \"Number of fields in a row\""
+    ENDM
+DETCOM_1 MACRO ARG
+    COBJ "detcom:dheader 7.0011 1 \"\ARG\" \"Table format for field 1\""
+    ENDM
+DETCOM_1 MACRO ARG
+    COBJ "detcom:dheader 7.0012 1 \"\ARG\" \"Start Column for field 1\""
+    ENDM
+DETCOM_2 MACRO ARG
+    COBJ "detcom:dheader 7.0021 2 \"\ARG\" \"Table format for field 2\""
+    ENDM
+DETCOM_2 MACRO ARG
+    COBJ "detcom:dheader 7.0022 2 \"\ARG\" \"Start Column for field 2\""
+    ENDM
+DETCOM_3 MACRO ARG
+    COBJ "detcom:dheader 7.0031 3 \"\ARG\" \"Table format for field 3\""
+    ENDM
+DETCOM_3 MACRO ARG
+    COBJ "detcom:dheader 7.0032 3 \"\ARG\" \"Start Column for field 3\""
+    ENDM
+DETCOM_4 MACRO ARG
+    COBJ "detcom:dheader 7.0041 4 \"\ARG\" \"Table format for field 4\""
+    ENDM
+DETCOM_4 MACRO ARG
+    COBJ "detcom:dheader 7.0042 4 \"\ARG\" \"Start Column for field 4\""
+    ENDM
+DETCOM_5 MACRO ARG
+    COBJ "detcom:dheader 7.0051 5 \"\ARG\" \"Table format for field 5\""
+    ENDM
+DETCOM_5 MACRO ARG
+    COBJ "detcom:dheader 7.0052 5 \"\ARG\" \"Start Column for field 5\""
+    ENDM
+DETCOM_S MACRO ARG
+    COBJ "detcom:dheader 1.0 S \"\ARG\" \"\""
+    ENDM
+DETCOM_Q MACRO ARG
+    COBJ "detcom:dheader 2.0 Q \"\ARG\" \"\""
+    ENDM
+DETCOM_T MACRO ARG
+    COBJ "detcom:dheader 3.0 T \"\ARG\" \"\""
+    ENDM
+DETCOM_R MACRO ARG
+    COBJ "detcom:dheader 4.0 R \"\ARG\" \"\""
+    ENDM
+DETCOM_E MACRO ARG
+    COBJ "detcom:dheader 5.0 E \"\ARG\" \"\""
+    ENDM
+DETCOM_D MACRO ARG
+    COBJ "detcom:dheader 6.0 D \"\ARG\" \"\""
+    ENDM
+DETCOM_E MACRO ARG
+    COBJ "detcom:dheader 1.00 E \"\ARG\" \"Base filename at acquisition\""
+    ENDM
+DETCOM_E MACRO ARG
+    COBJ "detcom:dheader 1.01 E \"\ARG\" \"Original directory name at acquisition\""
+    ENDM
+DETCOM_E MACRO ARG
+    COBJ "detcom:dheader 1.10 E \"\ARG\" \"Extension name\""
+    ENDM
+DETCOM_R MACRO ARG
+    COBJ "detcom:dheader 1.20 R \"\ARG\" \"Extension version\""
+    ENDM
+DETCOM_E MACRO ARG
+    COBJ "detcom:dheader 4.00 E \"\ARG\" \"UTC Date of file creation\""
+    ENDM
+DETCOM_E MACRO ARG
+    COBJ "detcom:dheader 4.10 E \"\ARG\" \"Local time in Hawaii\""
+    ENDM
+DETCOM_V MACRO ARG
+    COBJ "detcom:dheader 7.00 V \"\ARG\" \"Image creation software version\""
+    ENDM
+DETCOM_R MACRO ARG
+    COBJ "detcom:dheader 1.0 R \"\ARG\" \"Science Detector\""
+    ENDM
+DETCOM_E MACRO ARG
+    COBJ "detcom:dheader 2.0 E \"\ARG\" \"Instrument Name\""
+    ENDM
+DETCOM_E MACRO ARG
+    COBJ "detcom:dheader 2.1 E \"\ARG\" \"Instrument Mode\""
+    ENDM
+DETCOM_E MACRO ARG
+    COBJ "detcom:dheader 2.0 E \"\ARG\" \"Total data pixels in full mosaic\""
+    ENDM
+DETCOM_R MACRO ARG
+    COBJ "detcom:dheader 3.0 R \"\ARG\" \"\""
+    ENDM
+DETCOM_M MACRO ARG
+    COBJ "detcom:dheader 5.0 M \"\ARG\" \"Binning factors\""
+    ENDM
+DETCOM_1 MACRO ARG
+    COBJ "detcom:dheader 5.1 1 \"\ARG\" \"Binning factor along first axis\""
+    ENDM
+DETCOM_2 MACRO ARG
+    COBJ "detcom:dheader 5.2 2 \"\ARG\" \"Binning factor along second axis\""
+    ENDM
+DETCOM_3 MACRO ARG
+    COBJ "detcom:dheader 0.0 3 \"\ARG\" \"Pixel size for both axes (microns)\""
+    ENDM
+DETCOM_3 MACRO ARG
+    COBJ "detcom:dheader 1.1 3 \"\ARG\" \"Pixel size for axis 1 (microns)\""
+    ENDM
+DETCOM_3 MACRO ARG
+    COBJ "detcom:dheader 1.2 3 \"\ARG\" \"Pixel size for axis 2 (microns)\""
+    ENDM
+DETCOM_4 MACRO ARG
+    COBJ "detcom:dheader 2.1 4 \"\ARG\" \"Pixel scale for axis 1 (arcsec/pixel)\""
+    ENDM
+DETCOM_4 MACRO ARG
+    COBJ "detcom:dheader 2.2 4 \"\ARG\" \"Pixel scale for axis 2 (arcsec/pixel)\""
+    ENDM
+DETCOM_T MACRO ARG
+    COBJ "detcom:dheader 0.0 T \"\ARG\" \"List of amplifiers for this image\""
+    ENDM
+DETCOM_E MACRO ARG
+    COBJ "detcom:dheader 1.0 E \"\ARG\" \"Amplifier name\""
+    ENDM
+DETCOM_E MACRO ARG
+    COBJ "detcom:dheader 0.0 E \"\ARG\" \"Detector imaging area size\""
+    ENDM
+DETCOM_C MACRO ARG
+    COBJ "detcom:dheader 0.1 C \"\ARG\" \"Mosaic area of the detector\""
+    ENDM
+DETCOM_A MACRO ARG
+    COBJ "detcom:dheader 0.11 A \"\ARG\" \"Mosaic area of the detector from Amp A\""
+    ENDM
+DETCOM_B MACRO ARG
+    COBJ "detcom:dheader 0.12 B \"\ARG\" \"Mosaic area of the detector from Amp B\""
+    ENDM
+DETCOM_C MACRO ARG
+    COBJ "detcom:dheader 0.13 C \"\ARG\" \"Mosaic area of the detector from Amp C\""
+    ENDM
+DETCOM_D MACRO ARG
+    COBJ "detcom:dheader 0.14 D \"\ARG\" \"Mosaic area of the detector from Amp D\""
+    ENDM
+DETCOM_C MACRO ARG
+    COBJ "detcom:dheader 0.2 C \"\ARG\" \"Imaging area of the detector\""
+    ENDM
+DETCOM_C MACRO ARG
+    COBJ "detcom:dheader 0.3 C \"\ARG\" \"Overscan (bias) area of the detector\""
+    ENDM
+DETCOM_A MACRO ARG
+    COBJ "detcom:dheader 1.11 A \"\ARG\" \"Section from Amp A (non-contig. bias excluded)\""
+    ENDM
+DETCOM_B MACRO ARG
+    COBJ "detcom:dheader 1.12 B \"\ARG\" \"Section from Amp B (non-contig. bias excluded)\""
+    ENDM
+DETCOM_C MACRO ARG
+    COBJ "detcom:dheader 1.13 C \"\ARG\" \"Section from Amp C (non-contig. bias excluded)\""
+    ENDM
+DETCOM_D MACRO ARG
+    COBJ "detcom:dheader 1.14 D \"\ARG\" \"Section from Amp D (non-contig. bias excluded)\""
+    ENDM
+DETCOM_A MACRO ARG
+    COBJ "detcom:dheader 1.21 A \"\ARG\" \"Overscan (bias) area from Amp A\""
+    ENDM
+DETCOM_B MACRO ARG
+    COBJ "detcom:dheader 1.22 B \"\ARG\" \"Overscan (bias) area from Amp B\""
+    ENDM
+DETCOM_C MACRO ARG
+    COBJ "detcom:dheader 1.23 C \"\ARG\" \"Overscan (bias) area from Amp C\""
+    ENDM
+DETCOM_D MACRO ARG
+    COBJ "detcom:dheader 1.24 D \"\ARG\" \"Overscan (bias) area from Amp D\""
+    ENDM
+DETCOM_A MACRO ARG
+    COBJ "detcom:dheader 1.31 A \"\ARG\" \"Section in full CCD for DSECA\""
+    ENDM
+DETCOM_B MACRO ARG
+    COBJ "detcom:dheader 1.32 B \"\ARG\" \"Section in full CCD for DSECB\""
+    ENDM
+DETCOM_C MACRO ARG
+    COBJ "detcom:dheader 1.33 C \"\ARG\" \"Section in full CCD for DSECC\""
+    ENDM
+DETCOM_D MACRO ARG
+    COBJ "detcom:dheader 1.34 D \"\ARG\" \"Section in full CCD for DSECD\""
+    ENDM
+DETCOM_A MACRO ARG
+    COBJ "detcom:dheader 1.41 A \"\ARG\" \"Imaging area from Amp A\""
+    ENDM
+DETCOM_B MACRO ARG
+    COBJ "detcom:dheader 1.42 B \"\ARG\" \"Imaging area from Amp B\""
+    ENDM
+DETCOM_C MACRO ARG
+    COBJ "detcom:dheader 1.43 C \"\ARG\" \"Imaging area from Amp C\""
+    ENDM
+DETCOM_D MACRO ARG
+    COBJ "detcom:dheader 1.44 D \"\ARG\" \"Imaging area from Amp D\""
+    ENDM
+DETCOM_A MACRO ARG
+    COBJ "detcom:dheader 1.51 A \"\ARG\" \"Trim section for Amp A\""
+    ENDM
+DETCOM_B MACRO ARG
+    COBJ "detcom:dheader 1.52 B \"\ARG\" \"Trim section for Amp B\""
+    ENDM
+DETCOM_C MACRO ARG
+    COBJ "detcom:dheader 1.53 C \"\ARG\" \"Trim section for Amp C\""
+    ENDM
+DETCOM_D MACRO ARG
+    COBJ "detcom:dheader 1.54 D \"\ARG\" \"Trim section for Amp D\""
+    ENDM
+DETCOM_E MACRO ARG
+    COBJ "detcom:dheader 0.1 E \"\ARG\" \"Name of the CCD (manufacturer reference)\""
+    ENDM
+DETCOM_K MACRO ARG
+    COBJ "detcom:dheader 0.2 K \"\ARG\" \"Nickname of the CCD\""
+    ENDM
+DETCOM_N MACRO ARG
+    COBJ "detcom:dheader 2.0 N \"\ARG\" \"Maximum linearity value (ADU)\""
+    ENDM
+DETCOM_A MACRO ARG
+    COBJ "detcom:dheader 2.01 A \"\ARG\" \"Maximum linearity value for Amp A (ADU)\""
+    ENDM
+DETCOM_B MACRO ARG
+    COBJ "detcom:dheader 2.02 B \"\ARG\" \"Maximum linearity value for Amp B (ADU)\""
+    ENDM
+DETCOM_C MACRO ARG
+    COBJ "detcom:dheader 2.03 C \"\ARG\" \"Maximum linearity value for Amp C (ADU)\""
+    ENDM
+DETCOM_D MACRO ARG
+    COBJ "detcom:dheader 2.04 D \"\ARG\" \"Maximum linearity value for Amp D (ADU)\""
+    ENDM
+DETCOM_E MACRO ARG
+    COBJ "detcom:dheader 2.1 E \"\ARG\" \"Saturation value (ADU)\""
+    ENDM
+DETCOM_3 MACRO ARG
+    COBJ "detcom:dheader 5.0 3 \"\ARG\" \"Amplifier gain (electrons/ADU)\""
+    ENDM
+DETCOM_3 MACRO ARG
+    COBJ "detcom:dheader 5.01 3 \"\ARG\" \"Amp A gain (electrons/ADU)\""
+    ENDM
+DETCOM_3 MACRO ARG
+    COBJ "detcom:dheader 5.02 3 \"\ARG\" \"Amp B gain (electrons/ADU)\""
+    ENDM
+DETCOM_3 MACRO ARG
+    COBJ "detcom:dheader 5.03 3 \"\ARG\" \"Amp C gain (electrons/ADU)\""
+    ENDM
+DETCOM_3 MACRO ARG
+    COBJ "detcom:dheader 5.04 3 \"\ARG\" \"Amp D gain (electrons/ADU)\""
+    ENDM
+DETCOM_3 MACRO ARG
+    COBJ "detcom:dheader 6.0 3 \"\ARG\" \"Read noise (electrons)\""
+    ENDM
+DETCOM_3 MACRO ARG
+    COBJ "detcom:dheader 6.01 3 \"\ARG\" \"Amp A read noise (electrons)\""
+    ENDM
+DETCOM_3 MACRO ARG
+    COBJ "detcom:dheader 6.02 3 \"\ARG\" \"Amp B read noise (electrons)\""
+    ENDM
+DETCOM_3 MACRO ARG
+    COBJ "detcom:dheader 6.03 3 \"\ARG\" \"Amp C read noise (electrons)\""
+    ENDM
+DETCOM_3 MACRO ARG
+    COBJ "detcom:dheader 6.04 3 \"\ARG\" \"Amp D read noise (electrons)\""
+    ENDM
+DETCOM_5 MACRO ARG
+    COBJ "detcom:dheader 7.0 5 \"\ARG\" \"Dark current (ADU/pixel/second)\""
+    ENDM
+DETCOM_5 MACRO ARG
+    COBJ "detcom:dheader 7.1 5 \"\ARG\" \"Dark current (e-/pixel/hour)\""
+    ENDM
+DETCOM_S MACRO ARG
+    COBJ "detcom:dheader 8.0 S \"\ARG\" \"QE%@wavelength in nm\""
+    ENDM
+DETCOM_V MACRO ARG
+    COBJ "detcom:dheader 0.0 V \"\ARG\" \"Controller software DSPID and SERNO versions\""
+    ENDM
+DETCOM_T MACRO ARG
+    COBJ "detcom:dheader 0.0 T \"\ARG\" \"Detector status\""
+    ENDM
+DETCOM_3 MACRO ARG
+    COBJ "detcom:dheader 0.0 3 \"\ARG\" \"Detector temperature\""
+    ENDM
+DETCOM_P MACRO ARG
+    COBJ "detcom:dheader 1.1 P \"\ARG\" \"\""
+    ENDM
+DETCOM_N MACRO ARG
+    COBJ "detcom:dheader 1.2 N \"\ARG\" \"Canada-France-Hawaii Telescope\""
+    ENDM
+DETCOM_T MACRO ARG
+    COBJ "detcom:dheader 3.0 T \"\ARG\" \"Telescope Control System status\""
+    ENDM
+DETCOM_S MACRO ARG
+    COBJ "detcom:dheader 0.0 S \"\ARG\" \"Time System for DATExxxx\""
+    ENDM
+DETCOM_E MACRO ARG
+    COBJ "detcom:dheader 2.0 E \"\ARG\" \"Time at start of observation (UT)\""
+    ENDM
+DETCOM_E MACRO ARG
+    COBJ "detcom:dheader 4.0 E \"\ARG\" \"Sidereal time at start of observation\""
+    ENDM
+DETCOM_H MACRO ARG
+    COBJ "detcom:dheader 1.0 H \"\ARG\" \"Equinox of coordinates\""
+    ENDM
+DETCOM_X MACRO ARG
+    COBJ "detcom:dheader 1.1 X \"\ARG\" \"Equinox of coordinates\""
+    ENDM
+DETCOM_S MACRO ARG
+    COBJ "detcom:dheader 2.0 S \"\ARG\" \"Coordinate system for equinox (FK4/FK5/GAPPT)\""
+    ENDM
+DETCOM_A MACRO ARG
+    COBJ "detcom:dheader 2.1 A \"\ARG\" \"Object right ascension\""
+    ENDM
+DETCOM_C MACRO ARG
+    COBJ "detcom:dheader 2.2 C \"\ARG\" \"Object declination\""
+    ENDM
+DETCOM_1 MACRO ARG
+    COBJ "detcom:dheader 5.211 1 \"\ARG\" \"WCS Coordinate type\""
+    ENDM
+DETCOM_2 MACRO ARG
+    COBJ "detcom:dheader 5.212 2 \"\ARG\" \"WCS Coordinate type\""
+    ENDM
+DETCOM_6 MACRO ARG
+    COBJ "detcom:dheader 5.411 6 \"\ARG\" \"WCS Coordinate scale matrix\""
+    ENDM
+DETCOM_6 MACRO ARG
+    COBJ "detcom:dheader 5.412 6 \"\ARG\" \"WCS Coordinate scale matrix\""
+    ENDM
+DETCOM_6 MACRO ARG
+    COBJ "detcom:dheader 5.421 6 \"\ARG\" \"WCS Coordinate scale matrix\""
+    ENDM
+DETCOM_6 MACRO ARG
+    COBJ "detcom:dheader 5.422 6 \"\ARG\" \"WCS Coordinate scale matrix\""
+    ENDM
+DETCOM_R MACRO ARG
+    COBJ "detcom:dheader 0.0 R \"\ARG\" \"TCS Number of guiders\""
+    ENDM
+DETCOM_R MACRO ARG
+    COBJ "detcom:dheader 0.01 R \"\ARG\" \"TCS number of guide stars/probes in use\""
+    ENDM
+DETCOM_E MACRO ARG
+    COBJ "detcom:dheader 0.1 E \"\ARG\" \"TCS guider name\""
+    ENDM
+DETCOM_N MACRO ARG
+    COBJ "detcom:dheader 0.21 N \"\ARG\" \"TCS guider equinox\""
+    ENDM
+DETCOM_C MACRO ARG
+    COBJ "detcom:dheader 0.22 C \"\ARG\" \"TCS guider system for equinox\""
+    ENDM
+DETCOM_A MACRO ARG
+    COBJ "detcom:dheader 0.23 A \"\ARG\" \"TCS guider right ascension\""
+    ENDM
+DETCOM_C MACRO ARG
+    COBJ "detcom:dheader 0.24 C \"\ARG\" \"TCS guider declination\""
+    ENDM
+DETCOM_N MACRO ARG
+    COBJ "detcom:dheader 0.3 N \"\ARG\" \"TCS guider object name\""
+    ENDM
+DETCOM_X MACRO ARG
+    COBJ "detcom:dheader 0.6 X \"\ARG\" \"TCS guider flux\""
+    ENDM
+DETCOM_X MACRO ARG
+    COBJ "detcom:dheader 0.8 X \"\ARG\" \"TCS total sky flux\""
+    ENDM
+DETCOM_1 MACRO ARG
+    COBJ "detcom:dheader 1.1 1 \"\ARG\" \"TCS guider #1 identification\""
+    ENDM
+DETCOM_1 MACRO ARG
+    COBJ "detcom:dheader 1.21 1 \"\ARG\" \"TCS guider #1 equinox\""
+    ENDM
+DETCOM_1 MACRO ARG
+    COBJ "detcom:dheader 1.22 1 \"\ARG\" \"TCS guider #1 system for equinox\""
+    ENDM
+DETCOM_1 MACRO ARG
+    COBJ "detcom:dheader 1.23 1 \"\ARG\" \"TCS guider #1 right ascension\""
+    ENDM
+DETCOM_1 MACRO ARG
+    COBJ "detcom:dheader 1.24 1 \"\ARG\" \"TCS guider #1 declination\""
+    ENDM
+DETCOM_1 MACRO ARG
+    COBJ "detcom:dheader 1.3 1 \"\ARG\" \"TCS guider #1 object name\""
+    ENDM
+DETCOM_1 MACRO ARG
+    COBJ "detcom:dheader 1.6 1 \"\ARG\" \"TCS guider #1 flux\""
+    ENDM
+DETCOM_2 MACRO ARG
+    COBJ "detcom:dheader 2.1 2 \"\ARG\" \"TCS guider #2 identification\""
+    ENDM
+DETCOM_2 MACRO ARG
+    COBJ "detcom:dheader 2.21 2 \"\ARG\" \"TCS guider #2 equinox\""
+    ENDM
+DETCOM_2 MACRO ARG
+    COBJ "detcom:dheader 2.22 2 \"\ARG\" \"TCS guider #2 system for equinox\""
+    ENDM
+DETCOM_2 MACRO ARG
+    COBJ "detcom:dheader 2.23 2 \"\ARG\" \"TCS guider #2 right ascension\""
+    ENDM
+DETCOM_2 MACRO ARG
+    COBJ "detcom:dheader 2.24 2 \"\ARG\" \"TCS guider #2 declination\""
+    ENDM
+DETCOM_2 MACRO ARG
+    COBJ "detcom:dheader 2.3 2 \"\ARG\" \"TCS guider #2 object name\""
+    ENDM
+DETCOM_2 MACRO ARG
+    COBJ "detcom:dheader 2.6 2 \"\ARG\" \"TCS guider #2 flux\""
+    ENDM
+DETCOM_3 MACRO ARG
+    COBJ "detcom:dheader 3.1 3 \"\ARG\" \"TCS guider #3 identification\""
+    ENDM
+DETCOM_3 MACRO ARG
+    COBJ "detcom:dheader 3.21 3 \"\ARG\" \"TCS guider #3 equinox\""
+    ENDM
+DETCOM_3 MACRO ARG
+    COBJ "detcom:dheader 3.22 3 \"\ARG\" \"TCS guider #3 system for equinox\""
+    ENDM
+DETCOM_3 MACRO ARG
+    COBJ "detcom:dheader 3.23 3 \"\ARG\" \"TCS guider #3 right ascension\""
+    ENDM
+DETCOM_3 MACRO ARG
+    COBJ "detcom:dheader 3.24 3 \"\ARG\" \"TCS guider #3 declination\""
+    ENDM
+DETCOM_3 MACRO ARG
+    COBJ "detcom:dheader 3.3 3 \"\ARG\" \"TCS guider #3 object name\""
+    ENDM
+DETCOM_3 MACRO ARG
+    COBJ "detcom:dheader 3.6 3 \"\ARG\" \"TCS guider #3 flux\""
+    ENDM
+DETCOM_4 MACRO ARG
+    COBJ "detcom:dheader 4.1 4 \"\ARG\" \"TCS guider #4 identification\""
+    ENDM
+DETCOM_4 MACRO ARG
+    COBJ "detcom:dheader 4.21 4 \"\ARG\" \"TCS guider #4 equinox\""
+    ENDM
+DETCOM_4 MACRO ARG
+    COBJ "detcom:dheader 4.22 4 \"\ARG\" \"TCS guider #4 system for equinox\""
+    ENDM
+DETCOM_4 MACRO ARG
+    COBJ "detcom:dheader 4.23 4 \"\ARG\" \"TCS guider #4 right ascension\""
+    ENDM
+DETCOM_4 MACRO ARG
+    COBJ "detcom:dheader 4.24 4 \"\ARG\" \"TCS guider #4 declination\""
+    ENDM
+DETCOM_4 MACRO ARG
+    COBJ "detcom:dheader 4.3 4 \"\ARG\" \"TCS guider #4 object name\""
+    ENDM
+DETCOM_4 MACRO ARG
+    COBJ "detcom:dheader 4.6 4 \"\ARG\" \"TCS guider #4 flux\""
+    ENDM
+DETCOM_D MACRO ARG
+    COBJ "detcom:dheader 0.0 D \"\ARG\" \"Telescope focus in use\""
+    ENDM
+DETCOM_F MACRO ARG
+    COBJ "detcom:dheader 0.1 F \"\ARG\" \"Telescope focus in use\""
+    ENDM
+DETCOM_S MACRO ARG
+    COBJ "detcom:dheader 1.0 S \"\ARG\" \"Telescope focus encoder readout\""
+    ENDM
+DETCOM_S MACRO ARG
+    COBJ "detcom:dheader 1.1 S \"\ARG\" \"Telescope focus encoder readout\""
+    ENDM
+DETCOM_E MACRO ARG
+    COBJ "detcom:dheader 0.4 E \"\ARG\" \"ISU control state (Off/Only/TCS/Full/Frozen)\""
+    ENDM
+DETCOM_E MACRO ARG
+    COBJ "detcom:dheader 0.4 E \"\ARG\" \"FSA control state (Off/On/Paused)\""
+    ENDM
+DETCOM_E MACRO ARG
+    COBJ "detcom:dheader 0.5 E \"\ARG\" \"FSA number of actual moves in last 10 minutes\""
+    ENDM
+DETCOM_C MACRO ARG
+    COBJ "detcom:dheader 0.11 C \"\ARG\" \"TCS GPS read out in BCD\""
+    ENDM
+DETCOM_S MACRO ARG
+    COBJ "detcom:dheader 0.13 S \"\ARG\" \"TCS RBUSS clock time\""
+    ENDM
+DETCOM_S MACRO ARG
+    COBJ "detcom:dheader 0.14 S \"\ARG\" \"TCS EPICS clock time\""
+    ENDM
+DETCOM_E MACRO ARG
+    COBJ "detcom:dheader 0.15 E \"\ARG\" \"TCS acquisition mode - T/O/G/g for t/o/g coords\""
+    ENDM
+DETCOM_A MACRO ARG
+    COBJ "detcom:dheader 0.51 A \"\ARG\" \"TCS hour angle encoder bits reading\""
+    ENDM
+DETCOM_C MACRO ARG
+    COBJ "detcom:dheader 0.52 C \"\ARG\" \"TCS declination encoder bits reading\""
+    ENDM
+DETCOM_P MACRO ARG
+    COBJ "detcom:dheader 1.0 P \"\ARG\" \"AOB closed loop Open/Closed\""
+    ENDM
+DETCOM_S MACRO ARG
+    COBJ "detcom:dheader 3.0 S \"\ARG\" \"Loop type \"Nested\"/\"Tip/Tilt\"/\"Single\"\""
+    ENDM
+DETCOM_T MACRO ARG
+    COBJ "detcom:dheader 5.0 T \"\ARG\" \"Optimized loop control True/False\""
+    ENDM
+DETCOM_T MACRO ARG
+    COBJ "detcom:dheader 6.0 T \"\ARG\" \"WFS optical gain\""
+    ENDM
+DETCOM_T MACRO ARG
+    COBJ "detcom:dheader 2.0 T \"\ARG\" \"Total flux count on WFS\""
+    ENDM
+DETCOM_S MACRO ARG
+    COBJ "detcom:dheader 1.0 S \"\ARG\" \"AOB ADC position In/Out\""
+    ENDM
+DETCOM_D MACRO ARG
+    COBJ "detcom:dheader 4.0 D \"\ARG\" \"Beam splitter ID\""
+    ENDM
+DETCOM_P MACRO ARG
+    COBJ "detcom:dheader 5.0 P \"\ARG\" \"Beam splitter description\""
+    ENDM
+DETCOM_E MACRO ARG
+    COBJ "detcom:dheader 6.0 E \"\ARG\" \"AOB mirror slide \"F/20\"/\"F/8\"\""
+    ENDM
+DETCOM_D MACRO ARG
+    COBJ "detcom:dheader 7.0 D \"\ARG\" \"WFS ND filter position\""
+    ENDM
+DETCOM_N MACRO ARG
+    COBJ "detcom:dheader 0.0 N \"\ARG\" \"flatfield lamp status ON/OFF\""
+    ENDM
+DETCOM_P MACRO ARG
+    COBJ "detcom:dheader 1.0 P \"\ARG\" \"flatfield lamp intensity\""
+    ENDM
+DETCOM_N MACRO ARG
+    COBJ "detcom:dheader 0.0 N \"\ARG\" \"comparison lamp 0 status ON/OFF\""
+    ENDM
+DETCOM_0 MACRO ARG
+    COBJ "detcom:dheader 0.1 0 \"\ARG\" \"comparison lamp 0 description\""
+    ENDM
+DETCOM_N MACRO ARG
+    COBJ "detcom:dheader 1.0 N \"\ARG\" \"comparison lamp 1 status ON/OFF\""
+    ENDM
+DETCOM_1 MACRO ARG
+    COBJ "detcom:dheader 1.1 1 \"\ARG\" \"comparison lamp 1 description\""
+    ENDM
+DETCOM_N MACRO ARG
+    COBJ "detcom:dheader 2.0 N \"\ARG\" \"comparison lamp 2 status ON/OFF\""
+    ENDM
+DETCOM_2 MACRO ARG
+    COBJ "detcom:dheader 2.1 2 \"\ARG\" \"comparison lamp 2 description\""
+    ENDM
+DETCOM_N MACRO ARG
+    COBJ "detcom:dheader 3.0 N \"\ARG\" \"comparison lamp 3 status ON/OFF\""
+    ENDM
+DETCOM_3 MACRO ARG
+    COBJ "detcom:dheader 3.1 3 \"\ARG\" \"comparison lamp 3 description\""
+    ENDM
+DETCOM_0 MACRO ARG
+    COBJ "detcom:dheader 0.0 0 \"\ARG\" \"lamp 0 ON/OFF\""
+    ENDM
+DETCOM_1 MACRO ARG
+    COBJ "detcom:dheader 1.0 1 \"\ARG\" \"lamp 1 ON/OFF\""
+    ENDM
+DETCOM_2 MACRO ARG
+    COBJ "detcom:dheader 2.0 2 \"\ARG\" \"lamp 2 ON/OFF\""
+    ENDM
+DETCOM_3 MACRO ARG
+    COBJ "detcom:dheader 3.0 3 \"\ARG\" \"lamp 3 ON/OFF\""
+    ENDM
+DETCOM_4 MACRO ARG
+    COBJ "detcom:dheader 4.0 4 \"\ARG\" \"lamp 4 ON/OFF\""
+    ENDM
+DETCOM_5 MACRO ARG
+    COBJ "detcom:dheader 5.0 5 \"\ARG\" \"lamp 5 ON/OFF\""
+    ENDM
+DETCOM_6 MACRO ARG
+    COBJ "detcom:dheader 6.0 6 \"\ARG\" \"lamp 6 ON/OFF\""
+    ENDM
+DETCOM_7 MACRO ARG
+    COBJ "detcom:dheader 7.0 7 \"\ARG\" \"lamp 7 ON/OFF\""
+    ENDM
+DETCOM_8 MACRO ARG
+    COBJ "detcom:dheader 8.0 8 \"\ARG\" \"lamp 8 ON/OFF\""
+    ENDM
+DETCOM_9 MACRO ARG
+    COBJ "detcom:dheader 9.0 9 \"\ARG\" \"lamp 9 ON/OFF\""
+    ENDM
+DETCOM_D MACRO ARG
+    COBJ "detcom:dheader 0.1 D \"\ARG\" \"wheel position\""
+    ENDM
+DETCOM_R MACRO ARG
+    COBJ "detcom:dheader 0.2 R \"\ARG\" \"description of filter\""
+    ENDM
+DETCOM_3 MACRO ARG
+    COBJ "detcom:dheader 0.3 3 \"\ARG\" \"filter bandwidth\""
+    ENDM
+DETCOM_3 MACRO ARG
+    COBJ "detcom:dheader 0.4 3 \"\ARG\" \"filter wavelength\""
+    ENDM
+DETCOM_5 MACRO ARG
+    COBJ "detcom:dheader 0.5 5 \"\ARG\" \"lower bound of filter (units/%?)\""
+    ENDM
+DETCOM_5 MACRO ARG
+    COBJ "detcom:dheader 0.6 5 \"\ARG\" \"upper bound of filter (units/%?)\""
+    ENDM
+DETCOM_D MACRO ARG
+    COBJ "detcom:dheader 0.7 D \"\ARG\" \"filter drawer number\""
+    ENDM
+DETCOM_D MACRO ARG
+    COBJ "detcom:dheader 0.1 D \"\ARG\" \"'wheel' A position\""
+    ENDM
+DETCOM_E MACRO ARG
+    COBJ "detcom:dheader 0.2 E \"\ARG\" \"description of filter\""
+    ENDM
+DETCOM_4 MACRO ARG
+    COBJ "detcom:dheader 0.5 4 \"\ARG\" \"lower bound of filter A (units/%?)\""
+    ENDM
+DETCOM_4 MACRO ARG
+    COBJ "detcom:dheader 0.6 4 \"\ARG\" \"upper bound of filter A (units/%?)\""
+    ENDM
+DETCOM_D MACRO ARG
+    COBJ "detcom:dheader 0.1 D \"\ARG\" \"'wheel' B position\""
+    ENDM
+DETCOM_E MACRO ARG
+    COBJ "detcom:dheader 0.2 E \"\ARG\" \"description of filter\""
+    ENDM
+DETCOM_4 MACRO ARG
+    COBJ "detcom:dheader 0.5 4 \"\ARG\" \"lower bound of filter B (units/%?)\""
+    ENDM
+DETCOM_4 MACRO ARG
+    COBJ "detcom:dheader 0.6 4 \"\ARG\" \"upper bound of filter B (units/%?)\""
+    ENDM
+DETCOM_7 MACRO ARG
+    COBJ "detcom:dheader 1.0 7 \"\ARG\" \"internal instrument focus value\""
+    ENDM
+DETCOM_D MACRO ARG
+    COBJ "detcom:dheader 1.0 D \"\ARG\" \"grism position\""
+    ENDM
+DETCOM_M MACRO ARG
+    COBJ "detcom:dheader 2.0 M \"\ARG\" \"grism description\""
+    ENDM
+DETCOM_D MACRO ARG
+    COBJ "detcom:dheader 3.0 D \"\ARG\" \"grism drawer number\""
+    ENDM
+DETCOM_D MACRO ARG
+    COBJ "detcom:dheader 1.0 D \"\ARG\" \"mask position\""
+    ENDM
+DETCOM_K MACRO ARG
+    COBJ "detcom:dheader 2.0 K \"\ARG\" \"mask description\""
+    ENDM
+DETCOM_D MACRO ARG
+    COBJ "detcom:dheader 3.0 D \"\ARG\" \"mask slider number\""
+    ENDM
+DETCOM_L MACRO ARG
+    COBJ "detcom:dheader 1.0 L \"\ARG\" \"grating description\""
+    ENDM
+DETCOM_S MACRO ARG
+    COBJ "detcom:dheader 2.0 S \"\ARG\" \"dispersion axis (1 or 2)\""
+    ENDM
+DETCOM_6 MACRO ARG
+    COBJ "detcom:dheader 3.0 6 \"\ARG\" \"grating angle in degrees\""
+    ENDM
+DETCOM_0 MACRO ARG
+    COBJ "detcom:dheader 4.0 0 \"\ARG\" \"central wavelength in angstroms\""
+    ENDM
+DETCOM_R MACRO ARG
+    COBJ "detcom:dheader 5.0 R \"\ARG\" \"spectral order\""
+    ENDM
+DETCOM_5 MACRO ARG
+    COBJ "detcom:dheader 6.0 5 \"\ARG\" \"grating setup constant in degrees\""
+    ENDM
+DETCOM_7 MACRO ARG
+    COBJ "detcom:dheader 7.0 7 \"\ARG\" \"setup const in degrees (opening angle / 2)\""
+    ENDM
+DETCOM_5 MACRO ARG
+    COBJ "detcom:dheader 8.0 5 \"\ARG\" \"rel.angle between prisms in degrees\""
+    ENDM
+DETCOM_R MACRO ARG
+    COBJ "detcom:dheader 0.0 R \"\ARG\" \"image slicer in place\""
+    ENDM
+DETCOM_A MACRO ARG
+    COBJ "detcom:dheader 1.0 A \"\ARG\" \"hartman mask 1a position OPEN/CLOSED\""
+    ENDM
+DETCOM_B MACRO ARG
+    COBJ "detcom:dheader 1.1 B \"\ARG\" \"hartman mask 1b position OPEN/CLOSED\""
+    ENDM
+DETCOM_2 MACRO ARG
+    COBJ "detcom:dheader 2.0 2 \"\ARG\" \"hartman mask 2 position OPEN/CLOSED\""
+    ENDM
+DETCOM_3 MACRO ARG
+    COBJ "detcom:dheader 3.0 3 \"\ARG\" \"hartman mask 3 position OPEN/CLOSED\""
+    ENDM
+DETCOM_4 MACRO ARG
+    COBJ "detcom:dheader 4.0 4 \"\ARG\" \"hartman mask 4 position OPEN/CLOSED\""
+    ENDM
+DETCOM_N MACRO ARG
+    COBJ "detcom:dheader 0.0 N \"\ARG\" \"coude train color UV/RED/CAFE\""
+    ENDM
+DETCOM_R MACRO ARG
+    COBJ "detcom:dheader 0.0 R \"\ARG\" \"exposure meter filter description\""
+    ENDM
+DETCOM_S MACRO ARG
+    COBJ "detcom:dheader 1.0 S \"\ARG\" \"exposure meter counts at end\""
+    ENDM
+DETCOM_M MACRO ARG
+    COBJ "detcom:dheader 2.0 M \"\ARG\" \"mid-exposure time (seconds)\""
+    ENDM
+DETCOM_E MACRO ARG
+    COBJ "detcom:dheader 0.0 E \"\ARG\" \"CAFE is being used Null/INUSE\""
+    ENDM
+DETCOM_T MACRO ARG
+    COBJ "detcom:dheader 1.0 T \"\ARG\" \"fabry perot etalon description\""
+    ENDM
+DETCOM_N MACRO ARG
+    COBJ "detcom:dheader 3.0 N \"\ARG\" \"number of channels per scan\""
+    ENDM
+DETCOM_N MACRO ARG
+    COBJ "detcom:dheader 4.0 N \"\ARG\" \"current channel\""
+    ENDM
+DETCOM_L MACRO ARG
+    COBJ "detcom:dheader 5.0 L \"\ARG\" \"binary control value\""
+    ENDM
+DETCOM_S MACRO ARG
+    COBJ "detcom:dheader 0.0 S \"\ARG\" \"GriF position of FP carriage - In/Out\""
+    ENDM
+DETCOM_6 MACRO ARG
+    COBJ "detcom:dheader 1.1 6 \"\ARG\" \"GriF wavelength of order used to scan\""
+    ENDM
+DETCOM_6 MACRO ARG
+    COBJ "detcom:dheader 1.2 6 \"\ARG\" \"GriF wavelength of calibration spectral line\""
+    ENDM
+DETCOM_6 MACRO ARG
+    COBJ "detcom:dheader 1.3 6 \"\ARG\" \"GriF BCV at calibration line\""
+    ENDM
+DETCOM_Y MACRO ARG
+    COBJ "detcom:dheader 2.0 Y \"\ARG\" \"GriF type of scan - bcv, wave, velocity\""
+    ENDM
+DETCOM_6 MACRO ARG
+    COBJ "detcom:dheader 3.1 6 \"\ARG\" \"GriF wavelength at beginning of scan\""
+    ENDM
+DETCOM_6 MACRO ARG
+    COBJ "detcom:dheader 3.2 6 \"\ARG\" \"GriF wavelength step\""
+    ENDM
+DETCOM_6 MACRO ARG
+    COBJ "detcom:dheader 3.3 6 \"\ARG\" \"GriF current observed wavelength\""
+    ENDM
+DETCOM_6 MACRO ARG
+    COBJ "detcom:dheader 4.1 6 \"\ARG\" \"GriF Binary Contol Value at beginning of scan\""
+    ENDM
+DETCOM_6 MACRO ARG
+    COBJ "detcom:dheader 4.2 6 \"\ARG\" \"GriF BCV step\""
+    ENDM
+DETCOM_R MACRO ARG
+    COBJ "detcom:dheader 4.3 R \"\ARG\" \"GriF applied BCV\""
+    ENDM
+DETCOM_N MACRO ARG
+    COBJ "detcom:dheader 5.1 N \"\ARG\" \"GriF number of channels in scan\""
+    ENDM
+DETCOM_H MACRO ARG
+    COBJ "detcom:dheader 5.2 H \"\ARG\" \"GriF current channel\""
+    ENDM
+DETCOM_X MACRO ARG
+    COBJ "detcom:dheader 6.1 X \"\ARG\" \"GriF X Binary Control Value FP\""
+    ENDM
+DETCOM_Y MACRO ARG
+    COBJ "detcom:dheader 6.2 Y \"\ARG\" \"GriF Y Binary Control Value FP\""
+    ENDM
+DETCOM_D MACRO ARG
+    COBJ "detcom:dheader 1.0 D \"\ARG\" \"Elixir camera run ID\""
+    ENDM
Index: /trunk/ippScripts/scripts/camera_exp.pl
===================================================================
--- /trunk/ippScripts/scripts/camera_exp.pl	(revision 41704)
+++ /trunk/ippScripts/scripts/camera_exp.pl	(revision 41705)
@@ -39,4 +39,6 @@
     exit($PS_EXIT_CONFIG_ERROR);
 }
+
+my @ARGS = @ARGV;
 
 my ( $exp_tag, $cam_id, $camera, $outroot, $dbname, $reduction, $dvodb, $verbose, $no_update,
@@ -96,5 +98,5 @@
     print "\n\n";
     print "Starting script $0 on $host\n\n";
-    print "COMMAND IS: @ARGV\n\n";
+    print "FULL COMMAND: $0 @ARGS\n\n";
 }
 
Index: /trunk/ippScripts/scripts/diff_skycell.pl
===================================================================
--- /trunk/ippScripts/scripts/diff_skycell.pl	(revision 41704)
+++ /trunk/ippScripts/scripts/diff_skycell.pl	(revision 41705)
@@ -40,4 +40,6 @@
 my ($skycell_id, $diff_skyfile_id);
 my ($use_convolved);
+
+my @ARGS = @ARGV;
 
 GetOptions(
@@ -84,4 +86,5 @@
 }
 $ipprc->redirect_to_logfile($logDest) or my_die( "Unable to redirect output", $diff_id, $skycell_id, $PS_EXIT_SYS_ERROR ) if $redirect;
+print "FULL COMMAND: $0 @ARGS\n\n";
 
 my $source_id = $ipprc->source_id($dbname, $PS_TABLE_ID_DIFF);
Index: /trunk/ippScripts/scripts/fake_imfile.pl
===================================================================
--- /trunk/ippScripts/scripts/fake_imfile.pl	(revision 41704)
+++ /trunk/ippScripts/scripts/fake_imfile.pl	(revision 41705)
@@ -50,4 +50,6 @@
     exit($PS_EXIT_CONFIG_ERROR);
 }
+
+my @ARGS = @ARGV;
 
 # Parse the command-line arguments
@@ -84,4 +86,5 @@
 my $logDest = $ipprc->filename("LOG.IMFILE", $outroot, $class_id) or &my_die("Missing entry from camera config", $exp_id, $fake_id, $class_id, $PS_EXIT_CONFIG_ERROR);
 $ipprc->redirect_output($logDest) or my_die( "Unable to redirect output", $exp_id, $fake_id, $class_id, $PS_EXIT_SYS_ERROR ) if $redirect;
+print "FULL COMMAND: $0 @ARGS\n\n";
 
 # Recipes to use based on reduction class
Index: /trunk/ippScripts/scripts/ipp_serial_diff.pl
===================================================================
--- /trunk/ippScripts/scripts/ipp_serial_diff.pl	(revision 41704)
+++ /trunk/ippScripts/scripts/ipp_serial_diff.pl	(revision 41705)
@@ -17,4 +17,6 @@
 
 my $ipprc = PS::IPP::Config->new(); # IPP configuration
+
+my @ARGS = @ARGV;
 
 my ($dbname,			# Database name to use
@@ -53,4 +55,5 @@
 }
 
+print "FULL COMMAND: $0 @ARGS\n\n";
 
 # Image differencing
Index: /trunk/ippScripts/scripts/ipp_serial_warp.pl
===================================================================
--- /trunk/ippScripts/scripts/ipp_serial_warp.pl	(revision 41704)
+++ /trunk/ippScripts/scripts/ipp_serial_warp.pl	(revision 41705)
@@ -17,4 +17,6 @@
 
 my $ipprc = PS::IPP::Config->new(); # IPP configuration
+
+my @ARGS = @ARGV;
 
 my ($dbname,			# Database name to use
@@ -54,4 +56,6 @@
     exit($PS_EXIT_CONFIG_ERROR); 
 }
+
+print "FULL COMMAND: $0 @ARGS\n\n";
 
 
Index: /trunk/ippScripts/scripts/sc_prepare_diff.pl
===================================================================
--- /trunk/ippScripts/scripts/sc_prepare_diff.pl	(revision 41704)
+++ /trunk/ippScripts/scripts/sc_prepare_diff.pl	(revision 41705)
@@ -28,4 +28,6 @@
     exit($PS_EXIT_CONFIG_ERROR);
 }
+
+my @ARGS = @ARGV;
 
 my ($remote_id,$diff_id,$camera,$dbname,$verbose,$path_base,$no_update,$cmd_recipe);
@@ -50,4 +52,5 @@
     defined($dbname);
 
+print "FULL COMMAND: $0 @ARGS\n\n";
 
 # Hard coded values
Index: /trunk/ippScripts/scripts/sc_prepare_warp.pl
===================================================================
--- /trunk/ippScripts/scripts/sc_prepare_warp.pl	(revision 41704)
+++ /trunk/ippScripts/scripts/sc_prepare_warp.pl	(revision 41705)
@@ -28,4 +28,6 @@
     exit($PS_EXIT_CONFIG_ERROR);
 }
+
+my @ARGS = @ARGV;
 
 my ($remote_id,$warp_id,$camera,$dbname,$verbose,$path_base,$no_update,$cmd_recipe);
@@ -50,4 +52,5 @@
     defined($dbname);
 
+print "FULL COMMAND: $0 @ARGS\n\n";
 
 # Hard coded values
Index: /trunk/ippScripts/scripts/warp_overlap.pl
===================================================================
--- /trunk/ippScripts/scripts/warp_overlap.pl	(revision 41704)
+++ /trunk/ippScripts/scripts/warp_overlap.pl	(revision 41705)
@@ -34,4 +34,6 @@
     exit($PS_EXIT_CONFIG_ERROR);
 }
+
+my @ARGS = @ARGV;
 
 my ($warp_id, $camera, $tess_dir, $dbname, $verbose, $no_update, $no_op, $logfile, $save_temps);
@@ -58,4 +60,5 @@
 my $ipprc = PS::IPP::Config->new( $camera ) or my_die( "Unable to set up", $warp_id, $PS_EXIT_CONFIG_ERROR ); # IPP configuration
 $ipprc->redirect_to_logfile($logfile) or my_die( "Unable to redirect output", $warp_id, $PS_EXIT_SYS_ERROR ) if $logfile;
+print "FULL COMMAND: $0 @ARGS\n\n";
 
 &my_die("Tessellation identifier not provided: $tess_dir", $warp_id, $PS_EXIT_SYS_ERROR) unless $tess_dir ne "NULL";
Index: /trunk/ippScripts/scripts/warp_skycell.pl
===================================================================
--- /trunk/ippScripts/scripts/warp_skycell.pl	(revision 41704)
+++ /trunk/ippScripts/scripts/warp_skycell.pl	(revision 41705)
@@ -36,4 +36,6 @@
     exit($PS_EXIT_CONFIG_ERROR);
 }
+
+my @ARGS = @ARGV;
 
 my ($warp_id, $skycell_id, $warp_skyfile_id, $tess_dir, $reduction, $camera, $dbname, $outroot, $threads, $run_state, $magicked, $verbose, $no_update, $no_op, $redirect, $save_temps);
@@ -92,4 +94,5 @@
 
 $ipprc->redirect_to_logfile($logDest) or my_die( "Unable to redirect output", $warp_id, $skycell_id, $tess_dir, $PS_EXIT_SYS_ERROR ) if $redirect;
+print "FULL COMMAND: $0 @ARGS\n\n";
 
 # Recipes to use based on reduction class
Index: /trunk/ippconfig/gpc1/psastro.config
===================================================================
--- /trunk/ippconfig/gpc1/psastro.config	(revision 41704)
+++ /trunk/ippconfig/gpc1/psastro.config	(revision 41705)
@@ -129,6 +129,6 @@
 DVO.GETSTAR.PHOTCODE        STR      i
 DVO.GETSTAR.MAX.RHO         F32      10000.0
-DVO.GETSTAR.MIN.MAG         F32      2.0
-DVO.GETSTAR.MIN.MAG.INST    F32     -35.0
+DVO.GETSTAR.MIN.MAG         F32     -10.0
+DVO.GETSTAR.MIN.MAG.INST    F32     -45.0
 
 # rather than mean, use specified EDGE:
@@ -184,6 +184,4 @@
 REFSTAR_MASK                    BOOL TRUE
 REFSTAR_MASK_MAX_MAG            F32 -15.0
-REFSTAR_MASK_SATSTAR_MAG_MAX    F32 -15.0
-REFSTAR_MASK_SATSTAR_MAG_SLOPE  F32  10.15
 
 # TdB20200430: Updated satspike position angle offset
Index: /trunk/ippconfig/gpc2/Makefile.am
===================================================================
--- /trunk/ippconfig/gpc2/Makefile.am	(revision 41704)
+++ /trunk/ippconfig/gpc2/Makefile.am	(revision 41705)
@@ -12,4 +12,5 @@
         ppMerge.config \
 	psphot.config \
+	pswarp.config \
 	ppStack.config \
 	psastro.config \
Index: /trunk/ippconfig/gpc2/psastro.config
===================================================================
--- /trunk/ippconfig/gpc2/psastro.config	(revision 41704)
+++ /trunk/ippconfig/gpc2/psastro.config	(revision 41705)
@@ -129,7 +129,7 @@
 
 DVO.GETSTAR.PHOTCODE        STR      i
-DVO.GETSTAR.MAX.RHO         F32      3000.0
-DVO.GETSTAR.MIN.MAG         F32      2.0
-DVO.GETSTAR.MIN.MAG.INST    F32     -35.0
+DVO.GETSTAR.MAX.RHO         F32      10000.0
+DVO.GETSTAR.MIN.MAG         F32     -10.0
+DVO.GETSTAR.MIN.MAG.INST    F32     -45.0
 
 # rather than mean, use specified EDGE:
@@ -185,6 +185,4 @@
 REFSTAR_MASK                    BOOL TRUE
 REFSTAR_MASK_MAX_MAG            F32 -16.5
-REFSTAR_MASK_SATSTAR_MAG_MAX    F32 -15.0
-REFSTAR_MASK_SATSTAR_MAG_SLOPE  F32  10.15
 
 #TdB20200214: Position of gpc2 spikes determined on image
Index: /trunk/ippconfig/gpc2/pswarp.config
===================================================================
--- /trunk/ippconfig/gpc2/pswarp.config	(revision 41705)
+++ /trunk/ippconfig/gpc2/pswarp.config	(revision 41705)
@@ -0,0 +1,2 @@
+APPLY.PIXELNAN		BOOL	FALSE		# Apply NAN'ing of pixels underneath masks
+
Index: /trunk/ippconfig/recipes/masks.16bit.config
===================================================================
--- /trunk/ippconfig/recipes/masks.16bit.config	(revision 41704)
+++ /trunk/ippconfig/recipes/masks.16bit.config	(revision 41705)
@@ -24,5 +24,5 @@
 SPIKE		U16	0x0200		# Pixel contains a diffraction spike
 GHOST		U16	0x0400		# Pixel contains an optical ghost
-STREAK		U16	0x0800		# Pixel contains a streak
+CROSSTALK	U16	0x0800		# Pixel contains electronic crosstalk
 STARCORE	U16	0x1000		# Pixel contains a bright star core
 
Index: /trunk/ippconfig/recipes/masks.config
===================================================================
--- /trunk/ippconfig/recipes/masks.config	(revision 41704)
+++ /trunk/ippconfig/recipes/masks.config	(revision 41705)
@@ -25,5 +25,5 @@
 CR		U8	0x20		# Pixel contains a cosmic ray
 GHOST		U8	0x20		# Pixel contains an optical ghost
-STREAK		U8	0x20		# Pixel contains a streak
+CROSSTALK	U16	0x0800		# Pixel contains electronic crosstalk
 
 SPIKE		U8	0x20		# Pixel contains a diffraction spike
Index: /trunk/ippconfig/recipes/ppStack.config
===================================================================
--- /trunk/ippconfig/recipes/ppStack.config	(revision 41704)
+++ /trunk/ippconfig/recipes/ppStack.config	(revision 41705)
@@ -10,5 +10,5 @@
 
 MASK.VAL	STR	MASK.VALUE,CONV.BAD,GHOST # Mask value of input bad pixels
-MASK.SUSPECT	STR	SUSPECT,BURNTOOL,SPIKE,STREAK,STARCORE,CONV.POOR # Mask value of suspect pixels
+MASK.SUSPECT	STR	SUSPECT,BURNTOOL,SPIKE,CROSSTALK,STARCORE,CONV.POOR # Mask value of suspect pixels
 MASK.BAD	STR	BLANK		# Mask value to give bad pixels
 MASK.POOR	STR	CONV.POOR	# Mask value to give poor pixels
Index: /trunk/ppSub/src/ppSubSetMasks.c
===================================================================
--- /trunk/ppSub/src/ppSubSetMasks.c	(revision 41704)
+++ /trunk/ppSub/src/ppSubSetMasks.c	(revision 41705)
@@ -46,5 +46,5 @@
     { "SPIKE",     NULL,       0x08, false  }, // Pixel contains a diffraction spike
     { "GHOST",     NULL,       0x08, false  }, // Pixel contains an optical ghost
-    { "STREAK",    NULL,       0x08, false  }, // Pixel contains streak data
+    { "CROSSTALK", NULL,       0x08, false  }, // Pixel contains crosstalk data
     { "STARCORE",  NULL,       0x08, false  }, // Pixel contains a bright star core
     // Effects of convolution and interpolation
Index: /trunk/psLib/src/types/psMetadata.c
===================================================================
--- /trunk/psLib/src/types/psMetadata.c	(revision 41704)
+++ /trunk/psLib/src/types/psMetadata.c	(revision 41705)
@@ -795,4 +795,5 @@
         // default is to error on duplicate entry.
         psError(PS_ERR_BAD_PARAMETER_VALUE, true, _("Duplicate metadata item name: %s is not allowed.  Use a psMetadataFlags option to allow such action."), item->name);
+
         return false;
     }
Index: /trunk/psModules/src/config/pmConfigMask.c
===================================================================
--- /trunk/psModules/src/config/pmConfigMask.c	(revision 41704)
+++ /trunk/psModules/src/config/pmConfigMask.c	(revision 41705)
@@ -33,5 +33,5 @@
     { "SPIKE",     NULL,       0x08, false  }, // Pixel contains a diffraction spike
     { "GHOST",     NULL,       0x08, false  }, // Pixel contains an optical ghost
-    { "STREAK",    NULL,       0x08, false  }, // Pixel contains streak data
+    { "CROSSTALK", NULL,       0x08, false  }, // Pixel contains crosstalk data
     { "STARCORE",  NULL,       0x08, false  }, // Pixel contains a bright star core
     // Effects of convolution and interpolation
Index: /trunk/psModules/src/objects/pmSourceIO_Glints.c
===================================================================
--- /trunk/psModules/src/objects/pmSourceIO_Glints.c	(revision 41704)
+++ /trunk/psModules/src/objects/pmSourceIO_Glints.c	(revision 41705)
@@ -175,5 +175,5 @@
 
 	        double glintLength = GLINT_LENGTH_MAG_SLOPE*(GLINT_LENGTH_MAG_ZERO - star->Mag);
-                double glintAngle = 0;
+                double glintAngle = 0.;
 
                 //Besides brightness, the length of the glints also depends on the position of the star compared to the focal plane. But, seemingly only for stars closer than about 30k pixels
Index: /trunk/psModules/src/objects/pmSourceMasks.h
===================================================================
--- /trunk/psModules/src/objects/pmSourceMasks.h	(revision 41704)
+++ /trunk/psModules/src/objects/pmSourceMasks.h	(revision 41705)
@@ -70,4 +70,7 @@
     PM_SOURCE_MODE2_EXT_FITS_NONE         = 0x00400000, ///< ALL of the model fits failed
     
+    PM_SOURCE_MODE2_ON_GHOST      	  = 0x00800000, ///< > 25% of (PSF-weighted) pixels land on ghost
+    PM_SOURCE_MODE2_ON_CROSSTALK      	  = 0x01000000, ///< peaks land on electronic crostalk
+
     
 } pmSourceMode2;
Index: /trunk/psModules/src/objects/pmSourcePhotometry.c
===================================================================
--- /trunk/psModules/src/objects/pmSourcePhotometry.c	(revision 41704)
+++ /trunk/psModules/src/objects/pmSourcePhotometry.c	(revision 41705)
@@ -60,4 +60,5 @@
 static psImageMaskType maskGhost    = 0;
 static psImageMaskType maskGlint    = 0;
+static psImageMaskType maskCrosstalk    = 0;
 
 bool pmSourceMagnitudesInit (pmConfig *config, psMetadata *recipe)
@@ -74,4 +75,5 @@
 	maskGhost    = pmConfigMaskGet("GHOST", config);
 	maskGlint    = pmConfigMaskGet("GHOST", config);
+	maskCrosstalk    = pmConfigMaskGet("CROSSTALK", config);
 	maskSuspect  = maskSpike | maskStarCore | maskBurntool | maskConvPoor;
     }
@@ -437,4 +439,5 @@
     float burntoolSum = 0;
     float convpoorSum = 0;
+    float ghostSum = 0;
 
     int Xo, Yo, dP;
@@ -520,4 +523,8 @@
 	    }
 	    // count pixels which are masked with an mask bit (bad or poor)
+            if (mask->data.PS_TYPE_IMAGE_MASK_DATA[my][mx] & maskGhost) {
+		ghostSum += value;
+	    }
+	    // count pixels which are masked with an mask bit (bad or poor)
             if (mask->data.PS_TYPE_IMAGE_MASK_DATA[my][mx] & maskBurntool) {
 		burntoolSum += value;
@@ -539,4 +546,7 @@
     if ((starcoreSum/modelSum) > 0.25) {
 	source->mode2 |= PM_SOURCE_MODE2_ON_STARCORE;
+    }
+    if ((ghostSum/modelSum) > 0.25) {
+	source->mode2 |= PM_SOURCE_MODE2_ON_GHOST;
     }
     if ((burntoolSum/modelSum) > 0.25) {
@@ -582,4 +592,146 @@
 	    source->mode |= PM_SOURCE_MODE_ON_SPIKE;
 	}
+	if (maskValue & maskCrosstalk) {
+	    source->mode2 |= PM_SOURCE_MODE2_ON_CROSSTALK;
+	}
+    }
+    return (true);
+}
+
+// return source aperture magnitude
+bool pmSourceMaskEval (pmSource *source, psImage *mask, psImageMaskType maskVal)
+{
+    PS_ASSERT_PTR_NON_NULL(source, false);
+    source->pixWeightNotBad = NAN;
+    source->pixWeightNotPoor = NAN;
+
+    PS_ASSERT_PTR_NON_NULL(mask, false);
+
+    float modelSum = 0;
+    float spikeSum = 0;
+    float starcoreSum = 0;
+    float burntoolSum = 0;
+    float convpoorSum = 0;
+    float ghostSum = 0;
+
+    int Xo, Yo, dP;
+    int dX, DX, NX;
+    int dY, DY, NY;
+
+    float radius=10.;
+    float radius2 = PS_SQR(radius);
+
+    // the model function returns the source flux at a position
+    psVector *coord = psVectorAlloc(2, PS_TYPE_F32);
+
+    Xo = source->peak->x;
+    Yo = source->peak->y;
+
+    dX = Xo - mask->col0;
+    dP = mask->numCols - dX;
+    DX = PS_MAX(dX, dP);
+    NX = mask->numCols;
+
+    dY = Yo - mask->row0;
+    dP = mask->numRows - dY;
+    DY = PS_MAX(dY, dP);
+    NY = mask->numRows;
+
+    psImageMaskType maskBad = maskVal;
+    maskBad &= ~maskSuspect;
+
+    // were not by an edge; ie, if the source is cut in half by an image edge, we correctly
+    // count the virtual pixels off the edge in normalizing the value of the pixWeight
+
+    // we skip any pixels [real or virtual] outside of the specified radius (nominally the aperture radius)
+    for (int ix = -DX; ix < DX + 1; ix++) {
+	if (ix > radius) continue;
+        int mx = ix + dX;
+        for (int iy = -DY; iy < DY + 1; iy++) {
+	    if (iy > radius) continue;
+	    if (ix*ix + iy*iy > radius2) continue;
+            int my = iy + dY;
+
+            coord->data.F32[0] = (psF32) (ix + Xo);
+            coord->data.F32[1] = (psF32) (iy + Yo);
+
+            modelSum += 1.;
+            // include count only the unmasked pixels within the image area
+            if (mx < 0) continue;
+            if (my < 0) continue;
+            if (mx >= NX) continue;
+            if (my >= NY) continue;
+
+	    // count pixels which are masked with an mask bit (bad or poor)
+            if (mask->data.PS_TYPE_IMAGE_MASK_DATA[my][mx] & maskSpike) {
+		spikeSum += 1.;
+	    }
+	    // count pixels which are masked with an mask bit (bad or poor)
+            if (mask->data.PS_TYPE_IMAGE_MASK_DATA[my][mx] & maskStarCore) {
+		starcoreSum += 1.;
+	    }
+	    // count pixels which are masked with an mask bit (bad or poor)
+            if (mask->data.PS_TYPE_IMAGE_MASK_DATA[my][mx] & maskGhost) {
+		ghostSum += 1.;
+	    }
+	    // count pixels which are masked with an mask bit (bad or poor)
+            if (mask->data.PS_TYPE_IMAGE_MASK_DATA[my][mx] & maskBurntool) {
+		burntoolSum += 1.;
+	    }
+	    // count pixels which are masked with an mask bit (bad or poor)
+            if (mask->data.PS_TYPE_IMAGE_MASK_DATA[my][mx] & maskConvPoor) {
+		convpoorSum += 1.;
+	    }
+        }
+    }
+    psFree (coord);
+
+    if ((spikeSum/modelSum) > 0.25) {
+	source->mode2 |= PM_SOURCE_MODE2_ON_SPIKE;
+    }
+    if ((starcoreSum/modelSum) > 0.25) {
+	source->mode2 |= PM_SOURCE_MODE2_ON_STARCORE;
+    }
+    if ((ghostSum/modelSum) > 0.25) {
+	source->mode2 |= PM_SOURCE_MODE2_ON_GHOST;
+    }
+    if ((burntoolSum/modelSum) > 0.25) {
+	source->mode2 |= PM_SOURCE_MODE2_ON_BURNTOOL;
+    }
+    if ((convpoorSum/modelSum) > 0.25) {
+	source->mode2 |= PM_SOURCE_MODE2_ON_CONVPOOR;
+    }
+
+    // Check that if the peak is on/off a ghost, glint, or diffraction spike.  In regular IPP
+    // processing, these values are only set in the image mask after the 'camera' stage
+
+    // need to access the parent if we are looking at a subimage (likely)
+    psImage *chipImage = (source->pixels == NULL) ? source->pixels : (psImage *) source->pixels->parent;
+
+    bool onChip = true;
+    onChip &= (Xo >= 0);
+    onChip &= (Xo < chipImage->numCols);
+    onChip &= (Yo >= 0);
+    onChip &= (Yo < chipImage->numRows);
+    if (!onChip) {
+	// if the source is off the edge of the chip, raise a different bit?
+	source->mode |= PM_SOURCE_MODE_OFF_CHIP;
+    } else {
+	int xMask = Xo - mask->col0;
+	int yMask = Yo - mask->row0;
+	psImageMaskType maskValue = mask->data.PS_TYPE_IMAGE_MASK_DATA[yMask][xMask];
+	if (maskValue & maskGhost) {
+	    source->mode |= PM_SOURCE_MODE_ON_GHOST;
+	}
+	pmSourceMode PM_SOURCE_MODE_ON_GLINT = PM_SOURCE_MODE_ON_GHOST;
+	if (maskValue & maskGlint) {
+	    source->mode |= PM_SOURCE_MODE_ON_GLINT;
+	}
+	if (maskValue & maskCrosstalk) {
+	    source->mode2 |= PM_SOURCE_MODE2_ON_CROSSTALK;
+	}
+	if (maskValue & maskSpike) {
+	    source->mode |= PM_SOURCE_MODE_ON_SPIKE;
+	}
     }
     return (true);
Index: /trunk/psModules/src/objects/pmSourcePhotometry.h
===================================================================
--- /trunk/psModules/src/objects/pmSourcePhotometry.h	(revision 41704)
+++ /trunk/psModules/src/objects/pmSourcePhotometry.h	(revision 41705)
@@ -77,4 +77,5 @@
 
 bool pmSourcePixelWeight (pmSource *source, pmModel *model, psImage *mask, psImageMaskType maskVal, float radius);
+bool pmSourceMaskEval (pmSource *source, psImage *mask, psImageMaskType maskVal);
 
 bool pmSourceChisq (pmModel *model, psImage *image, psImage *mask, psImage *weight, psImageMaskType maskVal);
Index: /trunk/psastro/src/Makefile.am
===================================================================
--- /trunk/psastro/src/Makefile.am	(revision 41704)
+++ /trunk/psastro/src/Makefile.am	(revision 41705)
@@ -109,5 +109,4 @@
 	psastroMosaicSetMatch.c     \
 	psastroFindChip.c           \
-	psastroFindChipGPC.c           \
 	psastroZeroPoint.c    	    \
 	psastroDemoDump.c           \
Index: /trunk/psastro/src/psastro.h
===================================================================
--- /trunk/psastro/src/psastro.h	(revision 41704)
+++ /trunk/psastro/src/psastro.h	(revision 41705)
@@ -184,9 +184,4 @@
 bool 		  psastroFPAtoChip (double *xChip, double *yChip, pmFPA *fpa, int nChip, double xFPA, double yFPA);
 
-pmChip           *psastroFindChipGPC (double *xChip, double *yChip, pmFPA *fpa, double xFPA, double yFPA);
-bool 		  psastroChipBoundsGPC (pmFPA *fpa);
-pmChip           *psastroCheckChip (double *xChip, double *yChip, pmFPA *fpa, int nChip, double xFPA, double yFPA);
-bool              psastroExtractFreeChipBoundsGPC(void);
-
 //bool              psastroMaskStats(pmConfig *config, psMetadata *stats);
 
Index: /trunk/psastro/src/psastroLoadGlints.c
===================================================================
--- /trunk/psastro/src/psastroLoadGlints.c	(revision 41704)
+++ /trunk/psastro/src/psastroLoadGlints.c	(revision 41705)
@@ -133,8 +133,8 @@
 
 	    // select stars that land in this region
-	    if (star->FP->x < glintRegion.x0) continue;
-	    if (star->FP->x > glintRegion.x1) continue;
-	    if (star->FP->y < glintRegion.y0) continue;
-	    if (star->FP->y > glintRegion.y1) continue;
+	    if (star->FP->x < glintRegion.x0) {continue;}
+	    if (star->FP->x > glintRegion.x1) {continue;}
+	    if (star->FP->y < glintRegion.y0) {continue;}
+	    if (star->FP->y > glintRegion.y1) {continue;}
 
 	    char *glintType = psMetadataLookupStr (&status, glintItem->data.md, "GLINT.TYPE");
@@ -147,5 +147,5 @@
             //glint length should depend on the brightness on image, i.e. in instrumental mag. The same instrumental mag in different filters should likely give the same glint length.
 	    double glintLength = GLINT_LENGTH_MAG_SLOPE*(GLINT_LENGTH_MAG_ZERO - (star->Mag-MagOffset));
-            double glintAngle = 0;
+            double glintAngle = 0.;
 
             //Besides brightness, the length of the glints also depends on the position of the star compared to the focal plane. But, seemingly only for stars closer than about 30k pixels
@@ -167,8 +167,8 @@
 
             //do a rudimentary check of whether the glint enters the pixel FPA
-            if (!strcasecmp(glintType, "TOP")    && ((star->FP->y - glintLength) > 20000.))  continue;
-            if (!strcasecmp(glintType, "BOTTOM") && ((star->FP->y + glintLength) < -20000.))  continue;
-            if (!strcasecmp(glintType, "LEFT")   && ((star->FP->x + glintLength) < -20000.))  continue;
-            if (!strcasecmp(glintType, "RIGHT")  && ((star->FP->x - glintLength) > 20000.))  continue;
+            if (!strcasecmp(glintType, "TOP")    && ((star->FP->y - glintLength) > 20000.))  {continue;}
+            if (!strcasecmp(glintType, "BOTTOM") && ((star->FP->y + glintLength) < -20000.))  {continue;}
+            if (!strcasecmp(glintType, "LEFT")   && ((star->FP->x + glintLength) < -20000.))  {continue;}
+            if (!strcasecmp(glintType, "RIGHT")  && ((star->FP->x - glintLength) > 20000.))  {continue;}
 
 	    if (!strcasecmp(glintType, "TOP") || !strcasecmp(glintType, "BOTTOM")) {
@@ -183,5 +183,5 @@
 		    for (int nChip = 0; nChip < fpa->chips->n; nChip++) {
  			pmChip *chip = fpa->chips->data[nChip];
- 			if (!chip) continue;
+ 			if (!chip) {continue;}
 
 		   	if (!psastroFindChipInXrange (fpa, nChip, star->FP->x, 20000.)) {
@@ -209,5 +209,5 @@
 		    for (int nChip = 0; nChip < fpa->chips->n; nChip++) {
  			pmChip *chip = fpa->chips->data[nChip];
- 			if (!chip) continue;
+ 			if (!chip) {continue;}
 
 		   	if (!psastroFindChipInXrange (fpa, nChip, star->FP->x, -20000.)) {
@@ -232,5 +232,5 @@
 		}
 
-                if(glintLength < GLINT_LENGTH_MIN_FPA) continue;
+                if(glintLength < GLINT_LENGTH_MIN_FPA) {continue;}
 
 	        x_glint->data.F32[0] = xFPA0;
@@ -245,5 +245,5 @@
 
  			pmChip *chip = fpa->chips->data[nChip];
- 			if (!chip) continue;
+ 			if (!chip) {continue;}
 
 		   	if (!psastroFindChipInXrange (fpa, nChip, x_glint->data.F32[glint_point], y_glint->data.F32[glint_point])) {
@@ -262,6 +262,6 @@
 
 		        // does this glint cross this chip?
-		        if (yFPA0 > yFPAe) continue;
-		        if (yFPA1 < yFPAs) continue;
+		        if (yFPA0 > yFPAe) {continue;}
+		        if (yFPA1 < yFPAs) {continue;}
 
 
@@ -287,12 +287,12 @@
 
 		   	// select the 0th readout of the 0th cell for this chip
-		   	if (!chip->cells) continue;
-		   	if (!chip->cells->n) continue;
+		   	if (!chip->cells) {continue;}
+		   	if (!chip->cells->n) {continue;}
 		   	pmCell *glintCell = chip->cells->data[0];
-		   	if (!glintCell) continue;
-		   	if (!glintCell->readouts) continue;
-		   	if (!glintCell->readouts->n) continue;
+		   	if (!glintCell) {continue;}
+		   	if (!glintCell->readouts) {continue;}
+		   	if (!glintCell->readouts->n) {continue;}
 		   	pmReadout *glintReadout = glintCell->readouts->data[0];
-		   	if (!glintReadout) continue;
+		   	if (!glintReadout) {continue;}
 		   	
 		   	// save the glints on the readout->analysis metadata, creating if needed
@@ -332,5 +332,5 @@
 		    for (int nChip = 0; nChip < fpa->chips->n; nChip++) {
  			pmChip *chip = fpa->chips->data[nChip];
- 			if (!chip) continue;
+ 			if (!chip) {continue;}
 
 		   	if (!psastroFindChipInXrange (fpa, nChip, 20000.,star->FP->y)) {
@@ -358,5 +358,5 @@
 		    for (int nChip = 0; nChip < fpa->chips->n; nChip++) {
  			pmChip *chip = fpa->chips->data[nChip];
- 			if (!chip) continue;
+ 			if (!chip) {continue;}
 
 		   	if (!psastroFindChipInXrange (fpa, nChip, -20000.,star->FP->y)) {
@@ -381,5 +381,5 @@
 		}
 
-                if(glintLength < GLINT_LENGTH_MIN_FPA) continue;
+                if(glintLength < GLINT_LENGTH_MIN_FPA) {continue;}
 
 	        x_glint->data.F32[0] = xFPA0;
@@ -393,5 +393,5 @@
 
  			pmChip *chip = fpa->chips->data[nChip];
- 			if (!chip) continue;
+ 			if (!chip) {continue;}
 
 		   	if (!psastroFindChipInYrange (fpa, nChip, x_glint->data.F32[glint_point], y_glint->data.F32[glint_point])) {
@@ -410,6 +410,6 @@
 
 		        // does this glint cross this chip?
-		        if (xFPA0 > xFPAe) continue;
-		        if (xFPA1 < xFPAs) continue;
+		        if (xFPA0 > xFPAe) {continue;}
+		        if (xFPA1 < xFPAs) {continue;}
 
                         //find the x-coord positions for this chip
@@ -433,12 +433,12 @@
 
 		   	// select the 0th readout of the 0th cell for this chip
-		   	if (!chip->cells) continue;
-		   	if (!chip->cells->n) continue;
+		   	if (!chip->cells) {continue;}
+		   	if (!chip->cells->n) {continue;}
 		   	pmCell *glintCell = chip->cells->data[0];
-		   	if (!glintCell) continue;
-		   	if (!glintCell->readouts) continue;
-		   	if (!glintCell->readouts->n) continue;
+		   	if (!glintCell) {continue;}
+		   	if (!glintCell->readouts) {continue;}
+		   	if (!glintCell->readouts->n) {continue;}
 		   	pmReadout *glintReadout = glintCell->readouts->data[0];
-		   	if (!glintReadout) continue;
+		   	if (!glintReadout) {continue;}
 		   	
 		   	// save the glints on the readout->analysis metadata, creating if needed
Index: /trunk/psastro/src/psastroMaskUpdates.c
===================================================================
--- /trunk/psastro/src/psastroMaskUpdates.c	(revision 41704)
+++ /trunk/psastro/src/psastroMaskUpdates.c	(revision 41705)
@@ -91,5 +91,5 @@
     psImageMaskType spikeMaskValue = pmConfigMaskGet("SPIKE", config); // Mask value for ghost pixels
     psImageMaskType starMaskValue  = pmConfigMaskGet("STARCORE", config); // Mask value for ghost pixels
-    psImageMaskType crosstalkMaskValue = pmConfigMaskGet("GHOST", config); // Mask value for crosstalk ghosts
+    psImageMaskType crosstalkMaskValue = pmConfigMaskGet("CROSSTALK", config); // Mask value for crosstalk ghosts
 
     // psImageMaskType maskBlank  = pmConfigMaskGet("BLANK", config); // Mask value for blank pixels
@@ -331,5 +331,5 @@
 		    psTrace("psastro.masks",4,"In refstar loop: %d/%ld %f %f\n",
 			    i,refstars->n,ref->Mag,REFSTAR_MASK_MAX_MAG);
-                    if (ref->Mag > REFSTAR_MASK_MAX_MAG) continue;
+                    if (ref->Mag > REFSTAR_MASK_MAX_MAG) {continue;}
 
 
Index: /trunk/psconfig/tagsets/ipp-3.1.dist
===================================================================
--- /trunk/psconfig/tagsets/ipp-3.1.dist	(revision 41704)
+++ /trunk/psconfig/tagsets/ipp-3.1.dist	(revision 41705)
@@ -66,5 +66,5 @@
   YYYYY  ippScripts             ipp-2-9          -0
   YYYYY  ippTasks               ipp-2-9          -0
-  YYYYY  ippToPsps              ipp-2-9          -0
+  YNYYY  ippToPsps              ipp-2-9          -0
           
   YYYYY  ippconfig              ipp-2-9          -0
Index: /trunk/psconfig/tagsets/ipp-3.3.dist
===================================================================
--- /trunk/psconfig/tagsets/ipp-3.3.dist	(revision 41704)
+++ /trunk/psconfig/tagsets/ipp-3.3.dist	(revision 41705)
@@ -66,5 +66,5 @@
   YYYYY  ippScripts             ipp-2-9          -0
   YYYYY  ippTasks               ipp-2-9          -0
-  YYYYY  ippToPsps              ipp-2-9          -0
+  YNYYY  ippToPsps              ipp-2-9          -0
           
   YYYYY  ippconfig              ipp-2-9          -0
Index: /trunk/psphot/src/psphotSourceSize.c
===================================================================
--- /trunk/psphot/src/psphotSourceSize.c	(revision 41704)
+++ /trunk/psphot/src/psphotSourceSize.c	(revision 41705)
@@ -26,6 +26,6 @@
 bool psphotSourceSizePSF (psphotSourceSizeOptions *options, pmReadout *readout, psArray *sources, pmPSF *psf, psMetadata *recipe);
 bool psphotDynamicLimitsCR (psphotSourceSizeOptions *options, pmReadout *readout, psArray *sources, pmPSF *psf, psMetadata *recipe);
-bool psphotSourceClass (pmReadout *readout, psArray *sources, psMetadata *recipe, pmPSF *psf, psphotSourceSizeOptions *options);
-bool psphotSourceClassRegion (psRegion *region, pmPSFClump *psfClump, psArray *sources, psMetadata *recipe, pmPSF *psf, psphotSourceSizeOptions *options);
+bool psphotSourceClass (pmReadout *readout, psArray *sources, psMetadata *recipe, pmPSF *psf, psphotSourceSizeOptions *options, pmConfig *config);
+bool psphotSourceClassRegion (psRegion *region, pmPSFClump *psfClump, psArray *sources, psMetadata *recipe, pmPSF *psf, psphotSourceSizeOptions *options, pmConfig *config);
 bool psphotSourceSelectCR (pmReadout *readout, psArray *sources, psphotSourceSizeOptions *options);
 bool psphotMaskCosmicRay (pmReadout *readout, pmSource *source, psImageMaskType maskVal, int maxWindowCR);
@@ -162,5 +162,5 @@
     // classify the sources based on ApResid and Moments
     // NOTE: only sources not already measured !(source->tmpFlags & PM_SOURCE_TMPF_SIZE_MEASURED)
-    psphotSourceClass(readout, sources, recipe, psf, &options);
+    psphotSourceClass(readout, sources, recipe, psf, &options, config);
 
     // attempt to mask the candidate CRs; flag if CR nature is confirmed
@@ -403,5 +403,5 @@
 
 // classify sources based on the combination of psf-mag, Mxx, Myy
-bool psphotSourceClass (pmReadout *readout, psArray *sources, psMetadata *recipe, pmPSF *psf, psphotSourceSizeOptions *options) {
+bool psphotSourceClass (pmReadout *readout, psArray *sources, psMetadata *recipe, pmPSF *psf, psphotSourceSizeOptions *options, pmConfig *config) {
 
     bool status;
@@ -411,5 +411,5 @@
     psLogMsg("psModules.objects", PS_LOG_INFO, "Source Size classifications: %4s %4s %4s %4s %4s", "Npsf", "Next", "Nsat", "Ncr", "Nskip");
 
-    if (!psphotSourceClassRegion (NULL, &psfClump, sources, recipe, psf, options)) {
+    if (!psphotSourceClassRegion (NULL, &psfClump, sources, recipe, psf, options, config)) {
 	psLogMsg ("psphot", 4, "Failed to determine source classification for full image\n");
     } else {
@@ -439,5 +439,5 @@
         }
 
-        if (!psphotSourceClassRegion (region, &psfClump, sources, recipe, psf, options)) {
+        if (!psphotSourceClassRegion (region, &psfClump, sources, recipe, psf, options, config)) {
             psLogMsg ("psphot", 4, "Failed to determine source classification for region %f,%f - %f,%f\n", region->x0, region->y0, region->x1, region->y1);
             continue;
@@ -450,5 +450,5 @@
 }
 
-bool psphotSourceClassRegion (psRegion *region, pmPSFClump *psfClump, psArray *sources, psMetadata *recipe, pmPSF *psf, psphotSourceSizeOptions *options) {
+bool psphotSourceClassRegion (psRegion *region, pmPSFClump *psfClump, psArray *sources, psMetadata *recipe, pmPSF *psf, psphotSourceSizeOptions *options, pmConfig *config) {
 
     PS_ASSERT_PTR_NON_NULL(sources, false);
@@ -461,6 +461,8 @@
     int Nskip = 0;
 
+    //initiallise mask values to use later on
+    pmSourceMagnitudesInit (config, recipe);
+
     pmSourceMode noMoments = PM_SOURCE_MODE_MOMENTS_FAILURE | PM_SOURCE_MODE_SKYVAR_FAILURE | PM_SOURCE_MODE_SKY_FAILURE | PM_SOURCE_MODE_BELOW_MOMENTS_SN;
-
     // request the pixWeight values as well as the magnitudes
     pmSourcePhotometryMode photMode = PM_SOURCE_PHOT_WEIGHT; 
@@ -502,4 +504,5 @@
             source->mode |= PM_SOURCE_MODE_SIZE_SKIPPED;
             psTrace("psphot", 7, "Not calculating source size since source is not subtracted\n");
+            pmSourceMaskEval (source,  source->maskObj, maskVal);
             Nskip ++;
             continue;
@@ -512,4 +515,5 @@
         psAssert (source->moments, "why is this source missing moments?");
         if (source->mode & noMoments) {
+            pmSourceMaskEval (source,  source->maskObj, maskVal);
             Nskip ++;
             continue;
Index: /trunk/pswarp/src/pswarp.h
===================================================================
--- /trunk/pswarp/src/pswarp.h	(revision 41704)
+++ /trunk/pswarp/src/pswarp.h	(revision 41705)
@@ -222,2 +222,12 @@
 bool pswarpModifyChipAstrom (pmConfig *config, pmFPAview *view, pmChip *chip, pmFPAfile *astrom, bool bilevelAstrometry, double xBin, double yBin);
 bool pswarpGetInputScales (double *xBin, double *yBin, pmConfig *config, pmFPAview *view, pmChip *chip);
+
+// ppSubMaskSetInMetadata examines named mask values and set the bits for maskValue and
+// markValue.  Ensures that the below-named mask values are set, and calculates the mask value
+// to catch all of the mask values marked as 'bad'.  Supplies the fallback name if the primary
+// name is not found, or the default values if the fallback name is not found.
+bool pswarpMaskSetInMetadata(psImageMaskType *outMaskValue, // Value of MASK.VALUE, returned
+                               psImageMaskType *outMarkValue, // Value of MARK.VALUE, returned
+                               psMetadata *source  // Source of mask bits
+  );
+
Index: /trunk/pswarp/src/pswarpTransformReadout.c
===================================================================
--- /trunk/pswarp/src/pswarpTransformReadout.c	(revision 41704)
+++ /trunk/pswarp/src/pswarpTransformReadout.c	(revision 41705)
@@ -13,4 +13,35 @@
 #include "pswarp.h"
 
+// Structure to hold the properties of a mask value
+typedef struct {
+    char *badMaskName;                  // name for "bad" (i.e., mask me please) pixels
+    char *fallbackName;                 // Fallback name in case a bad mask name is not defined
+    psImageMaskType defaultMaskValue;   // Default value in case a bad mask name and its fallback are not defined
+    bool isBad; // include this value as part of the MASK.VALUE entry (generically bad)
+} pmConfigMaskInfo;
+
+static pmConfigMaskInfo warp_convolve_masks[] = {
+    // Features of the detector
+    { "DETECTOR",  NULL,       0x01, true }, // Something is wrong with the detector
+    { "FLAT",      "DETECTOR", 0x01, true }, // Pixel doesn't flat-field properly
+    { "DARK",      "DETECTOR", 0x01, true }, // Pixel doesn't dark-subtract properly
+    { "BLANK",     "DETECTOR", 0x01, true }, // Pixel doesn't contain valid data
+    { "CTE",       "DETECTOR", 0x01, false }, // Pixel has poor CTE
+    { "BURNTOOL",  NULL,       0x04, false }, // Pixel has been touched by burntool
+    // Invalid signal ranges
+    { "SAT",       NULL,       0x02, true  }, // Pixel is saturated or non-linear
+    { "LOW",       "SAT",      0x02, true  }, // Pixel is low
+    { "SUSPECT",   NULL,       0x04, false }, // Pixel is suspected of being bad
+    // Non-astronomical structures
+    { "CR",        NULL,       0x08, true  }, // Pixel contains a cosmic ray
+    { "SPIKE",     NULL,       0x08, false  }, // Pixel contains a diffraction spike
+    { "GHOST",     NULL,       0x08, false  }, // Pixel contains an optical ghost
+    { "CROSSTALK", NULL,       0x08, false  }, // Pixel contains crosstalk data
+    { "STARCORE",  NULL,       0x08, false  }, // Pixel contains a bright star core
+    // Effects of convolution and interpolation
+    { "CONV.BAD",  NULL,       0x02, true  }, // Pixel is bad after convolution with a bad pixel
+    { "CONV.POOR", NULL,       0x04, false }, // Pixel is poor after convolution with a bad pixel
+};
+
 /**
  * NOTE: in this function, the coordinates are transformed from the OUTPUT to the INPUT
@@ -44,4 +75,15 @@
       psAssert(mdok, "MASK.INPUT was not defined");
     } 
+    else {
+      psMetadata *maskrecipe = psMetadataLookupMetadata(NULL, config->recipes, "MASKS"); // The recipe
+      if (!maskrecipe) {
+          psError(psErrorCodeLast(), false, "Unable to find MASKS recipe.");
+          return false;
+      }
+      if (!pswarpMaskSetInMetadata(&maskIn, NULL, maskrecipe)) {
+          psError(psErrorCodeLast(), false, "Unable to determine mask value.");
+          return false;
+      }
+    }
     psImageMaskType maskPoor = pmConfigMaskGet("CONV.POOR", config);
     if (!maskPoor) {
@@ -229,2 +271,69 @@
     return true;
 }
+
+bool pswarpMaskSetInMetadata(psImageMaskType *outMaskValue, // Value of MASK.VALUE, returned
+                               psImageMaskType *outMarkValue, // Value of MARK.VALUE, returned
+                               psMetadata *source  // Source of mask bits
+    )
+{
+    PS_ASSERT_METADATA_NON_NULL(source, false);
+
+    // Ensure all the bad mask names exist, and set the value to catch all bad pixels
+    psImageMaskType maskValue = 0;           // Value to mask to catch all the bad pixels
+    psImageMaskType allMasks = 0;            // Value to mask to catch all masked bits (to set MARK)
+
+    int nMasks = sizeof (warp_convolve_masks) / sizeof (pmConfigMaskInfo);
+
+    for (int i = 0; i < nMasks; i++) {
+        bool mdok;                      // Status of MD lookup
+        psImageMaskType value = psMetadataLookupImageMaskFromGeneric(&mdok, source, warp_convolve_masks[i].badMaskName); // Value of mask
+        if (!mdok) {
+            psWarning ("problem with mask value %s\n", warp_convolve_masks[i].badMaskName);
+        }
+
+        if (!value) {
+            if (warp_convolve_masks[i].fallbackName) {
+                value = psMetadataLookupImageMaskFromGeneric(&mdok, source, warp_convolve_masks[i].fallbackName);
+            }
+            if (!value) {
+                value = warp_convolve_masks[i].defaultMaskValue;
+            }
+            psMetadataAddImageMask(source, PS_LIST_TAIL, warp_convolve_masks[i].badMaskName, PS_META_REPLACE, NULL, value);
+        }
+        if (warp_convolve_masks[i].isBad) {
+            maskValue |= value;
+        }
+        allMasks |= value;
+    }
+
+    // search for an unset bit to use for MARK:
+    psImageMaskType markValue = 0x00;
+    psImageMaskType markTrial = 0x01;
+
+    int nBits = sizeof(psImageMaskType) * 8;
+    for (int i = 0; !markValue && (i < nBits); i++) {
+        if (allMasks & markTrial) {
+            markTrial <<= 1;
+        } else {
+            markValue = markTrial;
+        }
+    }
+    if (!markValue) {
+        psError (PS_ERR_UNKNOWN, true, "Unable to define the MARK bit mask: all bits taken!");
+        return false;
+    }
+
+    // update the list with the results
+    psMetadataAddImageMask(source, PS_LIST_TAIL, "MASK.VALUE", PS_META_REPLACE, NULL, maskValue);
+    psMetadataAddImageMask(source, PS_LIST_TAIL, "MARK.VALUE", PS_META_REPLACE, NULL, markValue);
+
+    if (outMaskValue) {
+        *outMaskValue = maskValue;
+    }
+    if (outMarkValue) {
+        *outMarkValue = markValue;
+    }
+
+    return true;
+}
+
