IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Oct 2, 2009, 3:12:47 PM (17 years ago)
Author:
eugene
Message:

check in changes from gene@development branch : extensive changes to moments calculation, psf model generation, aperture residuals; improvements to extended source analysis

Location:
trunk/psphot/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/psphot/src

    • Property svn:ignore
      •  

        old new  
        1818psphotVersionDefinitions.h
        1919psphotMomentsStudy
         20psphotPetrosianStudy
  • trunk/psphot/src/psphotSourceFits.c

    r24592 r25755  
    9090    psphotCheckRadiusPSFBlend (readout, source, PSF, markVal, dR);
    9191
    92     // fit PSF model (set/unset the pixel mask)
     92    // fit PSF model
    9393    pmSourceFitSet (source, modelSet, PM_SOURCE_FIT_PSF, maskVal);
     94
     95    // clear the circular mask
     96    psImageMaskPixels (source->maskObj, "AND", PS_NOT_IMAGE_MASK(markVal));
     97
     98    if (!isfinite(PSF->params->data.F32[PM_PAR_I0])) psAbort("nan in fit");
    9499
    95100    // correct model chisq for flux trend
     
    101106        pmSource *blend = sourceSet->data[i];
    102107        pmModel *model  = modelSet->data[i];
     108
     109        if (!isfinite(model->params->data.F32[PM_PAR_I0])) psAbort("nan in fit");
    103110
    104111        // correct model chisq for flux trend
     
    120127        pmSourceCacheModel (blend, maskVal);
    121128        pmSourceSub (blend, PM_MODEL_OP_FULL, maskVal);
    122         blend->tmpFlags |=  PM_SOURCE_TMPF_SUBTRACTED;
    123129        blend->mode |=  PM_SOURCE_MODE_BLEND_FIT;
    124130    }
     
    144150    pmSourceCacheModel (source, maskVal);
    145151    pmSourceSub (source, PM_MODEL_OP_FULL, maskVal);
    146     source->tmpFlags |=  PM_SOURCE_TMPF_SUBTRACTED;
    147152    source->mode |=  PM_SOURCE_MODE_BLEND_FIT;
    148153    return true;
     
    167172    // fit PSF model (set/unset the pixel mask)
    168173    pmSourceFitModel (source, PSF, PM_SOURCE_FIT_PSF, maskVal);
     174
     175    if (!isfinite(PSF->params->data.F32[PM_PAR_I0])) psAbort("nan in fit");
     176
     177    // clear the circular mask
     178    psImageMaskPixels (source->maskObj, "AND", PS_NOT_IMAGE_MASK(markVal));
    169179
    170180    // correct model chisq for flux trend
     
    186196    pmSourceCacheModel (source, maskVal);
    187197    pmSourceSub (source, PM_MODEL_OP_FULL, maskVal);
    188     source->tmpFlags |=  PM_SOURCE_TMPF_SUBTRACTED;
    189     return true;
    190 }
    191 
    192 static float EXT_MIN_SN;
    193 static float EXT_MOMENTS_RAD;
     198    return true;
     199}
     200
    194201static pmModelType modelTypeEXT;
    195202
     
    197204
    198205    bool status;
    199 
    200     // extended source model parameters
    201     EXT_MIN_SN       = psMetadataLookupF32 (&status, recipe, "EXT_MIN_SN");
    202     EXT_MOMENTS_RAD  = psMetadataLookupF32 (&status, recipe, "EXT_MOMENTS_RADIUS");
    203206
    204207    // extended source model descriptions
     
    221224    if (source->type == PM_SOURCE_TYPE_DEFECT) return false;
    222225    if (source->type == PM_SOURCE_TYPE_SATURATED) return false;
    223     if (source->peak->SN < EXT_MIN_SN) return false;
    224 
     226
     227    // set the radius based on the footprint (also sets the mask pixels)
     228    float radius = psphotSetRadiusEXT (readout, source, markVal);
     229
     230    // XXX note that this changes the source moments that are published...
    225231    // recalculate the source moments using the larger extended-source moments radius
    226232    // at this stage, skip Gaussian windowing, and do not clip pixels by S/N
    227     if (!pmSourceMoments (source, EXT_MOMENTS_RAD, 0.0, 0.0)) return false;
     233    // this uses the footprint to judge both radius and aperture?
     234    if (!pmSourceMoments (source, radius, 0.0, 0.0)) return false;
    228235
    229236    psTrace ("psphot", 5, "trying blob...\n");
     
    237244    // XXX need to handle failures better here
    238245    pmModel *EXT = psphotFitEXT (readout, source, modelTypeEXT, maskVal, markVal);
     246    if (!isfinite(EXT->params->data.F32[PM_PAR_I0])) psAbort("nan in fit");
     247
    239248    okEXT = psphotEvalEXT (tmpSrc, EXT);
    240249    chiEXT = EXT ? EXT->chisq / EXT->nDOF : NAN;
     
    246255    // XXX should I keep / save the flags set in the eval functions?
    247256
     257    // clear the circular mask
     258    psImageMaskPixels (source->maskObj, "AND", PS_NOT_IMAGE_MASK(markVal));
     259
    248260    // correct first model chisqs for flux trend
    249261    chiDBL = NAN;
    250262    ONE = DBL->data[0];
    251263    if (ONE) {
     264        if (!isfinite(ONE->params->data.F32[PM_PAR_I0])) psAbort("nan in fit");
    252265      chiTrend = psPolynomial1DEval (psf->ChiTrend, ONE->params->data.F32[1]);
    253266      ONE->chisqNorm = ONE->chisq / chiTrend;
     
    258271    ONE = DBL->data[1];
    259272    if (ONE) {
     273        if (!isfinite(ONE->params->data.F32[PM_PAR_I0])) psAbort("nan in fit");
    260274      chiTrend = psPolynomial1DEval (psf->ChiTrend, ONE->params->data.F32[1]);
    261275      ONE->chisqNorm = ONE->chisq / chiTrend;
     
    277291
    278292    // both models failed; reject them both
     293    // XXX -- change type flags to psf in this case and keep original moments?
    279294    psFree (EXT);
    280295    psFree (DBL);
     
    287302    // save new model
    288303    source->modelEXT = EXT;
     304    source->modelEXT->fitRadius = radius;
    289305    source->type = PM_SOURCE_TYPE_EXTENDED;
    290306    source->mode |= PM_SOURCE_MODE_EXTMODEL;
     
    293309    pmSourceCacheModel (source, maskVal);
    294310    pmSourceSub (source, PM_MODEL_OP_FULL, maskVal);
    295     source->tmpFlags |=  PM_SOURCE_TMPF_SUBTRACTED;
     311
     312# if (PS_TRACE_ON)   
    296313    psTrace ("psphot", 5, "blob as EXT: %f %f\n", EXT->params->data.F32[PM_PAR_XPOS], EXT->params->data.F32[PM_PAR_YPOS]);
     314    if (psTraceGetLevel("psphot") >= 6) {
     315        psLogMsg ("psphot", 1, "source 2:\n");
     316        for (int i = 0; i < source->modelEXT->params->n; i++) {
     317            psLogMsg ("psphot", 1, "PAR %d : %f +/- %f\n", i, source->modelEXT->params->data.F32[i], source->modelEXT->dparams->data.F32[i]);
     318        }
     319    }
     320# endif
     321
    297322    return true;
    298323
     
    304329    psFree (source->modelPSF);
    305330    source->modelPSF = psMemIncrRefCounter (DBL->data[0]);
    306     source->tmpFlags |= PM_SOURCE_TMPF_SUBTRACTED;
    307331    source->mode     |= PM_SOURCE_MODE_PAIR;
     332    source->modelPSF->fitRadius = radius;
    308333
    309334    // copy most data from the primary source (modelEXT, blends stay NULL)
    310     // XXX use pmSourceCopy?
    311335    pmSource *newSrc = pmSourceCopy (source);
    312336    newSrc->modelPSF = psMemIncrRefCounter (DBL->data[1]);
     337    newSrc->modelPSF->fitRadius = radius;
    313338
    314339    // build cached models and subtract
     
    317342    pmSourceCacheModel (newSrc, maskVal);
    318343    pmSourceSub (newSrc, PM_MODEL_OP_FULL, maskVal);
     344
     345# if (PS_TRACE_ON)   
    319346    psTrace ("psphot", 5, "blob as DBL: %f %f\n", ONE->params->data.F32[PM_PAR_XPOS], ONE->params->data.F32[PM_PAR_YPOS]);
     347    if (psTraceGetLevel("psphot") >= 6) {
     348        psLogMsg ("psphot", 1, "source 1:\n");
     349        for (int i = 0; i < newSrc->modelPSF->params->n; i++) {
     350            psLogMsg ("psphot", 1, "PAR %d : %f +/- %f\n", i, newSrc->modelPSF->params->data.F32[i], newSrc->modelPSF->dparams->data.F32[i]);
     351        }
     352        psLogMsg ("psphot", 1, "source 2:\n");
     353        for (int i = 0; i < source->modelPSF->params->n; i++) {
     354            psLogMsg ("psphot", 1, "PAR %d : %f +/- %f\n", i, source->modelPSF->params->data.F32[i], source->modelPSF->dparams->data.F32[i]);
     355        }
     356        psphotVisualShowResidualImage (readout);
     357    }
     358# endif
    320359
    321360    psArrayAdd (newSources, 100, newSrc);
     
    356395    // save the PSF model from the Ensemble fit
    357396    PSF = source->modelPSF;
    358     psphotCheckRadiusPSFBlend (readout, source, PSF, markVal, 8.0);
    359397    if (isnan(PSF->params->data.F32[1])) psAbort("nan in dbl fit");
    360398
     
    389427    PS_ASSERT (EXT, NULL);
    390428
    391     // if (isnan(EXT->params->data.F32[1])) psAbort("nan in ext fit");
    392 
    393     psphotCheckRadiusEXT (readout, source, EXT, markVal);
    394 
    395429    if ((source->moments->Mxx < 1e-3) || (source->moments->Myy < 1e-3)) {
    396430        psTrace ("psphot", 5, "problem source: moments: %f %f\n", source->moments->Mxx, source->moments->Myy);
     
    401435    return (EXT);
    402436}
    403 
Note: See TracChangeset for help on using the changeset viewer.