30 """Generate a list of Footprints of sky objects 32 Sky objects don't overlap with other objects. This is determined 33 through the provided `mask` (in which objects are typically flagged 36 The algorithm for determining sky objects is random trial and error: 37 we try up to `nTrialSkySources` random positions to find `nSources` 42 mask : `lsst.afw.image.Mask` 43 Input mask plane, which identifies pixels to avoid for the sky 46 Random number generator seed. 47 config : `SkyObjectsConfig` 48 Configuration for finding sky objects. 52 skyFootprints : `list` of `lsst.afw.detection.Footprint` 53 Footprints of sky objects. Each will have a peak at the center 56 if config.nSources <= 0:
59 skySourceRadius = config.sourceRadius
60 nSkySources = config.nSources
61 nTrialSkySources = config.nTrialSources
62 if nTrialSkySources
is None:
63 nTrialSkySources = config.nTrialSourcesMultiplier*nSkySources
66 box.grow(-(
int(skySourceRadius) + 1))
67 xMin, yMin = box.getMin()
68 xMax, yMax = box.getMax()
71 if config.growMask > 0:
72 avoid = avoid.dilated(config.growMask)
77 for _
in range(nTrialSkySources):
78 if len(skyFootprints) == nSkySources:
81 x =
int(rng.flat(xMin, xMax))
82 y =
int(rng.flat(yMin, yMax))
84 if spans.overlaps(avoid):
89 skyFootprints.append(fp)
static std::shared_ptr< geom::SpanSet > fromMask(image::Mask< T > const &mask, UnaryPredicate comparator=details::AnyBitSetFunctor< T >())
Create a SpanSet from a mask.
static std::shared_ptr< geom::SpanSet > fromShape(int r, Stencil s=Stencil::CIRCLE, lsst::geom::Point2I offset=lsst::geom::Point2I())
Factory function for creating SpanSets from a Stencil.
def generateSkyObjects(mask, seed, config)
A class that can be used to generate sequences of random numbers according to a number of different a...