136 def __init__(self, config, exposure, footprints, noiseImage=None, exposureId=None, log=None):
149 mi = exposure.getMaskedImage()
155 for maskname
in [
'THISDET',
'OTHERDET']:
156 if maskname
in mask.getMaskPlaneDict():
158 plane = mask.getMaskPlane(maskname)
160 self.
log.debug(
'Mask plane "%s" already existed', maskname)
163 plane = mask.addMaskPlane(maskname)
165 mask.clearMaskPlane(plane)
166 bitmask = mask.getPlaneBitMask(maskname)
167 bitmasks.append(bitmask)
169 self.
log.debug(
'Mask plane "%s": plane %i, bitmask %i = 0x%x',
170 maskname, plane, bitmask, bitmask)
183 for id, fp
in footprints.items():
187 self.
heavies[id] = afwDet.makeHeavyFootprint(fp[1], mi)
198 noisegen = self.
getNoiseGenerator(exposure, noiseImage, noiseMeanVar, exposureId=exposureId)
200 self.
log.debug(
'Using noise generator: %s', str(noisegen))
202 fp = footprints[id][1]
203 noiseFp = noisegen.getHeavyFootprint(fp)
302 """Return a generator of artificial noise.
306 noiseGenerator : `lsst.afw.image.noiseReplacer.NoiseGenerator`
308 if noiseImage
is not None:
313 if exposureId
is not None and exposureId != 0:
317 rand = afwMath.Random(afwMath.Random.MT19937, seed)
318 if noiseMeanVar
is not None:
321 noiseMean, noiseVar = noiseMeanVar
322 noiseMean = float(noiseMean)
323 noiseVar = float(noiseVar)
324 noiseStd = math.sqrt(noiseVar)
326 self.
log.debug(
'Using passed-in noise mean = %g, variance = %g -> stdev %g',
327 noiseMean, noiseVar, noiseStd)
331 self.
log.debug(
'Failed to cast passed-in noiseMeanVar to floats: %s',
336 if noiseSource ==
'meta':
338 meta = exposure.getMetadata()
341 bgMean = meta.getAsDouble(
'BGMEAN')
343 noiseStd = math.sqrt(bgMean)
345 self.
log.debug(
'Using noise variance = (BGMEAN = %g) from exposure metadata',
350 self.
log.debug(
'Failed to get BGMEAN from exposure metadata')
352 if noiseSource ==
'variance':
354 self.
log.debug(
'Will draw noise according to the variance plane.')
355 var = exposure.getMaskedImage().getVariance()
358 if noiseSource ==
'variance_median':
360 self.
log.debug(
'Will draw noise using the median of the variance plane.')
361 var = exposure.getMaskedImage().getVariance()
362 s = afwMath.makeStatistics(var, afwMath.MEDIAN)
363 varMedian = s.getValue(afwMath.MEDIAN)
365 self.
log.debug(
"Measured from variance: median variance = %g",
370 im = exposure.getMaskedImage().getImage()
371 s = afwMath.makeStatistics(im, afwMath.MEANCLIP | afwMath.STDEVCLIP)
372 noiseMean = s.getValue(afwMath.MEANCLIP)
373 noiseStd = s.getValue(afwMath.STDEVCLIP)
375 self.
log.debug(
"Measured from image: clipped mean = %g, stdev = %g",