Index: /trunk/psModules/src/pmSubtractBias.c
===================================================================
--- /trunk/psModules/src/pmSubtractBias.c	(revision 2140)
+++ /trunk/psModules/src/pmSubtractBias.c	(revision 2141)
@@ -6,6 +6,6 @@
  *  @author George Gusciora, MHPCC
  *
- *  @version $Revision: 1.13 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2004-10-14 22:54:14 $
+ *  @version $Revision: 1.14 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2004-10-15 01:11:16 $
  *
  *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -45,7 +45,4 @@
 
     // XXX: Verify that this is the correct way to use offsets.
-    // XXX: Instead of performing an if-statement to determine if the mask
-    //      is non-zero, we instead always or the bias mask with the image
-    //      mask.  Might want to verify this is faster.
     for (i=0;i<(in->image)->numRows;i++) {
         for (j=0;j<(in->image)->numCols;j++) {
@@ -156,4 +153,5 @@
                               pmFit fit)
 {
+    printf("ScaleOverscanVector(%d)\n", n);
     if (NULL == overscanVector) {
         return(overscanVector);
@@ -191,5 +189,5 @@
         }
     } else {
-        // XXX: psErrorMsg()
+        psError(__func__, "unknown fit type\n");
     }
 
@@ -251,4 +249,7 @@
     }
 
+    //
+    // We subtract each overscan region from the image data.
+    //
     if (overScanAxis == PM_OVERSCAN_ALL) {
         tmpOverscan = (psListElem *) overscans->head;
@@ -276,21 +277,20 @@
 
         if (overScanAxis == PM_OVERSCAN_ROWS) {
+            // We create a row vector and subtract this vector from image.
             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);
+            tmpRow = psVectorAlloc((in->image)->numRows, PS_TYPE_F32);
 
             tmpOverscan = (psListElem *) overscans->head;
             while (tmpOverscan) {
-                myOverscanImage = (psImage *) tmpOverscan->data;
                 for (i=0;i<myOverscanImage->numCols;i++) {
                     for (j=0;j<myOverscanImage->numRows;j++) {
-                        tmpRow->data.F32[j] = myOverscanImage->data.F32[i][j];
+                        tmpRow->data.F32[j] = myOverscanImage->data.F32[j][i];
                     }
                     stat = psVectorStats(stat, tmpRow, NULL, 0);
                     p_psGetStatValue(stat, &statValue);
                     overscanVector->data.F32[i] = statValue;
-
                 }
                 // tmpOverscan = tmpOverscan->next;
@@ -298,12 +298,18 @@
             }
             psFree(tmpRow);
-            ScaleOverscanVector(overscanVector, (in->image)->numCols, fitSpec, fit);
+            if ((fit == PM_FIT_POLYNOMIAL) ||
+                    (fit == PM_FIT_SPLINE)) {
+                psVector *newVec = ScaleOverscanVector(overscanVector, (in->image)->numCols, fitSpec, fit);
+                psFree(overscanVector);
+                overscanVector = newVec;
+            }
         }
         if (overScanAxis == PM_OVERSCAN_COLUMNS) {
+            // We create a column vector and subtract this vector from image.
             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);
+            tmpCol = psVectorAlloc((in->image)->numCols, PS_TYPE_F32);
 
             tmpOverscan = (psListElem *) overscans->head;
@@ -311,7 +317,7 @@
                 for (i=0;i<myOverscanImage->numRows;i++) {
                     for (j=0;j<myOverscanImage->numCols;j++) {
-                        tmpRow->data.F32[j] = myOverscanImage->data.F32[i][j];
+                        tmpCol->data.F32[j] = myOverscanImage->data.F32[i][j];
                     }
-                    stat = psVectorStats(stat, tmpRow, NULL, 0);
+                    stat = psVectorStats(stat, tmpCol, NULL, 0);
                     p_psGetStatValue(stat, &statValue);
                     overscanVector->data.F32[i] = statValue;
@@ -321,5 +327,10 @@
             }
             psFree(tmpCol);
-            ScaleOverscanVector(overscanVector, (in->image)->numRows, fitSpec, fit);
+            if ((fit == PM_FIT_POLYNOMIAL) ||
+                    (fit == PM_FIT_SPLINE)) {
+                psVector *newVec = ScaleOverscanVector(overscanVector, (in->image)->numRows, fitSpec, fit);
+                psFree(overscanVector);
+                overscanVector = newVec;
+            }
         }
 
@@ -383,5 +394,5 @@
             for (i=0;i<(in->image)->numCols;i++) {
                 for (j=0;j<(in->image)->numRows;j++) {
-                    (in->image)->data.F32[i][j]-= overscanVector->data.F32[j/nBin];
+                    (in->image)->data.F32[j][i]-= overscanVector->data.F32[i/nBin];
                 }
             }
@@ -394,5 +405,5 @@
             for (i=0;i<(in->image)->numRows;i++) {
                 for (j=0;j<(in->image)->numCols;j++) {
-                    (in->image)->data.F32[i][j]-= overscanVector->data.F32[j/nBin];
+                    (in->image)->data.F32[i][j]-= overscanVector->data.F32[i/nBin];
                 }
             }
