Index: /branches/pap_stack/ippconfig/recipes/filerules-mef.mdc
===================================================================
--- /branches/pap_stack/ippconfig/recipes/filerules-mef.mdc	(revision 27411)
+++ /branches/pap_stack/ippconfig/recipes/filerules-mef.mdc	(revision 27412)
@@ -265,11 +265,13 @@
 PPSTACK.OUTPUT.MASK     OUTPUT {OUTPUT}.mk.fits                  MASK      COMP_MASK  FPA        TRUE      NONE
 PPSTACK.OUTPUT.VARIANCE OUTPUT {OUTPUT}.wt.fits                  VARIANCE  COMP_WT    FPA        TRUE      NONE
-PPSTACK.OUTPUT.EXP	OUTPUT {OUTPUT}.exp.fits     		 IMAGE     NONE	      FPA	 TRUE      NONE
-PPSTACK.OUTPUT.EXPNUM	OUTPUT {OUTPUT}.num.fits     		 MASK      NONE	      FPA	 TRUE      NONE
+PPSTACK.OUTPUT.EXP	OUTPUT {OUTPUT}.exp.fits     		 IMAGE     EXP	      FPA	 TRUE      NONE
+PPSTACK.OUTPUT.EXPNUM	OUTPUT {OUTPUT}.num.fits     		 MASK      EXPNUM     FPA	 TRUE      NONE
+PPSTACK.OUTPUT.EXPWT	OUTPUT {OUTPUT}.expwt.fits               VARIANCE  EXP	      FPA	 TRUE      NONE
 PPSTACK.UNCONV          OUTPUT {OUTPUT}.unconv.fits              IMAGE     COMP_IMG   FPA        TRUE      NONE
 PPSTACK.UNCONV.MASK     OUTPUT {OUTPUT}.unconv.mask.fits         MASK      COMP_MASK  FPA        TRUE      NONE
 PPSTACK.UNCONV.VARIANCE OUTPUT {OUTPUT}.unconv.wt.fits           VARIANCE  COMP_WT    FPA        TRUE      NONE
-PPSTACK.UNCONV.EXP	OUTPUT {OUTPUT}.unconv.exp.fits 	 IMAGE     NONE	      FPA	 TRUE      NONE
-PPSTACK.UNCONV.EXPNUM	OUTPUT {OUTPUT}.unconv.num.fits 	 MASK  	   NONE	      FPA	 TRUE      NONE
+PPSTACK.UNCONV.EXP	OUTPUT {OUTPUT}.unconv.exp.fits 	 IMAGE     EXP	      FPA	 TRUE      NONE
+PPSTACK.UNCONV.EXPNUM	OUTPUT {OUTPUT}.unconv.num.fits 	 MASK  	   EXPNUM     FPA	 TRUE      NONE
+PPSTACK.UNCONV.EXPWT	OUTPUT {OUTPUT}.unconv.expwt.fits        VARIANCE  EXP	      FPA	 TRUE      NONE
 PPSTACK.TARGET.PSF      OUTPUT {OUTPUT}.target.psf               PSF       NONE       CHIP       TRUE      NONE
 PPSTACK.CONV.KERNEL     OUTPUT {OUTPUT}.{FILE.INDEX}.kernel      SUBKERNEL NONE       FPA        TRUE      NONE
Index: /branches/pap_stack/ippconfig/recipes/filerules-simple.mdc
===================================================================
--- /branches/pap_stack/ippconfig/recipes/filerules-simple.mdc	(revision 27411)
+++ /branches/pap_stack/ippconfig/recipes/filerules-simple.mdc	(revision 27412)
@@ -216,4 +216,5 @@
 PPSTACK.OUTPUT.EXP	OUTPUT {OUTPUT}.exp.fits     IMAGE     EXP	  FPA	     TRUE      NONE
 PPSTACK.OUTPUT.EXPNUM	OUTPUT {OUTPUT}.num.fits     MASK      EXPNUM	  FPA	     TRUE      NONE
+PPSTACK.OUTPUT.EXPWT	OUTPUT {OUTPUT}.expwt.fits   VARIANCE  EXP	  FPA	     TRUE      NONE
 PPSTACK.UNCONV          OUTPUT {OUTPUT}.unconv.fits  IMAGE     COMP_IMG   FPA        TRUE      NONE
 PPSTACK.UNCONV.MASK     OUTPUT {OUTPUT}.unconv.mask.fits MASK  COMP_MASK  FPA        TRUE      NONE
@@ -221,4 +222,5 @@
 PPSTACK.UNCONV.EXP	OUTPUT {OUTPUT}.unconv.exp.fits IMAGE  EXP	  FPA	     TRUE      NONE
 PPSTACK.UNCONV.EXPNUM	OUTPUT {OUTPUT}.unconv.num.fits MASK   EXPNUM	  FPA	     TRUE      NONE
+PPSTACK.UNCONV.EXPWT	OUTPUT {OUTPUT}.unconv.expwt.fits VARIANCE EXP	  FPA	     TRUE      NONE
 PPSTACK.TARGET.PSF      OUTPUT {OUTPUT}.target.psf   PSF       NONE       CHIP       TRUE      NONE
 PPSTACK.CONV.KERNEL     OUTPUT {OUTPUT}.{FILE.INDEX}.kernel SUBKERNEL NONE FPA       TRUE      NONE
Index: /branches/pap_stack/ippconfig/recipes/filerules-split.mdc
===================================================================
--- /branches/pap_stack/ippconfig/recipes/filerules-split.mdc	(revision 27411)
+++ /branches/pap_stack/ippconfig/recipes/filerules-split.mdc	(revision 27412)
@@ -233,11 +233,13 @@
 PPSTACK.OUTPUT.MASK     OUTPUT {OUTPUT}.mask.fits                MASK      COMP_MASK  FPA        TRUE      NONE
 PPSTACK.OUTPUT.VARIANCE OUTPUT {OUTPUT}.wt.fits                  VARIANCE  COMP_WT    FPA        TRUE      NONE
-PPSTACK.OUTPUT.EXP	OUTPUT {OUTPUT}.exp.fits     		 IMAGE     NONE	      FPA	 TRUE      NONE
-PPSTACK.OUTPUT.EXPNUM	OUTPUT {OUTPUT}.num.fits     		 MASK      NONE	      FPA	 TRUE      NONE
+PPSTACK.OUTPUT.EXP	OUTPUT {OUTPUT}.exp.fits     		 IMAGE     EXP	      FPA	 TRUE      NONE
+PPSTACK.OUTPUT.EXPNUM	OUTPUT {OUTPUT}.num.fits     		 MASK      EXPNUM     FPA	 TRUE      NONE
+PPSTACK.OUTPUT.EXPWT	OUTPUT {OUTPUT}.expwt.fits               VARIANCE  EXP	      FPA	 TRUE      NONE
 PPSTACK.UNCONV          OUTPUT {OUTPUT}.unconv.fits              IMAGE     COMP_IMG   FPA        TRUE      NONE
 PPSTACK.UNCONV.MASK     OUTPUT {OUTPUT}.unconv.mask.fits         MASK      COMP_MASK  FPA        TRUE      NONE
 PPSTACK.UNCONV.VARIANCE OUTPUT {OUTPUT}.unconv.wt.fits           VARIANCE  COMP_WT    FPA        TRUE      NONE
-PPSTACK.UNCONV.EXP	OUTPUT {OUTPUT}.unconv.exp.fits 	 IMAGE     NONE	      FPA	 TRUE      NONE
-PPSTACK.UNCONV.EXPNUM	OUTPUT {OUTPUT}.unconv.num.fits 	 MASK  	   NONE	      FPA	 TRUE      NONE
+PPSTACK.UNCONV.EXP	OUTPUT {OUTPUT}.unconv.exp.fits 	 IMAGE     EXP	      FPA	 TRUE      NONE
+PPSTACK.UNCONV.EXPNUM	OUTPUT {OUTPUT}.unconv.num.fits 	 MASK  	   EXPNUM     FPA	 TRUE      NONE
+PPSTACK.UNCONV.EXPWT	OUTPUT {OUTPUT}.unconv.expwt.fits        VARIANCE  EXP	      FPA	 TRUE      NONE
 PPSTACK.TARGET.PSF      OUTPUT {OUTPUT}.target.psf               PSF       NONE       CHIP       TRUE      NONE
 PPSTACK.CONV.KERNEL     OUTPUT {OUTPUT}.{FILE.INDEX}.kernel      SUBKERNEL NONE       FPA        TRUE      NONE
Index: /branches/pap_stack/ippconfig/recipes/fitstypes.mdc
===================================================================
--- /branches/pap_stack/ippconfig/recipes/fitstypes.mdc	(revision 27411)
+++ /branches/pap_stack/ippconfig/recipes/fitstypes.mdc	(revision 27412)
@@ -103,6 +103,7 @@
 	BITPIX		S32	16
 	SCALING		STR	MANUAL
+	# Note: TRUE = BZERO + BSCALE * DISK
 	BSCALE		F32	0.1	# Disk is stored as 1/10th sec
-	BZERO		F32	3276.7	# Store unsigned zero as zero
+	BZERO		F32	3276.8	# Store unsigned zero as zero
 	COMPRESSION	STR	GZIP
 	TILE.X		S32	0
Index: /branches/pap_stack/ppStack/src/ppStackCamera.c
===================================================================
--- /branches/pap_stack/ppStack/src/ppStackCamera.c	(revision 27411)
+++ /branches/pap_stack/ppStack/src/ppStackCamera.c	(revision 27412)
@@ -310,5 +310,5 @@
     pmFPAfile *expNum = pmFPAfileDefineOutput(config, exp->fpa, "PPSTACK.OUTPUT.EXPNUM");
     if (!expNum) {
-        psError(psErrorCodeLast(), false, _("Unable to generate output file from PPSTACK.OUTPUT.MASK"));
+        psError(psErrorCodeLast(), false, _("Unable to generate output file from PPSTACK.OUTPUT.EXPNUM"));
         return false;
     }
@@ -319,4 +319,15 @@
     expNum->save = true;
 
+    // Weighted exposure
+    pmFPAfile *expWt = pmFPAfileDefineOutput(config, exp->fpa, "PPSTACK.OUTPUT.EXPWT");
+    if (!expWt) {
+        psError(psErrorCodeLast(), false, _("Unable to generate output file from PPSTACK.OUTPUT.EXPWT"));
+        return false;
+    }
+    if (expWt->type != PM_FPA_FILE_VARIANCE) {
+        psError(PPSTACK_ERR_CONFIG, true, "PPSTACK.OUTPUT.EXPWT is not of type VARIANCE");
+        return false;
+    }
+    expWt->save = true;
 
 
@@ -413,5 +424,5 @@
     }
 
-    // Output mask
+    // Exposure numbers
     pmFPAfile *unconvExpNum = pmFPAfileDefineOutput(config, unconvExp->fpa, "PPSTACK.UNCONV.EXPNUM");
     if (!unconvExpNum) {
@@ -425,4 +436,15 @@
     unconvExpNum->save = true;
 
+    // Weighted exposure
+    pmFPAfile *unconvExpWt = pmFPAfileDefineOutput(config, unconvExp->fpa, "PPSTACK.UNCONV.EXPWT");
+    if (!unconvExpWt) {
+        psError(psErrorCodeLast(), false, _("Unable to generate output file from PPSTACK.UNCONV.EXPWT"));
+        return false;
+    }
+    if (unconvExpWt->type != PM_FPA_FILE_VARIANCE) {
+        psError(PPSTACK_ERR_CONFIG, true, "PPSTACK.UNCONV.EXPWT is not of type VARIANCE");
+        return false;
+    }
+    unconvExpWt->save = true;
 
     // Output JPEGs
Index: /branches/pap_stack/ppStack/src/ppStackFiles.c
===================================================================
--- /branches/pap_stack/ppStack/src/ppStackFiles.c	(revision 27411)
+++ /branches/pap_stack/ppStack/src/ppStackFiles.c	(revision 27412)
@@ -23,10 +23,11 @@
 /// Regular (convolved) stack files
 static char *filesStack[] = { "PPSTACK.OUTPUT", "PPSTACK.OUTPUT.MASK", "PPSTACK.OUTPUT.VARIANCE",
-                              "PPSTACK.OUTPUT.EXP", "PPSTACK.OUTPUT.EXPNUM",
+                              "PPSTACK.OUTPUT.EXP", "PPSTACK.OUTPUT.EXPNUM", "PPSTACK.OUTPUT.EXPWT",
                               "PPSTACK.OUTPUT.JPEG1", "PPSTACK.OUTPUT.JPEG2",
                               NULL };
 /// Unconvolved stack files
 static char *filesUnconv[] = { "PPSTACK.UNCONV", "PPSTACK.UNCONV.MASK", "PPSTACK.UNCONV.VARIANCE",
-                               "PPSTACK.UNCONV.EXP", "PPSTACK.UNCONV.EXPNUM", NULL };
+                               "PPSTACK.UNCONV.EXP", "PPSTACK.UNCONV.EXPNUM", "PPSTACK.UNCONV.EXPWT",
+                               NULL };
 
 /// Files for photometry
Index: /branches/pap_stack/psModules/src/imcombine/pmStack.c
===================================================================
--- /branches/pap_stack/psModules/src/imcombine/pmStack.c	(revision 27411)
+++ /branches/pap_stack/psModules/src/imcombine/pmStack.c	(revision 27412)
@@ -34,8 +34,8 @@
 
 
-//#define TESTING                         // Enable test output
-//#define TEST_X 843-1                     // x coordinate to examine
-//#define TEST_Y 813-1                     // y coordinate to examine
-//#define TEST_RADIUS 0                    // Radius to examine
+#define TESTING                         // Enable test output
+#define TEST_X 843-1                     // x coordinate to examine
+#define TEST_Y 813-1                     // y coordinate to examine
+#define TEST_RADIUS 0                    // Radius to examine
 
 
@@ -129,4 +129,5 @@
     float sumExp = 0.0;                 // Sum of the exposure time
     float sumExpWeight = 0.0;           // Sum of the exposure time multiplied by the global weights
+    int numGood = 0;                    // Number of good exposures
     for (int i = 0; i < values->n; i++) {
         sumValueWeight += values->data.F32[i] * weights->data.F32[i];
@@ -138,4 +139,5 @@
             sumExp += exps->data.F32[i];
             sumExpWeight += exps->data.F32[i] * weights->data.F32[i];
+            numGood++;
         }
     }
@@ -153,5 +155,5 @@
     }
     if (expWeight) {
-        *expWeight = sumExpWeight / sumWeight;
+        *expWeight = sumExpWeight;
     }
     return true;
@@ -391,5 +393,6 @@
                           int x, int y, // Coordinates of interest; frame of output image
                           psImageMaskType bad, // Value for bad pixels
-                          bool safe             // Safe combination?
+                          bool safe,           // Safe combination?
+                          float invTotalWeight    // Inverse of total weight for all inputs
                           )
 {
@@ -423,4 +426,5 @@
               if (exp) {
                   expValue = pixelExps->data.F32[0];
+                  expWeightValue = pixelExps->data.F32[0];
               }
               maskValue = 0;
@@ -490,5 +494,5 @@
     }
     if (expweight) {
-        expweight->data.F32[y][x] = expWeightValue;
+        expweight->data.F32[y][x] = expWeightValue * invTotalWeight;
     }
 
@@ -1024,4 +1028,6 @@
     psVector *exps = psVectorAlloc(num, PS_TYPE_F32);    // Exposure times for each image
     psArray *stack = psArrayAlloc(num); // Stack of readouts
+    float totalExpWeight = 0.0;           // Total value of all weighted exposure times
+    float totalExp = 0.0;                 // Total exposure time
     for (int i = 0; i < num; i++) {
         pmStackData *data = input->data[i]; // Stack data for this input
@@ -1033,4 +1039,6 @@
         weights->data.F32[i] = data->weight;
         exps->data.F32[i] = data->exp;
+        totalExp += exps->data.F32[i];
+        totalExpWeight += exps->data.F32[i] * weights->data.F32[i];
         pmReadout *ro = data->readout;  // Readout of interest
         stack->data[i] = psMemIncrRefCounter(ro);
@@ -1051,4 +1059,5 @@
         }
     }
+    totalExpWeight = totalExp / totalExpWeight;    // Convert to inverse
 
     int minInputCols, maxInputCols, minInputRows, maxInputRows; // Smallest and largest values to combine
@@ -1095,5 +1104,5 @@
     }
 
-    psImage *exp = NULL, *expnum = NULL; // Exposure map and exposure number
+    psImage *exp = NULL, *expnum = NULL, *expweight = NULL; // Exposure map and exposure number
     if (expmaps) {
         if (!expmaps->image) {
@@ -1106,4 +1115,9 @@
         }
         expnum = expmaps->mask;
+
+        if (!expmaps->variance) {
+            expmaps->variance = psImageAlloc(numCols, numRows, PS_TYPE_F32);
+        }
+        expweight = expmaps->variance;
     }
 
@@ -1145,6 +1159,6 @@
             combineExtract(&num, &suspect, buffer, combinedImage, combinedMask, combinedVariance,
                            input, weights, exps, addVariance, reject, x, y, maskVal, maskSuspect);
-            combinePixels(combinedImage, combinedMask, combinedVariance, exp, expnum, NULL,
-                          num, buffer, x, y, bad, safe);
+            combinePixels(combinedImage, combinedMask, combinedVariance, exp, expnum, expweight,
+                          num, buffer, x, y, bad, safe, totalExpWeight);
 
             if (iter > 0) {
