Changeset 17297 for trunk/psModules/src/imcombine/pmSubtractionMatch.c
- Timestamp:
- Apr 2, 2008, 3:57:59 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/psModules/src/imcombine/pmSubtractionMatch.c
r17295 r17297 101 101 psMaskType maskBlank, float badFrac, pmSubtractionMode mode) 102 102 { 103 PS_ASSERT_PTR_NON_NULL(conv1, false); 104 if (mode == PM_SUBTRACTION_MODE_DUAL) { 105 PS_ASSERT_PTR_NON_NULL(conv2, false); 106 } 107 PS_ASSERT_PTR_NON_NULL(ro1, false); 108 PS_ASSERT_IMAGE_NON_NULL(ro1->image, false); 109 PS_ASSERT_IMAGE_TYPE(ro1->image, PS_TYPE_F32, false); 110 if (ro1->mask) { 111 PS_ASSERT_IMAGE_NON_NULL(ro1->mask, false); 112 PS_ASSERT_IMAGE_TYPE(ro1->mask, PS_TYPE_MASK, false); 113 PS_ASSERT_IMAGES_SIZE_EQUAL(ro1->mask, ro1->image, false); 114 } 115 if (ro1->weight) { 116 PS_ASSERT_IMAGE_NON_NULL(ro1->weight, false); 117 PS_ASSERT_IMAGE_TYPE(ro1->weight, PS_TYPE_F32, false); 118 PS_ASSERT_IMAGES_SIZE_EQUAL(ro1->weight, ro1->image, false); 119 } 120 if (ro2) { 121 PS_ASSERT_IMAGE_NON_NULL(ro2->image, false); 122 PS_ASSERT_IMAGE_TYPE(ro2->image, PS_TYPE_F32, false); 123 PS_ASSERT_IMAGES_SIZE_EQUAL(ro2->image, ro1->image, false); 124 if (ro2->mask) { 125 PS_ASSERT_IMAGE_NON_NULL(ro2->mask, false); 126 PS_ASSERT_IMAGE_TYPE(ro2->mask, PS_TYPE_MASK, false); 127 PS_ASSERT_IMAGES_SIZE_EQUAL(ro2->mask, ro1->image, false); 128 } 129 if (ro2->weight) { 130 PS_ASSERT_IMAGE_NON_NULL(ro2->weight, false); 131 PS_ASSERT_IMAGE_TYPE(ro2->weight, PS_TYPE_F32, false); 132 PS_ASSERT_IMAGES_SIZE_EQUAL(ro2->weight, ro1->image, false); 133 } 134 } else if (!stampsName && !sources) { 135 psError(PS_ERR_UNEXPECTED_NULL, true, 136 "A list of sources is required for convolving to a target PSF."); 137 return false; 138 } 103 PM_ASSERT_READOUT_NON_NULL(conv1, false); 104 PM_ASSERT_READOUT_NON_NULL(conv2, false); 105 106 PM_ASSERT_READOUT_NON_NULL(ro1, false); 107 PM_ASSERT_READOUT_NON_NULL(ro2, false); 108 PM_ASSERT_READOUT_IMAGE(ro1, false); 109 PM_ASSERT_READOUT_IMAGE(ro2, false); 110 PS_ASSERT_IMAGES_SIZE_EQUAL(ro1->image, ro2->image, false); 111 139 112 PS_ASSERT_INT_NONNEGATIVE(footprint, false); 140 113 // regionSize can be just about anything (except maybe negative, but it can be NAN) … … 182 155 } 183 156 184 // Reset the output readout , just in case157 // Reset the output readouts, just in case 185 158 if (conv1->image) { 186 159 psFree(conv1->image); … … 195 168 conv1->weight = NULL; 196 169 } 170 if (conv2->image) { 171 psFree(conv2->image); 172 conv2->image = NULL; 173 } 174 if (conv2->mask) { 175 psFree(conv2->mask); 176 conv2->mask = NULL; 177 } 178 if (conv2->weight) { 179 psFree(conv2->weight); 180 conv2->weight = NULL; 181 } 197 182 198 183 // Where does our weight map come from? 184 // Getting the weight exactly right is not necessary --- it's just used for weighting. 199 185 psImage *weight = NULL; // Weight image to use 200 if (ro1->weight && ro2 && ro2->weight) {186 if (ro1->weight && ro2->weight) { 201 187 weight = (psImage*)psBinaryOp(NULL, ro1->weight, "+", ro2->weight); 202 188 } else if (ro1->weight) { 203 189 weight = psMemIncrRefCounter(ro1->weight); 204 } else if (ro2) { 205 if (ro2->weight) { 206 weight = psMemIncrRefCounter(ro2->weight); 207 } else { 208 weight = (psImage*)psBinaryOp(NULL, ro1->image, "+", ro2->image); 209 } 190 } else if (ro2->weight) { 191 weight = psMemIncrRefCounter(ro2->weight); 210 192 } else { 211 weight = psMemIncrRefCounter(ro1->image);193 weight = (psImage*)psBinaryOp(NULL, ro1->image, "+", ro2->image); 212 194 } 213 195 … … 218 200 pmSubtractionStampList *stamps = NULL; // Stamps for matching PSF 219 201 pmSubtractionKernels *kernels = NULL; // Kernel basis functions 202 220 203 int numCols = ro1->image->numCols, numRows = ro1->image->numRows; // Image dimensions 221 204 … … 272 255 } 273 256 274 if (mode == PM_SUBTRACTION_MODE_UNSURE || mode == PM_SUBTRACTION_MODE_TARGET) {257 if (mode == PM_SUBTRACTION_MODE_UNSURE) { 275 258 // Get backgrounds 276 259 psStats *bgStats = psStatsAlloc(BG_STAT); // Statistics for background … … 303 286 break; 304 287 case PM_SUBTRACTION_MODE_2: 305 if (mode == PM_SUBTRACTION_MODE_TARGET) {306 psError(PS_ERR_BAD_PARAMETER_VALUE, true,307 "Input PSF is larger than target PSF --- can't match image.");308 goto MATCH_ERROR;309 }310 288 psLogMsg("psModules.imcombine", PS_LOG_INFO, "Convolving image 2 to match image 1."); 311 289 break; … … 334 312 // Add analysis metadata 335 313 { 336 psMetadataAddPtr(conv1->analysis, PS_LIST_TAIL, PM_SUBTRACTION_ANALYSIS_KERNEL, 337 PS_DATA_UNKNOWN | PS_META_DUPLICATE_OK, "Subtraction kernels", kernels); 338 if (conv2) { 339 psMetadataAddPtr(conv2->analysis, PS_LIST_TAIL, PM_SUBTRACTION_ANALYSIS_KERNEL, 340 PS_DATA_UNKNOWN | PS_META_DUPLICATE_OK, "Subtraction kernels", kernels); 341 } 342 psMetadataAddS32(conv1->analysis, PS_LIST_TAIL, PM_SUBTRACTION_ANALYSIS_MODE, 343 PS_META_DUPLICATE_OK, "Subtraction kernels", mode); 344 if (conv2) { 345 psMetadataAddS32(conv2->analysis, PS_LIST_TAIL, PM_SUBTRACTION_ANALYSIS_MODE, 346 PS_META_DUPLICATE_OK, "Subtraction kernels", mode); 347 } 348 psRegion *subRegion; 314 psRegion *subRegion; // Region over which subtraction was performed 349 315 if (region) { 350 316 subRegion = psMemIncrRefCounter(region); … … 352 318 subRegion = psRegionAlloc(0, numCols, 0, numRows); 353 319 } 354 psMetadataAddPtr(conv1->analysis, PS_LIST_TAIL, PM_SUBTRACTION_ANALYSIS_REGION, 355 PS_DATA_REGION | PS_META_DUPLICATE_OK, 356 "Region over which subtraction was performed", subRegion); 357 if (conv2) { 320 321 if (mode == PM_SUBTRACTION_MODE_1 || mode == PM_SUBTRACTION_MODE_DUAL) { 322 psMetadataAddPtr(conv1->analysis, PS_LIST_TAIL, PM_SUBTRACTION_ANALYSIS_KERNEL, 323 PS_DATA_UNKNOWN | PS_META_DUPLICATE_OK, "Subtraction kernels", kernels); 324 psMetadataAddS32(conv1->analysis, PS_LIST_TAIL, PM_SUBTRACTION_ANALYSIS_MODE, 325 PS_META_DUPLICATE_OK, "Subtraction kernels", mode); 326 psMetadataAddPtr(conv1->analysis, PS_LIST_TAIL, PM_SUBTRACTION_ANALYSIS_REGION, 327 PS_DATA_REGION | PS_META_DUPLICATE_OK, 328 "Region over which subtraction was performed", subRegion); 329 } 330 if (mode == PM_SUBTRACTION_MODE_2 || mode == PM_SUBTRACTION_MODE_DUAL) { 331 psMetadataAddPtr(conv2->analysis, PS_LIST_TAIL, PM_SUBTRACTION_ANALYSIS_KERNEL, 332 PS_DATA_UNKNOWN | PS_META_DUPLICATE_OK, "Subtraction kernels", kernels); 333 psMetadataAddS32(conv2->analysis, PS_LIST_TAIL, PM_SUBTRACTION_ANALYSIS_MODE, 334 PS_META_DUPLICATE_OK, "Subtraction kernels", mode); 358 335 psMetadataAddPtr(conv2->analysis, PS_LIST_TAIL, PM_SUBTRACTION_ANALYSIS_REGION, 359 336 PS_DATA_REGION | PS_META_DUPLICATE_OK,
Note:
See TracChangeset
for help on using the changeset viewer.
