Index: trunk/ippTools/share/Makefile.am
===================================================================
--- trunk/ippTools/share/Makefile.am	(revision 40043)
+++ trunk/ippTools/share/Makefile.am	(revision 40109)
@@ -176,4 +176,5 @@
 	difftool_coalesce_run.sql \
 	difftool_definewarpstack.sql \
+	difftool_definewarpstack_old.sql \
 	difftool_definewarpstack_part1.sql \
 	difftool_definewarpstack_part2.sql \
Index: trunk/ippTools/share/difftool_definewarpstack_old.sql
===================================================================
--- trunk/ippTools/share/difftool_definewarpstack_old.sql	(revision 40109)
+++ trunk/ippTools/share/difftool_definewarpstack_old.sql	(revision 40109)
@@ -0,0 +1,42 @@
+-- Get list of warp-stack pairs that can be diffed
+-- and check results against existing diffs
+SELECT
+   exp_id,
+   warp_id,
+   rawExp.filter,
+   warpRun.label AS warpLabel,
+   warpRun.data_group AS warpDataGroup,
+   warpRun.tess_id,
+   warpSkyfile.skycell_id,
+   MAX(stack_id) AS stack_id,
+   stackRun.label AS stackLabel,
+   stackRun.data_group AS stackDataGroup,
+   diff_id,
+   diffRun.label AS diffLabel
+FROM warpRun
+     JOIN fakeRun USING(fake_id)
+     JOIN camRun USING(cam_id)
+     JOIN chipRun USING(chip_id)
+     JOIN rawExp USING(exp_id)
+     JOIN warpSkyfile USING(warp_id)
+     JOIN stackRun ON 
+       (stackRun.skycell_id = warpSkyfile.skycell_id AND
+        stackRun.filter     = rawExp.filter AND
+	stackRun.tess_id    = warpRun.tess_id)
+     JOIN stackSumSkyfile USING(stack_id)
+     LEFT JOIN diffInputSkyfile ON 
+       (warp_id = diffInputSkyfile.warp1 AND
+        stack_id = diffInputSkyfile.stack2 AND
+	diffInputSkyfile.skycell_id = stackRun.skycell_id AND
+	diffInputSkyfile.tess_id = stackRun.tess_id)
+     LEFT JOIN diffRun USING(diff_id)
+WHERE 
+     warpRun.state = 'full'
+     AND stackRun.state = 'full'
+     AND warpSkyfile.fault = 0
+     AND warpSkyfile.quality = 0
+     AND stackSumSkyfile.fault = 0
+     AND stackSumSkyfile.quality = 0
+     AND exp_id IS NOT NULL
+-- %s
+GROUP BY exp_id,warp_id,skycell_id
Index: trunk/ippTools/src/difftool.c
===================================================================
--- trunk/ippTools/src/difftool.c	(revision 40043)
+++ trunk/ippTools/src/difftool.c	(revision 40109)
@@ -1234,4 +1234,6 @@
   psMetadata *where = psMetadataAlloc();
 
+  PXOPT_LOOKUP_BOOL(lapQuery, config->args, "-lap_query", false);
+  
   PXOPT_COPY_S64(config->args, where, "-exp_id", "exp_id", "==");
   PXOPT_COPY_STR(config->args, where, "-filter", "rawExp.filter", "==");
@@ -1245,4 +1247,5 @@
   PXOPT_COPY_STR(config->args, where, "-stack_label", "stackRun.label", "==");
   PXOPT_COPY_STR(config->args, where, "-stack_data_group", "stackRun.data_group", "==");
+
 
   // Add position dependence here.
@@ -1277,5 +1280,12 @@
   
   // Get query file
-  psString query = pxDataGet("difftool_definewarpstack.sql");
+  psString query;
+  if (lapQuery) { 
+    query = pxDataGet("difftool_definewarpstack.sql");
+  }
+  else {
+    query = pxDataGet("difftool_definewarpstack_old.sql");
+  }
+  
   if (!query) {
     psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
@@ -1284,33 +1294,65 @@
 
   psString whereClause = psDBGenerateWhereConditionSQL(where,NULL);
-  psString diffWhereClause = psStringCopy("");
-  psString joinWhereClause = psStringCopy("");
-  
-  // Don't queue things that already have diffs.
-  if (! (reRun || newTemplates) ) {
-    psStringAppend(&joinWhereClause, "\nAND diff_id IS NULL\n");
+  psString whereClauseString = psStringCopy("");
+  if (lapQuery) {
+    psString diffWhereClause = psStringCopy("");
+    psString joinWhereClause = psStringCopy("");
+    
+    // Don't queue things that already have diffs.
+    if (! (reRun || newTemplates) ) {
+      psStringAppend(&joinWhereClause, "\nAND diff_id IS NULL\n");
+    }
+    // Append diff qualifiers, if we have them
+    if (label) {
+      psStringAppend(&diffWhereClause, "\nAND ((diffRun.label = '%s') OR (diffRun.label IS NULL))",label);
+    }
+    if (data_group) {
+      psStringAppend(&diffWhereClause, "\nAND ((diffRun.data_group = '%s') OR (diffRun.data_group IS NULL))",data_group);
+    }
+    if (reduction) {
+      psStringAppend(&diffWhereClause, "\nAND ((diffRun.reduction = '%s') OR (diffRun.reduction IS NULL))",reduction);
+    }
+
+    psStringAppend(&whereClauseString, " \n AND %s ", whereClause);
+    //  fprintf(stderr,query,whereClauseString);
+
+    // This is just a simple query, so we don't need to do a transaction
+    if (!p_psDBRunQueryF(config->dbh, query, whereClauseString, diffWhereClause,joinWhereClause)) {
+      psError(PS_ERR_UNKNOWN, false, "database error");
+      psFree(query);
+      psFree(whereClause);
+      return(false);
+    }
+    
+    psFree(diffWhereClause);
+    psFree(joinWhereClause);
+    
   }
-  // Append diff qualifiers, if we have them
-  if (label) {
-    psStringAppend(&diffWhereClause, "\nAND ((diffRun.label = '%s') OR (diffRun.label IS NULL))",label);
+  else {
+    // Don't queue things that already have diffs.
+    if (! (reRun || newTemplates) ) {
+      psStringAppend(&whereClause, "\nAND diff_id IS NULL\n");
+    }
+    // Append diff qualifiers, if we have them
+    if (label) {
+      psStringAppend(&whereClause, "\nAND ((diffRun.label = '%s') OR (diffRun.label IS NULL))",label);
+    }
+    if (data_group) {
+      psStringAppend(&whereClause, "\nAND ((diffRun.data_group = '%s') OR (diffRun.data_group IS NULL))",data_group);
+    }
+    if (reduction) {
+      psStringAppend(&whereClause, "\nAND ((diffRun.reduction = '%s') OR (diffRun.reduction IS NULL))",reduction);
+    }
+
+    psStringAppend(&whereClauseString, " \n AND %s ", whereClause);
+    if (!p_psDBRunQueryF(config->dbh, query, whereClauseString)) {
+      psError(PS_ERR_UNKNOWN, false, "database error");
+      psFree(query);
+      psFree(whereClause);
+      return(false);
+    }
+
   }
-  if (data_group) {
-    psStringAppend(&diffWhereClause, "\nAND ((diffRun.data_group = '%s') OR (diffRun.data_group IS NULL))",data_group);
-  }
-  if (reduction) {
-    psStringAppend(&diffWhereClause, "\nAND ((diffRun.reduction = '%s') OR (diffRun.reduction IS NULL))",reduction);
-  }
-
-  psString whereClauseString = psStringCopy("");
-  psStringAppend(&whereClauseString, " \n AND %s ", whereClause);
-  //  fprintf(stderr,query,whereClauseString);
-
-  // This is just a simple query, so we don't need to do a transaction
-  if (!p_psDBRunQueryF(config->dbh, query, whereClauseString, diffWhereClause,joinWhereClause)) {
-    psError(PS_ERR_UNKNOWN, false, "database error");
-    psFree(query);
-    psFree(whereClause);
-    return(false);
-  }
+    
   psFree(query);
   psFree(whereClause);
Index: trunk/ippTools/src/difftoolConfig.c
===================================================================
--- trunk/ippTools/src/difftoolConfig.c	(revision 40043)
+++ trunk/ippTools/src/difftoolConfig.c	(revision 40109)
@@ -271,5 +271,6 @@
     psMetadataAddBool(definewarpstackArgs, PS_LIST_TAIL, "-simple", 0, "use the simple output format", false);
     psMetadataAddBool(definewarpstackArgs, PS_LIST_TAIL, "-pretend", 0, "list results but to not queue", false);
-
+    psMetadataAddBool(definewarpstackArgs, PS_LIST_TAIL, "-lap_query", 0, "Use the updated LAP style SQL code", false);
+    
     pxspaceBoxAddArguments(definewarpstackArgs);
 
