Index: /trunk/ippTools/src/dettool.c
===================================================================
--- /trunk/ippTools/src/dettool.c	(revision 8607)
+++ /trunk/ippTools/src/dettool.c	(revision 8608)
@@ -138,5 +138,5 @@
         psFree(query);
         return false;
-    } 
+    }
     psFree(query);
 
@@ -187,5 +187,5 @@
         return false;
     }
-    
+
     // we have to support multipe exp_ids
     psMetadataItem *item = psMetadataLookup(config->args, "-exp_id");
@@ -340,5 +340,5 @@
 
 static bool mapPositionToDetRun(psArray *mds)
-{ 
+{
     PS_ASSERT_PTR_NON_NULL(mds, false);
 
@@ -734,5 +734,5 @@
         " JOIN rawDetrendExp"
         " USING(exp_id)"
-        ); 
+        );
 
     if (config->where) {
@@ -746,5 +746,5 @@
         psFree(query);
         return false;
-    } 
+    }
     psFree(query);
 
@@ -806,5 +806,5 @@
             " AND detProcessedImfile.exp_id IS NULL"
             " AND detProcessedImfile.class_id IS NULL"
-        ); 
+        );
 
     if (config->where) {
@@ -818,5 +818,5 @@
         psFree(query);
         return false;
-    } 
+    }
     psFree(query);
 
@@ -861,5 +861,5 @@
     // select exp_ids from detInputExp matching det_idp
     // where query should be pre-generated
-    psArray *detInputExp = 
+    psArray *detInputExp =
         detInputExpSelectRowObjects(config->dbh, where, 0);
     if (!detInputExp) {
@@ -1005,5 +1005,5 @@
         bg_stdev,
         bg_mean_stdev
-    );   
+    );
     psFree(rawImfiles);
 
@@ -1012,5 +1012,5 @@
         psError(PS_ERR_UNKNOWN, false, "database error");
         psFree(detRow);
-        return false; 
+        return false;
     }
 
@@ -1033,5 +1033,5 @@
     // compare to detProcessedImfiles by det_id/exp_id
     // found how many imfile there are in each class_id
-    // and: 
+    // and:
     // det_id is not in detStackedImfile;
     // iteration is not in detStackedImfile;
@@ -1068,5 +1068,5 @@
         " HAVING"
         "    COUNT(detProcessedImfile.class_id) = COUNT(rawImfile.class_id)"
-        ); 
+        );
 
     // XXX does it make sens to accept any search params?
@@ -1083,5 +1083,5 @@
         psFree(query);
         return false;
-    } 
+    }
     psFree(query);
 
@@ -1140,5 +1140,5 @@
             " JOIN detRun"
             "   ON detProcessedImfile.det_id = detRun.position"
-        ); 
+        );
     } else {
         // select detRun.det_type
@@ -1173,5 +1173,5 @@
             "       AND detInputExp.include = 1"
             "   ) as detProcessedImfile"
-        ); 
+        );
     }
 
@@ -1186,5 +1186,5 @@
         psFree(query);
         return false;
-    } 
+    }
     psFree(query);
 
@@ -1214,5 +1214,5 @@
 
     psFree(output);
-    
+
     return true;
 }
@@ -1235,9 +1235,9 @@
             }
         }
-        processedImfiles = 
+        processedImfiles =
             detProcessedImfileSelectRowObjects(config->dbh, prunedWhere, 0);
         psFree(prunedWhere);
     } else {
-        processedImfiles = 
+        processedImfiles =
             detProcessedImfileSelectRowObjects(config->dbh, NULL, 0);
     }
@@ -1367,5 +1367,5 @@
 
         psFree(rawImfiles);
-        
+
 #if 0
         {
@@ -1428,5 +1428,5 @@
                 psError(PS_ERR_UNKNOWN, false,
                     "class_id %s count mismatch - processed: %u raw: %u ",
-                    key, *pcount, *rcount 
+                    key, *pcount, *rcount
                 );
                 // iterate through processedImfiles and remove *ALL* enteries
@@ -1581,8 +1581,8 @@
         }
         psFree(rawImfiles);
-    } 
-    
+    }
+
     if (!valid_class_id) {
-        psError(PS_ERR_UNKNOWN, true, 
+        psError(PS_ERR_UNKNOWN, true,
             "class_id can not be correlated with the input exposures");
         return false;
@@ -1600,5 +1600,5 @@
             bg_mean_stdev,
             normalize
-        );   
+        );
 
     // insert the new row into the detProcessedImfile table
@@ -1606,5 +1606,5 @@
         psError(PS_ERR_UNKNOWN, false, "database error");
         psFree(stackedImfile);
-        return false; 
+        return false;
     }
 
@@ -1623,5 +1623,5 @@
 
     psString query = psStringCopy(
-        "SELECT" 
+        "SELECT"
         "   detStackedImfile.*"
         " FROM detStackedImfile"
@@ -1629,8 +1629,8 @@
         "   USING(det_id, iteration, class_id)"
         " WHERE"
-        "   detNormalizedImfile.det_id IS NULL"  
-        "   AND detNormalizedImfile.iteration IS NULL"  
-        "   AND detNormalizedImfile.class_id IS NULL"  
-        ); 
+        "   detNormalizedImfile.det_id IS NULL"
+        "   AND detNormalizedImfile.iteration IS NULL"
+        "   AND detNormalizedImfile.class_id IS NULL"
+        );
 
     if (config->where) {
@@ -1644,5 +1644,5 @@
         psFree(query);
         return false;
-    } 
+    }
     psFree(query);
 
@@ -1705,7 +1705,7 @@
     if (!valid_class_ids) {
         psError(PS_ERR_UNKNOWN, false, "no detInputExp imfile class_ids found");
-        return false; 
-    }
-    
+        return false;
+    }
+
     // check class_ids for validity
     for (long i = 0; i < psArrayLength(stackedImfiles); i++) {
@@ -1764,5 +1764,5 @@
 
     psFree(stackedImfiles);
-  
+
     return true;
 }
@@ -1779,5 +1779,5 @@
     // sort to detInputExp.imfiles to find the largest value per det_id/iter
     // compare imfiles to the number of detStackedImfiles by class_id
-    // and: 
+    // and:
     // ???
     // det_id is not in detStackedImfile;
@@ -1803,5 +1803,5 @@
         "     rawDetrendExp.exp_id"
         " HAVING MAX(rawDetrendExp.imfiles) = COUNT(detStackedImfile.class_id)"
-        ); 
+        );
 
     // XXX does it make sens to accept any search params?
@@ -1818,5 +1818,5 @@
         psFree(query);
         return false;
-    } 
+    }
     psFree(query);
 
@@ -1864,7 +1864,7 @@
         "   USING(det_id, iteration, class_id)"
         " WHERE"
-        "  detNormalizedStatImfile.det_id IS NULL" 
-        "  AND detNormalizedStatImfile.iteration IS NULL" 
-        "  AND detNormalizedStatImfile.class_id IS NULL" 
+        "  detNormalizedStatImfile.det_id IS NULL"
+        "  AND detNormalizedStatImfile.iteration IS NULL"
+        "  AND detNormalizedStatImfile.class_id IS NULL"
         );
 
@@ -1879,5 +1879,5 @@
         psFree(query);
         return false;
-    } 
+    }
     psFree(query);
 
@@ -1933,5 +1933,5 @@
 }
 
-static detNormalizedStatImfileRow *detStackedToDetNormalizedStatImfile(pxConfig *config, detStackedImfileRow *stackedImfile) 
+static detNormalizedStatImfileRow *detStackedToDetNormalizedStatImfile(pxConfig *config, detStackedImfileRow *stackedImfile)
 {
     PS_ASSERT_PTR_NON_NULL(config, NULL);
@@ -1966,5 +1966,5 @@
 
     psString query = psStringCopy(
-        "SELECT" 
+        "SELECT"
         "   detNormalizedStatImfile.*"
         " FROM detNormalizedStatImfile"
@@ -1972,8 +1972,8 @@
         "   USING(det_id, iteration, class_id)"
         " WHERE"
-        "   detNormalizedImfile.det_id IS NULL"  
-        "   AND detNormalizedImfile.iteration IS NULL"  
-        "   AND detNormalizedImfile.class_id IS NULL"  
-        ); 
+        "   detNormalizedImfile.det_id IS NULL"
+        "   AND detNormalizedImfile.iteration IS NULL"
+        "   AND detNormalizedImfile.class_id IS NULL"
+        );
 
     // XXX does it make sens to accept any search params?
@@ -1990,5 +1990,5 @@
         psFree(query);
         return false;
-    } 
+    }
     psFree(query);
 
@@ -2051,5 +2051,5 @@
             );
         }
-        valid_class_ids = psHashToArray(hash); 
+        valid_class_ids = psHashToArray(hash);
         psFree(hash);
     }
@@ -2113,5 +2113,5 @@
 {
     PS_ASSERT_PTR_NON_NULL(config, false);
- 
+
     // make sure that there is a respondoing entry in detNormalizedStatImfile
     // select * from detNormalizedStatImfile
@@ -2125,7 +2125,7 @@
         "   USING(det_id, iteration, class_id)"
         " WHERE"
-        "  detNormalizedImfile.det_id IS NULL" 
-        "  AND detNormalizedImfile.iteration IS NULL" 
-        "  AND detNormalizedImfile.class_id IS NULL" 
+        "  detNormalizedImfile.det_id IS NULL"
+        "  AND detNormalizedImfile.iteration IS NULL"
+        "  AND detNormalizedImfile.class_id IS NULL"
         );
 
@@ -2192,5 +2192,5 @@
         psFree(query);
         return false;
-    } 
+    }
     psFree(query);
 
@@ -2283,5 +2283,5 @@
 
     psString query = psStringCopy(
-        "SELECT" 
+        "SELECT"
         "   detRun.iteration,"
         "   detRun.det_type,"
@@ -2305,10 +2305,10 @@
         "   AND detProcessedImfile.class_id = detResidImfile.class_id"
         " WHERE"
-        "   detResidImfile.det_id IS NULL"  
-        "   AND detResidImfile.iteration IS NULL"  
-        "   AND detResidImfile.exp_id IS NULL"  
-        "   AND detResidImfile.class_id IS NULL"  
+        "   detResidImfile.det_id IS NULL"
+        "   AND detResidImfile.iteration IS NULL"
+        "   AND detResidImfile.exp_id IS NULL"
+        "   AND detResidImfile.class_id IS NULL"
         " UNION"
-        " SELECT" 
+        " SELECT"
         "   detRun.iteration,"
         "   detRun.det_type,"
@@ -2332,10 +2332,10 @@
         "   AND detStackedImfile.class_id = detResidImfile.class_id"
         " WHERE"
-        "   detResidImfile.det_id IS NULL"  
-        "   AND detResidImfile.iteration IS NULL"  
-        "   AND detResidImfile.exp_id IS NULL"  
-        "   AND detResidImfile.class_id IS NULL"  
+        "   detResidImfile.det_id IS NULL"
+        "   AND detResidImfile.iteration IS NULL"
+        "   AND detResidImfile.exp_id IS NULL"
+        "   AND detResidImfile.class_id IS NULL"
         "   AND detStackedImfile.normalize = 0"
-        ); 
+        );
 
     // XXX does it make sens to accept any search params?
@@ -2352,5 +2352,5 @@
         psFree(query);
         return false;
-    } 
+    }
     psFree(query);
 
@@ -2388,5 +2388,5 @@
 {
     PS_ASSERT_PTR_NON_NULL(config, false);
-   
+
     // det_id is required
     // psString det_id is unused in the first query... it is checked for to
@@ -2468,5 +2468,5 @@
 {
     PS_ASSERT_PTR_NON_NULL(config, false);
-    
+
     // XXX det_id is requried as a simplification
     bool status = false;
@@ -2493,7 +2493,7 @@
     if (!valid_class_ids) {
         psError(PS_ERR_UNKNOWN, false, "no detInputExp imfile class_ids found");
-        return false; 
-    }
- 
+        return false;
+    }
+
     // check class_ids for validity
     for (long i = 0; i < psArrayLength(masterImfiles); i++) {
@@ -2573,11 +2573,11 @@
         "   AND detNormalizedImfile.class_id = detResidImfile.class_id"
         " WHERE"
-        "  detResidImfile.det_id IS NULL" 
-        "  AND detResidImfile.iteration IS NULL" 
-        "  AND detResidImfile.exp_id IS NULL" 
-        "  AND detResidImfile.class_id IS NULL" 
-        "  AND detInputExp.exp_id = '%s'" 
+        "  detResidImfile.det_id IS NULL"
+        "  AND detResidImfile.iteration IS NULL"
+        "  AND detResidImfile.exp_id IS NULL"
+        "  AND detResidImfile.class_id IS NULL"
+        "  AND detInputExp.exp_id = '%s'"
         " UNION"
-        " SELECT" 
+        " SELECT"
         "   detStackedImfile.det_id,"
         "   detStackedImfile.iteration,"
@@ -2593,9 +2593,9 @@
         "   AND detStackedImfile.class_id = detResidImfile.class_id"
         " WHERE"
-        "   detResidImfile.det_id IS NULL"  
-        "   AND detResidImfile.iteration IS NULL"  
-        "   AND detResidImfile.exp_id IS NULL"  
-        "   AND detResidImfile.class_id IS NULL"  
-        "   AND detInputExp.exp_id = '%s'" 
+        "   detResidImfile.det_id IS NULL"
+        "   AND detResidImfile.iteration IS NULL"
+        "   AND detResidImfile.exp_id IS NULL"
+        "   AND detResidImfile.class_id IS NULL"
+        "   AND detInputExp.exp_id = '%s'"
         "   AND detStackedImfile.normalize = 0"
         " ) as detNormStackedImfile"
@@ -2675,9 +2675,9 @@
     }
 
-    if (!p_psDBRunQuery(config->dbh, query, exp_id)) {
+    if (!p_psDBRunQuery(config->dbh, query, exp_id, exp_id)) {
         psError(PS_ERR_UNKNOWN, false, "database error");
         psFree(query);
         return false;
-    } 
+    }
     psFree(query);
 
@@ -2830,5 +2830,5 @@
 
     psString query = psStringCopy(
-        "SELECT" 
+        "SELECT"
         "   detResidImfile.*"
         " FROM detResidImfile"
@@ -2836,8 +2836,8 @@
         "   USING(det_id, iteration, exp_id)"
         " WHERE"
-        "   detResidExp.det_id IS NULL"  
-        "   AND detResidExp.iteration IS NULL"  
-        "   AnD detResidExp.exp_id IS NULL"  
-        ); 
+        "   detResidExp.det_id IS NULL"
+        "   AND detResidExp.iteration IS NULL"
+        "   AnD detResidExp.exp_id IS NULL"
+        );
 
     if (config->where) {
@@ -2851,5 +2851,5 @@
         psFree(query);
         return false;
-    } 
+    }
     psFree(query);
 
@@ -2905,5 +2905,5 @@
     // find all exp_ids in the current det_id/iteration from detInputExp
     // compare to detInputExp.imfiles to derResidImfile by class_id
-    // and: 
+    // and:
     // detResidImfile.{det_id, iteration, exp_id} is not in detResidExp
 
@@ -2946,5 +2946,5 @@
         "       rawDetrendExp.imfiles = COUNT(detResidImfile.class_id)"
         " ) AS toresidexp"
-        ); 
+        );
 
     // XXX does it make sens to accept any search params?
@@ -2961,5 +2961,5 @@
         psFree(query);
         return false;
-    } 
+    }
     psFree(query);
 
@@ -3014,5 +3014,5 @@
     // find all exp_ids in the current det_id/iteration from detInputExp
     // compare to detInputExp.imfiles to derResidImfile by class_id
-    // and: 
+    // and:
     // detResidImfile.{det_id, iteration, exp_id} is not in detResidExp
 
@@ -3054,5 +3054,5 @@
         "       rawDetrendExp.imfiles = COUNT(detResidImfile.class_id)"
         " ) AS toresidexp"
-        ); 
+        );
 
     {
@@ -3118,5 +3118,5 @@
         psFree(query);
         return false;
-    } 
+    }
     psFree(query);
 
@@ -3279,5 +3279,5 @@
 {
     PS_ASSERT_PTR_NON_NULL(config, false);
- 
+
     // no options are required... use the default where statement
     psArray *residExps = detResidExpSelectRowObjects(config->dbh,
@@ -3319,5 +3319,5 @@
      * detrend type) which have completed all residexps.
      */
- 
+
     // select detRun.position
     // select detRun.iteration
@@ -3356,5 +3356,5 @@
         "       COUNT(detResidExp.exp_id) = COUNT(detInputExp.exp_id)"
         " ) AS residdetrun"
-        ); 
+        );
 
     // XXX does it make sens to accept any search params?
@@ -3371,5 +3371,5 @@
         psFree(query);
         return false;
-    } 
+    }
     psFree(query);
 
@@ -3612,5 +3612,5 @@
         "       COUNT(detResidExp.exp_id) = COUNT(detInputExp.exp_id)"
         " ) AS residdetrun"
-        ); 
+        );
 
     {
@@ -3661,5 +3661,5 @@
         psFree(query);
         return false;
-    } 
+    }
     psFree(query);
 
@@ -3818,5 +3818,5 @@
     // else
     // -again
-  
+
     // select detRun.position
     // select detRun.iteration
@@ -3852,5 +3852,5 @@
         " HAVING"
         "   COUNT(detResidExp.exp_id) = COUNT(detInputExp.exp_id)"
-        ); 
+        );
 
     if (!p_psDBRunQuery(config->dbh, query)) {
@@ -3858,5 +3858,5 @@
         psFree(query);
         return false;
-    } 
+    }
     psFree(query);
 
@@ -3912,5 +3912,5 @@
             return false;
         }
-        
+
         // detResidExp.include is used to set detInputExp.include
         if (!detInputExpInsert(
@@ -4067,5 +4067,5 @@
 {
     PS_ASSERT_PTR_NON_NULL(config, false);
- 
+
     // det_id is required
     bool status = false;
@@ -4106,5 +4106,5 @@
             }
 
-            if (!psMetadataAddStr(where, PS_LIST_TAIL, "exp_id", 
+            if (!psMetadataAddStr(where, PS_LIST_TAIL, "exp_id",
                         PS_META_DUPLICATE_OK, "==", exp_id)) {
                 psError(PS_ERR_UNKNOWN, false, "failed to add item exp_id");
@@ -4180,5 +4180,5 @@
     while ((mItem = psListGetAndIncrement(iter))) {
         detInputExpRow *inputExp = psHashLookup(valid_exp_ids,
-                (char *)mItem->data.V); 
+                (char *)mItem->data.V);
         if (!inputExp) {
             // rollback
