Changeset 19532 for trunk/ppStack
- Timestamp:
- Sep 11, 2008, 6:12:42 PM (18 years ago)
- Location:
- trunk/ppStack/src
- Files:
-
- 5 edited
-
ppStack.h (modified) (2 diffs)
-
ppStackLoop.c (modified) (15 diffs)
-
ppStackMatch.c (modified) (4 diffs)
-
ppStackReadout.c (modified) (5 diffs)
-
ppStackThread.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ppStack/src/ppStack.h
r19346 r19532 89 89 const psArray *readouts, // Input readouts 90 90 const psArray *regions, // Array with array of regions used in each PSF match 91 const psArray *kernels // Array with array of kernels used in each PSF match 91 const psArray *kernels, // Array with array of kernels used in each PSF match 92 const psVector *addVariance // Additional variance for rejection 92 93 ); 93 94 … … 128 129 129 130 /// Convolve image to match specified seeing 130 bool ppStackMatch(pmReadout *readout, // Readout to be convolved; replaced with output 131 psArray **regions, // Array of regions used in each PSF matching, returned 132 psArray **kernels, // Array of kernels used in each PSF matching, returned 131 bool ppStackMatch(pmReadout *readout, // Readout to be convolved; replaced with output 132 psArray **regions, // Array of regions used in each PSF matching, returned 133 psArray **kernels, // Array of kernels used in each PSF matching, returned 134 float *chi2, // Chi^2 from the stamps 133 135 const psArray *sources, // Array of sources 134 136 const pmPSF *psf, // Target PSF -
trunk/ppStack/src/ppStackLoop.c
r19505 r19532 390 390 psVector *inputMask = psVectorAlloc(num, PS_TYPE_U8); // Mask for inputs 391 391 psVectorInit(inputMask, 0); 392 psVector *matchChi2 = psVectorAlloc(num, PS_TYPE_F32); // chi^2 for stamps when matching 393 psVectorInit(matchChi2, NAN); 392 394 for (int i = 0; i < num; i++) { 393 395 psTrace("ppStack", 2, "Convolving input %d of %d to target PSF....\n", i, num); … … 402 404 psFree(rng); 403 405 psFree(inputMask); 406 psFree(matchChi2); 404 407 return false; 405 408 } … … 419 422 psFree(rng); 420 423 psFree(inputMask); 424 psFree(matchChi2); 421 425 return false; 422 426 } … … 425 429 psArray *regions = NULL, *kernels = NULL; // Regions and kernels used in subtraction 426 430 psArray *sources = haveSources ? globalSources : indSources->data[i]; // Sources for matching 427 if (!ppStackMatch(readout, ®ions, &kernels, sources, targetPSF, rng, config)) { 431 if (!ppStackMatch(readout, ®ions, &kernels, &matchChi2->data.F32[i], 432 sources, targetPSF, rng, config)) { 428 433 psErrorStackPrint(stderr, "Unable to match image %d --- ignoring.", i); 429 434 inputMask->data.U8[i] = PPSTACK_MASK_MATCH; … … 459 464 psFree(cells); 460 465 psFree(inputMask); 466 psFree(inputMask); 467 psFree(matchChi2); 461 468 return false; 462 469 } … … 473 480 memDump("preinitial"); 474 481 475 // Stack the convolv d files482 // Stack the convolved files 476 483 psTrace("ppStack", 1, "Initial stack of convolved images....\n"); 477 484 pmReadout *outRO = NULL; // Output readout … … 489 496 psFree(stack); 490 497 psFree(inputMask); 498 psFree(matchChi2); 491 499 psFree(exptimes); 492 500 psFree(cells); … … 502 510 psFree(stack); 503 511 psFree(inputMask); 512 psFree(matchChi2); 504 513 psFree(exptimes); 505 514 psFree(cells); … … 518 527 psFree(stack); 519 528 psFree(inputMask); 529 psFree(matchChi2); 520 530 psFree(view); 521 531 psFree(outRO); … … 546 556 psFree(cellList); 547 557 548 psFree(cells);558 psFree(cells); 549 559 550 560 bool status; // Status of read … … 559 569 psFree(stack); 560 570 psFree(inputMask); 571 psFree(matchChi2); 561 572 psFree(view); 562 573 psFree(outRO); … … 576 587 psArrayAdd(job->args, 1, subRegions); 577 588 psArrayAdd(job->args, 1, subKernels); 589 psArrayAdd(job->args, 1, matchChi2); 578 590 if (!psThreadJobAddPending(job)) { 579 591 psFree(job); … … 582 594 psFree(stack); 583 595 psFree(inputMask); 596 psFree(matchChi2); 584 597 psFree(view); 585 598 psFree(outRO); … … 596 609 psFree(stack); 597 610 psFree(inputMask); 611 psFree(matchChi2); 598 612 psFree(view); 599 613 psFree(outRO); … … 601 615 return false; 602 616 } 617 psFree(matchChi2); 603 618 604 619 // Harvest the jobs, gathering the inspection lists -
trunk/ppStack/src/ppStackMatch.c
r19486 r19532 15 15 PM_SOURCE_MODE_CR_LIMIT) // Mask to apply to input sources 16 16 17 //#define TESTING // Enable debugging output17 #define TESTING // Enable debugging output 18 18 19 19 … … 48 48 #endif 49 49 50 bool ppStackMatch(pmReadout *readout, psArray **regions, psArray **kernels, 50 bool ppStackMatch(pmReadout *readout, psArray **regions, psArray **kernels, float *chi2, 51 51 const psArray *sources, const pmPSF *psf, psRandom *rng, const pmConfig *config) 52 52 { … … 111 111 PM_SUBTRACTION_ANALYSIS_KERNEL); // Kernels 112 112 float vf = pmSubtractionVarianceFactor(kernels, 0.0, 0.0, false); // Variance factor 113 psMetadataItem *vfItem = psMetadataLookup( output->parent->concepts, "CELL.VARFACTOR");113 psMetadataItem *vfItem = psMetadataLookup(readout->parent->concepts, "CELL.VARFACTOR"); 114 114 if (!isfinite(vf)) { 115 115 vf = 1.0; … … 341 341 assert((*regions)->n == (*kernels)->n); 342 342 343 // Correct the variance for the chi^2 344 { 345 *chi2 = 0.0; 346 int num = 0; // Number of measurements of chi^2 347 psString regex = NULL; // Regular expression 348 psStringAppend(®ex, "^%s$", PM_SUBTRACTION_ANALYSIS_KERNEL); 349 psMetadataIterator *iter = psMetadataIteratorAlloc(output->analysis, PS_LIST_HEAD, regex); // Iterator 350 psFree(regex); 351 psMetadataItem *item = NULL;// Item from iteration 352 while ((item = psMetadataGetAndIncrement(iter))) { 353 assert(item->type == PS_DATA_UNKNOWN); 354 pmSubtractionKernels *kernels = item->data.V; // Convolution kernels 355 *chi2 += kernels->mean; 356 num++; 357 } 358 psFree(iter); 359 360 float vf = psMetadataLookupF32(NULL, readout->parent->concepts, "CELL.VARFACTOR"); // Variance factor 361 *chi2 /= vf * num; 362 } 363 343 364 // Renormalise the variances if desired 344 365 if (renorm) { -
trunk/ppStack/src/ppStackReadout.c
r19475 r19532 22 22 psArray *subRegions = args->data[3]; // Regions for PSF-matching 23 23 psArray *subKernels = args->data[4]; // Kernels for PSF-matching 24 25 psArray *inspect = ppStackReadoutInitial(config, outRO, thread->readouts, subRegions, subKernels); 24 psVector *addVariance = args->data[5]; // Additional variance when rejecting 25 26 psArray *inspect = ppStackReadoutInitial(config, outRO, thread->readouts, 27 subRegions, subKernels, addVariance); 26 28 27 29 job->results = inspect; … … 75 77 76 78 psArray *ppStackReadoutInitial(const pmConfig *config, pmReadout *outRO, const psArray *readouts, 77 const psArray *regions, const psArray *kernels )79 const psArray *regions, const psArray *kernels, const psVector *addVariance) 78 80 { 79 81 assert(config); … … 84 86 assert(readouts->n == regions->n); 85 87 assert(regions->n == kernels->n); 88 assert(addVariance && addVariance->n == readouts->n && addVariance->type.type == PS_TYPE_F32); 86 89 static int sectionNum = 0; // Section number; for debugging outputs 87 90 … … 127 130 } 128 131 129 stack->data[i] = pmStackDataAlloc(ro, weighting );132 stack->data[i] = pmStackDataAlloc(ro, weighting, addVariance->data.F32[i]); 130 133 } 131 134 … … 221 224 } 222 225 223 pmStackData *data = pmStackDataAlloc(ro, weighting );226 pmStackData *data = pmStackDataAlloc(ro, weighting, NAN); 224 227 data->reject = psMemIncrRefCounter(rejected->data[i]); 225 228 stack->data[i] = data; -
trunk/ppStack/src/ppStackThread.c
r19346 r19532 235 235 236 236 { 237 psThreadTask *task = psThreadTaskAlloc("PPSTACK_INITIAL_COMBINE", 5);237 psThreadTask *task = psThreadTaskAlloc("PPSTACK_INITIAL_COMBINE", 6); 238 238 task->function = &ppStackReadoutInitialThread; 239 239 psThreadTaskAdd(task);
Note:
See TracChangeset
for help on using the changeset viewer.
