IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Apr 25, 2007, 3:35:50 PM (19 years ago)
Author:
eugene
Message:

incorporating changes from eam_02_branch (pmSourceAdd/Sub, modified API for pmModelAdd, cached models)

File:
1 edited

Legend:

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

    r12792 r13035  
    6767        // these should never be invalid values
    6868        // XXX drop these tests eventually
    69         if (isnan(model->params->data.F32[PM_PAR_I0])) psAbort("nan in blend fit");
     69        if (isnan(model->params->data.F32[PM_PAR_I0]))   psAbort("nan in blend fit");
    7070        if (isnan(model->params->data.F32[PM_PAR_XPOS])) psAbort("nan in blend fit");
    7171        if (isnan(model->params->data.F32[PM_PAR_YPOS])) psAbort("nan in blend fit");
     
    8383
    8484    // fit PSF model (set/unset the pixel mask)
    85     psImageKeepCircle (source->mask, x, y, PSF->radiusFit, "OR", PM_MASK_MARK);
    8685    pmSourceFitSet (source, modelSet, PM_SOURCE_FIT_PSF);
    87     psImageKeepCircle (source->mask, x, y, PSF->radiusFit, "AND", PS_NOT_U8(PM_MASK_MARK));
    8886
    8987    // correct model chisq for flux trend
     
    110108        blend->modelPSF = psMemIncrRefCounter (model);
    111109        psTrace ("psphot", 5, "fitted blend as PSF\n");
    112         pmModelSub (source->pixels, source->mask, model, false, false);
     110
     111        // build cached model and subtract
     112        pmSourceCacheModel (blend);
     113        pmSourceSub (blend, PM_MODEL_OP_FULL);
    113114        blend->mode |=  PM_SOURCE_MODE_SUBTRACTED;
    114115        blend->mode &= ~PM_SOURCE_MODE_TEMPSUB;
     
    127128    psFree (sourceSet);
    128129
    129     psTrace ("psphot", 5, "fitted primary as PSF\n");
    130     pmModelSub (source->pixels, source->mask, PSF, false, false);
     130    // save the new, successful model
    131131    psFree (source->modelPSF);
    132132    source->modelPSF = PSF;
     133    psTrace ("psphot", 5, "fitted primary as PSF\n");
     134
     135    // build cached model and subtract
     136    pmSourceCacheModel (source);
     137    pmSourceSub (source, PM_MODEL_OP_FULL);
    133138    source->mode |=  PM_SOURCE_MODE_SUBTRACTED;
    134139    source->mode &= ~PM_SOURCE_MODE_TEMPSUB;
     
    138143bool psphotFitPSF (pmReadout *readout, pmSource *source, pmPSF *psf) {
    139144
    140     float x, y;
    141145    double chiTrend;
    142146
     
    150154    psphotCheckRadiusPSF (readout, source, PSF);
    151155
    152     x = PSF->params->data.F32[PM_PAR_XPOS];
    153     y = PSF->params->data.F32[PM_PAR_YPOS];
    154 
    155156    // fit PSF model (set/unset the pixel mask)
    156     psImageKeepCircle (source->mask, x, y, PSF->radiusFit, "OR", PM_MASK_MARK);
    157157    pmSourceFitModel (source, PSF, PM_SOURCE_FIT_PSF);
    158     psImageKeepCircle (source->mask, x, y, PSF->radiusFit, "AND", PS_NOT_U8(PM_MASK_MARK));
    159158
    160159    // correct model chisq for flux trend
     
    168167    }
    169168
    170     psTrace ("psphot", 5, "fitted as PSF\n");
    171     pmModelSub (source->pixels, source->mask, PSF, false, false);
    172 
    173169    // free old model, save new model
    174170    psFree (source->modelPSF);
    175171    source->modelPSF = PSF;
    176 
     172    psTrace ("psphot", 5, "fitted as PSF\n");
     173
     174    // build cached model and subtract
     175    pmSourceCacheModel (source);
     176    pmSourceSub (source, PM_MODEL_OP_FULL);
    177177    source->mode |=  PM_SOURCE_MODE_SUBTRACTED;
    178178    source->mode &= ~PM_SOURCE_MODE_TEMPSUB;
     
    264264    // sub EXT
    265265    psFree (DBL);
    266     pmModelSub (source->pixels, source->mask, EXT, false, false);
    267     psTrace ("psphot", 5, "blob as EXT: %f %f\n", EXT->params->data.F32[PM_PAR_XPOS], EXT->params->data.F32[PM_PAR_YPOS]);
    268266
    269267    // save new model
    270268    source->modelEXT = EXT;
     269
     270    // build cached model and subtract
     271    pmSourceCacheModel (source);
     272    pmSourceSub (source, PM_MODEL_OP_FULL);
     273    psTrace ("psphot", 5, "blob as EXT: %f %f\n", EXT->params->data.F32[PM_PAR_XPOS], EXT->params->data.F32[PM_PAR_YPOS]);
     274
    271275    source->mode |=  PM_SOURCE_MODE_SUBTRACTED;
    272276    source->mode &= ~PM_SOURCE_MODE_TEMPSUB;
     
    276280    // sub DLB
    277281    psFree (EXT);
    278     pmModelSub (source->pixels, source->mask, (pmModel *) DBL->data[0], false, false);
    279     pmModelSub (source->pixels, source->mask, (pmModel *) DBL->data[1], false, false);
    280     psTrace ("psphot", 5, "blob as DBL: %f %f\n", ONE->params->data.F32[PM_PAR_XPOS], ONE->params->data.F32[PM_PAR_YPOS]);
    281282
    282283    // drop old model, save new second model...
     
    288289
    289290    // copy most data from the primary source (modelEXT, blends stay NULL)
    290     pmSource *newSrc = pmSourceAlloc ();
    291     newSrc->peak     = psMemIncrRefCounter (source->peak);
    292     newSrc->pixels   = psMemIncrRefCounter (source->pixels);
    293     newSrc->weight   = psMemIncrRefCounter (source->weight);
    294     newSrc->mask     = psMemIncrRefCounter (source->mask);
    295     newSrc->moments  = psMemIncrRefCounter (source->moments);
     291    // XXX use pmSourceCopy?
     292    pmSource *newSrc = pmSourceCopy (source);
    296293    newSrc->modelPSF = psMemIncrRefCounter (DBL->data[1]);
    297     newSrc->type     = source->type;
    298     newSrc->mode     = source->mode;
     294
     295    // build cached models and subtract
     296    pmSourceCacheModel (source);
     297    pmSourceSub (source, PM_MODEL_OP_FULL);
     298    pmSourceCacheModel (newSrc);
     299    pmSourceSub (newSrc, PM_MODEL_OP_FULL);
     300    psTrace ("psphot", 5, "blob as DBL: %f %f\n", ONE->params->data.F32[PM_PAR_XPOS], ONE->params->data.F32[PM_PAR_YPOS]);
     301
    299302    psArrayAdd (sources, 100, newSrc);
    300303    psFree (newSrc);
     
    306309psArray *psphotFitDBL (pmReadout *readout, pmSource *source) {
    307310
    308     float x, y, dx, dy;
     311    float dx, dy;
    309312    pmModel *DBL;
    310313    pmModel *PSF;
     
    344347    modelSet->data[1] = DBL;
    345348
    346     x = source->moments->x;
    347     y = source->moments->y;
    348 
    349349    // fit PSF model (set/unset the pixel mask)
    350     psImageKeepCircle (source->mask, x, y, PSF->radiusFit, "OR", PM_MASK_MARK);
    351350    pmSourceFitSet (source, modelSet, PM_SOURCE_FIT_PSF);
    352     psImageKeepCircle (source->mask, x, y, PSF->radiusFit, "AND", PS_NOT_U8(PM_MASK_MARK));
    353 
    354351    return (modelSet);
    355352}
    356353
    357354pmModel *psphotFitEXT (pmReadout *readout, pmSource *source) {
    358 
    359     float x, y;
    360355
    361356    NfitEXT ++;
     
    369364    psphotCheckRadiusEXT (readout, source, EXT);
    370365
    371     x = EXT->params->data.F32[PM_PAR_XPOS];
    372     y = EXT->params->data.F32[PM_PAR_YPOS];
    373 
    374366    if ((source->moments->Sx < 1e-3) || (source->moments->Sx < 1e-3)) {
    375367        psTrace ("psphot", 5, "problem source: moments: %f %f\n", source->moments->Sx, source->moments->Sy);
     
    377369
    378370    // fit EXT (not PSF) model (set/unset the pixel mask)
    379     psImageKeepCircle (source->mask, x, y, EXT->radiusFit, "OR", PM_MASK_MARK);
    380371    pmSourceFitModel (source, EXT, PM_SOURCE_FIT_EXT);
    381     psImageKeepCircle (source->mask, x, y, EXT->radiusFit, "AND", PS_NOT_U8(PM_MASK_MARK));
    382 
    383372    return (EXT);
    384373}
Note: See TracChangeset for help on using the changeset viewer.