Index: trunk/ippTools/src/dettool.c
===================================================================
--- trunk/ippTools/src/dettool.c	(revision 19092)
+++ trunk/ippTools/src/dettool.c	(revision 19621)
@@ -234,10 +234,24 @@
     // optional
     PXOPT_LOOKUP_STR(filelevel, config->args, "-filelevel", false, false);
-    PXOPT_LOOKUP_STR(mode, config->args, "-mode", false, false);
+
     // check mode
-    if (mode && !isValidMode(config, mode)) {
-        psError(PS_ERR_UNKNOWN, false, "invalud mode");
-        return false;
-    }
+    PXOPT_LOOKUP_STR(mode, config->args, "-mode", true, false); // default ('master') is supplied
+    if (!isValidMode(config, mode)) {
+        psError(PS_ERR_UNKNOWN, false, "invalid mode");
+        return false;
+    }
+
+    // get -ref_det_id and -ref_iter : required for 'verify' mode / disallowed otherwise
+    PXOPT_LOOKUP_S64(ref_det_id, config->args, "-ref_det_id", true, false);
+    PXOPT_LOOKUP_S32(ref_iter, config->args, "-ref_iter", true, false);
+    if (!strncmp(mode, "verify", 7) && ((ref_det_id == 0) || (ref_iter == -1))) {
+        psError(PS_ERR_UNKNOWN, false, "verify mode requires both -ref_det_id and -ref_iter");
+        return false;
+    } 
+    if (strncmp(mode, "verify", 7) && ((ref_det_id != 0) || (ref_iter != -1))) {
+        psError(PS_ERR_UNKNOWN, false, "master mode cannot have -ref_det_id or -ref_iter set");
+        return false;
+    } 
+	
     PXOPT_LOOKUP_STR(camera, config->args, "-inst", false, false);
     PXOPT_LOOKUP_STR(telescope, config->args, "-telescope", false, false);
@@ -368,5 +382,6 @@
                  solang_max,
                  label,
-                 0       // parent
+                 ref_det_id,
+                 ref_iter
         );
     psS64 det_id = psDBLastInsertID(config->dbh);
@@ -469,11 +484,23 @@
     PXOPT_LOOKUP_STR(camera, config->args, "-inst", true, false);
 
-    // optional
-    PXOPT_LOOKUP_STR(mode, config->args, "-mode", false, false);
     // check mode
-    if (mode && !isValidMode(config, mode)) {
+    PXOPT_LOOKUP_STR(mode, config->args, "-mode", true, false); // default ('master') is supplied
+    if (!isValidMode(config, mode)) {
         psError(PS_ERR_UNKNOWN, false, "invalid mode");
         return false;
     }
+
+    // get -ref_det_id and -ref_iter : required for 'verify' mode / disallowed otherwise
+    PXOPT_LOOKUP_S64(ref_det_id, config->args, "-ref_det_id", false, false);
+    PXOPT_LOOKUP_S32(ref_iter, config->args, "-ref_iter", false, false);
+    if (!strncmp(mode, "verify", 7) && ((ref_det_id == 0) || (ref_iter == -1))) {
+        psError(PS_ERR_UNKNOWN, false, "verify mode requires both -ref_det_id and -ref_iter");
+        return false;
+    } 
+    if (strncmp(mode, "verify", 7) && ((ref_det_id != 0) || (ref_iter != -1))) {
+        psError(PS_ERR_UNKNOWN, false, "master mode cannot have -ref_det_id or -ref_iter set");
+        return false;
+    } 
+
     PXOPT_LOOKUP_STR(filelevel, config->args, "-filelevel", false, false);
     PXOPT_LOOKUP_STR(telescope, config->args, "-telescope", false, false);
@@ -623,5 +650,6 @@
                  solang_max,
                  label,
-                 0       // parent
+                 ref_det_id,
+		 ref_iter
         );
     psS64 det_id = psDBLastInsertID(config->dbh);
@@ -692,6 +720,7 @@
 {
     PS_ASSERT_PTR_NON_NULL(config, false);
-
     
+    // XXX this mode is not well-tested: probably need to specify iteration here
+    // XXX pass the supplied det_id and iteration as ref_det_id, or get from command line?
     PXOPT_LOOKUP_S64(det_id, config->args, "-det_id", true, false); // required
     PXOPT_LOOKUP_STR(det_type, config->args, "-set_det_type", false, false); // optional
@@ -745,4 +774,5 @@
 
     // pull the detRun object out the result array
+    // XXX need to assign or re-assign the ref_det_id and ref_iter values
     detRunRow *detRun = psMemIncrRefCounter(detRuns->data[0]);
 
@@ -962,4 +992,5 @@
 
     PXOPT_COPY_STR(config->args, where, "-inst", "camera", "==");
+    PXOPT_COPY_STR(config->args, where, "-mode", "mode", "==");
     PXOPT_COPY_STR(config->args, where, "-telescope", "telescope", "==");
     PXOPT_COPY_STR(config->args, where, "-filter", "filter", "==");
@@ -1541,5 +1572,6 @@
     PXOPT_LOOKUP_TIME(use_begin, config->args, "-use_begin", false, false);
     PXOPT_LOOKUP_TIME(use_end, config->args, "-use_end", false, false);
-    PXOPT_LOOKUP_S64(parent, config->args, "-parent", false, false);
+    PXOPT_LOOKUP_S64(ref_det_id, config->args, "-ref_det_id", false, false);
+    PXOPT_LOOKUP_S32(ref_iter, config->args, "-ref_iter", false, false);
     PXOPT_LOOKUP_STR(label, config->args, "-label", false, false);
     PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
@@ -1578,6 +1610,7 @@
                       solang_min,
                       solang_max,
-                      label,      // label
-                      parent
+                      label,
+		      ref_det_id,
+		      ref_iter
             )) {
         psError(PS_ERR_UNKNOWN, false, "database error");
@@ -1751,15 +1784,9 @@
 
     // check that state is a valid string value
-    if (!(
-            (strncmp(mode, "master", 7) == 0)
-            || (strncmp(mode, "verify", 7) == 0)
-        )
-    ) {
-        psError(PS_ERR_UNKNOWN, false,
-                "invalid detRun mode: %s", mode);
-        return false;
-    }
-
-    return true;
+    if (!strncmp(mode, "master", 7)) return true;
+    if (!strncmp(mode, "verify", 7)) return true;
+
+    psError(PS_ERR_UNKNOWN, false, "invalid detRun mode: %s", mode);
+    return false;
 }
 
