IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Feb 8, 2023, 11:54:08 AM (3 years ago)
Author:
eugene
Message:

merge from eam_branches/ipp-20220316. no_warn strncpy; avoid passing NULL to sprintf %s; add code for PATTERN_DEAD_CELLS; fix error in PSF residual image evaluation; drop detailed mask analysis for binned images (not actually used)

Location:
trunk/psModules
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/psModules

  • trunk/psModules/src/detrend/pmOverscan.c

    r42356 r42379  
    3838    opts->order = order;
    3939    opts->stat = psMemIncrRefCounter(stat);
     40
     41    opts->minValid = 0.0; // default value if not defined
     42    opts->maxValid = (float) 0x10000; // default value if not defined
     43    opts->maskVal = 0x0001; // default value if not defined
    4044
    4145    // Smoothing
     
    314318        psFree(reducedScalar);
    315319
     320        // EAM 2022.03.29 : if the calculated overscan value is below the threshold,
     321        // declare the readout dead and mask
     322
     323        if ((reduced < overscanOpts->minValid) || (reduced > overscanOpts->maxValid)) {
     324            fprintf (stderr, "bad overscan (1) %f, masking readout\n", reduced);
     325            psImage *mask = input->mask;
     326            for (int y = 0; y < mask->numRows; y++) {
     327                for (int x = 0; x < mask->numCols; x++) {
     328                    mask->data.PS_TYPE_IMAGE_MASK_DATA[y][x] |= overscanOpts->maskVal;
     329                }
     330            }
     331        }
     332
    316333        psFree(stats);
    317334        return true;
     
    371388        // generate stats of overscan vector for header
    372389        {
    373           psString comment = NULL;    // Comment to add
    374           psStats *vectorStats = psStatsAlloc (PS_STAT_SAMPLE_MEAN | PS_STAT_SAMPLE_STDEV);
    375           if (!psVectorStats (vectorStats, reduced, NULL, NULL, 0)) {
    376               psError(PS_ERR_UNKNOWN, false, "failure to measure stats");
    377               return false;
    378           }
    379           psStringAppend(&comment, "Mean Overscan value: %f", vectorStats->sampleMean);
    380           psMetadataAddStr(hdu->header, PS_LIST_TAIL, "HISTORY", PS_META_DUPLICATE_OK, comment, "");
    381           psFree(comment);
    382 
    383           // write metadata header value
    384           psMetadataAddF32(hdu->header, PS_LIST_TAIL, "OVER_VAL", PS_META_REPLACE, "Overscan mean", vectorStats->sampleMean);
    385           psMetadataAddF32(hdu->header, PS_LIST_TAIL, "OVER_SIG", PS_META_REPLACE, "Overscan stdev", vectorStats->sampleStdev);
    386           psFree (vectorStats);
     390            psString comment = NULL;    // Comment to add
     391            psStats *vectorStats = psStatsAlloc (PS_STAT_SAMPLE_MEAN | PS_STAT_SAMPLE_STDEV);
     392            if (!psVectorStats (vectorStats, reduced, NULL, NULL, 0)) {
     393                psError(PS_ERR_UNKNOWN, false, "failure to measure stats");
     394                return false;
     395            }
     396            psStringAppend(&comment, "Mean Overscan value: %f", vectorStats->sampleMean);
     397            psMetadataAddStr(hdu->header, PS_LIST_TAIL, "HISTORY", PS_META_DUPLICATE_OK, comment, "");
     398            psFree(comment);
     399
     400            // write metadata header value
     401            psMetadataAddF32(hdu->header, PS_LIST_TAIL, "OVER_VAL", PS_META_REPLACE, "Overscan mean", vectorStats->sampleMean);
     402            psMetadataAddF32(hdu->header, PS_LIST_TAIL, "OVER_SIG", PS_META_REPLACE, "Overscan stdev", vectorStats->sampleStdev);
     403
     404            // EAM 2022.03.29 : if the calculated overscan value is below the threshold,
     405            // declare the readout dead and mask
     406         
     407            if ((vectorStats->sampleMean < overscanOpts->minValid) || (vectorStats->sampleMean > overscanOpts->maxValid)) {
     408                fprintf (stderr, "bad overscan (2) %f, masking readout\n", vectorStats->sampleMean);
     409                psImage *mask = input->mask;
     410                for (int y = 0; y < mask->numRows; y++) {
     411                    for (int x = 0; x < mask->numCols; x++) {
     412                        mask->data.PS_TYPE_IMAGE_MASK_DATA[y][x] |= overscanOpts->maskVal;
     413                    }
     414                }
     415            }
     416
     417            psFree (vectorStats);
    387418        }
    388419
     
    469500          psMetadataAddF32(hdu->header, PS_LIST_TAIL, "OVER_VAL", PS_META_REPLACE, "Overscan mean", vectorStats->sampleMean);
    470501          psMetadataAddF32(hdu->header, PS_LIST_TAIL, "OVER_SIG", PS_META_REPLACE, "Overscan stdev", vectorStats->sampleStdev);
     502
     503          // EAM 2022.03.29 : if the calculated overscan value is below the threshold,
     504          // declare the readout dead and mask
     505         
     506          if ((vectorStats->sampleMean < overscanOpts->minValid) || (vectorStats->sampleMean > overscanOpts->maxValid)) {
     507              fprintf (stderr, "bad overscan (3) %f, masking readout\n", vectorStats->sampleMean);
     508              psImage *mask = input->mask;
     509              for (int y = 0; y < mask->numRows; y++) {
     510                  for (int x = 0; x < mask->numCols; x++) {
     511                      mask->data.PS_TYPE_IMAGE_MASK_DATA[y][x] |= overscanOpts->maskVal;
     512                  }
     513              }
     514          }
    471515          psFree (vectorStats);
    472516        }
Note: See TracChangeset for help on using the changeset viewer.