Index: /trunk/ippTools/src/chiptool.c
===================================================================
--- /trunk/ippTools/src/chiptool.c	(revision 14213)
+++ /trunk/ippTools/src/chiptool.c	(revision 14214)
@@ -93,5 +93,5 @@
 }
 
-#define ADDRENAMEPARAMSTR(from, to, oldname, newname) \
+#define ADDRENAMEPARAMSTR(from, to, oldname, newname, comment) \
 { \
     bool status = false; \
@@ -102,5 +102,5 @@
     } \
     if (str) { \
-        if (!psMetadataAddStr(to, PS_LIST_TAIL, newname, 0, "==", str)) { \
+        if (!psMetadataAddStr(to, PS_LIST_TAIL, newname, PS_META_DUPLICATE_OK, comment, str)) { \
             psError(PS_ERR_UNKNOWN, false, "failed to add item " newname); \
             psFree(to); \
@@ -110,17 +110,18 @@
 }
 
-#define ADDPARAMSTR(from, to, name) ADDRENAMEPARAMSTR(from, to, name, name)
-
-#define ADDPARAMF(from, to, type, name) \
+#define ADDPARAMSTR(from, to, name) \
+  ADDRENAMEPARAMSTR(from, to, name, name, "==")
+
+#define ADDRENAMEPARAMF(from, to, type, oldname, newname, comment) \
 { \
     bool status = false; \
-    ps##type var = psMetadataLookup##type(&status, from, "-" name); \
+    ps##type var = psMetadataLookup##type(&status, from, "-" oldname); \
     if (!status) { \
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -" name); \
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -" oldname); \
         return false; \
     } \
     if (!isnan(var)) { \
-        if (!psMetadataAdd##type(to, PS_LIST_TAIL, #name, 0, "==", var)) { \
-            psError(PS_ERR_UNKNOWN, false, "failed to add item " name); \
+        if (!psMetadataAdd##type(to, PS_LIST_TAIL, newname, PS_META_DUPLICATE_OK, comment, var)) { \
+            psError(PS_ERR_UNKNOWN, false, "failed to add item " newname); \
             psFree(to); \
             return false; \
@@ -129,4 +130,7 @@
 }
 
+#define ADDPARAMF(from, to, type, name) \
+  ADDRENAMEPARAMF(from, to, type, name, name, "==")
+
 static bool queueMode(pxConfig *config)
 {
@@ -134,25 +138,57 @@
 
     psMetadata *where = psMetadataAlloc();
-    ADDPARAMSTR(config->args, where, "exp_id");
+    // convert exp_id into a psS64
+{
+    bool status = false;
+    psString var = psMetadataLookupStr(&status, config->args, "-exp_id");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -exp_id");
+        return false;
+    }
+    if (var) {
+        if (!psMetadataAddS64(where, PS_LIST_TAIL, "exp_id", 0, "==", (psS64)atoll(var))) {
+            psError(PS_ERR_UNKNOWN, false, "failed to add item exp_id");
+            psFree(where);
+            return false; 
+        }
+    }
+}
     ADDPARAMSTR(config->args, where, "exp_name");
-    ADDRENAMEPARAMSTR(config->args, where, "inst", "camera");
+    ADDRENAMEPARAMSTR(config->args, where, "inst", "camera", "==");
     ADDPARAMSTR(config->args, where, "telescope");
-    ADDPARAMSTR(config->args, where, "dateobs");
+    ADDPARAMSTR(config->args, where, "dateobs_begin");
+    ADDPARAMSTR(config->args, where, "dateobs_end");
+    ADDPARAMSTR(config->args, where, "exp_tag");
     ADDPARAMSTR(config->args, where, "exp_type");
-    ADDPARAMSTR(config->args, where, "imfiles");
-    ADDPARAMSTR(config->args, where, "workdir");
+    ADDPARAMSTR(config->args, where, "filelevel");
+    ADDPARAMSTR(config->args, where, "reduction");
     ADDPARAMSTR(config->args, where, "filter");
-    ADDPARAMF(config->args, where, F32, "airmass");
-    ADDPARAMF(config->args, where, F32, "ra");
-    ADDPARAMF(config->args, where, F32, "decl");
-    ADDPARAMF(config->args, where, F32, "exp_time");
-    ADDPARAMF(config->args, where, F32, "bg");
-    ADDPARAMF(config->args, where, F32, "bg_stdev");
-    ADDPARAMF(config->args, where, F32, "bg_mean_stdev");
-    ADDPARAMF(config->args, where, F64, "alt");
-    ADDPARAMF(config->args, where, F64, "az");
-    ADDPARAMF(config->args, where, F32, "ccd_temp");
-    ADDPARAMF(config->args, where, F64, "posang");
+    ADDRENAMEPARAMF(config->args, where, F64, "airmass_min", "airmass", ">=");
+    ADDRENAMEPARAMF(config->args, where, F64, "airmass_max", "airmass", "<");
+    ADDRENAMEPARAMF(config->args, where, F64, "ra_min", "ra", ">=");
+    ADDRENAMEPARAMF(config->args, where, F64, "ra_max", "ra", "<");
+    ADDRENAMEPARAMF(config->args, where, F64, "decl_min", "decl", ">=");
+    ADDRENAMEPARAMF(config->args, where, F64, "decl_max", "decl", "<");
+    ADDRENAMEPARAMF(config->args, where, F32, "exp_time_min", "exp_time", ">=");
+    ADDRENAMEPARAMF(config->args, where, F32, "exp_time_max", "exp_time", "<");
+    ADDRENAMEPARAMF(config->args, where, F32, "sat_pixel_frac_min", "sat_pixel_frac", ">=");
+    ADDRENAMEPARAMF(config->args, where, F32, "sat_pixel_frac_max", "sat_pixel_frac", "<");
+    ADDRENAMEPARAMF(config->args, where, F64, "bg_min", "bt", ">=");
+    ADDRENAMEPARAMF(config->args, where, F64, "bg_max", "bt", "<");
+    ADDRENAMEPARAMF(config->args, where, F64, "bg_stdev_min", "bg_stdev", ">=");
+    ADDRENAMEPARAMF(config->args, where, F64, "bg_stdev_max", "bg_stdev", "<");
+    ADDRENAMEPARAMF(config->args, where, F64, "bg_mean_stdev_min", "bg_mean_stdev", ">=");
+    ADDRENAMEPARAMF(config->args, where, F64, "bg_mean_stdev_max", "bg_mean_stdev", "<");
+    ADDRENAMEPARAMF(config->args, where, F64, "alt_min", "alt", ">=");
+    ADDRENAMEPARAMF(config->args, where, F64, "alt_max", "alt", "<");
+    ADDRENAMEPARAMF(config->args, where, F64, "az_min", "az", ">=");
+    ADDRENAMEPARAMF(config->args, where, F64, "az_max", "az", "<");
+    ADDRENAMEPARAMF(config->args, where, F32, "ccd_temp_min", "ccd_temp", ">=");
+    ADDRENAMEPARAMF(config->args, where, F32, "ccd_temp_max", "ccd_temp", "<");
+    ADDRENAMEPARAMF(config->args, where, F64, "posang_min", "posang", ">=");
+    ADDRENAMEPARAMF(config->args, where, F64, "posang_max", "posang", "<");
     ADDPARAMSTR(config->args, where, "object");
+    ADDRENAMEPARAMF(config->args, where, F32, "solang_min", "solang", ">=");
+    ADDRENAMEPARAMF(config->args, where, F32, "solang_max", "solang", "<");
 
     if (where->list->n < 1) {
@@ -236,5 +272,5 @@
         psMetadata *md = output->data[i];
 
-        psString exp_id = psMetadataLookupStr(&status, md, "exp_id");
+        psS64 exp_id = psMetadataLookupS64(&status, md, "exp_id");
         if (!status) {
             psError(PS_ERR_UNKNOWN, false, "failed to lookup value for exp_id");
@@ -249,5 +285,5 @@
             }
             psError(PS_ERR_UNKNOWN, false,
-                    "failed to trying to queue exp_id: %s", exp_id);
+                    "failed to trying to queue exp_id: %" PRId64, exp_id);
             psFree(output);
             return false;
Index: /trunk/ippTools/src/chiptoolConfig.c
===================================================================
--- /trunk/ippTools/src/chiptoolConfig.c	(revision 14213)
+++ /trunk/ippTools/src/chiptoolConfig.c	(revision 14214)
@@ -51,43 +51,75 @@
             "search by exp_name", NULL);
     psMetadataAddStr(queueArgs, PS_LIST_TAIL, "-inst",  0,
-            "search by camera", NULL);
+            "search for camera", NULL); 
     psMetadataAddStr(queueArgs, PS_LIST_TAIL, "-telescope",  0,
-            "search by telescope", NULL);
-    psMetadataAddStr(queueArgs, PS_LIST_TAIL, "-dateobs",  0,
-            "search by observation time", NULL);
+            "search for telescope", NULL);
+    psMetadataAddStr(queueArgs, PS_LIST_TAIL, "-dateobs_begin", 0,   
+            "search for exposures by time (>=)", NULL);
+    psMetadataAddStr(queueArgs, PS_LIST_TAIL, "-dateobs_end", 0,
+            "search for exposures by time (<)", NULL);
+    psMetadataAddStr(queueArgs, PS_LIST_TAIL, "-exp_tag",  0,
+            "search by exp_tag", NULL);
     psMetadataAddStr(queueArgs, PS_LIST_TAIL, "-exp_type",  0,
-            "search by exposure type", NULL);
-    psMetadataAddStr(queueArgs, PS_LIST_TAIL, "-imfiles",  0,
-            "search by number of imfiles", NULL);
-    psMetadataAddStr(queueArgs, PS_LIST_TAIL, "-workdir",  0,
-            "search by workdir", NULL);
+            "search by exp_type", NULL);
+    psMetadataAddStr(queueArgs, PS_LIST_TAIL, "-filelevel",  0,
+            "search by filelevel", NULL);
+    psMetadataAddStr(queueArgs, PS_LIST_TAIL, "-reduction",  0,
+            "search by reduction class", NULL);
     psMetadataAddStr(queueArgs, PS_LIST_TAIL, "-filter",  0,
-            "search by filter ", NULL);
-    psMetadataAddF32(queueArgs, PS_LIST_TAIL, "-airmass",  0,
-            "search by airmass", NAN);
-    psMetadataAddF64(queueArgs, PS_LIST_TAIL, "-ra",  0,
-            "search by RA", NAN);
-    psMetadataAddF64(queueArgs, PS_LIST_TAIL, "-decl",  0,
-            "search by DEC", NAN);
-    psMetadataAddF32(queueArgs, PS_LIST_TAIL, "-exp_time",  0,
-            "search by exposure time", NAN);
-
-    // XXX EAM : are these selecting based on the rawExp value or the chipImfile value?
-    psMetadataAddF64(queueArgs, PS_LIST_TAIL, "-bg",  0,
-            "search by exposure background", NAN);
-    psMetadataAddF64(queueArgs, PS_LIST_TAIL, "-bg_stdev",  0,
-            "search by exposure background stdev", NAN);
-    psMetadataAddF64(queueArgs, PS_LIST_TAIL, "-bg_mean_stdev",  0,
-            "search by exposure background mean stdev", NAN);
-    psMetadataAddF64(queueArgs, PS_LIST_TAIL, "-alt",  0,
-            "search by altitute", NAN);
-    psMetadataAddF64(queueArgs, PS_LIST_TAIL, "-az",  0,
-            "search by azimuth", NAN);
-    psMetadataAddF32(queueArgs, PS_LIST_TAIL, "-ccd_temp",  0,
-            "search by ccd tempature", NAN);
-    psMetadataAddF64(queueArgs, PS_LIST_TAIL, "-posang",  0,
-            "search by rotator position angle", NAN);
+            "search for filter", NULL); 
+    psMetadataAddF32(queueArgs, PS_LIST_TAIL, "-airmass_min",  0,
+            "define min airmass", NAN);
+    psMetadataAddF32(queueArgs, PS_LIST_TAIL, "-airmass_max",  0,
+            "define max airmass", NAN); 
+    psMetadataAddF64(queueArgs, PS_LIST_TAIL, "-ra_min",  0,
+            "define min airmass", NAN);
+    psMetadataAddF64(queueArgs, PS_LIST_TAIL, "-ra_max",  0,
+            "define max airmass", NAN); 
+    psMetadataAddF64(queueArgs, PS_LIST_TAIL, "-decl_min",  0,
+            "define min airmass", NAN);
+    psMetadataAddF64(queueArgs, PS_LIST_TAIL, "-decl_max",  0,
+            "define max airmass", NAN); 
+    psMetadataAddF32(queueArgs, PS_LIST_TAIL, "-exp_time_min",  0,
+            "define min airmass", NAN);
+    psMetadataAddF32(queueArgs, PS_LIST_TAIL, "-exp_time_max",  0,
+            "define max airmass", NAN); 
+    psMetadataAddF32(queueArgs, PS_LIST_TAIL, "-sat_pixel_frac_min",  0,
+            "define max fraction of saturated pixels", NAN);
+    psMetadataAddF32(queueArgs, PS_LIST_TAIL, "-sat_pixel_frac_max",  0,
+            "define max fraction of saturated pixels", NAN);
+    psMetadataAddF64(queueArgs, PS_LIST_TAIL, "-bg_min",  0,
+            "define max fraction of saturated pixels", NAN);
+    psMetadataAddF64(queueArgs, PS_LIST_TAIL, "-bg_max",  0,
+            "define max fraction of saturated pixels", NAN);
+    psMetadataAddF64(queueArgs, PS_LIST_TAIL, "-bg_stdev_min",  0,
+            "define max fraction of saturated pixels", NAN);
+    psMetadataAddF64(queueArgs, PS_LIST_TAIL, "-bg_stdev_max",  0,
+            "define max fraction of saturated pixels", NAN);
+    psMetadataAddF64(queueArgs, PS_LIST_TAIL, "-bg_mean_stdev_min",  0,
+            "define max fraction of saturated pixels", NAN);
+    psMetadataAddF64(queueArgs, PS_LIST_TAIL, "-bg_mean_stdev_max",  0,
+            "define max fraction of saturated pixels", NAN);
+    psMetadataAddF64(queueArgs, PS_LIST_TAIL, "-alt_min",  0,
+            "define min airmass", NAN);
+    psMetadataAddF64(queueArgs, PS_LIST_TAIL, "-alt_max",  0,
+            "define max airmass", NAN); 
+    psMetadataAddF64(queueArgs, PS_LIST_TAIL, "-az_min",  0,
+            "define min airmass", NAN);
+    psMetadataAddF64(queueArgs, PS_LIST_TAIL, "-az_max",  0,
+            "define max airmass", NAN);
+    psMetadataAddF64(queueArgs, PS_LIST_TAIL, "-ccd_temp_min",  0,   
+            "define min ccd tempature", NAN);
+    psMetadataAddF64(queueArgs, PS_LIST_TAIL, "-ccd_temp_max",  0,
+            "define max ccd tempature", NAN);
+    psMetadataAddF64(queueArgs, PS_LIST_TAIL, "-posang_min",  0,
+            "define min rotator position angle", NAN);
+    psMetadataAddF64(queueArgs, PS_LIST_TAIL, "-posang_max",  0,
+            "define max rotator position angle", NAN);
     psMetadataAddStr(queueArgs, PS_LIST_TAIL, "-object",  0,
             "search by exposure object", NULL);
+    psMetadataAddF32(queueArgs, PS_LIST_TAIL, "-solang_min",  0,
+            "define min solar angle", NAN);
+    psMetadataAddF32(queueArgs, PS_LIST_TAIL, "-solang_max",  0,
+            "define max solar angle", NAN);
     psMetadataAddStr(queueArgs, PS_LIST_TAIL, "-set_workdir",  0,
             "define workdir", NULL);
Index: /trunk/ippTools/src/pxchip.c
===================================================================
--- /trunk/ippTools/src/pxchip.c	(revision 14213)
+++ /trunk/ippTools/src/pxchip.c	(revision 14214)
@@ -57,5 +57,5 @@
 
 bool pxchipQueueByExpTag(pxConfig *config,
-                         psString exp_id,
+                         psS64 exp_id,
                          psString workdir,
                          psString label,
@@ -75,5 +75,5 @@
     if (!chipRunInsert(config->dbh,
             0x0, // chip_id
-            (psS64)atoll(exp_id),
+            exp_id,
             "run",      // state                
             workdir,
Index: /trunk/ippTools/src/pxchip.h
===================================================================
--- /trunk/ippTools/src/pxchip.h	(revision 14213)
+++ /trunk/ippTools/src/pxchip.h	(revision 14214)
@@ -28,5 +28,5 @@
 
 bool pxchipQueueByExpTag(pxConfig *config,
-                         psString exp_id,
+                         psS64 exp_id,
                          psString workdir,
                          psString label,
Index: /trunk/ippTools/src/regtool.c
===================================================================
--- /trunk/ippTools/src/regtool.c	(revision 14213)
+++ /trunk/ippTools/src/regtool.c	(revision 14214)
@@ -702,5 +702,5 @@
         // this can only be run as the newExp's state has been set to stop
         if (!pxchipQueueByExpTag(config,
-                    exp_id, // exp_id is the string version, rawExp->exp_id isa int
+                    rawExp->exp_id,
                     rawExp->workdir,
                     NULL, // label
