Index: /branches/eam_branch_20080918/dbconfig/det.md
===================================================================
--- /branches/eam_branch_20080918/dbconfig/det.md	(revision 19608)
+++ /branches/eam_branch_20080918/dbconfig/det.md	(revision 19609)
@@ -28,5 +28,6 @@
     solang_max  F32         0.0
     label       STR         64      # key
-    parent      S32         0       # Key
+    ref_det_id  S64         0	    # reference for 'verify' and 'correction' analysis
+    ref_iter    S32         0	    # reference for 'verify' and 'correction' analysis
 END
 
@@ -165,5 +166,7 @@
     det_id      S64         0       # Primary Key fkey(det_id, iteration, exp_id) ref detInputExp(det_id, iteration, exp_id)
     iteration   S32         0       # Primary Key fkey(det_id, exp_id, class_id) ref detProcessedImfile(det_id, exp_id, class_id)
-    exp_id     S64         64       # Primary Key fkey(det_id, iteration) ref detNormalizedExp(det_id, iteration)
+    ref_det_id  S64         0	    # detrend master actually applied (same as above for 'master', but not for 'verify')
+    ref_iter    S32         0	    # detrend master actually applied (same as above for 'master', but not for 'verify')
+    exp_id      S64         64      # Primary Key fkey(det_id, iteration) ref detNormalizedExp(det_id, iteration)
     class_id    STR         64      # Primary Key INDEX(det_id, iteration, exp_id)
     uri         STR         255
Index: /branches/eam_branch_20080918/ippScripts/scripts/detrend_resid_imfile.pl
===================================================================
--- /branches/eam_branch_20080918/ippScripts/scripts/detrend_resid_imfile.pl	(revision 19608)
+++ /branches/eam_branch_20080918/ippScripts/scripts/detrend_resid_imfile.pl	(revision 19609)
@@ -24,9 +24,11 @@
 use Pod::Usage qw( pod2usage );
 
-my ( $det_id, $iter, $exp_id, $exp_tag, $class_id, $det_type, $detrend, $input_uri, $camera, $mode, $outroot,
+my ( $det_id, $iter, $ref_det_id, $ref_iter, $exp_id, $exp_tag, $class_id, $det_type, $detrend, $input_uri, $camera, $mode, $outroot,
      $dbname, $reduction, $threads, $verbose, $no_update, $no_op, $redirect );
 GetOptions(
     'det_id|d=s'        => \$det_id,
     'iteration=s'       => \$iter,
+    'ref_det_id=s'      => \$ref_det_id,
+    'ref_iter=s'        => \$ref_iter,
     'exp_id|e=s'        => \$exp_id,
     'exp_tag|=s'        => \$exp_tag,
@@ -48,16 +50,18 @@
 
 pod2usage( -msg => "Unknown option: @ARGV", -exitval => 2 ) if @ARGV;
-pod2usage( -msg => "Required options: --det_id --iteration --exp_id --exp_tag --class_id --det_type --camera --input_uri --mode --detrend --outroot (not for 'verify' mode)",
+pod2usage( -msg => "Required options: --det_id --iteration --ref_det_id --ref_iter --exp_id --exp_tag --class_id --det_type --camera --input_uri --mode --detrend --outroot (not for 'verify' mode)",
            -exitval => 3) unless
-    defined $det_id    and
-    defined $iter      and
-    defined $exp_id    and
-    defined $exp_tag   and
-    defined $class_id  and
-    defined $det_type  and
-    defined $input_uri and
-    defined $camera    and
-    defined $mode      and
-    defined $outroot   and
+    defined $det_id     and
+    defined $iter       and
+    defined $ref_det_id and
+    defined $ref_iter   and
+    defined $exp_id     and
+    defined $exp_tag    and
+    defined $class_id   and
+    defined $det_type   and
+    defined $input_uri  and
+    defined $camera     and
+    defined $mode       and
+    defined $outroot    and
     (defined $detrend or lc($mode) eq 'verify');
 
@@ -78,5 +82,8 @@
     &my_die("Unrecognised mode: $mode", $det_id, $iter, $exp_id, $class_id, $PS_EXIT_PROG_ERROR);
 }
+
+print "raw recipe: $recipe\n";
 $recipe = $ipprc->reduction($reduction, $recipe);
+print "real recipe: $recipe\n";
 
 # values to extract from output metadata and the stats to calculate
@@ -216,4 +223,6 @@
 $command .= " -det_id $det_id";
 $command .= " -iteration $iter";
+$command .= " -ref_det_id $ref_det_id";
+$command .= " -ref_iter $ref_iter";
 $command .= " -exp_id $exp_id";
 $command .= " -class_id $class_id";
@@ -252,4 +261,6 @@
         $command .= " -det_id $det_id";
         $command .= " -iteration $iter";
+	$command .= " -ref_det_id $ref_det_id";
+	$command .= " -ref_iter $ref_iter";
         $command .= " -exp_id $exp_id";
         $command .= " -class_id $class_id";
Index: /branches/eam_branch_20080918/ippTasks/detrend.resid.pro
===================================================================
--- /branches/eam_branch_20080918/ippTasks/detrend.resid.pro	(revision 19608)
+++ /branches/eam_branch_20080918/ippTasks/detrend.resid.pro	(revision 19609)
@@ -153,17 +153,19 @@
 
     book setword detPendingResidImfile $pageName pantaskState RUN
-    book getword detPendingResidImfile $pageName det_id    -var DET_ID   
-    book getword detPendingResidImfile $pageName exp_id    -var EXP_ID  
-    book getword detPendingResidImfile $pageName iteration -var ITERATION     
-    book getword detPendingResidImfile $pageName det_type  -var DET_TYPE 
-    book getword detPendingResidImfile $pageName mode      -var MODE     
-    book getword detPendingResidImfile $pageName exp_tag   -var EXP_TAG  
-    book getword detPendingResidImfile $pageName class_id  -var CLASS_ID 
-    book getword detPendingResidImfile $pageName uri       -var URI      
-    book getword detPendingResidImfile $pageName det_uri   -var DET_URI  
-    book getword detPendingResidImfile $pageName camera    -var CAMERA   
-    book getword detPendingResidImfile $pageName workdir   -var WORKDIR_TEMPLATE
-    book getword detPendingResidImfile $pageName dbname    -var DBNAME
-    book getword detPendingResidImfile $pageName reduction -var REDUCTION
+    book getword detPendingResidImfile $pageName det_id     -var DET_ID   
+    book getword detPendingResidImfile $pageName exp_id     -var EXP_ID  
+    book getword detPendingResidImfile $pageName iteration  -var ITERATION     
+    book getword detPendingResidImfile $pageName det_type   -var DET_TYPE 
+    book getword detPendingResidImfile $pageName mode       -var MODE     
+    book getword detPendingResidImfile $pageName exp_tag    -var EXP_TAG  
+    book getword detPendingResidImfile $pageName class_id   -var CLASS_ID 
+    book getword detPendingResidImfile $pageName uri        -var URI      
+    book getword detPendingResidImfile $pageName det_uri    -var DET_URI  
+    book getword detPendingResidImfile $pageName ref_det_id -var REF_DET_ID   
+    book getword detPendingResidImfile $pageName ref_iter   -var REF_ITER
+    book getword detPendingResidImfile $pageName camera     -var CAMERA   
+    book getword detPendingResidImfile $pageName workdir    -var WORKDIR_TEMPLATE
+    book getword detPendingResidImfile $pageName dbname     -var DBNAME
+    book getword detPendingResidImfile $pageName reduction  -var REDUCTION
 
     # specify choice of local or remote host based on camera and chip (class_id)
@@ -179,5 +181,5 @@
     stderr $LOGDIR/detrend.resid.imfile.log
 
-    $run = detrend_resid_imfile.pl --threads @MAX_THREADS@ --det_id $DET_ID --iteration $ITERATION --exp_id $EXP_ID --exp_tag $EXP_TAG --class_id $CLASS_ID --det_type $DET_TYPE --detrend $DET_URI --input_uri $URI --camera $CAMERA --mode $MODE --outroot $outroot --redirect-output --verbose
+    $run = detrend_resid_imfile.pl --threads @MAX_THREADS@ --det_id $DET_ID --iteration $ITERATION --ref_det_id $REF_DET_ID --ref_iter $REF_ITER --exp_id $EXP_ID --exp_tag $EXP_TAG --class_id $CLASS_ID --det_type $DET_TYPE --detrend $DET_URI --input_uri $URI --camera $CAMERA --mode $MODE --outroot $outroot --redirect-output --verbose
 
     if ("$REDUCTION" != "NULL")
Index: /branches/eam_branch_20080918/ippTools/share/dettool_childlessrun.sql
===================================================================
--- /branches/eam_branch_20080918/ippTools/share/dettool_childlessrun.sql	(revision 19608)
+++ /branches/eam_branch_20080918/ippTools/share/dettool_childlessrun.sql	(revision 19609)
@@ -5,5 +5,6 @@
  FROM detRun
  LEFT JOIN detRun as foo
-   ON foo.parent = detRun.det_id
+   ON foo.ref_det_id = detRun.det_id
+-- XXX do we need to restrict to foo.ref_iter = detRun.iteration ?   
  WHERE
    detRun.state = 'stop'
Index: /branches/eam_branch_20080918/ippTools/share/dettool_stop_completed_correct_runs.sql
===================================================================
--- /branches/eam_branch_20080918/ippTools/share/dettool_stop_completed_correct_runs.sql	(revision 19608)
+++ /branches/eam_branch_20080918/ippTools/share/dettool_stop_completed_correct_runs.sql	(revision 19609)
@@ -8,5 +8,6 @@
     FROM detRun AS det1
     INNER JOIN detRun as det2
-        ON det1.parent = det2.det_id 
+        ON det1.ref_det_run = det2.det_id 
+	-- do we need to restrict by iteration?  not clear this logic below is right or tested
     JOIN detNormalizedImfile as imfile
         ON det2.det_id = imfile.det_id
Index: /branches/eam_branch_20080918/ippTools/share/dettool_tocorrectimfile.sql
===================================================================
--- /branches/eam_branch_20080918/ippTools/share/dettool_tocorrectimfile.sql	(revision 19608)
+++ /branches/eam_branch_20080918/ippTools/share/dettool_tocorrectimfile.sql	(revision 19609)
@@ -1,2 +1,3 @@
+-- select imfiles from detRun 1 (the reference detRun) that match the desired correction in detRun 2
 SELECT
     det1.*,
@@ -14,9 +15,9 @@
     imfile.fault
 FROM detRun AS det1
-INNER JOIN detRun as det2
-    ON det1.parent = det2.det_id 
+JOIN detRun as det2
+    ON det1.ref_det_id = det2.det_id 
 JOIN detNormalizedImfile as imfile
-    ON det2.det_id = imfile.det_id
-    AND det2.iteration = imfile.iteration
+    ON det1.ref_det_id = imfile.det_id
+    AND det1.ref_iter = imfile.iteration
 LEFT JOIN detRegisteredImfile
     ON det1.det_id = detRegisteredImfile.det_id
Index: /branches/eam_branch_20080918/ippTools/share/dettool_toresidimfile.sql
===================================================================
--- /branches/eam_branch_20080918/ippTools/share/dettool_toresidimfile.sql	(revision 19608)
+++ /branches/eam_branch_20080918/ippTools/share/dettool_toresidimfile.sql	(revision 19609)
@@ -14,4 +14,6 @@
     detProcessedImfile.uri,
     detNormalizedImfile.uri AS det_uri,
+    detRun.det_id AS ref_det_id,
+    detRun.iteration AS ref_iter,
     rawExp.camera,
     rawExp.exp_tag
@@ -56,10 +58,18 @@
     rawImfile.class_id,
     rawImfile.uri,
-    'NULL' AS det_uri,
+    detNormalizedImfile.uri AS det_uri,
+    detRun.ref_det_id,
+    detRun.ref_iter,
     rawExp.camera,
     rawExp.exp_tag
 FROM detRun
+JOIN detRun AS detRunRef
+  ON detRun.ref_det_id = detRunRef.det_id
+JOIN detNormalizedImfile
+  ON detNormalizedImfile.det_id = detRun.ref_det_id
+ AND detNormalizedImfile.iteration = detRun.ref_iter
 JOIN detInputExp
-    USING(det_id, iteration)
+  ON detInputExp.det_id = detRun.det_id
+ AND detInputExp.iteration = detRun.iteration
 JOIN rawExp
     ON detInputExp.exp_id = rawExp.exp_id
@@ -74,6 +84,6 @@
     detRun.state = 'run'
     AND detRun.mode = 'verify'
-    -- AND detNormalizedImfile.fault = 0
-    -- AND detNormalizedExp.fault = 0
+    AND detRunRef.state = 'stop'
+    AND detNormalizedImfile.fault = 0
     AND detResidImfile.det_id IS NULL
     AND detResidImfile.iteration IS NULL
Index: /branches/eam_branch_20080918/ippTools/share/pxadmin_create_tables.sql
===================================================================
--- /branches/eam_branch_20080918/ippTools/share/pxadmin_create_tables.sql	(revision 19608)
+++ /branches/eam_branch_20080918/ippTools/share/pxadmin_create_tables.sql	(revision 19609)
@@ -444,5 +444,7 @@
     solang_max FLOAT,
     label VARCHAR(64),
-    parent INT,
+    ref_det_id BIGINT,
+    ref_iter INT,
+    -- parent INT, :: dropping this
     PRIMARY KEY(det_id),
     KEY(det_id),
@@ -452,5 +454,5 @@
     KEY(state),
     KEY(label),
-    KEY(parent),
+    -- KEY(parent), :: dropping this
     INDEX(det_id, iteration))
 ENGINE=innodb DEFAULT CHARSET=latin1;
@@ -616,4 +618,6 @@
     det_id BIGINT,
     iteration INT,
+    ref_det_id BIGINT,
+    ref_iter INT,
     exp_id BIGINT,
     class_id VARCHAR(64),
@@ -645,7 +649,7 @@
     FOREIGN KEY (det_id, iteration, exp_id)
     REFERENCES  detInputExp(det_id, iteration, exp_id),
-    FOREIGN KEY (det_id, exp_id, class_id)
-    REFERENCES  detProcessedImfile(det_id, exp_id, class_id),
-    FOREIGN KEY (det_id, iteration)
+    -- FOREIGN KEY (det_id, exp_id, class_id)
+    -- REFERENCES  detProcessedImfile(det_id, exp_id, class_id),
+    FOREIGN KEY (ref_det_id, ref_iter)
     REFERENCES  detNormalizedExp(det_id, iteration)
 ) ENGINE=innodb DEFAULT CHARSET=latin1;
Index: /branches/eam_branch_20080918/ippTools/src/dettool.c
===================================================================
--- /branches/eam_branch_20080918/ippTools/src/dettool.c	(revision 19608)
+++ /branches/eam_branch_20080918/ippTools/src/dettool.c	(revision 19609)
@@ -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]);
 
@@ -1541,5 +1571,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 +1609,7 @@
                       solang_min,
                       solang_max,
-                      label,      // label
-                      parent
+                      label,
+		      ref_det_id,
+		      ref_iter
             )) {
         psError(PS_ERR_UNKNOWN, false, "database error");
@@ -1751,15 +1783,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;
 }
 
Index: /branches/eam_branch_20080918/ippTools/src/dettoolConfig.c
===================================================================
--- /branches/eam_branch_20080918/ippTools/src/dettoolConfig.c	(revision 19608)
+++ /branches/eam_branch_20080918/ippTools/src/dettoolConfig.c	(revision 19609)
@@ -78,4 +78,7 @@
     psMetadataAddStr(definebytagArgs, PS_LIST_TAIL, "-label",  0,            "define detrun label", NULL);
     psMetadataAddBool(definebytagArgs, PS_LIST_TAIL, "-simple",  0,            "use the simple output format", false);
+
+    psMetadataAddS64(definebytagArgs, PS_LIST_TAIL, "-ref_det_id", 0,           "define reference detrend (verify mode only)", 0);
+    psMetadataAddS32(definebytagArgs, PS_LIST_TAIL, "-ref_iter", 0,           "define reference detrend (verify mode only)", -1);
 
     // -definebyquery
@@ -129,4 +132,6 @@
     psMetadataAddBool(definebyqueryArgs, PS_LIST_TAIL, "-random_subset",  0,            "use a random subset of elements", false);
     psMetadataAddS32(definebyqueryArgs, PS_LIST_TAIL, "-random_limit",  0,            "use this number of random elements", 20);
+    psMetadataAddS64(definebyqueryArgs, PS_LIST_TAIL, "-ref_det_id", 0,           "define reference detrend (verify mode only)", 0);
+    psMetadataAddS32(definebyqueryArgs, PS_LIST_TAIL, "-ref_iter", 0,           "define reference detrend (verify mode only)", -1);
 
     // -definebydetrun
@@ -163,5 +168,6 @@
     // -makecorrection
     psMetadata *makecorrectionArgs = psMetadataAlloc();
-    psMetadataAddS64(makecorrectionArgs, PS_LIST_TAIL, "-det_id",  0,            "det ID to be corrected (required)", 0);
+    psMetadataAddS64(makecorrectionArgs, PS_LIST_TAIL, "-det_id",  0,     "detRun det_id to be corrected (required)", 0);
+    psMetadataAddS32(makecorrectionArgs, PS_LIST_TAIL, "-iteration",  0,  "detRun iteration to be corrected (required)", -1);;
     psMetadataAddBool(makecorrectionArgs, PS_LIST_TAIL, "-simple", 0,            "use the simple output format", false);
 
@@ -216,5 +222,5 @@
     psMetadata *inputArgs = psMetadataAlloc();
     psMetadataAddS64(inputArgs, PS_LIST_TAIL, "-det_id", 0,            "search for detrend ID", 0);
-    psMetadataAddS32(inputArgs, PS_LIST_TAIL, "-iteration",  0,            "define iteration number", 0);
+    psMetadataAddS32(inputArgs, PS_LIST_TAIL, "-iteration",  0,            "search for iteration number (default 0)", 0);
     psMetadataAddS64(inputArgs, PS_LIST_TAIL, "-exp_id",  0,            "search for exp ID", 0);
     psMetadataAddBool(inputArgs, PS_LIST_TAIL, "-simple",  0,            "use the simple output format", false);
@@ -591,13 +597,16 @@
 
     // -addresidimfile
+    // XXX does a default value of 0 mean the entry is not instatiated? what about a supplied value of 0?
     psMetadata *addresidimfileArgs = psMetadataAlloc();
     psMetadataAddS64(addresidimfileArgs, PS_LIST_TAIL, "-det_id",  0,            "define detrend ID (required)", 0);
-    psMetadataAddS32(addresidimfileArgs, PS_LIST_TAIL, "-iteration",  0,            "define iteration number", 0);
+    psMetadataAddS32(addresidimfileArgs, PS_LIST_TAIL, "-iteration",  0,         "define iteration number", 0);
+    psMetadataAddS64(addresidimfileArgs, PS_LIST_TAIL, "-ref_det_id",  0,        "define reference detrend ID (required)", 0);
+    psMetadataAddS32(addresidimfileArgs, PS_LIST_TAIL, "-ref_iter",  0,          "define reference iteration number (required)", -1);
     psMetadataAddS64(addresidimfileArgs, PS_LIST_TAIL, "-exp_id",  0,            "define detrend ID (required)", 0);
-    psMetadataAddStr(addresidimfileArgs, PS_LIST_TAIL, "-class_id",  0,            "define class ID (required)", NULL);
-    psMetadataAddS16(addresidimfileArgs, PS_LIST_TAIL, "-code",  0,            "set fault code", 0);
-    psMetadataAddStr(addresidimfileArgs, PS_LIST_TAIL, "-uri",  0,            "define resid file URI", NULL);
-    psMetadataAddStr(addresidimfileArgs, PS_LIST_TAIL, "-recip",  0,            "define recipe", NULL);
-    psMetadataAddF64(addresidimfileArgs, PS_LIST_TAIL, "-bg",  0,            "define exposure background", NAN);
+    psMetadataAddStr(addresidimfileArgs, PS_LIST_TAIL, "-class_id",  0,          "define class ID (required)", NULL);
+    psMetadataAddS16(addresidimfileArgs, PS_LIST_TAIL, "-code",  0,              "set fault code", 0);
+    psMetadataAddStr(addresidimfileArgs, PS_LIST_TAIL, "-uri",  0,               "define resid file URI", NULL);
+    psMetadataAddStr(addresidimfileArgs, PS_LIST_TAIL, "-recip",  0,             "define recipe", NULL);
+    psMetadataAddF64(addresidimfileArgs, PS_LIST_TAIL, "-bg",  0,                "define exposure background", NAN);
     psMetadataAddF64(addresidimfileArgs, PS_LIST_TAIL, "-bg_stdev",  0,            "define exposure background stdev", NAN);
     psMetadataAddF64(addresidimfileArgs, PS_LIST_TAIL, "-bg_mean_stdev",  0,            "define exposure background mean stdev", NAN);
@@ -815,5 +824,6 @@
     psMetadataAddTime(register_detrendArgs, PS_LIST_TAIL, "-use_begin",  0,            "start of detrend run applicable period", NULL);
     psMetadataAddTime(register_detrendArgs, PS_LIST_TAIL, "-use_end",  0,            "end of detrend run applicable period", NULL);
-    psMetadataAddS64(register_detrendArgs, PS_LIST_TAIL, "-parent",  0,            "define parent det_id", 0);
+    psMetadataAddS64(register_detrendArgs, PS_LIST_TAIL, "-ref_det_id",  0,            "define reference det_id", 0);
+    psMetadataAddS32(register_detrendArgs, PS_LIST_TAIL, "-ref_iter",  0,            "define reference iteration", -1);
     psMetadataAddStr(register_detrendArgs, PS_LIST_TAIL, "-label",  0,            "define detrun label", NULL);
     psMetadataAddBool(register_detrendArgs, PS_LIST_TAIL, "-simple",  0,            "use the simple output format", false);
Index: /branches/eam_branch_20080918/ippTools/src/dettool_correction.c
===================================================================
--- /branches/eam_branch_20080918/ippTools/src/dettool_correction.c	(revision 19608)
+++ /branches/eam_branch_20080918/ippTools/src/dettool_correction.c	(revision 19609)
@@ -24,10 +24,12 @@
     PS_ASSERT_PTR_NON_NULL(config, false);
 
-    PXOPT_LOOKUP_S64(det_id, config->args, "-det_id", true, false); // required
+    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_BOOL(simple, config->args, "-simple", false); // optional
 
     // build the needed where 
     psMetadata *where = psMetadataAlloc();
-    psMetadataAddS64(where, PS_LIST_TAIL, "det_id", 0, "==", det_id);
+    psMetadataAddS64(where, PS_LIST_TAIL, "det_id", 0, "==", ref_det_id);
+    psMetadataAddS32(where, PS_LIST_TAIL, "iteration", 0, "==", ref_iter);
     psArray *runs = detRunSelectRowObjects(config->dbh, where, 1);
     psFree (where);
@@ -74,5 +76,6 @@
          detRun->solang_max,
          detRun->label,
-         detRun->det_id // parent
+	 detRun->det_id, // ref_det_id
+	 detRun->iteration // ref_iter
     );
 
Index: /branches/eam_branch_20080918/ippTools/src/dettool_residimfile.c
===================================================================
--- /branches/eam_branch_20080918/ippTools/src/dettool_residimfile.c	(revision 19608)
+++ /branches/eam_branch_20080918/ippTools/src/dettool_residimfile.c	(revision 19609)
@@ -78,4 +78,8 @@
     PXOPT_LOOKUP_S64(det_id, config->args, "-det_id", true, false); // required
     PXOPT_LOOKUP_S32(iteration, config->args, "-iteration", false, false);
+
+    PXOPT_LOOKUP_S64(ref_det_id, config->args, "-ref_det_id", true, false); // required
+    PXOPT_LOOKUP_S32(ref_iter, config->args, "-ref_iter", true, false);
+
     PXOPT_LOOKUP_S64(exp_id, config->args, "-exp_id", true, false); // required
     PXOPT_LOOKUP_STR(class_id, config->args, "-class_id", true, false); // required
@@ -106,4 +110,6 @@
             det_id,
             iteration,
+            ref_det_id,
+            ref_iter,
             exp_id,
             class_id,
