Index: trunk/psphot/src/psphotChoosePSF.c
===================================================================
--- trunk/psphot/src/psphotChoosePSF.c	(revision 26894)
+++ trunk/psphot/src/psphotChoosePSF.c	(revision 26971)
@@ -15,8 +15,8 @@
     // loop over the available readouts
     for (int i = 0; i < num; i++) {
-	if (!psphotChoosePSFReadout (config, view, "PSPHOT.INPUT", i, recipe)) {
+        if (!psphotChoosePSFReadout (config, view, "PSPHOT.INPUT", i, recipe)) {
             psError (PSPHOT_ERR_CONFIG, false, "failed to choose a psf model for PSPHOT.INPUT entry %d", i);
-	    return false;
-	}
+            return false;
+        }
     }
     return true;
@@ -39,5 +39,5 @@
     // do not generate a PSF if we already were supplied one
     if (psMetadataLookupPtr (&status, readout->analysis, "PSPHOT.PSF")) {
-	psLogMsg ("psphot", PS_LOG_DETAIL, "psf model supplied for input file %d", index);
+        psLogMsg ("psphot", PS_LOG_DETAIL, "psf model supplied for input file %d", index);
         return true;
     }
@@ -50,6 +50,6 @@
 
     if (!sources->n) {
-	psLogMsg ("psphot", PS_LOG_INFO, "no sources, skipping PSF model");
-	return true;
+        psLogMsg ("psphot", PS_LOG_INFO, "no sources, skipping PSF model");
+        return true;
     }
 
@@ -111,5 +111,5 @@
     float gaussSigma = psMetadataLookupF32 (&status, readout->analysis, "MOMENTS_GAUSS_SIGMA");
     if (!status) {
-	gaussSigma = psMetadataLookupF32 (&status, recipe, "MOMENTS_GAUSS_SIGMA");
+        gaussSigma = psMetadataLookupF32 (&status, recipe, "MOMENTS_GAUSS_SIGMA");
     }
     float fitScale = psMetadataLookupF32(&status, recipe, "PSF_FIT_RADIUS_SCALE");
@@ -162,8 +162,8 @@
 
     if (stars->n < 50) {
-	// ROBUST is too agressive if we only have a small number of PSF stars
-	options->stats = psStatsAlloc (PS_STAT_SAMPLE_MEDIAN | PS_STAT_SAMPLE_STDEV);
+        // ROBUST is too agressive if we only have a small number of PSF stars
+        options->stats = psStatsAlloc (PS_STAT_SAMPLE_MEDIAN | PS_STAT_SAMPLE_STDEV);
     } else {
-	options->stats = psStatsAlloc (PS_STAT_ROBUST_MEDIAN | PS_STAT_ROBUST_STDEV);
+        options->stats = psStatsAlloc (PS_STAT_ROBUST_MEDIAN | PS_STAT_ROBUST_STDEV);
     }
 
@@ -354,10 +354,10 @@
     // save PSF on readout->analysis
     if (!psMetadataAddPtr (readout->analysis, PS_LIST_TAIL, "PSPHOT.PSF", PS_META_REPLACE | PS_DATA_UNKNOWN, "psphot psf model", psf)) {
-	psError (PSPHOT_ERR_UNKNOWN, false, "problem saving sources on readout");
+        psError (PSPHOT_ERR_UNKNOWN, false, "problem saving sources on readout");
         return false;
     }
     psFree (psf); // XXX double-check
 
-    // move into psphotChoosePSF 
+    // move into psphotChoosePSF
     psphotVisualShowPSFModel (readout, psf);
 
@@ -391,7 +391,7 @@
             pmModel *modelPSF = pmModelFromPSFforXY (psf, xc, yc, 1.0);
             if (!modelPSF) {
-		fprintf (stderr, "?");
-		continue;
-	    }
+                fprintf (stderr, "?");
+                continue;
+            }
 
             // get the model full-width at half-max
@@ -407,7 +407,7 @@
             float FWHM_MINOR = FWHM_MAJOR * (axes.minor / axes.major);
             if (!isfinite(FWHM_MAJOR) || !isfinite(FWHM_MINOR)) {
-		fprintf (stderr, "!");
-		continue;
-	    }
+                fprintf (stderr, "!");
+                continue;
+            }
             psVectorAppend (fwhmMajor, FWHM_MAJOR);
             psVectorAppend (fwhmMinor, FWHM_MINOR);
@@ -426,4 +426,6 @@
     psMetadataAddF32 (readout->analysis, PS_LIST_TAIL, "FW_MJ_UQ",   PS_META_REPLACE, "PSF FWHM Major axis (upper quartile)", stats->sampleUQ);
 
+    float fwhmMaj = stats->sampleMean;  // FWHM on major axis
+
     if (!psVectorStats (stats, fwhmMinor, NULL, NULL, 0)) {
         psError(PS_ERR_UNKNOWN, false, "failure to measure stats for FWHM MINOR");
@@ -434,4 +436,12 @@
     psMetadataAddF32 (readout->analysis, PS_LIST_TAIL, "FW_MN_LQ",   PS_META_REPLACE, "PSF FWHM Minor axis (lower quartile)", stats->sampleLQ);
     psMetadataAddF32 (readout->analysis, PS_LIST_TAIL, "FW_MN_UQ",   PS_META_REPLACE, "PSF FWHM Minor axis (upper quartile)", stats->sampleUQ);
+
+    float fwhmMin = stats->sampleMean;  // FWHM on minor axis
+    if (readout->parent) {
+        pmChip *chip = readout->parent->parent; // Parent chip
+        psAssert(chip, "Cell should be attached to a chip.");
+        psMetadataItem *item = psMetadataLookup(chip->analysis, "CHIP.SEEING"); // Item with chip
+        item->data.F32 = 0.5 * (fwhmMaj + fwhmMin);
+    }
 
     psMetadataAddF32 (readout->analysis, PS_LIST_TAIL, "ANGLE",    PS_META_REPLACE, "PSF angle",           axes.theta);
@@ -486,4 +496,11 @@
     FWHM_Y /= FWHM_N;
     FWHM_T /= FWHM_N;
+
+    if (readout->parent) {
+        pmChip *chip = readout->parent->parent; // Parent chip
+        psAssert(chip, "Cell should be attached to a chip.");
+        psMetadataItem *item = psMetadataLookup(chip->analysis, "CHIP.SEEING"); // Item with chip
+        item->data.F32 = 0.5 * (FWHM_X + FWHM_Y);
+    }
 
     psMetadataAddF32 (readout->analysis, PS_LIST_TAIL, "FWHM_MAJ",   PS_META_REPLACE, "PSF FWHM Major axis (mean)", FWHM_X);
