Index: /branches/haf_branches/ipp.20100512/ippTools/share/Makefile.am
===================================================================
--- /branches/haf_branches/ipp.20100512/ippTools/share/Makefile.am	(revision 27935)
+++ /branches/haf_branches/ipp.20100512/ippTools/share/Makefile.am	(revision 27936)
@@ -7,8 +7,12 @@
      addtool_find_cam_id.sql \
      addtool_find_pendingexp.sql \
+     addtool_find_pendingmergeprocess.sql \
      addtool_find_processedexp.sql \
+     addtool_find_minidvodbrun.sql \
+     addtool_find_minidvodbrun2.sql \
      addtool_pendingcleanupexp.sql \
      addtool_pendingcleanuprun.sql \
      addtool_queue_cam_id.sql \
+     addtool_queue_minidvodbrun.sql \
      addtool_reset_faulted_runs.sql \
      addtool_revertprocessedexp.sql \
Index: /branches/haf_branches/ipp.20100512/ippTools/share/addtool_find_minidvodbrun.sql
===================================================================
--- /branches/haf_branches/ipp.20100512/ippTools/share/addtool_find_minidvodbrun.sql	(revision 27936)
+++ /branches/haf_branches/ipp.20100512/ippTools/share/addtool_find_minidvodbrun.sql	(revision 27936)
@@ -0,0 +1,7 @@
+SELECT
+    minidvodbRun.*,
+    addRun.minidvodb_group
+FROM minidvodbRun
+LEFT JOIN addRun
+    USING(minidvodb_name)
+
Index: /branches/haf_branches/ipp.20100512/ippTools/share/addtool_find_minidvodbrun2.sql
===================================================================
--- /branches/haf_branches/ipp.20100512/ippTools/share/addtool_find_minidvodbrun2.sql	(revision 27936)
+++ /branches/haf_branches/ipp.20100512/ippTools/share/addtool_find_minidvodbrun2.sql	(revision 27936)
@@ -0,0 +1,23 @@
+-- this selects the minidvodbs that have complete addRuns
+SELECT minidvodb_name, minidvodb_path, mergedvodb_path, state, minidbg 
+AS minidvodb_group 
+FROM minidvodbRun 
+JOIN 
+   (SELECT minidvodb_name, count(state) as cnt2, cnt, minidbg, minidbn 
+   FROM addRun LEFT JOIN 
+       -- this select grabs (and counts) all the addRuns with any state
+       -- and groups them by the name
+       (SELECT minidvodb_group as minidbg, minidvodb_name as minidbn, count(state) 
+        AS cnt 
+        FROM addRun 
+        GROUP BY minidvodb_name ) 
+   AS foo1 ON minidvodb_name = minidbn
+        -- the second select grabs and counts all the addRuns with state
+        -- of 'full'	     
+   WHERE addRun.state = 'full' 
+   GROUP BY minidvodb_name ) 
+AS foo2 
+USING(minidvodb_name) 
+WHERE cnt2 = cnt
+       -- the 3rd select only grabs the columns where the counts are the same
+       -- (same number of 'full' and any state)
Index: /branches/haf_branches/ipp.20100512/ippTools/share/addtool_find_pendingmergeprocess.sql
===================================================================
--- /branches/haf_branches/ipp.20100512/ippTools/share/addtool_find_pendingmergeprocess.sql	(revision 27936)
+++ /branches/haf_branches/ipp.20100512/ippTools/share/addtool_find_pendingmergeprocess.sql	(revision 27936)
@@ -0,0 +1,5 @@
+SELECT minidvodbRun.* 
+FROM minidvodbRun 
+LEFT JOIN minidvodbProcessed
+USING(minidvodb_name)
+WHERE (minidvodbRun.state = 'to_be_merged' AND minidvodbProcessed.minidvodb_name IS NULL)
Index: /branches/haf_branches/ipp.20100512/ippTools/share/addtool_find_processedexp.sql
===================================================================
--- /branches/haf_branches/ipp.20100512/ippTools/share/addtool_find_processedexp.sql	(revision 27935)
+++ /branches/haf_branches/ipp.20100512/ippTools/share/addtool_find_processedexp.sql	(revision 27936)
@@ -2,6 +2,8 @@
     addProcessedExp.*,
     addRun.workdir
-FROM addRun
-JOIN camProcessedExp
+FROM addProcessedExp
+JOIN addRun
+    USING(add_id)
+JOIN camRun
     USING(cam_id)
 JOIN chipRun
Index: /branches/haf_branches/ipp.20100512/ippTools/share/addtool_queue_minidvodbrun.sql
===================================================================
--- /branches/haf_branches/ipp.20100512/ippTools/share/addtool_queue_minidvodbrun.sql	(revision 27936)
+++ /branches/haf_branches/ipp.20100512/ippTools/share/addtool_queue_minidvodbrun.sql	(revision 27936)
@@ -0,0 +1,12 @@
+-- create rcRun's for all destinations that have filesets that they are interested in available
+INSERT INTO minidvodbRun
+SELECT                  -- rows in this select must match rcRun
+    minidvodb_name,
+    minidvodb_path,
+    mergedvodb_path,
+    'new'
+
+FROM addRun 
+LEFT JOIN minidvodbRun USING(minidvodb_name)
+-- WHERE minidvodbRun.minidvodb_name IS NULL
+  
Index: /branches/haf_branches/ipp.20100512/ippTools/src/addtool.c
===================================================================
--- /branches/haf_branches/ipp.20100512/ippTools/src/addtool.c	(revision 27935)
+++ /branches/haf_branches/ipp.20100512/ippTools/src/addtool.c	(revision 27936)
@@ -40,4 +40,13 @@
 static bool maskedMode(pxConfig *config);
 static bool unblockMode(pxConfig *config);
+static bool addminidvodbrunMode(pxConfig *config);
+static bool updateminidvodbrunMode(pxConfig *config);
+static bool listminidvodbrunMode(pxConfig *config);
+static bool addminidvodbprocessedMode(pxConfig *config);
+static bool listminidvodbprocessedMode(pxConfig *config);
+static bool revertminidvodbprocessedMode(pxConfig *config);
+static bool updateminidvodbprocessedMode(pxConfig *config);
+
+
 
 # define MODECASE(caseName, func) \
@@ -69,4 +78,12 @@
         MODECASE(ADDTOOL_MODE_MASKED,               maskedMode);
         MODECASE(ADDTOOL_MODE_UNBLOCK,              unblockMode);
+	MODECASE(ADDTOOL_MODE_ADDMINIDVODBRUN,      addminidvodbrunMode);
+	MODECASE(ADDTOOL_MODE_UPDATEMINIDVODBRUN,   updateminidvodbrunMode);
+ 	MODECASE(ADDTOOL_MODE_LISTMINIDVODBRUN,     listminidvodbrunMode);
+  	MODECASE(ADDTOOL_MODE_ADDMINIDVODBPROCESSED,addminidvodbprocessedMode);
+   	MODECASE(ADDTOOL_MODE_LISTMINIDVODBPROCESSED,listminidvodbprocessedMode);
+    	MODECASE(ADDTOOL_MODE_REVERTMINIDVODBPROCESSED,revertminidvodbprocessedMode);
+    	MODECASE(ADDTOOL_MODE_UPDATEMINIDVODBPROCESSED,updateminidvodbprocessedMode);
+
         default:
             psAbort("invalid option (this should not happen)");
@@ -374,4 +391,5 @@
     PXOPT_LOOKUP_STR(path_base,     config->args, "-path_base", false, false);
     PXOPT_LOOKUP_F32(dtime_addstar, config->args, "-dtime_addstar", false, false);
+    PXOPT_LOOKUP_STR(dvodb_path, config->args, "-dvodb_path", false, false);
     PXOPT_LOOKUP_S16(fault,         config->args, "-fault", false, false);
 
@@ -424,4 +442,5 @@
         dtime_addstar,
         path_base,
+	dvodb_path,
         fault
         );
@@ -522,5 +541,5 @@
 
     if (!p_psDBRunQuery(config->dbh, query)) {
-        psError(PS_ERR_UNKNOWN, false, "database error");
+      psError(PS_ERR_UNKNOWN, false, "database error %s ", query);
         psFree(query);
         return false;
@@ -733,2 +752,359 @@
     return true;
 }
+
+static bool addminidvodbrunMode(pxConfig *config) 
+{
+  PS_ASSERT_PTR_NON_NULL(config, NULL);
+  
+  // required
+
+  
+
+  PXOPT_LOOKUP_STR(minidvodb_name, config->args, "-set_minidvodb_name", true, false);
+  PXOPT_LOOKUP_STR(minidvodb_path, config->args, "-set_minidvodb_path", true, false);
+  PXOPT_LOOKUP_STR(mergedvodb_path, config->args, "-set_mergedvodb_path", true, false);
+  psMetadata *where = psMetadataAlloc();
+
+  PXOPT_COPY_S64(config->args, where, "-set_minidvodb_name",  "minidvodb_name", "==");
+  PXOPT_COPY_S64(config->args, where, "-set_minidvodb_path",  "minidvodb_path", "==");
+  PXOPT_COPY_STR(config->args, where, "-set_mergedvodb_path",  "mergedvodb_path", "==");
+  //PXOPT_COPY_S255(config->args, where, "-set_state",  "state", "==");
+
+  //generate restrictions
+  //psString query = pxDataGet("addtool_queue_minidvodbrun.sql");
+  //if (!query) {
+  //    psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
+  //    return false;
+  // }
+
+  //if ((!minidvodb_name) && (!minidvodb_path) && (!mergedvodb_path) ) {
+  // psError(PXTOOLS_ERR_SYS, false, "need minidvodb_path, mergedvodb_path, and minidvodb_name");
+  //}
+
+    psString query =  NULL;
+    psStringAppend(&query, "INSERT INTO minidvodbRun SET minidvodb_name = '%s' ,",minidvodb_name);
+    psStringAppend(&query, "minidvodb_path = '%s' ,",minidvodb_path);
+    psStringAppend(&query, "mergedvodb_path = '%s' , state = 'new';",mergedvodb_path);
+    
+    
+if (!query) {
+      psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
+      return false;
+   }
+
+    if (!p_psDBRunQuery(config->dbh, query)) {
+      psError(PS_ERR_UNKNOWN, false, "database error %s", query);
+        psFree(query);
+        return false;
+    }
+    psFree(query);
+
+psArray *output = p_psDBFetchResult(config->dbh);
+    if (!output) {
+        psError(PS_ERR_UNKNOWN, false, "database error");
+        return false;
+    }
+    if (!psArrayLength(output)) {
+        psTrace("addtool", PS_LOG_INFO, "no rows found");
+        psFree(output);
+        return true;
+    }
+if (!psDBTransaction(config->dbh)) {
+        psError(PS_ERR_UNKNOWN, false, "database error");
+        psFree(output);
+        return false;
+    }
+
+return true;
+}
+
+static bool updateminidvodbrunMode(pxConfig *config) {
+  PS_ASSERT_PTR_NON_NULL(config, false);
+
+    psMetadata *where = psMetadataAlloc();
+    
+    PXOPT_COPY_STR(config->args, where, "-minidvodb_name",     "minidvodb_name", "==");
+    PXOPT_COPY_STR(config->args, where, "-state",     "state", "==");
+    PXOPT_COPY_STR(config->args, where, "-minidvodb_path", "minidvodb_path", "==");
+    PXOPT_COPY_STR(config->args, where, "-mergedvodb_path", "mergedvodb_path", "==");
+    PXOPT_LOOKUP_STR(minidvodb_name,  config->args, "-set_minidvodb_name", false, false);
+    PXOPT_LOOKUP_STR(minidvodb_path,  config->args, "-set_minidvodb_path", false, false);
+    PXOPT_LOOKUP_STR(state,  config->args, "-set_state", false, false);
+    PXOPT_LOOKUP_STR(mergedvodb_path,  config->args, "-set_mergedvodb_path", false, false);
+
+
+
+
+    if (!psListLength(where->list)) {
+        psFree(where);
+        psError(PXTOOLS_ERR_CONFIG, false, "search parameters are required");
+        return false;
+    }
+
+    psString query = psStringCopy("UPDATE minidvodbRun SET ");
+    int cnt = 0;
+    psString comma = ",";
+    if (minidvodb_name) {
+  psStringAppend(&query, " minidvodb_name = '%s'", minidvodb_name);
+  cnt++;
+ }
+
+if (minidvodb_path) {
+  if (cnt) {
+    psStringAppend(&query,comma);
+  }
+
+  psStringAppend(&query, " minidvodb_path = '%s'", minidvodb_path);
+ cnt++;
+}
+
+if (state) {
+if (cnt) {
+    psStringAppend(&query,comma);
+  }
+  psStringAppend(&query, " state = '%s'", state);
+ cnt++;
+ }
+
+if (mergedvodb_path) {
+if (cnt) {
+    psStringAppend(&query,comma);
+  }
+  psStringAppend(&query, " mergedvodb_path = '%s'", mergedvodb_path);
+cnt++;
+ }
+
+
+
+    // pxUpdateRun gets parameters from config->args and runs the update query
+    
+    psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
+    psStringAppend(&query, " WHERE %s", whereClause);
+
+ if (!p_psDBRunQuery(config->dbh, query)) {
+        psError(PS_ERR_UNKNOWN, false, "database error");
+        psFree(query);
+        return false;
+    }
+
+
+
+    psFree(query);
+    psFree(where);
+
+    return true;
+
+
+}
+
+static bool listminidvodbrunMode(pxConfig *config) {
+    PS_ASSERT_PTR_NON_NULL(config, false);
+    psMetadata *where = psMetadataAlloc();
+    
+    PXOPT_LOOKUP_BOOL(finished_addrun, config->args, "-finished_addrun", false);
+    if (finished_addrun) { //too many selects, and I couldn't figure out how to rename it
+      PXOPT_COPY_STR(config->args, where, "-minidvodb_name", "minidbn", "==");
+      PXOPT_COPY_STR(config->args, where, "-minidvodb_group", "minidbg", "==");
+    } else {
+      PXOPT_COPY_STR(config->args, where, "-minidvodb_name", "minidvodbRun.minidvodb_name", "==");
+      PXOPT_COPY_STR(config->args, where, "-minidvodb_group", "addRun.minidvodb_group", "==");
+    }
+    PXOPT_COPY_STR(config->args, where, "-state", "minidvodbRun.state", "==");
+    PXOPT_LOOKUP_U64(limit,      config->args, "-limit", false, false);
+  
+  
+
+ if (!psListLength(where->list)) {
+        psFree(where);
+        psError(PXTOOLS_ERR_CONFIG, false, "search parameters are required");
+        return false;
+    }
+
+ //there is a different starting query, depending on if it is limited to list minidvodbs with finished addRun processing or not. 
+ psString query = NULL;
+psString query1 = pxDataGet("addtool_find_minidvodbrun.sql");
+psString query2 = pxDataGet("addtool_find_minidvodbrun2.sql");
+ if (finished_addrun) {
+   psStringAppend(&query, "%s",query2);
+ } else {
+   psStringAppend(&query, "%s",query1);
+ } 
+ //psString query = pxDataGet("addtool_find_minidvodbrun.sql");
+    if (!query) {
+        psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
+        return false;
+    }
+
+
+    
+    if (finished_addrun) { //finished addrun does not need the WHERE
+      if (psListLength(where->list)) {
+        psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
+        psStringAppend(&query, " AND %s", whereClause);
+        psFree(whereClause);
+    } } else {
+      if (psListLength(where->list)) {
+        psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
+        psStringAppend(&query, " WHERE %s", whereClause);
+        psFree(whereClause);
+      }
+    }
+    
+if (!finished_addrun) {
+  //finished_addrun does not need this
+    psStringAppend(&query, " %s", " GROUP BY minidvodbRun.minidvodb_name ");
+ }
+
+
+if (limit) {
+        psString limitString = psDBGenerateLimitSQL(limit);
+        psStringAppend(&query, " %s", limitString);
+        psFree(limitString);
+    }
+
+// psError(PS_ERR_UNKNOWN, false, "%s", query);
+//return false;
+ 
+    if (!p_psDBRunQuery(config->dbh, query)) {
+      psError(PS_ERR_UNKNOWN, false, "database error %s", query);
+        psFree(query);
+        return false;
+    }
+    psFree(query);
+psArray *output = p_psDBFetchResult(config->dbh);
+    if (!output) {
+        psError(PS_ERR_UNKNOWN, false, "database error");
+        return false;
+    }
+    if (!psArrayLength(output)) {
+        psTrace("addtool", PS_LOG_INFO, "no rows found");
+        psFree(output);
+        return true;
+    }
+
+   if (!ippdbPrintMetadatas(stdout, output, "minidvodbRun", 1)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to print array");
+        psFree(output);
+        return false;
+    }
+
+    psFree(output);
+
+   
+
+return true;
+}
+
+static bool addminidvodbprocessedMode(pxConfig *config) {
+
+PS_ASSERT_PTR_NON_NULL(config, false);
+
+    // required
+ PXOPT_LOOKUP_STR(minidvodb_name, config->args, "-minidvodb_name", true, false);
+
+    // optional
+    PXOPT_LOOKUP_U64(merge_order,     config->args, "-merge_order", false, false);
+    PXOPT_LOOKUP_F32(dtime_relphot, config->args, "-dtime_relphot", false, false);
+PXOPT_LOOKUP_F32(dtime_resort, config->args, "-dtime_resort", false, false);
+PXOPT_LOOKUP_F32(dtime_merge, config->args, "-dtime_merge", false, false);
+    PXOPT_LOOKUP_TIME(epoch, config->args, "-epoch", false, false);
+PXOPT_LOOKUP_STR(mergedvodb_path, config->args, "-mergedvodb_path", false, false);
+    PXOPT_LOOKUP_S16(fault,         config->args, "-fault", false, false);
+    //generate restrictions
+psMetadata *where = psMetadataAlloc();
+PXOPT_COPY_STR(config->args, where, "-minidvodb_name",   "minidvodbRun.minidvodb_name",   "==");
+
+    psString query = pxDataGet("addtool_find_pendingmergeprocess.sql");
+    if (!query) {
+      psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
+      return false;
+    }
+    // use psDBGenerateWhereSQL because the SQL yields an intermediate table
+    if (psListLength(where->list)) {
+        psString whereClaus = psDBGenerateWhereConditionSQL(where, NULL);
+        psStringAppend(&query, " AND %s", whereClaus);
+        psFree(whereClaus);
+    }
+    psFree(where);
+    
+    if (!p_psDBRunQuery(config->dbh, query)) {
+      psError(PS_ERR_UNKNOWN, false, "database error");
+      psFree(query);
+      return false;
+    }
+    psFree(query);
+    
+    psArray *output = p_psDBFetchResult(config->dbh);
+    if (!output) {
+      psError(PS_ERR_UNKNOWN, false, "database error");
+      return false;
+    }
+    if (!psArrayLength(output)) {
+      psTrace("addtool", PS_LOG_INFO, "no rows found");
+      psFree(output);
+      return true;
+    }
+    
+    if (!psDBTransaction(config->dbh)) {
+        psError(PS_ERR_UNKNOWN, false, "database error");
+        psFree(output);
+        return false;
+    }
+	minidvodbRunRow *pendingRow = minidvodbRunObjectFromMetadata(output->data[0]);
+	psFree(output);
+	minidvodbProcessedRow *row = minidvodbProcessedRowAlloc(
+	       pendingRow->minidvodb_name,
+	       merge_order,
+	       dtime_resort,
+	       dtime_relphot,
+	       dtime_merge,
+	       epoch,
+	       mergedvodb_path,
+	       fault
+	       );
+	
+	if (!minidvodbProcessedInsertObject(config->dbh, row)) {
+	  // rollback
+        if (!psDBRollback(config->dbh)) {
+	  psError(PS_ERR_UNKNOWN, false, "database error");
+        }
+        psError(PS_ERR_UNKNOWN, false, "database error");
+        psFree(row);
+        psFree(pendingRow);
+        return false;
+	}
+
+    // since there is only one exp per 'new' set addRun.state = 'full'
+    //if (!pxminidvodbRunSetState(config, row->minidvodb_name, "merged")) {
+    //  psError(PS_ERR_UNKNOWN, false, "failed to change minidvodbRun.state for minidvodb_name: %" PRId64, row->minidvodb_name);
+    //  psFree(row);
+    //   psFree(pendingRow);
+    //    return false;
+    // }
+	psFree(row);
+	psFree(pendingRow);
+	
+	if (!psDBCommit(config->dbh)) {
+	  psError(PS_ERR_UNKNOWN, false, "database error");
+	  return false;
+	}
+	
+
+
+
+	return true;
+    }
+    
+static bool listminidvodbprocessedMode(pxConfig *config) {
+return true;
+}
+
+static bool revertminidvodbprocessedMode(pxConfig *config) {
+return true;
+}
+
+static bool updateminidvodbprocessedMode(pxConfig *config) {
+return true;
+}
+
+
Index: /branches/haf_branches/ipp.20100512/ippTools/src/addtool.h
===================================================================
--- /branches/haf_branches/ipp.20100512/ippTools/src/addtool.h	(revision 27935)
+++ /branches/haf_branches/ipp.20100512/ippTools/src/addtool.h	(revision 27936)
@@ -39,5 +39,12 @@
     ADDTOOL_MODE_DONECLEANUP,
     ADDTOOL_MODE_EXPORTRUN,
-    ADDTOOL_MODE_IMPORTRUN
+    ADDTOOL_MODE_IMPORTRUN,
+    ADDTOOL_MODE_ADDMINIDVODBRUN,
+    ADDTOOL_MODE_UPDATEMINIDVODBRUN,
+    ADDTOOL_MODE_LISTMINIDVODBRUN,
+    ADDTOOL_MODE_ADDMINIDVODBPROCESSED,
+    ADDTOOL_MODE_LISTMINIDVODBPROCESSED,
+    ADDTOOL_MODE_REVERTMINIDVODBPROCESSED,
+    ADDTOOL_MODE_UPDATEMINIDVODBPROCESSED
 } addtoolMode;
 
Index: /branches/haf_branches/ipp.20100512/ippTools/src/addtoolConfig.c
===================================================================
--- /branches/haf_branches/ipp.20100512/ippTools/src/addtoolConfig.c	(revision 27935)
+++ /branches/haf_branches/ipp.20100512/ippTools/src/addtoolConfig.c	(revision 27936)
@@ -142,4 +142,49 @@
     psMetadataAddStr(unblockArgs, PS_LIST_TAIL, "-label",  0,            "name of a label to unmask (required)", NULL);
 
+    // -addminidvodbruns
+    psMetadata *addminidvodbrunArgs = psMetadataAlloc();
+    psMetadataAddStr(addminidvodbrunArgs, PS_LIST_TAIL, "-set_minidvodb_name",        0, "define minidvodb_name", NULL);
+    psMetadataAddStr(addminidvodbrunArgs, PS_LIST_TAIL, "-set_minidvodb_path",        0, "define path for minidvodb", NULL);
+    psMetadataAddStr(addminidvodbrunArgs, PS_LIST_TAIL, "-set_mergedvodb_path",        0, "define path for the merged dvodb", NULL);
+    psMetadataAddStr(addminidvodbrunArgs, PS_LIST_TAIL, "-set_state",        0, "define state", NULL);
+
+    // -updateminidvodbruns
+    psMetadata *updateminidvodbrunArgs = psMetadataAlloc();
+psMetadataAddStr(updateminidvodbrunArgs, PS_LIST_TAIL, "-minidvodb_name",        0, "search by minidvodb_name", NULL);
+    psMetadataAddStr(updateminidvodbrunArgs, PS_LIST_TAIL, "-minidvodb_path",        0, "search by path for minidvodb", NULL);
+    psMetadataAddStr(updateminidvodbrunArgs, PS_LIST_TAIL, "-mergedvodb_path",        0, "search by path for the merged dvodb", NULL);
+    psMetadataAddStr(updateminidvodbrunArgs, PS_LIST_TAIL, "-state",        0, "search by state", NULL);
+psMetadataAddStr(updateminidvodbrunArgs, PS_LIST_TAIL, "-set_minidvodb_name",        0, "define minidvodb_name", NULL);
+    psMetadataAddStr(updateminidvodbrunArgs, PS_LIST_TAIL, "-set_minidvodb_path",        0, "define path for minidvodb", NULL);
+    psMetadataAddStr(updateminidvodbrunArgs, PS_LIST_TAIL, "-set_mergedvodb_path",        0, "define path for the merged dvodb", NULL);
+    psMetadataAddStr(updateminidvodbrunArgs, PS_LIST_TAIL, "-set_state",        0, "define state", NULL);
+    // -listminidvodbrunArgs
+    psMetadata *listminidvodbrunArgs = psMetadataAlloc();
+    psMetadataAddStr(listminidvodbrunArgs, PS_LIST_TAIL, "-minidvodb_name",        0, "search by minidvodb_name", NULL);
+    psMetadataAddStr(listminidvodbrunArgs, PS_LIST_TAIL, "-minidvodb_group",        0, "search by addRun.minidvodb_group", NULL);
+    psMetadataAddStr(listminidvodbrunArgs, PS_LIST_TAIL, "-state",        0, "search by state", NULL);
+    psMetadataAddU64(listminidvodbrunArgs, PS_LIST_TAIL, "-limit",        0, "limit to N items", 0);
+    psMetadataAddBool(listminidvodbrunArgs, PS_LIST_TAIL, "-simple",        0, "simple output", false);
+    psMetadataAddBool(listminidvodbrunArgs, PS_LIST_TAIL, "-finished_addrun",        0, "limit to minidvodbs with completed addRuns (none in new state)", false);
+
+
+    psMetadata *addminidvodbprocessedArgs = psMetadataAlloc();
+    psMetadataAddStr(addminidvodbprocessedArgs, PS_LIST_TAIL, "-minidvodb_name", 0,    "define minidvodb_name (required)", NULL);
+    psMetadataAddU64(addminidvodbprocessedArgs, PS_LIST_TAIL, "-merge_order",    0,    "define merge order", 0);
+    psMetadataAddF32(addminidvodbprocessedArgs, PS_LIST_TAIL, "-dtime_relphot",  0,    "define elapsed time for relphot (seconds)", NAN);
+    psMetadataAddF32(addminidvodbprocessedArgs, PS_LIST_TAIL, "-dtime_resort", 0,    "define elapsed time for resort (seconds)", NAN);
+    psMetadataAddF32(addminidvodbprocessedArgs, PS_LIST_TAIL, "-dtime_merge",    0,    "define elapsed time for DVO merge (seconds)", NAN);
+    psMetadataAddTime(addminidvodbprocessedArgs, PS_LIST_TAIL, "-epoch",         0,    "time merge is finished", NULL);
+    psMetadataAddStr(addminidvodbprocessedArgs, PS_LIST_TAIL, "-mergedvodb_path",0,    "path of merged dvodb", NULL);
+    psMetadataAddS16(addminidvodbprocessedArgs, PS_LIST_TAIL, "-fault",          0,    "set fault code", 0);
+
+
+
+    psMetadata *listminidvodbprocessedArgs = psMetadataAlloc();
+    psMetadata *revertminidvodbprocessedArgs = psMetadataAlloc();
+    psMetadata *updateminidvodbprocessedArgs = psMetadataAlloc();
+    
+
+
     psMetadata *argSets = psMetadataAlloc();
     psMetadata *modes = psMetadataAlloc();
@@ -154,5 +199,15 @@
     PXOPT_ADD_MODE("-block",                "set a label block",                    ADDTOOL_MODE_BLOCK,         blockArgs);
     PXOPT_ADD_MODE("-masked",               "show blocked labels",                  ADDTOOL_MODE_MASKED,        maskedArgs);
-    PXOPT_ADD_MODE("-unblock",              "remove a label block",                 ADDTOOL_MODE_UNBLOCK,       unblockArgs);
+    PXOPT_ADD_MODE("-addminidvodbrun",      "create minidvodbs ",                   ADDTOOL_MODE_ADDMINIDVODBRUN, addminidvodbrunArgs);
+    PXOPT_ADD_MODE("-updateminidvodbrun",   "change minidvodb properties",          ADDTOOL_MODE_UPDATEMINIDVODBRUN,     updateminidvodbrunArgs);
+    PXOPT_ADD_MODE("-listminidvodbrun",     "list minidvodbs",                      ADDTOOL_MODE_LISTMINIDVODBRUN,       listminidvodbrunArgs);
+    PXOPT_ADD_MODE("-addminidvodbprocessed","add a processed minidvodb",            ADDTOOL_MODE_ADDMINIDVODBPROCESSED,  addminidvodbprocessedArgs);
+    PXOPT_ADD_MODE("-listminidvodbprocessed","list processed minidvodbs",           ADDTOOL_MODE_LISTMINIDVODBPROCESSED, listminidvodbprocessedArgs);
+    PXOPT_ADD_MODE("-revertminidvodbprocessed","revert processed minidvobs",        ADDTOOL_MODE_REVERTMINIDVODBPROCESSED,     revertminidvodbprocessedArgs);
+    PXOPT_ADD_MODE("-updateminidvodbprocessed","change processed minidvodb properties",ADDTOOL_MODE_UPDATEMINIDVODBPROCESSED,  updateminidvodbprocessedArgs);
+ 
+ 
+    
+
 
     if (!pxGetOptions(stderr, argc, argv, config, modes, argSets)) {
