Index: trunk/psphot/src/psphot-utils.c
===================================================================
--- trunk/psphot/src/psphot-utils.c	(revision 4421)
+++ trunk/psphot/src/psphot-utils.c	(revision 4574)
@@ -96,4 +96,7 @@
 	model = (psModel  *) source->modelPSF;
 	if (model == NULL) continue;
+	if (source->type == PS_SOURCE_GALAXY) continue;
+	if (source->type == PS_SOURCE_DEFECT) continue;
+	if (source->type == PS_SOURCE_SATURATED) continue;
 	params = model->params;
 	dparams = model->dparams;
@@ -107,5 +110,7 @@
 	    fprintf (f, "%9.6f ", dparams[0].data.F32[j+4]);
 	}
-	fprintf (f, ": %2d %7.4f %7.4f %7.2f (%d %d)\n", source[0].type, log10(model[0].chisq), source[0].moments->SN, model[0].radius, model[0].nDOF, model[0].nIter);
+	fprintf (f, ": %2d %7.4f %7.4f %7.2f (%d %d)\n", 
+		 source[0].type, log10(model[0].chisq), source[0].moments->SN, 
+		 model[0].radius, model[0].nDOF, model[0].nIter);
     }
     fclose (f);
@@ -134,4 +139,12 @@
 	model = (psModel  *) source->modelFLT;
 	if (model == NULL) continue;
+	if (source->type == PS_SOURCE_PSFSTAR) continue;
+	if (source->type == PS_SOURCE_SATSTAR) continue;
+	if (source->type == PS_SOURCE_BRIGHTSTAR) continue;
+	if (source->type == PS_SOURCE_FAINTSTAR) continue;
+	if (source->type == PS_SOURCE_OTHER) continue;
+	if (source->type == PS_SOURCE_DEFECT) continue;
+	if (source->type == PS_SOURCE_SATURATED) continue;
+
 	params = model->params;
 	dparams = model->dparams;
@@ -287,2 +300,84 @@
 }
 
+/* this code is in pmObjects.h / psModules:psEllipse */
+# if (0) 
+typedef struct {
+  double major;
+  double minor;
+  double theta;
+} EllipseAxes;
+
+typedef struct {
+  double x2;
+  double y2;
+  double xy;
+} EllipseMoments;
+
+typedef struct {
+  double sx;
+  double sy;
+  double sxy;
+} EllipseShape;
+
+EllipseAxes EllipseMomentsToAxes (EllipseMoments moments) {
+
+  EllipseAxes axes;
+
+  double f = sqrt (0.25*PS_SQR(moments.x2 - moments.y2) + PS_SQR(moments.sy));
+
+  axes.major = sqrt (0.5*(moments.x2 + moments.y2) + f);
+  axes.minor = sqrt (0.5*(moments.x2 + moments.y2) - f)
+  axes.theta = atan2 (2*moments.xy, moments.x2 - moments.y2) / 2;
+  // theta in radians
+
+  return (axes);
+}
+
+EllipseShape EllipseMomentsToShape (EllipseMoments moments) {
+
+  EllipseShape shape;
+
+  double f = sqrt(0.25*PS_SQR(axes.x2 - axes.y2) + PS_SQR(axes.sxy));
+
+  shape.sx = moments.y2 / f;
+  shape.sy = moments.x2 / f;
+  shape.sxy = -2.0*moments.xy / f;
+  // XXX - these are probably wrong
+
+  return (shape);
+}
+
+EllipseMoments EllipseShapeToMoments (EllipseShape shape) {
+
+  EllipseMoments moments;
+
+  return (moments);
+}
+
+EllipseAxes EllipseShapeToAxes (EllipseShape shape) {
+
+  EllipseAxes axes;
+
+
+  return (axes);
+}
+
+EllipseShape EllipseAxesToShape (EllipseAxes axes) {
+
+  EllipseShape shape;
+
+  shape.sx = PS_SQR(cos(axes.theta) / axes.major) + PS_SQR(sin(axes.theta) / axes.minor);
+  shape.sy = PS_SQR(sin(axes.theta) / axes.major) + PS_SQR(cos(axes.theta) / axes.minor);
+  shape.sxy = cos(axes.theta)*sin(axes.theta)*(1.0/PS_SQR(axes.major) - 1.0/PS_SQR(axes.minor));
+
+  return (shape);
+}
+
+EllipseMoments EllipseAxesToMoments (EllipseAxes axes) {
+
+  EllipseMoments moments;
+
+  return (moments);
+}
+
+# endif
