Index: /trunk/psModules/src/objects/pmSourceIO_SMPDATA.c
===================================================================
--- /trunk/psModules/src/objects/pmSourceIO_SMPDATA.c	(revision 12708)
+++ /trunk/psModules/src/objects/pmSourceIO_SMPDATA.c	(revision 12709)
@@ -3,6 +3,6 @@
  *  @author EAM, IfA
  *
- *  @version $Revision: 1.3 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2007-03-30 21:12:56 $
+ *  @version $Revision: 1.4 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2007-04-01 02:33:59 $
  *
  *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -51,4 +51,5 @@
     psEllipseShape shape;
     psEllipseAxes axes;
+    psF32 xPos, yPos;
 
     // find config information for output header
@@ -60,21 +61,34 @@
         pmSource *source = (pmSource *) sources->data[i];
         pmModel *model = pmSourceSelectModel (source);
-        if (model == NULL)
-            continue;
-
-        PAR = model->params->data.F32;
-        dPAR = model->dparams->data.F32;
-
-        type = pmSourceDophotType (source);
-        lsky = (source->sky < 1.0) ? 0.0 : log10(source->sky);
-
-        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];
+
+	    type = pmSourceDophotType (source);
+	    lsky = (source->sky < 1.0) ? 0.0 : log10(source->sky);
+
+	    shape.sx  = PAR[PM_PAR_SXX];
+	    shape.sy  = PAR[PM_PAR_SYY];
+	    shape.sxy = PAR[PM_PAR_SXY];
+	    if ((shape.sx == 0) || (shape.sy == 0)) {
+		axes.major = 0.0;
+		axes.minor = 0.0;
+		axes.theta = 0.0;
+	    } else {
+		axes = psEllipseShapeToAxes (shape, 20.0);
+	    }
+	} else {
+	    xPos = source->peak->xf;
+	    yPos = source->peak->yf;
+	    axes.major = 0.0;
+	    axes.minor = 0.0;
+	    axes.theta = 0.0;
+	}
 
         row = psMetadataAlloc ();
-        psMetadataAdd (row, PS_LIST_TAIL, "X_PIX",   PS_DATA_F32, "", PAR[PM_PAR_XPOS]);
-        psMetadataAdd (row, PS_LIST_TAIL, "Y_PIX",   PS_DATA_F32, "", PAR[PM_PAR_YPOS]);
+        psMetadataAdd (row, PS_LIST_TAIL, "X_PIX",   PS_DATA_F32, "", xPos);
+        psMetadataAdd (row, PS_LIST_TAIL, "Y_PIX",   PS_DATA_F32, "", yPos);
         psMetadataAdd (row, PS_LIST_TAIL, "MAG_RAW", PS_DATA_F32, "", PS_MIN (99.0, source->psfMag + ZERO_POINT));
         psMetadataAdd (row, PS_LIST_TAIL, "MAG_ERR", PS_DATA_F32, "", PS_MIN (999, 1000*source->errMag));
@@ -159,9 +173,17 @@
         axes.theta       = psMetadataLookupF32 (&status, row, "THETA");
 
-        shape = psEllipseAxesToShape (axes);
-
-        PAR[PM_PAR_SXX] = shape.sx;
-        PAR[PM_PAR_SYY] = shape.sy;
-        PAR[PM_PAR_SXY] = shape.sxy;
+	bool skip = false;
+	skip |= (axes.major <= 0);
+	skip |= (axes.minor <= 0);
+	if (!skip) {
+	    shape = psEllipseAxesToShape (axes);
+	    PAR[PM_PAR_SXX] = shape.sx;
+	    PAR[PM_PAR_SYY] = shape.sy;
+	    PAR[PM_PAR_SXY] = shape.sxy;
+	} else {
+	    PAR[PM_PAR_SXX] = 0.0;
+	    PAR[PM_PAR_SYY] = 0.0;
+	    PAR[PM_PAR_SXY] = 0.0;
+	}
 
         source->psfMag = psMetadataLookupF32 (&status, row, "MAG_RAW") - ZERO_POINT;
@@ -170,4 +192,8 @@
         source->apMag  = psMetadataLookupF32 (&status, row, "MAG_AP")  - ZERO_POINT;
 
+	psF64 Area = 2.0 * M_PI * axes.major * axes.minor;
+	psF64 peakFlux = source->psfMag / Area;
+
+	source->peak = pmPeakAlloc(PAR[PM_PAR_XPOS], PAR[PM_PAR_YPOS], peakFlux, PM_PEAK_LONE);
         sources->data[i] = source;
     }
