Index: /trunk/psModules/src/objects/pmSourceIO_PS1_DEV_0.c
===================================================================
--- /trunk/psModules/src/objects/pmSourceIO_PS1_DEV_0.c	(revision 12627)
+++ /trunk/psModules/src/objects/pmSourceIO_PS1_DEV_0.c	(revision 12628)
@@ -3,6 +3,6 @@
  *  @author EAM, IfA
  *
- *  @version $Revision: 1.3 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2007-03-18 22:03:21 $
+ *  @version $Revision: 1.4 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2007-03-28 19:17:14 $
  *
  *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -49,20 +49,35 @@
     psEllipseShape shape;
     psEllipseAxes axes;
+    psF32 xPos, yPos;
+    psF32 xErr, yErr;
 
     table = psArrayAllocEmpty (sources->n);
 
+    // we write out all sources, regardless of quality.  the source flags tell us the state
     for (i = 0; i < sources->n; i++) {
         pmSource *source = (pmSource *) sources->data[i];
         pmModel *model = pmSourceSelectModel (source);
-        if (model == NULL)
-            continue;
-
-        PAR = model->params->data.F32;
-        dPAR = model->dparams->data.F32;
-
-        shape.sx  = PAR[PM_PAR_SXX];
-        shape.sy  = PAR[PM_PAR_SYY];
-        shape.sxy = PAR[PM_PAR_SXY];
-        axes = psEllipseShapeToAxes (shape, 20.0);
+
+        if (model != NULL) {
+	    PAR = model->params->data.F32;
+	    dPAR = model->dparams->data.F32;
+	    xPos = PAR[PM_PAR_XPOS];
+	    yPos = PAR[PM_PAR_YPOS];
+	    xErr = dPAR[PM_PAR_XPOS];
+	    yErr = dPAR[PM_PAR_YPOS];
+
+	    shape.sx  = PAR[PM_PAR_SXX];
+	    shape.sy  = PAR[PM_PAR_SYY];
+	    shape.sxy = PAR[PM_PAR_SXY];
+	    axes = psEllipseShapeToAxes (shape, 20.0);
+	} else {
+	    xPos = source->peak->xf;
+	    yPos = source->peak->yf;
+	    xErr = 0.0; // XXX a better choice, please
+	    yErr = 0.0; // XXX a better choice, please
+	    axes.major = 0.0;
+	    axes.minor = 0.0;
+	    axes.theta = 0.0;
+	}
 
 	float peakMag = (source->peak->flux > 0) ? -2.5*log(source->peak->flux) : NAN;
@@ -71,9 +86,10 @@
 
         row = psMetadataAlloc ();
+	// XXX we are not writing out the mode (flags) or the type (psf, ext, etc)
         psMetadataAdd (row, PS_LIST_TAIL, "IPP_IDET",  	      PS_DATA_U32, "IPP detection identifier index",             ID);
-        psMetadataAdd (row, PS_LIST_TAIL, "X_PSF",   	      PS_DATA_F32, "PSF x coordinate",                           PAR[PM_PAR_XPOS]);
-        psMetadataAdd (row, PS_LIST_TAIL, "Y_PSF",   	      PS_DATA_F32, "PSF y coordinate",				 PAR[PM_PAR_YPOS]);
-        psMetadataAdd (row, PS_LIST_TAIL, "X_PSF_SIG",        PS_DATA_F32, "Sigma in PSF x coordinate",			 dPAR[PM_PAR_XPOS]);
-        psMetadataAdd (row, PS_LIST_TAIL, "Y_PSF_SIG",        PS_DATA_F32, "Sigma in PSF y coordinate",			 dPAR[PM_PAR_YPOS]);
+        psMetadataAdd (row, PS_LIST_TAIL, "X_PSF",   	      PS_DATA_F32, "PSF x coordinate",                           xPos);
+        psMetadataAdd (row, PS_LIST_TAIL, "Y_PSF",   	      PS_DATA_F32, "PSF y coordinate",				 yPos);
+        psMetadataAdd (row, PS_LIST_TAIL, "X_PSF_SIG",        PS_DATA_F32, "Sigma in PSF x coordinate",			 xErr);
+        psMetadataAdd (row, PS_LIST_TAIL, "Y_PSF_SIG",        PS_DATA_F32, "Sigma in PSF y coordinate",			 yErr);
         psMetadataAdd (row, PS_LIST_TAIL, "PSF_INST_MAG",     PS_DATA_F32, "PSF fit instrumental magnitude",		 PS_MIN (99.0, source->psfMag));
         psMetadataAdd (row, PS_LIST_TAIL, "PSF_INST_MAG_SIG", PS_DATA_F32, "Sigma of PSF instrumental magnitude",	 PS_MIN (99.0, source->errMag));
