Index: trunk/ippTools/src/difftool.c
===================================================================
--- trunk/ippTools/src/difftool.c	(revision 26138)
+++ trunk/ippTools/src/difftool.c	(revision 26139)
@@ -1138,14 +1138,18 @@
 
     psMetadata *expWhere = psMetadataAlloc();
-    psMetadata *warpWhere = psMetadataAlloc();
+    psMetadata *warp1Where = psMetadataAlloc(); // First set of restrictions on warp
+    psMetadata *warp2Where = psMetadataAlloc(); // Second set of restriction on warp
     psMetadata *stackWhere = psMetadataAlloc();
 
     PXOPT_COPY_S64(config->args, expWhere, "-exp_id", "exp_id", "==");
     PXOPT_COPY_STR(config->args, expWhere, "-filter", "filter", "==");
-    PXOPT_COPY_S64(config->args, warpWhere, "-warp_id", "warpRun.warp_id", "==");
-    PXOPT_COPY_STR(config->args, warpWhere, "-skycell_id", "warpSkyfile.skycell_id", "==");
-    PXOPT_COPY_STR(config->args, warpWhere, "-tess_id", "warpRun.tess_id", "==");
-    PXOPT_COPY_STR(config->args, warpWhere, "-warp_label", "warpRun.label", "==");
-    PXOPT_COPY_F32(config->args, warpWhere,  "-good_frac", "warpSkyfile.good_frac", ">=");
+    PXOPT_COPY_S64(config->args, warp1Where, "-warp_id", "warpRun.warp_id", "==");
+    PXOPT_COPY_STR(config->args, warp1Where, "-warp_label", "warpRun.label", "==");
+    PXOPT_COPY_STR(config->args, warp1Where, "-tess_id", "warpRun.tess_id", "==");
+    PXOPT_COPY_S64(config->args, warp2Where, "-warp_id", "warpRun.warp_id", "==");
+    PXOPT_COPY_STR(config->args, warp2Where, "-tess_id", "warpRun.tess_id", "==");
+    PXOPT_COPY_STR(config->args, warp2Where, "-skycell_id", "warpSkyfile.skycell_id", "==");
+    PXOPT_COPY_STR(config->args, warp2Where, "-warp_label", "warpRun.label", "==");
+    PXOPT_COPY_F32(config->args, warp2Where,  "-good_frac", "warpSkyfile.good_frac", ">=");
     PXOPT_COPY_STR(config->args, stackWhere, "-stack_label", "stackRun.label", "==");
 
@@ -1171,5 +1175,6 @@
     }
 
-    psString warpQuery = NULL;
+    psString warp1Query = NULL;
+    psString warp2Query = NULL;
     psString stackQuery = NULL;
     psString expQuery = NULL;
@@ -1183,16 +1188,25 @@
     }
     psFree(expWhere);
-    if (psListLength(warpWhere->list)) {
-        psString whereClause = psDBGenerateWhereConditionSQL(warpWhere, NULL);
-        psStringAppend(&warpQuery, "\n AND %s", whereClause);
+    if (psListLength(warp1Where->list)) {
+        psString whereClause = psDBGenerateWhereConditionSQL(warp1Where, NULL);
+        psStringAppend(&warp1Query, "\n AND %s", whereClause);
         psFree(whereClause);
     } else {
-        warpQuery = psStringCopy("\n");
-    }
-    psFree(warpWhere);
+        warp1Query = psStringCopy("\n");
+    }
+    psFree(warp1Where);
+    if (psListLength(warp2Where->list)) {
+        psString whereClause = psDBGenerateWhereConditionSQL(warp2Where, NULL);
+        psStringAppend(&warp2Query, "\n AND %s", whereClause);
+        psFree(whereClause);
+    } else {
+        warp2Query = psStringCopy("\n");
+    }
+    psFree(warp2Where);
 
     if (!available) {
         // diff what's available, even if warp run has some faults and is incomplete
-        psStringAppend(&warpQuery, " AND warpRun.state = 'full'");
+        psStringAppend(&warp1Query, " AND warpRun.state = 'full'");
+        psStringAppend(&warp2Query, " AND warpRun.state = 'full'");
     }
 
@@ -1214,5 +1228,5 @@
     psFree(stackWhere);
 
-    psTrace("difftool", 1, query, warpQuery, diffQuery, expQuery, stackQuery);
+    psTrace("difftool", 1, query, warp1Query, warp2Query, diffQuery, expQuery, stackQuery);
 
     if (!psDBTransaction(config->dbh)) {
@@ -1221,5 +1235,5 @@
     }
 
-    if (!p_psDBRunQueryF(config->dbh, query, warpQuery, warpQuery, expQuery, diffQuery)) {
+    if (!p_psDBRunQueryF(config->dbh, query, warp1Query, warp2Query, expQuery, diffQuery)) {
         psError(PS_ERR_UNKNOWN, false, "database error");
         psFree(query);
@@ -1281,4 +1295,5 @@
         return false;
     }
+    psFree(warp1Query);
     psFree(query);
     query = NULL;
@@ -1312,5 +1327,5 @@
         if (!p_psDBRunQuery(config->dbh, "DELETE FROM skycellsToDiff")) {
             psError(PS_ERR_UNKNOWN, false, "database error");
-            psFree(warpQuery);
+            psFree(warp2Query);
             psFree(stackQuery);
             psFree(skycell_query);
@@ -1323,5 +1338,5 @@
         if (!mdok) {
             psError(PXTOOLS_ERR_PROG, false, "warp_id not found --- ignoring row %ld", i);
-            psFree(warpQuery);
+            psFree(warp2Query);
             psFree(stackQuery);
             psFree(skycell_query);
@@ -1334,5 +1349,5 @@
         if (!mdok) {
             psError(PXTOOLS_ERR_PROG, false, "skycell_count not found");
-            psFree(warpQuery);
+            psFree(warp2Query);
             psFree(stackQuery);
             psFree(skycell_query);
@@ -1345,5 +1360,5 @@
         if (!mdok) {
             psError(PXTOOLS_ERR_PROG, false, "tess_id not found");
-            psFree(warpQuery);
+            psFree(warp2Query);
             psFree(stackQuery);
             psFree(skycell_query);
@@ -1356,5 +1371,5 @@
         if (!mdok) {
             psError(PXTOOLS_ERR_PROG, false, "filter not found");
-            psFree(warpQuery);
+            psFree(warp2Query);
             psFree(stackQuery);
             psFree(skycell_query);
@@ -1364,7 +1379,7 @@
             return false;
         }
-        if (!p_psDBRunQueryF(config->dbh, skycell_query, stackQuery, warp_id, filter, warpQuery)) {
-            psError(PS_ERR_UNKNOWN, false, "database error");
-            psFree(warpQuery);
+        if (!p_psDBRunQueryF(config->dbh, skycell_query, stackQuery, warp_id, filter, warp2Query)) {
+            psError(PS_ERR_UNKNOWN, false, "database error");
+            psFree(warp2Query);
             psFree(stackQuery);
             psFree(skycell_query);
@@ -1418,5 +1433,5 @@
         if (!p_psDBRunQuery(config->dbh, query)) {
             psError(PS_ERR_UNKNOWN, false, "database error");
-            psFree(warpQuery);
+            psFree(warp2Query);
             psFree(stackQuery);
             psFree(skycell_query);
@@ -1432,5 +1447,5 @@
         if (!p_psDBRunQuery(config->dbh, query)) {
             psError(PS_ERR_UNKNOWN, false, "database error");
-            psFree(warpQuery);
+            psFree(warp2Query);
             psFree(stackQuery);
             psFree(skycell_query);
@@ -1447,5 +1462,5 @@
             psError(PS_ERR_UNKNOWN, false, "failed to change diffRun.state for diff_id: %" PRId64,
                 run->diff_id);
-            psFree(warpQuery);
+            psFree(warp2Query);
             psFree(stackQuery);
             psFree(skycell_query);
@@ -1461,5 +1476,5 @@
     }
     psFree(output);
-    psFree(warpQuery);
+    psFree(warp2Query);
     psFree(stackQuery);
     psFree(skycell_query);
