Index: trunk/psModules/src/pmSubtractBias.c
===================================================================
--- trunk/psModules/src/pmSubtractBias.c	(revision 1880)
+++ trunk/psModules/src/pmSubtractBias.c	(revision 1883)
@@ -8,6 +8,6 @@
  *  @author George Gusciora, MHPCC
  *
- *  @version $Revision: 1.4 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2004-09-24 21:05:00 $
+ *  @version $Revision: 1.5 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2004-09-24 22:33:17 $
  *
  *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -22,16 +22,5 @@
 #include<math.h>
 #include "pslib.h"
-
-
-//#include "pmSubtractBias.h"
-//    PM_OVERSCAN_NONE,                         ///< No overscan subtraction
-//    PM_OVERSCAN_ROWS,                         ///< Subtract rows
-//    PM_OVERSCAN_COLUMNS,                      ///< Subtract columns
-//    PM_OVERSCAN_ALL                           ///< Subtract the statistic of all pixels in overscan region
-//} pmOverScanAxis;
-//typedef enum {
-//    PM_FIT_NONE,                              ///< No fit
-//    PM_FIT_POLYNOMIAL,                        ///< Fit polynomial
-//    PM_FIT_SPLINE                             ///< Fit cubic splines
+#include "pmSubtractBias.h"
 
 #define PM_SUBTRACT_BIAS_POLYNOMIAL_ORDER 2
@@ -73,5 +62,5 @@
 // XXX: Is there already a function which does this?
 psImage *p_psImageSubtractScalar(psImage *image,
-                                 float *scalar)
+                                 float scalar)
 {
     int i;
@@ -80,5 +69,5 @@
     for (i=0;i<image->numRows;i++) {
         for (j=0;j<image->numCols;j++) {
-            image->data.F32[i][j]-= scalar;
+            (image->data.F32[i][j])-= scalar;
         }
     }
@@ -95,5 +84,5 @@
 {
     int numOptions = 0;
-    psStatsOptions opt;
+    psStatsOptions opt = 0;
 
     if (stat->options & PS_STAT_SAMPLE_MEAN) {
@@ -137,20 +126,21 @@
     }
 
+    if (numOptions == 0) {
+        // XXX: psErrorMsg()
+    }
     if (numOptions != 1) {
-\\ XXX:
-        Generate warning message.
-    }
-
+        // XXX:Generate warning message.
+    }
     return(opt);
 }
 
 // XXX: Must scale the overscan vector
-psVector *ScaleOverscanVector(overscanVector,
-                              (in->image)->numCols,
+
+psVector *ScaleOverscanVector(psVector *overscanVector,
+                              int n,
                               pmFit fit)
 {
     return(overscanVector);
 }
-
 
 psReadout *pmSubtractBias(psReadout *in,
@@ -158,5 +148,5 @@
                           const psList *overscans,
                           pmOverscanAxis overScanAxis,
-                          const psStats *stat,
+                          psStats *stat,
                           int nBin,
                           pmFit fit,
@@ -165,13 +155,15 @@
     int i;
     int j;
-    int nBin;
-    int numBins;
+    int numBins = 0;
     static psVector *overscanVector = NULL;
     psVector *tmpRow = NULL;
     psVector *tmpCol = NULL;
-    psVector *tmpMask = NULL;
     psVector *myBin = NULL;
     psVector *binVec = NULL;
-    psList *tmpOverscan = NULL;
+    psListElem *tmpOverscan = NULL;
+    double statValue;
+    psImage *myOverscanImage = NULL;
+    psPolynomial1D *myPoly;
+    psSpline1D *mySpline;
 
     if (in == NULL) {
@@ -208,5 +200,6 @@
     if (overScanAxis == PM_OVERSCAN_ALL) {
         psImageStats(stat, in->image, in->mask, 0xffffffff);
-        p_psImageSubtractScalar(in->image, stat->value);
+        p_psGetStatValue(stat, &statValue);
+        p_psImageSubtractScalar(in->image, statValue);
         return(in);
     }
@@ -215,61 +208,57 @@
     // having to copy every element in that vector?
 
-    // XXX: If we get here, do we know that overScanAxis == PM_OVERSCAN_ROW
+    // XXX: If we get here, do we know that overScanAxis == PM_OVERSCAN_ROWS
     // or PM_OVERSCAN_COL?
 
     // XXX: How to use multiple overscans?  Currently, only the first is used.
-    if ((overScanAxis == PM_OVERSCAN_ROW) || (overScanAxis == PM_OVERSCAN_COL)) {
-        myOverscanImage = (psImage *) overscans->data;
-
-        if (overScanAxis == PM_OVERSCAN_ROW) {
-            overscanVector = psVectorAlloc((myOverscanImage->image)->numCols, PS_TYPE_F32);
+    if ((overScanAxis == PM_OVERSCAN_ROWS) || (overScanAxis == PM_OVERSCAN_COLUMNS)) {
+        myOverscanImage = (psImage *) ((overscans->head)->data);
+
+        if (overScanAxis == PM_OVERSCAN_ROWS) {
+            overscanVector = psVectorAlloc(myOverscanImage->numCols, PS_TYPE_F32);
             for (i=0;i<overscanVector->n;i++) {
                 overscanVector->data.F32[i] = 0.0;
             }
             tmpRow = psVectorAlloc((in->image)->numCols, PS_TYPE_F32);
-            tmpMask = psVectorAlloc((in->image)->numCols, PS_TYPE_U8);
-
-            tmpOverscan = (psList *) overscans;
+
+            tmpOverscan = (psListElem *) overscans->head;
             while (tmpOverscan) {
                 myOverscanImage = (psImage *) tmpOverscan->data;
-                for (i=0;i<(myOverscanImage->image)->numCols;i++) {
-                    for (j=0;j<(myOverscanImage->image)->numRows;j++) {
-                        tmpRow->data.F32[j] = (myOverscanImage->image)->data.F32[i][j];
-                        tmpMask->data.U8[j] = (myOverscanImage->mask)->data.U8[i][j];
+                for (i=0;i<myOverscanImage->numCols;i++) {
+                    for (j=0;j<myOverscanImage->numRows;j++) {
+                        tmpRow->data.F32[j] = myOverscanImage->data.F32[i][j];
                     }
-                    stat = psVectorStats(stat, tmpRow, tmpMask, 0xffffffff);
-                    overscanVector->data.F32[i] = stat->value;
-                }
-                //                tmpOverscan = tmpOverscan->next;
-tmpOverscan = NULL:
-                          }
-
-                          psFree(tmpRow);
-            psFree(tmpMask);
+                    stat = psVectorStats(stat, tmpRow, NULL, 0xffffffff);
+                    p_psGetStatValue(stat, &statValue);
+                    overscanVector->data.F32[i] = statValue;
+
+                }
+                // tmpOverscan = tmpOverscan->next;
+                tmpOverscan = NULL;
+            }
+            psFree(tmpRow);
             ScaleOverscanVector(overscanVector, (in->image)->numCols, fit);
         }
-        if (overScanAxis == PM_OVERSCAN_COL) {
-            overscanVector = psVectorAlloc((myOverscanImage->image)->numRows, PS_TYPE_F32);
+        if (overScanAxis == PM_OVERSCAN_COLUMNS) {
+            overscanVector = psVectorAlloc(myOverscanImage->numRows, PS_TYPE_F32);
             for (i=0;i<overscanVector->n;i++) {
                 overscanVector->data.F32[i] = 0.0;
             }
-            tmpcol = psVectorAlloc((in->image)->numRows, PS_TYPE_F32);
-            tmpMask = psVectorAlloc((in->image)->nuRows, PS_TYPE_U8);
-
-            tmpOverscan = (psList *) overscans;
+            tmpCol = psVectorAlloc((in->image)->numRows, PS_TYPE_F32);
+
+            tmpOverscan = (psListElem *) overscans->head;
             while (tmpOverscan) {
-                for (i=0;i<(myOverscanImage->image)->numRows;i++) {
-                    for (j=0;j<(myOverscanImage->image)->numCols;j++) {
-                        tmpRow->data.F32[j] = (myOverscanImage->image)->data.F32[i][j];
-                        tmpMask->data.U8[j] = (myOverscanImage->mask)->data.U8[i][j];
+                for (i=0;i<myOverscanImage->numRows;i++) {
+                    for (j=0;j<myOverscanImage->numCols;j++) {
+                        tmpRow->data.F32[j] = myOverscanImage->data.F32[i][j];
                     }
-                    stat = psVectorStats(stat, tmpRow, tmpMask, 0xffffffff);
-                    overscanVector->data.F32[i] = stat->value;
+                    stat = psVectorStats(stat, tmpRow, NULL, 0xffffffff);
+                    p_psGetStatValue(stat, &statValue);
+                    overscanVector->data.F32[i] = statValue;
                 }
                 //                tmpOverscan = tmpOverscan->next;
-tmpOverscan = NULL:
-                          }
-                          psFree(tmpCol);
-            psFree(tmpMask);
+                tmpOverscan = NULL;
+            }
+            psFree(tmpCol);
             ScaleOverscanVector(overscanVector, (in->image)->numRows, fit);
         }
@@ -277,5 +266,5 @@
         if ((nBin > 0) && (nBin < overscanVector->n)) {
             numBins = 1+((overscanVector->n)/nBin);
-            psVector *myBin = psVectorAlloc(numBins, PS_TYPE_F32);
+            myBin = psVectorAlloc(numBins, PS_TYPE_F32);
             binVec = psVectorAlloc(nBin, PS_TYPE_F32);
 
@@ -292,5 +281,7 @@
                 }
                 stat = psVectorStats(stat, binVec, NULL, 0);
-                myBin->data.F32[i] = stat->value;
+                p_psGetStatValue(stat, &statValue);
+                myBin->data.F32[i] = statValue;
+
             }
             // Change the effective size of overscanVector.
@@ -314,10 +305,10 @@
 
             } else if (fit == PM_FIT_SPLINE) {
-                mySpline = (psSPline1D *) fitSpec;
+                mySpline = (psSpline1D *) fitSpec;
                 // XXX: What is the point of doing this?
             }
         }
 
-        if (overScanAxis == PM_OVERSCAN_ROW) {
+        if (overScanAxis == PM_OVERSCAN_ROWS) {
             for (i=0;i<(in->image)->numCols;i++) {
                 for (j=0;j<(in->image)->numRows;j++) {
@@ -327,5 +318,5 @@
         }
 
-        if (overScanAxis == PM_OVERSCAN_COLUMN) {
+        if (overScanAxis == PM_OVERSCAN_COLUMNS) {
             for (i=0;i<(in->image)->numRows;i++) {
                 for (j=0;j<(in->image)->numCols;j++) {
@@ -343,4 +334,6 @@
 
     // XXX: psErrorMsg(): Shouldn't get here?
-}
-
+    return(in);
+}
+
+
