Index: /branches/eam_branches/ipp-20150112/ippTools/share/difftool_definewarpstack.sql
===================================================================
--- /branches/eam_branches/ipp-20150112/ippTools/share/difftool_definewarpstack.sql	(revision 38048)
+++ /branches/eam_branches/ipp-20150112/ippTools/share/difftool_definewarpstack.sql	(revision 38049)
@@ -2,4 +2,19 @@
 -- and check results against existing diffs
 SELECT
+   exp_id,
+   warp_id,
+   filter,
+   warpLabel,
+   warpDataGroup,
+   Inputs.tess_id,
+   Inputs.skycell_id,
+   stack_id,
+   stackLabel,
+   stackDataGroup,
+   diff_id,
+   diffLabel
+FROM
+(
+SELECT 
    exp_id,
    warp_id,
@@ -11,7 +26,5 @@
    MAX(stack_id) AS stack_id,
    stackRun.label AS stackLabel,
-   stackRun.data_group AS stackDataGroup,
-   diff_id,
-   diffRun.label AS diffLabel
+   stackRun.data_group AS stackDataGroup
 FROM warpRun
      JOIN fakeRun USING(fake_id)
@@ -25,10 +38,4 @@
 	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'
@@ -41,2 +48,26 @@
 -- %s
 GROUP BY exp_id,warp_id,skycell_id
+) AS Inputs
+LEFT JOIN 
+(
+SELECT 
+diff_id,
+diffRun.label AS diffLabel,
+warp1,
+stack2,
+skycell_id,
+diffInputSkyfile.tess_id
+FROM 
+diffRun JOIN diffInputSkyfile USING(diff_id,tess_id)
+WHERE
+diff_mode = 2
+-- %s 
+) AS Diffs ON
+       (warp_id = warp1 AND
+        stack_id = stack2 AND
+	Diffs.skycell_id = Inputs.skycell_id AND
+	Diffs.tess_id = Inputs.tess_id)
+WHERE
+1
+-- %s
+
Index: /branches/eam_branches/ipp-20150112/ippTools/share/pxadmin_create_tables.sql
===================================================================
--- /branches/eam_branches/ipp-20150112/ippTools/share/pxadmin_create_tables.sql	(revision 38048)
+++ /branches/eam_branches/ipp-20150112/ippTools/share/pxadmin_create_tables.sql	(revision 38049)
@@ -2385,5 +2385,5 @@
     remote_id BIGINT,
     stage_id  BIGINT,
-    jobs      INT
+    jobs      INT,
     state     VARCHAR(64) NOT NULL,
     path_base VARCHAR(255),
Index: /branches/eam_branches/ipp-20150112/ippTools/share/pxadmin_drop_tables.sql
===================================================================
--- /branches/eam_branches/ipp-20150112/ippTools/share/pxadmin_drop_tables.sql	(revision 38048)
+++ /branches/eam_branches/ipp-20150112/ippTools/share/pxadmin_drop_tables.sql	(revision 38049)
@@ -124,4 +124,6 @@
 DROP TABLE IF EXISTS fullForceResult;
 DROP TABLE IF EXISTS fullForceSummary;
+DROP TABLE IF EXISTS remoteComponent;
+DROP TABLE IF EXISTS remoteRun;
 
 
Index: /branches/eam_branches/ipp-20150112/ippTools/src/difftool.c
===================================================================
--- /branches/eam_branches/ipp-20150112/ippTools/src/difftool.c	(revision 38048)
+++ /branches/eam_branches/ipp-20150112/ippTools/src/difftool.c	(revision 38049)
@@ -42,4 +42,5 @@
 static bool definepoprunMode(pxConfig *config);
 static bool definewarpstackMode(pxConfig *config);
+//static bool definewarpstackOldMethodMode(pxConfig *config);
 static bool definewarpwarpMode(pxConfig *config);
 static bool definestackstackMode(pxConfig *config);
@@ -95,4 +96,5 @@
         MODECASE(DIFFTOOL_MODE_DEFINEPOPRUN,          definepoprunMode);
         MODECASE(DIFFTOOL_MODE_DEFINEWARPSTACK,       definewarpstackMode);
+	//	MODECASE(DIFFTOOL_MODE_DEFINEWARPSTACKOLDMETHOD,       definewarpstackOldMethodMode);
         MODECASE(DIFFTOOL_MODE_DEFINEWARPWARP,        definewarpwarpMode);
         MODECASE(DIFFTOOL_MODE_DEFINESTACKSTACK,      definestackstackMode);
@@ -1233,5 +1235,5 @@
 
   PXOPT_COPY_S64(config->args, where, "-exp_id", "exp_id", "==");
-  PXOPT_COPY_STR(config->args, where, "-filter", "filter", "==");
+  PXOPT_COPY_STR(config->args, where, "-filter", "rawExp.filter", "==");
   PXOPT_COPY_STR(config->args, where, "-comment", "comment", "LIKE");
   PXOPT_COPY_S64(config->args, where, "-warp_id", "warpRun.warp_id", "==");
@@ -1244,4 +1246,11 @@
   PXOPT_COPY_STR(config->args, where, "-stack_data_group", "stackRun.data_group", "==");
 
+  // Add position dependence here.
+  if (!pxspaceBoxAddWhere(config,where)) {
+    psError(psErrorCodeLast(), false, "pxSpaceBoxAddWhere failed");
+    return false;
+  }
+  
+  // PXOPT_LOOKUP_BOOL(available, config->args, "-available", false);
   PXOPT_LOOKUP_BOOL(bothways, config->args, "-bothways", false);
   
@@ -1275,18 +1284,20 @@
 
   psString whereClause = psDBGenerateWhereConditionSQL(where,NULL);
+  psString diffWhereClause = psStringCopy("");
+  psString joinWhereClause = psStringCopy("");
   
   // Don't queue things that already have diffs.
   if (! (reRun || newTemplates) ) {
-    psStringAppend(&whereClause, "\nAND diff_id IS NULL\n");
+    psStringAppend(&joinWhereClause, "\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);
+    psStringAppend(&diffWhereClause, "\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);
+    psStringAppend(&diffWhereClause, "\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(&diffWhereClause, "\nAND ((diffRun.reduction = '%s') OR (diffRun.reduction IS NULL))",reduction);
   }
 
@@ -1296,5 +1307,5 @@
 
   // This is just a simple query, so we don't need to do a transaction
-  if (!p_psDBRunQueryF(config->dbh, query, whereClauseString)) {
+  if (!p_psDBRunQueryF(config->dbh, query, whereClauseString, diffWhereClause,joinWhereClause)) {
     psError(PS_ERR_UNKNOWN, false, "database error");
     psFree(query);
@@ -1327,4 +1338,5 @@
     return true;
   }
+  
   if (pretend) {
     // negative simple so the default is true
@@ -1518,5 +1530,5 @@
 
 #if (0)
-static bool definewarpstackMode(pxConfig *config)
+static bool definewarpstackOldMethodMode(pxConfig *config)
 {
     PS_ASSERT_PTR_NON_NULL(config, false);
@@ -1530,4 +1542,5 @@
     PXOPT_COPY_STR(config->args, expWhere, "-filter", "filter", "==");
     PXOPT_COPY_STR(config->args, expWhere, "-comment", "comment", "LIKE");
+    
     PXOPT_COPY_S64(config->args, warp1Where, "-warp_id", "warpRun.warp_id", "==");
     PXOPT_COPY_STR(config->args, warp1Where, "-warp_label", "warpRun.label", "==");
@@ -1798,4 +1811,6 @@
         }
 
+	// CZW force available off.  If we're using this very-expensive mode, we need to get the one thing it does correctly.
+	available = false;;
         if (!available && (num != skycell_count)) {
             psTrace("difftool", PS_LOG_INFO, "%" PRId64 " skyfiles with stack found for warp_id %" PRId64
Index: /branches/eam_branches/ipp-20150112/ippTools/src/difftool.h
===================================================================
--- /branches/eam_branches/ipp-20150112/ippTools/src/difftool.h	(revision 38048)
+++ /branches/eam_branches/ipp-20150112/ippTools/src/difftool.h	(revision 38049)
@@ -54,4 +54,5 @@
     DIFFTOOL_MODE_LISTSSRUN,
     DIFFTOOL_MODE_SETSKYFILETOUPDATE,
+    //    DIFFTOOL_MODE_DEFINEWARPSTACKOLDMETHOD,
 } difftoolMode;
 
Index: /branches/eam_branches/ipp-20150112/ippTools/src/difftoolConfig.c
===================================================================
--- /branches/eam_branches/ipp-20150112/ippTools/src/difftoolConfig.c	(revision 38048)
+++ /branches/eam_branches/ipp-20150112/ippTools/src/difftoolConfig.c	(revision 38049)
@@ -272,4 +272,37 @@
     psMetadataAddBool(definewarpstackArgs, PS_LIST_TAIL, "-pretend", 0, "list results but to not queue", false);
 
+    pxspaceBoxAddArguments(definewarpstackArgs);
+
+#if (0)    
+    // -definewarpstackOldMethod
+    psMetadata *definewarpstackOldMethodArgs = psMetadataAlloc();
+    psMetadataAddS64(definewarpstackOldMethodArgs, PS_LIST_TAIL, "-warp_id", 0, "search by warp ID", 0);
+    psMetadataAddS64(definewarpstackOldMethodArgs, PS_LIST_TAIL, "-exp_id", 0, "search by exposure ID", 0);
+    psMetadataAddStr(definewarpstackOldMethodArgs, PS_LIST_TAIL, "-skycell_id", 0, "search by skycell ID", NULL);
+    psMetadataAddStr(definewarpstackOldMethodArgs, PS_LIST_TAIL, "-tess_id", 0, "search by tess ID", NULL);
+    psMetadataAddBool(definewarpstackOldMethodArgs, PS_LIST_TAIL, "-bothways",  0,          "do the subtraction both ways?", false);
+    psMetadataAddStr(definewarpstackOldMethodArgs, PS_LIST_TAIL, "-filter", 0, "search by filter", NULL);
+    psMetadataAddStr(definewarpstackOldMethodArgs, PS_LIST_TAIL, "-comment", 0, "search by comment (LIKE)", NULL);
+    psMetadataAddStr(definewarpstackOldMethodArgs, PS_LIST_TAIL, "-stack_label", 0, "search by stack label", NULL);
+    psMetadataAddStr(definewarpstackOldMethodArgs, PS_LIST_TAIL, "-stack_data_group", 0, "search by stack data_group", NULL);
+    psMetadataAddStr(definewarpstackOldMethodArgs, PS_LIST_TAIL, "-warp_label", 0, "search by warp label", NULL);
+    psMetadataAddStr(definewarpstackOldMethodArgs, PS_LIST_TAIL, "-data_group", 0, "search by data_group", NULL);
+    psMetadataAddF32(definewarpstackOldMethodArgs, PS_LIST_TAIL, "-good_frac", 0, "minimum good fraction of skycell", NAN);
+    psMetadataAddStr(definewarpstackOldMethodArgs, PS_LIST_TAIL, "-set_workdir", 0, "define workdir (required)", NULL);
+    psMetadataAddStr(definewarpstackOldMethodArgs, PS_LIST_TAIL, "-set_label",  0, "define label", NULL);
+    psMetadataAddStr(definewarpstackOldMethodArgs, PS_LIST_TAIL, "-set_reduction",  0, "define reduction class", NULL);
+    psMetadataAddTime(definewarpstackOldMethodArgs, PS_LIST_TAIL, "-set_registered", 0, "time detrend run was registered", now);
+    psMetadataAddStr(definewarpstackOldMethodArgs, PS_LIST_TAIL, "-set_data_group",  0,     "define data group", NULL);
+    psMetadataAddStr(definewarpstackOldMethodArgs, PS_LIST_TAIL, "-set_dist_group",  0,     "define dist group", NULL);
+    psMetadataAddStr(definewarpstackOldMethodArgs, PS_LIST_TAIL, "-set_note",  0,           "define note", NULL);
+    psMetadataAddBool(definewarpstackOldMethodArgs, PS_LIST_TAIL, "-new-templates", 0, "also search for diffs with new template", false);
+    psMetadataAddBool(definewarpstackOldMethodArgs, PS_LIST_TAIL, "-rerun", 0, "define new run even if one exists", false);
+    psMetadataAddBool(definewarpstackOldMethodArgs, PS_LIST_TAIL, "-available", 0, "define new run even if no stacks available for some skycells", false);
+    psMetadataAddBool(definewarpstackOldMethodArgs, PS_LIST_TAIL, "-simple", 0, "use the simple output format", false);
+    psMetadataAddBool(definewarpstackOldMethodArgs, PS_LIST_TAIL, "-pretend", 0, "list results but to not queue", false);
+
+    pxspaceBoxAddArguments(definewarpstackOldMethodArgs);
+#endif
+    
     // -definewarpwarp
     psMetadata *definewarpwarpArgs = psMetadataAlloc();
@@ -478,4 +511,5 @@
     PXOPT_ADD_MODE("-definepoprun",     "", DIFFTOOL_MODE_DEFINEPOPRUN,      definepoprunArgs);
     PXOPT_ADD_MODE("-definewarpstack",  "", DIFFTOOL_MODE_DEFINEWARPSTACK,   definewarpstackArgs);
+    //    PXOPT_ADD_MODE("-definewarpstackOldMethod",  "", DIFFTOOL_MODE_DEFINEWARPSTACKOLDMETHOD,   definewarpstackOldMethodArgs);
     PXOPT_ADD_MODE("-definewarpwarp",   "", DIFFTOOL_MODE_DEFINEWARPWARP,    definewarpwarpArgs);
     PXOPT_ADD_MODE("-definestackstack", "", DIFFTOOL_MODE_DEFINESTACKSTACK,  definestackstackArgs);
Index: /branches/eam_branches/ipp-20150112/ippTools/src/pstamptool.c
===================================================================
--- /branches/eam_branches/ipp-20150112/ippTools/src/pstamptool.c	(revision 38048)
+++ /branches/eam_branches/ipp-20150112/ippTools/src/pstamptool.c	(revision 38049)
@@ -1180,5 +1180,5 @@
 
     // negative simple so the default is true
-    if (!ippdbPrintMetadatas(stdout, output, "pstampDataStore", !simple)) {
+    if (!ippdbPrintMetadatas(stdout, output, "pstampProject", !simple)) {
         psError(PS_ERR_UNKNOWN, false, "failed to print array");
         psFree(output);
Index: /branches/eam_branches/ipp-20150112/ippTools/src/pxspace.c
===================================================================
--- /branches/eam_branches/ipp-20150112/ippTools/src/pxspace.c	(revision 38048)
+++ /branches/eam_branches/ipp-20150112/ippTools/src/pxspace.c	(revision 38049)
@@ -57,4 +57,40 @@
 }
 
+bool pxspaceBoxAddWhere(pxConfig *config, psMetadata *where)
+{
+  PXOPT_LOOKUP_F64(ra_min, config->args, "-ra_min", false, false);
+  PXOPT_LOOKUP_F64(ra_max, config->args, "-ra_max", false, false);
+  PXOPT_LOOKUP_F64(dec_min, config->args, "-dec_min", false, false);
+  PXOPT_LOOKUP_F64(dec_max, config->args, "-dec_max", false, false);
+
+  if (ra_min) {
+    ra_min *= PS_RAD_DEG;
+    psMetadataAddF32(where,PS_LIST_TAIL,"rawExp.ra",PS_META_DUPLICATE_OK, ">=", ra_min);
+  }
+  if (ra_max) {
+    ra_max *= PS_RAD_DEG;
+    psMetadataAddF32(where,PS_LIST_TAIL,"rawExp.ra",PS_META_DUPLICATE_OK, "<=", ra_max);
+  }
+  if (dec_min) {
+    dec_min *= PS_RAD_DEG;
+    psMetadataAddF32(where,PS_LIST_TAIL,"rawExp.decl",PS_META_DUPLICATE_OK, ">=", dec_min);
+  }
+  if (dec_max) {
+    dec_max *= PS_RAD_DEG;
+    psMetadataAddF32(where,PS_LIST_TAIL,"rawExp.decl",PS_META_DUPLICATE_OK, "<=", dec_max);
+  }
+    
+  return true;
+}
+
+void pxspaceBoxAddArguments(psMetadata *md)
+{
+    psMetadataAddF64(md,  PS_LIST_TAIL, "-ra_min",            0, "search by right ascension (degrees)", NAN);
+    psMetadataAddF64(md,  PS_LIST_TAIL, "-dec_min",           0, "search by declination (degrees)", NAN);
+    psMetadataAddF64(md,  PS_LIST_TAIL, "-ra_max",            0, "search by right ascension (degrees)", NAN);
+    psMetadataAddF64(md,  PS_LIST_TAIL, "-dec_max",           0, "search by declination (degrees)", NAN);
+}
+  
+
 void pxskycellAddArguments(psMetadata *md)
 {
Index: /branches/eam_branches/ipp-20150112/ippTools/src/pxspace.h
===================================================================
--- /branches/eam_branches/ipp-20150112/ippTools/src/pxspace.h	(revision 38048)
+++ /branches/eam_branches/ipp-20150112/ippTools/src/pxspace.h	(revision 38049)
@@ -24,4 +24,7 @@
 extern void pxspaceAddArguments(psMetadata *md);
 
+extern bool pxspaceBoxAddWhere(pxConfig *config, psMetadata *where);
+extern void pxspaceBoxAddArguments(psMetadata *md);
+
 extern bool pxskycellAddWhere(pxConfig *config, psMetadata *where);
 extern void pxskycellAddArguments(psMetadata *md);
Index: /branches/eam_branches/ipp-20150112/ippTools/src/staticskytool.c
===================================================================
--- /branches/eam_branches/ipp-20150112/ippTools/src/staticskytool.c	(revision 38048)
+++ /branches/eam_branches/ipp-20150112/ippTools/src/staticskytool.c	(revision 38049)
@@ -650,4 +650,5 @@
     psMetadata *where = psMetadataAlloc();
     PXOPT_COPY_S64(config->args, where, "-sky_id",     "staticskyRun.sky_id", "==");
+    PXOPT_COPY_S64(config->args, where, "-stack_id",   "staticskyInput.stack_id", "==");
     PXOPT_COPY_STR(config->args, where, "-label",      "staticskyRun.label", "==");
     PXOPT_COPY_STR(config->args, where, "-data_group", "staticskyRun.data_group", "LIKE");
Index: /branches/eam_branches/ipp-20150112/ippTools/src/staticskytoolConfig.c
===================================================================
--- /branches/eam_branches/ipp-20150112/ippTools/src/staticskytoolConfig.c	(revision 38048)
+++ /branches/eam_branches/ipp-20150112/ippTools/src/staticskytoolConfig.c	(revision 38049)
@@ -129,4 +129,5 @@
     psMetadataAddStr(resultArgs, PS_LIST_TAIL, "-data_group", 0, "search by data_group (LIKE comparison)", NULL);
     psMetadataAddS16(resultArgs, PS_LIST_TAIL, "-num_filters", 0, "search by number of filters in the inputs", 0);
+    psMetadataAddS64(resultArgs, PS_LIST_TAIL, "-stack_id", 0, "search by input stack ID (if used num_filters will be wrong)", 0);
     pxskycellAddArguments(resultArgs);
     psMetadataAddS16(resultArgs, PS_LIST_TAIL, "-fault", 0, "search by fault code", 0);
