Index: trunk/ppImage/src/ppImageParseCamera.c
===================================================================
--- trunk/ppImage/src/ppImageParseCamera.c	(revision 7592)
+++ trunk/ppImage/src/ppImageParseCamera.c	(revision 7621)
@@ -6,5 +6,5 @@
     bool status = false;
 
-    // the input image defines the camera
+    // the input image defines the camera, and all recipes and options the follow
     pmFPAfile *input = pmFPAfileDefineFromArgs (&status, config, "PPIMAGE.INPUT", "INPUT");
     if (!status) {
@@ -14,5 +14,5 @@
 
     // add recipe options supplied on command line
-    psMetadata *recipe  = psMetadataLookupPtr (&status, config->recipes,   "PHASE2");
+    psMetadata *recipe  = psMetadataLookupPtr (&status, config->recipes, "PHASE2");
     psMetadata *arglist = psMetadataLookupPtr (&status, config->arguments, "PPIMAGE.OPTIONS");
     psMetadataCopy (recipe, arglist);
@@ -20,8 +20,4 @@
     // parse the options from the metadata format to the ppImageOptions structure
     ppImageOptions *options = ppImageOptionsParse (config);
-
-    // the following files are output targets
-    pmFPAfileDefineOutput (config, input->fpa, "PPIMAGE.OUTPUT");
-    pmFPAfileDefineNewCamera (config, "PPIMAGE.OUTPUT.CHIP");
 
     // the following are defined from the argument list, if given, 
@@ -56,22 +52,54 @@
 	if (!status) psAbort ("ppImageParseDetrend", "can't find a flat image source");
     }
-    if (options->doBin1) {
-	pmFPAfile *file = pmFPAfileDefineFromFPA (config, input->fpa, options->xBin1, options->yBin1, "PPIMAGE.BIN1");
-	if (options->doBin1JPG) {
-	    pmFPAfileDefineOutput (config, file->fpa, "PPIMAGE.JPEG1");
+
+    // the following files are output targets
+    pmFPAfile *output = pmFPAfileDefineOutput (config, input->fpa, "PPIMAGE.OUTPUT");
+    pmFPAfile *byChip = pmFPAfileDefineNewCamera (config, "PPIMAGE.OUTPUT.CHIP");
+    pmFPAfile *byFPA1 = pmFPAfileDefineNewCamera (config, "PPIMAGE.OUTPUT.FPA1");
+    pmFPAfile *byFPA2 = pmFPAfileDefineNewCamera (config, "PPIMAGE.OUTPUT.FPA2");
+
+    // save any of these files?
+    output->save = options->BaseFITS;
+    byChip->save = options->ChipFITS;
+    byFPA1->save = options->FPA1FITS;
+    byFPA2->save = options->FPA2FITS;
+
+    // output is used as a carrier: input to byChip
+    output->freeLevel = PM_FPA_LEVEL_CHIP; 
+
+    // define the binned target files (which may just be carriers for some camera configurations)
+    pmFPAfile *bin1 = pmFPAfileDefineFromFPA (config, byChip->fpa, options->xBin1, options->yBin1, "PPIMAGE.BIN1");
+    pmFPAfile *bin2 = pmFPAfileDefineFromFPA (config, byChip->fpa, options->xBin2, options->yBin2, "PPIMAGE.BIN2");
+
+    // set the CELL.XBIN and CELL.YBIN for the output mosaiced FPAs
+    for (int i = 0; i < byFPA1->fpa->chips->n; i++) {
+	pmChip *chip = byFPA1->fpa->chips->data[i];
+	for (int j = 0; j < chip->cells->n; j++) {
+	    pmCell *cell = chip->cells->data[j];
+            psMetadataAddF32 (cell->concepts, PS_LIST_TAIL, "CELL.XBIN", PS_META_REPLACE, "", options->xBin1);
+            psMetadataAddF32 (cell->concepts, PS_LIST_TAIL, "CELL.YBIN", PS_META_REPLACE, "", options->yBin1);
 	}
     }
-    if (options->doBin2) {
-	pmFPAfile *file = pmFPAfileDefineFromFPA (config, input->fpa, options->xBin2, options->yBin2, "PPIMAGE.BIN2");
-	if (options->doBin2JPG) {
-	    pmFPAfileDefineOutput (config, file->fpa, "PPIMAGE.JPEG2");
+    for (int i = 0; i < byFPA2->fpa->chips->n; i++) {
+	pmChip *chip = byFPA2->fpa->chips->data[i];
+	for (int j = 0; j < chip->cells->n; j++) {
+	    pmCell *cell = chip->cells->data[j];
+            psMetadataAddF32 (cell->concepts, PS_LIST_TAIL, "CELL.XBIN", PS_META_REPLACE, "", options->xBin2);
+            psMetadataAddF32 (cell->concepts, PS_LIST_TAIL, "CELL.YBIN", PS_META_REPLACE, "", options->yBin2);
 	}
     }
 
-    // ppImage is supplied with an output name, which may be used by multiple
-    // output files to construct the output names.  supply this value to the
-    // files which are write types.
-    char *output = psMetadataLookupPtr(&status, config->arguments, "OUTPUT");
-    pmFPAfileAddFileNames (config->files, "OUTPUT", output, PM_FPA_MODE_WRITE);
+    // bin1 and bin2 are used as carriers: input for byFPA1, byFPA2
+    bin1->freeLevel = PM_FPA_LEVEL_FPA;
+    bin2->freeLevel = PM_FPA_LEVEL_FPA;
+
+    pmFPAfile *jpg1 = pmFPAfileDefineOutput (config, byFPA1->fpa, "PPIMAGE.JPEG1");
+    pmFPAfile *jpg2 = pmFPAfileDefineOutput (config, byFPA2->fpa, "PPIMAGE.JPEG2");
+
+    // XXX we could potentially not define these pmFPAfiles if no output is requested...
+    bin1->save = options->Bin1FITS;
+    bin2->save = options->Bin2FITS;
+    jpg1->save = options->Bin1JPEG;
+    jpg2->save = options->Bin2JPEG;
 
     // Chip selection: turn on only the chips specified (pass status to suppress missing-key log msg)
