Index: trunk/ppStack/src/ppStackReadout.c
===================================================================
--- trunk/ppStack/src/ppStackReadout.c	(revision 13513)
+++ trunk/ppStack/src/ppStackReadout.c	(revision 13515)
@@ -10,7 +10,4 @@
 
 #define ARRAY_BUFFER 16                 // Number to add to array at a time
-
-
-#define WEIGHT 1.0                      // Weighting
 
 bool ppStackReadout(pmConfig *config, const pmFPAview *view)
@@ -35,15 +32,19 @@
     // Get the input sources
     psArray *stack = psArrayAllocEmpty(ARRAY_BUFFER); // The stack of inputs
-    psMetadataIterator *inputIter = psMetadataIteratorAlloc(config->files, PS_LIST_HEAD,
-                                                            "^PPSTACK.INPUT$"); // Iterator over input files
-    psMetadataItem *item;               // Item from iteration
+    psMetadataIterator *fileIter = psMetadataIteratorAlloc(config->files, PS_LIST_HEAD,
+                                                           "^PPSTACK.INPUT$"); // Iterator over input files
+    psMetadataItem *fileItem;           // Item from iteration
     psStats *stats = psStatsAlloc(PS_STAT_ROBUST_MEDIAN); // Statistics
     psRandom *rng = psRandomAlloc(0, PS_RANDOM_TAUS); // Random number generator
     int fileNum = 0;                    // Number of file
     float totExposure = 0.0;            // Total exposure time
-    while ((item = psMetadataGetAndIncrement(inputIter))) {
-        assert(item->type == PS_DATA_UNKNOWN);
-        pmFPAfile *inputFile = item->data.V; // An input file
+    while ((fileItem = psMetadataGetAndIncrement(fileIter))) {
+        assert(fileItem->type == PS_DATA_UNKNOWN);
+        pmFPAfile *inputFile = fileItem->data.V; // An input file
         pmReadout *ro = pmFPAviewThisReadout(view, inputFile->fpa); // Corresponding readout
+
+        float seeing = psMetadataLookupF32(NULL, inputFile->fpa->analysis, "PPSTACK.SEEING"); // Seeing FWHM
+        float weight = psMetadataLookupF32(NULL, inputFile->fpa->analysis, "PPSTACK.WEIGHT"); // Rel. weight
+        float scale = psMetadataLookupF32(NULL, inputFile->fpa->analysis, "PPSTACK.SCALE"); // Rel. scale
 
         // Brain-dead background subtraction
@@ -52,5 +53,5 @@
             psFree(stats);
             psFree(rng);
-            psFree(inputIter);
+            psFree(fileIter);
             psFree(stack);
             psFree(outRO);
@@ -58,4 +59,7 @@
         }
         (void)psBinaryOp(ro->image, ro->image, "-", psScalarAlloc(stats->robustMedian, PS_TYPE_F32));
+
+        // Apply scaling
+        (void)psBinaryOp(ro->image, ro->image, "*", psScalarAlloc(1.0 / scale, PS_TYPE_F32));
 
         // Normalise each input by the exposure time
@@ -66,5 +70,5 @@
             psFree(stats);
             psFree(rng);
-            psFree(inputIter);
+            psFree(fileIter);
             psFree(outRO);
             psFree(stack);
@@ -73,11 +77,10 @@
         totExposure += exposure;        // Total exposure time
         (void)psBinaryOp(ro->image, ro->image, "/", psScalarAlloc(exposure, PS_TYPE_F32));
-        pmStackData *data = pmStackDataAlloc(ro, seeing ? seeing->data.F32[fileNum] : 0.0,
-                                             WEIGHT); // Data to stack
+        pmStackData *data = pmStackDataAlloc(ro, seeing, weight); // Data to stack
         psArrayAdd(stack, ARRAY_BUFFER, data);
         psFree(data);                   // Drop reference
         fileNum++;
     }
-    psFree(inputIter);
+    psFree(fileIter);
     psFree(stats);
     psFree(rng);
