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)
297 """Return a generator of artificial noise.
301 noiseGenerator : `lsst.afw.image.noiseReplacer.NoiseGenerator`
303 if noiseImage
is not None:
308 if exposureId
is not None and exposureId != 0:
312 rand = afwMath.Random(afwMath.Random.MT19937, seed)
313 if noiseMeanVar
is not None:
316 noiseMean, noiseVar = noiseMeanVar
317 noiseMean =
float(noiseMean)
318 noiseVar =
float(noiseVar)
319 noiseStd = math.sqrt(noiseVar)
321 self.
log.debug(
'Using passed-in noise mean = %g, variance = %g -> stdev %g',
322 noiseMean, noiseVar, noiseStd)
326 self.
log.debug(
'Failed to cast passed-in noiseMeanVar to floats: %s',
331 if noiseSource ==
'meta':
333 meta = exposure.getMetadata()
336 bgMean = meta.getAsDouble(
'BGMEAN')
338 noiseStd = math.sqrt(bgMean)
340 self.
log.debug(
'Using noise variance = (BGMEAN = %g) from exposure metadata',
345 self.
log.debug(
'Failed to get BGMEAN from exposure metadata')
347 if noiseSource ==
'variance':
349 self.
log.debug(
'Will draw noise according to the variance plane.')
350 var = exposure.getMaskedImage().getVariance()
353 if noiseSource ==
'variance_median':
355 self.
log.debug(
'Will draw noise using the median of the variance plane.')
356 var = exposure.getMaskedImage().getVariance()
357 s = afwMath.makeStatistics(var, afwMath.MEDIAN)
358 varMedian = s.getValue(afwMath.MEDIAN)
360 self.
log.debug(
"Measured from variance: median variance = %g",
365 im = exposure.getMaskedImage().getImage()
366 s = afwMath.makeStatistics(im, afwMath.MEANCLIP | afwMath.STDEVCLIP)
367 noiseMean = s.getValue(afwMath.MEANCLIP)
368 noiseStd = s.getValue(afwMath.STDEVCLIP)
370 self.
log.debug(
"Measured from image: clipped mean = %g, stdev = %g",