Index: trunk/ippTools/src/pxframes.c
===================================================================
--- trunk/ippTools/src/pxframes.c	(revision 6279)
+++ trunk/ippTools/src/pxframes.c	(revision 6282)
@@ -115,2 +115,118 @@
 PX_FRAME_SEARCH(rawScienceFrame, rawScienceExp, rawImfile);
 PX_FRAME_SEARCH(p2PendingFrame, p2PendingExp, p2PendingImfile);
+
+rawScienceFrame *newToRawScienceFrame(newFrame *newFrame) 
+{
+    newExpRow       *newExp = NULL;
+
+    PS_ASSERT_PTR_NON_NULL(newFrame, NULL);
+
+    newExp = newFrame->exposure;
+    rawScienceExpRow *rawScienceExp = rawScienceExpRowAlloc(
+        newExp->exp_id,
+        newExp->camera,
+        newExp->exp_type,
+        newExp->filter,
+        newExp->class,
+        newExp->nclass,
+        newExp->stats
+    );
+
+    psArray *newImages = newFrame->images;
+    psArray *rawImages = psArrayAlloc(newImages->n);
+    for (long i = 0; i < newImages->n; i++) {
+        newImfileRow *newImfile = newImages->data[i];
+        psArrayAdd(rawImages, 0, rawImfileRowAlloc(
+                newImfile->exp_id,
+                newImfile->class,
+                newImfile->class_id,
+                newImfile->stats,
+                newImfile->url
+            )
+        );
+    }
+
+    return rawScienceFrameAlloc(rawScienceExp, rawImages);
+}
+
+bool rawScienceFrameInsert(pxConfig *config, rawScienceFrame *frame)
+{
+    PS_ASSERT_PTR_NON_NULL(config, false);
+    PS_ASSERT_PTR_NON_NULL(config->database, false);
+    PS_ASSERT_PTR_NON_NULL(frame, false);
+
+    psDB *dbh = config->database;
+
+    if (!rawScienceExpInsertObject(dbh, frame->exposure)) {
+        psError(PS_ERR_UNKNOWN, false, "database access failed");
+        return false;
+    }
+
+    psArray *images = frame->images;
+    for (long i = 0; i < images->n; i++) {
+        if (!rawImfileInsertObject(dbh, images->data[i])) {
+            psError(PS_ERR_UNKNOWN, false, "database access failed");
+            return false;
+        }
+    }
+
+    return true;
+}
+
+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->exp_type,
+        newExp->filter,
+        newExp->class,
+        newExp->nclass,
+        newExp->stats
+    );
+
+    psArray *newImages = newFrame->images;
+    psArray *rawImages = psArrayAlloc(newImages->n);
+    for (long i = 0; i < newImages->n; i++) {
+        newImfileRow *newImfile = newImages->data[i];
+        psArrayAdd(rawImages, 0, rawImfileRowAlloc(
+                newImfile->exp_id,
+                newImfile->class,
+                newImfile->class_id,
+                newImfile->stats,
+                newImfile->url
+            )
+        );
+    }
+
+    return rawDetrendFrameAlloc(rawDetrendExp, rawImages);
+}
+
+bool rawDetrendFrameInsert(pxConfig *config, rawDetrendFrame *frame)
+{
+    PS_ASSERT_PTR_NON_NULL(config, false);
+    PS_ASSERT_PTR_NON_NULL(config->database, false);
+    PS_ASSERT_PTR_NON_NULL(frame, false);
+
+    psDB *dbh = config->database;
+
+    if (!rawDetrendExpInsertObject(dbh, frame->exposure)) {
+        psError(PS_ERR_UNKNOWN, false, "database access failed");
+        return false;
+    }
+
+    psArray *images = frame->images;
+    for (long i = 0; i < images->n; i++) {
+        if (!rawImfileInsertObject(dbh, images->data[i])) {
+            psError(PS_ERR_UNKNOWN, false, "database access failed");
+            return false;
+        }
+    }
+
+    return true;
+}
