Index: trunk/psModules/src/detrend/pmFringeStats.c
===================================================================
--- trunk/psModules/src/detrend/pmFringeStats.c	(revision 24912)
+++ trunk/psModules/src/detrend/pmFringeStats.c	(revision 25930)
@@ -11,4 +11,9 @@
 #include "pmFPA.h"
 #include "pmFringeStats.h"
+
+#include "psPolynomialMD.h"
+#include "psMinimizePolyFit.h"
+#include "psVector.h"
+
 
 // Future optimisations for speed:
@@ -331,6 +336,6 @@
         dfPt[i] = 1.0 / medianSd->sampleStdev;
 
-        psTrace("psModules.detrend", 7, "[%d:%d,%d:%d]: %f %f\n", (int)region.x0, (int)region.x1,
-                (int)region.y0, (int)region.y1, fPt[i], dfPt[i]);
+        psTrace("psModules.detrend", 7, "[%d:%d,%d:%d]: %f %f : %s\n", (int)region.x0, (int)region.x1,
+                (int)region.y0, (int)region.y1, fPt[i], dfPt[i], readout->parent->hdu->extname);
     }
     psFree(sky);
@@ -840,5 +845,5 @@
             }
         }
-        B->data.F64[i] = vector;
+	B->data.F64[i] = vector;
     }
 
@@ -966,4 +971,5 @@
             }
         }
+	
     }
 
@@ -988,7 +994,46 @@
                 psTrace("psModules.detrend", 9, "Masking region %d because not finite in fringe %d.\n", j, i);
             }
-        }
-    }
-
+	    else if (fabs(fringe->f->data.F32[j]) > 0.1) {
+	      mask->data.PS_TYPE_VECTOR_MASK_DATA[j] = 1;
+	      psTrace("psModules.detrend", 9, "Masking region %d because too large fringe %d.\n", j, i);
+	    }
+	    // Mask bad points in the science data as well.
+	    if ((i == 0) && (!isfinite(science->f->data.F32[j]))) {
+                mask->data.PS_TYPE_VECTOR_MASK_DATA[j] = 1;
+                psTrace("psModules.detrend", 9, "Masking region %d because not finite in science fringe %d.\n", j, i);
+	    }	      
+	    psTrace("psModules.detrend", 7, "F %f %f %f %d\n",
+		    fringe->f->data.F32[j], science->f->data.F32[j],
+		    1 / science->df->data.F32[j],(int) mask->data.PS_TYPE_VECTOR_MASK_DATA[j]);
+        }
+    }
+    
+/*     // Begin switch from old outlier removal and fitting code. */
+
+    psPolynomial1D *poly = psPolynomial1DAlloc(PS_POLYNOMIAL_ORD, 1);
+
+    pmFringeStats *fringe = fringes->data[0];
+    psVector *errors = psVectorAlloc(science->df->n,PS_TYPE_F32);
+    for (int j = 0; j < errors->n; j++) {
+      errors->data.F32[j] = 1 / science->df->data.F32[j];
+    }
+    psVectorFitPolynomial1D(poly,mask,0xff,science->f,errors,fringe->f);
+
+    for (int i = 0; i <= poly->nX; i++) {
+      scale->coeff->data.F32[i] = poly->coeff[i];
+      psTrace("psModules.detrend",7,"COEFFS: %d %g %g %g\n",i,scale->coeff->data.F32[i],poly->coeff[i],poly->coeffErr[i]);
+    }
+
+    psFree(poly);
+    //    psFree(fringe);
+    psFree(errors);
+
+    psFree(median);
+    psFree(diff);
+    return scale;
+    // End switch from old code.
+    
+
+    
 # if (0)
     // Write fringe data to file for a test
@@ -1019,5 +1064,7 @@
 	}
         scale->coeff->data.F32[0] -= median->sampleMedian;
-        scale->coeff->data.F32[i] = 0.0;
+	if (i != 0) {
+	  scale->coeff->data.F32[i] = 0.0;
+	}
     }
     psFree(median);
@@ -1051,4 +1098,5 @@
 
     return scale;
+    //# endif
 }
 
