IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Apr 21, 2006, 11:33:00 AM (20 years ago)
Author:
magnier
Message:

faster calculation of radius, simpsons rule for flux integration, rational range for Sx,Sy guess

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psModules/src/objects/models/pmModel_PGAUSS.c

    r6872 r6947  
    7676}
    7777
     78// make an initial guess for parameters
     79bool pmModelGuess_PGAUSS (pmModel *model, pmSource *source)
     80{
     81
     82    pmMoments *moments = source->moments;
     83    psF32     *params  = model->params->data.F32;
     84
     85    params[0] = moments->Sky;
     86    params[1] = moments->Peak - moments->Sky;
     87    params[2] = moments->x;
     88    params[3] = moments->y;
     89    params[4] = (moments->Sx < (1.2 / 2.0)) ? 2.0 : (1.2 / moments->Sx);
     90    params[5] = (moments->Sy < (1.2 / 2.0)) ? 2.0 : (1.2 / moments->Sy);
     91    params[6] = 0.0;
     92
     93    return(true);
     94}
     95
    7896psF64 pmModelFlux_PGAUSS(const psVector *params)
    7997{
    80     float f, norm, z;
     98    float norm, z;
    8199
    82100    psF32 *PAR = params->data.F32;
     
    90108    // the area needs to be multiplied by the integral of f(z)
    91109    norm = 0.0;
    92     for (z = 0.005; z < 50; z += 0.01) {
    93         f = 1.0 / (1 + z + z*z/2 + z*z*z/6);
    94         norm += f;
     110
     111    # define DZ 0.25
     112
     113    float f0 = 1.0;
     114    float f1, f2;
     115    for (z = DZ; z < 50; z += DZ) {
     116        f1 = 1.0 / (1 + PAR[7]*z + pow(z, 2.25));
     117        z += DZ;
     118        f2 = 1.0 / (1 + PAR[7]*z + pow(z, 2.25));
     119        norm += f0 + 4*f1 + f2;
     120        f0 = f2;
    95121    }
    96     norm *= 0.01;
     122    norm *= DZ / 3.0;
    97123
    98     psF64 Flux = params->data.F32[1] * Area * norm;
     124    psF64 Flux = PAR[1] * Area * norm;
    99125
    100126    return(Flux);
     
    118144    }
    119145    return (radius);
    120 }
    121 
    122 bool pmModelGuess_PGAUSS (pmModel *model, pmSource *source)
    123 {
    124 
    125     pmMoments *moments = source->moments;
    126     psF32     *params  = model->params->data.F32;
    127 
    128     params[0] = moments->Sky;
    129     params[1] = moments->Peak - moments->Sky;
    130     params[2] = moments->x;
    131     params[3] = moments->y;
    132     params[4] = 1.2 / moments->Sx;
    133     params[5] = 1.2 / moments->Sy;
    134     params[6] = 0.0;
    135 
    136     return(true);
    137146}
    138147
Note: See TracChangeset for help on using the changeset viewer.