Loading [MathJax]/extensions/tex2jax.js
LSST Applications g0000d66e7c+4a51730b0a,g0485b4d2cb+be65c9c1d7,g0fba68d861+eb108e5914,g1ec0fe41b4+3ea9d11450,g1fd858c14a+41d169aaf2,g2440f9efcc+8c5ae1fdc5,g35bb328faa+8c5ae1fdc5,g470b45d79c+bb7d8e732a,g4d2262a081+972b13e66a,g53246c7159+8c5ae1fdc5,g55585698de+c657de43f9,g56a49b3a55+7eddd92ad8,g60b5630c4e+c657de43f9,g67b6fd64d1+97cc007aa2,g78460c75b0+7e33a9eb6d,g786e29fd12+668abc6043,g7ac00fbb6c+088e1a4fa9,g8352419a5c+8c5ae1fdc5,g8852436030+3f3bba821f,g89139ef638+97cc007aa2,g94187f82dc+c657de43f9,g989de1cb63+97cc007aa2,g9d31334357+c657de43f9,g9f33ca652e+06d39d8afb,ga815be3f0b+8e7c4d07ad,gabe3b4be73+8856018cbb,gabf8522325+977d9fabaf,gb1101e3267+12c96a40b1,gb89ab40317+97cc007aa2,gc91f06edcd+2ffb87f22b,gcf25f946ba+3f3bba821f,gd6cbbdb0b4+1cc2750d2e,gde0f65d7ad+4ad7118dbf,ge278dab8ac+6b863515ed,ge410e46f29+97cc007aa2,gf35d7ec915+97dd712d81,gf5e32f922b+8c5ae1fdc5,gf67bdafdda+97cc007aa2,w.2025.19
LSST Data Management Base Package
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
lsst.pipe.tasks.coaddBase Namespace Reference

Classes

class  CoaddBaseConfig
 
class  CoaddBaseTask
 

Functions

 makeSkyInfo (skyMap, tractId, patchId)
 
 reorderAndPadList (inputList, inputKeys, outputKeys, padWith=None)
 
 reorderRefs (inputRefs, outputSortKeyOrder, dataIdKey)
 
 subBBoxIter (bbox, subregionSize)
 
None growValidPolygons (coaddInputs, int growBy)
 
 removeMaskPlanes (afwImage.Mask mask, Iterable mask_planes, Logger|None logger=None)
 
list[tuple[int, int]] setRejectedMaskMapping (StatisticsControl statsCtrl)
 

Function Documentation

◆ growValidPolygons()

None lsst.pipe.tasks.coaddBase.growValidPolygons ( coaddInputs,
int growBy )
Grow coaddInputs' ccds' ValidPolygons in place.

Either modify each ccd's validPolygon in place, or if CoaddInputs
does not have a validPolygon, create one from its bbox.

Parameters
----------
coaddInputs : `lsst.afw.image.coaddInputs`
    CoaddInputs object containing the ccds to grow the valid polygons of.
growBy : `int`
    The value to grow the valid polygons by.

Notes
-----
Negative values for ``growBy`` can shrink the polygons.

Definition at line 274 of file coaddBase.py.

274def growValidPolygons(coaddInputs, growBy: int) -> None:
275 """Grow coaddInputs' ccds' ValidPolygons in place.
276
277 Either modify each ccd's validPolygon in place, or if CoaddInputs
278 does not have a validPolygon, create one from its bbox.
279
280 Parameters
281 ----------
282 coaddInputs : `lsst.afw.image.coaddInputs`
283 CoaddInputs object containing the ccds to grow the valid polygons of.
284 growBy : `int`
285 The value to grow the valid polygons by.
286
287 Notes
288 -----
289 Negative values for ``growBy`` can shrink the polygons.
290 """
291 for ccd in coaddInputs.ccds:
292 polyOrig = ccd.getValidPolygon()
293 validPolyBBox = polyOrig.getBBox() if polyOrig else ccd.getBBox()
294 validPolyBBox.grow(growBy)
295 if polyOrig:
296 validPolygon = polyOrig.intersectionSingle(validPolyBBox)
297 else:
298 validPolygon = Polygon(geom.Box2D(validPolyBBox))
299
300 ccd.validPolygon = validPolygon
301
302
A floating-point coordinate rectangle geometry.
Definition Box.h:413

◆ makeSkyInfo()

lsst.pipe.tasks.coaddBase.makeSkyInfo ( skyMap,
tractId,
patchId )
Constructs SkyInfo used by coaddition tasks for multiple
patchId formats.

Parameters
----------
skyMap : `lsst.skyMap.SkyMap`
    Sky map.
tractId : `int`
    The ID of the tract.
patchId : `str` or `int` or `tuple` of `int`
    Either Gen2-style comma delimited string (e.g. '4,5'),
    tuple of integers (e.g (4, 5), Gen3-style integer.

Returns
-------
makeSkyInfo : `lsst.pipe.base.Struct`
    pipe_base Struct with attributes:

    ``skyMap``
        Sky map (`lsst.skyMap.SkyMap`).
    ``tractInfo``
        Information for chosen tract of sky map (`lsst.skyMap.TractInfo`).
    ``patchInfo``
        Information about chosen patch of tract (`lsst.skyMap.PatchInfo`).
    ``wcs``
        WCS of tract (`lsst.afw.image.SkyWcs`).
    ``bbox``
        Outer bbox of patch, as an geom Box2I (`lsst.afw.geom.Box2I`).

Definition at line 112 of file coaddBase.py.

112def makeSkyInfo(skyMap, tractId, patchId):
113 """Constructs SkyInfo used by coaddition tasks for multiple
114 patchId formats.
115
116 Parameters
117 ----------
118 skyMap : `lsst.skyMap.SkyMap`
119 Sky map.
120 tractId : `int`
121 The ID of the tract.
122 patchId : `str` or `int` or `tuple` of `int`
123 Either Gen2-style comma delimited string (e.g. '4,5'),
124 tuple of integers (e.g (4, 5), Gen3-style integer.
125
126 Returns
127 -------
128 makeSkyInfo : `lsst.pipe.base.Struct`
129 pipe_base Struct with attributes:
130
131 ``skyMap``
132 Sky map (`lsst.skyMap.SkyMap`).
133 ``tractInfo``
134 Information for chosen tract of sky map (`lsst.skyMap.TractInfo`).
135 ``patchInfo``
136 Information about chosen patch of tract (`lsst.skyMap.PatchInfo`).
137 ``wcs``
138 WCS of tract (`lsst.afw.image.SkyWcs`).
139 ``bbox``
140 Outer bbox of patch, as an geom Box2I (`lsst.afw.geom.Box2I`).
141 """
142 tractInfo = skyMap[tractId]
143
144 if isinstance(patchId, str) and ',' in patchId:
145 # patch format is "xIndex,yIndex"
146 patchIndex = tuple(int(i) for i in patchId.split(","))
147 else:
148 patchIndex = patchId
149
150 patchInfo = tractInfo.getPatchInfo(patchIndex)
151
152 return pipeBase.Struct(
153 skyMap=skyMap,
154 tractInfo=tractInfo,
155 patchInfo=patchInfo,
156 wcs=tractInfo.getWcs(),
157 bbox=patchInfo.getOuterBBox(),
158 )
159
160

◆ removeMaskPlanes()

lsst.pipe.tasks.coaddBase.removeMaskPlanes ( afwImage.Mask mask,
Iterable mask_planes,
Logger | None logger = None )
Unset the mask of an image for mask planes specified in the config.

Parameters
----------
mask : `lsst.afw.image.Mask`
    The mask to be modified.
mask_planes : `list`
    The list of mask planes to be removed.
logger : `logging.Logger`, optional
    Logger to log messages.

Definition at line 303 of file coaddBase.py.

305):
306 """Unset the mask of an image for mask planes specified in the config.
307
308 Parameters
309 ----------
310 mask : `lsst.afw.image.Mask`
311 The mask to be modified.
312 mask_planes : `list`
313 The list of mask planes to be removed.
314 logger : `logging.Logger`, optional
315 Logger to log messages.
316 """
317 for maskPlane in mask_planes:
318 try:
319 mask &= ~mask.getPlaneBitMask(maskPlane)
320 except InvalidParameterError:
321 if logger:
322 logger.warning(
323 "Unable to remove mask plane %s: no mask plane with that name was found.",
324 maskPlane,
325 )
326
327

◆ reorderAndPadList()

lsst.pipe.tasks.coaddBase.reorderAndPadList ( inputList,
inputKeys,
outputKeys,
padWith = None )
Match the order of one list to another, padding if necessary

Parameters
----------
inputList : `list`
    List to be reordered and padded. Elements can be any type.
inputKeys :  `iterable`
    Iterable of values to be compared with outputKeys. Length must match `inputList`.
outputKeys : `iterable`
    Iterable of values to be compared with inputKeys.
padWith : `Unknown`
    Any value to be inserted where inputKey not in outputKeys.

Returns
-------
outputList : `list`
    Copy of inputList reordered per outputKeys and padded with `padWith`
    so that the length matches length of outputKeys.

Definition at line 161 of file coaddBase.py.

161def reorderAndPadList(inputList, inputKeys, outputKeys, padWith=None):
162 """Match the order of one list to another, padding if necessary
163
164 Parameters
165 ----------
166 inputList : `list`
167 List to be reordered and padded. Elements can be any type.
168 inputKeys : `iterable`
169 Iterable of values to be compared with outputKeys. Length must match `inputList`.
170 outputKeys : `iterable`
171 Iterable of values to be compared with inputKeys.
172 padWith : `Unknown`
173 Any value to be inserted where inputKey not in outputKeys.
174
175 Returns
176 -------
177 outputList : `list`
178 Copy of inputList reordered per outputKeys and padded with `padWith`
179 so that the length matches length of outputKeys.
180 """
181 outputList = []
182 for d in outputKeys:
183 if d in inputKeys:
184 outputList.append(inputList[inputKeys.index(d)])
185 else:
186 outputList.append(padWith)
187 return outputList
188
189

◆ reorderRefs()

lsst.pipe.tasks.coaddBase.reorderRefs ( inputRefs,
outputSortKeyOrder,
dataIdKey )
Reorder inputRefs per outputSortKeyOrder.

Any inputRefs which are lists will be resorted per specified key e.g.,
'detector.' Only iterables will be reordered, and values can be of type
`lsst.pipe.base.connections.DeferredDatasetRef` or
`lsst.daf.butler.core.datasets.ref.DatasetRef`.

Returned lists of refs have the same length as the outputSortKeyOrder.
If an outputSortKey not in the inputRef, then it will be padded with None.
If an inputRef contains an inputSortKey that is not in the
outputSortKeyOrder it will be removed.

Parameters
----------
inputRefs : `lsst.pipe.base.connections.QuantizedConnection`
    Input references to be reordered and padded.
outputSortKeyOrder : `iterable`
    Iterable of values to be compared with inputRef's dataId[dataIdKey].
dataIdKey : `str`
    The data ID key in the dataRefs to compare with the outputSortKeyOrder.

Returns
-------
inputRefs : `lsst.pipe.base.connections.QuantizedConnection`
    Quantized Connection with sorted DatasetRef values sorted if iterable.

Definition at line 190 of file coaddBase.py.

190def reorderRefs(inputRefs, outputSortKeyOrder, dataIdKey):
191 """Reorder inputRefs per outputSortKeyOrder.
192
193 Any inputRefs which are lists will be resorted per specified key e.g.,
194 'detector.' Only iterables will be reordered, and values can be of type
195 `lsst.pipe.base.connections.DeferredDatasetRef` or
196 `lsst.daf.butler.core.datasets.ref.DatasetRef`.
197
198 Returned lists of refs have the same length as the outputSortKeyOrder.
199 If an outputSortKey not in the inputRef, then it will be padded with None.
200 If an inputRef contains an inputSortKey that is not in the
201 outputSortKeyOrder it will be removed.
202
203 Parameters
204 ----------
205 inputRefs : `lsst.pipe.base.connections.QuantizedConnection`
206 Input references to be reordered and padded.
207 outputSortKeyOrder : `iterable`
208 Iterable of values to be compared with inputRef's dataId[dataIdKey].
209 dataIdKey : `str`
210 The data ID key in the dataRefs to compare with the outputSortKeyOrder.
211
212 Returns
213 -------
214 inputRefs : `lsst.pipe.base.connections.QuantizedConnection`
215 Quantized Connection with sorted DatasetRef values sorted if iterable.
216 """
217 for connectionName, refs in inputRefs:
218 if isinstance(refs, Iterable):
219 if hasattr(refs[0], "dataId"):
220 inputSortKeyOrder = [ref.dataId[dataIdKey] for ref in refs]
221 else:
222 inputSortKeyOrder = [handle.datasetRef.dataId[dataIdKey] for handle in refs]
223 if inputSortKeyOrder != outputSortKeyOrder:
224 setattr(inputRefs, connectionName,
225 reorderAndPadList(refs, inputSortKeyOrder, outputSortKeyOrder))
226 return inputRefs
227
228

◆ setRejectedMaskMapping()

list[tuple[int, int]] lsst.pipe.tasks.coaddBase.setRejectedMaskMapping ( StatisticsControl statsCtrl)
Map certain mask planes of the warps to new planes for the coadd.

If a pixel is rejected due to a mask value other than EDGE, NO_DATA,
or CLIPPED, set it to REJECTED on the coadd.
If a pixel is rejected due to EDGE, set the coadd pixel to SENSOR_EDGE.
If a pixel is rejected due to CLIPPED, set the coadd pixel to CLIPPED.

Parameters
----------
statsCtrl : `lsst.afw.math.StatisticsControl`
    Statistics control object for coadd.

Returns
-------
maskMap : `list` of `tuple` of `int`
    A list of mappings of mask planes of the warped exposures to
    mask planes of the coadd.

Definition at line 328 of file coaddBase.py.

328def setRejectedMaskMapping(statsCtrl: StatisticsControl) -> list[tuple[int, int]]:
329 """Map certain mask planes of the warps to new planes for the coadd.
330
331 If a pixel is rejected due to a mask value other than EDGE, NO_DATA,
332 or CLIPPED, set it to REJECTED on the coadd.
333 If a pixel is rejected due to EDGE, set the coadd pixel to SENSOR_EDGE.
334 If a pixel is rejected due to CLIPPED, set the coadd pixel to CLIPPED.
335
336 Parameters
337 ----------
338 statsCtrl : `lsst.afw.math.StatisticsControl`
339 Statistics control object for coadd.
340
341 Returns
342 -------
343 maskMap : `list` of `tuple` of `int`
344 A list of mappings of mask planes of the warped exposures to
345 mask planes of the coadd.
346 """
347 edge = 2 ** afwImage.Mask.addMaskPlane("EDGE")
348 noData = 2 ** afwImage.Mask.addMaskPlane("NO_DATA")
349 clipped = 2 ** afwImage.Mask.addMaskPlane("CLIPPED")
350 toReject = statsCtrl.getAndMask() & (~noData) & (~edge) & (~clipped)
351 maskMap = [
352 (toReject, 2 ** afwImage.Mask.addMaskPlane("REJECTED")),
353 (edge, 2 ** afwImage.Mask.addMaskPlane("SENSOR_EDGE")),
354 (clipped, clipped),
355 ]
356 return maskMap

◆ subBBoxIter()

lsst.pipe.tasks.coaddBase.subBBoxIter ( bbox,
subregionSize )
Iterate over subregions of a bbox.

Parameters
----------
bbox : `lsst.geom.Box2I`
    Bounding box over which to iterate.
subregionSize : `lsst.geom.Extent2I`
    Size of sub-bboxes.

Yields
------
subBBox : `lsst.geom.Box2I`
    Next sub-bounding box of size ``subregionSize`` or smaller; each ``subBBox``
    is contained within ``bbox``, so it may be smaller than ``subregionSize`` at
    the edges of ``bbox``, but it will never be empty.

Raises
------
RuntimeError
    Raised if any of the following occur:
    - The given bbox is empty.
    - The subregionSize is 0.

Definition at line 229 of file coaddBase.py.

229def subBBoxIter(bbox, subregionSize):
230 """Iterate over subregions of a bbox.
231
232 Parameters
233 ----------
234 bbox : `lsst.geom.Box2I`
235 Bounding box over which to iterate.
236 subregionSize : `lsst.geom.Extent2I`
237 Size of sub-bboxes.
238
239 Yields
240 ------
241 subBBox : `lsst.geom.Box2I`
242 Next sub-bounding box of size ``subregionSize`` or smaller; each ``subBBox``
243 is contained within ``bbox``, so it may be smaller than ``subregionSize`` at
244 the edges of ``bbox``, but it will never be empty.
245
246 Raises
247 ------
248 RuntimeError
249 Raised if any of the following occur:
250 - The given bbox is empty.
251 - The subregionSize is 0.
252 """
253 if bbox.isEmpty():
254 raise RuntimeError("bbox %s is empty" % (bbox,))
255 if subregionSize[0] < 1 or subregionSize[1] < 1:
256 raise RuntimeError("subregionSize %s must be nonzero" % (subregionSize,))
257
258 for rowShift in range(0, bbox.getHeight(), subregionSize[1]):
259 for colShift in range(0, bbox.getWidth(), subregionSize[0]):
260 subBBox = geom.Box2I(bbox.getMin() + geom.Extent2I(colShift, rowShift), subregionSize)
261 subBBox.clip(bbox)
262 if subBBox.isEmpty():
263 raise RuntimeError("Bug: empty bbox! bbox=%s, subregionSize=%s, "
264 "colShift=%s, rowShift=%s" %
265 (bbox, subregionSize, colShift, rowShift))
266 yield subBBox
267
268
269# Note that this is implemented as a free-floating function to enable reuse in
270# lsst.pipe.tasks.makeWarp and in lsst.drp.tasks.make_psf_matched_warp
271# without creating any relationships between the two classes.
272# This may be converted to a method after makeWarp.py is removed altogether in
273# DM-47916.
An integer coordinate rectangle.
Definition Box.h:55