Changeset 19165 for trunk/ppSub/src/ppSubReadout.c
- Timestamp:
- Aug 22, 2008, 12:46:26 PM (18 years ago)
- File:
-
- 1 edited
-
trunk/ppSub/src/ppSubReadout.c (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ppSub/src/ppSubReadout.c
r19060 r19165 98 98 int binning = psMetadataLookupS32(NULL, recipe, "SPAM.BINNING"); // Binning for SPAM kernel 99 99 float penalty = psMetadataLookupF32(NULL, recipe, "PENALTY"); // Penalty for wideness 100 psMaskType maskIn = pmConfigMaskGet("MASK.VALUE", config); // Bits to mask going in to pmSubtractionMatch 101 psMaskType maskOut = pmConfigMaskGet("BLANK", config); // Bits to mask after pmSubtractionMatch 100 psString maskValStr = psMetadataLookupStr(NULL, recipe, "MASK.IN"); // Name of bits to mask going in 101 psMaskType maskVal = pmConfigMaskGet(maskValStr, config); // Bits to mask going in to pmSubtractionMatch 102 psString maskPoorStr = psMetadataLookupStr(NULL, recipe, "MASK.POOR"); // Name of bits to mask for poor 103 psMaskType maskPoor = pmConfigMaskGet(maskPoorStr, config); // Bits to mask for poor pixels 104 psString maskBadStr = psMetadataLookupStr(NULL, recipe, "MASK.BAD"); // Name of bits to mask for bad 105 psMaskType maskBad = pmConfigMaskGet(maskBadStr, config); // Bits to mask for bad pixels 102 106 float badFrac = psMetadataLookupF32(NULL, recipe, "BADFRAC"); // Maximum bad fraction 103 107 const char *stampsName = psMetadataLookupStr(&mdok, config->arguments, "STAMPS"); // Filename for stamps … … 113 117 int renormWidth = psMetadataLookupS32(&mdok, recipe, "RENORM.WIDTH"); // Width for renormalise 114 118 115 pmSubtractionMode mode = dual ? PM_SUBTRACTION_MODE_DUAL : PM_SUBTRACTION_MODE_UNSURE; // Subtraction mode 119 psString interpModeStr = psMetadataLookupStr(&mdok, recipe, "INTERPOLATION"); // Interpolation mode 120 psImageInterpolateMode interpMode = psImageInterpolateModeFromString(interpModeStr); // Interp 121 if (interpMode == PS_INTERPOLATE_NONE) { 122 psError(PS_ERR_BAD_PARAMETER_VALUE, false, "Unknown interpolation mode: %s", interpModeStr); 123 return false; 124 } 125 float poorFrac = psMetadataLookupF32(&mdok, recipe, "POOR.FRACTION"); // Fraction for "poor" 126 127 pmSubtractionMode subMode = dual ? PM_SUBTRACTION_MODE_DUAL : PM_SUBTRACTION_MODE_UNSURE; // Subtracn mode 116 128 117 129 // Generate masks if they don't exist … … 134 146 } 135 147 136 if (!pmReadoutMaskNonfinite(inRO, maskIn)) {148 if (!pmReadoutMaskNonfinite(inRO, pmConfigMaskGet("SAT", config))) { 137 149 psError(PS_ERR_UNKNOWN, false, "Unable to mask non-finite pixels in input."); 138 150 return false; 139 151 } 140 if (!pmReadoutMaskNonfinite(refRO, maskIn)) {152 if (!pmReadoutMaskNonfinite(refRO, pmConfigMaskGet("SAT", config))) { 141 153 psError(PS_ERR_UNKNOWN, false, "Unable to mask non-finite pixels in reference."); 142 154 return false; … … 153 165 } 154 166 167 // Interpolate over bad pixels, so the bad pixels don't explode 168 if (!pmReadoutInterpolateBadPixels(inRO, maskVal, interpMode, poorFrac, maskPoor, maskBad)) { 169 psError(PS_ERR_UNKNOWN, false, "Unable to interpolate bad pixels for input image."); 170 return false; 171 } 172 if (!pmReadoutInterpolateBadPixels(refRO, maskVal, interpMode, poorFrac, maskPoor, maskBad)) { 173 psError(PS_ERR_UNKNOWN, false, "Unable to interpolate bad pixels for reference image."); 174 return false; 175 } 176 maskVal |= maskBad; 177 178 // Match the PSFs 155 179 if (!pmSubtractionMatch(inConv, refConv, inRO, refRO, footprint, regionSize, spacing, threshold, sources, 156 180 stampsName, type, size, order, widths, orders, inner, ringsOrder, binning, 157 penalty, optimum, optWidths, optOrder, optThresh, iter, rej, mask In,158 mask Out, badFrac, mode)) {181 penalty, optimum, optWidths, optOrder, optThresh, iter, rej, maskVal, 182 maskBad, maskPoor, poorFrac, badFrac, subMode)) { 159 183 psError(PS_ERR_UNKNOWN, false, "Unable to match images."); 160 184 psFree(inConv); … … 221 245 #ifdef TESTING 222 246 { 223 pmReadoutMaskApply(minuend, mask Out);247 pmReadoutMaskApply(minuend, maskVal); 224 248 psFits *fits = psFitsOpen("minuend.fits", "w"); 225 249 psFitsWriteImage(fits, NULL, minuend->image, 0, NULL); … … 227 251 } 228 252 { 229 pmReadoutMaskApply(subtrahend, mask Out);253 pmReadoutMaskApply(subtrahend, maskVal); 230 254 psFits *fits = psFitsOpen("subtrahend.fits", "w"); 231 255 psFitsWriteImage(fits, NULL, subtrahend->image, 0, NULL); … … 267 291 268 292 // set maskValue and markValue in the psphot recipe 269 psMaskType maskValue = pmConfigMaskGet("BLANK", config); // Bits to mask293 psMaskType maskValue = maskVal; 270 294 psMaskType markValue = pmConfigMaskGet("MARK.VALUE", config); // Bits to use for marking 271 295 psMetadataAddU8(recipe, PS_LIST_TAIL, "MASK.PSPHOT", PS_META_REPLACE, "Bits to mask", maskValue); … … 306 330 outRO->data_exists = outCell->data_exists = outCell->parent->data_exists = true; 307 331 308 pmReadoutMaskApply(outRO, mask Out);332 pmReadoutMaskApply(outRO, maskBad); 309 333 310 334 psFree(inConv); … … 314 338 for (int y = 0; y < outRO->image->numRows; y++) { 315 339 for (int x = 0; x < outRO->image->numCols; x++) { 316 if (isnan(outRO->image->data.F32[y][x]) && !(outRO->mask->data.U8[y][x] & mask Out)) {340 if (isnan(outRO->image->data.F32[y][x]) && !(outRO->mask->data.U8[y][x] & maskVal)) { 317 341 printf("Unmasked NAN at %d %d --> %d\n", x, y, outRO->mask->data.U8[y][x]); 318 342 } … … 329 353 if (renorm) { 330 354 psRandom *rng = psRandomAlloc(PS_RANDOM_TAUS, 0); // Random number generator 331 if (!pmReadoutWeightRenorm(outRO, mask Out, PS_STAT_ROBUST_MEDIAN, PS_STAT_ROBUST_STDEV,355 if (!pmReadoutWeightRenorm(outRO, maskBad, PS_STAT_ROBUST_MEDIAN, PS_STAT_ROBUST_STDEV, 332 356 renormWidth, rng)) { 333 357 psError(PS_ERR_UNKNOWN, false, "Unable to renormalise weights for photometry.");
Note:
See TracChangeset
for help on using the changeset viewer.
