IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 42147


Ignore:
Timestamp:
Mar 29, 2022, 3:03:24 PM (4 years ago)
Author:
eugene
Message:

add option to mask dead readouts (overscan < minValue)

Location:
branches/eam_branches/ipp-20220316/psModules/src/detrend
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/ipp-20220316/psModules/src/detrend/pmOverscan.c

    r39499 r42147  
    3838    opts->order = order;
    3939    opts->stat = psMemIncrRefCounter(stat);
     40
     41    opts->minValid = 0.0; // default value if not defined
     42    opts->maskVal = 0x0001; // default value if not defined
    4043
    4144    // Smoothing
     
    308311        psFree(reducedScalar);
    309312
     313        // EAM 2022.03.29 : if the calculated overscan value is below the threshold,
     314        // declare the readout dead and mask
     315
     316        if (reduced < overscanOpts->minValid) {
     317            fprintf (stderr, "bad overscan (1) %f, masking readout\n", reduced);
     318            psImage *mask = input->mask;
     319            for (int y = 0; y < mask->numRows; y++) {
     320                for (int x = 0; x < mask->numCols; x++) {
     321                    mask->data.PS_TYPE_IMAGE_MASK_DATA[y][x] |= overscanOpts->maskVal;
     322                }
     323            }
     324        }
     325
    310326        psFree(stats);
    311327        return true;
     
    365381        // generate stats of overscan vector for header
    366382        {
    367           psString comment = NULL;    // Comment to add
    368           psStats *vectorStats = psStatsAlloc (PS_STAT_SAMPLE_MEAN | PS_STAT_SAMPLE_STDEV);
    369           if (!psVectorStats (vectorStats, reduced, NULL, NULL, 0)) {
    370               psError(PS_ERR_UNKNOWN, false, "failure to measure stats");
    371               return false;
    372           }
    373           psStringAppend(&comment, "Mean Overscan value: %f", vectorStats->sampleMean);
    374           psMetadataAddStr(hdu->header, PS_LIST_TAIL, "HISTORY", PS_META_DUPLICATE_OK, comment, "");
    375           psFree(comment);
    376 
    377           // write metadata header value
    378           psMetadataAddF32(hdu->header, PS_LIST_TAIL, "OVER_VAL", PS_META_REPLACE, "Overscan mean", vectorStats->sampleMean);
    379           psMetadataAddF32(hdu->header, PS_LIST_TAIL, "OVER_SIG", PS_META_REPLACE, "Overscan stdev", vectorStats->sampleStdev);
    380           psFree (vectorStats);
     383            psString comment = NULL;    // Comment to add
     384            psStats *vectorStats = psStatsAlloc (PS_STAT_SAMPLE_MEAN | PS_STAT_SAMPLE_STDEV);
     385            if (!psVectorStats (vectorStats, reduced, NULL, NULL, 0)) {
     386                psError(PS_ERR_UNKNOWN, false, "failure to measure stats");
     387                return false;
     388            }
     389            psStringAppend(&comment, "Mean Overscan value: %f", vectorStats->sampleMean);
     390            psMetadataAddStr(hdu->header, PS_LIST_TAIL, "HISTORY", PS_META_DUPLICATE_OK, comment, "");
     391            psFree(comment);
     392
     393            // write metadata header value
     394            psMetadataAddF32(hdu->header, PS_LIST_TAIL, "OVER_VAL", PS_META_REPLACE, "Overscan mean", vectorStats->sampleMean);
     395            psMetadataAddF32(hdu->header, PS_LIST_TAIL, "OVER_SIG", PS_META_REPLACE, "Overscan stdev", vectorStats->sampleStdev);
     396
     397            // EAM 2022.03.29 : if the calculated overscan value is below the threshold,
     398            // declare the readout dead and mask
     399         
     400            if (vectorStats->sampleMean < overscanOpts->minValid) {
     401                fprintf (stderr, "bad overscan (2) %f, masking readout\n", vectorStats->sampleMean);
     402                psImage *mask = input->mask;
     403                for (int y = 0; y < mask->numRows; y++) {
     404                    for (int x = 0; x < mask->numCols; x++) {
     405                        mask->data.PS_TYPE_IMAGE_MASK_DATA[y][x] |= overscanOpts->maskVal;
     406                    }
     407                }
     408            }
     409
     410            psFree (vectorStats);
    381411        }
    382412
     
    463493          psMetadataAddF32(hdu->header, PS_LIST_TAIL, "OVER_VAL", PS_META_REPLACE, "Overscan mean", vectorStats->sampleMean);
    464494          psMetadataAddF32(hdu->header, PS_LIST_TAIL, "OVER_SIG", PS_META_REPLACE, "Overscan stdev", vectorStats->sampleStdev);
     495
     496          // EAM 2022.03.29 : if the calculated overscan value is below the threshold,
     497          // declare the readout dead and mask
     498         
     499          if (vectorStats->sampleMean < overscanOpts->minValid) {
     500              fprintf (stderr, "bad overscan (3) %f, masking readout\n", vectorStats->sampleMean);
     501              psImage *mask = input->mask;
     502              for (int y = 0; y < mask->numRows; y++) {
     503                  for (int x = 0; x < mask->numCols; x++) {
     504                      mask->data.PS_TYPE_IMAGE_MASK_DATA[y][x] |= overscanOpts->maskVal;
     505                  }
     506              }
     507          }
    465508          psFree (vectorStats);
    466509        }
  • branches/eam_branches/ipp-20220316/psModules/src/detrend/pmOverscan.h

    r14505 r42147  
    4343    int boxcar;                         ///< Boxcar smoothing radius
    4444    float gauss;                        ///< Gaussian smoothing sigma
     45    float minValid;                     ///< if overscan is too low, readout is dead : mask
     46    psImageMaskType maskVal;            ///< Mask value to give dead readouts
     47
    4548    // Outputs
    4649    psPolynomial1D *poly;               ///< Result of polynomial fit
Note: See TracChangeset for help on using the changeset viewer.