12 Helper functions for making fake sources
17 """A version of lsst.pipe.base.DataIdContainer specialized for loading a skyMap
18 in the make fake source catalog scripts. These scripts use the data id in a
19 unique way, such that they only need a tract number. This class supports that
20 use case and should not be used in any other contexts in the LSST stack.
21 Required because butler.subset does not support only tract
25 """Make self.refList from self.idList
28 for dataId
in self.idList:
29 if "tract" not in dataId:
30 raise RuntimeError(
"id must specify which tract to process tract")
34 namespace.log.warn(
"'{}' specified in --id is unused and will be ignored".format(key))
37 self.refList += [namespace.butler.dataRef(datasetType=
"deepCoadd_skyMap", dataId=addId)
43 Crops the Fake image to fit inside the exposure BBox
44 Note that the bboxes need to have the correct offsets applied
46 fakeImage: fake image object
47 expBBox: bounding box for CCD exposure (integer type, BBoxI)
48 and with offsets applied
51 New cropped fake image
53 fakeBBox = fakeImage.getBBox(lsst.afw.image.PARENT)
55 if not expBBox.contains(fakeBBox):
56 newBBox = fakeImage.getBBox(lsst.afw.image.PARENT)
58 fakeImage = fakeImage.Factory(fakeImage, newBBox,
59 lsst.afw.image.PARENT)
63 def addNoise(galImage, detector, rand_gen=None):
65 adds noise to the the image and returns a variance plane
66 INPUT: image to add noise to
67 detector where the image will be located, this sets the gain
68 NOTE: this assumes float type images and will break if given doubles
69 RETURN: a MaskedImageF with the image with additional noise and the
71 giving the variance due to the object
74 varImage = galImage.Factory(galImage,
True)
77 scale = np.sqrt(np.abs(varImage.getArray())) + 1e-12
78 noiseArray = rand_gen.normal(loc=0.0,
80 size=(galImage.getHeight(),
82 noiseImage = lsst.afw.image.ImageF(noiseArray.astype(np.float32))
83 galImage += noiseImage
85 return lsst.afw.image.MaskedImageF(galImage,
None, varImage)