IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 30931


Ignore:
Timestamp:
Mar 16, 2011, 1:32:43 PM (15 years ago)
Author:
eugene
Message:

create a single test function (pmSourcePositionUseMoments) to check if we should use the moments or peaks for source positions

Location:
branches/eam_branches/ipp-20110213/psModules/src/objects
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/ipp-20110213/psModules/src/objects/pmSourceIO_CMF_PS1_DV1.c

    r30763 r30931  
    292292
    293293        source->moments = pmMomentsAlloc ();
     294        source->moments->Mx = source->peak->xf; // we don't have both Mx,My and xf,yf in the cmf
     295        source->moments->My = source->peak->yf; // we don't have both Mx,My and xf,yf in the cmf
     296
    294297        source->moments->Mxx = psMetadataLookupF32 (&status, row, "MOMENTS_XX");
    295298        source->moments->Mxy = psMetadataLookupF32 (&status, row, "MOMENTS_XY");
  • branches/eam_branches/ipp-20110213/psModules/src/objects/pmSourceIO_CMF_PS1_DV2.c

    r30763 r30931  
    311311
    312312        source->moments = pmMomentsAlloc ();
     313        source->moments->Mx = source->peak->xf; // we don't have both Mx,My and xf,yf in the cmf
     314        source->moments->My = source->peak->yf; // we don't have both Mx,My and xf,yf in the cmf
     315
    313316        source->moments->Mxx = psMetadataLookupF32 (&status, row, "MOMENTS_XX");
    314317        source->moments->Mxy = psMetadataLookupF32 (&status, row, "MOMENTS_XY");
  • branches/eam_branches/ipp-20110213/psModules/src/objects/pmSourceIO_CMF_PS1_SV1.c

    r30775 r30931  
    310310
    311311        source->moments = pmMomentsAlloc ();
     312        source->moments->Mx = source->peak->xf; // we don't have both Mx,My and xf,yf in the cmf
     313        source->moments->My = source->peak->yf; // we don't have both Mx,My and xf,yf in the cmf
     314
    312315        source->moments->Mxx = psMetadataLookupF32 (&status, row, "MOMENTS_XX");
    313316        source->moments->Mxy = psMetadataLookupF32 (&status, row, "MOMENTS_XY");
     
    753756            assert (radialAper);
    754757
    755             bool useMoments = true;
    756             useMoments = (useMoments && source->moments);          // can't if there are no moments
    757             useMoments = (useMoments && source->moments->nPixels); // can't if the moments were not measured
    758             useMoments = (useMoments && !(source->mode && PM_SOURCE_MODE_MOMENTS_FAILURE)); // can't if the moments failed...
    759 
    760             if (useMoments) {
     758            if (pmSourcePositionUseMoments(source)) {
    761759                xPos = source->moments->Mx;
    762760                yPos = source->moments->My;
  • branches/eam_branches/ipp-20110213/psModules/src/objects/pmSourceIO_CMF_PS1_V1.c

    r30763 r30931  
    277277
    278278        source->moments = pmMomentsAlloc ();
     279        source->moments->Mx = source->peak->xf; // we don't have both Mx,My and xf,yf in the cmf
     280        source->moments->My = source->peak->yf; // we don't have both Mx,My and xf,yf in the cmf
     281
    279282        source->moments->Mxx = psMetadataLookupF32 (&status, row, "MOMENTS_XX");
    280283        source->moments->Mxy = psMetadataLookupF32 (&status, row, "MOMENTS_XY");
  • branches/eam_branches/ipp-20110213/psModules/src/objects/pmSourceIO_CMF_PS1_V2.c

    r30763 r30931  
    283283
    284284        source->moments = pmMomentsAlloc ();
     285        source->moments->Mx = source->peak->xf; // we don't have both Mx,My and xf,yf in the cmf
     286        source->moments->My = source->peak->yf; // we don't have both Mx,My and xf,yf in the cmf
     287
    285288        source->moments->Mxx = psMetadataLookupF32 (&status, row, "MOMENTS_XX");
    286289        source->moments->Mxy = psMetadataLookupF32 (&status, row, "MOMENTS_XY");
  • branches/eam_branches/ipp-20110213/psModules/src/objects/pmSourceIO_CMF_PS1_V3.c

    r30865 r30931  
    307307
    308308        source->moments = pmMomentsAlloc ();
     309        source->moments->Mx = source->peak->xf; // we don't have both Mx,My and xf,yf in the cmf
     310        source->moments->My = source->peak->yf; // we don't have both Mx,My and xf,yf in the cmf
     311
    309312        source->moments->Mxx = psMetadataLookupF32 (&status, row, "MOMENTS_XX");
    310313        source->moments->Mxy = psMetadataLookupF32 (&status, row, "MOMENTS_XY");
  • branches/eam_branches/ipp-20110213/psModules/src/objects/pmSourceOutputs.c

    r30865 r30931  
    7777}
    7878
     79// what is the correct postion?
     80// * if we have a PSF model fit, use PM_PAR_XPOS,YPOS for X_PSF,Y_PSF
     81// * if we do not have a model:
     82// ** if we have moments:
     83// *** if the star is saturated, use the moments
     84// *** if the moments and peak agree to < DR, use the moments
     85// *** otherwise, use the peak
     86
    7987bool pmSourceOutputsSetValues (pmSourceOutputs *outputs, pmSource *source, pmChip *chip, float fwhmMajor, float fwhmMinor, float magOffset) {
    8088
     
    112120        outputs->apRadius = source->apRadius;
    113121    } else {
    114         bool useMoments = true;
    115         useMoments = (useMoments && source->moments);          // can't if there are no moments
    116         useMoments = (useMoments && source->moments->nPixels); // can't if the moments were not measured
    117         useMoments = (useMoments && !(source->mode && PM_SOURCE_MODE_MOMENTS_FAILURE)); // can't if the moments failed...
     122        bool useMoments = pmSourcePositionUseMoments(source);
    118123
    119124        if (useMoments) {
     
    175180    return true;
    176181}
     182
     183// this function decides if the source position should be based on the peak or the moments.
     184// this is only used if we know we should not use a model fit position (eg, no model, or no
     185// model yet)
     186bool pmSourcePositionUseMoments(pmSource *source) {
     187
     188    if (!source->moments) return false;          // can't if there are no moments
     189    if (!source->moments->nPixels) return false; // can't if the moments were not measured
     190    if (source->mode && PM_SOURCE_MODE_MOMENTS_FAILURE) return false; // can't if the moments failed...
     191
     192    if (source->mode & PM_SOURCE_MODE_SATSTAR) return true; // moments are best for SATSTARs
     193
     194    float dX = source->moments->Mx - source->peak->xf;
     195    float dY = source->moments->My - source->peak->yf;
     196    float dR = hypot(dX, dY);
     197   
     198    // only use the moments position if the moment-peak offset is small or the star is saturated
     199    if (dR > 1.5) return false
     200
     201    return true;
     202}
  • branches/eam_branches/ipp-20110213/psModules/src/objects/pmSourceOutputs.h

    r30865 r30931  
    6060bool pmSourceOutputsSetMoments (pmSourceOutputsMoments *moments, pmSource *source);
    6161
     62bool pmSourcePositionUseMoments(pmSource *source);
     63
    6264# endif
Note: See TracChangeset for help on using the changeset viewer.