Index: /trunk/psphot/src/psphotOutput.c
===================================================================
--- /trunk/psphot/src/psphotOutput.c	(revision 5127)
+++ /trunk/psphot/src/psphotOutput.c	(revision 5128)
@@ -21,5 +21,5 @@
     }
     if (!strcasecmp (outputMode, "TEXT")) {
-	pmSourcesWriteText (imdata, outputFile, sources, psf, sky);
+	pmSourcesWriteText (imdata, config, outputFile, sources, psf, sky);
 	return;
     }
@@ -47,10 +47,10 @@
 }
 
-bool pmSourcesWriteText (eamReadout *imdata, char *filename, psArray *sources, pmPSF *psf, psStats *sky) {
+bool pmSourcesWriteText (eamReadout *imdata, psMetadata *config, char *filename, psArray *sources, pmPSF *psf, psStats *sky) {
 
     char *name = (char *) psAlloc (strlen(filename) + 10);
 
     sprintf (name, "%s.psf.dat", filename);
-    pmModelWritePSFs (sources, name);
+    pmModelWritePSFs (sources, config, name, psf);
 
     sprintf (name, "%s.flt.dat", filename);
@@ -135,5 +135,5 @@
     }
 
-    float RADIUS = psMetadataLookupF32 (&result, config, "PSF_FIT_RADIUS");
+    float RADIUS = psMetadataLookupF32 (&status, config, "PSF_FIT_RADIUS");
 
     // write sources with models 
@@ -173,16 +173,15 @@
 bool pmSourcesWriteCMP (eamReadout *imdata, psMetadata *config, char *filename, psArray *sources, pmPSF *psf, psStats *skyStats) {
 
-    int i, type, status;
+    int i, type;
     pmModel *model;
     psMetadataItem *mdi;
     psF32 *PAR, *dPAR;
-    float sky, dmag, apMag, fitMag, lsky;
-    float x, y, rflux;
-    bool result;
+    float dmag, apResid, lsky;
+    bool status;
 
     // find config information for output header
-    float RADIUS = psMetadataLookupF32 (&result, config, "PSF_FIT_RADIUS");
-    float ZERO_POINT = psMetadataLookupF32 (&result, config, "ZERO_POINT");
-    char *PHOTCODE = psMetadataLookupF32 (&result, config, "PHOTCODE");
+    float RADIUS = psMetadataLookupF32 (&status, config, "PSF_FIT_RADIUS");
+    float ZERO_POINT = psMetadataLookupF32 (&status, config, "ZERO_POINT");
+    char *PHOTCODE = psMetadataLookupPtr (&status, config, "PHOTCODE");
 
     // write necessary information to output header
@@ -240,10 +239,10 @@
 	psLineAdd (line, "%6.1f ", PAR[2]);
 	psLineAdd (line, "%6.1f ", PAR[3]);
-	psLineAdd (line, "%6.3f ", source->fitMag + ZERO_POINT);
+	psLineAdd (line, "%6.3f ", PS_MIN (32.0, source->fitMag + ZERO_POINT));
 	psLineAdd (line, "%03d ", (int)(1000*dmag));
 	psLineAdd (line, "%2d ",   type);
 	psLineAdd (line, "%3.1f ", lsky);
 	psLineAdd (line, "%6.3f ", 32.0);    // should be 'Mgal
-	psLineAdd (line, "%6.3f ", apMag + ZERO_POINT); 
+	psLineAdd (line, "%6.3f ", PS_MIN (32.0, source->apMag + ZERO_POINT)); 
 	psLineAdd (line, "%6.2f ", PAR[4]);  // should be 'FHWM x'
 	psLineAdd (line, "%6.2f ", PAR[5]);  // should be 'FHWM y'
@@ -264,15 +263,14 @@
     psMetadata *row;
     psMetadata *theader;
-    int i, type, status;
+    int i, type;
     pmModel *model;
     psF32 *PAR, *dPAR;
-    float sky, dmag, apMag, fitMag;
-    float x, y, rflux, lsky;
-    bool result;
+    float dmag, lsky;
+    bool status;
 
     // find config information for output header
-    float RADIUS = psMetadataLookupF32 (&result, config, "PSF_FIT_RADIUS");
-    float ZERO_POINT = psMetadataLookupF32 (&result, config, "ZERO_POINT");
-    char *PHOTCODE = psMetadataLookupF32 (&result, config, "PHOTCODE");
+    float RADIUS = psMetadataLookupF32 (&status, config, "PSF_FIT_RADIUS");
+    float ZERO_POINT = psMetadataLookupF32 (&status, config, "ZERO_POINT");
+    char *PHOTCODE = psMetadataLookupPtr (&status, config, "PHOTCODE");
 
     // write necessary information to output header
@@ -319,5 +317,5 @@
 	psMetadataAdd (row, PS_LIST_HEAD, "MAG_AP",  PS_META_F32, "", lsky);
 	psMetadataAdd (row, PS_LIST_HEAD, "LOG_SKY", PS_META_F32, "", 32.0);    // should be 'Mgal'
-	psMetadataAdd (row, PS_LIST_HEAD, "FWHM_X",  PS_META_F32, "", apMag + ZERO_POINT); 
+	psMetadataAdd (row, PS_LIST_HEAD, "FWHM_X",  PS_META_F32, "", source->apMag + ZERO_POINT); 
 	psMetadataAdd (row, PS_LIST_HEAD, "FWHM_Y",  PS_META_F32, "", PAR[4]);  // should be 'FHWM x'
 	psMetadataAdd (row, PS_LIST_HEAD, "THETA",   PS_META_F32, "", PAR[5]);  // should be 'FHWM y'
@@ -331,6 +329,7 @@
     // psAbort ("psphotOutput", "FITS table output not finished");
 
-    psImage *image = psImageAlloc (1, 1, PS_TYPE_F32);
+    // psImage *image = psImageAlloc (1, 1, PS_TYPE_F32);
     // XXX missing: theader = psFitsHeaderFromTable (NULL, table, "SMPFILE");
+    // psFitsWriteImage (fits, imdata->header, image, 0);
 
     theader = psMetadataAlloc ();
@@ -339,5 +338,5 @@
     unlink (filename);
     psFits *fits = psFitsAlloc (filename);
-    psFitsWriteImage (fits, imdata->header, image, 0);
+    psFitsWriteHeader (imdata->header, fits);
     psFitsWriteTable (fits, theader, table);
     psFree (fits);
@@ -400,12 +399,12 @@
 
 // dump the sources to an output file
-bool pmModelWritePSFs (psArray *sources, char *filename) {
-
-    double dP, flux;
+bool pmModelWritePSFs (psArray *sources, psMetadata *config, char *filename, pmPSF *psf) {
+
+    double dP, dmag;
     int i, j;
     FILE *f;
-    psVector *params;
-    psVector *dparams;
+    psF32 *PAR, *dPAR;
     pmModel  *model;
+    bool status;
 
     f = fopen (filename, "w");
@@ -415,9 +414,9 @@
     }
 
-    // write sources with models first 
+    float RADIUS = psMetadataLookupF32 (&status, config, "PSF_FIT_RADIUS");
+
+   // write sources with models first 
     for (i = 0; i < sources->n; i++) {
 	pmSource *source = (pmSource *) sources->data[i];
-	model = (pmModel  *) source->modelPSF;
-	if (model == NULL) continue;
 
 	// valid source types for this function
@@ -428,28 +427,26 @@
 
     valid:
-	params = model->params;
-	dparams = model->dparams;
+	model = pmSourceMagnitudes (source, psf, RADIUS);
+	if (model == NULL) continue;
+
+	PAR  = model->params->data.F32;
+	dPAR = model->dparams->data.F32;
 	
 	dP = 0;
-	dP += PS_SQR(dparams[0].data.F32[2]);
-	dP += PS_SQR(dparams[0].data.F32[3]);
+	dP += PS_SQR(dPAR[2]);
+	dP += PS_SQR(dPAR[3]);
 	dP = sqrt (dP);
 	
-	pmModelFlux modelFluxFunc = pmModelFlux_GetFunction (model->type);
-	flux = modelFluxFunc (params);
-
-	fprintf (f, "%7.1f %7.1f  %5.1f %7.3f  %7.4f %7.4f  ", 
-		 params[0].data.F32[2], 
-		 params[0].data.F32[3], 
-		 params[0].data.F32[0], 
-		 -2.5*log10(flux), 
-		 (dparams[0].data.F32[1]/params[0].data.F32[1]),
-		 dP);
+	dmag = dPAR[1] / PAR[1];
+
+	fprintf (f, "%7.1f %7.1f  %5.1f %7.4f  %7.4f %7.4f  ", 
+		 PAR[2], PAR[3], PAR[0], source->fitMag, dmag, dP);
+
 	for (j = 0; j < model->params->n - 4; j++) {
-	    fprintf (f, "%9.6f ", params[0].data.F32[j+4]);
+	    fprintf (f, "%9.6f ", PAR[j+4]);
 	}
 	fprintf (f, " : ");
 	for (j = 0; j < model->params->n - 4; j++) {
-	    fprintf (f, "%9.6f ", dparams[0].data.F32[j+4]);
+	    fprintf (f, "%9.6f ", dPAR[j+4]);
 	}
 	fprintf (f, ": %2d %7.3f %7.3f %7.2f %4d %2d\n", 
