Index: /trunk/ippTools/src/dettool.h
===================================================================
--- /trunk/ippTools/src/dettool.h	(revision 7052)
+++ /trunk/ippTools/src/dettool.h	(revision 7053)
@@ -4,4 +4,14 @@
 #include "pxtools.h"
 
+typedef enum {
+    DETTOOL_MODE_NONE           = 0x0,
+    DETTOOL_MODE_DEFINE,
+    DETTOOL_MODE_RAW,
+    DETTOOL_MODE_ADDPROCESSED,
+    DETTOOL_MODE_PROCESSED,
+    DETTOOL_MODE_ADDSTACKED,
+    DETTOOL_MODE_STACKED,
+} dettoolMode;
+
 pxConfig *p1searchConfig(pxConfig *config, int argc, char **argv);
 
Index: /trunk/ippTools/src/dettoolConfig.c
===================================================================
--- /trunk/ippTools/src/dettoolConfig.c	(revision 7052)
+++ /trunk/ippTools/src/dettoolConfig.c	(revision 7053)
@@ -6,4 +6,5 @@
 
 #include "pxtools.h"
+#include "dettool.h"
 
 // this function can not fail -- exits on error
@@ -23,63 +24,94 @@
     // CLI options
     // modes
-    psMetadata *args = psMetadataAlloc();
-    psMetadataAddStr(args , PS_LIST_TAIL, "-pending", 0,
-        "examine pending image table, write ppImage output", NULL);
-    psMetadataAddStr(args , PS_LIST_TAIL, "-define",  0,
-        "update pending image table", NULL);
-
-    // -pending search
-    psMetadata *pendingArgs = psMetadataAlloc();
-    psMetadataAddStr(pendingArgs, PS_LIST_TAIL, "-exp_id",  0,
-        "define exposure ID", NULL);
-    psMetadataAddStr(pendingArgs, PS_LIST_TAIL, "-inst",  0,
-        "define camera of interest", NULL);
-    psMetadataAddStr(pendingArgs, PS_LIST_TAIL, "-telescope",  0,
-        "define telescope of interest", NULL);
-    psMetadataAddStr(pendingArgs, PS_LIST_TAIL, "-exp_type",  0,
-        "define exposure type", NULL);
-    psMetadataAddS32(pendingArgs, PS_LIST_TAIL, "-imfiles",  0,
-        "define number of imfiles", 0);
-    psMetadataAddStr(pendingArgs, PS_LIST_TAIL, "-filter",  0,
-        "define filter of interest", NULL);
-    psMetadataAddStr(pendingArgs, PS_LIST_TAIL, "-stats",  0,
-        "define stats of interest", NULL);
-    psMetadataAddStr(pendingArgs, PS_LIST_TAIL, "-recipe",  0,
-        "define recipe of interest", NULL);
-    psMetadataAddS32(pendingArgs, PS_LIST_TAIL, "-p1_version",  0,
-        "define p1_version of interest", 0);
-
-    // -define inputs
+    psMetadata *modes = psMetadataAlloc();
+    psMetadataAddStr(modes , PS_LIST_TAIL, "-define",  0,
+        "create a new detrend run", NULL);
+    psMetadataAddStr(modes , PS_LIST_TAIL, "-raw",  0,
+        "list raw imfiles pending processing", NULL);
+    psMetadataAddStr(modes , PS_LIST_TAIL, "-addprocessed",  0,
+        "add a processed imfile", NULL);
+    psMetadataAddStr(modes , PS_LIST_TAIL, "-processed",  0,
+        "list processed imfiles", NULL);
+    psMetadataAddStr(modes , PS_LIST_TAIL, "-addstacked",  0,
+        "add a stacked imfile", NULL);
+    psMetadataAddStr(modes , PS_LIST_TAIL, "-stacked",  0,
+        "list stacked imfiles", NULL);
+
+    // -define 
     psMetadata *defineArgs = psMetadataAlloc();
     psMetadataAddStr(defineArgs, PS_LIST_TAIL, "-exp_id",  0,
-        "define class", NULL);
-    psMetadataAddStr(defineArgs, PS_LIST_TAIL, "-inst",  0,
-        "define camera of interest", NULL);
-    psMetadataAddStr(defineArgs, PS_LIST_TAIL, "-telescope",  0,
-        "define camera of interest", NULL);
-    psMetadataAddStr(defineArgs, PS_LIST_TAIL, "-exp_type",  0,
-        "define class", NULL);
-    psMetadataAddS32(defineArgs, PS_LIST_TAIL, "-imfiles",  0,
-        "define number of imfiles", 0);
-    psMetadataAddStr(defineArgs, PS_LIST_TAIL, "-filter",  0,
-        "define filter of interest", NULL);
-    psMetadataAddStr(defineArgs, PS_LIST_TAIL, "-stats",  0,
-        "define stats of interest", NULL);
-    // these two are inputs NOT search parameters
-    psMetadataAddStr(defineArgs, PS_LIST_TAIL, "-recipe",  0,
-        "define recipe of interest", NULL);
-    psMetadataAddS32(defineArgs, PS_LIST_TAIL, "-p1_version",  0,
-        "define p1_version of interest", 0);
+        "include this exposure (XXX more then one)", NULL);
+    psMetadataAddStr(defineArgs, PS_LIST_TAIL, "-dettype",  0,
+        "define the type of detrend run", NULL);
+
+    // -raw
+    psMetadata *rawArgs = psMetadataAlloc();
+    psMetadataAddStr(rawArgs, PS_LIST_TAIL, "-det_id",  0,
+        "search for detrend ID", NULL);
+    psMetadataAddStr(rawArgs, PS_LIST_TAIL, "-exp_id",  0,
+        "search for exp ID", NULL);
+    psMetadataAddStr(rawArgs, PS_LIST_TAIL, "-class_id",  0,
+        "search for class ID", NULL);
+    psMetadataAddStr(rawArgs, PS_LIST_TAIL, "-iter",  0,
+        "search for iteration number", NULL);
+    
+    // -addprocessed
+    psMetadata *addprocArgs = psMetadataAlloc();
+    psMetadataAddStr(addprocArgs, PS_LIST_TAIL, "-det_id",  0,
+        "define detrend ID", NULL);
+    psMetadataAddStr(addprocArgs, PS_LIST_TAIL, "-exp_id",  0,
+        "define exp ID", NULL);
+    psMetadataAddStr(addprocArgs, PS_LIST_TAIL, "-class_id",  0,
+        "define class ID", NULL);
+    psMetadataAddStr(addprocArgs, PS_LIST_TAIL, "-iter",  0,
+        "define iteration number", NULL);
+    psMetadataAddStr(addprocArgs, PS_LIST_TAIL, "-uri",  0,
+        "define URI", NULL);
+
+    // -processed
+    psMetadata *procArgs = psMetadataAlloc();
+    psMetadataAddStr(procArgs, PS_LIST_TAIL, "-det_id",  0,
+        "search for detrend ID", NULL);
+    psMetadataAddStr(procArgs, PS_LIST_TAIL, "-exp_id",  0,
+        "search for exp ID", NULL);
+    psMetadataAddStr(procArgs, PS_LIST_TAIL, "-class_id",  0,
+        "search for class ID", NULL);
+    psMetadataAddStr(procArgs, PS_LIST_TAIL, "-iter",  0,
+        "search for iteration number", NULL);
+    
+    // -addstacked
+    psMetadata *addstacArgs = psMetadataAlloc();
+    psMetadataAddStr(addstacArgs, PS_LIST_TAIL, "-det_id",  0,
+        "define detrend ID", NULL);
+    psMetadataAddStr(addstacArgs, PS_LIST_TAIL, "-class_id",  0,
+        "define class ID", NULL);
+    psMetadataAddStr(addstacArgs, PS_LIST_TAIL, "-iter",  0,
+        "define iteration number", NULL);
+    psMetadataAddStr(addstacArgs, PS_LIST_TAIL, "-uri",  0,
+        "define URI", NULL);
+    
+    // -stacked
+    psMetadata *stacArgs = psMetadataAlloc();
+    psMetadataAddStr(stacArgs, PS_LIST_TAIL, "-det_id",  0,
+        "search for detrend ID", NULL);
+    psMetadataAddStr(stacArgs, PS_LIST_TAIL, "-class_id",  0,
+        "search for class ID", NULL);
+    psMetadataAddStr(stacArgs, PS_LIST_TAIL, "-iter",  0,
+        "search for iteration number", NULL);
+
+#define PXTOOL_MODE(option, modeval, args) \
+    if ((N = psArgumentGet (argc, argv, option))) { \
+        psArgumentRemove (N, &argc, argv); \
+        if (config->mode) { \
+            psError(PS_ERR_UNKNOWN, true, "only one mode selection is allowed"); \
+        } \
+        config->mode = modeval; \
+        argSet = psMemIncrRefCounter(args); \
+    }
 
     // find which mode we're running under
     int N = 0;
-    config->mode = PX_MODE_NONE;
-    if ((N = psArgumentGet (argc, argv, "-pending"))) {
-        psArgumentRemove (N, &argc, argv);
-        if (config->mode) {
-            psError(PS_ERR_UNKNOWN, true, "only one mode selection is allowed");
-        }
-        config->mode = PX_MODE_PENDING;
-    }
+    psMetadata *argSet = NULL;
+    config->mode = DETTOOL_MODE_NONE;
     if ((N = psArgumentGet (argc, argv, "-define"))) {
         psArgumentRemove (N, &argc, argv);
@@ -87,23 +119,15 @@
             psError(PS_ERR_UNKNOWN, true, "only one mode selection is allowed");
         }
-        config->mode = PX_MODE_DEFINE;
-    }
-
-    // parse CLI for these options
-    psMetadata *argSet = NULL;
-    switch (config->mode) {
-        case PX_MODE_PENDING:
-            argSet = pendingArgs;
-            break;
-        case PX_MODE_DEFINE:
-            argSet = defineArgs;
-            break;
-        default:
-            argSet = args;
-    }
-    psMemIncrRefCounter(argSet);
+        config->mode = DETTOOL_MODE_DEFINE;
+        argSet = psMemIncrRefCounter(defineArgs);
+    }
+    PXTOOL_MODE("-raw",             DETTOOL_MODE_RAW,           rawArgs);
+    PXTOOL_MODE("-addprocessed",    DETTOOL_MODE_ADDPROCESSED,  addprocArgs);
+    PXTOOL_MODE("-processed",       DETTOOL_MODE_PROCESSED,     procArgs);
+    PXTOOL_MODE("-addstacked",      DETTOOL_MODE_ADDSTACKED,    addstacArgs);
+    PXTOOL_MODE("-stacked",         DETTOOL_MODE_STACKED,       stacArgs);
 
     bool argErr = false;
-    if (config->mode == PX_MODE_NONE) {
+    if (config->mode == DETTOOL_MODE_NONE) {
         argErr = true;
         fprintf (stderr, "mode argument is required\n");
@@ -114,20 +138,37 @@
 
     if (argErr) {
-        printf("\nPan-STARRS Phase 1 Search Tool\n");
+        printf("\nPan-STARRS Detrend Tool\n");
         printf("Usage: %s <mode> [<options>]\n\n", argv[0]);
-        printf(" <mode> : -pending | -define\n\n");
-        fprintf (stdout, "-pending ");
-        psArgumentHelp(pendingArgs);
+        printf(" <mode> : [-define|-raw|-addprocessed|-processed|-addstacked|-stacked]\n\n");
         fprintf (stdout, "-define ");
         psArgumentHelp(defineArgs);
-        psFree(args);
-        psFree(pendingArgs);
         psFree(defineArgs);
+        fprintf (stdout, "-raw ");
+        psArgumentHelp(rawArgs);
+        psFree(rawArgs);
+        fprintf (stdout, "-addprocessed ");
+        psArgumentHelp(addprocArgs);
+        psFree(addprocArgs);
+        fprintf (stdout, "-processed ");
+        psArgumentHelp(procArgs);
+        psFree(procArgs);
+        fprintf (stdout, "-addstacked ");
+        psArgumentHelp(addstacArgs);
+        psFree(addstacArgs);
+        fprintf (stdout, "-stacked ");
+        psArgumentHelp(stacArgs);
+        psFree(stacArgs);
+
+        psFree(modes);
         exit(EXIT_FAILURE);
     }
 
-    psFree(args);
-    psFree(pendingArgs);
+    psFree(modes);
     psFree(defineArgs);
+    psFree(rawArgs);
+    psFree(addprocArgs);
+    psFree(procArgs);
+    psFree(addstacArgs);
+    psFree(stacArgs);
 
     // setup search criterion
@@ -188,4 +229,6 @@
 
     // define Database handle, if used
+    // do this last so we don't setup a connection before CLI options are
+    // validated
     config->dbh = pmConfigDB(config->modules);
     if (!config->dbh) {
Index: /trunk/ippTools/src/pxtables.c
===================================================================
--- /trunk/ippTools/src/pxtables.c	(revision 7052)
+++ /trunk/ippTools/src/pxtables.c	(revision 7053)
@@ -36,6 +36,10 @@
     CREATE_TABLE(p2DoneImfileCreateTable);
     CREATE_TABLE(p3PendingExpCreateTable);
-    CREATE_TABLE(masterDetrendFramesCreateTable);
-    CREATE_TABLE(masterDetrendImfileCreateTable);
+    CREATE_TABLE(detRunCreateTable);
+    CREATE_TABLE(detInputExpCreateTable);
+    CREATE_TABLE(detProcessedImfileCreateTable);
+    CREATE_TABLE(detStackedImfileCreateTable);
+    CREATE_TABLE(detMasterFrameCreateTable);
+    CREATE_TABLE(detMasterImfileCreateTable);
 
     return true;
@@ -82,6 +86,10 @@
     DROP_TABLE(p2DoneImfileDropTable);
     DROP_TABLE(p3PendingExpDropTable);
-    DROP_TABLE(masterDetrendFramesDropTable);
-    DROP_TABLE(masterDetrendImfileDropTable);
+    DROP_TABLE(detRunDropTable);
+    DROP_TABLE(detInputExpDropTable);
+    DROP_TABLE(detProcessedImfileDropTable);
+    DROP_TABLE(detStackedImfileDropTable);
+    DROP_TABLE(detMasterFrameDropTable);
+    DROP_TABLE(detMasterImfileDropTable);
 
     return status;
Index: /trunk/ippTools/src/pxtools.h
===================================================================
--- /trunk/ippTools/src/pxtools.h	(revision 7052)
+++ /trunk/ippTools/src/pxtools.h	(revision 7053)
@@ -32,5 +32,5 @@
 
 typedef struct {
-    pxMode mode;
+    int mode;
     psTime *start;
     psTime *stop;
