Index: /trunk/ippTools/configure.ac
===================================================================
--- /trunk/ippTools/configure.ac	(revision 9706)
+++ /trunk/ippTools/configure.ac	(revision 9707)
@@ -16,5 +16,5 @@
 PKG_CHECK_MODULES([PSLIB], [pslib >= 0.12.99]) 
 PKG_CHECK_MODULES([PSMODULES], [psmodules >= 0.12.0]) 
-PKG_CHECK_MODULES([IPPDB], [ippdb >= 0.0.50]) 
+PKG_CHECK_MODULES([IPPDB], [ippdb >= 0.0.51]) 
 
 AC_PROG_PERL_MODULES(
Index: /trunk/ippTools/scripts/dettest.sh
===================================================================
--- /trunk/ippTools/scripts/dettest.sh	(revision 9706)
+++ /trunk/ippTools/scripts/dettest.sh	(revision 9707)
@@ -7,5 +7,5 @@
 ./p0test.sh -detrend || exit 1
 
-dettool -definebyquery -det_type flat || exit 1
+dettool -definebyquery -det_type flat -set_exp_type fooflat -set_filter foo -set_airmass 10 -set_exp_time 30.0 -set_ccd_temp 100 -set_posang 360 -set_object iobject || exit 1
 dettool -raw || exit 1
 
@@ -18,5 +18,5 @@
 done;
 
-dettool -tostack || exit 1
+dettool -tostacked || exit 1
 
 for ID in `seq 0 3` ; do
@@ -25,4 +25,7 @@
 
 dettool -tonormalizedstat || exit 1
+
+exit 0
+
 for ID in `seq 0 3` ; do
     dettool -addnormalizedstat -det_id $det_id -class_id $ID -norm 0.12345 || exit 1
Index: /trunk/ippTools/scripts/regtest.sh
===================================================================
--- /trunk/ippTools/scripts/regtest.sh	(revision 9706)
+++ /trunk/ippTools/scripts/regtest.sh	(revision 9707)
@@ -21,12 +21,12 @@
 
 for ID in `seq 0 3`; do
-    $p0tool -updateimfile -exp_tag t10 -exp_type object -class OTA -class_id $ID -filter r -airmass 10 -ra 1 -decl 2 -exp_time 0 -bg 1 -bg_stdev 1 -bg_mean_stdev 10 -alt 10 -az 10 -ccd_temp 10 -posang 10 -object dog || exit 1
+    $p0tool -updateimfile -exp_tag t10 -exp_type object -class OTA -class_id $ID -filter r -airmass 10 -ra 1 -decl 2 -exp_time 0 -bg 1 -bg_stdev 1 -bg_mean_stdev 10 -alt 10 -az 10 -ccd_temp 10 -posang 10 -object dog -dateobs 2006-10-20T10:10:10Z || exit 1
 done;
 
-$p0tool -updateexp -exp_tag t10 -filter r -airmass 10 -ra 1 -decl 2 -exp_type bias -exp_time 0 -bg 10 -bg_stdev 1 -bg_mean_stdev 10 -alt 10 -az 10 -ccd_temp 45 -posang 10 -object dog $* || exit 1
+$p0tool -updateexp -exp_tag t10 -filter r -airmass 10 -ra 1 -decl 2 -exp_type bias -exp_time 0 -bg 10 -bg_stdev 1 -bg_mean_stdev 10 -alt 10 -az 10 -ccd_temp 45 -posang 10 -object dog -dateobs "2006-10-20T10:10:10Z" $* || exit 1
 
 for ID in `seq 0 3`; do
-    $p0tool -updateimfile -exp_tag t11 -exp_type object -class OTA -class_id $ID -filter r -airmass 10 -ra 1 -decl 2 -exp_time 0 -bg 1 -bg_stdev 1 -bg_mean_stdev 10 -alt 10 -az 10 -ccd_temp 10 -posang 10 -object dog || exit 1
+    $p0tool -updateimfile -exp_tag t11 -exp_type object -class OTA -class_id $ID -filter r -airmass 10 -ra 1 -decl 2 -exp_time 0 -bg 1 -bg_stdev 1 -bg_mean_stdev 10 -alt 10 -az 10 -ccd_temp 10 -posang 10 -object dog -dateobs 2006-10-20T10:10:10Z || exit 1
 done;
 
-$p0tool -updateexp -exp_tag t11 -filter r -airmass 11 -ra 1 -decl 2 -exp_type bias -exp_time 0 -bg 11 -bg_stdev 1 -bg_mean_stdev 11 -alt 11 -az 11 -ccd_temp 45 -posang 11 -object dog $* || exit 1
+$p0tool -updateexp -exp_tag t11 -filter r -airmass 11 -ra 1 -decl 2 -exp_type bias -exp_time 0 -bg 11 -bg_stdev 1 -bg_mean_stdev 11 -alt 11 -az 11 -ccd_temp 45 -posang 11 -object dog -dateobs 2006-10-20T10:10:10Z $* || exit 1
Index: /trunk/ippTools/src/dettool.c
===================================================================
--- /trunk/ippTools/src/dettool.c	(revision 9706)
+++ /trunk/ippTools/src/dettool.c	(revision 9707)
@@ -220,4 +220,108 @@
         return false;
     }
+    psString exp_type = psMetadataLookupStr(&status, config->args, "-exp_type");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -exp_type");
+        return false;
+    }
+    if (!exp_type) {
+        psError(PS_ERR_UNKNOWN, true, "-exp_type is required");
+        return false;
+    }
+    psString filter = psMetadataLookupStr(&status, config->args, "-filter");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -filter");
+        return false;
+    }
+    if (!filter) {
+        psError(PS_ERR_UNKNOWN, true, "-filter is required");
+        return false;
+    }
+    psF32 airmass = psMetadataLookupF32(&status, config->args, "-airmass");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -airmass");
+        return false;
+    }
+    if (isnan(airmass)) {
+        psError(PS_ERR_UNKNOWN, true, "-airmass is required");
+        return false;
+    }
+    psF32 exp_time = psMetadataLookupF32(&status, config->args, "-exp_time");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -exp_time");
+        return false;
+    }
+    if (isnan(exp_time)) {
+        psError(PS_ERR_UNKNOWN, true, "-exp_time is required");
+        return false;
+    }
+    psF32 ccd_temp = psMetadataLookupF32(&status, config->args, "-ccd_temp");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -ccd_temp");
+        return false;
+    }
+    if (isnan(ccd_temp)) {
+        psError(PS_ERR_UNKNOWN, true, "-ccd_temp is required");
+        return false;
+    }
+    psF64 posang = psMetadataLookupF32(&status, config->args, "-posang");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -posang");
+        return false;
+    }
+    if (isnan(posang)) {
+        psError(PS_ERR_UNKNOWN, true, "-posang is required");
+        return false;
+    }
+    // optional
+    psString object = psMetadataLookupStr(&status, config->args, "-object");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -object");
+        return false;
+    }
+    psTime *registered = NULL;
+    {
+        psString registeredStr = psMetadataLookupStr(&status, config->args, "-registered");
+        if (!status) {
+            psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -registered");
+            return false;
+        }
+        // pass through NULL as this is an optional field
+        if (registeredStr) {
+            registered = psTimeFromISO(registeredStr, PS_TIME_UTC);
+        } else {
+            registered = NULL;
+        }
+    }
+    
+    psTime *use_begin = NULL;
+    {
+        psString use_beginStr = psMetadataLookupStr(&status, config->args, "-use_begin");
+        if (!status) {
+            psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -use_begin");
+            return false;
+        }
+        // pass through NULL as this is an optional field
+        if (use_beginStr) {
+            use_begin = psTimeFromISO(use_beginStr, PS_TIME_UTC);
+        } else {
+            use_begin = NULL;
+        }
+    }
+
+    psTime *use_end = NULL;
+    {
+        psString use_endStr = psMetadataLookupStr(&status, config->args, "-use_end");
+        if (!status) {
+            psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -use_end");
+            return false;
+        }
+        // pass through NULL as this is an optional field
+        if (use_endStr) {
+            use_end = psTimeFromISO(use_endStr, PS_TIME_UTC);
+        } else {
+            use_end = NULL;
+        }
+    }
 
     // we have to support multipe exp_tags
@@ -290,5 +394,20 @@
     // XXX the camera name is set from the first inputExp
     // XXX det_id
-    detRunInsert(config->dbh, 0, 0, det_type, "run");
+    detRunInsert(config->dbh,
+            0,
+            0,
+            det_type,
+            "run",
+            exp_type,
+            filter,
+            airmass,
+            exp_time,
+            ccd_temp,
+            posang,
+            object,
+            registered,
+            use_begin,
+            use_end
+        );
     long det_id = psDBLastInsertID(config->dbh);
 
@@ -482,4 +601,114 @@
     }
 
+    // there is some namespace overlap between the names of the fields we'd
+    // like to search by to setup a detrun and the names of the fields we'd
+    // like to assign values to so I've seperated them but prepending set- to
+    // the assigned values
+
+    psString exp_type = psMetadataLookupStr(&status, config->args, "-set_exp_type");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -set_exp_type");
+        return false;
+    }
+    if (!exp_type) {
+        psError(PS_ERR_UNKNOWN, true, "-set_exp_type is required");
+        return false;
+    }
+    psString filter = psMetadataLookupStr(&status, config->args, "-set_filter");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -set_filter");
+        return false;
+    }
+    if (!filter) {
+        psError(PS_ERR_UNKNOWN, true, "-set_filter is required");
+        return false;
+    }
+    psF32 airmass = psMetadataLookupF32(&status, config->args, "-set_airmass");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -set_airmass");
+        return false;
+    }
+    if (isnan(airmass)) {
+        psError(PS_ERR_UNKNOWN, true, "-set_airmass is required");
+        return false;
+    }
+    psF32 exp_time = psMetadataLookupF32(&status, config->args, "-set_exp_time");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -set_exp_time");
+        return false;
+    }
+    if (isnan(exp_time)) {
+        psError(PS_ERR_UNKNOWN, true, "-set_exp_time is required");
+        return false;
+    }
+    psF32 ccd_temp = psMetadataLookupF32(&status, config->args, "-set_ccd_temp");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -set_ccd_temp");
+        return false;
+    }
+    if (isnan(ccd_temp)) {
+        psError(PS_ERR_UNKNOWN, true, "-set_ccd_temp is required");
+        return false;
+    }
+    psF64 posang = psMetadataLookupF32(&status, config->args, "-set_posang");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -set_posang");
+        return false;
+    }
+    if (isnan(posang)) {
+        psError(PS_ERR_UNKNOWN, true, "-set_posang is required");
+        return false;
+    }
+    // optional
+    psString object = psMetadataLookupStr(&status, config->args, "-set_object");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -set_object");
+        return false;
+    }
+    psTime *registered = NULL;
+    {
+        psString registeredStr = psMetadataLookupStr(&status, config->args, "-set_registered");
+        if (!status) {
+            psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -set_registered");
+            return false;
+        }
+        // pass through NULL as this is an optional field
+        if (registeredStr) {
+            registered = psTimeFromISO(registeredStr, PS_TIME_UTC);
+        } else {
+            registered = NULL;
+        }
+    }
+    
+    psTime *use_begin = NULL;
+    {
+        psString use_beginStr = psMetadataLookupStr(&status, config->args, "-set_use_begin");
+        if (!status) {
+            psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -set_use_begin");
+            return false;
+        }
+        // pass through NULL as this is an optional field
+        if (use_beginStr) {
+            use_begin = psTimeFromISO(use_beginStr, PS_TIME_UTC);
+        } else {
+            use_begin = NULL;
+        }
+    }
+
+    psTime *use_end = NULL;
+    {
+        psString use_endStr = psMetadataLookupStr(&status, config->args, "-set_use_end");
+        if (!status) {
+            psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -set_use_end");
+            return false;
+        }
+        // pass through NULL as this is an optional field
+        if (use_endStr) {
+            use_end = psTimeFromISO(use_endStr, PS_TIME_UTC);
+        } else {
+            use_end = NULL;
+        }
+    }
+
     // search for rawDetrendExps with the specified options
     psArray *detrendExps = rawDetrendExpSelectRowObjects(config->dbh, where, 0);
@@ -500,5 +729,20 @@
     // the first iteration is always 0
     // XXX det_id
-    detRunInsert(config->dbh, 0, 0, det_type, "run");
+    detRunInsert(config->dbh,
+            0,
+            0,
+            det_type,
+            "run",
+            exp_type,
+            filter,
+            airmass,
+            exp_time,
+            ccd_temp,
+            posang,
+            object,
+            registered,
+            use_begin,
+            use_end
+        );
     long det_id = psDBLastInsertID(config->dbh);
 
Index: /trunk/ippTools/src/dettoolConfig.c
===================================================================
--- /trunk/ippTools/src/dettoolConfig.c	(revision 9706)
+++ /trunk/ippTools/src/dettoolConfig.c	(revision 9707)
@@ -40,4 +40,8 @@
     }
 
+    psTime *time = psTimeGetNow(PS_TIME_TAI);
+    psString now = psTimeToISO(time);
+    psFree(time);
+
     // -pending
     psMetadata *pendingArgs = psMetadataAlloc();
@@ -64,4 +68,24 @@
     psMetadataAddStr(definebyexpArgs, PS_LIST_TAIL, "-det_type",  0,
             "define the type of detrend run (required)", NULL);
+    psMetadataAddStr(definebyexpArgs, PS_LIST_TAIL, "-exp_type",  0,
+        "define exposure type", NULL);
+    psMetadataAddStr(definebyexpArgs, PS_LIST_TAIL, "-filter",  0,
+        "define filter ", NULL);
+    psMetadataAddF32(definebyexpArgs, PS_LIST_TAIL, "-airmass",  0,
+        "define airmass", NAN);
+    psMetadataAddF32(definebyexpArgs, PS_LIST_TAIL, "-exp_time",  0,
+        "define exposure time", NAN);
+    psMetadataAddF64(definebyexpArgs, PS_LIST_TAIL, "-ccd_temp",  0,
+        "define ccd tempature", NAN);
+    psMetadataAddF64(definebyexpArgs, PS_LIST_TAIL, "-posang",  0,
+        "define rotator position angle", NAN);
+    psMetadataAddStr(definebyexpArgs, PS_LIST_TAIL, "-object",  0,
+        "define exposure object", NULL);
+    psMetadataAddStr(definebyexpArgs, PS_LIST_TAIL, "-registered",  0,
+        "time detrend run was registered", now);
+    psMetadataAddStr(definebyexpArgs, PS_LIST_TAIL, "-use_begin",  0,
+        "start of detrend run applicable peroid", NULL);
+    psMetadataAddStr(definebyexpArgs, PS_LIST_TAIL, "-use_end",  0,
+        "end of detrend run applicable peroid", NULL);
     psMetadataAddBool(definebyexpArgs, PS_LIST_TAIL, "-simple",  0,
             "use the simple output format", false);
@@ -81,4 +105,24 @@
     psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-uri",  0,
             "search by URL", NULL);
+    psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-set_exp_type",  0,
+        "define exposure type", NULL);
+    psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-set_filter",  0,
+        "define filter ", NULL);
+    psMetadataAddF32(definebyqueryArgs, PS_LIST_TAIL, "-set_airmass",  0,
+        "define airmass", NAN);
+    psMetadataAddF32(definebyqueryArgs, PS_LIST_TAIL, "-set_exp_time",  0,
+        "define exposure time", NAN);
+    psMetadataAddF64(definebyqueryArgs, PS_LIST_TAIL, "-set_ccd_temp",  0,
+        "define ccd tempature", NAN);
+    psMetadataAddF64(definebyqueryArgs, PS_LIST_TAIL, "-set_posang",  0,
+        "define rotator position angle", NAN);
+    psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-set_object",  0,
+        "define exposure object", NULL);
+    psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-set_registered",  0,
+        "time detrend run was registered", now);
+    psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-set_use_begin",  0,
+        "start of detrend run applicable peroid", NULL);
+    psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-set_use_end",  0,
+        "end of detrend run applicable peroid", NULL);
     psMetadataAddBool(definebyqueryArgs, PS_LIST_TAIL, "-simple",  0,
             "use the simple output format", false);
@@ -475,4 +519,5 @@
         "include this exposure (multiple OK, required)", NULL);
 
+    psFree(now);
 
 #define PXTOOL_MODE(option, modeval, argset) \
