Index: /trunk/psModules/src/imcombine/pmStackReject.c
===================================================================
--- /trunk/psModules/src/imcombine/pmStackReject.c	(revision 20504)
+++ /trunk/psModules/src/imcombine/pmStackReject.c	(revision 20505)
@@ -168,5 +168,6 @@
         psRegion *region = subRegions->data[i]; // Region of interest
         pmSubtractionKernels *kernels = subKernels->data[i]; // Kernel of interest
-        if (!pmSubtractionConvolve(convRO, NULL, inRO, NULL, NULL, 0, 0, 1.0, region, kernels, false, true)) {
+        if (!pmSubtractionConvolve(convRO, NULL, inRO, NULL, NULL, 0, 0, 1.0, NAN,
+                                   region, kernels, false, true)) {
             psError(PS_ERR_UNKNOWN, false, "Unable to convolve mask image in region %d.", i);
             psFree(convRO);
Index: /trunk/psModules/src/imcombine/pmSubtraction.c
===================================================================
--- /trunk/psModules/src/imcombine/pmSubtraction.c	(revision 20504)
+++ /trunk/psModules/src/imcombine/pmSubtraction.c	(revision 20505)
@@ -29,6 +29,4 @@
 #define PIXEL_LIST_BUFFER 100           // Number of entries to add to pixel list at a time
 #define MIN_SAMPLE_STATS    7           // Minimum number to use sample statistics; otherwise use quartiles
-
-//#define SYS_ERROR 0.00                  // Relative error in derived convolution kernel pixels
 
 //////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -459,21 +457,23 @@
 
 // Generate an image that can be used to track systematic errors
-static psImage *subtractionSysErrImage(const psImage *image     // Image from which to make sys err image
+static psImage *subtractionSysErrImage(const psImage *image, // Image from which to make sys err image
+                                       float sysError // Relative systematic error
                                        )
 {
-#ifndef SYS_ERROR
-    return NULL;
-#else
+    if (!isfinite(sysError) || sysError == 0.0) {
+        return NULL;
+    }
+
     int numCols = image->numCols, numRows = image->numRows; // Size of image
     psImage *sys = psImageAlloc(numCols, numRows, PS_TYPE_F32); // Systematic error image
 
+    float sysError2 = PS_SQR(sysError); // Square of the systematic error
     for (int y = 0; y < numRows; y++) {
         for (int x = 0; x < numCols; x++) {
-            sys->data.F32[y][x] = PS_SQR(image->data.F32[y][x]) * PS_SQR(SYS_ERROR);
+            sys->data.F32[y][x] = PS_SQR(image->data.F32[y][x]) * sysError2;
         }
     }
 
     return sys;
-#endif
 }
 
@@ -1089,5 +1089,5 @@
 bool pmSubtractionConvolve(pmReadout *out1, pmReadout *out2, const pmReadout *ro1, const pmReadout *ro2,
                            psImage *subMask, psMaskType maskBad, psMaskType maskPoor, float poorFrac,
-                           const psRegion *region, const pmSubtractionKernels *kernels,
+                           float sysError, const psRegion *region, const pmSubtractionKernels *kernels,
                            bool doBG, bool useFFT)
 {
@@ -1197,5 +1197,5 @@
     psImage *sys1 = NULL, *sys2 = NULL; // Systematic error images
     if (kernels->mode == PM_SUBTRACTION_MODE_1 || kernels->mode == PM_SUBTRACTION_MODE_DUAL) {
-        sys1 = subtractionSysErrImage(ro1->image);
+        sys1 = subtractionSysErrImage(ro1->image, sysError);
         if (threaded && sys1) {
             psMutexInit(sys1);
@@ -1203,5 +1203,5 @@
     }
     if (kernels->mode == PM_SUBTRACTION_MODE_2 || kernels->mode == PM_SUBTRACTION_MODE_DUAL) {
-        sys2 = subtractionSysErrImage(ro2->image);
+        sys2 = subtractionSysErrImage(ro2->image, sysError);
         if (threaded && sys2) {
             psMutexInit(sys2);
Index: /trunk/psModules/src/imcombine/pmSubtraction.h
===================================================================
--- /trunk/psModules/src/imcombine/pmSubtraction.h	(revision 20504)
+++ /trunk/psModules/src/imcombine/pmSubtraction.h	(revision 20505)
@@ -6,6 +6,6 @@
  * @author GLG, MHPCC
  *
- * @version $Revision: 1.32 $ $Name: not supported by cvs2svn $
- * @date $Date: 2008-09-12 04:12:42 $
+ * @version $Revision: 1.33 $ $Name: not supported by cvs2svn $
+ * @date $Date: 2008-11-01 03:36:01 $
  * Copyright 2004-207 Institute for Astronomy, University of Hawaii
  */
@@ -106,4 +106,5 @@
                            psMaskType maskPoor, ///< Mask value to give poor pixels
                            float poorFrac, ///< Fraction for "poor"
+                           float sysError, ///< Relative systematic error
                            const psRegion *region, ///< Region to convolve (or NULL)
                            const pmSubtractionKernels *kernels, ///< Kernel parameters
Index: /trunk/psModules/src/imcombine/pmSubtractionMatch.c
===================================================================
--- /trunk/psModules/src/imcombine/pmSubtractionMatch.c	(revision 20504)
+++ /trunk/psModules/src/imcombine/pmSubtractionMatch.c	(revision 20505)
@@ -98,6 +98,6 @@
                         int inner, int ringsOrder, int binning, float penalty,
                         bool optimum, const psVector *optFWHMs, int optOrder, float optThreshold,
-                        int iter, float rej, psMaskType maskVal, psMaskType maskBad, psMaskType maskPoor,
-                        float poorFrac, float badFrac, pmSubtractionMode subMode)
+                        int iter, float rej, float sysError, psMaskType maskVal, psMaskType maskBad,
+                        psMaskType maskPoor, float poorFrac, float badFrac, pmSubtractionMode subMode)
 {
     if (subMode != PM_SUBTRACTION_MODE_2) {
@@ -167,4 +167,8 @@
     PS_ASSERT_INT_POSITIVE(iter, false);
     PS_ASSERT_FLOAT_LARGER_THAN(rej, 0.0, false);
+    if (isfinite(sysError)) {
+        PS_ASSERT_FLOAT_LARGER_THAN_OR_EQUAL(sysError, 0.0, NULL);
+        PS_ASSERT_FLOAT_LESS_THAN(sysError, 1.0, NULL);
+    }
     // Don't care about maskVal
     // Don't care about maskBad
@@ -393,5 +397,5 @@
             psTrace("psModules.imcombine", 2, "Convolving...\n");
             if (!pmSubtractionConvolve(conv1, conv2, ro1, ro2, subMask, maskBad, maskPoor, poorFrac,
-                                       region, kernels, true, useFFT)) {
+                                       sysError, region, kernels, true, useFFT)) {
                 psError(PS_ERR_UNKNOWN, false, "Unable to convolve image.");
                 goto MATCH_ERROR;
Index: /trunk/psModules/src/imcombine/pmSubtractionMatch.h
===================================================================
--- /trunk/psModules/src/imcombine/pmSubtractionMatch.h	(revision 20504)
+++ /trunk/psModules/src/imcombine/pmSubtractionMatch.h	(revision 20505)
@@ -38,4 +38,5 @@
                         int iter,       ///< Rejection iterations
                         float rej,      ///< Rejection threshold
+                        float sysError, ///< Relative systematic error
                         psMaskType maskVal, ///< Value to mask for input
                         psMaskType maskBad, ///< Mask for output bad pixels
