Changeset 10079
- Timestamp:
- Nov 17, 2006, 11:53:21 PM (19 years ago)
- Location:
- trunk/psModules/test/objects
- Files:
-
- 2 edited
-
Makefile.am (modified) (1 diff)
-
tap_pmSourceFitModel.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psModules/test/objects/Makefile.am
r9877 r10079 17 17 check_PROGRAMS = \ 18 18 tap_pmSourcePhotometry \ 19 tap_pmGrowthCurve 19 tap_pmGrowthCurve \ 20 tap_pmSourceFitModel 20 21 21 22 test: check -
trunk/psModules/test/objects/tap_pmSourceFitModel.c
r10075 r10079 7 7 #include "pstap.h" 8 8 9 bool fitModelFlux (psRandom *seed, float flux, float radius); 10 9 11 int main (void) 10 12 { 11 12 13 pmModelGroupInit (); 14 // psTraceSetLevel ("psLib.math.psMinimizeLMChi2", 6); 13 15 14 16 plan_tests(240); 15 17 16 diag("measure the photometry bias as a function of magnitude for a sky offset"); 18 // build a gauss-deviate vector (mean = 0.0, sigma = 1.0) 19 psRandom *seed = psRandomAlloc (PS_RANDOM_TAUS, 0); 17 20 21 # if (0) 22 23 fitModelFlux (seed, 10000.0); 24 fitModelFlux (seed, 3000.0); 25 fitModelFlux (seed, 1000.0); 26 fitModelFlux (seed, 300.0); 27 fitModelFlux (seed, 100.0); 28 fitModelFlux (seed, 30.0); 29 # endif 30 31 fitModelFlux (seed, 30.0, 4.0); 32 fitModelFlux (seed, 30.0, 5.0); 33 fitModelFlux (seed, 30.0, 7.0); 34 fitModelFlux (seed, 30.0, 10.0); 35 fitModelFlux (seed, 30.0, 15.0); 36 fitModelFlux (seed, 30.0, 20.0); 37 fitModelFlux (seed, 30.0, 25.0); 38 fitModelFlux (seed, 30.0, 35.0); 39 40 return exit_status(); 18 41 } 42 43 bool fitModelFlux (psRandom *seed, float flux, float radius) 44 { 45 46 psMemId id = psMemGetId(); 47 diag("test model fit"); 48 49 psVector *rnd = psVectorAlloc (1000, PS_TYPE_F32); 50 for (int i = 0; i < rnd->n; i++) { 51 rnd->data.F32[i] = psRandomGaussian (seed); 52 } 53 54 // construct a model 55 pmSource *source = pmSourceAlloc (); 56 source->moments = pmMomentsAlloc (); 57 58 pmModelGroupInit (); 59 pmModelType type = pmModelSetType ("PS_MODEL_GAUSS"); 60 source->modelEXT = pmModelAlloc (type); 61 62 source->modelEXT->params->data.F32[0] = 0; 63 source->modelEXT->params->data.F32[1] = flux; 64 source->modelEXT->params->data.F32[2] = 50; 65 source->modelEXT->params->data.F32[3] = 50; 66 source->modelEXT->params->data.F32[4] = 2.0*sqrt(2.0); 67 source->modelEXT->params->data.F32[5] = 2.0*sqrt(2.0); 68 source->modelEXT->params->data.F32[6] = 0; 69 70 source->pixels = psImageAlloc (100, 100, PS_TYPE_F32); 71 source->weight = psImageAlloc (100, 100, PS_TYPE_F32); 72 source->mask = psImageAlloc (100, 100, PS_TYPE_U8); 73 psImageInit (source->pixels, 0.0); 74 psImageInit (source->weight, 0.0); 75 psImageInit (source->mask, 0); 76 77 // create an image with the model, and add noise: gain is 1, subtracted sky is 100, readnoise is 5 78 pmModelAdd (source->pixels, source->mask, source->modelEXT, false, false); 79 int npix = 0; 80 for (int j = 0; j < source->pixels->numRows; j++) { 81 for (int i = 0; i < source->pixels->numCols; i++) { 82 float flux = source->pixels->data.F32[j][i]; 83 float var = flux + 100 + PS_SQR(5); 84 source->pixels->data.F32[j][i] += rnd->data.F32[npix]*sqrt(var); 85 source->weight->data.F32[j][i] = var; 86 npix ++; 87 if (npix == rnd->n) 88 npix = 0; 89 } 90 } 91 92 psFits *fits = psFitsOpen ("test.fits", "w"); 93 psFitsWriteImage (fits, NULL, source->pixels, 0, NULL); 94 psFitsClose (fits); 95 96 // save the original model, modify params 97 pmModel *guess = pmModelCopy (source->modelEXT); 98 guess->params->data.F32[1] *= 0.9; 99 guess->params->data.F32[2] += 1.0; 100 guess->params->data.F32[3] -= 1.0; 101 guess->params->data.F32[4] *= 0.9; 102 guess->params->data.F32[5] *= 0.9; 103 104 pmSourceFitModelInit (15, 0.1, 100, true); 105 106 psImageKeepCircle (source->mask, 50, 50, radius, "OR", PM_MASK_MARK); 107 pmSourceFitModel (source, guess, PM_SOURCE_FIT_EXT); 108 psImageKeepCircle (source->mask, 50, 50, radius, "AND", PS_NOT_U8(PM_MASK_MARK)); 109 110 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]); 111 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]); 112 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]); 113 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]); 114 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]); 115 116 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 117 return true; 118 }
Note:
See TracChangeset
for help on using the changeset viewer.
