Index: /trunk/ippScripts/scripts/detrend_stack.pl
===================================================================
--- /trunk/ippScripts/scripts/detrend_stack.pl	(revision 17230)
+++ /trunk/ippScripts/scripts/detrend_stack.pl	(revision 17231)
@@ -18,4 +18,5 @@
 use PS::IPP::Metadata::Stats;
 use PS::IPP::Metadata::List qw( parse_md_list );
+use File::Temp qw( tempfile );
 
 use PS::IPP::Config qw($PS_EXIT_SUCCESS
@@ -33,6 +34,6 @@
 use Pod::Usage qw( pod2usage );
 
-my ( $det_id, $iter, $class_id, $det_type, $camera, $outroot, $dbname, $reduction, $verbose, $no_update,
-     $no_op );
+my ( $det_id, $iter, $class_id, $det_type, $camera, $outroot, $dbname, $reduction, $verbose, $save_temps,
+     $no_update, $no_op );
 GetOptions(
     'det_id|d=s'        => \$det_id,
@@ -45,4 +46,5 @@
     'reduction=s'       => \$reduction,	# Reduction class for processing
     'verbose'           => \$verbose,   # Print to stdout
+    'save-temps'        => \$save_temps, # Save temporary files?
     'no-update'         => \$no_update,
     'no-op'             => \$no_op,
@@ -72,10 +74,24 @@
    [   
        #          KEYWORD                 STATISTIC          CHIPTOOL FLAG
-       { name => "bg",             type => "mean",  flag => "-bg",             dtype => "float" },
-       { name => "bg",             type => "stdev", flag => "-bg_mean_stdev",  dtype => "float" },
-       { name => "bg_stdev",       type => "rms",   flag => "-bg_stdev",       dtype => "float" },
-       # { name => "bg_mean_stdev",  type => "rms",   flag => "-bg_mean_stdev" },
+       { name => "ROBUST_MEDIAN",  type => "mean",  flag => "-bg",             dtype => "float" },
+       { name => "ROBUST_MEDIAN",  type => "stdev", flag => "-bg_mean_stdev",  dtype => "float" },
+       { name => "ROBUST_STDEV",   type => "rms",   flag => "-bg_stdev",       dtype => "float" },
    ];
 my $stats = PS::IPP::Metadata::Stats->new($STATS); # Stats parser
+
+# The output file rule name depends on the detrend type
+my $FILERULES = { 'FLATMASK' => 'PPMERGE.OUTPUT.MASK',
+		  'DARKMASK' => 'PPMERGE.OUTPUT.MASK',
+		  'MASK'     => 'PPMERGE.OUTPUT.MASK',
+		  'BIAS'     => 'PPMERGE.OUTPUT.BIAS',
+		  'DARK'     => 'PPMERGE.OUTPUT.DARK',
+		  'SHUTTER'  => 'PPMERGE.OUTPUT.SHUTTER',
+		  'FLAT'     => 'PPMERGE.OUTPUT.FLAT',
+		  'DOMEFLAT' => 'PPMERGE.OUTPUT.FLAT',
+		  'SKYFLAT'  => 'PPMERGE.OUTPUT.FLAT',
+		  'FRINGE'   => 'PPMERGE.OUTPUT.FRINGE',
+	      };
+my $output_filerule = $FILERULES->{$det_type}; # File rule for output
+&my_die("Unrecognised detrend type: $det_type", $det_id, $iter, $class_id, $PS_EXIT_SYS_ERROR) unless defined $output_filerule;
 
 # Look for programs we need
@@ -110,4 +126,32 @@
 }
 
+# Generate MDC file with the inputs
+my ($listFile, $listName) = tempfile( $ipprc->file_resolve("$outroot.$class_id.list.XXXX"), UNLINK => !$save_temps );
+my $num = 0;
+foreach my $file (@$files) {
+    if ($file->{ignored}) { next; }
+
+    print $listFile "INPUT$num\tMETADATA\n";
+    $num++;
+
+    my $image = $file->{uri};	# Image name
+    my $mask = $ipprc->filename( "PPIMAGE.OUTPUT.MASK", $file->{path_base} ); # Mask name
+    my $weight = $ipprc->filename( "PPIMAGE.OUTPUT.WEIGHT", $file->{path_base} ); # Weight name
+
+    &my_die("Image $image does not exist", $det_id, $iter, $class_id, $PS_EXIT_SYS_ERROR) unless $ipprc->file_exists( $image );
+    print $listFile "\tIMAGE\tSTR\t" . $image . "\n";
+
+    if ($ipprc->file_exists( $mask )) {
+	print $listFile "\tMASK\tSTR\t" . $mask . "\n";
+    }
+    if ($ipprc->file_exists( $weight )) {
+	print $listFile "\tWEIGHT\tSTR\t" . $weight . "\n";
+    }
+
+    print $listFile "END\n\n";
+}
+close $listFile;
+
+
 # outroot examples (HOST components must be set)
 # file://data/ipp004.0/gpc1/20080130
@@ -118,14 +162,12 @@
 $ipprc->outroot_prepare($outroot);
 
-my $outputStack = $ipprc->filename("PPMERGE.OUTPUT", $outroot, $class_id) or &my_die("Missing entry in file rules", $det_id, $iter, $class_id, $PS_EXIT_CONFIG_ERROR); # Output name
+my $outputStack = $ipprc->filename($output_filerule, $outroot, $class_id) or &my_die("Missing entry in file rules", $det_id, $iter, $class_id, $PS_EXIT_CONFIG_ERROR); # Output name
+my $outputCount = $ipprc->filename("PPMERGE.OUTPUT.COUNT", $outroot, $class_id) or &my_die("Missing entry in file rules", $det_id, $iter, $class_id, $PS_EXIT_CONFIG_ERROR); # Count image
+my $outputSigma = $ipprc->filename("PPMERGE.OUTPUT.SIGMA", $outroot, $class_id) or &my_die("Missing entry in file rules", $det_id, $iter, $class_id, $PS_EXIT_CONFIG_ERROR); # Stdev image
 my $outputStats = $ipprc->filename("PPIMAGE.STATS",  $outroot, $class_id) or &my_die("Missing entry in file rules", $det_id, $iter, $class_id, $PS_EXIT_CONFIG_ERROR); # Statistics name
 my $traceDest   = $ipprc->filename("TRACE.IMFILE",   $outroot, $class_id) or &my_die("Missing entry in file rules", $det_id, $iter, $class_id, $PS_EXIT_CONFIG_ERROR); # Trace messages
 my $logDest     = $ipprc->filename("LOG.IMFILE",     $outroot, $class_id) or &my_die("Missing entry in file rules", $det_id, $iter, $class_id, $PS_EXIT_CONFIG_ERROR); # Log messages
 
-
-$command = "$ppMerge $outputStack"; # Command to run
-foreach my $file (@$files) {
-    $command .= ' ' . $file->{uri};
-}
+$command = "$ppMerge $listName $outroot"; # Command to run
 $command .= " -recipe PPMERGE $recipe";
 $command .= ' -type ' . uc($det_type); # Type of stacking to perform
@@ -136,6 +178,5 @@
 # Stack the files
 unless ($no_op) {
-    
-    ( $success, $error_code, $full_buf, $stdout_buf, $stderr_buf ) =
+    my ( $success, $error_code, $full_buf, $stdout_buf, $stderr_buf ) =
 	run(command => $command, verbose => $verbose);
     unless ($success) {
@@ -144,4 +185,6 @@
     }
     &my_die("Unable to find expected output file: $outputStack\n", $det_id, $iter, $class_id, $PS_EXIT_SYS_ERROR) unless -f $ipprc->file_resolve($outputStack);
+    &my_die("Unable to find expected output file: $outputCount\n", $det_id, $iter, $class_id, $PS_EXIT_SYS_ERROR) unless -f $ipprc->file_resolve($outputCount);
+    &my_die("Unable to find expected output file: $outputSigma\n", $det_id, $iter, $class_id, $PS_EXIT_SYS_ERROR) unless -f $ipprc->file_resolve($outputSigma);
     &my_die("Unable to find expected output file: $outputStats\n", $det_id, $iter, $class_id, $PS_EXIT_SYS_ERROR) unless -f $ipprc->file_resolve($outputStats);
 
Index: /trunk/ippconfig/cfh12k/filerules-mef.mdc
===================================================================
--- /trunk/ippconfig/cfh12k/filerules-mef.mdc	(revision 17230)
+++ /trunk/ippconfig/cfh12k/filerules-mef.mdc	(revision 17231)
@@ -39,4 +39,9 @@
 PPIMAGE.FRINGE     INPUT @DETDB        CHIP       FRINGE     
 PPIMAGE.SHUTTER    INPUT @DETDB        CHIP       IMAGE     
+
+## Files used by ppMerge
+PPMERGE.INPUT      INPUT @FILES        CHIP       IMAGE
+PPMERGE.INPUT.MASK INPUT @FILES        CHIP       MASK
+PPMERGE.INPUT.WEIGHT INPUT @FILES      CHIP       WEIGHT
 
 ## files used to build and apply the flat-field correction images
@@ -114,5 +119,12 @@
 PPIMAGE.JPEG2            OUTPUT {OUTPUT}.b2.jpg                  JPEG      NONE      FPA        TRUE      NONE
 
-PPMERGE.OUTPUT           OUTPUT {OUTPUT}.fits                 	 IMAGE     NONE      FPA        TRUE      MEF
+PPMERGE.OUTPUT.MASK      OUTPUT {OUTPUT}.fits                    MASK      NONE      CHIP       TRUE      NONE
+PPMERGE.OUTPUT.BIAS      OUTPUT {OUTPUT}.fits                    IMAGE     NONE      CHIP       TRUE      NONE
+PPMERGE.OUTPUT.DARK      OUTPUT {OUTPUT}.fits                    DARK      NONE      CHIP       TRUE      NONE
+PPMERGE.OUTPUT.SHUTTER   OUTPUT {OUTPUT}.fits                    IMAGE     NONE      CHIP       TRUE      NONE
+PPMERGE.OUTPUT.FLAT      OUTPUT {OUTPUT}.fits                    IMAGE     NONE      CHIP       TRUE      NONE
+PPMERGE.OUTPUT.FRINGE    OUTPUT {OUTPUT}.fits                    FRINGE    NONE      CHIP       TRUE      NONE
+PPMERGE.OUTPUT.SIGMA     OUTPUT {OUTPUT}.sigma.fits              IMAGE     NONE      CHIP       TRUE      NONE
+PPMERGE.OUTPUT.COUNT     OUTPUT {OUTPUT}.count.fits              IMAGE     NONE      CHIP       TRUE      NONE
 
 DVOCORR.MEF.OUTPUT       OUTPUT {OUTPUT}.fc.fits              	 IMAGE     NONE      CHIP       TRUE      MEF
Index: /trunk/ippconfig/ctio_mosaic2/camera.config
===================================================================
--- /trunk/ippconfig/ctio_mosaic2/camera.config	(revision 17230)
+++ /trunk/ippconfig/ctio_mosaic2/camera.config	(revision 17231)
@@ -258,4 +258,9 @@
    PPIMAGE.SHUTTER    INPUT @DETDB        CHIP       IMAGE     
 
+   ## Files used by ppMerge
+   PPMERGE.INPUT      INPUT @FILES        CHIP       IMAGE
+   PPMERGE.INPUT.MASK INPUT @FILES        CHIP       MASK
+   PPMERGE.INPUT.WEIGHT INPUT @FILES      CHIP       WEIGHT
+
    ## files used to build and apply the flat-field correction images
    DVOCORR.INPUT      INPUT @FILES        CHIP       IMAGE     
@@ -298,6 +303,6 @@
    PPSTAMP.INPUT      INPUT @FILES        CHIP       IMAGE
 
-   PPARITH.INPUT.IMAGE INPUT @FILES        CHIP       IMAGE
-   PPARITH.INPUT.MASK  INPUT @FILES        CHIP       MASK
+   PPARITH.INPUT.IMAGE INPUT @FILES       CHIP       IMAGE
+   PPARITH.INPUT.MASK  INPUT @FILES       CHIP       MASK
 
    ### output file definitions
@@ -329,5 +334,12 @@
    PPIMAGE.JPEG2       	 OUTPUT {OUTPUT}.b2.jpg               JPEG      NONE      FPA        TRUE      NONE
 
-   PPMERGE.OUTPUT        OUTPUT {OUTPUT}.fits                 IMAGE     NONE      FPA        TRUE      MEF
+   PPMERGE.OUTPUT.MASK   OUTPUT {OUTPUT}.fits                 MASK      NONE      CHIP       TRUE      NONE
+   PPMERGE.OUTPUT.BIAS   OUTPUT {OUTPUT}.fits                 IMAGE     NONE      CHIP       TRUE      NONE
+   PPMERGE.OUTPUT.DARK   OUTPUT {OUTPUT}.fits                 DARK      NONE      CHIP       TRUE      NONE
+   PPMERGE.OUTPUT.SHUTTER OUTPUT {OUTPUT}.fits                IMAGE     NONE      CHIP       TRUE      NONE
+   PPMERGE.OUTPUT.FLAT   OUTPUT {OUTPUT}.fits                 IMAGE     NONE      CHIP       TRUE      NONE
+   PPMERGE.OUTPUT.FRINGE OUTPUT {OUTPUT}.fits                 FRINGE    NONE      CHIP       TRUE      NONE
+   PPMERGE.OUTPUT.SIGMA  OUTPUT {OUTPUT}.sigma.fits           IMAGE     NONE      CHIP       TRUE      NONE
+   PPMERGE.OUTPUT.COUNT  OUTPUT {OUTPUT}.count.fits           IMAGE     NONE      CHIP       TRUE      NONE
 
    DVOCORR.MEF.OUTPUT  	 OUTPUT {OUTPUT}.fc.fits              IMAGE     NONE      CHIP       TRUE      MEF
@@ -380,6 +392,6 @@
    PPSIM.OUTPUT          OUTPUT {OUTPUT}.{CHIP.NAME}.fits     IMAGE     NONE      CHIP       TRUE      SPLIT
 
-   PPARITH.OUTPUT.IMAGE  OUTPUT {OUTPUT}.fits                 IMAGE     NONE      CHIP       TRUE      NONE
-   PPARITH.OUTPUT.MASK   OUTPUT {OUTPUT}.fits                 MASK      NONE      CHIP       TRUE      NONE
+   PPARITH.OUTPUT.IMAGE  OUTPUT {OUTPUT}.fits                 IMAGE     COMP_POS  CHIP       TRUE      NONE
+   PPARITH.OUTPUT.MASK   OUTPUT {OUTPUT}.fits                 MASK      COMP_MASK CHIP       TRUE      NONE
 
    LOG.IMFILE            OUTPUT {OUTPUT}.{CHIP.NAME}.log      TEXT      NONE      CHIP      TRUE       NONE
Index: /trunk/ippconfig/esowfi/filerules-mef.mdc
===================================================================
--- /trunk/ippconfig/esowfi/filerules-mef.mdc	(revision 17230)
+++ /trunk/ippconfig/esowfi/filerules-mef.mdc	(revision 17231)
@@ -19,4 +19,9 @@
 PPIMAGE.FRINGE     INPUT @DETDB        CHIP        FRINGE
 PPIMAGE.SHUTTER    INPUT @DETDB        CHIP        IMAGE
+
+## Files used by ppMerge
+PPMERGE.INPUT      INPUT @FILES        CHIP       IMAGE
+PPMERGE.INPUT.MASK INPUT @FILES        CHIP       MASK
+PPMERGE.INPUT.WEIGHT INPUT @FILES      CHIP       WEIGHT
 
 ## files used to build and apply the flat field correction images
@@ -76,5 +81,12 @@
 PPIMAGE.BIN2        OUTPUT   {OUTPUT}.{CHIP.NAME}.b2.fits   IMAGE      CHIP       TRUE      SPLIT
 
-PPMERGE.OUTPUT      OUTPUT   {OUTPUT}.{CHIP.NAME}.fits      IMAGE      FPA        TRUE      NONE
+PPMERGE.OUTPUT.MASK   OUTPUT {OUTPUT}.fits                   MASK      CHIP       TRUE      NONE
+PPMERGE.OUTPUT.BIAS   OUTPUT {OUTPUT}.fits                   IMAGE     CHIP       TRUE      NONE
+PPMERGE.OUTPUT.DARK   OUTPUT {OUTPUT}.fits                   DARK      CHIP       TRUE      NONE
+PPMERGE.OUTPUT.SHUTTER OUTPUT {OUTPUT}.fits                  IMAGE     CHIP       TRUE      NONE
+PPMERGE.OUTPUT.FLAT   OUTPUT {OUTPUT}.fits                   IMAGE     CHIP       TRUE      NONE
+PPMERGE.OUTPUT.FRINGE OUTPUT {OUTPUT}.fits                   FRINGE    CHIP       TRUE      NONE
+PPMERGE.OUTPUT.SIGMA  OUTPUT {OUTPUT}.sigma.fits             IMAGE     CHIP       TRUE      NONE
+PPMERGE.OUTPUT.COUNT  OUTPUT {OUTPUT}.count.fits             IMAGE     CHIP       TRUE      NONE
 
 DVOCORR.OUTPUT      OUTPUT   {OUTPUT}.{CHIP.NAME}.fc.fits   IMAGE      CHIP       TRUE      SPLIT
Index: /trunk/ippconfig/gpc1/filerules.mdc
===================================================================
--- /trunk/ippconfig/gpc1/filerules.mdc	(revision 17230)
+++ /trunk/ippconfig/gpc1/filerules.mdc	(revision 17231)
@@ -16,4 +16,9 @@
 PPIMAGE.FLAT            INPUT    @DETDB                        CHIP       IMAGE
 PPIMAGE.MASK            INPUT    @DETDB                        CHIP       MASK
+
+## Files used by ppMerge
+PPMERGE.INPUT           INPUT    @FILES                        CHIP       IMAGE
+PPMERGE.INPUT.MASK      INPUT    @FILES                        CHIP       MASK
+PPMERGE.INPUT.WEIGHT    INPUT    @FILES                        CHIP       WEIGHT
 
 ## files used by psphot
@@ -77,5 +82,12 @@
 PPIMAGE.STATS          OUTPUT {OUTPUT}.{CHIP.NAME}.stats        STATS     NONE       CHIP      TRUE      NONE
 
-PPMERGE.OUTPUT         OUTPUT {OUTPUT}.{CHIP.NAME}.fits         IMAGE     NONE       CHIP      TRUE      NONE
+PPMERGE.OUTPUT.MASK    OUTPUT {OUTPUT}.{CHIP.NAME}.fits         MASK      NONE       CHIP      TRUE      NONE
+PPMERGE.OUTPUT.BIAS    OUTPUT {OUTPUT}.{CHIP.NAME}.fits         IMAGE     NONE       CHIP      TRUE      NONE
+PPMERGE.OUTPUT.DARK    OUTPUT {OUTPUT}.{CHIP.NAME}.fits         DARK      NONE       CHIP      TRUE      NONE
+PPMERGE.OUTPUT.SHUTTER OUTPUT {OUTPUT}.{CHIP.NAME}.fits         IMAGE     NONE       CHIP      TRUE      NONE
+PPMERGE.OUTPUT.FLAT    OUTPUT {OUTPUT}.{CHIP.NAME}.fits         IMAGE     NONE       CHIP      TRUE      NONE
+PPMERGE.OUTPUT.FRINGE  OUTPUT {OUTPUT}.{CHIP.NAME}.fits         FRINGE    NONE       CHIP      TRUE      NONE
+PPMERGE.OUTPUT.SIGMA   OUTPUT {OUTPUT}.sigma.fits               IMAGE     NONE      CHIP       TRUE      NONE
+PPMERGE.OUTPUT.COUNT   OUTPUT {OUTPUT}.count.fits               IMAGE     NONE      CHIP       TRUE      NONE
 
 DVOCORR.OUTPUT         OUTPUT {OUTPUT}.{CHIP.NAME}.fc.fits      IMAGE     NONE       CHIP      TRUE      NONE
Index: /trunk/ippconfig/isp/camera.config
===================================================================
--- /trunk/ippconfig/isp/camera.config	(revision 17230)
+++ /trunk/ippconfig/isp/camera.config	(revision 17231)
@@ -214,4 +214,9 @@
    PPIMAGE.SHUTTER    INPUT @DETDB        FPA        IMAGE     
 
+   ## Files used by ppMerge
+   PPMERGE.INPUT      INPUT @FILES        CHIP       IMAGE
+   PPMERGE.INPUT.MASK INPUT @FILES        CHIP       MASK
+   PPMERGE.INPUT.WEIGHT INPUT @FILES      CHIP       WEIGHT
+
    ## files used to build and apply the flat-field correction images
    DVOCORR.INPUT      INPUT @FILES        FPA        IMAGE
@@ -259,5 +264,12 @@
    PPIMAGE.JPEG2       	 OUTPUT  {OUTPUT}.b2.jpg      JPEG      NONE      FPA        TRUE      NONE
 
-   PPMERGE.OUTPUT        OUTPUT  {OUTPUT}.fits        IMAGE     NONE      FPA        TRUE      NONE
+   PPMERGE.OUTPUT.MASK   OUTPUT {OUTPUT}.fits         MASK      NONE      CHIP       TRUE      NONE
+   PPMERGE.OUTPUT.BIAS   OUTPUT {OUTPUT}.fits         IMAGE     NONE      CHIP       TRUE      NONE
+   PPMERGE.OUTPUT.DARK   OUTPUT {OUTPUT}.fits         DARK      NONE      CHIP       TRUE      NONE
+   PPMERGE.OUTPUT.SHUTTER OUTPUT {OUTPUT}.fits        IMAGE     NONE      CHIP       TRUE      NONE
+   PPMERGE.OUTPUT.FLAT   OUTPUT {OUTPUT}.fits         IMAGE     NONE      CHIP       TRUE      NONE
+   PPMERGE.OUTPUT.FRINGE OUTPUT {OUTPUT}.fits         FRINGE    NONE      CHIP       TRUE      NONE
+   PPMERGE.OUTPUT.SIGMA  OUTPUT {OUTPUT}.sigma.fits   IMAGE     NONE      CHIP       TRUE      NONE
+   PPMERGE.OUTPUT.COUNT  OUTPUT {OUTPUT}.count.fits   IMAGE     NONE      CHIP       TRUE      NONE
 
    DVOCORR.OUTPUT    	 OUTPUT  {OUTPUT}.fc.fits     IMAGE     NONE      FPA        TRUE      NONE
Index: /trunk/ippconfig/megacam/filerules-mef.mdc
===================================================================
--- /trunk/ippconfig/megacam/filerules-mef.mdc	(revision 17230)
+++ /trunk/ippconfig/megacam/filerules-mef.mdc	(revision 17231)
@@ -40,4 +40,9 @@
 PPIMAGE.SHUTTER    INPUT @DETDB        CHIP       IMAGE     
 
+## Files used by ppMerge
+PPMERGE.INPUT      INPUT @FILES        CHIP       IMAGE
+PPMERGE.INPUT.MASK INPUT @FILES        CHIP       MASK
+PPMERGE.INPUT.WEIGHT INPUT @FILES      CHIP       WEIGHT
+
 ## files used to build and apply the flat-field correction images
 DVOCORR.INPUT      INPUT @FILES        CHIP       IMAGE
@@ -78,4 +83,5 @@
 PPSTACK.INPUT.MASK INPUT @FILES        FPA        MASK
 PPSTACK.INPUT.WEIGHT INPUT @FILES      FPA        WEIGHT
+PPSTACK.INPUT.PSF  INPUT @FILES        CHIP       PSF
 PPSTACK.SOURCES    INPUT @FILES        FPA        CMF
 
@@ -87,20 +93,21 @@
 ### output file definitions
 TYPE                  OUTPUT FILENAME.RULE                    FILE.TYPE FITS.TYPE DATA.LEVEL FILE.SAVE FILE.FORMAT
-PPIMAGE.OUTPUT.MEF    OUTPUT {OUTPUT}.b0.fits                 IMAGE     COMP_IMG  CHIP       TRUE      MEF
-PPIMAGE.OUT.MK.MEF    OUTPUT {OUTPUT}.mk.fits                 MASK      COMP_MASK CHIP       TRUE      MEF
-PPIMAGE.OUT.WT.MEF    OUTPUT {OUTPUT}.wt.fits                 WEIGHT    COMP_WT   CHIP       TRUE      MEF
+PPIMAGE.OUTPUT.MEF    OUTPUT {OUTPUT}.b0.fits                 IMAGE     NONE      CHIP       TRUE      MEF
+PPIMAGE.OUT.MK.MEF    OUTPUT {OUTPUT}.mk.fits                 MASK      NONE      CHIP       TRUE      MEF
+PPIMAGE.OUT.WT.MEF    OUTPUT {OUTPUT}.wt.fits                 WEIGHT    NONE      CHIP       TRUE      MEF
 PPIMAGE.OUTPUT.SPL    OUTPUT {OUTPUT}.{CHIP.NAME}.b0.fits     IMAGE     NONE      CHIP       TRUE      SPLIT
 PPIMAGE.OUT.MK.SPL    OUTPUT {OUTPUT}.{CHIP.NAME}.mk.fits     MASK      NONE      CHIP       TRUE      SPLIT
 PPIMAGE.OUT.WT.SPL    OUTPUT {OUTPUT}.{CHIP.NAME}.wt.fits     WEIGHT    NONE      CHIP       TRUE      SPLIT
+PPIMAGE.OUTPUT.DETMASK OUTPUT {OUTPUT}.fits                   IMAGE     COMP_MASK CHIP      TRUE      MEF
 
-PPIMAGE.CHIP.MEF      OUTPUT {OUTPUT}.ch.fits                 IMAGE     COMP_IMG  CHIP       TRUE      MEF
-PPIMAGE.CHIP.MK.MEF   OUTPUT {OUTPUT}.ch.mk.fits              MASK      COMP_MASK CHIP       TRUE      MEF
-PPIMAGE.CHIP.WT.MEF   OUTPUT {OUTPUT}.ch.wt.fits              WEIGHT    COMP_WT   CHIP       TRUE      MEF
+PPIMAGE.CHIP.MEF      OUTPUT {OUTPUT}.ch.fits                 IMAGE     NONE      CHIP       TRUE      MEF
+PPIMAGE.CHIP.MK.MEF   OUTPUT {OUTPUT}.ch.mk.fits              MASK      NONE      CHIP       TRUE      MEF
+PPIMAGE.CHIP.WT.MEF   OUTPUT {OUTPUT}.ch.wt.fits              WEIGHT    NONE      CHIP       TRUE      MEF
 PPIMAGE.CHIP.SPL      OUTPUT {OUTPUT}.{CHIP.NAME}.ch.fits     IMAGE     NONE      CHIP       TRUE      SPLIT
 PPIMAGE.CHIP.MK.SPL   OUTPUT {OUTPUT}.{CHIP.NAME}.ch.mk.fits  MASK      NONE      CHIP       TRUE      SPLIT
 PPIMAGE.CHIP.WT.SPL   OUTPUT {OUTPUT}.{CHIP.NAME}.ch.wt.fits  WEIGHT    NONE      CHIP       TRUE      SPLIT
 
-PPIMAGE.OUTPUT.FPA1.MEF OUTPUT {OUTPUT}.b1.fits               IMAGE     COMP_IMG  FPA        TRUE      MEF
-PPIMAGE.OUTPUT.FPA2.MEF OUTPUT {OUTPUT}.b2.fits               IMAGE     COMP_IMG  FPA        TRUE      MEF
+PPIMAGE.OUTPUT.FPA1.MEF OUTPUT {OUTPUT}.b1.fits               IMAGE     NONE      FPA        TRUE      MEF
+PPIMAGE.OUTPUT.FPA2.MEF OUTPUT {OUTPUT}.b2.fits               IMAGE     NONE      FPA        TRUE      MEF
 PPIMAGE.OUTPUT.FPA1.SPL OUTPUT {OUTPUT}.{CHIP.NAME}.b1.fits   IMAGE     NONE      FPA        TRUE      SPLIT
 PPIMAGE.OUTPUT.FPA2.SPL OUTPUT {OUTPUT}.{CHIP.NAME}.b2.fits   IMAGE     NONE      FPA        TRUE      SPLIT
@@ -116,5 +123,12 @@
 PPIMAGE.JPEG2         OUTPUT {OUTPUT}.b2.jpg                  JPEG      NONE      FPA        TRUE      NONE
 
-PPMERGE.OUTPUT        OUTPUT {OUTPUT}.fits                    IMAGE     NONE      FPA        TRUE      MEF
+PPMERGE.OUTPUT.MASK   OUTPUT {OUTPUT}.fits                    MASK      NONE      CHIP       TRUE      NONE
+PPMERGE.OUTPUT.BIAS   OUTPUT {OUTPUT}.fits                    IMAGE     NONE      CHIP       TRUE      NONE
+PPMERGE.OUTPUT.DARK   OUTPUT {OUTPUT}.fits                    DARK      NONE      CHIP       TRUE      NONE
+PPMERGE.OUTPUT.SHUTTER OUTPUT {OUTPUT}.fits                   IMAGE     NONE      CHIP       TRUE      NONE
+PPMERGE.OUTPUT.FLAT   OUTPUT {OUTPUT}.fits                    IMAGE     NONE      CHIP       TRUE      NONE
+PPMERGE.OUTPUT.FRINGE OUTPUT {OUTPUT}.fits                    FRINGE    NONE      CHIP       TRUE      NONE
+PPMERGE.OUTPUT.SIGMA  OUTPUT {OUTPUT}.sigma.fits              IMAGE     NONE      CHIP       TRUE      NONE
+PPMERGE.OUTPUT.COUNT  OUTPUT {OUTPUT}.count.fits              IMAGE     NONE      CHIP       TRUE      NONE
 
 DVOCORR.MEF.OUTPUT    OUTPUT {OUTPUT}.fc.fits                 IMAGE     NONE      CHIP       TRUE      MEF
@@ -147,21 +161,21 @@
 PSASTRO.OUT.REFSTARS  OUTPUT {OUTPUT}.aref.fits        ASTROM.REFSTARS  NONE      FPA        TRUE      NONE
 
-PSWARP.OUTPUT         OUTPUT {OUTPUT}.fits                    IMAGE     COMP_IMG  FPA        TRUE      NONE
-PSWARP.OUTPUT.MASK    OUTPUT {OUTPUT}.mk.fits                 MASK      COMP_MASK FPA        TRUE      NONE
-PSWARP.OUTPUT.WEIGHT  OUTPUT {OUTPUT}.wt.fits                 WEIGHT    COMP_WT   FPA        TRUE      NONE
-PSWARP.OUTPUT.SOURCES OUTPUT {OUTPUT}.cmf                     CMF       NONE      FPA        TRUE      NONE
-PSWARP.BIN1           OUTPUT {OUTPUT}.b1.fits                 IMAGE     COMP_IMG  FPA        TRUE      NONE
-PSWARP.BIN2           OUTPUT {OUTPUT}.b2.fits                 IMAGE     COMP_IMG  FPA        TRUE      NONE
+PSWARP.OUTPUT         OUTPUT {OUTPUT}.fits                    IMAGE     NONE     FPA        TRUE      NONE
+PSWARP.OUTPUT.MASK    OUTPUT {OUTPUT}.mk.fits                 MASK      NONE     FPA        TRUE      NONE
+PSWARP.OUTPUT.WEIGHT  OUTPUT {OUTPUT}.wt.fits                 WEIGHT    NONE     FPA        TRUE      NONE
+PSWARP.OUTPUT.SOURCES OUTPUT {OUTPUT}.cmf                     CMF       NONE     FPA        TRUE      NONE
+PSWARP.BIN1           OUTPUT {OUTPUT}.b1.fits                 IMAGE     NONE     FPA        TRUE      NONE
+PSWARP.BIN2           OUTPUT {OUTPUT}.b2.fits                 IMAGE     NONE     FPA        TRUE      NONE
 
 SKYCELL.STATS         OUTPUT {OUTPUT}.stats                   STATS     NONE      FPA        TRUE      NONE
 SKYCELL.TEMPLATE      OUTPUT {OUTPUT}.skycell                 SKYCELL   NONE      FPA        TRUE      NONE
 
-PPSUB.OUTPUT          OUTPUT {OUTPUT}.fits                    IMAGE     COMP_IMG  FPA        TRUE      NONE
-PPSUB.OUTPUT.MASK     OUTPUT {OUTPUT}.mk.fits                 MASK      COMP_MASK FPA        TRUE      NONE
-PPSUB.OUTPUT.WEIGHT   OUTPUT {OUTPUT}.wt.fits                 WEIGHT    COMP_WT   FPA        TRUE      NONE
+PPSUB.OUTPUT          OUTPUT {OUTPUT}.fits                    IMAGE     NONE      FPA        TRUE      NONE
+PPSUB.OUTPUT.MASK     OUTPUT {OUTPUT}.mk.fits                 MASK      NONE      FPA        TRUE      NONE
+PPSUB.OUTPUT.WEIGHT   OUTPUT {OUTPUT}.wt.fits                 WEIGHT    NONE      FPA        TRUE      NONE
 
-PPSTACK.OUTPUT        OUTPUT {OUTPUT}.fits                    IMAGE     COMP_IMG  FPA        TRUE      NONE
-PPSTACK.OUTPUT.MASK   OUTPUT {OUTPUT}.mk.fits                 MASK      COMP_MASK FPA        TRUE      NONE
-PPSTACK.OUTPUT.WEIGHT OUTPUT {OUTPUT}.wt.fits                 WEIGHT    COMP_WT   FPA        TRUE      NONE
+PPSTACK.OUTPUT        OUTPUT {OUTPUT}.fits                    IMAGE     NONE      FPA        TRUE      NONE
+PPSTACK.OUTPUT.MASK   OUTPUT {OUTPUT}.mk.fits                 MASK      NONE      FPA        TRUE      NONE
+PPSTACK.OUTPUT.WEIGHT OUTPUT {OUTPUT}.wt.fits                 WEIGHT    NONE      FPA        TRUE      NONE
 
 PPSTAMP.OUTPUT        OUTPUT {OUTPUT}.fits                    IMAGE     NONE      FPA        TRUE      NONE
Index: /trunk/ippconfig/megacam/ppMerge.config
===================================================================
--- /trunk/ippconfig/megacam/ppMerge.config	(revision 17230)
+++ /trunk/ippconfig/megacam/ppMerge.config	(revision 17231)
@@ -28,5 +28,5 @@
 	FRACLOW		F32	0.1		# Fraction of low pixels to reject immediately
 	NKEEP		S32	5		# Minimum number of pixels in stack to keep
-	WEIGHTS		BOOL	TRUE		# Use image weights?
+	WEIGHTS		BOOL	FALSE		# Use image weights?
 	COMBINE		STR	MEAN		# Statistic to use for combination: 
 END
@@ -36,5 +36,5 @@
 PPMERGE_FRINGE	METADATA
 	FRACHIGH	F32	0.1		# Fraction of high pixels to reject immediately
-	WEIGHTS		BOOL	TRUE		# Use image weights?
+	WEIGHTS		BOOL	FALSE		# Use image weights?
 END
 
Index: /trunk/ippconfig/recipes/ppMerge.config
===================================================================
--- /trunk/ippconfig/recipes/ppMerge.config	(revision 17230)
+++ /trunk/ippconfig/recipes/ppMerge.config	(revision 17231)
@@ -1,7 +1,7 @@
 # Recipe configuration for ppMerge
- 
+
 ROWS            S32     128		# Number of rows to read at once
 ELECTRONS       F32     100.0           # Minimum number of electrons for useful signal
-SAMPLE          S32     100             # Sampling factor for measuring the background
+SAMPLE          S32     100000          # Sampling factor for measuring the background
 REJ		F32	3.0		# Rejection threshold (sigma)
 ITER		S32	0		# Number of rejection iterations
@@ -15,15 +15,17 @@
 FRINGE.YSMOOTH	S32	11		# Number of smoothing regions in y
 SHUTTER.SIZE	S32	128		# Size for shutter measurement regions
-SHUTTER.ITER	S32	1		# Number of iterations for shutter measurement
-SHUTTER.REJECT	F32	2		# Rejection limit for shutter measurement
 MASK.SUSPECT	F32	5.0		# Threshold for suspect pixels (sigma)
-MASK.BAD	F32	4.0		# Threshold for bad pixels (sigma)
-MASK.MODE	STR	POISSON		# Threshold for bad pixels (sigma)
-STATS.BY.CHIP   BOOL	TRUE		# measure stats for masking by chip (or by readout)
-MASK.GROW.NPIX  S32	3		# measure stats for masking by chip (or by readout)
+MASK.BAD	F32	0.2		# Threshold for bad pixels
+MASK.MODE	STR	FRACTION	# Mode for identifying bad pixels in the suspect map
+MASK.CHIPSTATS	BOOL	TRUE		# Measure stats for masking by chip (otherwise by readout)?
+MASK.GROW	S32	0		# Grow bad pixels by this radius
+MASK.GROWVAL	STR	SUSPECT		# Give grown mask pixels this value
 MASKVAL		STR	SAT,BAD		# Mask value for input data
 COMBINE		STR	CLIPPED		# Statistic to use for combination
 MEAN		STR	ROBUST_MEDIAN	# Statistic to use to measure the mean
 STDEV		STR	ROBUST_STDEV	# Statistic to use to measure the stdev
+
+STATS.BY.CHIP   BOOL    TRUE            # measure stats for masking by chip (or by readout)
+MASK.GROW.NPIX  S32     3               # measure stats for masking by chip (or by readout)
 
 # Ordinates for fitting dark current
@@ -47,9 +49,9 @@
 # More aggressive clipping than bias, so as to remove CRs
 PPMERGE_DARK	METADATA
-	REJ		F32	2.0		# Rejection threshold (sigma)
-	ITER		S32	4		# Number of rejection iterations
+	REJ		F32	3.0		# Rejection threshold (sigma)
+	ITER		S32	2		# Number of rejection iterations
 	FRACHIGH	F32	0.0		# Fraction of high pixels to reject immediately
 	FRACLOW		F32	0.0		# Fraction of low pixels to reject immediately
-	WEIGHTS		BOOL	FALSE		# Use image weights?
+	WEIGHTS		BOOL	TRUE		# Use image weights?
 	COMBINE		STR	CLIPPED		# Statistic to use for combination: 
 END
@@ -75,15 +77,19 @@
 # Mask generation --- already included in default, above
 PPMERGE_DARKMASK METADATA
-  MASK.BAD	 F32	3.0		# Threshold for bad pixels (sigma)
-  MASK.MODE	 STR	VALUE		# Threshold for bad pixels (sigma)
+	ITER		S32	2		# Number of iterations
+	MASK.BAD	F32	0.2		# Threshold for bad pixels (sigma)
+	MASK.MODE	STR	FRACTION	# Mode for identifying bad pixels in the suspect map
 END
 
 # Mask generation --- already included in default, above
 PPMERGE_FLATMASK METADATA
-  MASK.BAD	 F32	3.0		# Threshold for bad pixels (sigma)
-  MASK.MODE	 STR	VALUE		# Threshold for bad pixels (sigma)
+	ITER		S32	2		# Number of iterations
+	MASK.BAD	F32	0.2		# Threshold for bad pixels (sigma)
+	MASK.MODE	STR	FRACTION	# Mode for identifying bad pixels in the suspect map
 END
 
 # Shutter generation --- already included in default, above
 PPMERGE_SHUTTER	METADATA
+	REJ		F32	2.0		# Rejection threshold (sigma)
+	ITER		S32	1		# Number of rejection iterations
 END
Index: /trunk/ippconfig/simmosaic/camera.config
===================================================================
--- /trunk/ippconfig/simmosaic/camera.config	(revision 17230)
+++ /trunk/ippconfig/simmosaic/camera.config	(revision 17231)
@@ -236,4 +236,9 @@
    PPIMAGE.SHUTTER    INPUT @DETDB        CELL       IMAGE     
 
+   ## Files used by ppMerge
+   PPMERGE.INPUT      INPUT @FILES        CHIP       IMAGE
+   PPMERGE.INPUT.MASK INPUT @FILES        CHIP       MASK
+   PPMERGE.INPUT.WEIGHT INPUT @FILES      CHIP       WEIGHT
+
    ## files used to build and apply the flat-field correction images
    DVOCORR.INPUT      INPUT @FILES        CHIP       IMAGE     
@@ -294,5 +299,12 @@
    PPIMAGE.BIN2        OUTPUT   {OUTPUT}.{CHIP.NAME}.b2.fits   IMAGE     NONE      CHIP       TRUE      SPLIT
 
-   PPMERGE.OUTPUT      OUTPUT   {OUTPUT}.{CHIP.NAME}.fits      IMAGE     NONE      CHIP       TRUE      NONE
+   PPMERGE.OUTPUT.MASK   OUTPUT {OUTPUT}.{CHIP.NAME}.fits      MASK      NONE      CHIP       TRUE      SPLIT
+   PPMERGE.OUTPUT.BIAS   OUTPUT {OUTPUT}.{CHIP.NAME}.fits      IMAGE     NONE      CHIP       TRUE      SPLIT
+   PPMERGE.OUTPUT.DARK   OUTPUT {OUTPUT}.{CHIP.NAME}.fits      DARK      NONE      CHIP       TRUE      SPLIT
+   PPMERGE.OUTPUT.SHUTTER OUTPUT {OUTPUT}.{CHIP.NAME}.fits     IMAGE     NONE      CHIP       TRUE      SPLIT
+   PPMERGE.OUTPUT.FLAT   OUTPUT {OUTPUT}.{CHIP.NAME}.fits      IMAGE     NONE      CHIP       TRUE      SPLIT
+   PPMERGE.OUTPUT.FRINGE OUTPUT {OUTPUT}.{CHIP.NAME}.fits      FRINGE    NONE      CHIP       TRUE      SPLIT
+   PPMERGE.OUTPUT.SIGMA  OUTPUT {OUTPUT}.sigma.fits            IMAGE     NONE      CHIP       TRUE      NONE
+   PPMERGE.OUTPUT.COUNT  OUTPUT {OUTPUT}.count.fits            IMAGE     NONE      CHIP       TRUE      NONE
 
    DVOCORR.OUTPUT      OUTPUT 	{OUTPUT}.{CHIP.NAME}.fc.fits   IMAGE     NONE      CHIP       TRUE      NONE
Index: /trunk/ippconfig/simtest/filerules.mdc
===================================================================
--- /trunk/ippconfig/simtest/filerules.mdc	(revision 17230)
+++ /trunk/ippconfig/simtest/filerules.mdc	(revision 17231)
@@ -19,4 +19,9 @@
 PPIMAGE.FLAT       INPUT    @DETDB                        CHIP       IMAGE     
 PPIMAGE.MASK       INPUT    @DETDB                        CHIP       IMAGE     
+
+## Files used by ppMerge
+PPMERGE.INPUT      INPUT    @FILES                        CHIP       IMAGE
+PPMERGE.INPUT.MASK INPUT    @FILES                        CHIP       MASK
+PPMERGE.INPUT.WEIGHT INPUT  @FILES                        CHIP       WEIGHT
 
 ## files used by psphot 
@@ -54,4 +59,5 @@
 TYPE                OUTPUT   FILENAME.RULE           FILE.TYPE FITS.TYPE DATA.LEVEL FILE.SAVE FILE.FORMAT
 PPIMAGE.OUTPUT      OUTPUT   {OUTPUT}.fits           IMAGE     NONE      FPA        TRUE      NONE
+PPIMAGE.OUTPUT.DETMASK OUTPUT {OUTPUT}.fits          IMAGE     NONE      FPA        TRUE      NONE
 PPIMAGE.OUTPUT.MASK OUTPUT   {OUTPUT}.mask.fits      MASK      NONE      FPA        TRUE      NONE
 PPIMAGE.OUTPUT.WEIGHT OUTPUT {OUTPUT}.wt.fits        WEIGHT    NONE      FPA        TRUE      NONE
@@ -68,5 +74,12 @@
 PPIMAGE.BIN2        OUTPUT   {OUTPUT}.b2.fits        IMAGE     NONE      FPA        TRUE      NONE
 
-PPMERGE.OUTPUT      OUTPUT   {OUTPUT}.fits           IMAGE     NONE      FPA        TRUE      NONE
+PPMERGE.OUTPUT.MASK   OUTPUT {OUTPUT}.fits           MASK      NONE      CHIP       TRUE      NONE
+PPMERGE.OUTPUT.BIAS   OUTPUT {OUTPUT}.fits           IMAGE     NONE      CHIP       TRUE      NONE
+PPMERGE.OUTPUT.DARK   OUTPUT {OUTPUT}.fits           DARK      NONE      CHIP       TRUE      NONE
+PPMERGE.OUTPUT.SHUTTER OUTPUT {OUTPUT}.fits          IMAGE     NONE      CHIP       TRUE      NONE
+PPMERGE.OUTPUT.FLAT   OUTPUT {OUTPUT}.fits           IMAGE     NONE      CHIP       TRUE      NONE
+PPMERGE.OUTPUT.FRINGE OUTPUT {OUTPUT}.fits           FRINGE    NONE      CHIP       TRUE      NONE
+PPMERGE.OUTPUT.SIGMA  OUTPUT {OUTPUT}.sigma.fits     IMAGE     NONE      CHIP       TRUE      NONE
+PPMERGE.OUTPUT.COUNT  OUTPUT {OUTPUT}.count.fits     IMAGE     NONE      CHIP       TRUE      NONE
 
 DVOCORR.OUTPUT      OUTPUT   {OUTPUT}.fc.fits        IMAGE     NONE      FPA        TRUE      NONE
