Index: /branches/eam_branches/ipp-20101205/psModules/src/objects/pmPSF_IO.c
===================================================================
--- /branches/eam_branches/ipp-20101205/psModules/src/objects/pmPSF_IO.c	(revision 30006)
+++ /branches/eam_branches/ipp-20101205/psModules/src/objects/pmPSF_IO.c	(revision 30007)
@@ -62,4 +62,6 @@
 #include "pmSourceIO.h"
 
+bool pmPSFmodelReadPSFClump (psMetadata *analysis, psMetadata *header);
+
 bool pmPSFmodelCheckDataStatusForView (const pmFPAview *view, const pmFPAfile *file)
 {
@@ -851,65 +853,13 @@
 
     // read the psf clump data for each region
+    status = false;
     if (roAnalysis) {
-        int nRegions = psMetadataLookupS32 (&status, header, "PSF_CLN");
-        if (!status) {
-            // read old-style psf clump data
-
-            char regionName[64];
-            snprintf (regionName, 64, "PSF.CLUMP.REGION.000");
-            psMetadataAddS32 (roAnalysis, PS_LIST_TAIL, "PSF.CLUMP.NREGIONS",  PS_META_REPLACE, "psf clump regions", 1);
-
-            psMetadata *regionMD = psMetadataLookupPtr (&status, roAnalysis, regionName);
-            if (!regionMD) {
-                regionMD = psMetadataAlloc();
-                psMetadataAddMetadata (roAnalysis, PS_LIST_TAIL, regionName, PS_META_REPLACE, "psf clump region", regionMD);
-                psFree (regionMD);
-            }
-
-            // psf clump data
-            pmPSFClump psfClump;
-
-            psfClump.X  = psMetadataLookupF32 (&status, header, "PSF_CLX" );  assert(status);
-            psfClump.Y  = psMetadataLookupF32 (&status, header, "PSF_CLY" );  assert(status);
-            psfClump.dX = psMetadataLookupF32 (&status, header, "PSF_CLDX");  assert(status);
-            psfClump.dY = psMetadataLookupF32 (&status, header, "PSF_CLDY");  assert(status);
-
-            psMetadataAddF32 (regionMD, PS_LIST_TAIL, "PSF.CLUMP.X",  PS_META_REPLACE, "psf clump center", psfClump.X);
-            psMetadataAddF32 (regionMD, PS_LIST_TAIL, "PSF.CLUMP.Y",  PS_META_REPLACE, "psf clump center", psfClump.Y);
-            psMetadataAddF32 (regionMD, PS_LIST_TAIL, "PSF.CLUMP.DX", PS_META_REPLACE, "psf clump center", psfClump.dX);
-            psMetadataAddF32 (regionMD, PS_LIST_TAIL, "PSF.CLUMP.DY", PS_META_REPLACE, "psf clump center", psfClump.dY);
-        } else {
-            psMetadataAddS32 (roAnalysis, PS_LIST_TAIL, "PSF.CLUMP.NREGIONS",  PS_META_REPLACE, "psf clump regions", nRegions);
-
-            for (int i = 0; i < nRegions; i++) {
-                char key[10];
-                char regionName[64];
-                snprintf (regionName, 64, "PSF.CLUMP.REGION.%03d", i);
-
-                psMetadata *regionMD = psMetadataLookupPtr (&status, roAnalysis, regionName);
-                if (!regionMD) {
-                    regionMD = psMetadataAlloc();
-                    psMetadataAddMetadata (roAnalysis, PS_LIST_TAIL, regionName, PS_META_REPLACE, "psf clump region", regionMD);
-                    psFree (regionMD);
-                }
-
-                // psf clump data
-                pmPSFClump psfClump;
-
-                snprintf (key, 9, "CLX_%03d", i);
-                psfClump.X  = psMetadataLookupF32 (&status, header, key);  assert(status);
-                snprintf (key, 9, "CLY_%03d", i);
-                psfClump.Y  = psMetadataLookupF32 (&status, header, key);  assert(status);
-                snprintf (key, 9, "CLDX_%03d", i);
-                psfClump.dX = psMetadataLookupF32 (&status, header, key);  assert(status);
-                snprintf (key, 9, "CLDY_%03d", i);
-                psfClump.dY = psMetadataLookupF32 (&status, header, key);  assert(status);
-
-                psMetadataAddF32 (regionMD, PS_LIST_TAIL, "PSF.CLUMP.X",  PS_META_REPLACE, "psf clump center", psfClump.X);
-                psMetadataAddF32 (regionMD, PS_LIST_TAIL, "PSF.CLUMP.Y",  PS_META_REPLACE, "psf clump center", psfClump.Y);
-                psMetadataAddF32 (regionMD, PS_LIST_TAIL, "PSF.CLUMP.DX", PS_META_REPLACE, "psf clump center", psfClump.dX);
-                psMetadataAddF32 (regionMD, PS_LIST_TAIL, "PSF.CLUMP.DY", PS_META_REPLACE, "psf clump center", psfClump.dY);
-            }
-        }
+	status = pmPSFmodelReadPSFClump (roAnalysis, header);
+	if (!status) {
+	    psMetadataAddS32 (roAnalysis, PS_LIST_TAIL, "PSF.CLUMP.NREGIONS",  PS_META_REPLACE, "psf clump regions", 0);
+	}
+    } 
+    if (!roAnalysis || !status) {
+	psWarning ("no PSF.CLUMP data available for PSF model");
     }
 
@@ -1123,3 +1073,66 @@
 }
 
-// XXX pmPSF to/from Metadata functions were defined for 1.22 and earlier, but were dropped
+bool pmPSFmodelReadPSFClump (psMetadata *analysis, psMetadata *header) {
+
+    bool status = false;;
+
+    int nRegions = psMetadataLookupS32 (&status, header, "PSF_CLN");
+    if (!status) {
+	// read old-style psf clump data
+
+	char regionName[64];
+	snprintf (regionName, 64, "PSF.CLUMP.REGION.000");
+	psMetadata *regionMD = psMetadataLookupPtr (&status, analysis, regionName);
+
+	if (!regionMD) {
+	    regionMD = psMetadataAlloc();
+	    psMetadataAddMetadata (analysis, PS_LIST_TAIL, regionName, PS_META_REPLACE, "psf clump region", regionMD);
+	    psFree (regionMD);
+	}
+
+	// psf clump data
+	pmPSFClump psfClump;
+	psfClump.X  = psMetadataLookupF32 (&status, header, "PSF_CLX" );  if (!status) return false;
+	psfClump.Y  = psMetadataLookupF32 (&status, header, "PSF_CLY" );  if (!status) return false;
+	psfClump.dX = psMetadataLookupF32 (&status, header, "PSF_CLDX");  if (!status) return false;
+	psfClump.dY = psMetadataLookupF32 (&status, header, "PSF_CLDY");  if (!status) return false;
+
+	psMetadataAddF32 (regionMD, PS_LIST_TAIL, "PSF.CLUMP.X",  PS_META_REPLACE, "psf clump center", psfClump.X);
+	psMetadataAddF32 (regionMD, PS_LIST_TAIL, "PSF.CLUMP.Y",  PS_META_REPLACE, "psf clump center", psfClump.Y);
+	psMetadataAddF32 (regionMD, PS_LIST_TAIL, "PSF.CLUMP.DX", PS_META_REPLACE, "psf clump center", psfClump.dX);
+	psMetadataAddF32 (regionMD, PS_LIST_TAIL, "PSF.CLUMP.DY", PS_META_REPLACE, "psf clump center", psfClump.dY);
+	psMetadataAddS32 (analysis, PS_LIST_TAIL, "PSF.CLUMP.NREGIONS",  PS_META_REPLACE, "psf clump regions", 1);
+    } else {
+	for (int i = 0; i < nRegions; i++) {
+	    char key[10];
+	    char regionName[64];
+	    snprintf (regionName, 64, "PSF.CLUMP.REGION.%03d", i);
+
+	    psMetadata *regionMD = psMetadataLookupPtr (&status, analysis, regionName);
+	    if (!regionMD) {
+		regionMD = psMetadataAlloc();
+		psMetadataAddMetadata (analysis, PS_LIST_TAIL, regionName, PS_META_REPLACE, "psf clump region", regionMD);
+		psFree (regionMD);
+	    }
+
+	    // psf clump data
+	    pmPSFClump psfClump;
+
+	    snprintf (key, 9, "CLX_%03d", i);
+	    psfClump.X  = psMetadataLookupF32 (&status, header, key);  if (!status) return false;
+	    snprintf (key, 9, "CLY_%03d", i);
+	    psfClump.Y  = psMetadataLookupF32 (&status, header, key);  if (!status) return false;
+	    snprintf (key, 9, "CLDX_%03d", i);
+	    psfClump.dX = psMetadataLookupF32 (&status, header, key);  if (!status) return false;
+	    snprintf (key, 9, "CLDY_%03d", i);
+	    psfClump.dY = psMetadataLookupF32 (&status, header, key);  if (!status) return false;
+
+	    psMetadataAddF32 (regionMD, PS_LIST_TAIL, "PSF.CLUMP.X",  PS_META_REPLACE, "psf clump center", psfClump.X);
+	    psMetadataAddF32 (regionMD, PS_LIST_TAIL, "PSF.CLUMP.Y",  PS_META_REPLACE, "psf clump center", psfClump.Y);
+	    psMetadataAddF32 (regionMD, PS_LIST_TAIL, "PSF.CLUMP.DX", PS_META_REPLACE, "psf clump center", psfClump.dX);
+	    psMetadataAddF32 (regionMD, PS_LIST_TAIL, "PSF.CLUMP.DY", PS_META_REPLACE, "psf clump center", psfClump.dY);
+	}
+	psMetadataAddS32 (analysis, PS_LIST_TAIL, "PSF.CLUMP.NREGIONS",  PS_META_REPLACE, "psf clump regions", nRegions);
+    }
+    return true;
+}
