Index: trunk/ippTools/src/disttool.c
===================================================================
--- trunk/ippTools/src/disttool.c	(revision 30877)
+++ trunk/ippTools/src/disttool.c	(revision 30906)
@@ -141,4 +141,5 @@
     PXOPT_LOOKUP_BOOL(use_alternate, config->args, "-use_alternate", false);
     PXOPT_LOOKUP_BOOL(no_magic, config->args, "-no_magic", false);
+    PXOPT_LOOKUP_BOOL(i_am_sure, config->args, "-i_am_sure", false);
     PXOPT_LOOKUP_STR(set_label, config->args, "-set_label", false, false);
     PXOPT_LOOKUP_STR(set_data_group, config->args, "-set_data_group", false, false);
@@ -150,4 +151,24 @@
     PXOPT_LOOKUP_BOOL(pretend, config->args, "-pretend", false);
 
+    // select arguments
+    psMetadata *where = psMetadataAlloc();
+
+    PXOPT_COPY_S64(config->args, where, "-target_id", "distTarget.target_id",    "==");
+    PXOPT_COPY_S64(config->args, where, "-exp_id",    "rawExp.exp_id",           "==");
+    PXOPT_COPY_S64(config->args, where, "-chip_id",   "chipRun.chip_id",         "==");
+    PXOPT_COPY_STR(config->args, where, "-exp_type", "exp_type", "==");;
+    PXOPT_COPY_STR(config->args, where, "-dist_group", "distTarget.dist_group", "==");;
+
+    PXOPT_LOOKUP_STR(label, config->args, "-label", false, false);
+    PXOPT_LOOKUP_S64(exp_id, config->args, "-exp_id", false, false);
+    PXOPT_LOOKUP_STR(exp_type, config->args, "-exp_type", false, false);
+    PXOPT_LOOKUP_STR(dist_group, config->args, "-dist_group", false, false);
+
+    // queuing no_magic runs can be quite dangerous. Require confirmation
+    if (no_magic && !pretend && !i_am_sure) {
+        psError(PXTOOLS_ERR_SYS, true, "-i_am_sure required to queue no_magic distribution runs");
+        return false;
+    }
+   
     if (use_alternate) {
         if (strcmp(stage, "raw")) {
@@ -161,13 +182,15 @@
     }
 
-    // select arguments
-    psMetadata *where = psMetadataAlloc();
-
-    PXOPT_COPY_S64(config->args, where, "-target_id", "distTarget.target_id",    "==");
-    PXOPT_COPY_S64(config->args, where, "-exp_id",    "rawExp.exp_id",           "==");
-    PXOPT_COPY_S64(config->args, where, "-chip_id",   "chipRun.chip_id",         "==");
-
-    PXOPT_LOOKUP_STR(label, config->args, "-label", false, false);
-    PXOPT_LOOKUP_STR(dist_group, config->args, "-dist_group", false, false);
+    // We want to possible to distribute unmagicked raw exposures for the purpose
+    // of distributing detrend inputs
+    // To make it less likely that unmagicked raw stage exposures from being distributed
+    // accidentally we require that dist_group (to select target and destination with 
+    // an interest)
+    // and exp_id to be supplied. We could add -exp_type and dateobs cuts to make it easier
+    if (!strcmp(stage, "raw") && no_magic && !(exp_id && dist_group && exp_type)) {
+        psError(PXTOOLS_ERR_SYS, true, "exp_id, exp_type, and dist_group are required for raw stage if no_magic");
+        return false;
+    }
+
 
     psString query = NULL;
@@ -182,5 +205,9 @@
             runJoinStr = "camRun.exp_id";
         }
-        query = pxDataGet("disttool_definebyquery_raw.sql");
+        if (!no_magic) {
+            query = pxDataGet("disttool_definebyquery_raw.sql");
+        } else {
+            query = pxDataGet("disttool_definebyquery_raw_no_magic.sql");
+        }
         if (!query) {
             psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
@@ -189,10 +216,13 @@
         }
 
-        // for raw stage we select by camRun.label and dist_group because rawExp doesn't have those columns
-        if (label) {
-            psStringAppend(&query, " AND (magicDSRun.label = '%s')", label);
-        }
-        if (dist_group) {
-            psStringAppend(&query, " AND (camRun.dist_group = '%s')", dist_group);
+        if (!no_magic) {
+            if (label) {
+                psStringAppend(&query, " AND (magicDSRun.label = '%s')", label);
+            }
+            // for raw stage we select by camRun.label and dist_group because rawExp
+            // doesn't have those columns
+            if (dist_group) {
+                psStringAppend(&query, " AND (camRun.dist_group = '%s')", dist_group);
+            }
         }
     } else if (!strcmp(stage, "chip")) {
Index: trunk/ippTools/src/disttoolConfig.c
===================================================================
--- trunk/ippTools/src/disttoolConfig.c	(revision 30877)
+++ trunk/ippTools/src/disttoolConfig.c	(revision 30906)
@@ -49,4 +49,5 @@
 
     psMetadataAddBool(definebyqueryArgs, PS_LIST_TAIL, "-no_magic", 0, "magic is not needed", false);
+    psMetadataAddBool(definebyqueryArgs, PS_LIST_TAIL, "-i_am_sure", 0, "confirmation needed when -no_magic is supplied", false);
     psMetadataAddBool(definebyqueryArgs, PS_LIST_TAIL, "-use_alternate", 0, "use alternate inputs", false);
     psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-set_label",    0, "define label for run", NULL);
@@ -57,7 +58,8 @@
 
     // select args
-    psMetadataAddS64(definebyqueryArgs, PS_LIST_TAIL, "-target_id",     0, "define target_id", 0);
-    psMetadataAddS64(definebyqueryArgs, PS_LIST_TAIL, "-exp_id",        0, "define exp_id", 0);
-    psMetadataAddS64(definebyqueryArgs, PS_LIST_TAIL, "-chip_id",       0, "define chip_id", 0);
+    psMetadataAddS64(definebyqueryArgs, PS_LIST_TAIL, "-target_id",     0, "select by target_id", 0);
+    psMetadataAddS64(definebyqueryArgs, PS_LIST_TAIL, "-exp_id",        0, "select by exp_id", 0);
+    psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-exp_type",      0, "select by exp_type", NULL);
+    psMetadataAddS64(definebyqueryArgs, PS_LIST_TAIL, "-chip_id",       0, "select by chip_id", 0);
     psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-label",         0, "select by run label", NULL);
     psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-dist_group",    0, "select by dist_group", NULL);
