Index: trunk/ippTools/src/difftool.c
===================================================================
--- trunk/ippTools/src/difftool.c	(revision 27794)
+++ trunk/ippTools/src/difftool.c	(revision 28043)
@@ -162,4 +162,10 @@
             exposure,
             false,
+	    NULL, // software version
+	    0,    // mask stat npix
+	    NAN,    // static
+	    NAN,    // dynamic
+	    NAN,    // magic
+	    NAN,    // advisory
             diff_mode,
             note
@@ -549,4 +555,36 @@
     PXOPT_LOOKUP_F32(good_frac, config->args, "-good_frac", false, false);
     PXOPT_LOOKUP_S64(magicked, config->args, "-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_ppsub, config->args, "-ver_ppsub", 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 ppsub %s streaks %s\n",
+	    ver_pslib,ver_psmodules,ver_psphot,ver_ppstats,ver_ppsub,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_ppsub) {
+      ver_code = pxMergeCodeVersions(ver_code,ver_ppsub);
+    }
+    if (ver_streaks) {
+      ver_code = pxMergeCodeVersions(ver_code,ver_streaks);
+    }
 
     if (!psDBTransaction(config->dbh)) {
@@ -582,5 +620,11 @@
                            fault,
                            quality,
-                           magicked
+			   magicked,
+			   ver_code,
+			   maskfrac_npix,
+			   maskfrac_static,
+			   maskfrac_dynamic,
+			   maskfrac_magic,
+			   maskfrac_advisory
           )) {
         if (!psDBRollback(config->dbh)) {
@@ -671,4 +715,48 @@
         psS64 magicked = psMetadataLookupS64(NULL, row, "magicked");
 
+	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,"difftool_coalesce_run.sql",diff_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 diffRun.software_ver to the appropriate value
+	if (software_ver) {
+	  if (!pxSetRunSoftware(config, "diffRun", "diff_id", diff_id, software_ver)) {
+	    psError(PS_ERR_UNKNOWN, false, "failed to set diffRun.software_ver for diff_id: %" PRId64,
+		    diff_id);
+	    psFree(output);
+	    if (!psDBRollback(config->dbh)) {
+	      psError(PS_ERR_UNKNOWN, false, "database error");
+	    }
+	    return(false);
+	  }
+	}
+	// Set diffRun.maskfrac* to the appropriate values.
+	if (maskfrac_npix) {
+	  if (!pxSetRunMaskfrac(config, "diffRun", "diff_id", diff_id, maskfrac_npix, maskfrac_static,
+				maskfrac_dynamic, maskfrac_magic, maskfrac_advisory)) {
+	    psError(PS_ERR_UNKNOWN, false, "failed to set diffRun.software_ver for diff_id: %" PRId64,
+		    diff_id);
+	    psFree(output);
+	    if (!psDBRollback(config->dbh)) {
+	      psError(PS_ERR_UNKNOWN, false, "database error");
+	    }
+	    return(false);
+	  }
+	}
         // set diffRun.state to 'full'
         if (!setdiffRunState(config, diff_id, "full", magicked)) {
@@ -985,4 +1073,10 @@
             false,
             0,       // magicked
+	    NULL, // software version
+	    0,    // mask stat npix
+	    NAN,    // static
+	    NAN,    // dynamic
+	    NAN,    // magic
+	    NAN,    // advisory
             diff_mode, // diff_mode
             note
@@ -1412,4 +1506,10 @@
                 true,                   // exposure
                 0,       // magicked
+		NULL, // software version
+		0,    // mask stat npix
+		NAN,    // static
+		NAN,    // dynamic
+		NAN,    // magic
+		NAN,    // advisory
                 IPP_DIFF_MODE_WARP_STACK,
                 note
@@ -1764,4 +1864,10 @@
                                           true,  // exposure
                                           false, // magicked
+					  NULL, // software version
+					  0,    // mask stat npix
+					  NAN,    // static
+					  NAN,    // dynamic
+					  NAN,    // magic
+					  NAN,    // advisory					 
                                           IPP_DIFF_MODE_WARP_WARP,
                                           note); // Run to insert
@@ -2046,4 +2152,10 @@
                                       false,                 // exposure
                                       0,       // magicked
+				      NULL, // software version
+				      0,    // mask stat npix
+				      NAN,    // static
+				      NAN,    // dynamic
+				      NAN,    // magic
+				      NAN,    // advisory				     
                                       IPP_DIFF_MODE_STACK_STACK, // diff_mode
                                       note
