Index: trunk/ippTools/src/chiptool.c
===================================================================
--- trunk/ippTools/src/chiptool.c	(revision 21237)
+++ trunk/ippTools/src/chiptool.c	(revision 21308)
@@ -485,5 +485,4 @@
                                    path_base,
                                    code,
-                                   0,   // chip_image_id
                                    0    // magic_ds_id
             )) {
@@ -530,4 +529,5 @@
     pxchipGetSearchArgs (config, where); // chipRun, chipProcessedImfile, rawExp
     PXOPT_COPY_S64(config->args, where, "-chip_id", "chipRun.chip_id", "==");
+    PXOPT_COPY_S64(config->args, where, "-chip_imfile_id", "chipImfile.chip_imfile_id", "==");
     PXOPT_COPY_STR(config->args, where, "-class_id", "chipProcessedImfile.class_id", "==");
     PXOPT_COPY_STR(config->args, where, "-reduction", "chipRun.reduction", "==");
@@ -542,5 +542,5 @@
     if (where && psListLength(where->list)) {
         psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
-        psStringAppend(&query, " AND %s", whereClause);
+        psStringAppend(&query, " WHERE %s", whereClause);
         psFree(whereClause);
     }
Index: trunk/ippTools/src/chiptoolConfig.c
===================================================================
--- trunk/ippTools/src/chiptoolConfig.c	(revision 21237)
+++ trunk/ippTools/src/chiptoolConfig.c	(revision 21308)
@@ -150,5 +150,6 @@
     // -processedimfile
     psMetadata *processedimfileArgs = psMetadataAlloc();
-    psMetadataAddS64(processedimfileArgs, PS_LIST_TAIL, "-chip_id",  0,         "define chip ID", 0);
+    psMetadataAddS64(processedimfileArgs, PS_LIST_TAIL, "-chip_id",  0,         "search by  chip ID", 0);
+    psMetadataAddS64(processedimfileArgs, PS_LIST_TAIL, "-chip_imfile_id",  0,  "search by chip_file_id", 0);
     psMetadataAddStr(processedimfileArgs,  PS_LIST_TAIL, "-class_id",           0, "search by class ID", NULL);
     psMetadataAddStr(processedimfileArgs,  PS_LIST_TAIL, "-reduction",          0, "search by reduction class", NULL);
Index: trunk/ippTools/src/difftool.c
===================================================================
--- trunk/ippTools/src/difftool.c	(revision 21237)
+++ trunk/ippTools/src/difftool.c	(revision 21308)
@@ -239,5 +239,6 @@
             warp2 ? warp2 : PS_MAX_S64, // defined or NULL
             stack2 ? stack2 : PS_MAX_S64, // defined or NULL
-            tess_id
+            tess_id,
+            0                             // diff_skyfile_id
         )) {
         if (!psDBRollback(config->dbh)) {
@@ -532,5 +533,4 @@
                            good_frac,
                            code,
-                           0,       // diff_image_id
                            0        // magic_ds_id
           )) {
@@ -568,5 +568,5 @@
     PXOPT_COPY_S64(config->args, where,  "-diff_id", "diffSkyfile.diff_id", "==");
     PXOPT_COPY_STR(config->args, where, "-skycell_id", "diffInputSkyfile.skycell_id", "==");
-    PXOPT_COPY_S64(config->args, where,  "-diff_image_id", "diffSkyfile.diff_image_id", "==");
+    PXOPT_COPY_S64(config->args, where,  "-diff_skyfile_id", "diffInputSkyfile.diff_skyfile_id", "==");
     PXOPT_COPY_STR(config->args, where, "-tess_id", "diffSkyfile.tess_id", "==");
     PXOPT_COPY_S16(config->args, where, "-code", "diffSkyfile.fault", "==");
@@ -834,5 +834,6 @@
             template_warp_id,
             template_stack_id,
-            tess_id
+            tess_id,
+            0
         )) {
         if (!psDBRollback(config->dbh)) {
Index: trunk/ippTools/src/difftoolConfig.c
===================================================================
--- trunk/ippTools/src/difftoolConfig.c	(revision 21237)
+++ trunk/ippTools/src/difftoolConfig.c	(revision 21308)
@@ -115,5 +115,5 @@
     psMetadataAddS64(diffskyfileArgs, PS_LIST_TAIL, "-diff_id", 0,            "search by diff ID", 0);
     psMetadataAddStr(diffskyfileArgs , PS_LIST_TAIL, "-skycell_id",  0,       "define skycell ID", NULL);
-    psMetadataAddS64(diffskyfileArgs, PS_LIST_TAIL, "-diff_image_id", 0,      "search by diff_image_id ID", 0);
+    psMetadataAddS64(diffskyfileArgs, PS_LIST_TAIL, "-diff_skyfile_id", 0,    "search by diff_skyfile_id ID", 0);
     psMetadataAddStr(diffskyfileArgs, PS_LIST_TAIL, "-tess_id",  0,            "define tessellation ID", NULL);
     psMetadataAddS64(diffskyfileArgs, PS_LIST_TAIL, "-exp_id",  0,            "define exposure ID", 0);
Index: trunk/ippTools/src/pxchip.c
===================================================================
--- trunk/ippTools/src/pxchip.c	(revision 21237)
+++ trunk/ippTools/src/pxchip.c	(revision 21308)
@@ -235,4 +235,10 @@
     PS_ASSERT_PTR_NON_NULL(config, false);
 
+    if (!psDBTransaction(config->dbh)) {
+        psError(PS_ERR_UNKNOWN, false, "database error");
+        return false;
+    }
+
+
     // create a chipRun
     if (!chipRunInsert(config->dbh,
@@ -249,9 +255,33 @@
             end_stage)
     ) {
+        if (!psDBRollback(config->dbh)) {
+            psError(PS_ERR_UNKNOWN, false, "database error failed to rollback transaction");
+        }
         psError(PS_ERR_UNKNOWN, false, "database error");
         return 0;
     }
 
-    return psDBLastInsertID(config->dbh);
-}
-
+    psS64 chip_id =  psDBLastInsertID(config->dbh);
+
+    // Create rows in chipImfile table for each input exposure. 
+    // This creates the chip_image_id values
+    psString query = "INSERT INTO chipImfile "
+                     "SELECT %" PRId64 ", class_id, 0 FROM rawImfile WHERE exp_id = %" PRId64;
+
+    if (!p_psDBRunQuery(config->dbh, query, chip_id, exp_id)) {
+        psError(PS_ERR_UNKNOWN, false, "database error");
+        // rollback
+        if (!psDBRollback(config->dbh)) {
+            psError(PS_ERR_UNKNOWN, false, "database error");
+        }
+        psError(PS_ERR_UNKNOWN, false, "database error");
+        return 0;
+    }
+    if (!psDBCommit(config->dbh)) {
+        psError(PS_ERR_UNKNOWN, false, "database error");
+        return 0;
+    }
+    
+    return chip_id;
+}
+
Index: trunk/ippTools/src/warptool.c
===================================================================
--- trunk/ippTools/src/warptool.c	(revision 21237)
+++ trunk/ippTools/src/warptool.c	(revision 21308)
@@ -681,4 +681,5 @@
 {
     unsigned int nFail = 0;
+    psMetadata *imfiles = psMetadataAlloc();
     psMetadata *skycells = psMetadataConfigRead(NULL, &nFail, mapfile, false);
     if (!skycells) {
@@ -689,4 +690,5 @@
         psError(PS_ERR_UNKNOWN, false, "there were %d errors parsing mapfile: %s", nFail, mapfile);
         psFree(skycells);
+        psFree(imfiles);
         return false;
     }
@@ -699,4 +701,5 @@
             psFree(iter);
             psFree(skycells);
+            psFree(imfiles);
             return false;
         }
@@ -710,6 +713,8 @@
             psFree(iter);
             psFree(skycells);
-            return false;
-        }
+            psFree(imfiles);
+            return false;
+        }
+        psMetadataAddS64(imfiles, PS_LIST_TAIL, row->skycell_id, PS_META_REPLACE, "", row->warp_id);
 
         if (!warpSkyCellMapInsertObject(config->dbh, row)) {
@@ -726,11 +731,27 @@
             psFree(iter);
             psFree(skycells);
+            psFree(imfiles);
             return false;
         }
 
         psFree(row);
+    }
+    psFree(iter);
+
+    // create warp_skyfile_ids for the output skyfiles
+    psString query = "INSERT INTO warpImfile VALUES(%" PRId64 ", '%s', 0)";
+    iter = psMetadataIteratorAlloc(imfiles, 0, NULL);
+    while ((item = psMetadataGetAndIncrement(iter))) {
+        psString skycell_id = item->name;
+        psS64 warp_id = item->data.S64;
+
+        if (!p_psDBRunQuery(config->dbh, query, warp_id, skycell_id)) {
+            psError(PS_ERR_UNKNOWN, false, "database error");
+            return false;
+        }
     }
     psFree(iter);
     psFree(skycells);
+    psFree(imfiles);
 
     return true;
@@ -940,5 +961,4 @@
                            !accept,
                            code,
-                           0,           // warp_image_id
                            0            // magic_ds_id
         )) {
