Index: /trunk/ippTools/scripts/dettest.sh
===================================================================
--- /trunk/ippTools/scripts/dettest.sh	(revision 14077)
+++ /trunk/ippTools/scripts/dettest.sh	(revision 14078)
@@ -56,5 +56,5 @@
 dettool -addresidexp -det_id $det_id -exp_id 2 -recip myrecipe -bg 1 -bg_stdev 2 -bg_mean_stdev 3 -path_base jpeg1 -reject || exit 1
 
-dettool -residdetrun || exit 1
+dettool -todetrunsummary || exit 1
 dettool -residexp || exit 1
 dettool -updateresidexp -det_id $det_id -iteration 0 -recip yourrecipe || exit 1
@@ -63,4 +63,7 @@
 
 dettool -adddetrunsummary -det_id $det_id -iteration 0 -bg 1 -bg_stdev 2 -bg_mean_stdev 3 -accept || exit 1
+
+dettool -todetrunsummary || exit 1
+
 dettool -residexp || exit 1
 
Index: /trunk/ippTools/share/Makefile.am
===================================================================
--- /trunk/ippTools/share/Makefile.am	(revision 14077)
+++ /trunk/ippTools/share/Makefile.am	(revision 14078)
@@ -13,8 +13,9 @@
 	dettool_find_completed_runs.sql \
 	dettool_raw.sql \
+	dettool_todetrunsummary.sql \
 	dettool_tonormalizedexp.sql \
 	dettool_tonormalizedstat.sql \
 	dettool_toprocessedexp.sql \
-    dettool_toprocessedimfile.sql \
+	dettool_toprocessedimfile.sql \
 	dettool_toresidexp.sql \
 	dettool_toresidimfile.sql \
Index: /trunk/ippTools/share/dettool_todetrunsummary.sql
===================================================================
--- /trunk/ippTools/share/dettool_todetrunsummary.sql	(revision 14078)
+++ /trunk/ippTools/share/dettool_todetrunsummary.sql	(revision 14078)
@@ -0,0 +1,47 @@
+-- select detRun.det_id
+-- select detRun.iteration
+-- select detRun.det_type
+-- by:
+-- find the current iteration bassed on det_id
+-- find all exp_ids in the current det_id/iteration from detInputExp
+-- find all exp_ids in the current det_id/iteration from detResidExp
+-- compare the counts of exp_ids
+
+SELECT DISTINCT
+    det_id,
+    iteration,
+    det_type,
+    mode,
+    workdir,
+    camera
+FROM
+    (SELECT DISTINCT
+        detRun.det_id,
+        detRun.iteration,
+        detRun.det_type,
+        detRun.mode,
+        detRun.workdir,
+        detInputExp.exp_id,
+        rawExp.camera
+    FROM detRun
+    JOIN detInputExp
+        USING(det_id, iteration)
+    JOIN rawExp
+        ON detInputExp.exp_id = rawExp.exp_id
+    LEFT JOIN detResidExp
+        ON detRun.det_id = detResidExp.det_id
+        AND detRun.iteration = detResidExp.iteration
+        AND detInputExp.exp_id = detResidExp.exp_id
+    LEFT JOIN detRunSummary
+        ON detRun.det_id = detRunSummary.det_id
+        AND detRun.iteration = detRunSummary.iteration
+    WHERE
+        detRun.state = 'run'
+        AND detRunSummary.det_id IS NULL
+        AND detRunSummary.iteration IS NULL
+    GROUP BY
+        detRun.det_id,
+        detRun.iteration
+    HAVING
+        COUNT(detResidExp.exp_id) = COUNT(detInputExp.exp_id)
+    ) AS Foo
Index: /trunk/ippTools/src/dettool.c
===================================================================
--- /trunk/ippTools/src/dettool.c	(revision 14077)
+++ /trunk/ippTools/src/dettool.c	(revision 14078)
@@ -5272,48 +5272,9 @@
      */
 
-    // select detRun.det_id
-    // select detRun.iteration
-    // select detRun.det_type
-    // by:
-    // find the current iteration bassed on det_id
-    // find all exp_ids in the current det_id/iteration from detInputExp
-    // find all exp_ids in the current det_id/iteration from detResidExp
-    // compare the counts of exp_ids
-
-    psString query = psStringCopy(
-        "SELECT DISTINCT\n"
-        "   det_id,\n"
-        "   iteration,\n"
-        "   det_type,\n"
-        "   mode,\n"
-        "   workdir,\n"
-        "   camera\n"
-        " FROM\n"
-        "   (SELECT DISTINCT\n"
-        "       detRun.det_id,\n"
-        "       detRun.iteration,\n"
-        "       detRun.det_type,\n"
-        "       detRun.mode,\n"
-        "       detRun.workdir,\n"
-        "       detInputExp.exp_id,\n"
-        "       rawExp.camera\n"
-        "   FROM detRun\n"
-        "   JOIN detInputExp\n"
-        "       USING(det_id, iteration)\n"
-        "   JOIN rawExp\n"
-        "       ON detInputExp.exp_id = rawExp.exp_id\n"
-        "   LEFT JOIN detResidExp\n"
-        "       ON detRun.det_id = detResidExp.det_id\n"
-        "       AND detRun.iteration = detResidExp.iteration\n"
-        "       AND detInputExp.exp_id = detResidExp.exp_id\n"
-        "   WHERE\n"
-        "       detRun.state = 'run'\n"
-        "   GROUP BY\n"
-        "       detRun.det_id,\n"
-        "       detRun.iteration\n"
-        "   HAVING\n"
-        "       COUNT(detResidExp.exp_id) = COUNT(detInputExp.exp_id)\n"
-        " ) AS Foo\n"
-        );
+    psString query = pxDataGet("dettool_todetrunsummary.sql");
+    if (!query) {
+        psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
+        return false;
+    }
 
     // XXX does it make sense to accept any search params?
