Loading [MathJax]/extensions/tex2jax.js
LSST Applications g0fba68d861+aa97b6e50c,g1ec0fe41b4+f536777771,g1fd858c14a+a9301854fb,g35bb328faa+fcb1d3bbc8,g4af146b050+a5c07d5b1d,g4d2262a081+78f4f01b60,g53246c7159+fcb1d3bbc8,g56a49b3a55+9c12191793,g5a012ec0e7+3632fc3ff3,g60b5630c4e+ded28b650d,g67b6fd64d1+ed4b5058f4,g78460c75b0+2f9a1b4bcd,g786e29fd12+cf7ec2a62a,g8352419a5c+fcb1d3bbc8,g87b7deb4dc+7b42cf88bf,g8852436030+e5453db6e6,g89139ef638+ed4b5058f4,g8e3bb8577d+d38d73bdbd,g9125e01d80+fcb1d3bbc8,g94187f82dc+ded28b650d,g989de1cb63+ed4b5058f4,g9d31334357+ded28b650d,g9f33ca652e+50a8019d8c,gabe3b4be73+1e0a283bba,gabf8522325+fa80ff7197,gb1101e3267+d9fb1f8026,gb58c049af0+f03b321e39,gb89ab40317+ed4b5058f4,gcf25f946ba+e5453db6e6,gcf6002c91b+2a0c9e9e84,gd6cbbdb0b4+bb83cc51f8,gdd1046aedd+ded28b650d,gde0f65d7ad+66b3a48cb7,ge278dab8ac+d65b3c2b70,ge410e46f29+ed4b5058f4,gf23fb2af72+b7cae620c0,gf5e32f922b+fcb1d3bbc8,gf67bdafdda+ed4b5058f4,w.2025.16
LSST Data Management Base Package
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
lsst.afw.multiband.MultibandBase Class Reference
Inheritance diagram for lsst.afw.multiband.MultibandBase:
lsst.afw.detection.multiband.MultibandFootprint lsst.afw.image._image._multiband.MultibandImageBase lsst.afw.image._image._multiband.MultibandPixel lsst.afw.image._image._multiband.MultibandTripleBase lsst.afw.image._image._multiband.MultibandImage lsst.afw.image._image._multiband.MultibandMask lsst.afw.image._exposure._multiband.MultibandExposure lsst.afw.image._image._multiband.MultibandMaskedImage

Public Member Functions

 __init__ (self, bands, singles, bbox=None)
 
 clone (self, deep=True)
 
 filters (self)
 
 bands (self)
 
 singles (self)
 
 getBBox (self)
 
 getXY0 (self)
 
 x0 (self)
 
 y0 (self)
 
 origin (self)
 
 width (self)
 
 height (self)
 
 __len__ (self)
 
 __getitem__ (self, args)
 
 __iter__ (self)
 
 __next__ (self)
 
 setXY0 (self, xy0)
 
 shiftedTo (self, xy0)
 
 shiftedBy (self, offset)
 
 __repr__ (self)
 
 __str__ (self)
 

Public Attributes

 y0
 
 x0
 
 bands
 
 singles = Box2I(xy0, self._bbox.getDimensions())
 
 array
 

Protected Member Functions

 _bandNamesToIndex (self, bandIndex)
 
 _slice (self, bands, bandIndex, indices)
 

Protected Attributes

 _bands = tuple([f for f in bands])
 
 _singles = tuple(singles)
 
 _bbox = self._singles[0].getBBox()
 
int _bandIndex = 0
 

Detailed Description

Base class for multiband objects

The LSST stack has a number of image-like classes that have
data in multiple bands that are stored as separate objects.
Analyzing the data can be easier using a Multiband object that
wraps the underlying data as a single data cube that can be sliced and
updated as a single object.

`MultibandBase` is designed to contain the most important universal
methods for initializing, slicing, and extracting common parameters
(such as the bounding box or XY0 position) to all of the single band classes,
as long as derived classes either call the base class `__init__`
or set the `_bands`, `_singles`, and `_bbox`.

Parameters
----------
bands: `list`
    List of band names.
singles: `list`
    List of single band objects
bbox: `Box2I`
    By default `MultibandBase` uses `singles[0].getBBox()` to set
    the bounding box of the multiband

Definition at line 31 of file multiband.py.

Constructor & Destructor Documentation

◆ __init__()

lsst.afw.multiband.MultibandBase.__init__ ( self,
bands,
singles,
bbox = None )

Definition at line 56 of file multiband.py.

56 def __init__(self, bands, singles, bbox=None):
57 self._bands = tuple([f for f in bands])
58 self._singles = tuple(singles)
59
60 if bbox is None:
61 self._bbox = self._singles[0].getBBox()
62 if not all([s.getBBox() == self.getBBox() for s in self.singles]):
63 bboxes = [s.getBBox() == self.getBBox() for s in self.singles]
64 err = "`singles` are required to have the same bounding box, received {0}"
65 raise ValueError(err.format(bboxes))
66 else:
67 self._bbox = bbox
68

Member Function Documentation

◆ __getitem__()

lsst.afw.multiband.MultibandBase.__getitem__ ( self,
args )
Get a slice of the underlying array

If only a single band is specified,
return the single band object sliced
appropriately.

Definition at line 159 of file multiband.py.

159 def __getitem__(self, args):
160 """Get a slice of the underlying array
161
162 If only a single band is specified,
163 return the single band object sliced
164 appropriately.
165 """
166 if not isinstance(args, tuple):
167 indices = (args,)
168 else:
169 indices = args
170
171 # Return the single band object if the first
172 # index is not a list or slice.
173 bands, bandIndex = self._bandNamesToIndex(indices[0])
174 if not isinstance(bandIndex, slice) and len(bandIndex) == 1:
175 if len(indices) > 2:
176 return self.singles[bandIndex[0]][indices[1:]]
177 elif len(indices) == 2:
178 return self.singles[bandIndex[0]][indices[1]]
179 else:
180 return self.singles[bandIndex[0]]
181
182 return self._slice(bands=bands, bandIndex=bandIndex, indices=indices[1:])
183

◆ __iter__()

lsst.afw.multiband.MultibandBase.__iter__ ( self)

Definition at line 184 of file multiband.py.

184 def __iter__(self):
185 self._bandIndex = 0
186 return self
187

◆ __len__()

lsst.afw.multiband.MultibandBase.__len__ ( self)

Definition at line 156 of file multiband.py.

156 def __len__(self):
157 return len(self.bands)
158

◆ __next__()

lsst.afw.multiband.MultibandBase.__next__ ( self)

Definition at line 188 of file multiband.py.

188 def __next__(self):
189 if self._bandIndex < len(self.bands):
190 result = self.singles[self._bandIndex]
191 self._bandIndex += 1
192 else:
193 raise StopIteration
194 return result
195

◆ __repr__()

lsst.afw.multiband.MultibandBase.__repr__ ( self)

Definition at line 322 of file multiband.py.

322 def __repr__(self):
323 result = "<{0}, bands={1}, bbox={2}>".format(
324 self.__class__.__name__, self.bands, self.getBBox().__repr__())
325 return result
326

◆ __str__()

lsst.afw.multiband.MultibandBase.__str__ ( self)

Definition at line 327 of file multiband.py.

327 def __str__(self):
328 if hasattr(self, "array"):
329 return str(self.array)
330 return self.__repr__()

◆ _bandNamesToIndex()

lsst.afw.multiband.MultibandBase._bandNamesToIndex ( self,
bandIndex )
protected
Convert a list of band names to an index or a slice

Parameters
----------
bandIndex: iterable or `object`
    Index to specify a band or list of bands,
    usually a string or enum.
    For example `bandIndex` can be
    `"R"` or `["R", "G", "B"]` or `[Band.R, Band.G, Band.B]`,
    if `Band` is an enum.

Returns
-------
bandNames: `list`
    Names of the bands in the slice
bandIndex: `slice` or `list` of `int`
    Index of each band in `bandNames` in
    `self.bands`.

Definition at line 196 of file multiband.py.

196 def _bandNamesToIndex(self, bandIndex):
197 """Convert a list of band names to an index or a slice
198
199 Parameters
200 ----------
201 bandIndex: iterable or `object`
202 Index to specify a band or list of bands,
203 usually a string or enum.
204 For example `bandIndex` can be
205 `"R"` or `["R", "G", "B"]` or `[Band.R, Band.G, Band.B]`,
206 if `Band` is an enum.
207
208 Returns
209 -------
210 bandNames: `list`
211 Names of the bands in the slice
212 bandIndex: `slice` or `list` of `int`
213 Index of each band in `bandNames` in
214 `self.bands`.
215 """
216 if isinstance(bandIndex, slice):
217 if bandIndex.start is not None:
218 start = self.bands.index(bandIndex.start)
219 else:
220 start = None
221 if bandIndex.stop is not None:
222 stop = self.bands.index(bandIndex.stop)
223 else:
224 stop = None
225 bandIndices = slice(start, stop, bandIndex.step)
226 bandNames = self.bands[bandIndices]
227 else:
228 if isinstance(bandIndex, str):
229 bandNames = [bandIndex]
230 bandIndices = [self.bands.index(bandIndex)]
231 else:
232 try:
233 # Check to see if the bandIndex is an iterable
234 bandNames = [f for f in bandIndex]
235 except TypeError:
236 bandNames = [bandIndex]
237 bandIndices = [self.bands.index(f) for f in bandNames]
238 return tuple(bandNames), bandIndices
239

◆ _slice()

lsst.afw.multiband.MultibandBase._slice ( self,
bands,
bandIndex,
indices )
protected
Slice the current object and return the result

Different inherited classes will handling slicing differently,
so this method must be overloaded in inherited classes.

Parameters
----------
bands: `list` of `str`
    List of band names for the slice. This is a subset of the
    bands in the parent multiband object
bandIndex: `list` of `int` or `slice`
    Index along the band dimension
indices: `tuple` of remaining indices
    `MultibandBase.__getitem__` separates the first (band)
    index from the remaining indices, so `indices` is a tuple
    of all of the indices that come after `band` in the
    `args` passed to `MultibandBase.__getitem__`.

Returns
-------
result: `object`
    Sliced version of the current object, which could be the
    same class or a different class depending on the
    slice being made.

Reimplemented in lsst.afw.detection.multiband.MultibandFootprint, lsst.afw.image._exposure._multiband.MultibandExposure, lsst.afw.image._image._multiband.MultibandImageBase, lsst.afw.image._image._multiband.MultibandPixel, and lsst.afw.image._image._multiband.MultibandTripleBase.

Definition at line 294 of file multiband.py.

294 def _slice(self, bands, bandIndex, indices):
295 """Slice the current object and return the result
296
297 Different inherited classes will handling slicing differently,
298 so this method must be overloaded in inherited classes.
299
300 Parameters
301 ----------
302 bands: `list` of `str`
303 List of band names for the slice. This is a subset of the
304 bands in the parent multiband object
305 bandIndex: `list` of `int` or `slice`
306 Index along the band dimension
307 indices: `tuple` of remaining indices
308 `MultibandBase.__getitem__` separates the first (band)
309 index from the remaining indices, so `indices` is a tuple
310 of all of the indices that come after `band` in the
311 `args` passed to `MultibandBase.__getitem__`.
312
313 Returns
314 -------
315 result: `object`
316 Sliced version of the current object, which could be the
317 same class or a different class depending on the
318 slice being made.
319 """
320 pass
321

◆ bands()

lsst.afw.multiband.MultibandBase.bands ( self)
List of band names for the single band objects

Definition at line 98 of file multiband.py.

98 def bands(self):
99 """List of band names for the single band objects
100 """
101 return self._bands
102

◆ clone()

lsst.afw.multiband.MultibandBase.clone ( self,
deep = True )
Copy the current object

This must be overloaded in a subclass of `MultibandBase`

Parameters
----------
deep: `bool`
    Whether or not to make a deep copy

Returns
-------
result: `MultibandBase`
    copy of the instance that inherits from `MultibandBase`

Reimplemented in lsst.afw.detection.multiband.MultibandFootprint, lsst.afw.image._image._multiband.MultibandImageBase, lsst.afw.image._image._multiband.MultibandPixel, and lsst.afw.image._image._multiband.MultibandTripleBase.

Definition at line 70 of file multiband.py.

70 def clone(self, deep=True):
71 """Copy the current object
72
73 This must be overloaded in a subclass of `MultibandBase`
74
75 Parameters
76 ----------
77 deep: `bool`
78 Whether or not to make a deep copy
79
80 Returns
81 -------
82 result: `MultibandBase`
83 copy of the instance that inherits from `MultibandBase`
84 """
85 pass
86

◆ filters()

lsst.afw.multiband.MultibandBase.filters ( self)
List of filter names for the single band objects (deprecated)

Use `bands` instead.

Definition at line 90 of file multiband.py.

90 def filters(self):
91 """List of filter names for the single band objects (deprecated)
92
93 Use `bands` instead.
94 """
95 return self._bands
96

◆ getBBox()

lsst.afw.multiband.MultibandBase.getBBox ( self)
Bounding box

Reimplemented in lsst.afw.image._image._multiband.MultibandImageBase, and lsst.afw.image._image._multiband.MultibandTripleBase.

Definition at line 109 of file multiband.py.

109 def getBBox(self):
110 """Bounding box
111 """
112 return self._bbox
113

◆ getXY0()

lsst.afw.multiband.MultibandBase.getXY0 ( self)
Minimum coordinate in the bounding box

Definition at line 114 of file multiband.py.

114 def getXY0(self):
115 """Minimum coordinate in the bounding box
116 """
117 return self.getBBox().getMin()
118

◆ height()

lsst.afw.multiband.MultibandBase.height ( self)
Height of the images

Definition at line 151 of file multiband.py.

151 def height(self):
152 """Height of the images
153 """
154 return self.getBBox().getHeight()
155

◆ origin()

lsst.afw.multiband.MultibandBase.origin ( self)
Minimum (y,x) position

This is the position of `self.getBBox().getMin()`,
but available as a tuple for numpy array indexing.

Definition at line 136 of file multiband.py.

136 def origin(self):
137 """Minimum (y,x) position
138
139 This is the position of `self.getBBox().getMin()`,
140 but available as a tuple for numpy array indexing.
141 """
142 return (self.y0, self.x0)
143

◆ setXY0()

lsst.afw.multiband.MultibandBase.setXY0 ( self,
xy0 )
Shift the bounding box but keep the same Extent

Parameters
----------
xy0: `Point2I`
    New minimum bounds of the bounding box

Reimplemented in lsst.afw.image._image._multiband.MultibandTripleBase.

Definition at line 240 of file multiband.py.

240 def setXY0(self, xy0):
241 """Shift the bounding box but keep the same Extent
242
243 Parameters
244 ----------
245 xy0: `Point2I`
246 New minimum bounds of the bounding box
247 """
248 self._bbox = Box2I(xy0, self._bbox.getDimensions())
249 for singleObj in self.singles:
250 singleObj.setXY0(xy0)
251

◆ shiftedBy()

lsst.afw.multiband.MultibandBase.shiftedBy ( self,
offset )
Shift a bounding box by an offset, but keep the same Extent

This method is broken until DM-10781 is completed.

Parameters
----------
offset: `Extent2I`
    Amount to shift the bounding box in x and y.

Returns
-------
result: `MultibandBase`
    A copy of the object, shifted by `offset`

Definition at line 274 of file multiband.py.

274 def shiftedBy(self, offset):
275 """Shift a bounding box by an offset, but keep the same Extent
276
277 This method is broken until DM-10781 is completed.
278
279 Parameters
280 ----------
281 offset: `Extent2I`
282 Amount to shift the bounding box in x and y.
283
284 Returns
285 -------
286 result: `MultibandBase`
287 A copy of the object, shifted by `offset`
288 """
289 raise NotImplementedError("shiftedBy not implemented until DM-10781")
290 xy0 = self._bbox.getMin() + offset
291 return self.shiftedTo(xy0)
292

◆ shiftedTo()

lsst.afw.multiband.MultibandBase.shiftedTo ( self,
xy0 )
Shift the bounding box but keep the same Extent

This method is broken until DM-10781 is completed.

Parameters
----------
xy0: `Point2I`
    New minimum bounds of the bounding box

Returns
-------
result: `MultibandBase`
    A copy of the object, shifted to `xy0`.

Reimplemented in lsst.afw.image._image._multiband.MultibandTripleBase.

Definition at line 252 of file multiband.py.

252 def shiftedTo(self, xy0):
253 """Shift the bounding box but keep the same Extent
254
255 This method is broken until DM-10781 is completed.
256
257 Parameters
258 ----------
259 xy0: `Point2I`
260 New minimum bounds of the bounding box
261
262 Returns
263 -------
264 result: `MultibandBase`
265 A copy of the object, shifted to `xy0`.
266 """
267 raise NotImplementedError("shiftedBy not implemented until DM-10781")
268 result = self.clone(False)
269 result._bbox = Box2I(xy0, result._bbox.getDimensions())
270 for singleObj in result.singles:
271 singleObj.setXY0(xy0)
272 return result
273

◆ singles()

lsst.afw.multiband.MultibandBase.singles ( self)
List of single band objects

Definition at line 104 of file multiband.py.

104 def singles(self):
105 """List of single band objects
106 """
107 return self._singles
108

◆ width()

lsst.afw.multiband.MultibandBase.width ( self)
Width of the images

Definition at line 145 of file multiband.py.

145 def width(self):
146 """Width of the images
147 """
148 return self.getBBox().getWidth()
149

◆ x0()

lsst.afw.multiband.MultibandBase.x0 ( self)
X0

X component of XY0 `Point2I.getX()`

Definition at line 120 of file multiband.py.

120 def x0(self):
121 """X0
122
123 X component of XY0 `Point2I.getX()`
124 """
125 return self.getBBox().getMinX()
126

◆ y0()

lsst.afw.multiband.MultibandBase.y0 ( self)
Y0

Y component of XY0 `Point2I.getY()`

Definition at line 128 of file multiband.py.

128 def y0(self):
129 """Y0
130
131 Y component of XY0 `Point2I.getY()`
132 """
133 return self.getBBox().getMinY()
134

Member Data Documentation

◆ _bandIndex

int lsst.afw.multiband.MultibandBase._bandIndex = 0
protected

Definition at line 185 of file multiband.py.

◆ _bands

lsst.afw.multiband.MultibandBase._bands = tuple([f for f in bands])
protected

Definition at line 57 of file multiband.py.

◆ _bbox

lsst.afw.multiband.MultibandBase._bbox = self._singles[0].getBBox()
protected

Definition at line 61 of file multiband.py.

◆ _singles

lsst.afw.multiband.MultibandBase._singles = tuple(singles)
protected

Definition at line 58 of file multiband.py.

◆ array

lsst.afw.multiband.MultibandBase.array

Definition at line 329 of file multiband.py.

◆ bands

lsst.afw.multiband.MultibandBase.bands

Definition at line 157 of file multiband.py.

◆ singles

lsst.afw.multiband.MultibandBase.singles = Box2I(xy0, self._bbox.getDimensions())

Definition at line 249 of file multiband.py.

◆ x0

lsst.afw.multiband.MultibandBase.x0

Definition at line 142 of file multiband.py.

◆ y0

lsst.afw.multiband.MultibandBase.y0

Definition at line 142 of file multiband.py.


The documentation for this class was generated from the following file: