- Timestamp:
- May 29, 2012, 4:55:13 PM (14 years ago)
- Location:
- branches/eam_branches/ipp-20120405/psModules
- Files:
-
- 2 edited
-
. (modified) (1 prop)
-
src/objects/pmSourcePhotometry.c (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branches/ipp-20120405/psModules
- Property svn:mergeinfo changed
/branches/eam_branches/ipp-20111122/psModules merged: 33044,33085,33087,33096,33638
- Property svn:mergeinfo changed
-
branches/eam_branches/ipp-20120405/psModules/src/objects/pmSourcePhotometry.c
r32998 r33947 899 899 } 900 900 901 double pmSourceModelWeight(const pmSource *Mi, int term, const bool unweighted_sum, const float covarFactor, psImageMaskType maskVal)901 double pmSourceModelWeight(const pmSource *Mi, int term, const pmSourceFitVarMode fitVarMode, const float covarFactor, psImageMaskType maskVal) 902 902 { 903 903 PS_ASSERT_PTR_NON_NULL(Mi, NAN); 904 double flux = 0, wt = 0, factor = 0;904 double flux = 0, wt = 1.0, factor = 0; 905 905 906 906 const psImage *Pi = Mi->modelFlux; 907 907 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 912 925 const psImage *Ti = Mi->maskObj; 913 926 assert (Ti != NULL); … … 915 928 for (int yi = 0; yi < Pi->numRows; yi++) { 916 929 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) { 920 932 wt = covarFactor * Wi->data.F32[yi][xi]; 921 if (wt == 0) 922 continue; 933 if (wt == 0) continue; 923 934 } 924 935 … … 937 948 } 938 949 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; 944 952 } 945 953 } … … 947 955 } 948 956 949 double pmSourceModelDotModel (const pmSource *Mi, const pmSource *Mj, const bool unweighted_sum, const float covarFactor, psImageMaskType maskVal)957 double pmSourceModelDotModel (const pmSource *Mi, const pmSource *Mj, const pmSourceFitVarMode fitVarMode, const float covarFactor, psImageMaskType maskVal) 950 958 { 951 959 PS_ASSERT_PTR_NON_NULL(Mi, NAN); … … 962 970 assert (Pj != NULL); 963 971 964 const psImage *Wi = Mi->variance; 965 if (!unweighted_sum) { 966 assert (Wi != NULL); 967 } 972 const psImage *Wi = NULL; 973 switch (fitVarMode) { 974 case PM_SOURCE_PHOTFIT_CONST: 975 break; 976 case PM_SOURCE_PHOTFIT_IMAGE_VAR: 977 Wi = Mi->variance; 978 psAssert (Wi, "programming error"); 979 break; 980 case PM_SOURCE_PHOTFIT_MODEL_VAR: 981 Wi = Mi->modelVar; 982 psAssert (Wi, "programming error"); 983 break; 984 case PM_SOURCE_PHOTFIT_NONE: 985 psAbort("programming error"); 986 } 968 987 969 988 const psImage *Ti = Mi->maskObj; … … 995 1014 continue; 996 1015 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 { 1016 float value = (Pi->data.F32[yi][xi] * Pj->data.F32[yj][xj]); 1017 switch (fitVarMode) { 1018 case PM_SOURCE_PHOTFIT_CONST: 1019 wt = 1.0; 1020 break; 1021 case PM_SOURCE_PHOTFIT_IMAGE_VAR: 1022 case PM_SOURCE_PHOTFIT_MODEL_VAR: 1001 1023 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 } 1024 break; 1025 case PM_SOURCE_PHOTFIT_NONE: 1026 psAbort("programming error"); 1027 } 1028 // skip pixels with nonsense weight values 1029 if (wt <= 0) continue; 1030 1031 flux += value / wt; 1006 1032 } 1007 1033 } … … 1009 1035 } 1010 1036 1011 double pmSourceDataDotModel (const pmSource *Mi, const pmSource *Mj, const bool unweighted_sum, const float covarFactor, psImageMaskType maskVal)1037 double pmSourceDataDotModel (const pmSource *Mi, const pmSource *Mj, const pmSourceFitVarMode fitVarMode, const float covarFactor, psImageMaskType maskVal) 1012 1038 { 1013 1039 PS_ASSERT_PTR_NON_NULL(Mi, NAN); … … 1024 1050 assert (Pj != NULL); 1025 1051 1026 const psImage *Wi = Mi->variance; 1027 if (!unweighted_sum) { 1028 assert (Wi != NULL); 1029 } 1052 const psImage *Wi = NULL; 1053 switch (fitVarMode) { 1054 case PM_SOURCE_PHOTFIT_CONST: 1055 break; 1056 case PM_SOURCE_PHOTFIT_IMAGE_VAR: 1057 Wi = Mi->variance; 1058 psAssert (Wi, "programming error"); 1059 break; 1060 case PM_SOURCE_PHOTFIT_MODEL_VAR: 1061 Wi = Mi->modelVar; 1062 psAssert (Wi, "programming error"); 1063 break; 1064 case PM_SOURCE_PHOTFIT_NONE: 1065 psAbort("programming error"); 1066 } 1030 1067 1031 1068 const psImage *Ti = Mi->maskObj; … … 1057 1094 continue; 1058 1095 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 { 1096 float value = (Pi->data.F32[yi][xi] * Pj->data.F32[yj][xj]); 1097 switch (fitVarMode) { 1098 case PM_SOURCE_PHOTFIT_CONST: 1099 wt = 1.0; 1100 break; 1101 case PM_SOURCE_PHOTFIT_IMAGE_VAR: 1102 case PM_SOURCE_PHOTFIT_MODEL_VAR: 1063 1103 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 } 1104 break; 1105 case PM_SOURCE_PHOTFIT_NONE: 1106 psAbort("programming error"); 1107 } 1108 // skip pixels with nonsense weight values 1109 if (wt <= 0) continue; 1110 1111 flux += value / wt; 1112 1068 1113 } 1069 1114 }
Note:
See TracChangeset
for help on using the changeset viewer.
