Index: trunk/ippTools/src/dettool_correction.c
===================================================================
--- trunk/ippTools/src/dettool_correction.c	(revision 20376)
+++ trunk/ippTools/src/dettool_correction.c	(revision 20377)
@@ -26,5 +26,11 @@
     PXOPT_LOOKUP_S64(ref_det_id, config->args, "-det_id", true, false); // required
     PXOPT_LOOKUP_S32(ref_iter, config->args, "-iteration", true, false); // required
+    PXOPT_LOOKUP_STR(det_type, config->args, "-det_type", true, false); // required
     PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false); // optional
+
+    // optional modifications
+    PXOPT_LOOKUP_STR(workdir, config->args, "-workdir", false, false);
+    PXOPT_LOOKUP_STR(reduction, config->args, "-reduction", false, false);
+    PXOPT_LOOKUP_STR(label, config->args, "-label", false, false);
 
     // build the needed where 
@@ -32,4 +38,6 @@
     psMetadataAddS64(where, PS_LIST_TAIL, "det_id", 0, "==", ref_det_id);
     psMetadataAddS32(where, PS_LIST_TAIL, "iteration", 0, "==", ref_iter);
+
+    // select the detRun that matches
     psArray *runs = detRunSelectRowObjects(config->dbh, where, 1);
     psFree (where);
@@ -46,17 +54,21 @@
         return false;
     }
+
+    char *use_workdir   = (workdir)   ? workdir   : detRun->workdir;
+    char *use_reduction = (reduction) ? reduction : detRun->reduction;
+    char *use_label     = (label)     ? label     : detRun->label;
 
     detRunInsert(config->dbh,
          0,             // det_id
          0,             // iteration
-         detRun->det_type,
+         det_type,
          "correction",  // mode
          "run",         // state
          detRun->filelevel,
-         detRun->workdir,
+         use_workdir,
          detRun->camera,
          detRun->telescope,
          detRun->exp_type,
-         detRun->reduction,
+         use_reduction,
          detRun->filter,
          detRun->airmass_min,
@@ -75,9 +87,8 @@
          detRun->solang_min,
          detRun->solang_max,
-         detRun->label,
+         use_label,
 	 detRun->det_id, // ref_det_id
 	 detRun->iteration // ref_iter
     );
-
     psFree(runs);
 
@@ -91,5 +102,5 @@
 
     psMetadata *where_new = psMetadataAlloc();
-    psMetadataAddS64(where, PS_LIST_TAIL, "det_id", 0, "==", new_det_id);
+    psMetadataAddS64(where_new, PS_LIST_TAIL, "det_id", 0, "==", new_det_id);
     psArray *detRuns = psDBSelectRows(config->dbh, "detRun", where_new, 0);
     psFree(where_new);
@@ -116,16 +127,28 @@
 }
 
-bool tocorrectexpMode(pxConfig *config)
-{
-    PS_ASSERT_PTR_NON_NULL(config, false);
+bool tocorrectimfileMode(pxConfig *config)
+{
+    PS_ASSERT_PTR_NON_NULL(config, false);
+
+    psMetadata *where = psMetadataAlloc();
+    PXOPT_COPY_S64(config->args, where, "-det_id", "det_id", "==");
+    PXOPT_COPY_STR(config->args, where, "-det_type", "det_type", "==");
 
     PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
     PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
 
-    psString query = pxDataGet("dettool_tocorrectexp.sql");
+    psString query = pxDataGet("dettool_tocorrectimfile.sql");
     if (!query) {
         psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
         return false;
     }
+
+    if (psListLength(where->list)) {
+	// NOTE the SQL uses an intermediate table 'det1' for this query
+        psString whereClause = psDBGenerateWhereConditionSQL(where, "det1"); 
+        psStringAppend(&query, " AND %s", whereClause);
+        psFree(whereClause);
+    }
+    psFree (where);
 
     // treat limit == 0 as "no limit"
@@ -155,5 +178,5 @@
 
     // negative simple so the default is true
-    if (!ippdbPrintMetadatas(stdout, output, "detRun", !simple)) {
+    if (!ippdbPrintMetadatas(stdout, output, "detPendingCorrectImfile", !simple)) {
         psError(PS_ERR_UNKNOWN, false, "failed to print array");
         psFree(output);
@@ -166,27 +189,16 @@
 }
 
-bool tocorrectimfileMode(pxConfig *config)
-{
-    PS_ASSERT_PTR_NON_NULL(config, false);
-
-    psMetadata *where = psMetadataAlloc();
-    PXOPT_COPY_STR(config->args, where, "-det_type", "det_type", "==");
+bool tocorrectexpMode(pxConfig *config)
+{
+    PS_ASSERT_PTR_NON_NULL(config, false);
 
     PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
     PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
 
-    psString query = pxDataGet("dettool_tocorrectimfile.sql");
+    psString query = pxDataGet("dettool_tocorrectexp.sql");
     if (!query) {
         psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
         return false;
     }
-
-    if (psListLength(where->list)) {
-	// NOTE the SQL uses an intermediate table 'det1' for this query
-        psString whereClause = psDBGenerateWhereConditionSQL(where, "det1"); 
-        psStringAppend(&query, " AND %s", whereClause);
-        psFree(whereClause);
-    }
-    psFree (where);
 
     // treat limit == 0 as "no limit"
@@ -216,5 +228,5 @@
 
     // negative simple so the default is true
-    if (!ippdbPrintMetadatas(stdout, output, "detPendingCorrectImfile", !simple)) {
+    if (!ippdbPrintMetadatas(stdout, output, "detRun", !simple)) {
         psError(PS_ERR_UNKNOWN, false, "failed to print array");
         psFree(output);
Index: trunk/ippTools/src/flatcorr.c
===================================================================
--- trunk/ippTools/src/flatcorr.c	(revision 20376)
+++ trunk/ippTools/src/flatcorr.c	(revision 20377)
@@ -112,6 +112,7 @@
     // across multiple cameras
     PXOPT_LOOKUP_STR(camera, config->args, "-inst", true, false);
+    PXOPT_LOOKUP_STR(det_type, config->args, "-det_type", true, false);
+
     PXOPT_LOOKUP_STR(telescope, config->args, "-telescope", false, false);
-
     PXOPT_LOOKUP_STR(workdir, config->args, "-set_workdir", false, false);
     PXOPT_LOOKUP_STR(label, config->args, "-set_label", false, false);
@@ -184,4 +185,5 @@
 	    config->dbh,
             0,      // corr_id
+	    det_type,
             dvodb,
 	    camera,
@@ -270,6 +272,7 @@
     // cameras
     PXOPT_LOOKUP_STR(camera, config->args, "-inst", true, false);
+    PXOPT_LOOKUP_STR(det_type, config->args, "-det_type", true, false);
+
     PXOPT_LOOKUP_STR(telescope, config->args, "-telescope", false, false);
-
     PXOPT_LOOKUP_STR(workdir, config->args, "-set_workdir", false, false);
     PXOPT_LOOKUP_STR(label, config->args, "-set_label", false, false);
@@ -294,4 +297,5 @@
     flatcorrRunRow *row = flatcorrRunRowAlloc(
 	0,      // corr_id
+	det_type,
 	dvodb,
 	camera,
Index: trunk/ippTools/src/flatcorrConfig.c
===================================================================
--- trunk/ippTools/src/flatcorrConfig.c	(revision 20376)
+++ trunk/ippTools/src/flatcorrConfig.c	(revision 20377)
@@ -50,4 +50,5 @@
     pxchipSetSearchArgs (definebyqueryArgs);
 
+    psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-det_type",     0,            "define detrend type to be generated", NULL);
     psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-set_workdir",  0,            "define workdir", NULL);
     psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-set_label",    0,            "define label", NULL);
@@ -64,4 +65,5 @@
     // -definerun
     psMetadata *definerunArgs = psMetadataAlloc();
+    psMetadataAddStr(definerunArgs, PS_LIST_TAIL, "-det_type",     0,            "define detrend type to be generated", NULL);
     psMetadataAddStr(definerunArgs, PS_LIST_TAIL, "-set_workdir",  0,            "define workdir", NULL);
     psMetadataAddStr(definerunArgs, PS_LIST_TAIL, "-set_label",  0,            "define label", NULL);
