IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Jun 6, 2011, 1:56:22 PM (15 years ago)
Author:
watersc1
Message:

merge from trunk before working on new stacking code

Location:
branches/czw_branch/20110406
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/czw_branch/20110406

  • branches/czw_branch/20110406/psphot

  • branches/czw_branch/20110406/psphot/src/psphotSourceStats.c

    r31154 r31606  
    9898
    9999    // generate the array of sources, define the associated pixel
     100    bool firstPass = false;
    100101    if (!detections->newSources) {
    101102        detections->newSources = psArrayAllocEmpty (peaks->n);
     103        firstPass = true;
    102104    }
    103105    sources = detections->newSources;
     
    125127        if (source->mode & PM_SOURCE_MODE_MOMENTS_FAILURE) {
    126128            fprintf (stderr, "moment failure\n");
     129        }
     130
     131        if (firstPass) {
     132            source->mode2 |= PM_SOURCE_MODE2_PASS1_SRC;
    127133        }
    128134
     
    159165        RADIUS = psMetadataLookupF32 (&status, recipe, "PSF_MOMENTS_RADIUS");
    160166    }
     167    float MIN_KRON_RADIUS = psMetadataLookupF32 (&status, readout->analysis, "MOMENTS_MIN_KRON");
     168    if (!status) {
     169        MIN_KRON_RADIUS = 0.75*SIGMA;
     170    }
    161171
    162172    // threaded measurement of the source magnitudes
     
    186196            PS_ARRAY_ADD_SCALAR(job->args, RADIUS,  PS_TYPE_F32);
    187197            PS_ARRAY_ADD_SCALAR(job->args, SIGMA,   PS_TYPE_F32);
     198            PS_ARRAY_ADD_SCALAR(job->args, MIN_KRON_RADIUS, PS_TYPE_F32);
    188199
    189200            PS_ARRAY_ADD_SCALAR(job->args, maskVal, PS_TYPE_IMAGE_MASK);
     
    215226            } else {
    216227                psScalar *scalar = NULL;
    217                 scalar = job->args->data[7];
     228                scalar = job->args->data[8];
    218229                Nmoments += scalar->data.S32;
    219                 scalar = job->args->data[8];
     230                scalar = job->args->data[9];
    220231                Nfail += scalar->data.S32;
    221                 scalar = job->args->data[9];
     232                scalar = job->args->data[10];
    222233                Nfaint += scalar->data.S32;
    223234            }
     
    231242
    232243    psphotVisualShowMoments (sources);
     244
     245    // clear the mark bits
     246    // psImageMaskPixels (readout->mask, "AND", PS_NOT_IMAGE_MASK(markVal));
    233247
    234248    if (detections->allSources) {
     
    373387    float RADIUS                    = PS_SCALAR_VALUE(job->args->data[3],F32);
    374388    float SIGMA                     = PS_SCALAR_VALUE(job->args->data[4],F32);
    375 
    376     psImageMaskType maskVal         = PS_SCALAR_VALUE(job->args->data[5],PS_TYPE_IMAGE_MASK_DATA);
    377     psImageMaskType markVal         = PS_SCALAR_VALUE(job->args->data[6],PS_TYPE_IMAGE_MASK_DATA);
     389    float MIN_KRON_RADIUS           = PS_SCALAR_VALUE(job->args->data[5],F32);
     390
     391    psImageMaskType maskVal         = PS_SCALAR_VALUE(job->args->data[6],PS_TYPE_IMAGE_MASK_DATA);
     392    psImageMaskType markVal         = PS_SCALAR_VALUE(job->args->data[7],PS_TYPE_IMAGE_MASK_DATA);
    378393
    379394    // if no valid pixels, massive swing or very large Mrf, likely saturated source,
     
    431446        if (!(source->peak->type == PM_PEAK_SUSPECT_SATURATION)) {
    432447            // measure basic source moments (no S/N clipping on input pixels)
    433             status = pmSourceMoments (source, RADIUS, SIGMA, 0.0, maskVal);
     448            status = pmSourceMoments (source, RADIUS, SIGMA, 0.0, MIN_KRON_RADIUS, maskVal);
    434449        } else {
    435450            // For saturated stars, choose a much larger box NOTE this is slightly sleazy, but
     
    447462
    448463            psTrace ("psphot", 4, "retrying moments for %d, %d\n", source->peak->x, source->peak->y);
    449             status = pmSourceMoments (source, BIG_RADIUS, BIG_SIGMA, 0.0, maskVal);
     464            status = pmSourceMoments (source, BIG_RADIUS, BIG_SIGMA, 0.0, MIN_KRON_RADIUS, maskVal);
    450465            source->mode |= PM_SOURCE_MODE_BIG_RADIUS;
    451466        }
     
    456471            continue;
    457472        }
     473
     474        // XXX test of masking neighbors when measureing moments (does this fail?)
     475        // psEllipseMoments moments = {source->moments->Mxx, source->moments->Myy, source->moments->Mxy};
     476        // psEllipseAxes axes = psEllipseMomentsToAxes(moments, 20.0);
     477        // psImageMaskCircle (source->maskView, source->peak->x, source->peak->y, 3.0*axes.major, "OR", markVal);
     478
    458479        Nmoments ++;
    459480
     
    492513    float sigma[NSIGMA] = {1.0, 2.0, 3.0, 4.5, 6.0, 9.0, 12.0, 18.0};
    493514    float Sout[NSIGMA];
     515    float Rmin[NSIGMA];
    494516    int   Nout[NSIGMA]; // number of stars found in clump : use this to control the number of regions measured by psphotRoughClass
    495517
     
    513535
    514536            // measure basic source moments (no S/N clipping on input pixels)
    515             status = pmSourceMoments (source, 4*sigma[i], sigma[i], 0.0, maskVal);
     537            status = pmSourceMoments (source, 4*sigma[i], sigma[i], 0.0, 0.0, maskVal);
    516538        }
    517539
     
    524546        pmPSFClump psfClump = pmSourcePSFClump (NULL, NULL, sources, PSF_SN_LIM, PSF_CLUMP_GRID_SCALE, MOMENTS_SX_MAX, MOMENTS_SY_MAX, MOMENTS_AR_MAX);
    525547        psLogMsg ("psphot", 3, "radius %.1f, nStars: %d of %d in clump, nSigma: %5.2f, X,  Y: %f, %f (%f, %f)\n", sigma[i], psfClump.nStars, psfClump.nTotal, psfClump.nSigma, psfClump.X, psfClump.Y, sqrt(psfClump.X) / sigma[i], sqrt(psfClump.Y) / sigma[i]);
     548
     549        Rmin[i] = pmSourceMinKronRadius(sources, PSF_SN_LIM);
    526550
    527551#if 0
     
    549573    // we are looking for sigma for which Sout = 0.65 (or some other value)
    550574    int Nstars = 0;
     575    float minKronRadius = NAN;
    551576    float Sigma = NAN;
    552577    float minS = Sout[0];
     
    565590        Sigma = sigma[i] + (0.65 - Sout[i])*(sigma[i+1] - sigma[i])/(Sout[i+1] - Sout[i]);
    566591        Nstars = 0.5*(Nout[i] + Nout[i+1]);
     592        minKronRadius = Rmin[i] + (0.65 - Sout[i])*(Rmin[i+1] - Rmin[i])/(Sout[i+1] - Sout[i]);
    567593    }
    568594    psAssert (isfinite(Sigma), "did we miss a case?");
     
    575601    psMetadataAddF32(analysis, PS_LIST_TAIL, "PSF_MOMENTS_RADIUS", PS_META_REPLACE, "moments limit", 4.0*Sigma);
    576602    psMetadataAddF32(analysis, PS_LIST_TAIL, "PSF_CLUMP_NSTARS", PS_META_REPLACE, "number of stars in clump", Nstars);
    577 
    578     psLogMsg ("psphot", 3, "using window function with sigma = %f\n", Sigma);
     603    psMetadataAddF32(analysis, PS_LIST_TAIL, "MOMENTS_MIN_KRON", PS_META_REPLACE, "minimum Kron Radius", minKronRadius);
     604
     605    psLogMsg ("psphot", 3, "using window function with sigma = %f (Min Kron Radius = %f, Nstars = %d)\n", Sigma, minKronRadius, Nstars);
    579606    return true;
    580607}
Note: See TracChangeset for help on using the changeset viewer.