Index: trunk/ippTools/src/dettool.c
===================================================================
--- trunk/ippTools/src/dettool.c	(revision 7240)
+++ trunk/ippTools/src/dettool.c	(revision 7243)
@@ -361,64 +361,67 @@
     }
 
-    // remove detStackedImfiles
-    // detStackedImfiles doesn't have an exp_id so we have to generate the
-    // where query ourselves
+    // remove detStackedImfiles unless -unmask
     bool status = false;
-    psString det_id = psMetadataLookupStr(&status, config->args, "-det_id");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -det_id");
-        return false;
-    }
-    psString class_id = psMetadataLookupStr(&status, config->args, "-class_id");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -class_id");
-        return false;
-    }
-    psMetadata *where = psMetadataAlloc();
-    if (det_id) {
-        if (!psMetadataAddS32(where, PS_LIST_TAIL, "det_id", 0, "==",
-                (psS32)atoi(det_id))) {
-            psError(PS_ERR_UNKNOWN, false, "failed to add item exp_id");
-            psFree(where);
+    if (!psMetadataLookupBool(&status, config->args, "-unmask")) {
+        // detStackedImfiles doesn't have an exp_id so we have to generate the
+        // where query ourselves
+        bool status = false;
+        psString det_id = psMetadataLookupStr(&status, config->args, "-det_id");
+        if (!status) {
+            psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -det_id");
             return false;
         }
-    }
-    if (class_id) {
-        if (!psMetadataAddStr(where, PS_LIST_TAIL, "class_id", 0, "==", class_id)) {
-            psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
-            psFree(where);
+        psString class_id = psMetadataLookupStr(&status, config->args, "-class_id");
+        if (!status) {
+            psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -class_id");
             return false;
         }
-    }
-
-    psArray *stackedImfiles = NULL;
-    if (where->list->n) {
-        stackedImfiles = detStackedImfileSelectRowObjects(
-            config->dbh, where, 0);
-    } else {
-        stackedImfiles = detStackedImfileSelectRowObjects(
-            config->dbh, NULL, 0);
-    }
-    psFree(where);
-    // XXX trace the not found case
-    if (stackedImfiles) {
-        for (long i = 0; i < psArrayLength(processedImfiles); i++) {
-            for (long j = 0; j < psArrayLength(stackedImfiles); j++) {
-                if ((
-                ((detProcessedImfileRow *)processedImfiles->data[i])->det_id
-                ==
-                ((detStackedImfileRow *)stackedImfiles->data[j])->det_id
-                ) && (strcmp(
-                ((detProcessedImfileRow *)processedImfiles->data[i])->class_id,
-                ((detStackedImfileRow *)stackedImfiles->data[j])->class_id)
-                == 0)) {
-                    // remove the rawImfiles from the list
-                    psArrayRemove(processedImfiles, processedImfiles->data[i]);
-                    i--;
-                    break;
+        psMetadata *where = psMetadataAlloc();
+        if (det_id) {
+            if (!psMetadataAddS32(where, PS_LIST_TAIL, "det_id", 0, "==",
+                    (psS32)atoi(det_id))) {
+                psError(PS_ERR_UNKNOWN, false, "failed to add item exp_id");
+                psFree(where);
+                return false;
+            }
+        }
+        if (class_id) {
+            if (!psMetadataAddStr(where, PS_LIST_TAIL, "class_id", 0, "==", class_id)) {
+                psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
+                psFree(where);
+                return false;
+            }
+        }
+
+        psArray *stackedImfiles = NULL;
+        if (where->list->n) {
+            stackedImfiles = detStackedImfileSelectRowObjects(
+                config->dbh, where, 0);
+        } else {
+            stackedImfiles = detStackedImfileSelectRowObjects(
+                config->dbh, NULL, 0);
+        }
+        psFree(where);
+        // XXX trace the not found case
+        if (stackedImfiles) {
+            for (long i = 0; i < psArrayLength(processedImfiles); i++) {
+                for (long j = 0; j < psArrayLength(stackedImfiles); j++) {
+                    if ((
+                    ((detProcessedImfileRow *)processedImfiles->data[i])->det_id
+                    ==
+                    ((detStackedImfileRow *)stackedImfiles->data[j])->det_id
+                    ) && (strcmp(
+                    ((detProcessedImfileRow *)processedImfiles->data[i])->class_id,
+                    ((detStackedImfileRow *)stackedImfiles->data[j])->class_id)
+                    == 0)) {
+                        // remove the rawImfiles from the list
+                        psArrayRemove(processedImfiles, processedImfiles->data[i]);
+                        i--;
+                        break;
+                    }
                 }
             }
-        }
-        psFree(stackedImfiles);
+            psFree(stackedImfiles);
+        }
     }
 
@@ -428,4 +431,11 @@
     // don't have to do this check unless we have to.
     if (psMetadataLookupBool(&status, config->args, "-chip")) {
+        // lookup det_id
+        bool status = false;
+        psString det_id = psMetadataLookupStr(&status, config->args, "-det_id");
+        if (!status) {
+            psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -det_id");
+            return false;
+        }
         // get a count of raw imfiles per class_id
         psArray *rawImfiles = searchInputImfiles(config, det_id);
