IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
May 30, 2012, 1:46:12 PM (14 years ago)
Author:
eugene
Message:

merge changes from eam_branches/ipp-20120405

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk

  • trunk/psModules

  • trunk/psModules/src/objects/pmSourcePhotometry.c

    r32998 r33963  
    899899}
    900900
    901 double pmSourceModelWeight(const pmSource *Mi, int term, const bool unweighted_sum, const float covarFactor, psImageMaskType maskVal)
     901double pmSourceModelWeight(const pmSource *Mi, int term, const pmSourceFitVarMode fitVarMode, const float covarFactor, psImageMaskType maskVal)
    902902{
    903903    PS_ASSERT_PTR_NON_NULL(Mi, NAN);
    904     double flux = 0, wt = 0, factor = 0;
     904    double flux = 0, wt = 1.0, factor = 0;
    905905
    906906    const psImage *Pi = Mi->modelFlux;
    907907    assert (Pi != NULL);
    908     const psImage *Wi = Mi->variance;
    909     if (!unweighted_sum) {
    910         assert (Wi != NULL);
    911     }
     908
     909    const psImage *Wi = NULL;
     910    switch (fitVarMode) {
     911      case PM_SOURCE_PHOTFIT_CONST:
     912        break;
     913      case PM_SOURCE_PHOTFIT_IMAGE_VAR:
     914        Wi = Mi->variance;
     915        psAssert (Wi, "programming error");
     916        break;
     917      case PM_SOURCE_PHOTFIT_MODEL_VAR:
     918        Wi = Mi->modelVar;
     919        psAssert (Wi, "programming error");
     920        break;
     921      case PM_SOURCE_PHOTFIT_NONE:
     922        psAbort("programming error");
     923    }   
     924
    912925    const psImage *Ti = Mi->maskObj;
    913926    assert (Ti != NULL);
     
    915928    for (int yi = 0; yi < Pi->numRows; yi++) {
    916929        for (int xi = 0; xi < Pi->numCols; xi++) {
    917             if (Ti->data.PS_TYPE_IMAGE_MASK_DATA[yi][xi] & maskVal)
    918                 continue;
    919             if (!unweighted_sum) {
     930            if (Ti->data.PS_TYPE_IMAGE_MASK_DATA[yi][xi] & maskVal) continue;
     931            if (fitVarMode != PM_SOURCE_PHOTFIT_CONST) {
    920932                wt = covarFactor * Wi->data.F32[yi][xi];
    921                 if (wt == 0)
    922                     continue;
     933                if (wt == 0) continue;
    923934            }
    924935
     
    937948            }
    938949
    939             if (unweighted_sum) {
    940                 flux += (factor * Pi->data.F32[yi][xi]);
    941             } else {
    942                 flux += (factor * Pi->data.F32[yi][xi]) / wt;
    943             }
     950            // wt is 1.0 for CONST
     951            flux += (factor * Pi->data.F32[yi][xi]) / wt;
    944952        }
    945953    }
     
    947955}
    948956
    949 double pmSourceModelDotModel (const pmSource *Mi, const pmSource *Mj, const bool unweighted_sum, const float covarFactor, psImageMaskType maskVal)
     957double pmSourceModelDotModel (const pmSource *Mi, const pmSource *Mj, const pmSourceFitVarMode fitVarMode, const float covarFactor, psImageMaskType maskVal)
    950958{
    951959    PS_ASSERT_PTR_NON_NULL(Mi, NAN);
     
    955963    int xIs, xJs, yIs, yJs;
    956964    int xIe, yIe;
    957     double flux, wt;
     965    double flux;
     966    double wt = 1.0;
    958967
    959968    const psImage *Pi = Mi->modelFlux;
     
    962971    assert (Pj != NULL);
    963972
    964     const psImage *Wi = Mi->variance;
    965     if (!unweighted_sum) {
    966         assert (Wi != NULL);
    967     }
     973    const psImage *Wi = NULL;
     974    switch (fitVarMode) {
     975      case PM_SOURCE_PHOTFIT_CONST:
     976        break;
     977      case PM_SOURCE_PHOTFIT_IMAGE_VAR:
     978        Wi = Mi->variance;
     979        psAssert (Wi, "programming error");
     980        break;
     981      case PM_SOURCE_PHOTFIT_MODEL_VAR:
     982        Wi = Mi->modelVar;
     983        psAssert (Wi, "programming error");
     984        break;
     985      case PM_SOURCE_PHOTFIT_NONE:
     986        psAbort("programming error");
     987    }   
    968988
    969989    const psImage *Ti = Mi->maskObj;
     
    9951015                continue;
    9961016
    997             // XXX skip the nonsense weight pixels?
    998             if (unweighted_sum) {
    999                 flux += (Pi->data.F32[yi][xi] * Pj->data.F32[yj][xj]);
    1000             } else {
     1017            float value = (Pi->data.F32[yi][xi] * Pj->data.F32[yj][xj]);
     1018            switch (fitVarMode) {
     1019              case PM_SOURCE_PHOTFIT_CONST:
     1020                wt = 1.0;
     1021                break;
     1022              case PM_SOURCE_PHOTFIT_IMAGE_VAR:
     1023              case PM_SOURCE_PHOTFIT_MODEL_VAR:
    10011024                wt = covarFactor * Wi->data.F32[yi][xi];
    1002                 if (wt > 0) {
    1003                     flux += (Pi->data.F32[yi][xi] * Pj->data.F32[yj][xj]) / wt;
    1004                 }
    1005             }
     1025                break;
     1026              case PM_SOURCE_PHOTFIT_NONE:
     1027                psAbort("programming error");
     1028            }
     1029            // skip pixels with nonsense weight values
     1030            if (wt <= 0) continue;
     1031
     1032            flux += value / wt;
    10061033        }
    10071034    }
     
    10091036}
    10101037
    1011 double pmSourceDataDotModel (const pmSource *Mi, const pmSource *Mj, const bool unweighted_sum, const float covarFactor, psImageMaskType maskVal)
     1038double pmSourceDataDotModel (const pmSource *Mi, const pmSource *Mj, const pmSourceFitVarMode fitVarMode, const float covarFactor, psImageMaskType maskVal)
    10121039{
    10131040    PS_ASSERT_PTR_NON_NULL(Mi, NAN);
     
    10171044    int xIs, xJs, yIs, yJs;
    10181045    int xIe, yIe;
    1019     double flux, wt;
     1046    double flux;
     1047    double wt = 1.0;
    10201048
    10211049    const psImage *Pi = Mi->pixels;
     
    10241052    assert (Pj != NULL);
    10251053
    1026     const psImage *Wi = Mi->variance;
    1027     if (!unweighted_sum) {
    1028         assert (Wi != NULL);
    1029     }
     1054    const psImage *Wi = NULL;
     1055    switch (fitVarMode) {
     1056      case PM_SOURCE_PHOTFIT_CONST:
     1057        break;
     1058      case PM_SOURCE_PHOTFIT_IMAGE_VAR:
     1059        Wi = Mi->variance;
     1060        psAssert (Wi, "programming error");
     1061        break;
     1062      case PM_SOURCE_PHOTFIT_MODEL_VAR:
     1063        Wi = Mi->modelVar;
     1064        psAssert (Wi, "programming error");
     1065        break;
     1066      case PM_SOURCE_PHOTFIT_NONE:
     1067        psAbort("programming error");
     1068    }   
    10301069
    10311070    const psImage *Ti = Mi->maskObj;
     
    10571096                continue;
    10581097
    1059             // XXX skip the nonsense weight pixels?
    1060             if (unweighted_sum) {
    1061                 flux += (Pi->data.F32[yi][xi] * Pj->data.F32[yj][xj]);
    1062             } else {
     1098            float value = (Pi->data.F32[yi][xi] * Pj->data.F32[yj][xj]);
     1099            switch (fitVarMode) {
     1100              case PM_SOURCE_PHOTFIT_CONST:
     1101                wt = 1.0;
     1102                break;
     1103              case PM_SOURCE_PHOTFIT_IMAGE_VAR:
     1104              case PM_SOURCE_PHOTFIT_MODEL_VAR:
    10631105                wt = covarFactor * Wi->data.F32[yi][xi];
    1064                 if (wt > 0) {
    1065                     flux += (Pi->data.F32[yi][xi] * Pj->data.F32[yj][xj]) / wt;
    1066                 }
    1067             }
     1106                break;
     1107              case PM_SOURCE_PHOTFIT_NONE:
     1108                psAbort("programming error");
     1109            }
     1110            // skip pixels with nonsense weight values
     1111            if (wt <= 0) continue;
     1112
     1113            flux += value / wt;
     1114
    10681115        }
    10691116    }
Note: See TracChangeset for help on using the changeset viewer.