Index: trunk/psModules/test/objects/.cvsignore
===================================================================
--- trunk/psModules/test/objects/.cvsignore	(revision 10079)
+++ trunk/psModules/test/objects/.cvsignore	(revision 10095)
@@ -4,5 +4,3 @@
 Makefile.in
 temp
-tst_pmObjects01
-tap_pmGrowthCurve
-tap_pmSourcePhotometry
+tap_*
Index: trunk/psModules/test/objects/tap_pmSourceFitModel.c
===================================================================
--- trunk/psModules/test/objects/tap_pmSourceFitModel.c	(revision 10079)
+++ trunk/psModules/test/objects/tap_pmSourceFitModel.c	(revision 10095)
@@ -7,4 +7,5 @@
 #include "pstap.h"
 
+bool fitModels (psRandom *seed, float flux, float radius);
 bool fitModelFlux (psRandom *seed, float flux, float radius);
 
@@ -12,4 +13,6 @@
 {
     pmModelGroupInit ();
+    pmSourceFitModelInit (15, 0.01, 1.0, true);
+
     // psTraceSetLevel ("psLib.math.psMinimizeLMChi2", 6);
 
@@ -27,6 +30,4 @@
     fitModelFlux (seed, 100.0);
     fitModelFlux (seed, 30.0);
-    # endif
-
     fitModelFlux (seed, 30.0, 4.0);
     fitModelFlux (seed, 30.0, 5.0);
@@ -37,13 +38,71 @@
     fitModelFlux (seed, 30.0, 25.0);
     fitModelFlux (seed, 30.0, 35.0);
+    # endif
+
+    fitModels (seed, 100.0,  7.0);
+    fitModels (seed,  80.0,  7.0);
+    fitModels (seed,  60.0,  7.0);
+    fitModels (seed,  40.0,  7.0);
+    fitModels (seed,  20.0,  7.0);
+
+    fitModels (seed,  30.0,  5.0);
+    fitModels (seed,  30.0, 10.0);
+    fitModels (seed,  30.0, 15.0);
 
     return exit_status();
 }
 
-bool fitModelFlux (psRandom *seed, float flux, float radius)
+static psVector *par1 = NULL;
+static psVector *par2 = NULL;
+static psVector *par3 = NULL;
+static psVector *par4 = NULL;
+static psVector *par5 = NULL;
+
+bool fitModels (psRandom *seed, float flux, float radius)
 {
 
     psMemId id = psMemGetId();
+
     diag("test model fit");
+
+    par1 = psVectorAllocEmpty (100, PS_TYPE_F32);
+    par2 = psVectorAllocEmpty (100, PS_TYPE_F32);
+    par3 = psVectorAllocEmpty (100, PS_TYPE_F32);
+    par4 = psVectorAllocEmpty (100, PS_TYPE_F32);
+    par5 = psVectorAllocEmpty (100, PS_TYPE_F32);
+
+    for (int i = 0; i < 100; i++) {
+        fitModelFlux (seed, flux, radius);
+    }
+
+    psStats *stats = psStatsAlloc (PS_STAT_SAMPLE_MEAN | PS_STAT_SAMPLE_STDEV);
+    psVectorStats (stats, par1, NULL, NULL, 0);
+    fprintf (stderr, "Io: %f +/- %f\n", stats->sampleMean, stats->sampleStdev);
+    // ok_float_tol (stats->sampleStdev, 0.0, 0.0, "Io ref/fit stdev: %f", stats->sampleStdev);
+    psVectorStats (stats, par2, NULL, NULL, 0);
+    fprintf (stderr, "Xo: %f +/- %f\n", stats->sampleMean, stats->sampleStdev);
+    // ok_float_tol (stats->sampleStdev, 0.0, 0.0, "Xo ref-fit stdev: %f", stats->sampleStdev);
+    psVectorStats (stats, par3, NULL, NULL, 0);
+    fprintf (stderr, "Yo: %f +/- %f\n", stats->sampleMean, stats->sampleStdev);
+    // ok_float_tol (stats->sampleStdev, 0.0, 0.0, "Yo ref-fit stdev: %f", stats->sampleStdev);
+    psVectorStats (stats, par4, NULL, NULL, 0);
+    fprintf (stderr, "Sx: %f +/- %f\n", stats->sampleMean, stats->sampleStdev);
+    // ok_float_tol (stats->sampleStdev, 0.0, 0.0, "Sx ref/fit stdev: %f", stats->sampleStdev);
+    psVectorStats (stats, par5, NULL, NULL, 0);
+    fprintf (stderr, "Sy: %f +/- %f\n", stats->sampleMean, stats->sampleStdev);
+    // ok_float_tol (stats->sampleStdev, 0.0, 0.0, "Sy ref/fit stdev: %f", stats->sampleStdev);
+
+    psFree (par1);
+    psFree (par2);
+    psFree (par3);
+    psFree (par4);
+    psFree (par5);
+
+    ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
+    return true;
+}
+
+bool fitModelFlux (psRandom *seed, float flux, float radius)
+{
 
     psVector *rnd = psVectorAlloc (1000, PS_TYPE_F32);
@@ -56,5 +115,4 @@
     source->moments = pmMomentsAlloc ();
 
-    pmModelGroupInit ();
     pmModelType type = pmModelSetType ("PS_MODEL_GAUSS");
     source->modelEXT = pmModelAlloc (type);
@@ -90,7 +148,7 @@
     }
 
-    psFits *fits = psFitsOpen ("test.fits", "w");
-    psFitsWriteImage (fits, NULL, source->pixels, 0, NULL);
-    psFitsClose (fits);
+    // psFits *fits = psFitsOpen ("test.fits", "w");
+    // psFitsWriteImage (fits, NULL, source->pixels, 0, NULL);
+    // psFitsClose (fits);
 
     // save the original model, modify params
@@ -102,17 +160,20 @@
     guess->params->data.F32[5] *= 0.9;
 
-    pmSourceFitModelInit (15, 0.1, 100, true);
-
     psImageKeepCircle (source->mask, 50, 50, radius, "OR", PM_MASK_MARK);
     pmSourceFitModel (source, guess, PM_SOURCE_FIT_EXT);
     psImageKeepCircle (source->mask, 50, 50, radius, "AND", PS_NOT_U8(PM_MASK_MARK));
 
-    ok_float_tol (guess->params->data.F32[1], source->modelEXT->params->data.F32[1], 100, "Io fitted: %f vs %f", guess->params->data.F32[1], source->modelEXT->params->data.F32[1]);
-    ok_float_tol (guess->params->data.F32[2], source->modelEXT->params->data.F32[2], 0.01, "Xo fitted: %f vs %f", guess->params->data.F32[2], source->modelEXT->params->data.F32[2]);
-    ok_float_tol (guess->params->data.F32[3], source->modelEXT->params->data.F32[3], 0.01, "Yo fitted: %f vs %f", guess->params->data.F32[3], source->modelEXT->params->data.F32[3]);
-    ok_float_tol (guess->params->data.F32[4], source->modelEXT->params->data.F32[4], 0.01, "Sx fitted: %f vs %f", guess->params->data.F32[4], source->modelEXT->params->data.F32[4]);
-    ok_float_tol (guess->params->data.F32[5], source->modelEXT->params->data.F32[5], 0.01, "Sy fitted: %f vs %f", guess->params->data.F32[5], source->modelEXT->params->data.F32[5]);
+    par1->data.F32[par1->n] = (source->modelEXT->params->data.F32[1]/guess->params->data.F32[1]);
+    par2->data.F32[par2->n] = (source->modelEXT->params->data.F32[2] - guess->params->data.F32[2]);
+    par3->data.F32[par3->n] = (source->modelEXT->params->data.F32[3] - guess->params->data.F32[3]);
+    par4->data.F32[par4->n] = (source->modelEXT->params->data.F32[4]/guess->params->data.F32[4]);
+    par5->data.F32[par5->n] = (source->modelEXT->params->data.F32[5]/guess->params->data.F32[5]);
 
-    ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
+    psVectorExtend (par1, 100, 1);
+    psVectorExtend (par2, 100, 1);
+    psVectorExtend (par3, 100, 1);
+    psVectorExtend (par4, 100, 1);
+    psVectorExtend (par5, 100, 1);
+
     return true;
 }
