Index: /trunk/ippconfig/gpc1/ppImage.config
===================================================================
--- /trunk/ippconfig/gpc1/ppImage.config	(revision 36168)
+++ /trunk/ippconfig/gpc1/ppImage.config	(revision 36169)
@@ -34,5 +34,5 @@
 # aditional auxiliary mask applied to corners of all chips in video cells.
 # Is only applied if MASK.AUXMASK and USE.VIDEO.MASK are both true
-AUX.VIDEO.MASK  STR     neb://any/gpc1/auxmask/mpg.20130506/mask_video_cell_corners.fits
+AUX.VIDEO.MASK  STR     neb://any/gpc1/auxmask/mpg.20130930/mask_video_cell_corners.fits
 
 
@@ -1292,4 +1292,96 @@
   CROSSTALK.MEASURE  BOOL    FALSE           # Subtract model background?
   NO.COMPRESS        BOOL    TRUE            # turn off image compression
+    DETREND.CONSTRAINTS  METADATA
+      BIAS METADATA
+      END
+      DARK METADATA
+        EXPTIME STR FPA.EXPOSURE
+      END
+      FLAT METADATA
+        FILTER  STR FPA.FILTERID
+      END
+      FLATCORR METADATA
+        FILTER   STR FPA.FILTERID
+      END
+      FRINGE METADATA
+        FILTER   STR FPA.FILTERID
+      END
+      SHUTTER METADATA
+      END
+      MASK METADATA
+      END	
+      AUXMASK METADATA
+        DETTYPE STR AUXMASK_STS
+      END
+      ASTROM METADATA
+      END	
+      NOISEMAP METADATA
+      END	
+      LINEARITY METADATA
+      END
+    END
+END
+
+# Standard chip processing + auxiliary mask with heavy masking
+CHIP_AUXMASK_HEAVY METADATA
+  BASE.FITS          BOOL    FALSE           # Save base detrended image?
+  BASE.MASK.FITS     BOOL    FALSE           # Save base detrended image?
+  BASE.VARIANCE.FITS BOOL    FALSE           # Save base detrended image?
+  CHIP.FITS          BOOL    TRUE            # Save chip-mosaic-ed image? 
+  CHIP.MASK.FITS     BOOL    TRUE            # Save chip-mosaic-ed image? 
+  CHIP.VARIANCE.FITS BOOL    TRUE            # Save chip-mosaic-ed image? 
+  OVERSCAN           BOOL    TRUE            # Overscan subtraction
+  NONLIN             BOOL    TRUE            # apply non-linearity correction 
+  BIAS               BOOL    FALSE           # Bias subtraction
+  DARK               BOOL    TRUE            # Dark subtraction
+  NOISEMAP	     BOOL    TRUE	     
+  REMNANCE           BOOL    FALSE           # Remnance masking
+  SHUTTER            BOOL    FALSE           # Shutter correction
+  FLAT               BOOL    TRUE            # Flat-field normalisation
+  MASK               BOOL    TRUE            # Mask bad pixels
+  MASK.BUILD	     BOOL    TRUE	     # Build internal mask?
+  MASK.BURNTOOL      BOOL    TRUE            # Mask potential burntool trails
+  MASK.AUXMASK       BOOL    TRUE            # augment mask with more restrictive auxiliary mask
+  PATTERN.ROW        BOOL    TRUE            # Row pattern correction
+  PATTERN.CELL	     BOOL    FALSE	     # Cell pattern correction
+  PATTERN.CONTINUITY BOOL    TRUE            # Cell pattern correction using edge continuity
+  FRINGE             BOOL    TRUE            # Fringe subtraction
+  BIN1.FITS          BOOL    TRUE            # Save 1st binned chip image?
+  BIN2.FITS          BOOL    TRUE            # Save 2nd binned chip image?
+  PHOTOM             BOOL    TRUE            # Source identification and photometry
+  ASTROM.CHIP        BOOL    FALSE           # Astrometry per chip?
+  ASTROM.MOSAIC      BOOL    FALSE           # Astrometry for mosaic?
+  BACKGROUND         BOOL    TRUE            # Subtract background?
+  CROSSTALK.MEASURE  BOOL    FALSE           # Subtract model background?
+  NO.COMPRESS        BOOL    TRUE            # turn off image compression
+    DETREND.CONSTRAINTS  METADATA
+      BIAS METADATA
+      END
+      DARK METADATA
+        EXPTIME STR FPA.EXPOSURE
+      END
+      FLAT METADATA
+        FILTER  STR FPA.FILTERID
+      END
+      FLATCORR METADATA
+        FILTER   STR FPA.FILTERID
+      END
+      FRINGE METADATA
+        FILTER   STR FPA.FILTERID
+      END
+      SHUTTER METADATA
+      END
+      MASK METADATA
+      END	
+      AUXMASK METADATA
+        DETTYPE STR AUXMASK_HEAVY
+      END
+      ASTROM METADATA
+      END	
+      NOISEMAP METADATA
+      END	
+      LINEARITY METADATA
+      END
+    END
 END
 
@@ -1392,4 +1484,33 @@
   CROSSTALK.MEASURE  BOOL    FALSE           # Subtract model background?
   NO.COMPRESS        BOOL    TRUE            # turn off image compression
+    DETREND.CONSTRAINTS  METADATA
+      BIAS METADATA
+      END
+      DARK METADATA
+        EXPTIME STR FPA.EXPOSURE
+      END
+      FLAT METADATA
+        FILTER  STR FPA.FILTERID
+      END
+      FLATCORR METADATA
+        FILTER   STR FPA.FILTERID
+      END
+      FRINGE METADATA
+        FILTER   STR FPA.FILTERID
+      END
+      SHUTTER METADATA
+      END
+      MASK METADATA
+      END	
+      AUXMASK METADATA
+        DETTYPE STR AUXMASK_HEAVY
+      END
+      ASTROM METADATA
+      END	
+      NOISEMAP METADATA
+      END	
+      LINEARITY METADATA
+      END
+    END
 END
 
Index: /trunk/ippconfig/recipes/filerules-split.mdc
===================================================================
--- /trunk/ippconfig/recipes/filerules-split.mdc	(revision 36168)
+++ /trunk/ippconfig/recipes/filerules-split.mdc	(revision 36169)
@@ -38,4 +38,5 @@
 PPIMAGE.INPUT.MASK        INPUT    @FILES        CHIP       MASK
 PPIMAGE.VIDEOMASK         INPUT    @DETDB        CHIP       MASK
+PPIMAGE.AUXMASK           INPUT    @DETDB        CHIP       MASK
 PPIMAGE.INPUT.VARIANCE    INPUT    @FILES        CHIP       VARIANCE
 PPIMAGE.INPUT.PSF         INPUT    @FILES        CHIP       PSF
Index: /trunk/ippconfig/recipes/ppImage.config
===================================================================
--- /trunk/ippconfig/recipes/ppImage.config	(revision 36168)
+++ /trunk/ippconfig/recipes/ppImage.config	(revision 36169)
@@ -220,6 +220,31 @@
 END
 
-# Standard chip processing
+# Standard chip processing with auxillary masking
 CHIP_AUXMASK	METADATA
+  BASE.FITS          BOOL    FALSE           # Save base detrended image?
+  BASE.MASK.FITS     BOOL    FALSE           # Save base detrended image?
+  BASE.VARIANCE.FITS BOOL    FALSE           # Save base detrended image?
+  CHIP.FITS          BOOL    TRUE            # Save chip-mosaic-ed image? 
+  CHIP.MASK.FITS     BOOL    TRUE            # Save chip-mosaic-ed image? 
+  CHIP.VARIANCE.FITS BOOL    TRUE            # Save chip-mosaic-ed image? 
+  OVERSCAN           BOOL    TRUE            # Overscan subtraction
+  NONLIN             BOOL    FALSE           # Non-linearity correction; not implemented
+  BIAS               BOOL    TRUE            # Bias subtraction
+  DARK               BOOL    TRUE            # Dark subtraction
+  SHUTTER            BOOL    FALSE           # Shutter correction
+  FLAT               BOOL    TRUE            # Flat-field normalisation
+  MASK               BOOL    TRUE            # Mask bad pixels
+  FRINGE             BOOL    TRUE            # Fringe subtraction
+  BIN1.FITS          BOOL    TRUE            # Save 1st binned chip image?
+  BIN2.FITS          BOOL    TRUE            # Save 2nd binned chip image?
+  PHOTOM             BOOL    TRUE            # Source identification and photometry
+  ASTROM.CHIP        BOOL    FALSE           # Astrometry per chip?
+  ASTROM.MOSAIC      BOOL    FALSE           # Astrometry for mosaic?
+  BACKGROUND         BOOL    TRUE            # Subtract background?
+  MASK.STATS         BOOL    TRUE            # Calculate Mask statistics.
+END
+
+# Standard chip processing with heavy auxillary masking (same as CHIP_AUXMASK here, but different in gpc1)
+CHIP_AUXMASK_HEAVY	METADATA
   BASE.FITS          BOOL    FALSE           # Save base detrended image?
   BASE.MASK.FITS     BOOL    FALSE           # Save base detrended image?
Index: /trunk/ippconfig/recipes/reductionClasses.mdc
===================================================================
--- /trunk/ippconfig/recipes/reductionClasses.mdc	(revision 36168)
+++ /trunk/ippconfig/recipes/reductionClasses.mdc	(revision 36169)
@@ -1126,12 +1126,10 @@
 
 STS_DATASET METADATA
-   # CHIP_PPIMAGE STR CHIP_AUXMASK
-   # MPG wants auxiliary masking off for now
-   CHIP_PPIMAGE STR CHIP
+   CHIP_PPIMAGE STR CHIP_AUXMASK
    CHIP_PSPHOT STR CHIP
    WARP_PSWARP STR WARP
-   STACK_PPSTACK   STR STACK
+   STACK_PPSTACK STR STACK
    STACK_PPSUB STR STACK
-   STACK_PSPHOT    STR STACK
+   STACK_PSPHOT STR STACK
    DIFF_PPSUB  STR DIFF
    DIFF_PSPHOT STR DIFF
@@ -1140,6 +1138,6 @@
    FAKEPHOT    STR FAKEPHOT
    ADDSTAR     STR ADDSTAR
-   PSASTRO    STR STS_DATASET
-   STACKPHOT       STR     STACKPHOT
+   PSASTRO     STR STS_DATASET
+   STACKPHOT   STR STACKPHOT
 END
 
Index: /trunk/ppImage/src/ppImageAuxiliaryMask.c
===================================================================
--- /trunk/ppImage/src/ppImageAuxiliaryMask.c	(revision 36168)
+++ /trunk/ppImage/src/ppImageAuxiliaryMask.c	(revision 36169)
@@ -35,4 +35,8 @@
         return NULL;
     }
+    if (image->type.type != PS_TYPE_IMAGE_MASK) {
+        psWarning("auxiliary mask image %s has unexpected type %d\n", realName, image->type.type);
+        return false;
+    }
     psFree(realName);
 
@@ -72,27 +76,10 @@
     }
 
-    // Find a suitable detRun with type AUXMASK
-
-    psTime *time = psMetadataLookupPtr(NULL, input->fpa->concepts, "FPA.TIME");
-    if (time->sec == 0 && time->nsec == 0) {
-        psLogMsg ("psModules.camera", PS_LOG_WARN, "FPA.TIME has not been set.\n");
-    }
-
-    char *cameraName = psMetadataLookupStr(NULL, input->fpa->concepts, "FPA.CAMERA");
-    pmDetrendSelectOptions *detrendOptions = pmDetrendSelectOptionsAlloc(cameraName, *time, PM_DETREND_TYPE_AUXMASK);
-
-    pmDetrendSelectResults *results = pmDetrendSelect(detrendOptions, config);
-    psFree(detrendOptions);
-    if (!results) {
-        psError (psErrorCodeLast(), false, "no matching auxiliary mask found");
-        return false;
-    }
-
-    pmFPALevel fileLevel = pmFPALevelFromName(results->level);
-    if (fileLevel != PM_FPA_LEVEL_CHIP) {
-         psError (PM_ERR_CONFIG, false, "invalid file level %d for selected auxiliary mask", fileLevel);
-         return false;
-    }
-    
+    pmFPAfile *auxmask = psMetadataLookupPtr(&status, config->files, "PPIMAGE.AUXMASK");
+    if (!status) {
+        psError(PS_ERR_UNEXPECTED_NULL, true, "PPIMAGE.CHIP file is not defined");
+        return false;
+    }
+
     // Go find the readout
     // code to find the readouts was adapted from ppImageSubtractBackground
@@ -129,31 +116,38 @@
         return true;
     }
-    // not needed psImage *image = ro->image;
+
     psImage *mask = ro->mask;
 
-    // now read the auxiliary mask file
-    psString class_id = psMetadataLookupStr(NULL, chip->concepts, "CHIP.NAME");
-
-    char *auxMaskFileName = pmDetrendFile(results->detID, class_id, config);
-    if (!auxMaskFileName) {
-         psError (PM_ERR_CONFIG, false, "unable to find auxiliary mask file name for %s %s", results->detID, class_id);
-         return false;
-    }
-    psLogMsg ("ppImage", PS_LOG_INFO, "Auxiliary mask file: %s", auxMaskFileName);
-
-    psFree(results);
-    // record that we read this file in the config dump file.
-    // Note: this value isn't used during updates though.
-    pmConfigRunFilenameAddRead(config, "PPIMAGE.AUXMASK", auxMaskFileName);
-    recordFileInHeader(chip, "DETREND.AUXMASK", "auxiliary mask", auxMaskFileName);
-
-    psImage *auxMask = readAuxiliaryMask(config, auxMaskFileName);
-    psFree(auxMaskFileName);
-    if (!auxMask) {
-        psError(PS_ERR_UNKNOWN, false, "failed to read auxiliary mask file");
-        return false;
-    }
-
-    // if the cell has video and the recipe value
+    if (mask->type.type != PS_TYPE_IMAGE_MASK) {
+        psWarning("mask image has unexpected type %d\n", mask->type.type);
+        return false;
+    }
+
+    pmChip *auxMaskChip = pmFPAviewThisChip(view, auxmask->fpa);
+    if (!auxMaskChip) {
+        psWarning("failed to find pmChip for auxiliary mask");
+        return false;
+    }
+    pmCell *auxMaskCell = auxMaskChip->cells->data[0];
+    if (!auxMaskCell) {
+        psWarning("failed to find pmCell for auxiliary mask");
+        return false;
+    }
+    pmReadout *auxMaskReadout = auxMaskCell->readouts->data[0];
+    if (!auxMaskReadout) {
+        psWarning("failed to find pmReadout for auxiliary mask");
+        return false;
+    }
+    psImage *auxMaskImage = auxMaskReadout->mask;
+    if (!auxMaskImage) {
+        psWarning("failed to find psImage for auxiliary mask");
+        return false;
+    }
+    if (auxMaskImage->type.type != PS_TYPE_IMAGE_MASK) {
+        psWarning("auxiliary mask image has unexpected type %d\n", auxMaskImage->type.type);
+        return false;
+    }
+
+    // if the cell has video and the recipe value is set or in the video mask
     if (options->hasVideo && options->auxVideoMask && strcmp(options->auxVideoMask, "NULL")) {
         psImage *videoMask = readAuxiliaryMask(config, options->auxVideoMask);
@@ -166,7 +160,7 @@
         recordFileInHeader(chip, "DETREND.AUXVIDEOMASK", "auxiliary video mask", options->auxVideoMask);
 
-        // compute auxMask *= videoMask
-        if (!psBinaryOp(auxMask, auxMask, "*", videoMask)) {
-            psError(PS_ERR_UNKNOWN, false, "mulitplication of auxiliary mask and auxiliary video mask failed");
+        // compute auxMask |= videoMask
+        if (!psBinaryOp(auxMaskImage, auxMaskImage, "|", videoMask)) {
+            psError(PS_ERR_UNKNOWN, false, "combination of auxiliary mask and auxiliary video mask failed");
             return false;
         }
@@ -174,6 +168,6 @@
     }
 
-    if ((mask->numRows != auxMask->numRows) || (mask->numCols != auxMask->numCols) ||
-        (mask->row0 != auxMask->row0) || (mask->col0 != auxMask->col0)) {
+    if ((mask->numRows != auxMaskImage->numRows) || (mask->numCols != auxMaskImage->numCols) ||
+        (mask->row0 != auxMaskImage->row0) || (mask->col0 != auxMaskImage->col0)) {
         psError(PS_ERR_IO, false, "structure of auxiliary mask does not match this chip");
         return false;
@@ -187,11 +181,12 @@
     psAssert(staticMaskVal, "Need staticMaskVal!");
 
+    // XXX: now that we are using an auxilary mask that matches the format of ps masks, we could just
+    // do psBinaryOp(mask, mask, "|", auxMaskImage) but run an explicit loop so that we can measure
+    // and log the number of additional pixels masked
     int numCols = mask->numCols, numRows = mask->numRows; // Size of image
     unsigned long numMasked = 0;
     for (int y = 0; y < numRows; y++) {
         for (int x = 0; x < numCols; x++) {
-            // auxMask is floating point type image with pixel value 0 meaning mask it
-            // XXX: support other types and get the mask value from the header
-            if (auxMask->data.F32[y][x] == 0) {
+            if (auxMaskImage->data.U16[y][x] != 0) {
                 if ((mask->data.PS_TYPE_IMAGE_MASK_DATA[y][x] & staticMaskVal) == 0) {
                     // pixel was not previously included in the static mask so mask it
@@ -200,6 +195,6 @@
                 }
                 // I don't need to do this.
+                // image->data.F32[y][x] = 0.0;
                 // The background subtraction code runs after us and will do it there
-                // image->data.F32[y][x] = 0.0;
 	    }
         }
@@ -213,6 +208,4 @@
     }
 
-    psFree(auxMask);
-
     return true;
 }
Index: /trunk/ppImage/src/ppImageParseCamera.c
===================================================================
--- /trunk/ppImage/src/ppImageParseCamera.c	(revision 36168)
+++ /trunk/ppImage/src/ppImageParseCamera.c	(revision 36169)
@@ -72,4 +72,12 @@
                                PM_FPA_FILE_MASK, PM_DETREND_TYPE_VIDEOMASK)) {
             psError(PS_ERR_IO, false, "Can't find a mask image source");
+            psFree(options);
+            return NULL;
+        }
+      }
+      if (options->doAuxMask) {
+	if (!ppImageDefineFile(config, input->fpa, "PPIMAGE.AUXMASK", "MASK",
+                               PM_FPA_FILE_MASK, PM_DETREND_TYPE_AUXMASK)) {
+            psError(PS_ERR_IO, false, "Can't find a auxillary mask image source");
             psFree(options);
             return NULL;
