IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Mar 27, 2008, 2:59:07 PM (18 years ago)
Author:
Paul Price
Message:

Adding count and sigma files as outputs.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/pap_branch_080320/ppMerge/src/ppMergeMask.c

    r17083 r17157  
    4444
    4545    // 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 pixels
    4746    psVector *values = psVectorAlloc(sample, PS_TYPE_F32); // Pixel values for statistics
    4847    pmFPAview *inView = pmFPAviewAlloc(0); // View for input
     
    10099            }
    101100
    102             psImage *outMask = NULL;    // Output mask image (for iterative generation of mask)
    103101            pmCell *outCell = pmFPAfileThisCell(config->files, inView, "PPMERGE.OUTPUT.MASK"); // Output cell
     102            pmReadout *outRO = NULL;    // Output readout
    104103            if (outCell->readouts && outCell->readouts->n == 1) {
    105                 pmReadout *outRO = outCell->readouts->data[0]; // Output readout
    106                 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)
    110109
    111110            psImage *image = readout->image, *mask = readout->mask; // Image and mask
     
    139138                }
    140139
    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                }
    147147                pmCellFreeData(inCell);
    148148
     
    154154            }
    155155            psFree(readout);
     156            psFree(outRO);
    156157        }
    157158
     
    172173                pmReadout *readout = inCell->readouts->data[0]; // Readout of interest
    173174
    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                }
    180183                pmCellFreeData(inCell);
    181184
     
    210213        psTrace("ppMerge", 1, "Getting bad pixels for chip %d cell %d", outView->chip, outView->cell);
    211214
    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
    223241        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
    227243            psFree(outRO->mask);
    228             outRO->mask = mask;
     244            outRO->mask = grown;
    229245        }
    230246
     
    278294    ppMergeFileActivate(config, PPMERGE_FILES_ALL, true);
    279295
    280     psFree(suspects);
    281296    return true;
    282297
    283298
    284299MERGE_MASK_ERROR:
    285     psFree(suspects);
    286300    psFree(statistics);
    287301    psFree(values);
Note: See TracChangeset for help on using the changeset viewer.