Changeset 17157 for branches/pap_branch_080320/ppMerge/src/ppMergeMask.c
- Timestamp:
- Mar 27, 2008, 2:59:07 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/pap_branch_080320/ppMerge/src/ppMergeMask.c
r17083 r17157 44 44 45 45 // For each input file, get the statistics, which can be calculated at the chip or cell levels 46 psArray *suspects = psArrayAlloc(outChip->cells->n); // Images with suspected pixels47 46 psVector *values = psVectorAlloc(sample, PS_TYPE_F32); // Pixel values for statistics 48 47 pmFPAview *inView = pmFPAviewAlloc(0); // View for input … … 100 99 } 101 100 102 psImage *outMask = NULL; // Output mask image (for iterative generation of mask)103 101 pmCell *outCell = pmFPAfileThisCell(config->files, inView, "PPMERGE.OUTPUT.MASK"); // Output cell 102 pmReadout *outRO = NULL; // Output readout 104 103 if (outCell->readouts && outCell->readouts->n == 1) { 105 pmReadout *outRO = outCell->readouts->data[0]; // Output readout106 if (outRO){107 outMask = outRO->mask;108 }109 }104 outRO = psMemIncrRefCounter(outCell->readouts->data[0]); 105 } else { 106 outRO = pmReadoutAlloc(outCell); 107 } 108 psImage *outMask = outRO->mask; // Output mask image (for iterative generation of mask) 110 109 111 110 psImage *image = readout->image, *mask = readout->mask; // Image and mask … … 139 138 } 140 139 141 psMetadataAddF32(readout->analysis, PS_LIST_TAIL, PM_MASK_ANALYSIS_MEAN, PS_META_REPLACE, 142 "Mean value of readout", psStatsGetValue(statistics, meanStat)); 143 psMetadataAddF32(readout->analysis, PS_LIST_TAIL, PM_MASK_ANALYSIS_STDEV, PS_META_REPLACE, 144 "Stdev value of readout", psStatsGetValue(statistics, stdevStat)); 145 suspects->data[inView->cell] = pmMaskFlagSuspectPixels(suspects->data[inView->cell], 146 readout, maskSuspect, maskVal); 140 if (!pmMaskFlagSuspectPixels(outRO, readout, psStatsGetValue(statistics, meanStat), 141 psStatsGetValue(statistics, stdevStat), maskSuspect, maskVal)) { 142 psError(PS_ERR_UNKNOWN, false, "Unable to find suspect values in file %d", i); 143 psFree(inView); 144 psFree(readout); 145 goto MERGE_MASK_ERROR; 146 } 147 147 pmCellFreeData(inCell); 148 148 … … 154 154 } 155 155 psFree(readout); 156 psFree(outRO); 156 157 } 157 158 … … 172 173 pmReadout *readout = inCell->readouts->data[0]; // Readout of interest 173 174 174 psMetadataAddF32(readout->analysis, PS_LIST_TAIL, PM_MASK_ANALYSIS_MEAN, PS_META_REPLACE, 175 "Mean value of chip", psStatsGetValue(statistics, meanStat)); 176 psMetadataAddF32(readout->analysis, PS_LIST_TAIL, PM_MASK_ANALYSIS_STDEV, PS_META_REPLACE, 177 "Stdev value of chip", psStatsGetValue(statistics, stdevStat)); 178 suspects->data[inView->cell] = pmMaskFlagSuspectPixels(suspects->data[inView->cell], 179 readout, maskSuspect, maskVal); 175 inView->readout = 0; 176 pmReadout *outRO = pmFPAfileThisReadout(config->files, inView, "PPMERGE.OUTPUT.MASK"); 177 178 if (!pmMaskFlagSuspectPixels(outRO, readout, psStatsGetValue(statistics, meanStat), 179 psStatsGetValue(statistics, stdevStat), maskSuspect, maskVal)) { 180 psError(PS_ERR_UNKNOWN, false, "Unable to find suspect values in file %d", i); 181 goto MERGE_MASK_ERROR; 182 } 180 183 pmCellFreeData(inCell); 181 184 … … 210 213 psTrace("ppMerge", 1, "Getting bad pixels for chip %d cell %d", outView->chip, outView->cell); 211 214 212 pmReadout *outRO = NULL; // Output readout 213 if (outCell->readouts && outCell->readouts->n == 1) { 214 outRO = psMemIncrRefCounter(outCell->readouts->data[0]); 215 } else { 216 outRO = pmReadoutAlloc(outCell); 217 } 218 219 psImage *mask = pmMaskIdentifyBadPixels(suspects->data[outView->cell], maskVal, numFiles, maskBad, 220 maskMode); 221 psFree(suspects->data[outView->cell]); 222 suspects->data[outView->cell] = NULL; 215 assert(outCell->readouts && outCell->readouts->n == 1); 216 pmReadout *outRO = outCell->readouts->data[0]; // Output readout 217 if (!pmMaskIdentifyBadPixels(outRO, maskVal, maskBad, maskMode)) { 218 psError(PS_ERR_UNKNOWN, false, "Unable to mask bad pixels"); 219 goto MERGE_MASK_ERROR; 220 } 221 222 // Supplementary outputs 223 { 224 // The counts image is fairly useless, but it preserves the model 225 pmCell *countsCell = pmFPAfileThisCell(config->files, view, "PPMERGE.OUTPUT.COUNT"); 226 pmReadout *countsRO = pmReadoutAlloc(countsCell); // Readout with count of inputs per pixel 227 countsRO->image = psImageAlloc(outRO->image->numCols, outRO->image->numRows, PS_TYPE_F32); 228 psImageInit(countsRO->image, numFiles); 229 countsRO->data_exists = countsCell->data_exists = countsCell->parent->data_exists = true; 230 psFree(countsRO); 231 232 pmCell *sigmaCell = pmFPAfileThisCell(config->files, view, "PPMERGE.OUTPUT.SIGMA"); 233 pmReadout *sigmaRO = pmReadoutAlloc(sigmaCell); // Readout with suspect image 234 psImage *suspect = psMetadataLookupPtr(NULL, outRO->analysis, PM_MASK_ANALYSIS_SUSPECT); 235 sigmaRO->image = psImageCopy(sigmaRO->image, suspect, PS_TYPE_F32); 236 psMetadataRemoveKey(outRO->analysis, PM_MASK_ANALYSIS_SUSPECT); 237 sigmaRO->data_exists = sigmaCell->data_exists = sigmaCell->parent->data_exists = true; 238 psFree(sigmaRO); 239 } 240 223 241 if (maskGrowVal > 0) { 224 outRO->mask = psImageGrowMask(outRO->mask, mask, maskVal, maskGrow, maskGrowVal); 225 psFree(mask); 226 } else { 242 psImage *grown = psImageGrowMask(NULL, outRO->mask, maskVal, maskGrow, maskGrowVal); // Grown mask 227 243 psFree(outRO->mask); 228 outRO->mask = mask;244 outRO->mask = grown; 229 245 } 230 246 … … 278 294 ppMergeFileActivate(config, PPMERGE_FILES_ALL, true); 279 295 280 psFree(suspects);281 296 return true; 282 297 283 298 284 299 MERGE_MASK_ERROR: 285 psFree(suspects);286 300 psFree(statistics); 287 301 psFree(values);
Note:
See TracChangeset
for help on using the changeset viewer.
