Index: /trunk/psModules/src/imcombine/pmSubtraction.c
===================================================================
--- /trunk/psModules/src/imcombine/pmSubtraction.c	(revision 17782)
+++ /trunk/psModules/src/imcombine/pmSubtraction.c	(revision 17783)
@@ -4,6 +4,6 @@
  *  @author GLG, MHPCC
  *
- *  @version $Revision: 1.90 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2008-05-01 19:20:51 $
+ *  @version $Revision: 1.91 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2008-05-24 00:40:16 $
  *
  *  Copyright 2004-2007 Institute for Astronomy, University of Hawaii
@@ -493,6 +493,7 @@
 
 
-int pmSubtractionRejectStamps(pmSubtractionStampList *stamps, const psVector *deviations,
-                              psImage *subMask, float sigmaRej, int footprint)
+int pmSubtractionRejectStamps(float *rms, int *num, pmSubtractionStampList *stamps,
+                              const psVector *deviations, psImage *subMask, float sigmaRej,
+                              int footprint)
 {
     PM_ASSERT_SUBTRACTION_STAMP_LIST_NON_NULL(stamps, -1);
@@ -513,4 +514,13 @@
     }
 
+    totalSquareDev = sqrt(totalSquareDev / (double)numStamps); // Convert to RMS
+
+    if (rms) {
+        *rms = totalSquareDev;
+    }
+    if (num) {
+        *num = numStamps;
+    }
+
     if (numStamps == 0) {
         psError(PS_ERR_UNKNOWN, true, "No good stamps found.");
@@ -520,9 +530,10 @@
     if (!isfinite(sigmaRej) || sigmaRej <= 0.0) {
         // User just wanted to calculate and record the RMS for posterity
-        psLogMsg("psModules.imcombine", PS_LOG_INFO, "RMS deviation: %f", sqrt(totalSquareDev / numStamps));
+        psLogMsg("psModules.imcombine", PS_LOG_INFO, "RMS deviation from %d stamps: %lf",
+                 numStamps, totalSquareDev);
         return 0;
     }
 
-    float limit = sigmaRej * sqrt(totalSquareDev / (double)numStamps); // Limit on maximum deviation
+    float limit = sigmaRej * totalSquareDev; // Limit on maximum deviation
     psTrace("psModules.imcombine", 1, "Deviation limit: %f\n", limit);
 
Index: /trunk/psModules/src/imcombine/pmSubtraction.h
===================================================================
--- /trunk/psModules/src/imcombine/pmSubtraction.h	(revision 17782)
+++ /trunk/psModules/src/imcombine/pmSubtraction.h	(revision 17783)
@@ -6,6 +6,6 @@
  * @author GLG, MHPCC
  *
- * @version $Revision: 1.24 $ $Name: not supported by cvs2svn $
- * @date $Date: 2008-02-22 19:50:56 $
+ * @version $Revision: 1.25 $ $Name: not supported by cvs2svn $
+ * @date $Date: 2008-05-24 00:40:16 $
  * Copyright 2004-207 Institute for Astronomy, University of Hawaii
  */
@@ -64,5 +64,7 @@
 
 /// Reject stamps
-int pmSubtractionRejectStamps(pmSubtractionStampList *stamps, ///< Stamps
+int pmSubtractionRejectStamps(float *rms, ///< RMS deviation, to return
+                              int *num, ///< Number of good stamps, to return
+                              pmSubtractionStampList *stamps, ///< Stamps
                               const psVector *deviations, ///< Deviations for each stamp
                               psImage *subMask, ///< Subtraction mask
Index: /trunk/psModules/src/imcombine/pmSubtractionMatch.c
===================================================================
--- /trunk/psModules/src/imcombine/pmSubtractionMatch.c	(revision 17782)
+++ /trunk/psModules/src/imcombine/pmSubtractionMatch.c	(revision 17783)
@@ -344,5 +344,7 @@
             memCheck("kernels");
 
-            int numRejected = -1;               // Number of rejected stamps in each iteration
+            float rmsStamps = NAN;      // RMS for stamps
+            int numStamps = 0;          // Number of good stamps
+            int numRejected = -1;       // Number of rejected stamps in each iteration
             for (int k = 0; k < iter && numRejected != 0; k++) {
                 psLogMsg("psModules.imcombine", PS_LOG_INFO, "Iteration %d.", k);
@@ -379,5 +381,6 @@
 
                 psTrace("psModules.imcombine", 3, "Rejecting stamps...\n");
-                numRejected = pmSubtractionRejectStamps(stamps, deviations, subMask, rej, footprint);
+                numRejected = pmSubtractionRejectStamps(&rmsStamps, &numStamps, stamps, deviations,
+                                                        subMask, rej, footprint);
                 if (numRejected < 0) {
                     psError(PS_ERR_UNKNOWN, false, "Unable to reject stamps.");
@@ -401,9 +404,23 @@
                     goto MATCH_ERROR;
                 }
-                pmSubtractionRejectStamps(stamps, deviations, subMask, NAN, footprint);
+                pmSubtractionRejectStamps(&rmsStamps, &numStamps, stamps, deviations,
+                                          subMask, NAN, footprint);
                 psFree(deviations);
             }
             psFree(stamps);
             stamps = NULL;
+
+            if (mode == PM_SUBTRACTION_MODE_1 || mode == PM_SUBTRACTION_MODE_DUAL) {
+                psMetadataAddS32(conv1->analysis, PS_LIST_TAIL, PM_SUBTRACTION_ANALYSIS_STAMPS_NUM,
+                                 PS_META_DUPLICATE_OK, "Number of good stamps", numStamps);
+                psMetadataAddF32(conv1->analysis, PS_LIST_TAIL, PM_SUBTRACTION_ANALYSIS_STAMPS_RMS,
+                                 PS_META_DUPLICATE_OK, "RMS deviation of stamps", rmsStamps);
+            }
+            if (mode == PM_SUBTRACTION_MODE_2 || mode == PM_SUBTRACTION_MODE_DUAL) {
+                psMetadataAddS32(conv2->analysis, PS_LIST_TAIL, PM_SUBTRACTION_ANALYSIS_STAMPS_NUM,
+                                 PS_META_DUPLICATE_OK, "Number of good stamps", numStamps);
+                psMetadataAddF32(conv2->analysis, PS_LIST_TAIL, PM_SUBTRACTION_ANALYSIS_STAMPS_RMS,
+                                 PS_META_DUPLICATE_OK, "RMS deviation of stamps", rmsStamps);
+            }
 
             memCheck("solution");
Index: /trunk/psModules/src/imcombine/pmSubtractionMatch.h
===================================================================
--- /trunk/psModules/src/imcombine/pmSubtractionMatch.h	(revision 17782)
+++ /trunk/psModules/src/imcombine/pmSubtractionMatch.h	(revision 17783)
@@ -12,5 +12,6 @@
 #define PM_SUBTRACTION_ANALYSIS_MODE "SUBTRACTION.MODE" // Name of subtraction mode in the analysis metadata
 #define PM_SUBTRACTION_ANALYSIS_REGION "SUBTRACTION.REGION" // Name of subtraction region in the analysis MD
-
+#define PM_SUBTRACTION_ANALYSIS_STAMPS_RMS "SUBTRACTION.RMS" // Name of stamp rms in the analysis metadata
+#define PM_SUBTRACTION_ANALYSIS_STAMPS_NUM "SUBTRACTION.NUM"// Name of the number of stamps in the analysis MD
 
 /// Match two images
@@ -45,5 +46,5 @@
                         psMaskType maskBlank, ///< Mask for blank region
                         float badFrac,   ///< Maximum fraction of bad input pixels to accept
-                        pmSubtractionMode mode ///< Mode of subtraction
+                        pmSubtractionMode mode ///< Mode of subtraction; may be modified
     );
 
