IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Apr 12, 2006, 8:59:15 PM (20 years ago)
Author:
eugene
Message:

tests on non-poisson errors, updates to image background, tests of systematic biases, updates to use pmFPAfile paradigm

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psphot/src/psphotSourceFits.c

    r6753 r6851  
    33// given a source with an existing modelPSF, attempt a full PSF fit, subtract if successful
    44
    5 bool psphotFitPSF (pmReadout *readout, pmSource *source) {
     5bool psphotFitPSF (pmReadout *readout, pmSource *source, pmPSF *psf) {
    66
    77    float x, y;
     8    double chiTrend;
    89
    910    // save the PSF model from the Ensemble fit
     
    1819    // fit PSF model (set/unset the pixel mask)
    1920    psImageKeepCircle (source->mask, x, y, PSF->radiusTMP, "OR", PM_SOURCE_MASK_MARKED);
    20     pmSourceFitModel (source, PSF, true);
     21    pmSourceFitModel (source, PSF, PM_SOURCE_FIT_PSF);
    2122    psImageKeepCircle (source->mask, x, y, PSF->radiusTMP, "AND", ~PM_SOURCE_MASK_MARKED);
     23   
     24    // correct model chisq for flux trend
     25    chiTrend = psPolynomial1DEval (psf->ChiTrend, PSF->params->data.F32[1]);
     26    PSF->chisqNorm = PSF->chisq / chiTrend;
     27    // PSF->chisqNorm = PSF->chisq;
    2228
    2329    // does the PSF model succeed?
     
    6066}
    6167
    62 bool psphotFitBlob (pmReadout *readout, pmSource *source, psArray *sources) {
     68bool psphotFitBlob (pmReadout *readout, pmSource *source, psArray *sources, pmPSF *psf) {
    6369
    6470    bool okEXT, okDBL;
    6571    float chiEXT, chiDBL;
     72    double chiTrend;
     73    pmModel *ONE = NULL;
    6674
    6775    // skip the source if we don't think it is extended
     
    8694    okDBL  = psphotEvalDBL (tmpSrc, DBL->data[0]);
    8795    okDBL &= psphotEvalDBL (tmpSrc, DBL->data[1]);
    88     pmModel *ONE = DBL->data[0];
    89     chiDBL = ONE->chisq / ONE->nDOF;
     96
     97    // correct first model chisqs for flux trend
     98    ONE = DBL->data[0];
     99    chiTrend = psPolynomial1DEval (psf->ChiTrend, ONE->params->data.F32[1]);
     100    ONE->chisqNorm = ONE->chisq / chiTrend;
     101    // ONE->chisqNorm = ONE->chisq;
     102
     103    // save chisq for double-star/galaxy comparison
     104    chiDBL = ONE->chisqNorm;
     105
     106    // correct second model chisqs for flux trend
     107    ONE = DBL->data[1];
     108    chiTrend = psPolynomial1DEval (psf->ChiTrend, ONE->params->data.F32[1]);
     109    ONE->chisqNorm = ONE->chisq / chiTrend;
     110    // ONE->chisqNorm = ONE->chisq;
    90111
    91112    psFree (tmpSrc); // XXX should I keep / save the flags set in the eval functions?
     
    93114    if (okEXT && okDBL) {
    94115        psTrace ("psphot.blend", 5, "blob chisq: %f vs %f\n", chiEXT, chiDBL);
    95         // XXX EAM : a bogus bias: need to examine this better
     116        // XXX EAM : a bogus bias: need to examine this better 
    96117        if (3*chiEXT > chiDBL) goto keepDBL;
    97118        goto keepEXT;
     
    188209    y = source->moments->y;
    189210
    190     // fit EXT (not PSF) model (set/unset the pixel mask)
     211    // fit PSF model (set/unset the pixel mask)
    191212    psImageKeepCircle (source->mask, x, y, PSF->radiusTMP, "OR", PM_SOURCE_MASK_MARKED);
    192     pmSourceFitSet (source, modelSet, true);
     213    pmSourceFitSet (source, modelSet, PM_SOURCE_FIT_PSF);
    193214    psImageKeepCircle (source->mask, x, y, PSF->radiusTMP, "AND", ~PM_SOURCE_MASK_MARKED);
    194215
     
    210231    // fit EXT (not PSF) model (set/unset the pixel mask)
    211232    psImageKeepCircle (source->mask, x, y, EXT->radiusTMP, "OR", PM_SOURCE_MASK_MARKED);
    212     pmSourceFitModel (source, EXT, false);
     233    pmSourceFitModel (source, EXT, PM_SOURCE_FIT_EXT);
    213234    psImageKeepCircle (source->mask, x, y, EXT->radiusTMP, "AND", ~PM_SOURCE_MASK_MARKED);
    214235
     
    216237}
    217238
    218 bool psphotFitBlend (pmReadout *readout, pmSource *source) {
     239bool psphotFitBlend (pmReadout *readout, pmSource *source, pmPSF *psf) {
    219240
    220241    float x, y, dR;
     
    222243    // if this source is not a possible blend, just fit as PSF
    223244    if ((source->blends == NULL) || (source->mode & PM_SOURCE_MODE_SATSTAR)) {
    224         bool status = psphotFitPSF (readout, source);
     245        bool status = psphotFitPSF (readout, source, psf);
    225246        return status;
    226247    }
     
    273294    // fit PSF model (set/unset the pixel mask)
    274295    psImageKeepCircle (source->mask, x, y, PSF->radiusTMP, "OR", PM_SOURCE_MASK_MARKED);
    275     pmSourceFitSet (source, modelSet, true);
     296    pmSourceFitSet (source, modelSet, PM_SOURCE_FIT_PSF);
    276297    psImageKeepCircle (source->mask, x, y, PSF->radiusTMP, "AND", ~PM_SOURCE_MASK_MARKED);
     298
     299    // correct model chisq for flux trend
     300    double chiTrend = psPolynomial1DEval (psf->ChiTrend, PSF->params->data.F32[1]);
     301    PSF->chisqNorm = PSF->chisq / chiTrend;
     302    // PSF->chisqNorm = PSF->chisq;
    277303
    278304    // evaluate the blend objects, subtract if good, free otherwise
     
    280306        pmSource *src = sourceSet->data[i];
    281307        pmModel *model = modelSet->data[i];
     308
     309        // correct model chisq for flux trend
     310        chiTrend = psPolynomial1DEval (psf->ChiTrend, model->params->data.F32[1]);
     311        model->chisqNorm = model->chisq / chiTrend;
     312        // model->chisqNorm = model->chisq;
    282313
    283314        // if we skip this one, free the corresponding blend entry model
Note: See TracChangeset for help on using the changeset viewer.