Changeset 27365
- Timestamp:
- Mar 19, 2010, 5:09:20 PM (16 years ago)
- Location:
- trunk
- Files:
-
- 1 added
- 12 edited
-
ippconfig/recipes/filerules-mef.mdc (modified) (1 diff)
-
ippconfig/recipes/filerules-simple.mdc (modified) (1 diff)
-
ippconfig/recipes/filerules-split.mdc (modified) (1 diff)
-
ppStack/src/ppStackMatch.c (modified) (5 diffs)
-
ppSub/src (modified) (1 prop)
-
ppSub/src/Makefile.am (modified) (2 diffs)
-
ppSub/src/ppSubConvolve.c (added)
-
ppSub/src/ppSubMatchPSFs.c (modified) (2 diffs)
-
psModules/src/imcombine/pmStackReject.c (modified) (1 diff)
-
psModules/src/imcombine/pmSubtractionMask.c (modified) (6 diffs)
-
psModules/src/imcombine/pmSubtractionMatch.c (modified) (7 diffs)
-
psModules/src/imcombine/pmSubtractionThreads.c (modified) (4 diffs)
-
psModules/src/imcombine/pmSubtractionThreads.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ippconfig/recipes/filerules-mef.mdc
r26902 r27365 111 111 PPSUB.REF.VARIANCE INPUT @FILES FPA VARIANCE 112 112 PPSUB.REF.SOURCES INPUT @FILES FPA CMF 113 PPSUB.INPUT.KERNEL INPUT @FILES FPA SUBKERNEL 113 114 114 115 ## files used by ppstack -
trunk/ippconfig/recipes/filerules-simple.mdc
r26902 r27365 74 74 PPSUB.REF.VARIANCE INPUT @FILES FPA VARIANCE 75 75 PPSUB.REF.SOURCES INPUT @FILES FPA CMF 76 PPSUB.INPUT.KERNEL INPUT @FILES FPA SUBKERNEL 76 77 77 78 ## files used by ppstack -
trunk/ippconfig/recipes/filerules-split.mdc
r27232 r27365 84 84 PPSUB.REF.VARIANCE INPUT @FILES FPA VARIANCE 85 85 PPSUB.REF.SOURCES INPUT @FILES FPA CMF 86 PPSUB.INPUT.KERNEL INPUT @FILES FPA SUBKERNEL 86 87 87 88 ## files used by ppstack -
trunk/ppStack/src/ppStackMatch.c
r27332 r27365 407 407 408 408 if (threads > 0) { 409 pmSubtractionThreadsInit( readout, fake);409 pmSubtractionThreadsInit(); 410 410 } 411 411 … … 423 423 psFree(conv); 424 424 if (threads > 0) { 425 pmSubtractionThreadsFinalize( readout, fake);425 pmSubtractionThreadsFinalize(); 426 426 } 427 427 return false; … … 440 440 psFree(widthsCopy); 441 441 if (threads > 0) { 442 pmSubtractionThreadsFinalize( readout, fake);442 pmSubtractionThreadsFinalize(); 443 443 } 444 444 return false; … … 458 458 psFree(widthsCopy); 459 459 if (threads > 0) { 460 pmSubtractionThreadsFinalize( readout, fake);460 pmSubtractionThreadsFinalize(); 461 461 } 462 462 return false; … … 495 495 496 496 if (threads > 0) { 497 pmSubtractionThreadsFinalize( readout, fake);497 pmSubtractionThreadsFinalize(); 498 498 } 499 499 -
trunk/ppSub/src
- Property svn:ignore
-
old new 13 13 ppSubErrorCodes.c 14 14 ppSubVersionDefinitions.h 15 ppSubConvolve
-
- Property svn:ignore
-
trunk/ppSub/src/Makefile.am
r27109 r27365 1 bin_PROGRAMS = ppSub ppSubKernel 1 bin_PROGRAMS = ppSub ppSubKernel ppSubConvolve 2 2 3 3 if HAVE_SVNVERSION … … 55 55 ppSubKernel.c 56 56 57 ppSubConvolve_CPPFLAGS = $(PSLIB_CFLAGS) $(PSMODULE_CFLAGS) $(PPSTATS_CFLAGS) $(PSPHOT_CFLAGS) $(PPSUB_CFLAGS) 58 ppSubConvolve_LDFLAGS = $(PSLIB_LIBS) $(PSMODULE_LIBS) $(PPSTATS_LIBS) $(PSPHOT_LIBS) $(PPSUB_LIBS) 59 60 ppSubConvolve_SOURCES = \ 61 ppSubConvolve.c \ 62 ppSubExit.c \ 63 ppSubVersion.c 64 57 65 noinst_HEADERS = \ 58 66 ppSub.h -
trunk/ppSub/src/ppSubMatchPSFs.c
r27316 r27365 331 331 int threads = psMetadataLookupS32(NULL, config->arguments, "-threads"); // Number of threads 332 332 if (threads > 0) { 333 pmSubtractionThreadsInit( inRO, refRO);333 pmSubtractionThreadsInit(); 334 334 } 335 335 … … 380 380 381 381 psFree(optWidths); 382 pmSubtractionThreadsFinalize( inRO, refRO);382 pmSubtractionThreadsFinalize(); 383 383 384 384 if (!success) { -
trunk/psModules/src/imcombine/pmStackReject.c
r27322 r27365 103 103 104 104 if (!pmSubtractionThreaded()) { 105 pmSubtractionThreadsInit( NULL, NULL);105 pmSubtractionThreadsInit(); 106 106 } 107 107 -
trunk/psModules/src/imcombine/pmSubtractionMask.c
r27086 r27365 42 42 pmSubtractionMode mode) 43 43 { 44 PM_ASSERT_READOUT_NON_NULL(ro1, NULL); 45 PM_ASSERT_READOUT_IMAGE(ro1, NULL); 46 PM_ASSERT_READOUT_MASK(ro1, NULL); 47 PM_ASSERT_READOUT_NON_NULL(ro2, NULL); 48 PM_ASSERT_READOUT_IMAGE(ro2, NULL); 49 PM_ASSERT_READOUT_MASK(ro2, NULL); 50 PS_ASSERT_IMAGES_SIZE_EQUAL(ro1->image, ro2->image, NULL); 44 int numCols = 0, numRows = 0; // Size of the images 45 if (ro1) { 46 PM_ASSERT_READOUT_NON_NULL(ro1, NULL); 47 PM_ASSERT_READOUT_IMAGE(ro1, NULL); 48 PM_ASSERT_READOUT_MASK(ro1, NULL); 49 numCols = ro1->image->numCols; 50 numRows = ro1->image->numRows; 51 } 52 if (ro2) { 53 PM_ASSERT_READOUT_NON_NULL(ro2, NULL); 54 PM_ASSERT_READOUT_IMAGE(ro2, NULL); 55 PM_ASSERT_READOUT_MASK(ro2, NULL); 56 numCols = ro2->image->numCols; 57 numRows = ro2->image->numRows; 58 } 59 if (ro1 && ro2) { 60 PS_ASSERT_IMAGES_SIZE_EQUAL(ro1->image, ro2->image, NULL); 61 } 62 if (!ro1 && !ro2) { 63 psError(PS_ERR_UNEXPECTED_NULL, true, "No image provided."); 64 return false; 65 } 66 psAssert(numCols > 0 && numRows > 0, "There should be an image provided"); 51 67 PS_ASSERT_INT_NONNEGATIVE(size, NULL); 52 68 PS_ASSERT_INT_NONNEGATIVE(footprint, NULL); … … 56 72 } 57 73 58 int numCols = ro1->image->numCols, numRows = ro1->image->numRows; // Size of the images59 60 74 // Dereference inputs for convenience 61 psF32 **imageData1 = ro1->image->data.F32, **imageData2 = ro2->image->data.F32; 62 psImageMaskType **maskData1 = ro1->mask->data.PS_TYPE_IMAGE_MASK_DATA, 63 **maskData2 = ro2->mask->data.PS_TYPE_IMAGE_MASK_DATA; 75 psF32 **imageData1 = ro1 ? ro1->image->data.F32 : NULL; 76 psF32 **imageData2 = ro2 ? ro2->image->data.F32 : NULL; 77 psImageMaskType **maskData1 = ro1 ? ro1->mask->data.PS_TYPE_IMAGE_MASK_DATA : NULL; 78 psImageMaskType **maskData2 = ro2 ? ro2->mask->data.PS_TYPE_IMAGE_MASK_DATA : NULL; 64 79 65 80 // First, a pass through to determine the fraction of bad pixels … … 69 84 for (int y = 0; y < numRows; y++) { 70 85 for (int x = 0; x < numCols; x++) { 71 if ( (maskData1[y][x] & maskVal) || !isfinite(imageData1[y][x])) {86 if (ro1 && ((maskData1[y][x] & maskVal) || !isfinite(imageData1[y][x]))) { 72 87 numBad++; 73 88 continue; 74 89 } 75 if ( (maskData2[y][x] & maskVal) || !isfinite(imageData2[y][x])) {90 if (ro2 && ((maskData2[y][x] & maskVal) || !isfinite(imageData2[y][x]))) { 76 91 numBad++; 77 92 continue; … … 128 143 for (int y = 0; y < numRows; y++) { 129 144 for (int x = 0; x < numCols; x++) { 130 if ( maskData1[y][x] & maskVal) {145 if (ro1 && maskData1[y][x] & maskVal) { 131 146 maskData[y][x] |= PM_SUBTRACTION_MASK_BAD_1; 132 147 } 133 if ( maskData2[y][x] & maskVal) {148 if (ro2 && maskData2[y][x] & maskVal) { 134 149 maskData[y][x] |= PM_SUBTRACTION_MASK_BAD_2; 135 150 } … … 144 159 145 160 // Pixels that will be bad (or poor) if we convolve with a bad reference pixel 146 if ( !psImageConvolveMask(mask, mask, PM_SUBTRACTION_MASK_BAD_1, PM_SUBTRACTION_MASK_CONVOLVE_1,147 -size, size, -size, size)) {161 if (ro1 && !psImageConvolveMask(mask, mask, PM_SUBTRACTION_MASK_BAD_1, PM_SUBTRACTION_MASK_CONVOLVE_1, 162 -size, size, -size, size)) { 148 163 psError(psErrorCodeLast(), false, "Unable to convolve bad pixels from mask 1."); 149 164 psFree(mask); 150 165 return NULL; 151 166 } 152 if ( !psImageConvolveMask(mask, mask, PM_SUBTRACTION_MASK_BAD_2, PM_SUBTRACTION_MASK_CONVOLVE_2,153 -size, size, -size, size)) {167 if (ro2 && !psImageConvolveMask(mask, mask, PM_SUBTRACTION_MASK_BAD_2, PM_SUBTRACTION_MASK_CONVOLVE_2, 168 -size, size, -size, size)) { 154 169 psError(psErrorCodeLast(), false, "Unable to convolve bad pixels from mask 2."); 155 170 psFree(mask); … … 174 189 psAbort("Unsupported subtraction mode: %x", mode); 175 190 } 176 if ( !psImageConvolveMask(mask, mask, maskRej, PM_SUBTRACTION_MASK_REJ,177 -footprint, footprint, -footprint, footprint)) {191 if (ro1 && ro2 && !psImageConvolveMask(mask, mask, maskRej, PM_SUBTRACTION_MASK_REJ, 192 -footprint, footprint, -footprint, footprint)) { 178 193 psError(psErrorCodeLast(), false, "Unable to convolve bad pixels."); 179 194 psFree(mask); -
trunk/psModules/src/imcombine/pmSubtractionMatch.c
r27086 r27365 132 132 if (subMode != PM_SUBTRACTION_MODE_2) { 133 133 PM_ASSERT_READOUT_NON_NULL(conv1, false); 134 PM_ASSERT_READOUT_NON_NULL(ro1, false); 135 PM_ASSERT_READOUT_IMAGE(ro1, false); 134 136 if (conv1->image) { 135 137 psFree(conv1->image); … … 147 149 if (subMode != PM_SUBTRACTION_MODE_1) { 148 150 PM_ASSERT_READOUT_NON_NULL(conv2, false); 151 PM_ASSERT_READOUT_NON_NULL(ro2, false); 152 PM_ASSERT_READOUT_IMAGE(ro2, false); 149 153 if (conv2->image) { 150 154 psFree(conv2->image); … … 161 165 } 162 166 163 PM_ASSERT_READOUT_NON_NULL(ro1, false); 164 PM_ASSERT_READOUT_NON_NULL(ro2, false); 165 PM_ASSERT_READOUT_IMAGE(ro1, false); 166 PM_ASSERT_READOUT_IMAGE(ro2, false); 167 PS_ASSERT_IMAGES_SIZE_EQUAL(ro1->image, ro2->image, false); 167 if (ro1 && ro2) { 168 PS_ASSERT_IMAGES_SIZE_EQUAL(ro1->image, ro2->image, false); 169 } 168 170 PS_ASSERT_INT_NONNEGATIVE(stride, false); 169 171 if (isfinite(normFrac)) { … … 379 381 } 380 382 383 int numCols, numRows; // Size of image 384 if (ro1) { 385 numCols = ro1->image->numCols; 386 numRows = ro1->image->numRows; 387 } else if (ro2) { 388 numCols = ro2->image->numCols; 389 numRows = ro2->image->numRows; 390 } else { 391 psAbort("No input image provided."); 392 } 393 381 394 pmSubtractionMaskInvalid(ro1, maskVal); 382 395 pmSubtractionMaskInvalid(ro2, maskVal); 396 397 // General background subtraction, since this is done in pmSubtractionMatch 398 { 399 psRandom *rng = psRandomAlloc(PS_RANDOM_TAUS); // Random number generator 400 psStats *bg = psStatsAlloc(PS_STAT_ROBUST_MEDIAN); // Statistics for background 401 if (ro1) { 402 psStatsInit(bg); 403 if (!psImageBackground(bg, NULL, ro1->image, ro1->mask, maskVal, rng)) { 404 psError(PM_ERR_DATA, false, "Unable to measure background statistics."); 405 psFree(bg); 406 psFree(rng); 407 return false; 408 } 409 psBinaryOp(ro1->image, ro1->image, "-", psScalarAlloc((float)bg->robustMedian, PS_TYPE_F32)); 410 } 411 if (ro2) { 412 psStatsInit(bg); 413 if (!psImageBackground(bg, NULL, ro2->image, ro2->mask, maskVal, rng)) { 414 psError(PM_ERR_DATA, false, "Unable to measure background statistics."); 415 psFree(bg); 416 psFree(rng); 417 return false; 418 } 419 psBinaryOp(ro2->image, ro2->image, "-", psScalarAlloc((float)bg->robustMedian, PS_TYPE_F32)); 420 } 421 psFree(bg); 422 psFree(rng); 423 } 383 424 384 425 psRegion bounds = psRegionSet(NAN, NAN, NAN, NAN); // Bounds of valid pixels … … 396 437 psMetadata *outHeader = psMetadataAlloc(); // Output header values 397 438 398 int numCols = ro1->image->numCols, numRows = ro1->image->numRows; // Size of image399 439 subtractionMatchAlloc(conv1, conv2, ro1, ro2, subMask, maskBad, mode, numCols, numRows); 400 440 … … 404 444 psRegion *region = regions->data[i]; // Region of interest 405 445 406 if (!pmSubtractionAnalysis(outAnalysis, outHeader, kernel, region, 407 ro1->image->numCols, ro1->image->numRows)) { 446 if (!pmSubtractionAnalysis(outAnalysis, outHeader, kernel, region, numCols, numRows)) { 408 447 psError(psErrorCodeLast(), false, "Unable to generate QA data"); 409 448 psFree(outAnalysis); … … 454 493 return false; 455 494 } 495 496 // We need both inputs 497 PM_ASSERT_READOUT_NON_NULL(ro1, false); 498 PM_ASSERT_READOUT_NON_NULL(ro2, false); 456 499 457 500 PS_ASSERT_INT_NONNEGATIVE(footprint, false); -
trunk/psModules/src/imcombine/pmSubtractionThreads.c
r26893 r27365 17 17 } 18 18 19 // Initialise a mutex in each of the input 20 static void subtractionMutexInit(pmReadout *ro) 21 { 22 if (!ro) { 23 return; 24 } 25 26 // XXX if (ro->image) { 27 // XXX psMutexInit(ro->image); 28 // XXX } 29 // XXX if (ro->variance) { 30 // XXX psMutexInit(ro->variance); 31 // XXX } 32 33 return; 34 } 35 36 static void subtractionMutexDestroy(pmReadout *ro) 37 { 38 if (!ro) { 39 return; 40 } 41 42 // XXX if (ro->image) { 43 // XXX psMutexDestroy(ro->image); 44 // XXX } 45 // XXX if (ro->variance) { 46 // XXX psMutexDestroy(ro->variance); 47 // XXX } 48 49 return; 50 } 51 52 void pmSubtractionThreadsInit(pmReadout *in1, pmReadout *in2) 19 void pmSubtractionThreadsInit(void) 53 20 { 54 21 if (threaded) { … … 57 24 58 25 threaded = true; 59 60 subtractionMutexInit(in1);61 subtractionMutexInit(in2);62 26 63 27 { … … 86 50 87 51 88 void pmSubtractionThreadsFinalize( pmReadout *in1, pmReadout *in2)52 void pmSubtractionThreadsFinalize(void) 89 53 { 90 54 if (!threaded) { … … 97 61 psThreadTaskRemove("PSMODULES_SUBTRACTION_CONVOLVE"); 98 62 99 subtractionMutexDestroy(in1);100 subtractionMutexDestroy(in1);101 63 return; 102 64 } -
trunk/psModules/src/imcombine/pmSubtractionThreads.h
r19340 r27365 7 7 /// Set up threading for image matching 8 8 /// 9 /// Sets up thread tasks, and initialises mutexes in readouts 10 void pmSubtractionThreadsInit(pmReadout *in1, pmReadout *in2 // Input readouts 11 ); 9 /// Sets up thread tasks 10 void pmSubtractionThreadsInit(void); 12 11 13 12 14 13 /// Take down threading for image matching 15 14 /// 16 /// Destroys thread tasks , and initialises mutexes in readouts17 void pmSubtractionThreadsFinalize( pmReadout *in1, pmReadout *in2);15 /// Destroys thread tasks 16 void pmSubtractionThreadsFinalize(void); 18 17 19 18 #endif
Note:
See TracChangeset
for help on using the changeset viewer.
