IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 10095


Ignore:
Timestamp:
Nov 19, 2006, 7:24:46 PM (20 years ago)
Author:
magnier
Message:

added tap_pmSourceFitModel.c

Location:
trunk/psModules/test/objects
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/psModules/test/objects

    • Property svn:ignore
      •  

        old new  
        44Makefile.in
        55temp
        6 tst_pmObjects01
        7 tap_pmGrowthCurve
        8 tap_pmSourcePhotometry
         6tap_*
  • trunk/psModules/test/objects/.cvsignore

    r9922 r10095  
    44Makefile.in
    55temp
    6 tst_pmObjects01
    7 tap_pmGrowthCurve
    8 tap_pmSourcePhotometry
     6tap_*
  • trunk/psModules/test/objects/tap_pmSourceFitModel.c

    r10079 r10095  
    77#include "pstap.h"
    88
     9bool fitModels (psRandom *seed, float flux, float radius);
    910bool fitModelFlux (psRandom *seed, float flux, float radius);
    1011
     
    1213{
    1314    pmModelGroupInit ();
     15    pmSourceFitModelInit (15, 0.01, 1.0, true);
     16
    1417    // psTraceSetLevel ("psLib.math.psMinimizeLMChi2", 6);
    1518
     
    2730    fitModelFlux (seed, 100.0);
    2831    fitModelFlux (seed, 30.0);
    29     # endif
    30 
    3132    fitModelFlux (seed, 30.0, 4.0);
    3233    fitModelFlux (seed, 30.0, 5.0);
     
    3738    fitModelFlux (seed, 30.0, 25.0);
    3839    fitModelFlux (seed, 30.0, 35.0);
     40    # endif
     41
     42    fitModels (seed, 100.0,  7.0);
     43    fitModels (seed,  80.0,  7.0);
     44    fitModels (seed,  60.0,  7.0);
     45    fitModels (seed,  40.0,  7.0);
     46    fitModels (seed,  20.0,  7.0);
     47
     48    fitModels (seed,  30.0,  5.0);
     49    fitModels (seed,  30.0, 10.0);
     50    fitModels (seed,  30.0, 15.0);
    3951
    4052    return exit_status();
    4153}
    4254
    43 bool fitModelFlux (psRandom *seed, float flux, float radius)
     55static psVector *par1 = NULL;
     56static psVector *par2 = NULL;
     57static psVector *par3 = NULL;
     58static psVector *par4 = NULL;
     59static psVector *par5 = NULL;
     60
     61bool fitModels (psRandom *seed, float flux, float radius)
    4462{
    4563
    4664    psMemId id = psMemGetId();
     65
    4766    diag("test model fit");
     67
     68    par1 = psVectorAllocEmpty (100, PS_TYPE_F32);
     69    par2 = psVectorAllocEmpty (100, PS_TYPE_F32);
     70    par3 = psVectorAllocEmpty (100, PS_TYPE_F32);
     71    par4 = psVectorAllocEmpty (100, PS_TYPE_F32);
     72    par5 = psVectorAllocEmpty (100, PS_TYPE_F32);
     73
     74    for (int i = 0; i < 100; i++) {
     75        fitModelFlux (seed, flux, radius);
     76    }
     77
     78    psStats *stats = psStatsAlloc (PS_STAT_SAMPLE_MEAN | PS_STAT_SAMPLE_STDEV);
     79    psVectorStats (stats, par1, NULL, NULL, 0);
     80    fprintf (stderr, "Io: %f +/- %f\n", stats->sampleMean, stats->sampleStdev);
     81    // ok_float_tol (stats->sampleStdev, 0.0, 0.0, "Io ref/fit stdev: %f", stats->sampleStdev);
     82    psVectorStats (stats, par2, NULL, NULL, 0);
     83    fprintf (stderr, "Xo: %f +/- %f\n", stats->sampleMean, stats->sampleStdev);
     84    // ok_float_tol (stats->sampleStdev, 0.0, 0.0, "Xo ref-fit stdev: %f", stats->sampleStdev);
     85    psVectorStats (stats, par3, NULL, NULL, 0);
     86    fprintf (stderr, "Yo: %f +/- %f\n", stats->sampleMean, stats->sampleStdev);
     87    // ok_float_tol (stats->sampleStdev, 0.0, 0.0, "Yo ref-fit stdev: %f", stats->sampleStdev);
     88    psVectorStats (stats, par4, NULL, NULL, 0);
     89    fprintf (stderr, "Sx: %f +/- %f\n", stats->sampleMean, stats->sampleStdev);
     90    // ok_float_tol (stats->sampleStdev, 0.0, 0.0, "Sx ref/fit stdev: %f", stats->sampleStdev);
     91    psVectorStats (stats, par5, NULL, NULL, 0);
     92    fprintf (stderr, "Sy: %f +/- %f\n", stats->sampleMean, stats->sampleStdev);
     93    // ok_float_tol (stats->sampleStdev, 0.0, 0.0, "Sy ref/fit stdev: %f", stats->sampleStdev);
     94
     95    psFree (par1);
     96    psFree (par2);
     97    psFree (par3);
     98    psFree (par4);
     99    psFree (par5);
     100
     101    ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
     102    return true;
     103}
     104
     105bool fitModelFlux (psRandom *seed, float flux, float radius)
     106{
    48107
    49108    psVector *rnd = psVectorAlloc (1000, PS_TYPE_F32);
     
    56115    source->moments = pmMomentsAlloc ();
    57116
    58     pmModelGroupInit ();
    59117    pmModelType type = pmModelSetType ("PS_MODEL_GAUSS");
    60118    source->modelEXT = pmModelAlloc (type);
     
    90148    }
    91149
    92     psFits *fits = psFitsOpen ("test.fits", "w");
    93     psFitsWriteImage (fits, NULL, source->pixels, 0, NULL);
    94     psFitsClose (fits);
     150    // psFits *fits = psFitsOpen ("test.fits", "w");
     151    // psFitsWriteImage (fits, NULL, source->pixels, 0, NULL);
     152    // psFitsClose (fits);
    95153
    96154    // save the original model, modify params
     
    102160    guess->params->data.F32[5] *= 0.9;
    103161
    104     pmSourceFitModelInit (15, 0.1, 100, true);
    105 
    106162    psImageKeepCircle (source->mask, 50, 50, radius, "OR", PM_MASK_MARK);
    107163    pmSourceFitModel (source, guess, PM_SOURCE_FIT_EXT);
    108164    psImageKeepCircle (source->mask, 50, 50, radius, "AND", PS_NOT_U8(PM_MASK_MARK));
    109165
    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]);
     166    par1->data.F32[par1->n] = (source->modelEXT->params->data.F32[1]/guess->params->data.F32[1]);
     167    par2->data.F32[par2->n] = (source->modelEXT->params->data.F32[2] - guess->params->data.F32[2]);
     168    par3->data.F32[par3->n] = (source->modelEXT->params->data.F32[3] - guess->params->data.F32[3]);
     169    par4->data.F32[par4->n] = (source->modelEXT->params->data.F32[4]/guess->params->data.F32[4]);
     170    par5->data.F32[par5->n] = (source->modelEXT->params->data.F32[5]/guess->params->data.F32[5]);
    115171
    116     ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
     172    psVectorExtend (par1, 100, 1);
     173    psVectorExtend (par2, 100, 1);
     174    psVectorExtend (par3, 100, 1);
     175    psVectorExtend (par4, 100, 1);
     176    psVectorExtend (par5, 100, 1);
     177
    117178    return true;
    118179}
Note: See TracChangeset for help on using the changeset viewer.