IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 30705


Ignore:
Timestamp:
Feb 19, 2011, 10:33:39 AM (15 years ago)
Author:
eugene
Message:

optionally save the covariance matrix with model fits

Location:
branches/eam_branches/ipp-20110213/psModules/src/objects
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/ipp-20110213/psModules/src/objects/pmModel.c

    r30621 r30705  
    4141    psFree(tmp->params);
    4242    psFree(tmp->dparams);
     43    psFree(tmp->covar);
    4344    psTrace("psModules.objects", 10, "---- %s() end ----\n", __func__);
    4445}
     
    7172    tmp->flags = PM_MODEL_STATUS_NONE;
    7273    tmp->residuals = NULL;              // do not free: the model does not own this memory
     74    tmp->covar = NULL;
    7375    tmp->isPCM = false;
    7476
  • branches/eam_branches/ipp-20110213/psModules/src/objects/pmModel.h

    r30621 r30705  
    3333    psVector *params;                   ///< Paramater values.
    3434    psVector *dparams;                  ///< Parameter errors.
     35    psImage *covar;                     ///< Optional covariance matrix
    3536    float chisq;                        ///< Fit chi-squared.
    3637    float chisqNorm;                    ///< re-normalized fit chi-squared.
  • branches/eam_branches/ipp-20110213/psModules/src/objects/pmSourceExtendedPars.c

    r30621 r30705  
    5555    psFree(radial->flux);
    5656    psFree(radial->fluxErr);
     57    psFree(radial->fluxStdev);
    5758    psFree(radial->fill);
    5859}
     
    6566    radial->flux = NULL;
    6667    radial->fluxErr = NULL;
     68    radial->fluxStdev = NULL;
    6769    radial->fill = NULL;
    6870    return radial;
  • branches/eam_branches/ipp-20110213/psModules/src/objects/pmSourceExtendedPars.h

    r28013 r30705  
    2323typedef struct {
    2424    psVector *flux;                     // fluxes measured at above radii
     25    psVector *fluxStdev;                // scatter (standard deviation) of flux
    2526    psVector *fluxErr;                  // formal error on the fluxes (sqrt\sum(variance))
    2627    psVector *fill;                     // angles corresponding to above radial profiles
     
    6364    float petrosianR50;
    6465    float petrosianR50Err;
     66    float petrosianFill;
    6567} pmSourceExtendedPars;
    6668
  • branches/eam_branches/ipp-20110213/psModules/src/objects/pmSourceFitModel.c

    r29004 r30705  
    5959    opt->maxChisqDOF = NAN;
    6060    opt->poissonErrors = true;
     61    opt->saveCovariance = false;
    6162
    6263    return opt;
     
    231232        psTrace ("psModules.objects", 4, "%f +/- %f", params->data.F32[i], dparams->data.F32[i]);
    232233    }
     234    if (options->saveCovariance) {
     235        model->covar = psMemIncrRefCounter(covar);
     236    }
    233237    psTrace ("psModules.objects", 4, "niter: %d, chisq: %f", myMin->iter, myMin->value);
    234238
  • branches/eam_branches/ipp-20110213/psModules/src/objects/pmSourceFitModel.h

    r29004 r30705  
    3232    float weight;                       ///< use this weight for constant-weight fits
    3333    bool poissonErrors;                 ///< use poisson errors for fits?
     34    bool saveCovariance;
    3435} pmSourceFitOptions;
    3536
  • branches/eam_branches/ipp-20110213/psModules/src/objects/pmSourceFitPCM.c

    r30621 r30705  
    6969        dparams->data.F32[i] = sqrt(covar->data.F32[i][i]);
    7070        psTrace ("psModules.objects", 4, "%f +/- %f", params->data.F32[i], dparams->data.F32[i]);
     71    }
     72    if (fitOptions->saveCovariance) {
     73        pcm->modelConv->covar = psMemIncrRefCounter(covar);
    7174    }
    7275    psTrace ("psphot", 4, "niter: %d, chisq: %f", myMin->iter, myMin->value);
  • branches/eam_branches/ipp-20110213/psModules/src/objects/pmSourceFitSet.c

    r29004 r30705  
    296296
    297297// set the model parameters for this fit set
    298 bool pmSourceFitSetValues (pmSourceFitSetData *set, const psVector *dparam,
    299                            const psVector *param, pmSource *source,
    300                            psMinimization *myMin, int nPix, bool fitStatus)
     298bool pmSourceFitSetValues (pmSourceFitSetData *set,
     299                           const psVector *dparam, const psVector *param, const psImage *covar,
     300                           pmSource *source, psMinimization *myMin, int nPix,
     301                           bool fitStatus, bool saveCovariance)
    301302{
    302303    PS_ASSERT_PTR_NON_NULL(set, false);
     
    311312
    312313    int n = 0;
     314    int nStart = 0;
    313315    for (int i = 0; i < set->paramSet->n; i++) {
    314316
     
    320322            psTrace ("psModules.objects", 4, "%f +/- %f", param->data.F32[n], dparam->data.F32[n]);
    321323        }
     324        if (saveCovariance) {
     325            // we only save the covar matrix for this object with itself (ignore cross terms between objects)
     326            model->covar = psImageAlloc(model->params->n, model->params->n, PS_TYPE_F32);
     327            for (int ix = 0; ix < model->params->n; ix++) {
     328                for (int iy = 0; iy < model->params->n; iy++) {
     329                    model->covar->data.F32[iy][ix] = covar->data.F32[nStart+iy][nStart+ix];
     330                }
     331            }
     332        }
     333        nStart += model->params->n;
    322334        psTrace ("psModules.objects", 4, " src %d", i);
    323335
     
    550562    }
    551563
    552 // parameter errors from the covariance matrix
     564    // parameter errors from the covariance matrix
    553565    psVector *dparams = psVectorAlloc (thisSet->nParamSet, PS_TYPE_F32);
    554566    for (int i = 0; i < dparams->n; i++) {
     
    558570    }
    559571
    560 // get the Gauss-Newton distance for fixed model parameters
     572    // get the Gauss-Newton distance for fixed model parameters
    561573    if (constraint->paramMask != NULL) {
    562574        psVector *delta = psVectorAlloc (params->n, PS_TYPE_F32);
     
    580592    }
    581593
    582     pmSourceFitSetValues (thisSet, dparams, params, source, myMin, y->n, fitStatus);
     594    pmSourceFitSetValues (thisSet, dparams, params, covar, source, myMin, y->n, fitStatus, options->saveCovariance);
    583595    psTrace ("psModules.objects", 5, "onPic: %d, fitStatus: %d, nIter: %d, chisq: %f, nPix: %ld\n", onPic, fitStatus, myMin->iter, myMin->value, y->n);
    584596
  • branches/eam_branches/ipp-20110213/psModules/src/objects/pmSourceFitSet.h

    r29004 r30705  
    4040bool pmSourceFitSetJoin (psVector *deriv, psVector *param, pmSourceFitSetData *set);
    4141bool pmSourceFitSetSplit (pmSourceFitSetData *set, const psVector *deriv, const psVector *param);
    42 bool pmSourceFitSetValues (pmSourceFitSetData *set, const psVector *dparam, const psVector *param, pmSource *source, psMinimization *myMin, int nPix, bool fitStatus);
     42
     43bool pmSourceFitSetValues (pmSourceFitSetData *set,
     44                           const psVector *dparam, const psVector *param, const psImage *covar,
     45                           pmSource *source, psMinimization *myMin, int nPix,
     46                           bool fitStatus, bool saveCovariance);
    4347
    4448psF32 pmSourceFitSetFunction(psVector *deriv, const psVector *param, const psVector *x);
     
    5761    psArray *modelSet,                  ///< model to be fitted
    5862    pmSourceFitOptions *options,        ///< define options for fitting process
    59     psImageMaskType maskVal             ///< Vale to mask
     63    psImageMaskType maskVal             ///< Value to mask
    6064
    6165);
Note: See TracChangeset for help on using the changeset viewer.