Index: trunk/ippTools/src/camtool.c
===================================================================
--- trunk/ippTools/src/camtool.c	(revision 11110)
+++ trunk/ippTools/src/camtool.c	(revision 11138)
@@ -91,5 +91,6 @@
             "SELECT"
             "   p3PendingExp.*,"
-            "   rawExp.camera"
+            "   rawExp.camera,"
+            "   rawExp.workdir"
             " FROM p3PendingExp"
             " JOIN rawExp"
@@ -165,5 +166,6 @@
             "SELECT"
             "   p2ProcessedImfile.*,"
-            "   rawExp.camera"   
+            "   rawExp.camera,"   
+            "   rawExp.workdir"   
             " FROM p3PendingExp"
             " JOIN rawExp"
@@ -467,5 +469,6 @@
             "SELECT"
             "   p3ProcessedExp.*,"
-            "   rawExp.camera"
+            "   rawExp.camera,"
+            "   rawExp.workdir"
             " FROM p3ProcessedExp"
             " JOIN rawExp"
Index: trunk/ippTools/src/chiptool.c
===================================================================
--- trunk/ippTools/src/chiptool.c	(revision 11110)
+++ trunk/ippTools/src/chiptool.c	(revision 11138)
@@ -99,5 +99,6 @@
             "SELECT"
             "   p2PendingImfile.*,"
-            "   rawExp.camera"
+            "   rawExp.camera,"
+            "   rawExp.workdir"
             " FROM p2PendingImfile"
             " JOIN p2PendingExp"
@@ -353,5 +354,6 @@
             "SELECT"
             "   p2ProcessedImfile.*,"
-            "   rawExp.camera"
+            "   rawExp.camera,"
+            "   rawExp.workdir"
             " FROM p2ProcessedImfile"
             " JOIN rawExp"
Index: trunk/ippTools/src/dettool.c
===================================================================
--- trunk/ippTools/src/dettool.c	(revision 11110)
+++ trunk/ippTools/src/dettool.c	(revision 11138)
@@ -234,4 +234,14 @@
     }
 
+    psString workdir = psMetadataLookupStr(&status, config->args, "-workdir");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -workdir");
+        return false;
+    }
+    if (!workdir) {
+        psError(PS_ERR_UNKNOWN, true, "-workdir is required");
+        return false;
+    }
+
     // optional
     psString mode = psMetadataLookupStr(&status, config->args, "-mode");
@@ -421,4 +431,5 @@
             "run",
             exp_type,
+            workdir,
             filter,
             airmass,
@@ -551,4 +562,14 @@
     if (!det_type) {
         psError(PS_ERR_UNKNOWN, true, "-det_type is required");
+        return false;
+    }
+
+    psString workdir = psMetadataLookupStr(&status, config->args, "-workdir");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -workdir");
+        return false;
+    }
+    if (!workdir) {
+        psError(PS_ERR_UNKNOWN, true, "-workdir is required");
         return false;
     }
@@ -859,4 +880,5 @@
             "run",
             exp_type,
+            workdir,
             filter,
             airmass,
@@ -1493,4 +1515,5 @@
             "   detRun.det_id,"
             "   detRun.det_type,"
+            "   detRun.workdir,"
             "   rawImfile.*,"
             "   rawExp.camera"
@@ -1791,5 +1814,6 @@
         "    det_type,"
         "    exp_tag,"
-        "    camera"
+        "    camera,"
+        "    workdir"
         " FROM"
         " (SELECT DISTINCT"
@@ -1797,4 +1821,5 @@
         "    detRun.iteration,"
         "    detRun.det_type,"
+        "    detRun.workdir,"
         "    detProcessedImfile.exp_tag,"
         "    rawExp.camera,"
@@ -2158,4 +2183,5 @@
         "    detRun.iteration,"
         "    detRun.det_type,"
+        "    detRun.workdir,"
         "    detProcessedImfile.class_id,"
         "    rawExp.camera"
@@ -2619,5 +2645,6 @@
         "   det_type,"
         "   iteration,"
-        "   camera"
+        "   camera,"
+        "   workdir"
         " FROM"
         "(SELECT DISTINCT"
@@ -2625,4 +2652,5 @@
         "   detRun.det_type,"
         "   detRun.iteration,"
+        "   detRun.workdir,"
         "   rawExp.camera,"
         "   rawExp.imfiles,"
@@ -2850,4 +2878,5 @@
         "SELECT DISTINCT"
         "   detRun.det_type,"
+        "   detRun.workdir,"
         "   rawExp.camera,"
         "   detStackedImfile.uri,"
@@ -3180,4 +3209,5 @@
         "    detRun.iteration,"
         "    detRun.det_type,"
+        "    detRun.workdir,"
         "    rawExp.camera,"
         "    rawExp.telescope,"
@@ -3618,4 +3648,5 @@
         "   detRun.det_type,\n"
         "   detRun.mode,\n"
+        "   detRun.workdir,\n"
         "   detProcessedImfile.exp_tag,\n"
         "   detProcessedImfile.class_id,\n"
@@ -3653,4 +3684,5 @@
         "   detRun.det_type,\n"
         "   detRun.mode,\n"
+        "   detRun.workdir,\n"
         "   rawImfile.exp_tag,\n"
         "   rawImfile.class_id,\n"
@@ -4264,4 +4296,5 @@
         "   include,\n"
         "   camera\n"
+        "   workdir\n"
         " FROM\n"
         "   (SELECT DISTINCT\n"
@@ -4270,4 +4303,5 @@
         "       detRun.det_type,\n"
         "       detRun.mode,\n"
+        "       detRun.workdir,\n"
         "       detInputExp.exp_tag,\n"
         "       detInputExp.include,\n"
@@ -5704,4 +5738,14 @@
     }
 
+    psString workdir = psMetadataLookupStr(&status, config->args, "-workdir");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -workdir");
+        return false;
+    }
+    if (!workdir) {
+        psError(PS_ERR_UNKNOWN, true, "-workdir is required");
+        return false;
+    }
+
     // everything else is optional
     psString mode = psMetadataLookupStr(&status, config->args, "-mode");
@@ -5833,4 +5877,5 @@
             "reg",
             exp_type,
+            workdir,
             filter,
             airmass,
Index: trunk/ippTools/src/dettoolConfig.c
===================================================================
--- trunk/ippTools/src/dettoolConfig.c	(revision 11110)
+++ trunk/ippTools/src/dettoolConfig.c	(revision 11138)
@@ -74,4 +74,6 @@
     psMetadataAddStr(definebytagArgs, PS_LIST_TAIL, "-exp_type",  0,
             "define exposure type", NULL);
+    psMetadataAddStr(definebytagArgs, PS_LIST_TAIL, "-workdir",  0,
+            "define workdir (required)", NULL);
     psMetadataAddStr(definebytagArgs, PS_LIST_TAIL, "-filter",  0,
             "define filter ", NULL);
@@ -103,4 +105,6 @@
     psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-exp_type",  0,
             "define exposure type", NULL);
+    psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-workdir",  0,
+            "define workdir (required)", NULL);
     psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-filter",  0,
             "define filter ", NULL);
@@ -150,4 +154,6 @@
     psMetadataAddStr(definebydetrunArgs, PS_LIST_TAIL, "-set_exp_type",  0,
             "define exposure type", NULL);
+    psMetadataAddStr(definebydetrunArgs, PS_LIST_TAIL, "-set_workdir",  0,
+            "define workdir", NULL);
     psMetadataAddStr(definebydetrunArgs, PS_LIST_TAIL, "-set_filter",  0,
             "define filter ", NULL);
@@ -651,4 +657,6 @@
     psMetadataAddStr(register_detrendArgs, PS_LIST_TAIL, "-exp_type",  0,
             "define exposure type", NULL);
+    psMetadataAddStr(register_detrendArgs, PS_LIST_TAIL, "-workdir",  0,
+            "define workdir (required)", NULL);
     psMetadataAddStr(register_detrendArgs, PS_LIST_TAIL, "-filter",  0,
             "define filter ", NULL);
Index: trunk/ippTools/src/pxinject.c
===================================================================
--- trunk/ippTools/src/pxinject.c	(revision 11110)
+++ trunk/ippTools/src/pxinject.c	(revision 11138)
@@ -116,4 +116,14 @@
     if (!imfiles) {
         psError(PS_ERR_UNKNOWN, true, "-imfiles is required");
+        return false;
+    }
+
+    psString workdir = psMetadataLookupStr(&status, config->args, "-workdir");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -workdir");
+        return false;
+    }
+    if (!workdir) {
+        psError(PS_ERR_UNKNOWN, true, "-workdir is required");
         return false;
     }
@@ -148,5 +158,6 @@
                 dateobs,
                 exp_type,
-                imfiles
+                imfiles,
+                workdir
             )
         ) {
Index: trunk/ippTools/src/pxinjectConfig.c
===================================================================
--- trunk/ippTools/src/pxinjectConfig.c	(revision 11110)
+++ trunk/ippTools/src/pxinjectConfig.c	(revision 11138)
@@ -56,4 +56,6 @@
     psMetadataAddS32(newExpArgs, PS_LIST_TAIL, "-imfiles",  0,
         "define the number of imfiles in this exp (required)", 0);
+    psMetadataAddStr(newExpArgs, PS_LIST_TAIL, "-workdir",  0,
+        "define workdir (required)", 0);
     psMetadataAddBool(newExpArgs, PS_LIST_TAIL, "-simple",  0,
         "use the simple output format", false);
Index: trunk/ippTools/src/regtool.c
===================================================================
--- trunk/ippTools/src/regtool.c	(revision 11110)
+++ trunk/ippTools/src/regtool.c	(revision 11138)
@@ -113,5 +113,6 @@
     psString query = psStringCopy(
         "SELECT\n"
-        "   newImfile.*\n"
+        "   newImfile.*,\n"
+        "   newExp.workdir\n"
         " FROM newImfile\n"
         " LEFT JOIN newExp\n"
@@ -1014,8 +1015,11 @@
     rawExpRow *raw = rawExpRowAlloc(
         exp->exp_tag,
+        exp->exp_id,
         exp->camera,
         exp->telescope,
+        dateobs,
         exp_type,
         exp->imfiles,
+        exp->workdir,
         filter,
         airmass,
@@ -1031,5 +1035,4 @@
         posang,
         object,
-        dateobs,
         code
     );
Index: trunk/ippTools/src/warptool.c
===================================================================
--- trunk/ippTools/src/warptool.c	(revision 11110)
+++ trunk/ippTools/src/warptool.c	(revision 11138)
@@ -104,4 +104,14 @@
     }
 
+    psString workdir = psMetadataLookupStr(&status, config->args, "-workdir");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -workdir");
+        return false;
+    }
+    if (!workdir) {
+        psError(PS_ERR_UNKNOWN, true, "-workdir is required");
+        return false;
+    }
+
     psString filter = psMetadataLookupStr(&status, config->args, "-filter");
     if (!status) {
@@ -188,4 +198,5 @@
             survey_mode,
             "run",
+            workdir,
             filter,
             skycell_id,
@@ -292,5 +303,6 @@
         " SELECT DISTINCT"
         "   p4InputImfile.p4_id,"
-        "   p2ProcessedImfile.*"
+        "   p2ProcessedImfile.*,"
+        "   p4Run.workdir"
         " FROM p4Run"
         " JOIN p4InputImfile"
@@ -507,5 +519,6 @@
     psString query = psStringCopy(
         " SELECT DISTINCT"
-        "   p4WarpedImfile.*"
+        "   p4WarpedImfile.*,"
+        "   p4Run.workdir"
         " FROM p4Run"
         " JOIN p4WarpedImfile"
@@ -695,5 +708,6 @@
         " SELECT DISTINCT"
         "   p4StackedImfile.*,"
-        "   p4WarpedImfile.uri as warped_uri"
+        "   p4WarpedImfile.uri as warped_uri,"
+        "   p4Run.workdir"
         " FROM p4Run"
         " JOIN p4StackedImfile"
Index: trunk/ippTools/src/warptoolConfig.c
===================================================================
--- trunk/ippTools/src/warptoolConfig.c	(revision 11110)
+++ trunk/ippTools/src/warptoolConfig.c	(revision 11138)
@@ -50,4 +50,6 @@
     psMetadataAddStr(definerunArgs, PS_LIST_TAIL, "-survey_mode", 0,
             "define the type of suvery (required)", NULL);
+    psMetadataAddStr(definerunArgs, PS_LIST_TAIL, "-workdir", 0,
+            "define workdir (required)", NULL);
     psMetadataAddStr(definerunArgs, PS_LIST_TAIL, "-filter",  0,
             "define filter (required)", NULL);
