IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Jun 19, 2007, 4:40:44 PM (19 years ago)
Author:
Paul Price
Message:

Extensive changes to APIs to allow use of a nominated value to mask
against (the maskVal). Previously, the mask values were either
hard-coded (e.g., PM_MASK_SAT) or taken as anything non-zero. The
code is tested with psModules (which has similar changes) and does not
crash, but neither is it successful in marking all bad pixels. For
this reason, I have left the "gutter" pixels (cell gaps) set to 0
instead of NAN in pmFPAMosaic.

File:
1 edited

Legend:

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

    r13035 r13900  
    1616bool psphotFitSummary () {
    1717
    18     fprintf (stderr, "fitted %5d psf, %5d blend, %5d ext, %5d dbl : %6.2f sec\n", 
    19              NfitPSF, NfitBlend, NfitEXT, NfitDBL, psTimerMark ("psphot.fits"));
    20     return true;
    21 }
    22 
    23 bool psphotFitBlend (pmReadout *readout, pmSource *source, pmPSF *psf) {
     18    fprintf (stderr, "fitted %5d psf, %5d blend, %5d ext, %5d dbl : %6.2f sec\n",
     19             NfitPSF, NfitBlend, NfitEXT, NfitDBL, psTimerMark ("psphot.fits"));
     20    return true;
     21}
     22
     23bool psphotFitBlend (pmReadout *readout, pmSource *source, pmPSF *psf, psMaskType maskVal) {
    2424
    2525    float x, y, dR;
     
    2727    // if this source is not a possible blend, just fit as PSF
    2828    if ((source->blends == NULL) || (source->mode & PM_SOURCE_MODE_SATSTAR)) {
    29         bool status = psphotFitPSF (readout, source, psf);
     29        bool status = psphotFitPSF (readout, source, psf, maskVal);
    3030        return status;
    3131    }
     
    6565        model->params->data.F32[PM_PAR_YPOS] = blend->peak->yf;
    6666
    67         // these should never be invalid values
    68         // XXX drop these tests eventually
     67        // these should never be invalid values
     68        // XXX drop these tests eventually
    6969        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");
     
    8383
    8484    // fit PSF model (set/unset the pixel mask)
    85     pmSourceFitSet (source, modelSet, PM_SOURCE_FIT_PSF);
     85    pmSourceFitSet (source, modelSet, PM_SOURCE_FIT_PSF, maskVal);
    8686
    8787    // correct model chisq for flux trend
     
    109109        psTrace ("psphot", 5, "fitted blend as PSF\n");
    110110
    111         // build cached model and subtract
    112         pmSourceCacheModel (blend);
    113         pmSourceSub (blend, PM_MODEL_OP_FULL);
     111        // build cached model and subtract
     112        pmSourceCacheModel (blend, maskVal);
     113        pmSourceSub (blend, PM_MODEL_OP_FULL, maskVal);
    114114        blend->mode |=  PM_SOURCE_MODE_SUBTRACTED;
    115115        blend->mode &= ~PM_SOURCE_MODE_TEMPSUB;
     
    121121        psTrace ("psphot", 4, "failed on blend 0 of %ld\n", modelSet->n);
    122122        psFree (PSF);
    123         psFree (modelSet);
    124         psFree (sourceSet);
     123        psFree (modelSet);
     124        psFree (sourceSet);
    125125        return false;
    126126    }
     
    134134
    135135    // build cached model and subtract
    136     pmSourceCacheModel (source);
    137     pmSourceSub (source, PM_MODEL_OP_FULL);
     136    pmSourceCacheModel (source, maskVal);
     137    pmSourceSub (source, PM_MODEL_OP_FULL, maskVal);
    138138    source->mode |=  PM_SOURCE_MODE_SUBTRACTED;
    139139    source->mode &= ~PM_SOURCE_MODE_TEMPSUB;
     
    141141}
    142142
    143 bool psphotFitPSF (pmReadout *readout, pmSource *source, pmPSF *psf) {
     143bool psphotFitPSF (pmReadout *readout, pmSource *source, pmPSF *psf, psMaskType maskVal) {
    144144
    145145    double chiTrend;
     
    155155
    156156    // fit PSF model (set/unset the pixel mask)
    157     pmSourceFitModel (source, PSF, PM_SOURCE_FIT_PSF);
     157    pmSourceFitModel (source, PSF, PM_SOURCE_FIT_PSF, maskVal);
    158158
    159159    // correct model chisq for flux trend
     
    173173
    174174    // build cached model and subtract
    175     pmSourceCacheModel (source);
    176     pmSourceSub (source, PM_MODEL_OP_FULL);
     175    pmSourceCacheModel (source, maskVal);
     176    pmSourceSub (source, PM_MODEL_OP_FULL, maskVal);
    177177    source->mode |=  PM_SOURCE_MODE_SUBTRACTED;
    178178    source->mode &= ~PM_SOURCE_MODE_TEMPSUB;
     
    201201}
    202202
    203 bool psphotFitBlob (pmReadout *readout, pmSource *source, psArray *sources, pmPSF *psf) {
     203bool psphotFitBlob (pmReadout *readout, pmSource *source, psArray *sources, pmPSF *psf, psMaskType maskVal) {
    204204
    205205    bool okEXT, okDBL;
     
    222222    pmSource *tmpSrc = pmSourceAlloc ();
    223223
    224     pmModel *EXT = psphotFitEXT (readout, source);
     224    pmModel *EXT = psphotFitEXT (readout, source, maskVal);
    225225    okEXT = psphotEvalEXT (tmpSrc, EXT);
    226226    chiEXT = EXT->chisq / EXT->nDOF;
    227227
    228     psArray *DBL = psphotFitDBL (readout, source);
     228    psArray *DBL = psphotFitDBL (readout, source, maskVal);
    229229    okDBL  = psphotEvalDBL (tmpSrc, DBL->data[0]);
    230230    okDBL &= psphotEvalDBL (tmpSrc, DBL->data[1]);
     
    269269
    270270    // build cached model and subtract
    271     pmSourceCacheModel (source);
    272     pmSourceSub (source, PM_MODEL_OP_FULL);
     271    pmSourceCacheModel (source, maskVal);
     272    pmSourceSub (source, PM_MODEL_OP_FULL, maskVal);
    273273    psTrace ("psphot", 5, "blob as EXT: %f %f\n", EXT->params->data.F32[PM_PAR_XPOS], EXT->params->data.F32[PM_PAR_YPOS]);
    274274
     
    294294
    295295    // 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);
     296    pmSourceCacheModel (source, maskVal);
     297    pmSourceSub (source, PM_MODEL_OP_FULL, maskVal);
     298    pmSourceCacheModel (newSrc, maskVal);
     299    pmSourceSub (newSrc, PM_MODEL_OP_FULL, maskVal);
    300300    psTrace ("psphot", 5, "blob as DBL: %f %f\n", ONE->params->data.F32[PM_PAR_XPOS], ONE->params->data.F32[PM_PAR_YPOS]);
    301301
     
    307307
    308308// fit a double PSF source to an extended blob
    309 psArray *psphotFitDBL (pmReadout *readout, pmSource *source) {
     309psArray *psphotFitDBL (pmReadout *readout, pmSource *source, psMaskType maskVal) {
    310310
    311311    float dx, dy;
     
    348348
    349349    // fit PSF model (set/unset the pixel mask)
    350     pmSourceFitSet (source, modelSet, PM_SOURCE_FIT_PSF);
     350    pmSourceFitSet (source, modelSet, PM_SOURCE_FIT_PSF, maskVal);
    351351    return (modelSet);
    352352}
    353353
    354 pmModel *psphotFitEXT (pmReadout *readout, pmSource *source) {
     354pmModel *psphotFitEXT (pmReadout *readout, pmSource *source, psMaskType maskVal) {
    355355
    356356    NfitEXT ++;
     
    359359    pmModel *EXT = pmSourceModelGuess (source, modelTypeEXT);
    360360    PS_ASSERT (EXT, NULL);
    361        
     361
    362362    // if (isnan(EXT->params->data.F32[1])) psAbort("nan in ext fit");
    363363
     
    369369
    370370    // fit EXT (not PSF) model (set/unset the pixel mask)
    371     pmSourceFitModel (source, EXT, PM_SOURCE_FIT_EXT);
     371    pmSourceFitModel (source, EXT, PM_SOURCE_FIT_EXT, maskVal);
    372372    return (EXT);
    373373}
Note: See TracChangeset for help on using the changeset viewer.