Index: trunk/ippTools/share/Makefile.am
===================================================================
--- trunk/ippTools/share/Makefile.am	(revision 19325)
+++ trunk/ippTools/share/Makefile.am	(revision 19334)
@@ -10,4 +10,6 @@
      camtool_reset_faulted_runs.sql \
      camtool_revertprocessedexp.sql \
+     chiptool_change_exp_state.sql \
+     chiptool_change_imfile_data_state.sql \
      chiptool_completely_processed_exp.sql \
      chiptool_donecleanup.sql \
Index: trunk/ippTools/share/chiptool_change_exp_state.sql
===================================================================
--- trunk/ippTools/share/chiptool_change_exp_state.sql	(revision 19334)
+++ trunk/ippTools/share/chiptool_change_exp_state.sql	(revision 19334)
@@ -0,0 +1,11 @@
+UPDATE chipRun
+    SET state = '%s'
+    WHERE
+    chipRun.chip_id = %lld
+    AND (SELECT
+        COUNT(chip_id)
+        FROM chipProcessedImfile
+        WHERE
+            chipProcessedImfile.chip_id = chipRun.chip_id
+            AND data_state != '%s'
+        ) = 0
Index: trunk/ippTools/share/chiptool_change_imfile_data_state.sql
===================================================================
--- trunk/ippTools/share/chiptool_change_imfile_data_state.sql	(revision 19334)
+++ trunk/ippTools/share/chiptool_change_imfile_data_state.sql	(revision 19334)
@@ -0,0 +1,12 @@
+UPDATE chipProcessedImfile
+    SET 
+    data_state = '%s'
+WHERE
+    chip_id = %lld
+    AND class_id = '%s'
+    -- only update if chipRun.state has the expected value
+    AND (
+        SELECT state from chipRun where chipRun.chip_id = chipProcessedImfile.chip_id
+    ) = '%s'
+    
+
Index: trunk/ippTools/share/chiptool_pendingcleanupimfile.sql
===================================================================
--- trunk/ippTools/share/chiptool_pendingcleanupimfile.sql	(revision 19325)
+++ trunk/ippTools/share/chiptool_pendingcleanupimfile.sql	(revision 19334)
@@ -14,2 +14,3 @@
 WHERE
     chipRun.state = 'goto_cleaned'
+    AND chipProcessedImfile.data_state = 'full'
Index: trunk/ippTools/share/chiptool_pendingimfile.sql
===================================================================
--- trunk/ippTools/share/chiptool_pendingimfile.sql	(revision 19325)
+++ trunk/ippTools/share/chiptool_pendingimfile.sql	(revision 19334)
@@ -20,19 +20,10 @@
     ON chipRun.label = chipMask.label
 WHERE
-    chipRun.state = 'new'
+    (chipRun.state = 'new'
     AND chipProcessedImfile.chip_id IS NULL
     AND chipProcessedImfile.exp_id IS NULL
     AND chipProcessedImfile.class_id IS NULL
-    AND chipMask.label IS NULL
-
--- new where logic for update.  we probably need to add a 'data_state'
--- field to chipProcessedImfile and update it (full, cleaned, etc) as
--- we cleanup or update
---    (chipRun.state = 'new'
---    AND chipProcessedImfile.chip_id IS NULL
---    AND chipProcessedImfile.exp_id IS NULL
---    AND chipProcessedImfile.class_id IS NULL
---    AND chipMask.label IS NULL) 
---    OR
---    (chipRun.state = 'update'
---    AND chipProcessedImfile.data_state = 'cleaned'
+    AND chipMask.label IS NULL)
+    OR
+    (chipRun.state = 'update'
+    AND chipProcessedImfile.data_state = 'cleaned')
Index: trunk/ippTools/share/pxadmin_create_tables.sql
===================================================================
--- trunk/ippTools/share/pxadmin_create_tables.sql	(revision 19325)
+++ trunk/ippTools/share/pxadmin_create_tables.sql	(revision 19334)
@@ -261,4 +261,5 @@
     exp_id BIGINT,
     class_id VARCHAR(64),
+    data_state VARCHAR(64),
     uri VARCHAR(255),
     bg FLOAT,
@@ -289,4 +290,5 @@
     fault SMALLINT NOT NULL,
     PRIMARY KEY(chip_id, exp_id, class_id),
+    KEY(data_state),
     KEY(fault),
     FOREIGN KEY (chip_id, exp_id)
