Index: trunk/ippTools/src/dettool.c
===================================================================
--- trunk/ippTools/src/dettool.c	(revision 7371)
+++ trunk/ippTools/src/dettool.c	(revision 7372)
@@ -1237,6 +1237,6 @@
    
     // det_id is required
-    // psString det_id is unused... it is only checked for to make sure it is
-    // in config->where
+    // psString det_id is unused in the first query... it is checked for to
+    // make sure it is in config->where
     bool status = false;
     psString det_id = psMetadataLookupStr(&status, config->args, "-det_id");
@@ -1250,16 +1250,51 @@
     }
 
-    psArray *masterImfiles =
+    psArray *normalizedImfiles =
         detNormalizedImfileSelectRowObjects(config->dbh, config->where, 0);
-    if (!masterImfiles) {
+    if (!normalizedImfiles) {
         psError(PS_ERR_UNKNOWN, false, "no detNormalizedImfile rows found");
         return false;
+    }
+
+    // mask out normalized imfiles that have residuals registered for them
+    psArray *residImfiles = detResidImfileAnalysisSelectRowObjects(config->dbh,
+            config->where, 0);
+    if (!residImfiles) {
+        psError(PS_ERR_UNKNOWN, false, "no detResidImfileAnalysis rows found");
+        return false;
+    }
+
+    if (residImfiles) {
+        for (long i = 0; i < psArrayLength(normalizedImfiles); i++) {
+            for (long j = 0; j < psArrayLength(residImfiles); j++) {
+                if (
+                (((detNormalizedImfileRow *)normalizedImfiles->data[i])->det_id
+                    ==
+                ((detResidImfileAnalysisRow *)residImfiles->data[j])->det_id)
+                &&
+                (strcmp(
+                ((detProcessedImfileRow *)normalizedImfiles->data[i])->exp_id,
+                ((detResidImfileAnalysisRow *)residImfiles->data[j])->exp_id) == 0)
+                &&
+                (strcmp(
+                ((detProcessedImfileRow *)normalizedImfiles->data[i])->class_id,
+                ((detResidImfileAnalysisRow *)residImfiles->data[j])->class_id) == 0)
+                ) {
+
+                    // remove the rawImfiles from the list
+                    psArrayRemove(normalizedImfiles, normalizedImfiles->data[i]);
+                    i--;
+                    break;
+                }
+            }
+        }
+        psFree(residImfiles);
     }
 
     // print detNormalizedImfiles
     psMetadata *output = psMetadataAlloc();
-    for (long i = 0; i < psArrayLength(masterImfiles); i++) {
+    for (long i = 0; i < psArrayLength(normalizedImfiles); i++) {
         psMetadata *md = detStackedImfileMetadataFromObject(
-                masterImfiles->data[i]);
+                normalizedImfiles->data[i]);
         psMetadataAddMetadata(
             output, PS_LIST_TAIL, "detNormalizedImfile", PS_META_DUPLICATE_OK,
