Index: /trunk/ippTools/src/dettool.c
===================================================================
--- /trunk/ippTools/src/dettool.c	(revision 10215)
+++ /trunk/ippTools/src/dettool.c	(revision 10216)
@@ -3291,5 +3291,5 @@
         "   rawImfile.class_id,\n"
         "   rawImfile.uri,\n"
-        "   rawImfile.uri AS det_uri,\n"
+        "   'NULL' AS det_uri,\n"
         "   rawDetrendExp.camera\n"
         " FROM detRun\n"
@@ -3300,14 +3300,16 @@
         " JOIN rawImfile\n"
         "    ON detInputExp.exp_tag = rawImfile.exp_tag\n"
-        " LEFT JOIN detProcessedImfile\n"
-        "   ON detInputExp.det_id = detProcessedImfile.det_id\n"
-        "   AND rawImfile.exp_tag = detProcessedImfile.exp_tag\n"
-        "   AND rawImfile.class_id = detProcessedImfile.class_id\n"
+        " LEFT JOIN detResidImfile\n"
+        "   ON detRun.det_id = detResidImfile.det_id\n"
+        "   AND detRun.iteration = detResidImfile.iteration\n"
+        "   AND rawImfile.exp_tag = detResidImfile.exp_tag\n"
+        "   AND rawImfile.class_id = detResidImfile.class_id\n"
         " WHERE\n"
         "   detRun.state = 'run'\n"
         "   AND detRun.mode = 'verify'\n"
-        "   AND detProcessedImfile.det_id IS NULL\n"
-        "   AND detProcessedImfile.exp_tag IS NULL\n"
-        "   AND detProcessedImfile.class_id IS NULL\n"
+        "   AND detResidImfile.det_id IS NULL\n"
+        "   AND detResidImfile.iteration IS NULL\n"
+        "   AND detResidImfile.exp_tag IS NULL\n"
+        "   AND detResidImfile.class_id IS NULL\n"
         );
 
@@ -3441,4 +3443,5 @@
     // where det_id, iteration, class_id is not in detResidImfile
     psString query = psStringCopy(
+        " SELECT * FROM ("
         "SELECT\n"
         "   detNormalizedImfile.*\n"
@@ -3460,36 +3463,37 @@
         "  AND detResidImfile.exp_tag IS NULL\n"
         "  AND detResidImfile.class_id IS NULL\n"
-        "  %2$s"
         " UNION\n"
         " SELECT\n"
         "   detRun.det_id,\n"
         "   detRun.iteration,\n"
-        "   detProcessedImfile.class_id,\n"
-        "   detProcessedImfile.uri,\n"
-        "   detProcessedImfile.bg,\n"
-        "   detProcessedImfile.bg_stdev,\n"
-        "   detProcessedImfile.bg_mean_stdev,\n"
-        "   detProcessedImfile.b1_uri,\n"
-        "   detProcessedImfile.b2_uri\n"
+        "   rawImfile.class_id,\n"
+        "   rawImfile.uri,\n"
+        "   0.0 as bg,\n"
+        "   0.0 as bg_stdev,\n"
+        "   0.0 as bg_mean_stdev,\n"
+        "   'NULL' as b1_uri,\n"
+        "   'NULL' as b2_uri\n"
         " FROM detRun\n"
         " JOIN detInputExp\n"
-        "   USING(det_id, iteration)\n"
-        " JOIN detProcessedImfile\n"
-        "   ON detRun.det_id = detProcessedImfile.det_id\n"
-        "   AND detInputExp.exp_tag = detProcessedImfile.exp_tag\n"
+        "    USING(det_id, iteration)\n"
+        " JOIN rawDetrendExp\n"
+        "    ON detInputExp.exp_tag = rawDetrendExp.exp_tag\n"
+        " JOIN rawImfile\n"
+        "    ON detInputExp.exp_tag = rawImfile.exp_tag\n"
         " LEFT JOIN detResidImfile\n"
         "   ON detRun.det_id = detResidImfile.det_id\n"
-        "   AND detRun.iteration= detResidImfile.iteration\n"
-        "   AND detProcessedImfile.exp_tag = detResidImfile.exp_tag\n"
-        "   AND detProcessedImfile.class_id = detResidImfile.class_id\n"
+        "   AND detRun.iteration = detResidImfile.iteration\n"
+        "   AND rawImfile.exp_tag = detResidImfile.exp_tag\n"
+        "   AND rawImfile.class_id = detResidImfile.class_id\n"
         " WHERE\n"
-        "  detRun.state = 'run'\n"
-        "  AND detRun.mode= 'verify'\n"
-        "  AND detResidImfile.det_id IS NULL\n"
-        "  AND detResidImfile.iteration IS NULL\n"
-        "  AND detResidImfile.exp_tag IS NULL\n"
-        "  AND detResidImfile.class_id IS NULL\n"
-        "  AND detInputExp.exp_tag = '%1$s'\n"
-        "  %3$s"
+        "   detRun.state = 'run'\n"
+        "   AND detRun.mode = 'verify'\n"
+        "   AND detResidImfile.det_id IS NULL\n"
+        "   AND detResidImfile.iteration IS NULL\n"
+        "   AND detResidImfile.exp_tag IS NULL\n"
+        "   AND detResidImfile.class_id IS NULL\n"
+        "   AND detInputExp.exp_tag = '%1$s'\n"
+        ") AS foo\n"
+        "  %2$s"
     );
 
@@ -3512,4 +3516,5 @@
         }
     }
+
     psS32 iteration = psMetadataLookupS32(&status, config->args, "-iteration");
     if (!status) {
@@ -3526,4 +3531,5 @@
         return false;
     }
+
     psString class_id = psMetadataLookupStr(&status, config->args, "-class_id");
     if (!status) {
@@ -3542,18 +3548,13 @@
     }
 
-    psString masterClause = psDBGenerateWhereConditionSQL(where, "detNormalizedImfile");
-    psStringPrepend(&masterClause, "AND ");
-    psMetadataRemoveKey(where, "iteration");
-    psString verifyClause = psDBGenerateWhereConditionSQL(where, "detProcessedImfile");
-    psStringPrepend(&verifyClause, "AND ");
+    psString whereClause = psDBGenerateWhereSQL(where, NULL);
     psFree(where);
 
     // exp_tag is manadatory to cross check that this is a exp_tag for this
-    // detRUn
+    // detRun
     psString exp_tag = psMetadataLookupStr(&status, config->args, "-exp_tag");
     if (!status) {
         psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -exp_tag");
-        psFree(verifyClause);
-        psFree(masterClause);
+        psFree(whereClause);
         psFree(query);
         return false;
@@ -3561,19 +3562,16 @@
     if (!exp_tag) {
         psError(PS_ERR_UNKNOWN, true, "-exp_tag is required");
-        psFree(verifyClause);
-        psFree(masterClause);
+        psFree(whereClause);
         psFree(query);
         return false;
     }
 
-    if (!p_psDBRunQuery(config->dbh, query, exp_tag, masterClause, verifyClause)) {
-        psError(PS_ERR_UNKNOWN, false, "database error");
-        psFree(verifyClause);
-        psFree(masterClause);
+    if (!p_psDBRunQuery(config->dbh, query, exp_tag, whereClause)) {
+        psError(PS_ERR_UNKNOWN, false, "database error");
+        psFree(whereClause);
         psFree(query);
         return false;
     }
-    psFree(verifyClause);
-    psFree(masterClause);
+    psFree(whereClause);
     psFree(query);
 
