Index: trunk/ippTools/share/Makefile.am
===================================================================
--- trunk/ippTools/share/Makefile.am	(revision 20377)
+++ trunk/ippTools/share/Makefile.am	(revision 20397)
@@ -95,4 +95,6 @@
      flatcorr_pendingprocess.sql \
      flatcorr_inputimfile.sql \
+     flatcorr_dropchip.sql \
+     flatcorr_dropcamera.sql \
      magictool_addmask.sql \
      magictool_create_tmp_warpcomplete.sql \
Index: trunk/ippTools/share/flatcorr_chiprundone.sql
===================================================================
--- trunk/ippTools/share/flatcorr_chiprundone.sql	(revision 20377)
+++ trunk/ippTools/share/flatcorr_chiprundone.sql	(revision 20397)
@@ -12,4 +12,5 @@
 WHERE
     flatcorrRun.state = 'new'
+    AND flatcorrChipLink.include = 1
     AND chipRun.state = 'full'
     AND camRun.cam_id is NULL;
Index: trunk/ippTools/share/flatcorr_dropcamera.sql
===================================================================
--- trunk/ippTools/share/flatcorr_dropcamera.sql	(revision 20397)
+++ trunk/ippTools/share/flatcorr_dropcamera.sql	(revision 20397)
@@ -0,0 +1,5 @@
+
+UPDATE flatcorrCamLink
+  SET include = 0
+WHERE corr_id = %lld 
+  AND cam_id = %lld
Index: trunk/ippTools/share/flatcorr_dropchip.sql
===================================================================
--- trunk/ippTools/share/flatcorr_dropchip.sql	(revision 20397)
+++ trunk/ippTools/share/flatcorr_dropchip.sql	(revision 20397)
@@ -0,0 +1,5 @@
+
+UPDATE flatcorrChipLink
+  SET include = 0
+WHERE corr_id = %lld 
+  AND chip_id = %lld
Index: trunk/ippTools/share/flatcorr_pendingprocess.sql
===================================================================
--- trunk/ippTools/share/flatcorr_pendingprocess.sql	(revision 20377)
+++ trunk/ippTools/share/flatcorr_pendingprocess.sql	(revision 20397)
@@ -20,4 +20,5 @@
    JOIN flatcorrChipLink
      ON flatcorrChipLink.corr_id = flatcorrRun.corr_id
+  WHERE flatcorrChipLink.include = 1
    GROUP BY
      flatcorrChipLink.corr_id) AS t1
@@ -30,4 +31,5 @@
        ON flatcorrCamLink.cam_id = camRun.cam_id
    WHERE camRun.state = 'full'
+     AND flatcorrCamLink.include = 1
    GROUP BY
        flatcorrCamLink.corr_id) AS t2
Index: trunk/ippTools/share/pxadmin_create_tables.sql
===================================================================
--- trunk/ippTools/share/pxadmin_create_tables.sql	(revision 20377)
+++ trunk/ippTools/share/pxadmin_create_tables.sql	(revision 20397)
@@ -1100,4 +1100,5 @@
         corr_id BIGINT,
         chip_id BIGINT,
+	include TINYINT,
         PRIMARY KEY(corr_id, chip_id),
         FOREIGN KEY (corr_id)  REFERENCES  flatcorrRun(corr_id),
@@ -1109,4 +1110,5 @@
         chip_id BIGINT,
         cam_id BIGINT,
+	include TINYINT,
         PRIMARY KEY(corr_id, cam_id),
         FOREIGN KEY (corr_id)  REFERENCES  flatcorrRun(corr_id),
Index: trunk/ippTools/src/flatcorr.c
===================================================================
--- trunk/ippTools/src/flatcorr.c	(revision 20377)
+++ trunk/ippTools/src/flatcorr.c	(revision 20397)
@@ -39,4 +39,6 @@
 static bool addchipMode(pxConfig *config);
 static bool addcameraMode(pxConfig *config);
+static bool dropchipMode(pxConfig *config);
+static bool dropcameraMode(pxConfig *config);
 static bool pendingprocessMode(pxConfig *config);
 static bool addprocessMode(pxConfig *config);
@@ -69,4 +71,6 @@
         MODECASE(FLATCORR_MODE_ADDCHIP,        addchipMode);
         MODECASE(FLATCORR_MODE_ADDCAMERA,      addcameraMode);
+        MODECASE(FLATCORR_MODE_DROPCHIP,       dropchipMode);
+        MODECASE(FLATCORR_MODE_DROPCAMERA,     dropcameraMode);
         MODECASE(FLATCORR_MODE_PENDINGPROCESS, pendingprocessMode);
         MODECASE(FLATCORR_MODE_ADDPROCESS,     addprocessMode);
@@ -236,6 +240,6 @@
         }
 
-        // add a flatcorrChipLink to the flatcorr Run we just created
-        if (!flatcorrChipLinkInsert(config->dbh, corr_id, chip_id)) {
+        // add a flatcorrChipLink to the flatcorr Run we just created (initial state has include = TRUE)
+        if (!flatcorrChipLinkInsert(config->dbh, corr_id, chip_id, 1)) {
             if (!psDBRollback(config->dbh)) {
                 psError(PS_ERR_UNKNOWN, false, "database error");
@@ -337,6 +341,31 @@
     PXOPT_LOOKUP_S64(chip_id, config->args, "-chip_id", true, false);
 
-    if (!flatcorrChipLinkInsert(config->dbh, corr_id, chip_id)) {
-        psError(PS_ERR_UNKNOWN, false, "database error");
+    // add a flatcorrChipLink (initial state has include = TRUE)
+    if (!flatcorrChipLinkInsert(config->dbh, corr_id, chip_id, 1)) {
+        psError(PS_ERR_UNKNOWN, false, "database error");
+        return false;
+    }
+
+    return true;
+}
+
+static bool dropchipMode(pxConfig *config)
+{
+    PS_ASSERT_PTR_NON_NULL(config, false);
+
+    // required
+    PXOPT_LOOKUP_S64(corr_id, config->args, "-corr_id", true, false);
+    PXOPT_LOOKUP_S64(chip_id, config->args, "-chip_id", true, false);
+
+    // UPDATE flatcorrChipLink set include = 0 where corr_id = %lld AND chip_id = %lld
+    psString query = pxDataGet("flatcorr_dropchip.sql");
+    if (!query) {
+	psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
+	return false;
+    }
+
+    if (!p_psDBRunQuery(config->dbh, query, (long long) corr_id, (long long) chip_id)) {
+        psError(PS_ERR_UNKNOWN, false, "database error");
+        psFree(query);
         return false;
     }
@@ -448,6 +477,6 @@
 	psS64 cam_id = psDBLastInsertID(config->dbh);
 
-	// add the camRun entry to the flatcorrCamLink table:
-        if (!flatcorrCamLinkInsert(config->dbh, corr_id, row->chip_id, cam_id)) {
+	// add the camRun entry to the flatcorrCamLink table (include is TRUE)
+        if (!flatcorrCamLinkInsert(config->dbh, corr_id, row->chip_id, cam_id, 1)) {
             if (!psDBRollback(config->dbh)) {
                 psError(PS_ERR_UNKNOWN, false, "database error");
@@ -467,4 +496,28 @@
 
     return false;
+}
+
+static bool dropcameraMode(pxConfig *config)
+{
+    PS_ASSERT_PTR_NON_NULL(config, false);
+
+    // required
+    PXOPT_LOOKUP_S64(corr_id, config->args, "-corr_id", true, false);
+    PXOPT_LOOKUP_S64(cam_id, config->args, "-cam_id", true, false);
+
+    // UPDATE flatcorrCamLink set include = 0 where corr_id = %lld AND cam_id = %lld
+    psString query = pxDataGet("flatcorr_dropcamera.sql");
+    if (!query) {
+	psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
+	return false;
+    }
+
+    if (!p_psDBRunQuery(config->dbh, query, (long long) corr_id, (long long) cam_id)) {
+        psError(PS_ERR_UNKNOWN, false, "database error");
+        psFree(query);
+        return false;
+    }
+
+    return true;
 }
 
Index: trunk/ippTools/src/flatcorr.h
===================================================================
--- trunk/ippTools/src/flatcorr.h	(revision 20377)
+++ trunk/ippTools/src/flatcorr.h	(revision 20397)
@@ -29,4 +29,6 @@
     FLATCORR_MODE_ADDCHIP,
     FLATCORR_MODE_ADDCAMERA,
+    FLATCORR_MODE_DROPCHIP,
+    FLATCORR_MODE_DROPCAMERA,
     FLATCORR_MODE_PENDINGPROCESS,
     FLATCORR_MODE_ADDPROCESS,
Index: trunk/ippTools/src/flatcorrConfig.c
===================================================================
--- trunk/ippTools/src/flatcorrConfig.c	(revision 20377)
+++ trunk/ippTools/src/flatcorrConfig.c	(revision 20397)
@@ -81,4 +81,9 @@
     psMetadataAddS64(addchipArgs, PS_LIST_TAIL, "-chip_id", 0,            "define Chip ID (required)", 0);
 
+    // -dropchip
+    psMetadata *dropchipArgs = psMetadataAlloc();
+    psMetadataAddS64(dropchipArgs, PS_LIST_TAIL, "-corr_id", 0,            "define Flat Correction ID (required)", 0);
+    psMetadataAddS64(dropchipArgs, PS_LIST_TAIL, "-chip_id", 0,            "define Chip ID (required)", 0);
+
     // -addcamera
     psMetadata *addcameraArgs = psMetadataAlloc();
@@ -86,4 +91,9 @@
     psMetadataAddBool(addcameraArgs, PS_LIST_TAIL, "-simple",  0, "use the simple output format", false);
     psMetadataAddBool(addcameraArgs, PS_LIST_TAIL, "-pretend", 0, "use the simple output format", false);
+
+    // -dropcamera
+    psMetadata *dropcameraArgs = psMetadataAlloc();
+    psMetadataAddS64(dropcameraArgs, PS_LIST_TAIL, "-corr_id", 0,      "define Flat Correction ID (required)", 0);
+    psMetadataAddS64(dropcameraArgs, PS_LIST_TAIL, "-cam_id", 0,       "define Camera ID (required)", 0);
 
     // -pendingprocess
@@ -124,4 +134,6 @@
     PXOPT_ADD_MODE("-addchip",        "add a chip to a flat correction run",               FLATCORR_MODE_ADDCHIP,        addchipArgs);
     PXOPT_ADD_MODE("-addcamera",      "migrate completed chips to camera stage analysis",  FLATCORR_MODE_ADDCAMERA,      addcameraArgs);
+    PXOPT_ADD_MODE("-dropchip",       "drop a chip from a flat correction run",            FLATCORR_MODE_DROPCHIP,       dropchipArgs);
+    PXOPT_ADD_MODE("-dropcamera",     "drop an exposure (camera stage analysis)",          FLATCORR_MODE_DROPCAMERA,     dropcameraArgs);
     PXOPT_ADD_MODE("-pendingprocess", "show flat correction runs needing to be processed", FLATCORR_MODE_PENDINGPROCESS, pendingprocessArgs);
     PXOPT_ADD_MODE("-addprocess",     "report completed flat correction analysis",         FLATCORR_MODE_ADDPROCESS,     addprocessArgs);
