IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Aug 23, 2007, 2:40:16 PM (19 years ago)
Author:
eugene
Message:

* updates from branch eam_branch_20070817

  • changed pmIsFoo to pmFooTest
  • changed pmModelGroup to pmModelClass
  • added offsets to pmSourceOp
  • changed pmModel.params_NEW to pmModel.params
  • use new APIs to define a pmModel from a pmPSF at X,Y (pmModelFromPSFforXY)
  • use pmModel member functions instead of _GetFunction functions
  • added modelParamsFromPSF for STRAIL and TEST1
  • move output psf model from readout->analysis to chip->analysis
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psphot/src/models/pmModel_TEST1.c

    r11702 r14655  
    1616 *****************************************************************************/
    1717
    18 # define PM_MODEL_FUNC       pmModelFunc_TEST1
    19 # define PM_MODEL_FLUX       pmModelFlux_TEST1
    20 # define PM_MODEL_GUESS      pmModelGuess_TEST1
    21 # define PM_MODEL_LIMITS     pmModelLimits_TEST1
    22 # define PM_MODEL_RADIUS     pmModelRadius_TEST1
    23 # define PM_MODEL_FROM_PSF   pmModelFromPSF_TEST1
    24 # define PM_MODEL_FIT_STATUS pmModelFitStatus_TEST1
    25 
    26 // XXX consider changing to form PAR[SXY]*(1/PAR[SXX]^2 + 1/PAR[SYY]^2)*X*Y
    27 // this would provide natural limits on PAR[SXY] of -0.25 : +0.25
     18# define PM_MODEL_FUNC            pmModelFunc_TEST1
     19# define PM_MODEL_FLUX            pmModelFlux_TEST1
     20# define PM_MODEL_GUESS           pmModelGuess_TEST1
     21# define PM_MODEL_LIMITS          pmModelLimits_TEST1
     22# define PM_MODEL_RADIUS          pmModelRadius_TEST1
     23# define PM_MODEL_FROM_PSF        pmModelFromPSF_TEST1
     24# define PM_MODEL_PARAMS_FROM_PSF pmModelParamsFromPSF_TEST1
     25# define PM_MODEL_FIT_STATUS      pmModelFitStatus_TEST1
    2826
    2927// the model is a function of the pixel coordinate (pixcoord[0,1] = x,y)
    3028psF32 PM_MODEL_FUNC(psVector *deriv,
    31                          const psVector *params,
    32                          const psVector *pixcoord)
     29                    const psVector *params,
     30                    const psVector *pixcoord)
    3331{
    3432    psF32 *PAR = params->data.F32;
     
    127125bool PM_MODEL_GUESS (pmModel *model, pmSource *source)
    128126{
    129 
    130127    pmMoments *moments = source->moments;
    131128    psF32     *PAR  = model->params->data.F32;
     
    160157    norm = 0.0;
    161158
    162     # define DZ 0.25
     159# define DZ 0.25
    163160
    164161    float f0 = 1.0;
     
    209206bool PM_MODEL_FROM_PSF (pmModel *modelPSF, pmModel *modelFLT, pmPSF *psf)
    210207{
    211 
    212208    psF32 *out = modelPSF->params->data.F32;
    213209    psF32 *in  = modelFLT->params->data.F32;
    214210
    215211    // we require these two parameters to exist
    216     assert (psf->params_NEW->n > PM_PAR_YPOS);
    217     assert (psf->params_NEW->n > PM_PAR_XPOS);
    218 
    219     for (int i = 0; i < psf->params_NEW->n; i++) {
    220         if (psf->params_NEW->data[i] == NULL) {
     212    assert (psf->params->n > PM_PAR_YPOS);
     213    assert (psf->params->n > PM_PAR_XPOS);
     214
     215    for (int i = 0; i < psf->params->n; i++) {
     216        if (psf->params->data[i] == NULL) {
    221217            out[i] = in[i];
    222218        } else {           
    223             psPolynomial2D *poly = psf->params_NEW->data[i];
     219            psPolynomial2D *poly = psf->params->data[i];
    224220            out[i] = psPolynomial2DEval(poly, in[PM_PAR_XPOS], in[PM_PAR_YPOS]);
    225221        }
     
    229225    out[PM_PAR_SXY] = pmPSF_SXYtoModel (out);
    230226
     227    return(true);
     228}
     229
     230// construct the PSF model from the FLT model and the psf
     231// XXX is this sufficiently general do be a global function, not a pmModelClass function?
     232bool PM_MODEL_PARAMS_FROM_PSF (pmModel *model, pmPSF *psf, float Xo, float Yo, float Io)
     233{
     234    psF32 *PAR = model->params->data.F32;
     235
     236    // we require these two parameters to exist
     237    assert (psf->params->n > PM_PAR_YPOS);
     238    assert (psf->params->n > PM_PAR_XPOS);
     239
     240    PAR[PM_PAR_SKY]  = 0.0;
     241    PAR[PM_PAR_I0]   = Io;
     242    PAR[PM_PAR_XPOS] = Xo;
     243    PAR[PM_PAR_YPOS] = Yo;
     244   
     245    // supply the model-fitted parameters, or copy from the input
     246    for (int i = 0; i < psf->params->n; i++) {
     247        if (i == PM_PAR_SKY) continue;
     248        psPolynomial2D *poly = psf->params->data[i];
     249        assert (poly);
     250        PAR[i] = psPolynomial2DEval(poly, Xo, Yo);
     251    }
     252
     253    // the 2D PSF model fits polarization terms (E0,E1,E2)
     254    // convert to shape terms (SXX,SYY,SXY)
     255    // XXX user-defined value for limit?
     256    if (!pmPSF_FitToModel (PAR, 0.1)) {
     257        psError(PM_ERR_PSF, false, "Failed to fit object at (r,c) = (%.1f,%.1f)", Xo, Yo);
     258        return false;
     259    }
     260
     261    // apply the model limits here: this truncates excessive extrapolation
     262    // XXX do we need to do this still?  should we put in asserts to test?
     263    for (int i = 0; i < psf->params->n; i++) {
     264        // apply the limits to all components or just the psf-model parameters?
     265        if (psf->params->data[i] == NULL)
     266            continue;
     267
     268        bool status = true;
     269        status &= PM_MODEL_LIMITS (PS_MINIMIZE_PARAM_MIN, i, PAR, NULL);
     270        status &= PM_MODEL_LIMITS (PS_MINIMIZE_PARAM_MAX, i, PAR, NULL);
     271        if (!status) {
     272            psTrace ("psModules.objects", 5, "Hitting parameter limits at (r,c) = (%.1f, %.1f)", Xo, Yo);
     273            model->flags |= PM_MODEL_STATUS_LIMITS;
     274        }
     275    }
    231276    return(true);
    232277}
     
    237282bool PM_MODEL_FIT_STATUS (pmModel *model)
    238283{
    239 
    240284    psF32 dP;
    241285    bool  status;
     
    265309# undef PM_MODEL_RADIUS
    266310# undef PM_MODEL_FROM_PSF
     311# undef PM_MODEL_PARAMS_FROM_PSF
    267312# undef PM_MODEL_FIT_STATUS
Note: See TracChangeset for help on using the changeset viewer.