Index: /trunk/ippTools/src/magictool.c
===================================================================
--- /trunk/ippTools/src/magictool.c	(revision 20743)
+++ /trunk/ippTools/src/magictool.c	(revision 20744)
@@ -153,4 +153,5 @@
         psMetadata *where = psMetadataAlloc();
         PXOPT_COPY_S64(config->args, where, "-exp_id", "exp_id", "==");
+        PXOPT_COPY_STR(config->args, where, "-diff_label", "diffRun.label", "==");
         PXOPT_COPY_F32(config->args, where, "-good_frac", "warpSkyfile.good_frac", ">=");
 
@@ -180,31 +181,49 @@
         }
 
-        psString whereClause = NULL;    // WHERE conditions
+        psString magicSkyCellNumsWhere = NULL;    // WHERE conditions for magicSkyCellNums
         {
             psMetadata *where = psMetadataAlloc();
             PXOPT_COPY_S64(config->args, where, "-exp_id", "exp_id", "==");
+            PXOPT_COPY_STR(config->args, where, "-diff_label", "diffRun.label", "==");
             PXOPT_COPY_F32(config->args, where, "-good_frac", "warpSkyfile.good_frac", ">=");
 
             if (psListLength(where->list)) {
-                whereClause = psDBGenerateWhereConditionSQL(where, NULL);
-                psStringPrepend(&whereClause, "\n AND ");
+                magicSkyCellNumsWhere = psDBGenerateWhereConditionSQL(where, NULL);
+                psStringPrepend(&magicSkyCellNumsWhere, "\n AND ");
             }
             psFree(where);
         }
 
-        // Only concern ourselves with exposures that have all diffs completed, unless we're told to only take
-        // what's available.
+        // "available" means only concern ourselves with exposures that have all diffs completed, unless we're
+        // told to only take what's available.
+        // "new" means we want a new run even if there's already a magic run defined
         PXOPT_LOOKUP_BOOL(available, config->args, "-available", false);
-        if (!available) {
-            psStringAppend(&query, " AND num_done = num_todo");
-        }
-
-        if (!p_psDBRunQuery(config->dbh, query, whereClause ? whereClause : "")) {
+        PXOPT_LOOKUP_BOOL(new, config->args, "-new", false);
+
+        psString queryWhere = NULL;     // WHERE conditions for entire query
+        if (available) {
+            psStringAppend(&queryWhere, " WHERE num_done = num_todo");
+        }
+        if (new) {
+            const char *newWhere = " magic_id IS NULL"; // String to add
+            if (queryWhere) {
+                psStringAppend(&queryWhere, " AND %s", newWhere);
+            } else {
+                psStringAppend(&queryWhere, " WHERE %s", newWhere);
+            }
+        }
+        if (queryWhere) {
+            psStringAppend(&query, " %s", queryWhere);
+            psFree(queryWhere);
+        }
+
+
+        if (!p_psDBRunQuery(config->dbh, query, magicSkyCellNumsWhere ? magicSkyCellNumsWhere : "")) {
             psError(PS_ERR_UNKNOWN, false, "database error");
-            psFree(whereClause);
+            psFree(magicSkyCellNumsWhere);
             psFree(query);
             return false;
         }
-        psFree(whereClause);
+        psFree(magicSkyCellNumsWhere);
         psFree(query);
     }
Index: /trunk/ippTools/src/magictoolConfig.c
===================================================================
--- /trunk/ippTools/src/magictoolConfig.c	(revision 20743)
+++ /trunk/ippTools/src/magictoolConfig.c	(revision 20744)
@@ -54,6 +54,8 @@
     psMetadataAddTime(definebyqueryArgs, PS_LIST_TAIL, "-registered", 0, "time detrend run was registered", now);
     psMetadataAddS64(definebyqueryArgs, PS_LIST_TAIL, "-exp_id", 0, "search exp_id", 0);
+    psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-diff_label", 0, "select diff label", NULL);
     psMetadataAddF32(definebyqueryArgs, PS_LIST_TAIL, "-good_frac", 0, "limit good_frac", NAN);
     psMetadataAddBool(definebyqueryArgs, PS_LIST_TAIL, "-available", 0, "process what's immediately available?", false);
+    psMetadataAddBool(definebyqueryArgs, PS_LIST_TAIL, "-new", 0, "generate new run even if existing?", false);
     psMetadataAddBool(definebyqueryArgs, PS_LIST_TAIL, "-simple", 0, "use the simple output format", false);
 
