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_STRAIL.c

    r11702 r14655  
    1212*****************************************************************************/
    1313 
    14 # define PM_MODEL_FUNC       pmModelFunc_STRAIL
    15 # define PM_MODEL_FLUX       pmModelFlux_STRAIL
    16 # define PM_MODEL_GUESS      pmModelGuess_STRAIL
    17 # define PM_MODEL_LIMITS     pmModelLimits_STRAIL
    18 # define PM_MODEL_RADIUS     pmModelRadius_STRAIL
    19 # define PM_MODEL_FROM_PSF   pmModelFromPSF_STRAIL
    20 # define PM_MODEL_FIT_STATUS pmModelFitStatus_STRAIL
     14# define PM_MODEL_FUNC            pmModelFunc_STRAIL
     15# define PM_MODEL_FLUX            pmModelFlux_STRAIL
     16# define PM_MODEL_GUESS           pmModelGuess_STRAIL
     17# define PM_MODEL_LIMITS          pmModelLimits_STRAIL
     18# define PM_MODEL_RADIUS          pmModelRadius_STRAIL
     19# define PM_MODEL_FROM_PSF        pmModelFromPSF_STRAIL
     20# define PM_MODEL_PARAMS_FROM_PSF pmModelParamsFromPSF_STRAIL
     21# define PM_MODEL_FIT_STATUS      pmModelFitStatus_STRAIL
    2122
    2223psF32 PM_MODEL_FUNC(psVector *deriv,
     
    474475 
    475476//fixed I think...no good way of guessing as far as I can tell
    476 bool PM_MODEL_GUESS (pmModel *model, pmSource *source) {
    477 
     477bool PM_MODEL_GUESS (pmModel *model, pmSource *source)
     478{
    478479    pmMoments *Smoments = source->moments;
    479480    psF32     *params  = model->params->data.F32;
     
    516517 
    517518//fixed
    518 bool PM_MODEL_FROM_PSF (pmModel *modelPSF, pmModel *modelFLT, pmPSF *psf) {
    519  
     519bool PM_MODEL_FROM_PSF (pmModel *modelPSF, pmModel *modelFLT, pmPSF *psf)
     520{
    520521    psF32 *out = modelPSF->params->data.F32;
    521522    psF32 *in  = modelFLT->params->data.F32;
     
    529530 
    530531    for (int i = 4; i < 7; i++) {
    531       psPolynomial2D *poly = psf->params_NEW->data[i-4];
     532      psPolynomial2D *poly = psf->params->data[i-4];
    532533        out[i] = psPolynomial2DEval (poly, out[2], out[3]);
    533534    }
     
    535536}
    536537 
     538// construct the PSF model from the FLT model and the psf
     539// XXX is this sufficiently general do be a global function, not a pmModelClass function?
     540bool PM_MODEL_PARAMS_FROM_PSF (pmModel *model, pmPSF *psf, float Xo, float Yo, float Io)
     541{
     542    psF32 *PAR = model->params->data.F32;
     543
     544    // we require these two parameters to exist
     545    assert (psf->params->n > PM_PAR_YPOS);
     546    assert (psf->params->n > PM_PAR_XPOS);
     547
     548    PAR[PM_PAR_SKY]  = 0.0;
     549    PAR[PM_PAR_I0]   = Io;
     550    PAR[PM_PAR_XPOS] = Xo;
     551    PAR[PM_PAR_YPOS] = Yo;
     552   
     553    // supply the model-fitted parameters, or copy from the input
     554    for (int i = 0; i < psf->params->n; i++) {
     555        if (i == PM_PAR_SKY) continue;
     556        psPolynomial2D *poly = psf->params->data[i];
     557        assert (poly);
     558        PAR[i] = psPolynomial2DEval(poly, Xo, Yo);
     559    }
     560
     561    // the 2D PSF model fits polarization terms (E0,E1,E2)
     562    // convert to shape terms (SXX,SYY,SXY)
     563    // XXX user-defined value for limit?
     564    if (!pmPSF_FitToModel (PAR, 0.1)) {
     565        psError(PM_ERR_PSF, false, "Failed to fit object at (r,c) = (%.1f,%.1f)", Xo, Yo);
     566        return false;
     567    }
     568
     569    // apply the model limits here: this truncates excessive extrapolation
     570    // XXX do we need to do this still?  should we put in asserts to test?
     571    for (int i = 0; i < psf->params->n; i++) {
     572        // apply the limits to all components or just the psf-model parameters?
     573        if (psf->params->data[i] == NULL)
     574            continue;
     575
     576        bool status = true;
     577        status &= PM_MODEL_LIMITS (PS_MINIMIZE_PARAM_MIN, i, PAR, NULL);
     578        status &= PM_MODEL_LIMITS (PS_MINIMIZE_PARAM_MAX, i, PAR, NULL);
     579        if (!status) {
     580            psTrace ("psModules.objects", 5, "Hitting parameter limits at (r,c) = (%.1f, %.1f)", Xo, Yo);
     581            model->flags |= PM_MODEL_STATUS_LIMITS;
     582        }
     583    }
     584    return(true);
     585}
     586
    537587//done I think
    538 bool PM_MODEL_FIT_STATUS (pmModel *model) {
    539  
     588bool PM_MODEL_FIT_STATUS (pmModel *model)
     589{
    540590    psF32 dP;
    541591    bool  status;
     
    566616# undef PM_MODEL_RADIUS
    567617# undef PM_MODEL_FROM_PSF
     618# undef PM_MODEL_PARAMS_FROM_PSF
    568619# undef PM_MODEL_FIT_STATUS
Note: See TracChangeset for help on using the changeset viewer.