Index: /trunk/ippTools/src/dettool.c
===================================================================
--- /trunk/ippTools/src/dettool.c	(revision 13722)
+++ /trunk/ippTools/src/dettool.c	(revision 13723)
@@ -342,4 +342,15 @@
         return false;
     }
+    psF64 solang_min = psMetadataLookupF32(&status, config->args, "-solang_min");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -solang_min");
+        return false;
+    }
+
+    psF64 solang_max = psMetadataLookupF32(&status, config->args, "-solang_max");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -solang_max");
+        return false;
+    }
 
     psTime *registered = NULL;
@@ -541,6 +552,6 @@
             use_begin,
             use_end,
-            0.0,    // solang min
-            0.0,    // solang max
+	    solang_min,
+            solang_max,
             label,
             0       // parent
@@ -894,5 +905,5 @@
         }
         if (isfinite(select_ccd_temp_min)) {
-            if (!psMetadataAddF32(where, PS_LIST_TAIL, "ccd_temp", PS_META_DUPLICATE_OK, "<=", select_ccd_temp_min)) {
+            if (!psMetadataAddF32(where, PS_LIST_TAIL, "ccd_temp", PS_META_DUPLICATE_OK, ">=", select_ccd_temp_min)) {
                 psError(PS_ERR_UNKNOWN, false, "failed to add item ccd_temp");
                 psFree(where);
@@ -907,5 +918,5 @@
         }
         if (isfinite(select_ccd_temp_max)) {
-            if (!psMetadataAddF32(where, PS_LIST_TAIL, "ccd_temp", PS_META_DUPLICATE_OK, ">=", select_ccd_temp_max)) {
+            if (!psMetadataAddF32(where, PS_LIST_TAIL, "ccd_temp", PS_META_DUPLICATE_OK, "<=", select_ccd_temp_max)) {
                 psError(PS_ERR_UNKNOWN, false, "failed to add item ccd_temp");
                 psFree(where);
@@ -922,5 +933,5 @@
         }
         if (isfinite(select_posang_min)) {
-            if (!psMetadataAddF32(where, PS_LIST_TAIL, "posang", PS_META_DUPLICATE_OK, "<=", select_posang_min)) {
+            if (!psMetadataAddF32(where, PS_LIST_TAIL, "posang", PS_META_DUPLICATE_OK, ">=", select_posang_min)) {
                 psError(PS_ERR_UNKNOWN, false, "failed to add item posang");
                 psFree(where);
@@ -935,5 +946,5 @@
         }
         if (isfinite(select_posang_max)) {
-            if (!psMetadataAddF32(where, PS_LIST_TAIL, "posang", PS_META_DUPLICATE_OK, ">=", select_posang_max)) {
+            if (!psMetadataAddF32(where, PS_LIST_TAIL, "posang", PS_META_DUPLICATE_OK, "<=", select_posang_max)) {
                 psError(PS_ERR_UNKNOWN, false, "failed to add item posang");
                 psFree(where);
@@ -942,4 +953,32 @@
         }
 
+        /** selection based on solang **/
+        psF32 select_solang_min = psMetadataLookupF32(&status, config->args, "-select_solang_min");
+        if (!status) {
+            psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -select_solang_min");
+            psFree(where);
+            return false;
+        }
+        if (isfinite(select_solang_min)) {
+            if (!psMetadataAddF32(where, PS_LIST_TAIL, "solang", PS_META_DUPLICATE_OK, ">=", select_solang_min)) {
+                psError(PS_ERR_UNKNOWN, false, "failed to add item solang");
+                psFree(where);
+                return false;
+            }
+        }
+        psF32 select_solang_max = psMetadataLookupF32(&status, config->args, "-select_solang_max");
+        if (!status) {
+            psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -select_solang_max");
+            psFree(where);
+            return false;
+        }
+        if (isfinite(select_solang_max)) {
+            if (!psMetadataAddF32(where, PS_LIST_TAIL, "solang", PS_META_DUPLICATE_OK, "<=", select_solang_max)) {
+                psError(PS_ERR_UNKNOWN, false, "failed to add item solang");
+                psFree(where);
+                return false;
+            }
+        }
+
     }
 
@@ -1023,4 +1062,16 @@
     if (!status) {
         psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -posang_max");
+        return false;
+    }
+
+    psF64 solang_min = psMetadataLookupF32(&status, config->args, "-solang_min");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -solang_min");
+        return false;
+    }
+
+    psF64 solang_max = psMetadataLookupF32(&status, config->args, "-solang_max");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -solang_max");
         return false;
     }
@@ -1224,6 +1275,6 @@
             use_begin,
             use_end,
-            0.0,    // solang min
-            0.0,    // solang max
+	    solang_min,
+            solang_max,
             label,
             0       // parent
@@ -1513,4 +1564,22 @@
     if (!isnan(posang_max)) {
         detRun->posang_max = posang_max;
+    }
+
+    psF64 solang_min = psMetadataLookupF32(&status, config->args, "-set_solang_min");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -set_solang_min");
+        return false;
+    }
+    if (!isnan(solang_min)) {
+        detRun->solang_min = solang_min;
+    }
+
+    psF64 solang_max = psMetadataLookupF32(&status, config->args, "-set_solang_max");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -set_solang_max");
+        return false;
+    }
+    if (!isnan(solang_max)) {
+        detRun->solang_max = solang_max;
     }
 
@@ -4912,8 +4981,11 @@
         "   detRun.det_type,"
         "   detRun.mode,"
-        "   detResidImfile.*"
+        "   detResidImfile.*,"
+        "   rawExp.exp_time"
         " FROM detResidImfile"
         " JOIN detRun"
         "   USING(det_id, iteration)"
+        " JOIN rawExp"
+        "   USING(exp_tag)"
         " WHERE"
         "   detRun.state = 'run'"
@@ -6566,4 +6638,16 @@
     }
 
+    psF64 solang_min = psMetadataLookupF32(&status, config->args, "-solang_min");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -solang_min");
+        return false;
+    }
+
+    psF64 solang_max = psMetadataLookupF32(&status, config->args, "-solang_max");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -solang_max");
+        return false;
+    }
+
     psTime *registered = NULL;
     {
@@ -6701,6 +6785,6 @@
             use_begin,
             use_end,
-            0.0,        // solang min
-            0.0,        // solang max
+            solang_min,
+            solang_max,
             label,      // label
             parent ? (psS64)atoll(parent) : 0
Index: /trunk/ippTools/src/dettoolConfig.c
===================================================================
--- /trunk/ippTools/src/dettoolConfig.c	(revision 13722)
+++ /trunk/ippTools/src/dettoolConfig.c	(revision 13723)
@@ -101,4 +101,8 @@
     psMetadataAddF64(definebytagArgs, PS_LIST_TAIL, "-posang_max",  0,
             "define max rotator position angle", NAN);
+    psMetadataAddF64(definebytagArgs, PS_LIST_TAIL, "-solang_min",  0,
+            "define min solar angle", NAN);
+    psMetadataAddF64(definebytagArgs, PS_LIST_TAIL, "-solang_max",  0,
+            "define max solar angle", NAN);
     psMetadataAddStr(definebytagArgs, PS_LIST_TAIL, "-registered",  0,
             "time detrend run was registered", now);
@@ -148,4 +152,8 @@
     psMetadataAddF64(definebyqueryArgs, PS_LIST_TAIL, "-posang_max",  0,
             "define max rotator position angle", NAN);
+    psMetadataAddF64(definebyqueryArgs, PS_LIST_TAIL, "-solang_min",  0,
+            "define min solar angle", NAN);
+    psMetadataAddF64(definebyqueryArgs, PS_LIST_TAIL, "-solang_max",  0,
+            "define max solar angle", NAN);
     psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-registered",  0,
             "time detrend run was registered", now);
@@ -190,4 +198,8 @@
     psMetadataAddF64(definebyqueryArgs, PS_LIST_TAIL, "-select_posang_max",  0,
             "define max rotator position angle", NAN);
+    psMetadataAddF64(definebyqueryArgs, PS_LIST_TAIL, "-select_solang_min",  0,
+            "define min solar angle", NAN);
+    psMetadataAddF64(definebyqueryArgs, PS_LIST_TAIL, "-select_solang_max",  0,
+            "define max solar angle", NAN);
     psMetadataAddBool(definebyqueryArgs, PS_LIST_TAIL, "-pretend",  0,
             "print the exposures that would be included in the detrend run and exit", false);
@@ -239,4 +251,8 @@
     psMetadataAddStr(definebydetrunArgs, PS_LIST_TAIL, "-set_use_end",  0,
             "end of detrend run applicable peroid", NULL);
+    psMetadataAddF64(definebydetrunArgs, PS_LIST_TAIL, "-set_solang_min",  0,
+            "define solar angle", NAN);
+    psMetadataAddF64(definebydetrunArgs, PS_LIST_TAIL, "-set_solang_max",  0,
+            "define solar angle", NAN);
     psMetadataAddStr(definebydetrunArgs, PS_LIST_TAIL, "-filter_input_begin", 0,
             "filter input detrun exp to be in this peroid", NULL);
@@ -843,4 +859,8 @@
     psMetadataAddF64(register_detrendArgs, PS_LIST_TAIL, "-posang_max",  0,
             "define max rotator position angle", NAN);
+    psMetadataAddF64(register_detrendArgs, PS_LIST_TAIL, "-solang_min",  0,
+            "define min solar angle", NAN);
+    psMetadataAddF64(register_detrendArgs, PS_LIST_TAIL, "-solang_max",  0,
+            "define max solar angle", NAN);
     psMetadataAddStr(register_detrendArgs, PS_LIST_TAIL, "-registered",  0,
             "time detrend run was registered", now);
