Index: /branches/eam_rel9_p0/psModules/src/objects/pmPSF.c
===================================================================
--- /branches/eam_rel9_p0/psModules/src/objects/pmPSF.c	(revision 5990)
+++ /branches/eam_rel9_p0/psModules/src/objects/pmPSF.c	(revision 5991)
@@ -6,6 +6,6 @@
  *  @author EAM, IfA
  *
- *  @version $Revision: 1.3.4.2 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2006-01-14 07:03:52 $
+ *  @version $Revision: 1.3.4.3 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2006-01-15 18:22:34 $
  *
  *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -179,11 +179,11 @@
 
 /*****************************************************************************
-pmModelFromPSF (*modelFLT, *psf):  use the model position parameters to
+pmModelFromPSF (*modelEXT, *psf):  use the model position parameters to
 construct a realization of the PSF model at the object coordinates
  *****************************************************************************/
-pmModel *pmModelFromPSF (pmModel *modelFLT, pmPSF *psf)
-{
-
-    // need to define the relationship between the modelFLT and modelPSF ?
+pmModel *pmModelFromPSF (pmModel *modelEXT, pmPSF *psf)
+{
+
+    // need to define the relationship between the modelEXT and modelPSF ?
 
     // find function used to set the model parameters
@@ -194,5 +194,5 @@
 
     // set model parameters for this source based on PSF information
-    modelFromPSFFunc (modelPSF, modelFLT, psf);
+    modelFromPSFFunc (modelPSF, modelEXT, psf);
 
     return (modelPSF);
@@ -296,2 +296,70 @@
     return false;
 }
+
+psMetadata *pmPSFtoMD (psMetadata *metadata, pmPSF *psf)
+{
+
+    if (metadata == NULL) {
+        metadata = psMetadataAlloc ();
+    }
+
+    char *modelName = pmModelGetType (psf->type);
+    psMetadataAdd (metadata, PS_LIST_TAIL, "PSF_MODEL_NAME", PS_DATA_STRING, "PSF model name", modelName);
+
+    int nPar = pmModelParameterCount (psf->type)    ;
+    psMetadataAdd (metadata, PS_LIST_TAIL, "PSF_MODEL_NPAR", PS_DATA_S32, "PSF model parameter count", nPar);
+
+    for (int i = 0; i < nPar - 4; i++) {
+        psPolynomial2D *poly = psf->params->data[i];
+        psPolynomial2DtoMD (metadata, poly, "PSF_PAR%02d", i);
+    }
+    psPolynomial4DtoMD (metadata, psf->ApTrend, "APTREND");
+
+    psMetadataAdd (metadata, PS_LIST_TAIL, "PSF_AP_RESID", PS_DATA_F32, "aperture residual", psf->ApResid);
+    psMetadataAdd (metadata, PS_LIST_TAIL, "PSF_dAP_RESID", PS_DATA_F32, "aperture residual scatter", psf->dApResid);
+    psMetadataAdd (metadata, PS_LIST_TAIL, "PSF_SKY_BIAS", PS_DATA_F32, "sky bias level", psf->skyBias);
+
+    psMetadataAdd (metadata, PS_LIST_TAIL, "PSF_CHISQ", PS_DATA_F32, "chi-square for fit", psf->chisq);
+    psMetadataAdd (metadata, PS_LIST_TAIL, "PSF_NSTARS", PS_DATA_S32, "number of stars used to measure PSF", psf->nPSFstars);
+
+    return metadata;
+}
+
+pmPSF *pmPSFfromMD (psMetadata *metadata)
+{
+
+    bool status;
+    char keyword[80];
+
+    char *modelName = psMetadataLookupPtr (&status, metadata, "PSF_MODEL_NAME");
+    pmModelType type = pmModelSetType (modelName);
+
+    pmPSF *psf = pmPSFAlloc (type);
+
+    int nPar = psMetadataLookupS32 (&status, metadata, "PSF_MODEL_NPAR");
+    if (nPar != pmModelParameterCount (psf->type))
+        psAbort ("read PSF" , "mismatch model par count");
+
+    for (int i = 0; i < nPar - 4; i++) {
+        sprintf (keyword, "PSF_PAR%02d", i);
+        psMetadata *folder = psMetadataLookupPtr (&status, metadata, keyword);
+        psPolynomial2D *poly = psPolynomial2DfromMD (folder);
+        psFree (psf->params->data[i]);
+        psf->params->data[i] = poly;
+    }
+    sprintf (keyword, "APTREND");
+    psMetadata *folder = psMetadataLookupPtr (&status, metadata, keyword);
+    psPolynomial4D *poly = psPolynomial4DfromMD (folder);
+    psFree (psf->ApTrend);
+    psf->ApTrend = poly;
+
+    psf->ApResid = psMetadataLookupF32 (&status, metadata, "PSF_AP_RESID");
+    psf->dApResid = psMetadataLookupF32 (&status, metadata, "PSF_dAP_RESID");
+    psf->skyBias = psMetadataLookupF32 (&status, metadata, "PSF_SKY_BIAS");
+
+    psf->chisq = psMetadataLookupF32 (&status, metadata, "PSF_CHISQ");
+    psf->nPSFstars = psMetadataLookupS32 (&status, metadata, "PSF_NSTARS");
+
+    psFree (metadata);
+    return (psf);
+}
Index: /branches/eam_rel9_p0/psModules/src/objects/pmPSF.h
===================================================================
--- /branches/eam_rel9_p0/psModules/src/objects/pmPSF.h	(revision 5990)
+++ /branches/eam_rel9_p0/psModules/src/objects/pmPSF.h	(revision 5991)
@@ -6,6 +6,6 @@
  *  @author EAM, IfA
  *
- *  @version $Revision: 1.1.18.2 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2006-01-14 07:01:27 $
+ *  @version $Revision: 1.1.18.3 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2006-01-15 18:22:34 $
  *
  *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -102,4 +102,6 @@
 
 bool pmPSF_MaskApTrend (pmPSF *psf, pmPSF_ApTrendOptions option);
+psMetadata *pmPSFtoMD (psMetadata *metadata, pmPSF *psf);
+pmPSF *pmPSFfromMD (psMetadata *metadata);
 
 # endif
