Index: branches/eam_branches/ipp-20110505/ippTools/share/laptool_definerun.sql
===================================================================
--- branches/eam_branches/ipp-20110505/ippTools/share/laptool_definerun.sql	(revision 31458)
+++ branches/eam_branches/ipp-20110505/ippTools/share/laptool_definerun.sql	(revision 31587)
@@ -1,3 +1,3 @@
-SELECT want.exp_id, have.chip_id, false as private, true as active, false as pairwise
+SELECT DISTINCT want.exp_id, have.chip_id, false as private, true as active, false as pairwise
   FROM
   (SELECT exp_id FROM rawExp 
@@ -8,5 +8,5 @@
   ) AS want
   LEFT JOIN 
-  (SELECT *
+  (SELECT exp_id,MAX(chip_id) AS chip_id
      FROM lapExp 
      where private IS FALSE 
Index: branches/eam_branches/ipp-20110505/ippTools/share/laptool_exposures.sql
===================================================================
--- branches/eam_branches/ipp-20110505/ippTools/share/laptool_exposures.sql	(revision 31458)
+++ branches/eam_branches/ipp-20110505/ippTools/share/laptool_exposures.sql	(revision 31587)
@@ -1,43 +1,41 @@
-SELECT DISTINCT 
-    D.*,diffRun.state,
-    coalesce(CONVERT(sum(others.private),SIGNED),0) AS needs_remade 
---      0 AS needs_remade
-    FROM (
-  SELECT DISTINCT 
-      W.*,CONVERT(IFNULL(diff1.diff_id,diff2.diff_id),SIGNED) AS diff_id FROM (
-    SELECT DISTINCT
-        lap_id,lapRun.tess_id,projection_cell,filter,lapRun.state as lapRun_state, lapRun.registered, lapRun.fault, lapRun.label, lapRun.dist_group,
-        lapExp.exp_id,lapExp.chip_id,lapExp.pair_id,private,pairwise,active,lapExp.data_state,
-        chipRun.state as chipRun_state, 
-	coalesce(CONVERT(sum(chipProcessedImfile.fault),SIGNED),0) as chip_faults, 
-	coalesce(CONVERT(sum(chipProcessedImfile.quality),SIGNED),0) as chip_quality,
-        camRun.cam_id, camRun.state as camRun_state,   
-	coalesce(CONVERT(sum(camProcessedExp.fault),SIGNED),0) AS cam_faults, 
-	coalesce(CONVERT(sum(camProcessedExp.quality),SIGNED),0) AS cam_quality,
-	fakeRun.fake_id, fakeRun.state as fakeRun_state, 
-	coalesce(CONVERT(sum(fakeProcessedImfile.fault),SIGNED),0) as fake_faults,
-  	warpRun.warp_id, warpRun.state as warpRun_state, 
-	coalesce(CONVERT(sum(warpSkyfile.fault),SIGNED),0) as warp_faults, 
-	coalesce(CONVERT(sum(warpSkyfile.quality),SIGNED),0) as warp_quality,
-        warpRun.magicked
-    FROM lapRun JOIN lapExp USING(lap_id)
-    LEFT JOIN chipRun USING(chip_id)
-    LEFT JOIN chipProcessedImfile USING(chip_id)
-    LEFT JOIN camRun USING(chip_id) LEFT JOIN camProcessedExp USING(cam_id)
-    LEFT JOIN fakeRun USING(cam_id) LEFT JOIN fakeProcessedImfile USING(fake_id)
-    LEFT JOIN warpRun USING(fake_id) LEFT JOIN warpSkyfile USING(warp_id)
-    WHERE    @WHERE@
-    AND (warpSkyfile.quality IS NULL OR
-         (warpSkyfile.quality != 8007      -- known cases where quality != 0, but everything's fine.
-          AND warpSkyfile.quality != 3006  -- known cases where quality != 0, but everything's fine.
-	  ))
-    GROUP BY lap_id,exp_id
-    ) AS W
--- This was unreasonably slow in testing, so that's why I'm using a subquery here.
-  LEFT JOIN diffInputSkyfile AS diff1 ON (W.warp_id = diff1.warp1)
-  LEFT JOIN diffInputSkyfile AS diff2 ON (W.warp_id = diff2.warp2)
-) AS D
+select DISTINCT V3.*,
+       diffRun.diff_id,diffRun.state as diffRun_state,
+       coalesce(CONVERT(sum(diffSkyfile.quality != 0),SIGNED),0) AS diff_bad_quality,
+       coalesce(CONVERT(count(diffSkyfile.diff_id),SIGNED),0) AS diff_component_count
+       FROM
+( select V2.*,
+       warpRun.warp_id,warpRun.state as warpRun_state,
+       coalesce(CONVERT(sum(warpSkyfile.quality != 0),SIGNED),0) AS warp_bad_quality,
+       coalesce(CONVERT(count(warpSkyfile.warp_id),SIGNED),0) AS warp_component_count,
+       warpRun.magicked
+       FROM
+( select V1.*,
+       camRun.cam_id,camRun.state as camRun_state,
+       coalesce(CONVERT(sum(camProcessedExp.quality != 0),SIGNED),0) AS cam_bad_quality,
+       coalesce(CONVERT(count(camProcessedExp.cam_id),SIGNED),0) AS cam_component_count,
+       fakeRun.fake_id,fakeRun.state as fakeRun_state FROM
+( SELECT DISTINCT
+       lap_id,lapRun.tess_id,projection_cell,filter,lapRun.state as lapRun_state, lapRun.registered, lapRun.fault, lapRun.label, lapRun.dist_group,
+       lapExp.exp_id,lapExp.chip_id,lapExp.pair_id,private,pairwise,active,lapExp.data_state,
+       chipRun.state as chipRun_state,
+       coalesce(CONVERT(sum(chipProcessedImfile.quality != 0),SIGNED),0) AS chip_bad_quality,
+       coalesce(CONVERT(count(chipProcessedImfile.chip_id),SIGNED),0) AS chip_component_count
+       FROM lapRun JOIN lapExp USING(lap_id)
+       LEFT JOIN chipRun USING(chip_id) LEFT JOIN chipProcessedImfile USING(chip_id)
+WHERE @WHERE@ 
+       GROUP BY lap_id,exp_id
+       ) AS V1
+       LEFT JOIN camRun USING(chip_id) LEFT JOIN camProcessedExp USING(cam_id)
+       LEFT JOIN fakeRun USING(cam_id)
+       GROUP BY lap_id,exp_id
+  ) AS V2
+  LEFT JOIN warpRun USING(fake_id) LEFT JOIN warpSkyfile USING(warp_id)
+  GROUP BY lap_id,exp_id
+) AS V3
+LEFT JOIN
+  (SELECT DISTINCT diff_id,warp1,warp2 FROM diffInputSkyfile) AS DI ON
+  (DI.warp1 = warp_id OR DI.warp2 = warp_id)
 LEFT JOIN diffRun USING(diff_id)
-LEFT JOIN lapExp AS others ON (D.chip_id = others.chip_id AND D.lap_id != others.lap_id)
+LEFT JOIN diffSkyfile USING(diff_id)
 GROUP BY lap_id,exp_id
 
Index: branches/eam_branches/ipp-20110505/ippTools/src/disttool.c
===================================================================
--- branches/eam_branches/ipp-20110505/ippTools/src/disttool.c	(revision 31458)
+++ branches/eam_branches/ipp-20110505/ippTools/src/disttool.c	(revision 31587)
@@ -447,5 +447,5 @@
 
     if (pretend) {
-        if (!ippdbPrintMetadatas(stdout, output, "newdistRuns", true)) {
+        if (!ippdbPrintMetadatas(stdout, output, "newdistRuns", !simple)) {
             psError(PS_ERR_UNKNOWN, false, "failed to print array");
             psFree(output);
Index: branches/eam_branches/ipp-20110505/ippTools/src/laptool.c
===================================================================
--- branches/eam_branches/ipp-20110505/ippTools/src/laptool.c	(revision 31458)
+++ branches/eam_branches/ipp-20110505/ippTools/src/laptool.c	(revision 31587)
@@ -384,8 +384,10 @@
   PXOPT_COPY_STR(config->args, where, "-projection_cell", "projection_cell", "==");
   PXOPT_COPY_STR(config->args, where, "-filter", "filter", "==");
-  PXOPT_COPY_STR(config->args, where, "-label", "label", "==");
+  //  PXOPT_COPY_STR(config->args, where, "-label", "label", "==");
   PXOPT_COPY_STR(config->args, where, "-state", "state", "==");
   PXOPT_COPY_STR(config->args, where, "-fault", "fault", "==");
 
+  pxAddLabelSearchArgs(config, where, "-label", "lapRun.label", "==");
+  
   psString query = pxDataGet("laptool_pendingrun.sql");
   if (!query) {
@@ -560,5 +562,5 @@
   psMetadata *where = psMetadataAlloc();
   PXOPT_COPY_S64(config->args, where, "-lap_id", "lap_id", "==");
-  PXOPT_COPY_S64(config->args, where, "-exp_id", "exp_id", "==");
+  PXOPT_COPY_S64(config->args, where, "-exp_id", "lapExp.exp_id", "==");
   
   psString query = pxDataGet("laptool_exposures.sql");
Index: branches/eam_branches/ipp-20110505/ippTools/src/laptoolConfig.c
===================================================================
--- branches/eam_branches/ipp-20110505/ippTools/src/laptoolConfig.c	(revision 31458)
+++ branches/eam_branches/ipp-20110505/ippTools/src/laptoolConfig.c	(revision 31587)
@@ -69,8 +69,21 @@
   ADD_OPT(Str, pendingrunArgs, "-projection_cell",            "search by projection cell", NULL);
   ADD_OPT(Str, pendingrunArgs, "-filter",                     "search by filter", NULL);
-  ADD_OPT(Str, pendingrunArgs, "-label",                      "search by LAP run label", NULL);
+  //  ADD_OPT(Str, pendingrunArgs, "-label",                      "search by LAP run label", NULL);
+  psMetadataAddStr(pendingrunArgs, PS_LIST_TAIL, "-label", PS_META_DUPLICATE_OK, "search by LAP run label", NULL);
   ADD_OPT(Str, pendingrunArgs, "-state",                      "search by LAP run state", NULL);
   ADD_OPT(Str, pendingrunArgs, "-fault",                      "search by LAP run fault", NULL);
   ADD_OPT(Bool,pendingrunArgs, "-simple",                     "use the simple output format", false);
+
+  // -listrun
+  psMetadata *listrunArgs = psMetadataAlloc();
+  ADD_OPT(S64, listrunArgs, "-seq_id",                     "search by LAP sequence ID", 0);
+  ADD_OPT(S64, listrunArgs, "-lap_id",                     "search by LAP run ID", 0);
+  ADD_OPT(Str, listrunArgs, "-projection_cell",            "search by projection cell", NULL);
+  ADD_OPT(Str, listrunArgs, "-filter",                     "search by filter", NULL);
+  //  ADD_OPT(Str, listrunArgs, "-label",                      "search by LAP run label", NULL);
+  psMetadataAddStr(listrunArgs, PS_LIST_TAIL, "-label", PS_META_DUPLICATE_OK, "search by LAP run label", NULL);
+  ADD_OPT(Str, listrunArgs, "-state",                      "search by LAP run state", NULL);
+  ADD_OPT(Str, listrunArgs, "-fault",                      "search by LAP run fault", NULL);
+  ADD_OPT(Bool,listrunArgs, "-simple",                     "use the simple output format", false);
 
   // -updaterun
@@ -128,9 +141,10 @@
   psMetadata *argSets = psMetadataAlloc();
   psMetadata *modes = psMetadataAlloc();
-
+  
   PXOPT_ADD_MODE("-definesequence",          "", LAPTOOL_MODE_DEFINESEQUENCE,   definesequenceArgs);
   PXOPT_ADD_MODE("-listsequence",            "", LAPTOOL_MODE_LISTSEQUENCE,     listsequenceArgs);
   PXOPT_ADD_MODE("-definerun",               "", LAPTOOL_MODE_DEFINERUN,        definerunArgs);
   PXOPT_ADD_MODE("-pendingrun",              "", LAPTOOL_MODE_PENDINGRUN,       pendingrunArgs);
+  PXOPT_ADD_MODE("-listrun",                 "", LAPTOOL_MODE_PENDINGRUN,       listrunArgs);
   PXOPT_ADD_MODE("-updaterun",               "", LAPTOOL_MODE_UPDATERUN,        updaterunArgs);
   PXOPT_ADD_MODE("-pendingexp",              "", LAPTOOL_MODE_PENDINGEXP,       pendingexpArgs);
Index: branches/eam_branches/ipp-20110505/ippTools/src/pstamptool.c
===================================================================
--- branches/eam_branches/ipp-20110505/ippTools/src/pstamptool.c	(revision 31458)
+++ branches/eam_branches/ipp-20110505/ippTools/src/pstamptool.c	(revision 31587)
@@ -843,5 +843,5 @@
     psFree(where);
 
-    psStringAppend(&query, " ORDER BY priority DESC, req_id");
+    psStringAppend(&query, " ORDER BY priority DESC, req_id, job_id");
 
     // treat limit == 0 as "no limit"
@@ -1323,5 +1323,5 @@
     psFree(where);
 
-    psStringAppend(&query, " ORDER BY priority DESC, req_id");
+    psStringAppend(&query, " ORDER BY priority DESC, req_id, dep_id");
 
     // treat limit == 0 as "no limit"
Index: branches/eam_branches/ipp-20110505/ippTools/src/pubtoolConfig.c
===================================================================
--- branches/eam_branches/ipp-20110505/ippTools/src/pubtoolConfig.c	(revision 31458)
+++ branches/eam_branches/ipp-20110505/ippTools/src/pubtoolConfig.c	(revision 31587)
@@ -48,5 +48,7 @@
     psMetadataAddStr(defineclientArgs, PS_LIST_TAIL, "-product", 0, "define product (required)", NULL);
     psMetadataAddStr(defineclientArgs, PS_LIST_TAIL, "-workdir", 0, "define workdir (required)", NULL);
+    psMetadataAddS16(defineclientArgs, PS_LIST_TAIL, "-output_format", 0, "define output format", 2);
     psMetadataAddStr(defineclientArgs, PS_LIST_TAIL, "-comment", 0, "define comment", NULL);
+    psMetadataAddStr(defineclientArgs, PS_LIST_TAIL, "-name", 0, "define name", NULL);
     psMetadataAddBool(defineclientArgs, PS_LIST_TAIL, "-unmagicked", 0, "allow unmagicked data?", false);
 
Index: branches/eam_branches/ipp-20110505/ippTools/src/stacktool.c
===================================================================
--- branches/eam_branches/ipp-20110505/ippTools/src/stacktool.c	(revision 31458)
+++ branches/eam_branches/ipp-20110505/ippTools/src/stacktool.c	(revision 31587)
@@ -246,5 +246,6 @@
     PXOPT_COPY_STR(config->args,  where, "-select_data_group",         "warpRun.data_group", "==");
     pxAddLabelSearchArgs (config, where, "-select_label",              "warpRun.label", "LIKE"); // define using warp label
-
+    pxAddLabelSearchArgs (config, where, "-warp_id",                   "warpRun.warp_id", "==");
+    
     // these are used to build the HAVING restriction
     PXOPT_COPY_S32(config->args, having, "-min_num", "num_warp", ">=");
@@ -508,4 +509,7 @@
           association->sass_id = sass_id;
         }
+	else {
+	  sass_id = association->sass_id;
+	}
         // Insert the map entry for this row.
         stackAssociationMapRow *maprow = stackAssociationMapRowAlloc(sass_id,stack_id);
Index: branches/eam_branches/ipp-20110505/ippTools/src/stacktoolConfig.c
===================================================================
--- branches/eam_branches/ipp-20110505/ippTools/src/stacktoolConfig.c	(revision 31458)
+++ branches/eam_branches/ipp-20110505/ippTools/src/stacktoolConfig.c	(revision 31587)
@@ -91,4 +91,5 @@
     psMetadataAddF64(definebyqueryArgs, PS_LIST_TAIL, "-select_zpt_obs_max", 0, "define max zero point", NAN);
     psMetadataAddF64(definebyqueryArgs, PS_LIST_TAIL, "-select_astrom", 0, "define max astrometry rms", NAN);
+    psMetadataAddS64(definebyqueryArgs, PS_LIST_TAIL, "-warp_id", PS_META_DUPLICATE_OK, "include this warp ID (multiple OK)", 0);
     psMetadataAddS32(definebyqueryArgs, PS_LIST_TAIL, "-random", 0, "use this number of random elements", 0);
     psMetadataAddS32(definebyqueryArgs, PS_LIST_TAIL, "-min_num", 0, "minimum number of inputs", 0);
