Index: /trunk/ppImage/configure.ac
===================================================================
--- /trunk/ppImage/configure.ac	(revision 8347)
+++ /trunk/ppImage/configure.ac	(revision 8348)
@@ -27,4 +27,5 @@
 PKG_CHECK_MODULES([PSPHOT], [psphot >= 0.0.0]) 
 PKG_CHECK_MODULES([PSASTRO], [psastro >= 0.0.0]) 
+PKG_CHECK_MODULES([PPSTATS], [ppStats >= 0.0.0]) 
 
 CFLAGS="${CFLAGS} -Wall -Werror -std=c99"
Index: /trunk/ppImage/src/Makefile.am
===================================================================
--- /trunk/ppImage/src/Makefile.am	(revision 8347)
+++ /trunk/ppImage/src/Makefile.am	(revision 8348)
@@ -6,6 +6,6 @@
 	ppMem.h
 
-ppImage_CPPFLAGS = $(PSLIB_CFLAGS) $(PSMODULE_CFLAGS) $(PSPHOT_CFLAGS) $(PSASTRO_CFLAGS) $(ppImage_CFLAGS)
-ppImage_LDFLAGS = $(PSLIB_LIBS) $(PSMODULE_LIBS) $(PSPHOT_LIBS) $(PSASTRO_LIBS)
+ppImage_CPPFLAGS = $(PSLIB_CFLAGS) $(PSMODULE_CFLAGS) $(PSPHOT_CFLAGS) $(PSASTRO_CFLAGS) $(PPSTATS_CFLAGS) $(ppImage_CFLAGS)
+ppImage_LDFLAGS = $(PSLIB_LIBS) $(PSMODULE_LIBS) $(PSPHOT_LIBS) $(PPSTATS_LIBS) $(PSASTRO_LIBS)
 ppImage_SOURCES = \
 	ppImage.c \
@@ -24,6 +24,6 @@
 	ppImageAddstar.c
 
-ppFocus_CPPFLAGS = $(PSLIB_CFLAGS) $(PSMODULE_CFLAGS) $(PSPHOT_CFLAGS) $(PSASTRO_CFLAGS) $(ppImage_CFLAGS)
-ppFocus_LDFLAGS = $(PSLIB_LIBS) $(PSMODULE_LIBS) $(PSPHOT_LIBS) $(PSASTRO_LIBS)
+ppFocus_CPPFLAGS = $(PSLIB_CFLAGS) $(PSMODULE_CFLAGS) $(PSPHOT_CFLAGS) $(PSASTRO_CFLAGS) $(PPSTATS_CFLAGS) $(ppImage_CFLAGS)
+ppFocus_LDFLAGS = $(PSLIB_LIBS) $(PSMODULE_LIBS) $(PSPHOT_LIBS) $(PPSTATS_LIBS) $(PSASTRO_LIBS)
 ppFocus_SOURCES = \
 	ppFocus.c \
Index: /trunk/ppImage/src/ppImageArguments.c
===================================================================
--- /trunk/ppImage/src/ppImageArguments.c	(revision 8347)
+++ /trunk/ppImage/src/ppImageArguments.c	(revision 8348)
@@ -23,4 +23,11 @@
     psMetadata *options = psMetadataAlloc ();
     psMetadataAddPtr (config->arguments, PS_LIST_TAIL, "PPIMAGE.OPTIONS",  PS_DATA_METADATA, "", options);
+
+    if ((N = psArgumentGet(argc, argv, "-stat"))) {
+        psArgumentRemove(N, &argc, argv);
+        psMetadataAddStr(options, PS_LIST_TAIL, "STATS", PS_META_REPLACE,
+                         "Filename for summary statistics", argv[N]);
+        psArgumentRemove(N, &argc, argv);
+    }
 
     // the following options override the PPIMAGE recipe options
Index: /trunk/ppImage/src/ppImageLoop.c
===================================================================
--- /trunk/ppImage/src/ppImageLoop.c	(revision 8347)
+++ /trunk/ppImage/src/ppImageLoop.c	(revision 8348)
@@ -1,3 +1,4 @@
-# include "ppImage.h"
+#include <ppStats.h>
+#include "ppImage.h"
 
 bool ppImageLoop (pmConfig *config, ppImageOptions *options) {
@@ -8,8 +9,22 @@
     pmReadout *readout;
 
+    bool mdok;                      // Status of MD lookup
+    psMetadata *extraOpts = psMetadataLookupMD(&mdok, config->arguments, "PPIMAGE.OPTIONS"); // Extra options
+    const char *statsName = psMetadataLookupStr(&mdok, extraOpts, "STATS"); // Filename for statistics
+    psMetadata *stats = NULL;           // Container for statistics
+    FILE *statsFile = NULL;             // File stream for statistics
+    if (mdok && statsName && strlen(statsName) > 0) {
+        statsFile = fopen(statsName, "w");
+        if (!statsFile) {
+            psError(PS_ERR_IO, true, "Unable to open statistics file %s for writing.\n", statsName);
+        } else {
+            stats = psMetadataAlloc();
+        }
+    }
+
     pmFPAfile *input = psMetadataLookupPtr (&status, config->files, "PPIMAGE.INPUT");
     if (!status) {
-	psErrorStackPrint(stderr, "Can't find input data!\n");
-	exit(EXIT_FAILURE);
+        psErrorStackPrint(stderr, "Can't find input data!\n");
+        exit(EXIT_FAILURE);
     }
 
@@ -23,32 +38,52 @@
         if (!chip->process || !chip->file_exists) { continue; }
 
-	if (!pmFPAfileIOChecks (config, view, PM_FPA_BEFORE)) return false;
+        if (!pmFPAfileIOChecks (config, view, PM_FPA_BEFORE)) return false;
 
-	while ((cell = pmFPAviewNextCell (view, input->fpa, 1)) != NULL) {
+        while ((cell = pmFPAviewNextCell (view, input->fpa, 1)) != NULL) {
             psLogMsg ("ppImageLoop", 4, "Cell %d: %x %x\n", view->cell, cell->file_exists, cell->process);
             if (!cell->process || !cell->file_exists) { continue; }
-	    if (!pmFPAfileIOChecks (config, view, PM_FPA_BEFORE)) return false;
+            if (!pmFPAfileIOChecks (config, view, PM_FPA_BEFORE)) return false;
 
-	    // process each of the readouts
-	    while ((readout = pmFPAviewNextReadout (view, input->fpa, 1)) != NULL) {
-		if (!pmFPAfileIOChecks (config, view, PM_FPA_BEFORE)) return false;
-		if (!readout->data_exists) { continue; }
+            // process each of the readouts
+            while ((readout = pmFPAviewNextReadout (view, input->fpa, 1)) != NULL) {
+                if (!pmFPAfileIOChecks (config, view, PM_FPA_BEFORE)) return false;
+                if (!readout->data_exists) { continue; }
 
-		// perform the detrend analysis
-		if (!ppImageDetrendReadout (config, options, view)) return false;
-		
-		if (!pmFPAfileIOChecks (config, view, PM_FPA_AFTER)) return false;
-	    }
-	    if (!pmFPAfileIOChecks (config, view, PM_FPA_AFTER)) return false;
-	}
+                // perform the detrend analysis
+                if (!ppImageDetrendReadout (config, options, view)) return false;
 
-	ppImageMosaicChip (config, view, "PPIMAGE.OUTPUT.CHIP", "PPIMAGE.OUTPUT");
-	ppImageRebinChip (config, view, "PPIMAGE.BIN1", "PPIMAGE.OUTPUT.CHIP");
-	ppImageRebinChip (config, view, "PPIMAGE.BIN2", "PPIMAGE.OUTPUT.CHIP");
+                if (!pmFPAfileIOChecks (config, view, PM_FPA_AFTER)) return false;
+            }
 
-	// we perform photometry on the readouts of this chip in the output
-	if (options->doPhotom) ppImagePhotom (config, view);
+            // Perform statistics on the detrended cell
+            if (stats) {
+                ppStats(stats, input->fpa, view, config);
+            }
 
-	if (!pmFPAfileIOChecks (config, view, PM_FPA_AFTER)) return false;
+            if (!pmFPAfileIOChecks (config, view, PM_FPA_AFTER)) return false;
+        }
+
+        ppImageMosaicChip (config, view, "PPIMAGE.OUTPUT.CHIP", "PPIMAGE.OUTPUT");
+        ppImageRebinChip (config, view, "PPIMAGE.BIN1", "PPIMAGE.OUTPUT.CHIP");
+        ppImageRebinChip (config, view, "PPIMAGE.BIN2", "PPIMAGE.OUTPUT.CHIP");
+
+        // we perform photometry on the readouts of this chip in the output
+        if (options->doPhotom) ppImagePhotom (config, view);
+
+        if (!pmFPAfileIOChecks (config, view, PM_FPA_AFTER)) return false;
+    }
+
+    // Write out summary statistics
+    if (stats) {
+        const char *statsMDC = psMetadataConfigFormat(stats);
+        if (!statsMDC || strlen(statsMDC) == 0) {
+            psError(PS_ERR_IO, false, "Unable to get statistics MDC file.\n");
+        } else {
+            fprintf(statsFile, "%s", statsMDC);
+        }
+        psFree(statsMDC);
+        fclose(statsFile);
+
+        psFree(stats);
     }
 
