Index: trunk/ippTools/share/Makefile.am
===================================================================
--- trunk/ippTools/share/Makefile.am	(revision 37381)
+++ trunk/ippTools/share/Makefile.am	(revision 37384)
@@ -471,4 +471,5 @@
 	laptool_revertgroup.sql \
 	laptool_filtersforgroup.sql \
+	laptool_revertsass.sql \
 	vptool_find_rawexp.sql \
 	vptool_pendingimfile.sql \
Index: trunk/ippTools/share/laptool_revertsass.sql
===================================================================
--- trunk/ippTools/share/laptool_revertsass.sql	(revision 37384)
+++ trunk/ippTools/share/laptool_revertsass.sql	(revision 37384)
@@ -0,0 +1,1 @@
+UPDATE lapRun SET final_sass_id = NULL,quick_sass_id = NULL
Index: trunk/ippTools/src/laptool.c
===================================================================
--- trunk/ippTools/src/laptool.c	(revision 37381)
+++ trunk/ippTools/src/laptool.c	(revision 37384)
@@ -25,4 +25,5 @@
 static bool pendingrunMode(pxConfig *config);
 static bool updaterunMode(pxConfig *config);
+static bool revertsassMode(pxConfig *config);
 
 // Exposure level
@@ -69,5 +70,6 @@
     MODECASE(LAPTOOL_MODE_PENDINGRUN,    pendingrunMode);
     MODECASE(LAPTOOL_MODE_UPDATERUN,     updaterunMode);
-
+    MODECASE(LAPTOOL_MODE_REVERTSASS,    revertsassMode);
+    
     MODECASE(LAPTOOL_MODE_PENDINGEXP,    pendingexpMode);
     MODECASE(LAPTOOL_MODE_EXPOSURES,     exposuresMode);
@@ -695,4 +697,51 @@
 }
 
+static bool revertsassMode(pxConfig *config)
+{
+  PS_ASSERT_PTR_NON_NULL(config, false);
+
+  psMetadata *where = psMetadataAlloc();
+  PXOPT_COPY_S64(config->args, where, "-lap_id", "lap_id", "==");
+  PXOPT_COPY_S64(config->args, where, "-sass_id", "final_sass_id", "==");
+  if (!psListLength(where->list)) {
+    psFree(where);
+    psError(PXTOOLS_ERR_CONFIG, false, "search parameters are required");
+    return false;
+  }
+
+  psString query = pxDataGet("laptool_revertsass.sql");
+  if (!query) {
+    psError(PXTOOLS_ERR_SYS, false, "failed to retrieve SQL statement");
+    return(false);
+  }
+  psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
+  psStringAppend(&query, "\n WHERE %s", whereClause);
+  psFree(whereClause);
+
+  if (!psDBTransaction(config->dbh)) {
+    psError(PS_ERR_UNKNOWN, false, "database error");
+    return false;
+  }
+  
+  if (!p_psDBRunQuery(config->dbh, query)) {
+    psError(PS_ERR_UNKNOWN, false, "database error");
+    psFree(query);
+    return false;
+  }
+  psFree(query);
+
+  long numUpdated = psDBAffectedRows(config->dbh);
+  if (numUpdated != 1) {
+    psError(PS_ERR_UNKNOWN, false, "should have updated only one row. updated %ld", numUpdated);
+    return false;
+  }
+
+  if (!psDBCommit(config->dbh)) {
+    psError(PS_ERR_UNKNOWN, false, "database error");
+    return false;
+  }
+  
+  return true;
+}
 // Exposure level
 
Index: trunk/ippTools/src/laptool.h
===================================================================
--- trunk/ippTools/src/laptool.h	(revision 37381)
+++ trunk/ippTools/src/laptool.h	(revision 37384)
@@ -19,4 +19,5 @@
   LAPTOOL_MODE_EXPOSURES,
   LAPTOOL_MODE_STACKS,
+  LAPTOOL_MODE_REVERTSASS,
   LAPTOOL_MODE_UPDATEEXP,
   LAPTOOL_MODE_DIFFCHECK,
Index: trunk/ippTools/src/laptoolConfig.c
===================================================================
--- trunk/ippTools/src/laptoolConfig.c	(revision 37381)
+++ trunk/ippTools/src/laptoolConfig.c	(revision 37384)
@@ -117,4 +117,9 @@
   ADD_OPT(S64, updaterunArgs, "-set_final_sass_id",           "set final stack sass_id", 0);
   
+  // -revertsass
+  psMetadata *revertsassArgs = psMetadataAlloc();
+  ADD_OPT(S64, revertsassArgs, "-lap_id",                     "search by lap run id", 0);
+  ADD_OPT(S64, revertsassArgs, "-sass_id",                    "sass id that is being removed", 0);
+
   // -pendingexp
   psMetadata *pendingexpArgs = psMetadataAlloc();
@@ -136,5 +141,5 @@
   ADD_OPT(Bool,stacksArgs, "-simple",                         "use the simple output format", false);
   ADD_OPT(U64, stacksArgs, "-limit",                          "limit result set to N items", 0);
-  
+	  
   // -updateexp
   psMetadata *updateexpArgs = psMetadataAlloc();
@@ -227,4 +232,5 @@
   PXOPT_ADD_MODE("-listrun",                 "", LAPTOOL_MODE_PENDINGRUN,       listrunArgs);
   PXOPT_ADD_MODE("-updaterun",               "", LAPTOOL_MODE_UPDATERUN,        updaterunArgs);
+  PXOPT_ADD_MODE("-revertsass",              "mode to remove the sass_id", LAPTOOL_MODE_REVERTSASS,   revertsassArgs);
   PXOPT_ADD_MODE("-pendingexp",              "", LAPTOOL_MODE_PENDINGEXP,       pendingexpArgs);
   PXOPT_ADD_MODE("-exposures",               "", LAPTOOL_MODE_EXPOSURES,        exposuresArgs);
Index: trunk/ippTools/src/stacktool.c
===================================================================
--- trunk/ippTools/src/stacktool.c	(revision 37381)
+++ trunk/ippTools/src/stacktool.c	(revision 37384)
@@ -41,4 +41,5 @@
 static bool sumskyfileMode(pxConfig *config);
 static bool sassskyfileMode(pxConfig *config);
+static bool updatesassMode(pxConfig *config);
 static bool revertsumskyfileMode(pxConfig *config);
 static bool tosummaryMode(pxConfig *config);
@@ -82,5 +83,6 @@
         MODECASE(STACKTOOL_MODE_ADDSUMSKYFILE,         addsumskyfileMode);
         MODECASE(STACKTOOL_MODE_SUMSKYFILE,            sumskyfileMode);
-        MODECASE(STACKTOOL_MODE_SASSSKYFILE,            sassskyfileMode);
+        MODECASE(STACKTOOL_MODE_SASSSKYFILE,           sassskyfileMode);
+	MODECASE(STACKTOOL_MODE_UPDATESASS,            updatesassMode);
         MODECASE(STACKTOOL_MODE_REVERTSUMSKYFILE,      revertsumskyfileMode);
         MODECASE(STACKTOOL_MODE_TOSUMMARY,             tosummaryMode);
@@ -1295,9 +1297,4 @@
     PXOPT_COPY_STR(config->args, where, "-data_group", "stackAssociation.data_group", "LIKE");
 
-//  The following three selectors are incompatible with the sql so omit them
-//    PXOPT_COPY_S64(config->args, where, "-warp_id", "warpRun.warp_id", "==");
-//     PXOPT_COPY_S64(config->args, where, "-exp_id", "rawExp.exp_id", "==");
-//    PXOPT_COPY_STR(config->args, where, "-exp_name", "rawExp.exp_name", "==");
-
     PXOPT_LOOKUP_BOOL(all, config->args, "-all", false);
 
@@ -1369,4 +1366,49 @@
 }
 
+static bool updatesassMode(pxConfig *config)
+{
+  PS_ASSERT_PTR_NON_NULL(config, false);
+
+  psMetadata *where = psMetadataAlloc();
+  PXOPT_COPY_S64(config->args, where, "-sass_id", "sass_id", "==");
+  PXOPT_COPY_STR(config->args, where, "-data_group", "data_group", "==");
+  PXOPT_COPY_STR(config->args, where, "-projection_cell", "projection_cell", "==");
+  PXOPT_COPY_STR(config->args, where, "-tess_id", "tess_id", "==");
+  PXOPT_COPY_STR(config->args, where, "-filter", "filter", "==");
+  if (!psListLength(where->list)) {
+    psFree(where);
+    psError(PXTOOLS_ERR_CONFIG, false, "search parameters are required");
+    return false;
+  }
+
+  psMetadata *values = psMetadataAlloc();
+  PXOPT_COPY_STR(config->args, values, "-set_data_group", "data_group", "==");
+  if (!psListLength(values->list)) {
+    psFree(values);
+    psError(PXTOOLS_ERR_CONFIG, false, "data_group to assign not found");
+    return false;
+  }
+
+  if (!psDBTransaction(config->dbh)) {
+    psError(PS_ERR_UNKNOWN, false, "database error");
+    return false;
+  }
+  
+  long rows = psDBUpdateRows(config->dbh, "stackAssociation", where, values);
+  psFree(values);
+  psFree(where);
+
+  if (rows != 1) {
+    psError(PS_ERR_UNKNOWN, false, "should have updated only one row. updated %ld", rows);
+    return false;
+  }
+
+  if (!psDBCommit(config->dbh)) {
+    psError(PS_ERR_UNKNOWN, false, "database error");
+    return false;
+  }
+
+  return true;
+}
 
 static bool revertsumskyfileMode(pxConfig *config)
Index: trunk/ippTools/src/stacktool.h
===================================================================
--- trunk/ippTools/src/stacktool.h	(revision 37381)
+++ trunk/ippTools/src/stacktool.h	(revision 37384)
@@ -35,4 +35,5 @@
     STACKTOOL_MODE_SUMSKYFILE,
     STACKTOOL_MODE_SASSSKYFILE,
+    STACKTOOL_MODE_UPDATESASS,
     STACKTOOL_MODE_REVERTSUMSKYFILE,
     STACKTOOL_MODE_TOSUMMARY,
Index: trunk/ippTools/src/stacktoolConfig.c
===================================================================
--- trunk/ippTools/src/stacktoolConfig.c	(revision 37381)
+++ trunk/ippTools/src/stacktoolConfig.c	(revision 37384)
@@ -238,4 +238,14 @@
     psMetadataAddBool(sassskyfileArgs, PS_LIST_TAIL, "-all",  0,            "enable search without arguments", false);
 
+    // -updatesass
+    psMetadata *updatesassArgs = psMetadataAlloc();
+    psMetadataAddS64(updatesassArgs, PS_LIST_TAIL, "-sass_id", 0,           "search by stack association id", 0);
+    psMetadataAddStr(updatesassArgs, PS_LIST_TAIL, "-data_group", 0,        "search by data group", 0);
+    psMetadataAddStr(updatesassArgs, PS_LIST_TAIL, "-projection_cell", 0,   "search by projection cell", 0);
+    psMetadataAddStr(updatesassArgs, PS_LIST_TAIL, "-tess_id", 0,           "search by tess_id", 0);
+    psMetadataAddStr(updatesassArgs, PS_LIST_TAIL, "-filter", 0,            "search by filter", 0);
+
+    psMetadataAddStr(updatesassArgs, PS_LIST_TAIL, "-set_data_group", 0,    "data_group to assign", 0);
+
     // -revertsumskyfile
     psMetadata *revertsumskyfileArgs= psMetadataAlloc();
@@ -348,5 +358,6 @@
     PXOPT_ADD_MODE("-donecleanup",           "show runs that have been cleaned",     STACKTOOL_MODE_DONECLEANUP,          donecleanupArgs);
 
-    PXOPT_ADD_MODE("-sassskyfile",      "list results of stackAssociation", STACKTOOL_MODE_SASSSKYFILE,      sassskyfileArgs);
+    PXOPT_ADD_MODE("-sassskyfile",          "list results of stackAssociation", STACKTOOL_MODE_SASSSKYFILE,      sassskyfileArgs);
+    PXOPT_ADD_MODE("-updatesass",           "update data_group of stackAssociation", STACKTOOL_MODE_UPDATESASS,  updatesassArgs);
     PXOPT_ADD_MODE("-tosummary",            "show runs that can be summarized", STACKTOOL_MODE_TOSUMMARY, tosummaryArgs);
     PXOPT_ADD_MODE("-summary",              "show runs that have been summarized", STACKTOOL_MODE_SUMMARY, summaryArgs);
