Index: trunk/psModules/src/imcombine/pmSubtractionVisual.c
===================================================================
--- trunk/psModules/src/imcombine/pmSubtractionVisual.c	(revision 29004)
+++ trunk/psModules/src/imcombine/pmSubtractionVisual.c	(revision 29543)
@@ -146,4 +146,5 @@
     }
     pmVisualScaleImage(kapa1, canvas, "Subtraction_Stamps", 0, true);
+    psFree(canvas);
 
     pmVisualAskUser(&plotStamps);
@@ -152,5 +153,5 @@
 
 /** Plot the least-squares matrix of each stamp */
-bool pmSubtractionVisualPlotLeastSquares (pmSubtractionStampList *stamps, bool dual) {
+bool pmSubtractionVisualPlotLeastSquares (pmSubtractionStampList *stamps) {
 
     if (!pmVisualTestLevel("ppsub.chisq", 1)) return true;
@@ -209,4 +210,14 @@
     pmVisualScaleImage(kapa1, canvas32, "Least_Squares", 0, true);
 
+    if (0) {
+	static int count = 0;
+	char filename[64];
+	sprintf (filename, "chisq.%02d.fits", count);
+	count ++;
+	psFits *fits = psFitsOpen (filename, "w");
+	psFitsWriteImage (fits, NULL, canvas32, 0, NULL);
+	psFitsClose (fits);
+    }
+
     pmVisualAskUser(&plotLeastSquares);
     psFree(canvas);
@@ -271,8 +282,9 @@
 	    }
 	}
-	fprintf (stderr, "kernel %d, sum %f\n", i, sum);
+	// fprintf (stderr, "kernel %d, sum %f\n", i, sum);
     }							 
 	
     pmVisualScaleImage(kapa1, output, "Image", 0, true);
+    psFree(output);
     pmVisualAskUser(&plotImage);
     return true;
@@ -286,4 +298,6 @@
         return false;
     }
+
+    // XXX clear the overlay(s) (red at least!)
 
     // get the kernel sizes
@@ -297,8 +311,12 @@
 	if (!isfinite(stamp->flux)) continue;
 	if (!stamp->convolutions1 && !stamp->convolutions2) continue;
+	// fprintf (stderr, "flux: %f, maxFlux: %f  ", stamp->flux, maxFlux);
 	if (!maxStamp) {
 	    maxFlux = stamp->flux;
 	    maxStamp = stamp;
+	    // fprintf (stderr, "maxStamp %d\n", i);
 	    continue;
+	} else {
+	    // fprintf (stderr, "\n");
 	}
 	if (stamp->flux > maxFlux) {
@@ -337,14 +355,22 @@
 	    
 	    double sum = 0.0;
+	    double sum2 = 0.0;
 	    for (int y = -footprint; y <= footprint; y++) {
 		for (int x = -footprint; x <= footprint; x++) {
 		    output->data.F32[y + yPix][x + xPix] = kernel->kernel[y][x];
 		    sum += kernel->kernel[y][x];
+		    sum2 += PS_SQR(kernel->kernel[y][x]);
 		}
 	    }
-	    fprintf (stderr, "kernel %d, sum %f\n", i, sum);
+	    // fprintf (stderr, "kernel %d, sum %f, sum2: %e\n", i, sum, sum2);
 	}		
 	pmVisualScaleImage(kapa2, output, "Image", 0, true);
-    }					 
+
+	if (0) {
+	    psFits *fits = psFitsOpen("basis.1.fits", "w");
+	    psFitsWriteImage(fits, NULL, output, 0, NULL);
+	    psFitsClose(fits);
+	}
+    }
 	
     if (maxStamp->convolutions2) {
@@ -371,13 +397,22 @@
 	    
 	    double sum = 0.0;
+	    double sum2 = 0.0;
 	    for (int y = -footprint; y <= footprint; y++) {
 		for (int x = -footprint; x <= footprint; x++) {
 		    output->data.F32[y + yPix][x + xPix] = kernel->kernel[y][x];
 		    sum += kernel->kernel[y][x];
+		    sum2 += PS_SQR(kernel->kernel[y][x]);
 		}
 	    }
-	    fprintf (stderr, "kernel %d, sum %f\n", i, sum);
+	    // fprintf (stderr, "kernel %d, sum %f, sum2: %e\n", i, sum, sum2);
 	}		
 	pmVisualScaleImage(kapa2, output, "Image", 1, true);
+
+	if (0) {
+	    psFits *fits = psFitsOpen("basis.2.fits", "w");
+	    psFitsWriteImage(fits, NULL, output, 0, NULL);
+	    psFitsClose(fits);
+	}
+	psFree(output);
     }					 
 	
@@ -676,4 +711,5 @@
     psFree (x);
     psFree (y);
+    psFree (polyValues);
 
     pmVisualAskUser(NULL);
