Index: trunk/ppImage/src/ppImageDetrendBias.c
===================================================================
--- trunk/ppImage/src/ppImageDetrendBias.c	(revision 5858)
+++ trunk/ppImage/src/ppImageDetrendBias.c	(revision 6064)
@@ -1,84 +1,56 @@
-# include "ppImage.h"
+#include "ppImage.h"
 
-bool ppDetrendBias (pmCell *inputCell, pmReadout *inputReadout, pmReadout *pedestal, ppOptions *options) {
+bool ppDetrendBias(pmReadout *inputReadout, pmReadout *bias, pmReadout *dark, ppOptions *options) {
 
-    psPolynomial1D *poly;
-    psSpline1D *spline;
-    psString coeffs;
 
-    // XXX EAM : renamed the general edge overscan concept
-    if (options->overscanMode == PM_OVERSCAN_EDGE) {
-	// Need to get the read direction
-	int readdir = psMetadataLookupS32(NULL, inputCell->concepts, "CELL.READDIR");
-	if (readdir == 1) {
-	    options->overscanMode = PM_OVERSCAN_ROWS;
-	} else if (readdir == 2) {
-	    options->overscanMode = PM_OVERSCAN_COLUMNS;
-	} else {
-	    psAbort("phase2", "CELL.READDIR (%d) is not 1 or 2", readdir);
-	}
+//    psMetadataPrint(inputCell->concepts, 7);
+
+    pmSubtractBias(inputReadout, options->overscan, bias, dark);
+
+    // Output overscan fit results, if required
+    if (! options->doOverscan || ! options->overscan) {
+        return true;
     }
 
-    // XXX : should this be a psArray?
-    psList *inputOverscans = NULL;
-    if (options->doOverscan) {
-	inputOverscans = pmReadoutGetBias(inputReadout); // List of overscan bias regions
+    if (!options->overscan->poly && !options->overscan->spline) {
+        psLogMsg("ppImage", PS_LOG_WARN, "No fit generated!\n");
+        return true;
     }
 
-    // supplies the fit result in 'overscanFit'
-    pmSubtractBias(inputReadout, 
-		   options->overscanFit, 
-		   inputOverscans, 
-		   options->overscanMode, 
-		   options->overscanStats, 
-		   options->overscanBins, 
-		   options->overscanFitType, 
-		   pedestal);
-    psFree(inputOverscans);
-    
-    // Output overscan fit results, if required
-    if (! options->doOverscan) { 
-	return true;
+    switch (options->overscan->fitType) {
+      case PM_FIT_POLY_ORD:
+      case PM_FIT_POLY_CHEBY:
+        {
+            psPolynomial1D *poly = options->overscan->poly; // The polynomial
+            psString coeffs = NULL;     // String containing the coefficients
+            for (int i = 0; i < poly->nX; i++) {
+                psStringAppend(&coeffs, "%e ", poly->coeff[i]);
+            }
+            psLogMsg("phase2", PS_LOG_INFO, "Overscan polynomial coefficients:\n%s\n", coeffs);
+            psFree(coeffs);
+            break;
+        }
+      case PM_FIT_SPLINE:
+        {
+            psSpline1D *spline = options->overscan->spline; // The spline
+            psString coeffs = NULL;     // String containing the coefficients
+            for (int i = 0; i < spline->n; i++) {
+                psPolynomial1D *poly = spline->spline[i]; // i-th polynomial
+                psStringAppend(&coeffs, "%d: ", i);
+                for (int j = 0; j < poly->nX; j++) {
+                    psStringAppend(&coeffs, "%e ", poly->coeff[i]);
+                }
+                psStringAppend(&coeffs, "\n");
+            }
+            psLogMsg("phase2", PS_LOG_INFO, "Overscan spline coefficients:\n%s\n", coeffs);
+            psFree(coeffs);
+            break;
+        }
+      case PM_FIT_NONE:
+        break;
+      default:
+        psAbort(__func__, "Should never get here!!!\n");
     }
 
-    if (! options->overscanFit) {
-	psLogMsg("phase2", PS_LOG_WARN, "No fit generated!\n");
-	return true;
-    } 
-
-    switch (options->overscanFitType) {
-      case PM_FIT_POLYNOMIAL:
-	poly = (psPolynomial1D *) options->overscanFit; // The polynomial
-	coeffs = NULL;     // String containing the coefficients
-	for (int i = 0; i < poly->nX; i++) {
-	    psStringAppend(&coeffs, "%e ", poly->coeff[i]);
-	}
-	psLogMsg("phase2", PS_LOG_INFO, "Overscan polynomial coefficients:\n%s\n",
-		 coeffs);
-	psFree(coeffs);
-	break;
-
-      case PM_FIT_SPLINE:
-	spline = (psSpline1D *) options->overscanFit; // The spline
-	coeffs = NULL;     // String containing the coefficients
-	for (int i = 0; i < spline->n; i++) {
-	    psPolynomial1D *poly = spline->spline[i]; // i-th polynomial
-	    psStringAppend(&coeffs, "%d: ", i);
-	    for (int j = 0; j < poly->nX; j++) {
-		psStringAppend(&coeffs, "%e ", poly->coeff[i]);
-	    }
-	    psStringAppend(&coeffs, "\n");
-	}
-	psLogMsg("phase2", PS_LOG_INFO, "Overscan spline coefficients:\n%s\n",
-		 coeffs);
-	psFree(coeffs);
-	break;
-
-      case PM_FIT_NONE:
-	break;
-
-      default:
-	psAbort(__func__, "Should never get here!!!\n");
-    }
     return true;
 }
