Index: trunk/ppMerge/src/ppMergeFiles.c
===================================================================
--- trunk/ppMerge/src/ppMergeFiles.c	(revision 33666)
+++ trunk/ppMerge/src/ppMergeFiles.c	(revision 42785)
@@ -105,5 +105,38 @@
 }
 
-psArray *ppMergeFileDataLevel(const pmConfig *config, const char *name, pmFPALevel level)
+bool ppMergeFileFreeInput(pmConfig *config, const pmFPAview *view, int num)
+{
+    {
+        pmFPAfile *input = pmFPAfileSelectSingle(config->files, "PPMERGE.INPUT", num);
+        if (!pmFPAfileFreeData(input, view)) {
+            psError(PS_ERR_UNKNOWN, false, "Unable to free data for image file %d", num);
+            return false;
+        }
+    }
+    bool mdok;          // Status of MD lookup
+    if (psMetadataLookupBool(&mdok, config->arguments, "INPUTS.MASKS")) {
+        pmFPAfile *mask = pmFPAfileSelectSingle(config->files, "PPMERGE.INPUT.MASK", num); // Mask file
+        if (!pmFPAfileFreeData(mask, view)) {
+            psError(PS_ERR_UNKNOWN, false, "Unable to free data for mask file %d", num);
+            return false;
+        }
+    }
+    if (psMetadataLookupBool(&mdok, config->arguments, "INPUTS.VARIANCES")) {
+        pmFPAfile *variance = pmFPAfileSelectSingle(config->files, "PPMERGE.INPUT.VARIANCE", num); // Variance file
+        if (!pmFPAfileFreeData(variance, view)) {
+            psError(PS_ERR_UNKNOWN, false, "Unable to free data for variance file %d", num);
+            return false;
+        }
+    }
+    return true;
+}
+
+// Select the specified input files and assign the dataLevel and freeLevel,
+// saving a pointer on output array.
+// This function takes the argument pmFPALevel and sets the dataLevel based on that value.
+// However, this is only used with the value PM_FPA_LEVEL_READOUT, and it must be set
+// to that level for the rest of ppMerge to work correctly.  Furthermore, the freeLevel
+// must be set to Cell.  Remove the (false) option.
+psArray *ppMergeFileDataLevel(const pmConfig *config, const char *name)
 {
     assert(config);
@@ -115,6 +148,6 @@
     for (int i = 0; i < numFiles; i++) {
         pmFPAfile *file = pmFPAfileSelectSingle(config->files, name, i); // Image file
-        file->dataLevel = level;
-        file->freeLevel = level;
+        file->dataLevel = PM_FPA_LEVEL_READOUT;
+        file->freeLevel = PM_FPA_LEVEL_CELL;
         files->data[i] = psMemIncrRefCounter(file);
     }
