Index: trunk/ippTools/src/pxframes.c
===================================================================
--- trunk/ippTools/src/pxframes.c	(revision 8062)
+++ trunk/ippTools/src/pxframes.c	(revision 8120)
@@ -6,4 +6,6 @@
 
 #include "pxtools.h"
+
+static rawDetrendExpRow *newToRawDetrendExp(pxConfig *config, newExpRow *exp);
 
 #define PX_FRAME_ALLOC(frametype, exptype) \
@@ -77,5 +79,5 @@
 PX_FRAME_PRINT(p2PendingFrame, p2PendingImfile);
 
-
+// XXX fix the exposure search so that it doesn't dump the entire table
 #define PX_FRAME_SEARCH(frametype, exptype, imfiletype) \
 psArray *frametype##Search(pxConfig *config) \
@@ -83,6 +85,5 @@
     PS_ASSERT_PTR_NON_NULL(config, NULL); \
  \
-    psArray *exposures = exptype##SelectRowObjects(config->dbh, \
-        config->where, MAX_ROWS); \
+    psArray *exposures = exptype##SelectRowObjects(config->dbh, NULL, MAX_ROWS); \
     if (!exposures) { \
         psError(PS_ERR_UNKNOWN, false, "no " #exptype " rows found"); \
@@ -131,19 +132,37 @@
 PX_FRAME_SEARCH(p2PendingFrame, p2PendingExp, p2PendingImfile);
 
-rawScienceFrame *newToRawScienceFrame(newFrame *newFrame) 
-{
+
+bool rawScienceFrameInsert(pxConfig *config, rawScienceFrame *frame)
+{
+    PS_ASSERT_PTR_NON_NULL(config, false);
+    PS_ASSERT_PTR_NON_NULL(config->dbh, false);
+    PS_ASSERT_PTR_NON_NULL(frame, false);
+
+    psDB *dbh = config->dbh;
+
+    if (!rawScienceExpInsertObject(dbh, frame->exposure)) {
+        psError(PS_ERR_UNKNOWN, false, "dbh access failed");
+        return false;
+    }
+
+    psArray *images = frame->images;
+    for (long i = 0; i < psArrayLength(images); i++) {
+        if (!rawImfileInsertObject(dbh, images->data[i])) {
+            psError(PS_ERR_UNKNOWN, false, "dbh access failed");
+            return false;
+        }
+    }
+
+    return true;
+}
+
+rawDetrendFrame *newToRawDetrendFrame(pxConfig *config, newFrame *newFrame) 
+{
+    newExpRow       *newExp = NULL;
+
     PS_ASSERT_PTR_NON_NULL(newFrame, NULL);
 
-    newExpRow *newExp = newFrame->exposure;
-    rawScienceExpRow *rawScienceExp = rawScienceExpRowAlloc(
-        newExp->exp_id,
-        newExp->camera,
-        newExp->telescope,
-        newExp->exp_type,
-//        newExp->class,
-        newExp->imfiles,
-        "my filter",
-        "my stats"
-    );
+    newExp = newFrame->exposure;
+    rawDetrendExpRow *rawDetrendExp = newToRawDetrendExp(config, newExp);
 
     psArray *newImages = newFrame->images;
@@ -155,6 +174,5 @@
             newImfile->class,
             newImfile->class_id,
-            newImfile->uri,
-            "my stats"
+            newImfile->uri
         );
         psArrayAdd(rawImages, 0, rawImfile);
@@ -162,12 +180,12 @@
     }
 
-    rawScienceFrame *rawScienceFrame = rawScienceFrameAlloc(rawScienceExp, rawImages);
-    psFree(rawScienceExp);
+    rawDetrendFrame *rawDetrendFrame = rawDetrendFrameAlloc(rawDetrendExp, rawImages);
+    psFree(rawDetrendExp);
     psFree(rawImages);
 
-    return rawScienceFrame;
-}
-
-bool rawScienceFrameInsert(pxConfig *config, rawScienceFrame *frame)
+    return rawDetrendFrame;
+}
+
+bool rawDetrendFrameInsert(pxConfig *config, rawDetrendFrame *frame)
 {
     PS_ASSERT_PTR_NON_NULL(config, false);
@@ -177,5 +195,5 @@
     psDB *dbh = config->dbh;
 
-    if (!rawScienceExpInsertObject(dbh, frame->exposure)) {
+    if (!rawDetrendExpInsertObject(dbh, frame->exposure)) {
         psError(PS_ERR_UNKNOWN, false, "dbh access failed");
         return false;
@@ -193,65 +211,77 @@
 }
 
-rawDetrendFrame *newToRawDetrendFrame(newFrame *newFrame) 
-{
-    newExpRow       *newExp = NULL;
-
-    PS_ASSERT_PTR_NON_NULL(newFrame, NULL);
-
-    newExp = newFrame->exposure;
-    rawDetrendExpRow *rawDetrendExp = rawDetrendExpRowAlloc(
-        newExp->exp_id,
-        newExp->camera,
-        newExp->telescope,
-        newExp->exp_type,
-//        newExp->class,
-        newExp->imfiles,
-        "my filter",
-        "my stats"
+static rawDetrendExpRow *newToRawDetrendExp(pxConfig *config, newExpRow *exp)
+{
+    PS_ASSERT_PTR_NON_NULL(config, NULL);
+    PS_ASSERT_PTR_NON_NULL(exp, NULL);
+
+    bool status = false;
+    psString filter = psMetadataLookupStr(&status, config->args, "-filter");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -filter");
+        return false;
+    }
+    if (!filter) {
+        psError(PS_ERR_UNKNOWN, true, "-filter is required");
+        return false;
+    }
+    psF32 airmass = psMetadataLookupF32(&status, config->args, "-airmass");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -airmass");
+        return false;
+    }
+    if (isnan(airmass)) {
+        psError(PS_ERR_UNKNOWN, true, "-airmass is required");
+        return false;
+    }
+    psF64 ra = psMetadataLookupF64(&status, config->args, "-ra");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -ra");
+        return false;
+    }
+    if (isnan(ra)) {
+        psError(PS_ERR_UNKNOWN, true, "-airmass is required");
+        return false;
+    }
+    psF64 decl = psMetadataLookupF64(&status, config->args, "-decl");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -decl");
+        return false;
+    }
+    if (isnan(decl)) {
+        psError(PS_ERR_UNKNOWN, true, "-decl is required");
+        return false;
+    }
+    psF32 exp_time = psMetadataLookupF32(&status, config->args, "-exp_time");
+    if (isnan(exp_time)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -exp_time");
+        return false;
+    }
+    if (!exp_time) {
+        psError(PS_ERR_UNKNOWN, true, "-exp_time is required");
+        return false;
+    }
+    psF64 background = psMetadataLookupF64(&status, config->args, "-background");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -background");
+        return false;
+    }
+    if (!exp_time) {
+        psError(PS_ERR_UNKNOWN, true, "-background is required");
+        return false;
+    }
+
+    return rawDetrendExpRowAlloc(
+        exp->exp_id,
+        exp->camera,
+        exp->telescope,
+        exp->exp_type,
+        exp->imfiles,
+        filter,
+        airmass,
+        ra,
+        decl,
+        exp_time,
+        background
     );
-
-    psArray *newImages = newFrame->images;
-    psArray *rawImages = psArrayAlloc(psArrayLength(newImages));
-    for (long i = 0; i < psArrayLength(newImages); i++) {
-        newImfileRow *newImfile = newImages->data[i];
-        rawImfileRow *rawImfile = rawImfileRowAlloc(
-            newImfile->exp_id,
-            newImfile->class,
-            newImfile->class_id,
-            newImfile->uri,
-            "my stats"
-        );
-        psArrayAdd(rawImages, 0, rawImfile);
-        psFree(rawImfile);
-    }
-
-    rawDetrendFrame *rawDetrendFrame = rawDetrendFrameAlloc(rawDetrendExp, rawImages);
-    psFree(rawDetrendExp);
-    psFree(rawImages);
-
-    return rawDetrendFrame;
-}
-
-bool rawDetrendFrameInsert(pxConfig *config, rawDetrendFrame *frame)
-{
-    PS_ASSERT_PTR_NON_NULL(config, false);
-    PS_ASSERT_PTR_NON_NULL(config->dbh, false);
-    PS_ASSERT_PTR_NON_NULL(frame, false);
-
-    psDB *dbh = config->dbh;
-
-    if (!rawDetrendExpInsertObject(dbh, frame->exposure)) {
-        psError(PS_ERR_UNKNOWN, false, "dbh access failed");
-        return false;
-    }
-
-    psArray *images = frame->images;
-    for (long i = 0; i < psArrayLength(images); i++) {
-        if (!rawImfileInsertObject(dbh, images->data[i])) {
-            psError(PS_ERR_UNKNOWN, false, "dbh access failed");
-            return false;
-        }
-    }
-
-    return true;
-}
+}
