Index: /branches/eam_branch_20070921/psphot/src/psphotRoughClass.c
===================================================================
--- /branches/eam_branch_20070921/psphot/src/psphotRoughClass.c	(revision 14990)
+++ /branches/eam_branch_20070921/psphot/src/psphotRoughClass.c	(revision 14991)
@@ -1,8 +1,14 @@
 # include "psphotInternal.h"
+# define CHECK_STATUS(S,MSG) { \
+  if (!status) { \
+    psError(PSPHOT_ERR_CONFIG, false, "missing PSF Clump entry: %s\n", MSG); \
+    return false; \
+  } }
 
 // 2006.02.02 : no leaks
 bool psphotRoughClass (psArray *sources, psMetadata *recipe, const bool havePSF, psMaskType maskSat) {
 
-    static pmPSFClump   psfClump;
+    bool status;
+    static pmPSFClump psfClump;
 
     psTimerStart ("psphot");
@@ -11,27 +17,14 @@
         // determine the PSF parameters from the source moment values
         psfClump = pmSourcePSFClump (sources, recipe);
+	psMetadataAddF32 (recipe, PS_LIST_TAIL, "PSF.CLUMP.X", 0, "psf clump center", psfClump.X);
+	psMetadataAddF32 (recipe, PS_LIST_TAIL, "PSF.CLUMP.Y", 0, "psf clump center", psfClump.Y);
+	psMetadataAddF32 (recipe, PS_LIST_TAIL, "PSF.CLUMP.DX", 0, "psf clump center", psfClump.dX);
+	psMetadataAddF32 (recipe, PS_LIST_TAIL, "PSF.CLUMP.DY", 0, "psf clump center", psfClump.dY);
     } else {
         // pull FWHM_X,Y from the recipe, use to define psfClump.X,Y
-        bool status_x, status_y, status_a;
-        float FWHM_X = psMetadataLookupF32 (&status_x, recipe, "FWHM_X");
-        float FWHM_Y = psMetadataLookupF32 (&status_y, recipe, "FWHM_Y");
-        float ANGLE  = psMetadataLookupF32 (&status_a, recipe, "ANGLE");
-        if (!status_x | !status_y | !status_a) {
-            psError(PSPHOT_ERR_CONFIG, false, "FWHM_X, FWHM_Y, or ANGLE not defined");
-            return false;
-        }
-
-        psEllipseAxes axes;
-        axes.major = FWHM_X / (2.0*sqrt(2.0*log(2.0)));
-        axes.minor = FWHM_Y / (2.0*sqrt(2.0*log(2.0)));
-        axes.theta = ANGLE;
-        psEllipseShape shape = psEllipseAxesToShape (axes);
-
-        psfClump.X   = shape.sx;
-        psfClump.Y   = shape.sy;
-        psfClump.dX  = 0.1*shape.sx;
-        psfClump.dY  = 0.1*shape.sy;
-        // dX,dY are somewhat crudely defined, but only used to select PSF candidates.
-        // if we already have a PSF, this is not actually used...
+        psfClump.X  = psMetadataLookupF32 (&status, recipe, "PSF.CLUMP.X");  CHECK_STATUS (status, "PSF.CLUMP.X");
+        psfClump.Y  = psMetadataLookupF32 (&status, recipe, "PSF.CLUMP.Y");  CHECK_STATUS (status, "PSF.CLUMP.Y");
+        psfClump.dX = psMetadataLookupF32 (&status, recipe, "PSF.CLUMP.DX");  CHECK_STATUS (status, "PSF.CLUMP.DX");
+        psfClump.dY = psMetadataLookupF32 (&status, recipe, "PSF.CLUMP.DY");  CHECK_STATUS (status, "PSF.CLUMP.DY");
     }
 
