Changeset 42785
- Timestamp:
- Jan 21, 2025, 11:05:48 AM (16 months ago)
- Location:
- trunk/ppMerge/src
- Files:
-
- 5 edited
-
ppMerge.h (modified) (1 diff)
-
ppMergeFiles.c (modified) (2 diffs)
-
ppMergeLoop.c (modified) (13 diffs)
-
ppMergeMask.c (modified) (1 diff)
-
ppMergeScaleZero.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ppMerge/src/ppMerge.h
r33666 r42785 117 117 ); 118 118 119 bool ppMergeFileFreeInput(pmConfig *config, const pmFPAview *view, int num); 120 119 121 /** 120 122 * Set the data level for files specified by name; return an array of the files 121 123 */ 122 124 psArray *ppMergeFileDataLevel(const pmConfig *config, ///< Configuration 123 const char *name, ///< Name of files 124 pmFPALevel level ///< Level for file data level 125 const char *name ///< Name of files 125 126 ); 126 127 -
trunk/ppMerge/src/ppMergeFiles.c
r33666 r42785 105 105 } 106 106 107 psArray *ppMergeFileDataLevel(const pmConfig *config, const char *name, pmFPALevel level) 107 bool ppMergeFileFreeInput(pmConfig *config, const pmFPAview *view, int num) 108 { 109 { 110 pmFPAfile *input = pmFPAfileSelectSingle(config->files, "PPMERGE.INPUT", num); 111 if (!pmFPAfileFreeData(input, view)) { 112 psError(PS_ERR_UNKNOWN, false, "Unable to free data for image file %d", num); 113 return false; 114 } 115 } 116 bool mdok; // Status of MD lookup 117 if (psMetadataLookupBool(&mdok, config->arguments, "INPUTS.MASKS")) { 118 pmFPAfile *mask = pmFPAfileSelectSingle(config->files, "PPMERGE.INPUT.MASK", num); // Mask file 119 if (!pmFPAfileFreeData(mask, view)) { 120 psError(PS_ERR_UNKNOWN, false, "Unable to free data for mask file %d", num); 121 return false; 122 } 123 } 124 if (psMetadataLookupBool(&mdok, config->arguments, "INPUTS.VARIANCES")) { 125 pmFPAfile *variance = pmFPAfileSelectSingle(config->files, "PPMERGE.INPUT.VARIANCE", num); // Variance file 126 if (!pmFPAfileFreeData(variance, view)) { 127 psError(PS_ERR_UNKNOWN, false, "Unable to free data for variance file %d", num); 128 return false; 129 } 130 } 131 return true; 132 } 133 134 // Select the specified input files and assign the dataLevel and freeLevel, 135 // saving a pointer on output array. 136 // This function takes the argument pmFPALevel and sets the dataLevel based on that value. 137 // However, this is only used with the value PM_FPA_LEVEL_READOUT, and it must be set 138 // to that level for the rest of ppMerge to work correctly. Furthermore, the freeLevel 139 // must be set to Cell. Remove the (false) option. 140 psArray *ppMergeFileDataLevel(const pmConfig *config, const char *name) 108 141 { 109 142 assert(config); … … 115 148 for (int i = 0; i < numFiles; i++) { 116 149 pmFPAfile *file = pmFPAfileSelectSingle(config->files, name, i); // Image file 117 file->dataLevel = level;118 file->freeLevel = level;150 file->dataLevel = PM_FPA_LEVEL_READOUT; 151 file->freeLevel = PM_FPA_LEVEL_CELL; 119 152 files->data[i] = psMemIncrRefCounter(file); 120 153 } -
trunk/ppMerge/src/ppMergeLoop.c
r42764 r42785 39 39 bool haveVariances = psMetadataLookupBool(&mdok, arguments, "INPUTS.VARIANCES"); // Do we have variances? 40 40 41 psArray *inputs = ppMergeFileDataLevel(config, "PPMERGE.INPUT", PM_FPA_LEVEL_READOUT); // Input images 42 psArray *masks = NULL, *variances = NULL; // Input masks and variances 43 if (haveMasks) { 44 masks = ppMergeFileDataLevel(config, "PPMERGE.INPUT.MASK", PM_FPA_LEVEL_READOUT); 45 } 46 if (haveVariances) { 47 variances = ppMergeFileDataLevel(config, "PPMERGE.INPUT.VARIANCE", PM_FPA_LEVEL_READOUT); 48 } 41 psArray *inputs = ppMergeFileDataLevel(config, "PPMERGE.INPUT"); // Input images 42 psArray *masks = haveMasks ? ppMergeFileDataLevel(config, "PPMERGE.INPUT.MASK") : NULL; // Input masks 43 psArray *variances = haveVariances ? ppMergeFileDataLevel(config, "PPMERGE.INPUT.VARIANCE") : NULL; // Input variances 49 44 50 45 int nThreads = psMetadataLookupS32 (&mdok, arguments, "NTHREADS"); … … 135 130 psString darkNorm = psMetadataLookupStr(&mdok, arguments, "DARK.NORM"); ///< Dark normalisation 136 131 137 138 132 if (!ppMergeFileActivate(config, PPMERGE_FILES_ALL, true)) { 139 133 psError(PS_ERR_UNKNOWN, false, "Unable to activate files."); … … 152 146 } 153 147 154 155 148 // Average concepts across inputs 156 149 { … … 180 173 { 181 174 psList *inChips = psListAlloc(NULL); 182 for (int i =0; i < numFiles; i++) {175 for (int i = 0; i < numFiles; i++) { 183 176 pmChip *chip = pmFPAviewThisChip(view, ((pmFPAfile *)inputs->data[i])->fpa); 184 177 psListAdd(inChips, PS_LIST_TAIL, chip); … … 193 186 194 187 pmCell *outCell; ///< Cell of interest 195 196 // XXX TEST : force a single loop197 // outCell = pmFPAviewNextCell(view, outFPA, 1); {198 188 199 189 while ((outCell = pmFPAviewNextCell(view, outFPA, 1))) { … … 291 281 psAssert (fileGroups->n > 0, "no valid file groups defined"); 292 282 fileGroup = fileGroups->data[0]; 283 293 284 if (!pmDarkCombinePrepare(outCell, fileGroup->readouts, darkOrdinates, darkNorm)) { 294 285 goto ERROR; … … 305 296 psAbort("Should never get here."); 306 297 } 298 fprintf (stderr, "after pmDarkCombinePrepare / pmReadoutCombinePrepare:\n"); 299 psMemStats(true, NULL, NULL); 307 300 308 301 // Read input data by chunks … … 357 350 // call: pmDarkCombine(outCell, fileGroup->readouts, iter, rej, maskVal); 358 351 if (!psThreadJobAddPending(job)) { 359 // goto ERROR; 360 // continue; // I don't care. 352 // CZW commented this out with a note that this was needed to allow ppMerge to work even if some inputs are invalid. 353 // EAM thinks pmDarkCombine will only return FALSE if there is a programming or setup error (see pmDark.c:pmDarkCombine) 354 // if so, we should raise an error here. 355 // goto ERROR; 361 356 } 362 357 break; … … 400 395 401 396 psFree(fileGroups); 402 // psFree(zeros);403 397 404 398 // XXX eventually need to keep both the shutter and the pattern, as we do with dark … … 541 535 } 542 536 537 // free the data used by the input files (we need to do the work ourselves) 538 for (int i = 0; i < numFiles; i++) { 539 if (!ppMergeFileFreeInput(config, view, i)) { 540 psError(PS_ERR_UNKNOWN, false, "Unable to open file %d", i); 541 goto ERROR; 542 } 543 } 544 543 545 psFree(outRO); 544 546 cellNum++; … … 547 549 goto ERROR; 548 550 } 551 552 // pmFPAfileIOList (config); 549 553 } 550 554 … … 564 568 psFree(variances); 565 569 psFree(stats); 570 psFree(zeros); 566 571 return true; 567 572 … … 573 578 psFree(variances); 574 579 psFree(stats); 580 psFree(zeros); 575 581 return false; 576 582 } -
trunk/ppMerge/src/ppMergeMask.c
r39500 r42785 427 427 } 428 428 429 psArray *inputs = ppMergeFileDataLevel(config, "PPMERGE.INPUT" , PM_FPA_LEVEL_READOUT); ///< Input images429 psArray *inputs = ppMergeFileDataLevel(config, "PPMERGE.INPUT"); ///< Input images 430 430 psFree(inputs); 431 431 if (haveMasks) { 432 psArray *masks = ppMergeFileDataLevel(config, "PPMERGE.INPUT.MASK" , PM_FPA_LEVEL_READOUT);432 psArray *masks = ppMergeFileDataLevel(config, "PPMERGE.INPUT.MASK"); 433 433 psFree(masks); 434 434 } 435 435 if (haveVariances) { 436 psArray *variances = ppMergeFileDataLevel(config, "PPMERGE.INPUT.VARIANCE" , PM_FPA_LEVEL_READOUT);436 psArray *variances = ppMergeFileDataLevel(config, "PPMERGE.INPUT.VARIANCE"); 437 437 psFree(variances); 438 438 } -
trunk/ppMerge/src/ppMergeScaleZero.c
r33666 r42785 232 232 } 233 233 234 psFree(gains); 234 235 psFree(background); 235 236 psFree(shutters);
Note:
See TracChangeset
for help on using the changeset viewer.
