LSST Applications g0f08755f38+9c285cab97,g1635faa6d4+13f3999e92,g1653933729+a8ce1bb630,g1a0ca8cf93+bf6eb00ceb,g28da252d5a+0829b12dee,g29321ee8c0+5700dc9eac,g2bbee38e9b+9634bc57db,g2bc492864f+9634bc57db,g2cdde0e794+c2c89b37c4,g3156d2b45e+41e33cbcdc,g347aa1857d+9634bc57db,g35bb328faa+a8ce1bb630,g3a166c0a6a+9634bc57db,g3e281a1b8c+9f2c4e2fc3,g414038480c+077ccc18e7,g41af890bb2+fde0dd39b6,g5fbc88fb19+17cd334064,g781aacb6e4+a8ce1bb630,g80478fca09+55a9465950,g82479be7b0+d730eedb7d,g858d7b2824+9c285cab97,g9125e01d80+a8ce1bb630,g9726552aa6+10f999ec6a,ga5288a1d22+2a84bb7594,gacf8899fa4+c69c5206e8,gae0086650b+a8ce1bb630,gb58c049af0+d64f4d3760,gc28159a63d+9634bc57db,gcf0d15dbbd+4b7d09cae4,gda3e153d99+9c285cab97,gda6a2b7d83+4b7d09cae4,gdaeeff99f8+1711a396fd,ge2409df99d+5e831397f4,ge79ae78c31+9634bc57db,gf0baf85859+147a0692ba,gf3967379c6+41c94011de,gf3fb38a9a8+8f07a9901b,gfb92a5be7c+9c285cab97,w.2024.46
LSST Data Management Base Package
Loading...
Searching...
No Matches
Classes | Functions
lsst.meas.algorithms.skyObjects Namespace Reference

Classes

class  SkyObjectsConfig
 
class  SkyObjectsTask
 

Functions

 generateSkyObjects (mask, seed, config)
 

Function Documentation

◆ generateSkyObjects()

lsst.meas.algorithms.skyObjects.generateSkyObjects ( mask,
seed,
config )
Generate a list of Footprints of sky objects

Sky objects don't overlap with other objects. This is determined
through the provided `mask` (in which objects are typically flagged
as `DETECTED`).

Sky objects are positioned using a quasi-random Halton sequence number
generator. This is a deterministic sequence that mimics a random trial and
error approach whilst acting to minimize clustering of points for a given
field of view. Up to `nTrialSources` points are generated, returning the
first `nSources` that do not overlap with the mask.

Parameters
----------
mask : `lsst.afw.image.Mask`
    Input mask plane, which identifies pixels to avoid for the sky
    objects.
seed : `int`
    Random number generator seed.
config : `SkyObjectsConfig`
    Configuration for finding sky objects.

Returns
-------
skyFootprints : `list` of `lsst.afw.detection.Footprint`
    Footprints of sky objects. Each will have a peak at the center
    of the sky object.

Definition at line 71 of file skyObjects.py.

71def generateSkyObjects(mask, seed, config):
72 """Generate a list of Footprints of sky objects
73
74 Sky objects don't overlap with other objects. This is determined
75 through the provided `mask` (in which objects are typically flagged
76 as `DETECTED`).
77
78 Sky objects are positioned using a quasi-random Halton sequence number
79 generator. This is a deterministic sequence that mimics a random trial and
80 error approach whilst acting to minimize clustering of points for a given
81 field of view. Up to `nTrialSources` points are generated, returning the
82 first `nSources` that do not overlap with the mask.
83
84 Parameters
85 ----------
86 mask : `lsst.afw.image.Mask`
87 Input mask plane, which identifies pixels to avoid for the sky
88 objects.
89 seed : `int`
90 Random number generator seed.
91 config : `SkyObjectsConfig`
92 Configuration for finding sky objects.
93
94 Returns
95 -------
96 skyFootprints : `list` of `lsst.afw.detection.Footprint`
97 Footprints of sky objects. Each will have a peak at the center
98 of the sky object.
99 """
100 if config.nSources <= 0:
101 return []
102
103 skySourceRadius = config.sourceRadius
104 nSkySources = config.nSources
105 nTrialSkySources = config.nTrialSources
106 if nTrialSkySources is None:
107 nTrialSkySources = config.nTrialSourcesMultiplier*nSkySources
108
109 box = mask.getBBox()
110 box.grow(-(int(skySourceRadius) + 1)) # Avoid objects partially off the image
111 xMin, yMin = box.getMin()
112 xMax, yMax = box.getMax()
113
114 avoid = lsst.afw.geom.SpanSet.fromMask(mask, mask.getPlaneBitMask(config.avoidMask))
115 if config.growMask > 0:
116 avoid = avoid.dilated(config.growMask)
117
118 sampler = qmc.Halton(d=2, seed=seed).random(nTrialSkySources)
119 sample = qmc.scale(sampler, [xMin, yMin], [xMax, yMax])
120
121 skyFootprints = []
122 for x, y in zip(sample[:, 0].astype(int), sample[:, 1].astype(int)):
123 if len(skyFootprints) == nSkySources:
124 break
125
126 spans = lsst.afw.geom.SpanSet.fromShape(int(skySourceRadius), offset=(x, y))
127 if spans.overlaps(avoid):
128 continue
129
130 fp = lsst.afw.detection.Footprint(spans, mask.getBBox())
131 fp.addPeak(x, y, 0)
132 skyFootprints.append(fp)
133
134 # Add doubled-in-size sky object spanSet to the avoid mask.
135 avoid = avoid.union(spans.dilated(int(skySourceRadius)))
136
137 return skyFootprints
138
139
Class to describe the properties of a detected object from an image.
Definition Footprint.h:63
static std::shared_ptr< geom::SpanSet > fromMask(image::Mask< T > const &mask, UnaryPredicate comparator=details::AnyBitSetFunctor< T >())
Create a SpanSet from a mask.
Definition SpanSet.h:644
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.
Definition SpanSet.cc:688