Changeset 19164 for trunk/psModules/src/imcombine/pmSubtractionMatch.c
- Timestamp:
- Aug 22, 2008, 12:45:36 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/psModules/src/imcombine/pmSubtractionMatch.c
r18962 r19164 121 121 int inner, int ringsOrder, int binning, float penalty, 122 122 bool optimum, const psVector *optFWHMs, int optOrder, float optThreshold, 123 int iter, float rej, psMaskType mask Bad, psMaskType maskBlank,124 float badFrac, pmSubtractionMode mode)123 int iter, float rej, psMaskType maskVal, psMaskType maskBad, psMaskType maskPoor, 124 float poorFrac, float badFrac, pmSubtractionMode subMode) 125 125 { 126 if ( mode != PM_SUBTRACTION_MODE_2) {126 if (subMode != PM_SUBTRACTION_MODE_2) { 127 127 PM_ASSERT_READOUT_NON_NULL(conv1, false); 128 128 if (conv1->image) { … … 139 139 } 140 140 } 141 if ( mode != PM_SUBTRACTION_MODE_1) {141 if (subMode != PM_SUBTRACTION_MODE_1) { 142 142 PM_ASSERT_READOUT_NON_NULL(conv2, false); 143 143 if (conv2->image) { … … 190 190 PS_ASSERT_INT_POSITIVE(iter, false); 191 191 PS_ASSERT_FLOAT_LARGER_THAN(rej, 0.0, false); 192 // Don't care about maskVal 192 193 // Don't care about maskBad 193 // Don't care about maskBlank 194 // Don't care about maskPoor 195 PS_ASSERT_FLOAT_LARGER_THAN(poorFrac, 0.0, NULL); 196 PS_ASSERT_FLOAT_LESS_THAN_OR_EQUAL(poorFrac, 1.0, NULL); 194 197 if (isfinite(badFrac)) { 195 198 PS_ASSERT_FLOAT_LARGER_THAN(badFrac, 0.0, NULL); … … 230 233 memCheck("start"); 231 234 232 subMask = pmSubtractionMask(ro1->mask, ro2 ? ro2->mask : NULL, mask Bad, size, footprint,235 subMask = pmSubtractionMask(ro1->mask, ro2 ? ro2->mask : NULL, maskVal, size, footprint, 233 236 badFrac, useFFT); 234 237 if (!subMask) { … … 267 270 if (sources) { 268 271 stamps = pmSubtractionStampsSetFromSources(sources, subMask, region, footprint, 269 stampSpacing, mode);272 stampSpacing, subMode); 270 273 } else if (stampsName && strlen(stampsName) > 0) { 271 274 stamps = pmSubtractionStampsSetFromFile(stampsName, ro1->image, subMask, region, footprint, 272 stampSpacing, mode);275 stampSpacing, subMode); 273 276 } 274 277 … … 276 279 // doesn't matter. 277 280 if (!getStamps(&stamps, ro1, ro2, subMask, weight, NULL, threshold, stampSpacing, 278 size, footprint, mode)) {281 size, footprint, subMode)) { 279 282 goto MATCH_ERROR; 280 283 } 281 284 282 if ( mode == PM_SUBTRACTION_MODE_UNSURE) {285 if (subMode == PM_SUBTRACTION_MODE_UNSURE) { 283 286 // Get backgrounds 284 287 psStats *bgStats = psStatsAlloc(BG_STAT); // Statistics for background 285 288 psRandom *rng = psRandomAlloc(PS_RANDOM_TAUS, 0); // Random number generator 286 289 psVector *buffer = NULL;// Buffer for stats 287 if (!psImageBackground(bgStats, &buffer, ro1->image, ro1->mask, mask Bad, rng)) {290 if (!psImageBackground(bgStats, &buffer, ro1->image, ro1->mask, maskVal, rng)) { 288 291 psError(PS_ERR_UNKNOWN, false, "Unable to measure background of image 1."); 289 292 psFree(bgStats); … … 293 296 } 294 297 float bg1 = psStatsGetValue(bgStats, BG_STAT); // Background for image 1 295 if (!psImageBackground(bgStats, &buffer, ro2->image, ro2->mask, mask Bad, rng)) {298 if (!psImageBackground(bgStats, &buffer, ro2->image, ro2->mask, maskVal, rng)) { 296 299 psError(PS_ERR_UNKNOWN, false, "Unable to measure background of image 2."); 297 300 psFree(bgStats); … … 317 320 goto MATCH_ERROR; 318 321 } 319 mode = newMode;322 subMode = newMode; 320 323 } 321 324 … … 323 326 if (optimum && (type == PM_SUBTRACTION_KERNEL_ISIS || type == PM_SUBTRACTION_KERNEL_GUNK)) { 324 327 kernels = pmSubtractionKernelsOptimumISIS(type, size, inner, spatialOrder, optFWHMs, optOrder, 325 stamps, footprint, optThreshold, penalty, mode);328 stamps, footprint, optThreshold, penalty, subMode); 326 329 if (!kernels) { 327 330 psErrorClear(); … … 332 335 // Not an ISIS/GUNK kernel, or the optimum kernel search failed 333 336 kernels = pmSubtractionKernelsGenerate(type, size, spatialOrder, isisWidths, isisOrders, 334 inner, binning, ringsOrder, penalty, mode);337 inner, binning, ringsOrder, penalty, subMode); 335 338 } 336 339 … … 344 347 } 345 348 346 if ( mode == PM_SUBTRACTION_MODE_1 || mode == PM_SUBTRACTION_MODE_DUAL) {349 if (subMode == PM_SUBTRACTION_MODE_1 || subMode == PM_SUBTRACTION_MODE_DUAL) { 347 350 psMetadataAddPtr(conv1->analysis, PS_LIST_TAIL, PM_SUBTRACTION_ANALYSIS_KERNEL, 348 351 PS_DATA_UNKNOWN | PS_META_DUPLICATE_OK, "Subtraction kernels", kernels); 349 352 psMetadataAddS32(conv1->analysis, PS_LIST_TAIL, PM_SUBTRACTION_ANALYSIS_MODE, 350 PS_META_DUPLICATE_OK, "Subtraction kernels", mode);353 PS_META_DUPLICATE_OK, "Subtraction kernels", subMode); 351 354 psMetadataAddPtr(conv1->analysis, PS_LIST_TAIL, PM_SUBTRACTION_ANALYSIS_REGION, 352 355 PS_DATA_REGION | PS_META_DUPLICATE_OK, 353 356 "Region over which subtraction was performed", subRegion); 354 357 } 355 if ( mode == PM_SUBTRACTION_MODE_2 || mode == PM_SUBTRACTION_MODE_DUAL) {358 if (subMode == PM_SUBTRACTION_MODE_2 || subMode == PM_SUBTRACTION_MODE_DUAL) { 356 359 psMetadataAddPtr(conv2->analysis, PS_LIST_TAIL, PM_SUBTRACTION_ANALYSIS_KERNEL, 357 360 PS_DATA_UNKNOWN | PS_META_DUPLICATE_OK, "Subtraction kernels", kernels); 358 361 psMetadataAddS32(conv2->analysis, PS_LIST_TAIL, PM_SUBTRACTION_ANALYSIS_MODE, 359 PS_META_DUPLICATE_OK, "Subtraction kernels", mode);362 PS_META_DUPLICATE_OK, "Subtraction kernels", subMode); 360 363 psMetadataAddPtr(conv2->analysis, PS_LIST_TAIL, PM_SUBTRACTION_ANALYSIS_REGION, 361 364 PS_DATA_REGION | PS_META_DUPLICATE_OK, … … 374 377 375 378 if (!getStamps(&stamps, ro1, ro2, subMask, weight, region, threshold, stampSpacing, 376 size, footprint, mode)) {379 size, footprint, subMode)) { 377 380 goto MATCH_ERROR; 378 381 } … … 434 437 stamps = NULL; 435 438 436 if ( mode == PM_SUBTRACTION_MODE_1 || mode == PM_SUBTRACTION_MODE_DUAL) {439 if (subMode == PM_SUBTRACTION_MODE_1 || subMode == PM_SUBTRACTION_MODE_DUAL) { 437 440 psMetadataAddS32(conv1->analysis, PS_LIST_TAIL, PM_SUBTRACTION_ANALYSIS_STAMPS_NUM, 438 441 PS_META_DUPLICATE_OK, "Number of good stamps", numStamps); … … 440 443 PS_META_DUPLICATE_OK, "RMS deviation of stamps", rmsStamps); 441 444 } 442 if ( mode == PM_SUBTRACTION_MODE_2 || mode == PM_SUBTRACTION_MODE_DUAL) {445 if (subMode == PM_SUBTRACTION_MODE_2 || subMode == PM_SUBTRACTION_MODE_DUAL) { 443 446 psMetadataAddS32(conv2->analysis, PS_LIST_TAIL, PM_SUBTRACTION_ANALYSIS_STAMPS_NUM, 444 447 PS_META_DUPLICATE_OK, "Number of good stamps", numStamps); … … 454 457 int fullSize = 2 * size + 1 + 1; // Full size of kernel 455 458 int imageSize = (2 * KERNEL_MOSAIC + 1) * fullSize; 456 psImage *convKernels = psImageAlloc(( mode == PM_SUBTRACTION_MODE_DUAL ? 2 : 1) *459 psImage *convKernels = psImageAlloc((subMode == PM_SUBTRACTION_MODE_DUAL ? 2 : 1) * 457 460 imageSize - 1 + 458 ( mode == PM_SUBTRACTION_MODE_DUAL ? 4 : 0),461 (subMode == PM_SUBTRACTION_MODE_DUAL ? 4 : 0), 459 462 imageSize - 1, PS_TYPE_F32); 460 463 psImageInit(convKernels, NAN); … … 479 482 psFree(kernel); 480 483 481 if ( mode == PM_SUBTRACTION_MODE_DUAL) {484 if (subMode == PM_SUBTRACTION_MODE_DUAL) { 482 485 kernel = pmSubtractionKernelImage(kernels, (float)i / (float)KERNEL_MOSAIC, 483 486 (float)j / (float)KERNEL_MOSAIC, … … 534 537 535 538 psTrace("psModules.imcombine", 2, "Convolving...\n"); 536 if (!pmSubtractionConvolve(conv1, conv2, ro1, ro2, subMask, maskB lank, region, kernels,537 true, useFFT)) {539 if (!pmSubtractionConvolve(conv1, conv2, ro1, ro2, subMask, maskBad, maskPoor, poorFrac, 540 region, kernels, true, useFFT)) { 538 541 psError(PS_ERR_UNKNOWN, false, "Unable to convolve image."); 539 542 goto MATCH_ERROR; … … 541 544 542 545 // Set the variance factors 543 switch ( mode) {546 switch (subMode) { 544 547 case PM_SUBTRACTION_MODE_1: { 545 548 recordVarianceFactor(conv1, pmSubtractionVarianceFactor(kernels, 0.5, 0.5, false), … … 565 568 566 569 // There is data in the readout now 567 if ( mode == PM_SUBTRACTION_MODE_1 || mode == PM_SUBTRACTION_MODE_DUAL) {570 if (subMode == PM_SUBTRACTION_MODE_1 || subMode == PM_SUBTRACTION_MODE_DUAL) { 568 571 conv1->data_exists = true; 569 572 if (conv1->parent) { … … 572 575 } 573 576 } 574 if ( mode == PM_SUBTRACTION_MODE_2 || mode == PM_SUBTRACTION_MODE_DUAL) {577 if (subMode == PM_SUBTRACTION_MODE_2 || subMode == PM_SUBTRACTION_MODE_DUAL) { 575 578 conv2->data_exists = true; 576 579 if (conv2->parent) { … … 590 593 weight = NULL; 591 594 592 if (!pmSubtractionBorder(conv1->image, conv1->weight, conv1->mask, size, maskB lank)) {595 if (!pmSubtractionBorder(conv1->image, conv1->weight, conv1->mask, size, maskBad)) { 593 596 psError(PS_ERR_UNKNOWN, false, "Unable to set border of convolved image."); 594 597 goto MATCH_ERROR; … … 600 603 #ifdef TESTING 601 604 { 602 if ( mode == PM_SUBTRACTION_MODE_1 || mode == PM_SUBTRACTION_MODE_DUAL) {605 if (subMode == PM_SUBTRACTION_MODE_1 || subMode == PM_SUBTRACTION_MODE_DUAL) { 603 606 psFits *fits = psFitsOpen("convolved1.fits", "w"); 604 607 psFitsWriteImage(fits, NULL, conv1->image, 0, NULL); … … 606 609 } 607 610 608 if ( mode == PM_SUBTRACTION_MODE_2 || mode == PM_SUBTRACTION_MODE_DUAL) {611 if (subMode == PM_SUBTRACTION_MODE_2 || subMode == PM_SUBTRACTION_MODE_DUAL) { 609 612 psFits *fits = psFitsOpen("convolved2.fits", "w"); 610 613 psFitsWriteImage(fits, NULL, conv2->image, 0, NULL);
Note:
See TracChangeset
for help on using the changeset viewer.
