IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 16413


Ignore:
Timestamp:
Feb 12, 2008, 3:41:06 PM (18 years ago)
Author:
Paul Price
Message:

When statistics are not available, it means that the statistics failed --- mask entire image.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psModules/src/detrend/pmMaskBadPixels.c

    r15910 r16413  
    104104    psImage *mask = readout->mask;      // Corresponding mask
    105105
    106     float median = psMetadataLookupF32 (&status, readout->analysis, "READOUT.MEDIAN");
    107     if (!status) {
    108         psError(PS_ERR_PROGRAMMING, true, "Missing READOUT.MEDIAN from readout analysis data");
    109         return NULL;
    110     }
    111 
    112     float stdev  = psMetadataLookupF32 (&status, readout->analysis, "READOUT.STDEV");
    113     if (!status) {
    114         psError(PS_ERR_PROGRAMMING, true, "Missing READOUT.STDEV from readout analysis data");
    115         return NULL;
    116     }
    117 
    118     psTrace ("psModules.detrend", 3, "suspect: %f +/- %f\n", median, stdev);
    119 
    120106    if (!out) {
    121107        out = psImageAlloc(image->numCols, image->numRows, PS_TYPE_S32);
    122108        psImageInit(out, 0);
     109    }
     110
     111    bool whole = false;                 // Mask whole image?
     112    float median = psMetadataLookupF32 (&status, readout->analysis, "READOUT.MEDIAN");
     113    if (!status || !isfinite(median)) {
     114        whole = true;
     115    }
     116    float stdev  = psMetadataLookupF32 (&status, readout->analysis, "READOUT.STDEV");
     117    if (!status || !isfinite(stdev)) {
     118        whole = true;
     119    }
     120
     121
     122    psTrace ("psModules.detrend", 3, "suspect: %f +/- %f\n", median, stdev);
     123
     124    if (whole) {
     125        // If we get down here and the statistics are missing, then we should go and mask the entire image
     126        psWarning("Missing statistics --- flagging entire image as suspect.");
     127        return (psImage*)psBinaryOp(out, out, "+", psScalarAlloc(1.0, PS_TYPE_S32));
    123128    }
    124129
     
    146151      case PM_MASK_ID_VALUE:
    147152        limit = thresh;
    148         break;
     153        break;
    149154
    150155      case PM_MASK_ID_FRACTION:
    151156        limit = thresh * nTotal;
    152         break;
     157        break;
    153158
    154159      case PM_MASK_ID_SIGMA: {
     
    162167        }
    163168        limit = thresh * stats->clippedStdev;
    164         psTrace ("psModules.detrend", 3, "bad: %f -> %f\n", stats->clippedStdev, limit);
     169        psTrace ("psModules.detrend", 3, "bad: %f -> %f\n", stats->clippedStdev, limit);
    165170        psFree(stats);
    166         break;
     171        break;
    167172      }
    168173
     
    195200        limit = max + 1.0 - thresh * sqrtf((float)max + 1.0);
    196201
    197         psTrace ("psModules.detrend", 3, "bad: mode: %d, stdev: %f, limit: %f\n", max, sqrtf((float)max + 1.0), limit);
    198         break;
     202        psTrace ("psModules.detrend", 3, "bad: mode: %d, stdev: %f, limit: %f\n", max, sqrtf((float)max + 1.0), limit);
     203        break;
    199204      }
    200205      default:
     
    237242    if (!strcasecmp (string, "VALUE")) {
    238243      return PM_MASK_ID_VALUE;
    239     } 
     244    }
    240245    if (!strcasecmp (string, "FRACTION")) {
    241246      return PM_MASK_ID_FRACTION;
    242     } 
     247    }
    243248    if (!strcasecmp (string, "SIGMA")) {
    244249      return PM_MASK_ID_SIGMA;
    245     } 
     250    }
    246251    if (!strcasecmp (string, "POISSON")) {
    247252      return PM_MASK_ID_POISSON;
    248     } 
     253    }
    249254    return PM_MASK_ID_NONE;
    250255}
Note: See TracChangeset for help on using the changeset viewer.