Index: trunk/ppSub/src/ppSubCamera.c
===================================================================
--- trunk/ppSub/src/ppSubCamera.c	(revision 20614)
+++ trunk/ppSub/src/ppSubCamera.c	(revision 21257)
@@ -1,16 +1,7 @@
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-#include <pslib.h>
-#include <psmodules.h>
-#include <psphot.h>
-
 #include "ppSub.h"
 
 bool ppSubCamera(pmConfig *config)
 {
-    bool status = false;                // Status of definition
+    bool status = false;                // result from pmFPAfileDefine operations
 
     // Input image
@@ -119,4 +110,80 @@
     }
 
+    // Convolved input image
+    pmFPAfile *inConv = pmFPAfileDefineFromFile(config, input, 1, 1, "PPSUB.INPUT.CONV");
+    if (!inConv) {
+        psError(PS_ERR_IO, false, _("Unable to generate output file for PPSUB.INPUT.CONV"));
+        return false;
+    }
+    if (output->type != PM_FPA_FILE_IMAGE) {
+        psError(PS_ERR_IO, true, "PPSUB.INPUT.CONV is not of type IMAGE");
+        return false;
+    }
+    // XXX should be based on recipe : inConv->save = true;
+
+    // Convolved input mask
+    pmFPAfile *inConvMask = pmFPAfileDefineOutput(config, inConv->fpa, "PPSUB.INPUT.CONV.MASK");
+    if (!inConvMask) {
+        psError(PS_ERR_IO, false, _("Unable to generate output file from PPSUB.INPUT.CONV.MASK"));
+        return false;
+    }
+    if (inConvMask->type != PM_FPA_FILE_MASK) {
+        psError(PS_ERR_IO, true, "PPSUB.INPUT.CONV.MASK is not of type MASK");
+        return false;
+    }
+    // XXX should be based on recipe : inConvMask->save = true;
+
+    // Convolved input weight
+    if (inputWeight) {
+        pmFPAfile *inConvWeight = pmFPAfileDefineOutput(config, inConv->fpa, "PPSUB.INPUT.CONV.WEIGHT");
+        if (!inConvWeight) {
+            psError(PS_ERR_IO, false, _("Unable to generate output file from PPSUB.OUTPUT.WEIGHT"));
+            return false;
+        }
+        if (inConvWeight->type != PM_FPA_FILE_WEIGHT) {
+            psError(PS_ERR_IO, true, "PPSUB.INPUT.CONV.WEIGHT is not of type WEIGHT");
+            return false;
+        }
+        // XXX should be based on recipe : inConvWeight->save = true;
+    }
+
+    // Convolved ref image
+    pmFPAfile *refConv = pmFPAfileDefineFromFile(config, ref, 1, 1, "PPSUB.REF.CONV");
+    if (!refConv) {
+        psError(PS_ERR_IO, false, _("Unable to generate output file for PPSUB.REF.CONV"));
+        return false;
+    }
+    if (output->type != PM_FPA_FILE_IMAGE) {
+        psError(PS_ERR_IO, true, "PPSUB.REF.CONV is not of type IMAGE");
+        return false;
+    }
+    // XXX should be based on recipe : refConv->save = true;
+
+    // Convolved ref mask
+    pmFPAfile *refConvMask = pmFPAfileDefineOutput(config, refConv->fpa, "PPSUB.REF.CONV.MASK");
+    if (!refConvMask) {
+        psError(PS_ERR_IO, false, _("Unable to generate output file from PPSUB.REF.CONV.MASK"));
+        return false;
+    }
+    if (refConvMask->type != PM_FPA_FILE_MASK) {
+        psError(PS_ERR_IO, true, "PPSUB.REF.CONV.MASK is not of type MASK");
+        return false;
+    }
+    // XXX should be based on recipe : refConvMask->save = true;
+
+    // Convolved ref weight
+    if (refWeight) {
+        pmFPAfile *refConvWeight = pmFPAfileDefineOutput(config, refConv->fpa, "PPSUB.REF.CONV.WEIGHT");
+        if (!refConvWeight) {
+            psError(PS_ERR_IO, false, _("Unable to generate output file from PPSUB.OUTPUT.WEIGHT"));
+            return false;
+        }
+        if (refConvWeight->type != PM_FPA_FILE_WEIGHT) {
+            psError(PS_ERR_IO, true, "PPSUB.REF.CONV.WEIGHT is not of type WEIGHT");
+            return false;
+        }
+        // XXX should be based on recipe : refConvWeight->save = true;
+    }
+
     // Output JPEGs
     pmFPAfile *jpeg1 = pmFPAfileDefineOutput(config, NULL, "PPSUB.OUTPUT.JPEG1");
@@ -192,8 +259,16 @@
         }
         pmFPAfileActivate(config->files, false, "PSPHOT.PSF.LOAD");
+
+        pmFPAfile *psphotResid = pmFPAfileDefineOutputForFormat (config, NULL, "PSPHOT.RESID", output->cameraName, output->formatName);
+        if (!psphotResid) {
+            psError(PSPHOT_ERR_CONFIG, false, "Cannot find a rule for PSPHOT.RESID");
+            return false;
+        }
+        // make this optional: psphotResid->save = true;
     }
 
     // Always do this, since we're using psphot for the background model.
-    {
+    // XXX Not certain that I need to generate a separate pmFPAfile for PSPHOT.INPUT
+    if (0) {
         pmFPAfile *psphot = pmFPAfileDefineFromFPA(config, output->fpa, 1, 1, "PSPHOT.INPUT");
         if (!psphot) {
