Index: /branches/haf_branches/ppMerge2010/psModules/src/detrend/pmDark.c
===================================================================
--- /branches/haf_branches/ppMerge2010/psModules/src/detrend/pmDark.c	(revision 29008)
+++ /branches/haf_branches/ppMerge2010/psModules/src/detrend/pmDark.c	(revision 29009)
@@ -234,4 +234,6 @@
                 return false;
             }
+	    
+	    // }
             if (!isfinite(value)) {
                 psWarning("Unable to find acceptable value of DARK.ORDINATE %s for readout %d", ord->name, i);
@@ -249,4 +251,6 @@
             }
             val->data.F32[i] = value;
+	    //   psTrace("psModules.detrend", 4, "thing %d, order %d, DARK.ORDINATE %s, DARK.RULE %s, value %f\n", i, j, ord->name, ord->rule, value);
+           
         }
     }
@@ -255,8 +259,11 @@
         for (int i = 0; i < inputs->n; i++) {
             psVector *val = values->data[i];
+	    
             (void) val; // avoid unused variable message when tracing is compiled out
+	    fprintf(stderr, "Image %d ",i);
             for (int j = 0; j < ordinates->n; j++) {
-                psTrace("psModules.detrend", 9, "Image %d, ordinate %d: %f\n", i, j, val->data.F32[j]);
-            }
+	      fprintf(stderr," ord %d: %f", j, val->data.F32[j]);
+            }
+	    fprintf(stderr,"\n");
         }
     }
@@ -341,5 +348,5 @@
 
 // do the combine work for this portion of the output (range is set by input data)
-bool pmDarkCombine(pmCell *output, const psArray *inputs, int iter, float rej, psImageMaskType maskVal)
+bool pmDarkCombine(pmCell *output, const psArray *inputs, int iter, float rej, psImageMaskType maskVal, int useVariances)
 {
     PS_ASSERT_PTR_NON_NULL(output, false);
@@ -390,7 +397,8 @@
     psVector *pixels = psVectorAlloc(inputs->n, PS_TYPE_F32); // Stack of pixels
     psVector *mask   = psVectorAlloc(inputs->n, PS_TYPE_VECTOR_MASK); // Mask for stack
+    psVector *variance   = psVectorAlloc(inputs->n, PS_TYPE_F32); // Variance for stack
+
     for (int i = minInputRows; i < maxInputRows; i++) {
         int yOut = i - outReadout->row0; // y position on output readout
-
 #ifdef SHOW_BUSY
         if (psTraceGetLevel("psModules.detrend") > 9) {
@@ -404,4 +412,5 @@
 
             psVectorInit(mask, 0);
+            psVectorInit(variance, 0);
             for (int r = 0; r < inputs->n; r++) {
                 if (roMask->data.PS_TYPE_VECTOR_MASK_DATA[r]) {
@@ -417,15 +426,23 @@
                     pixels->data.F32[r] *= norm->data.F32[r];
                 }
-                if (readout->mask) {
-                    mask->data.PS_TYPE_VECTOR_MASK_DATA[r] = (readout->mask->data.PS_TYPE_IMAGE_MASK_DATA[yIn][xIn] & maskVal);
-                }
-
-            }
-
-            if (!psPolynomialMDClipFit(poly, pixels, NULL, mask, 0xff, values, iter, rej)) {
+		  if (readout->mask) {
+		     mask->data.PS_TYPE_VECTOR_MASK_DATA[r] = (readout->mask->data.PS_TYPE_IMAGE_MASK_DATA[yIn][xIn] & maskVal);
+		  }
+		   if (useVariances) {
+		     //fprintf (stderr, "variances xxx %f\n",readout->variance->data.F32[yIn][xIn]);
+		     variance->data.F32[r] = readout->variance->data.F32[yIn][xIn];
+
+		    //   mask->data.PS_TYPE_VECTOR_MASK_DATA[r] = (readout->variance->data.PS_TYPE_IMAGE_MASK_DATA[yIn][xIn] & maskVal);
+		  	  }
+		
+            }
+
+            if (!psPolynomialMDClipFit(poly, pixels, variance, mask, 0xff, values, iter, rej)) {
                 psErrorClear();         // Nothing we can do about it
+	       psTrace("psModules.detrend", 3, "psPolynomial didn't fit?\n");
                 psVectorInit(poly->coeff, NAN);
             }
-
+	    
+	    // fprintf(stderr, "got here\n");
             pmDarkVisualPixelFit(pixels, mask);
             pmDarkVisualPixelModel(poly, values);
@@ -434,4 +451,5 @@
                 pmReadout *ro = output->readouts->data[k]; // Readout of interest
                 ro->image->data.F32[yOut][xOut] = poly->coeff->data.F64[k];
+		//	psTrace("psModules.detrend", 9, "k %d coeff %f \n", k, poly->coeff->data.F64[k]);
             }
             counts->data.U16[yOut][xOut] = poly->numFit;
Index: /branches/haf_branches/ppMerge2010/psModules/src/detrend/pmDark.h
===================================================================
--- /branches/haf_branches/ppMerge2010/psModules/src/detrend/pmDark.h	(revision 29008)
+++ /branches/haf_branches/ppMerge2010/psModules/src/detrend/pmDark.h	(revision 29009)
@@ -38,5 +38,6 @@
                    int iter,            // Number of rejection iterations
                    float rej,           // Rejection threshold (standard deviations)
-                   psImageMaskType maskVal   // Value to mask
+                   psImageMaskType maskVal,   // Value to mask
+		   int useVariances
     );
 
