Index: trunk/ippTools/src/warptool.c
===================================================================
--- trunk/ippTools/src/warptool.c	(revision 28001)
+++ trunk/ippTools/src/warptool.c	(revision 28043)
@@ -177,5 +177,11 @@
             registered,
             0,       // magicked
-            note
+	    NULL,     // software version
+	    0,       // mask stat npix
+	    NAN,        // static
+	    NAN,        // dynamic
+	    NAN,        // magic
+	    NAN,        // advisory
+	    note
     );
     if (!warpRun) {
@@ -1019,8 +1025,42 @@
     PXOPT_LOOKUP_S64(magicked, config->args, "-set_magicked", false, false);
 
+    PXOPT_LOOKUP_STR(ver_pslib, config->args, "-ver_pslib", false, false);
+    PXOPT_LOOKUP_STR(ver_psmodules, config->args, "-ver_psmodules", false, false);
+    PXOPT_LOOKUP_STR(ver_psphot, config->args, "-ver_psphot", false, false);
+    PXOPT_LOOKUP_STR(ver_ppstats, config->args, "-ver_ppstats", false, false);
+    PXOPT_LOOKUP_STR(ver_pswarp, config->args, "-ver_pswarp", false, false);
+    PXOPT_LOOKUP_STR(ver_streaks, config->args, "-ver_streaks", false, false);
+
+    PXOPT_LOOKUP_S32(maskfrac_npix, config->args, "-maskfrac_npix", false, false);
+    PXOPT_LOOKUP_F32(maskfrac_static, config->args, "-maskfrac_static", false, false);
+    PXOPT_LOOKUP_F32(maskfrac_dynamic, config->args, "-maskfrac_dynamic", false, false);
+    PXOPT_LOOKUP_F32(maskfrac_magic, config->args, "-maskfrac_magic", false, false);
+    PXOPT_LOOKUP_F32(maskfrac_advisory, config->args, "-maskfrac_advisory", false, false);
+
+    psTrace("czw.test",1,"Received versions: pslib %s psmodules %s psphot %s ppstats %s pswarp %s streaks %s\n",
+	    ver_pslib,ver_psmodules,ver_psphot,ver_ppstats,ver_pswarp,ver_streaks);
+    psString ver_code = NULL;
+    if ((ver_pslib)&&(ver_psmodules)) {
+      ver_code = pxMergeCodeVersions(ver_pslib,ver_psmodules);
+    }
+    if (ver_psphot) {
+      ver_code = pxMergeCodeVersions(ver_code,ver_psphot);
+    }
+    if (ver_ppstats) {
+      ver_code = pxMergeCodeVersions(ver_code,ver_ppstats);
+    }
+    if (ver_pswarp) {
+      ver_code = pxMergeCodeVersions(ver_code,ver_pswarp);
+    }
+    if (ver_streaks) {
+      ver_code = pxMergeCodeVersions(ver_code,ver_streaks);
+    }
+    
     // default values
     PXOPT_LOOKUP_S16(fault, config->args, "-fault", false, false);
     PXOPT_LOOKUP_S16(quality, config->args, "-quality", false, false);
 
+
+    
     // we don't want to insert the last skyfile in a run but then not mark the
     // run as 'stop'
@@ -1050,5 +1090,11 @@
                            fault,
                            quality,
-                           magicked
+			   magicked,
+			   ver_code,
+			   maskfrac_npix,
+			   maskfrac_static,
+			   maskfrac_dynamic,
+			   maskfrac_magic,
+			   maskfrac_advisory
         )) {
         if (!psDBRollback(config->dbh)) {
@@ -1115,4 +1161,47 @@
         bool status;
         psS64 warp_id = psMetadataLookupS64(&status, row, "warp_id");
+
+	psString software_ver = NULL;
+	psS32 maskfrac_npix = 0;
+	psF32 maskfrac_static = 0;
+	psF32 maskfrac_dynamic = 0;
+	psF32 maskfrac_magic = 0;
+	psF32 maskfrac_advisory = 0;
+
+	// Calculate run level masking and software state
+	if (!pxCoalesceRunStatus(config,"warptool_coalesce_run.sql",warp_id,
+				 &software_ver,&maskfrac_npix,
+				 &maskfrac_static,&maskfrac_dynamic,
+				 &maskfrac_magic,&maskfrac_advisory)) {
+	  psError(PS_ERR_UNKNOWN, false, "failed to generate run level statistics");
+	  psFree(output);
+	  if (!psDBRollback(config->dbh)) {
+	    psError(PS_ERR_UNKNOWN, false, "database error");
+	  }
+	  return(false);
+	}
+	// Set warpRun.software_ver to the appropriate value
+	if (!pxSetRunSoftware(config, "warpRun", "warp_id", warp_id, software_ver)) {
+	  psError(PS_ERR_UNKNOWN, false, "failed to set warpRun.software_ver for warp_id: %" PRId64,
+		  warp_id);
+	  psFree(output);
+	  if (!psDBRollback(config->dbh)) {
+	    psError(PS_ERR_UNKNOWN, false, "database error");
+	  }
+	  return(false);
+	}
+	// Set warpRun.maskfrac* to the appropriate values.
+	if (!pxSetRunMaskfrac(config, "warpRun", "warp_id", warp_id, maskfrac_npix, maskfrac_static,
+			      maskfrac_dynamic, maskfrac_magic, maskfrac_advisory)) {
+	  psError(PS_ERR_UNKNOWN, false, "failed to set warpRun.software_ver for warp_id: %" PRId64,
+		  warp_id);
+	  psFree(output);
+	  if (!psDBRollback(config->dbh)) {
+	    psError(PS_ERR_UNKNOWN, false, "database error");
+	  }
+	  return(false);
+	}	
+
+	
         if (!status) {
             psError(PS_ERR_UNKNOWN, false, "failed to look up value for warp_id");
