IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Nov 1, 2004, 1:57:08 PM (22 years ago)
Author:
gusciora
Message:

Fixed the robust stats routines for stdev/mean. Fixed minimization routines
for fitting gaussians. CVS:


Enter Log. Lines beginning with `CVS:' are removed automatically CVS: CVS:
Committing in . CVS: CVS: Modified Files: CVS:
src/dataManip/psMinimize.c src/dataManip/psMinimize.h CVS:
src/dataManip/psStats.c src/dataManip/makedir/psMinimize.d CVS:
src/dataManip/makedir/psStats.d CVS: test/dataManip/tst_psMinimize07.c


File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psLib/test/dataManip/tst_psMinimize07.c

    r2248 r2250  
    1010#define N 24
    1111#define NUM_PARAMS 2
    12 #define MEAN 8.5
    13 #define STDEV 1.5
     12#define MEAN 14.5
     13#define STDEV 1.2
    1414
    1515float expectedParm[NUM_PARAMS];
    1616psS32 testStatus = true;
    1717
    18 psVector *genGaussianVector()
     18// This routine generates a vector of length "n" with the specified mean and
     19// stdev.
     20psVector *genGaussianVector(int n, float mean, float stdev)
    1921{
    20     psVector *y = psVectorAlloc(N, PS_TYPE_F32);
     22    psVector *y = psVectorAlloc(n, PS_TYPE_F32);
    2123
    22     for (psS32 i=0;i<N;i++) {
    23         y->data.F32[i] = psGaussian((float) i, MEAN, STDEV, false);
     24    for (psS32 i=0;i<n;i++) {
     25        y->data.F32[i] = psGaussian((float) i, mean, stdev, false);
    2426    }
    2527    return(y);
    2628}
    2729
    28 psVector *myFunc(psVector *params,
    29                  psArray *coords)
    30 {
    31     PS_PTR_CHECK_NULL(coords, NULL);
    32     PS_PTR_CHECK_NULL(params, NULL);
    33 
    34     float x;
    35     int i;
    36     float mean = params->data.F32[0];
    37     float stdev = params->data.F32[1];
    38     psVector *out = psVectorAlloc(coords->n, PS_TYPE_F32);
    39 
    40     for (i=0;i<coords->n;i++) {
    41         x = ((psVector *) (coords->data[i]))->data.F32[0];
    42         out->data.F32[i] = psGaussian(x, mean, stdev, false);
    43     }
    44 
    45     return(out);
    46 }
    47 
     30// This routine tries to fit a Gaussian to a set of data points via the
     31// psMinimizeLMChi2() and psMinimizeLMChi2Gauss1D() functions.
    4832psS32 t00()
    4933{
     
    5640    psMinimization *min;
    5741
    58     psTraceSetLevel(".psLib.dataManip.psMinimize", 6);
    59     psTraceSetLevel(".psLib.dataManip.p_psDetermineBracket", 0);
     42    psTraceSetLevel(".psLib.dataManip.psMinimize", 0);
    6043    /**************************************************************************
    6144     *************************************************************************/
     
    6346    myCovar = psImageAlloc(NUM_PARAMS, NUM_PARAMS, PS_TYPE_F32);
    6447    myParams = psVectorAlloc(NUM_PARAMS, PS_TYPE_F32);
    65     myParams->data.F32[0] = (float) (N/2);
    66     myParams->data.F32[1] = 0.5;
     48    myParams->data.F32[0] = MEAN * 0.7;
     49    myParams->data.F32[1] = STDEV * 0.7;
    6750    myCoords = psArrayAlloc(N);
    68     psVector *y = genGaussianVector();
     51    psVector *y = genGaussianVector(N, MEAN, STDEV);
    6952
    7053    for (i=0;i<N;i++) {
    7154        myCoords->data[i] = (psPtr *) psVectorAlloc(2, PS_TYPE_F32);
    7255        ((psVector *) (myCoords->data[i]))->data.F32[0] = (float) i;
     56        printf("Initial data %d: (%f, %f)\n", i, ((psVector *) (myCoords->data[i]))->data.F32[0], y->data.F32[i]);
    7357    }
    7458
     
    10589}
    10690
     91// This routine tries to fit a Gaussian to a set of data points via the
     92// psMinimizeChi2Powell() function.
    10793psS32 t01()
    10894{
     
    115101    psMinimization *min;
    116102
    117     psTraceSetLevel(".psLib.dataManip.psMinimizePowell", 10);
    118     psTraceSetLevel(".psLib.dataManip.myPowellChi2Func", 10);
     103    psTraceSetLevel(".psLib.dataManip.psMinimize", 0);
     104    psTraceSetLevel(".psLib.dataManip.psMinimizeLMChi2Gauss1D", 0);
     105
     106    psTraceSetLevel(".psLib.dataManip.psMinimizePowell", 0);
     107    psTraceSetLevel(".psLib.dataManip.myPowellChi2Func", 0);
     108    psTraceSetLevel(".psLib.dataManip.p_psLineMin", 0);
     109    psTraceSetLevel(".psLib.dataManip.p_psDetermineBracket", 0);
    119110    psTraceSetLevel(".psLib.dataManip.psFunctions.psGaussian", 0);
    120111    psTraceSetLevel(".psLib.dataManip.psFunctions", 0);
    121     psTraceSetLevel(".", 10);
    122     psTracePrintLevels();
     112    psTraceSetLevel(".", 0);
     113    //    psTracePrintLevels();
    123114    /**************************************************************************
    124115     *************************************************************************/
     
    126117    myCovar = psImageAlloc(NUM_PARAMS, NUM_PARAMS, PS_TYPE_F32);
    127118    myParams = psVectorAlloc(NUM_PARAMS, PS_TYPE_F32);
    128     myParams->data.F32[0] = (float) (N/2);
    129     myParams->data.F32[0] = 2.0 * MEAN;
    130     myParams->data.F32[1] = 0.5;
    131     myParams->data.F32[1] = 1.5 * STDEV;
     119    myParams->data.F32[0] = MEAN * 0.7;
     120    myParams->data.F32[1] = STDEV * 0.7;
    132121    myCoords = psArrayAlloc(N);
    133     psVector *y = genGaussianVector();
     122    psVector *y = genGaussianVector(N, MEAN, STDEV);
    134123
    135124    for (i=0;i<N;i++) {
    136125        myCoords->data[i] = (psPtr *) psVectorAlloc(2, PS_TYPE_F32);
    137126        ((psVector *) (myCoords->data[i]))->data.F32[0] = (float) i;
     127        printf("Initial data %d: (%f, %f)\n", i, ((psVector *) (myCoords->data[i]))->data.F32[0], y->data.F32[i]);
    138128    }
    139129
     130    //    psMinimizeChi2Powell(min, myParams, NULL, myCoords, y, NULL,
     131    //                         (psMinimizeChi2PowellFunc) myFunc);
    140132    psMinimizeChi2Powell(min, myParams, NULL, myCoords, y, NULL,
    141                          (psMinimizeChi2PowellFunc) myFunc);
     133                         (psMinimizeChi2PowellFunc) psMinimizePowellChi2Gauss1D);
    142134
    143135    printf("\nThe chi-squared is %f\n", min->value);
Note: See TracChangeset for help on using the changeset viewer.