LSST Applications g0f08755f38+82efc23009,g12f32b3c4e+e7bdf1200e,g1653933729+a8ce1bb630,g1a0ca8cf93+50eff2b06f,g28da252d5a+52db39f6a5,g2bbee38e9b+37c5a29d61,g2bc492864f+37c5a29d61,g2cdde0e794+c05ff076ad,g3156d2b45e+41e33cbcdc,g347aa1857d+37c5a29d61,g35bb328faa+a8ce1bb630,g3a166c0a6a+37c5a29d61,g3e281a1b8c+fb992f5633,g414038480c+7f03dfc1b0,g41af890bb2+11b950c980,g5fbc88fb19+17cd334064,g6b1c1869cb+12dd639c9a,g781aacb6e4+a8ce1bb630,g80478fca09+72e9651da0,g82479be7b0+04c31367b4,g858d7b2824+82efc23009,g9125e01d80+a8ce1bb630,g9726552aa6+8047e3811d,ga5288a1d22+e532dc0a0b,gae0086650b+a8ce1bb630,gb58c049af0+d64f4d3760,gc28159a63d+37c5a29d61,gcf0d15dbbd+2acd6d4d48,gd7358e8bfb+778a810b6e,gda3e153d99+82efc23009,gda6a2b7d83+2acd6d4d48,gdaeeff99f8+1711a396fd,ge2409df99d+6b12de1076,ge79ae78c31+37c5a29d61,gf0baf85859+d0a5978c5a,gf3967379c6+4954f8c433,gfb92a5be7c+82efc23009,gfec2e1e490+2aaed99252,w.2024.46
LSST Data Management Base Package
Loading...
Searching...
No Matches
Public Member Functions | Public Attributes | Protected Member Functions | Protected Attributes | List of all members
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, filters, singles, bbox=None)
 
 clone (self, deep=True)
 
 filters (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
 
 filters
 
 array
 

Protected Member Functions

 _filterNamesToIndex (self, filterIndex)
 
 _slice (self, filters, filterIndex, indices)
 

Protected Attributes

 _filters
 
 _singles
 
 _bbox
 
 _filterIndex
 

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 `_filters`, `_singles`, and `_bbox`.

Parameters
----------
filters: `list`
    List of filter 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 29 of file multiband.py.

Constructor & Destructor Documentation

◆ __init__()

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

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

Definition at line 54 of file multiband.py.

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

Member Function Documentation

◆ __getitem__()

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

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

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

Definition at line 147 of file multiband.py.

147 def __getitem__(self, args):
148 """Get a slice of the underlying array
149
150 If only a single filter is specified,
151 return the single band object sliced
152 appropriately.
153 """
154 if not isinstance(args, tuple):
155 indices = (args,)
156 else:
157 indices = args
158
159 # Return the single band object if the first
160 # index is not a list or slice.
161 filters, filterIndex = self._filterNamesToIndex(indices[0])
162 if not isinstance(filterIndex, slice) and len(filterIndex) == 1:
163 if len(indices) > 2:
164 return self.singles[filterIndex[0]][indices[1:]]
165 elif len(indices) == 2:
166 return self.singles[filterIndex[0]][indices[1]]
167 else:
168 return self.singles[filterIndex[0]]
169
170 return self._slice(filters=filters, filterIndex=filterIndex, indices=indices[1:])
171

◆ __iter__()

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

Definition at line 172 of file multiband.py.

172 def __iter__(self):
173 self._filterIndex = 0
174 return self
175

◆ __len__()

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

Definition at line 144 of file multiband.py.

144 def __len__(self):
145 return len(self.filters)
146

◆ __next__()

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

Definition at line 176 of file multiband.py.

176 def __next__(self):
177 if self._filterIndex < len(self.filters):
178 result = self.singles[self._filterIndex]
179 self._filterIndex += 1
180 else:
181 raise StopIteration
182 return result
183

◆ __repr__()

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

Definition at line 310 of file multiband.py.

310 def __repr__(self):
311 result = "<{0}, filters={1}, bbox={2}>".format(
312 self.__class__.__name__, self.filters, self.getBBox().__repr__())
313 return result
314

◆ __str__()

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

Definition at line 315 of file multiband.py.

315 def __str__(self):
316 if hasattr(self, "array"):
317 return str(self.array)
318 return self.__repr__()

◆ _filterNamesToIndex()

lsst.afw.multiband.MultibandBase._filterNamesToIndex ( self,
filterIndex )
protected
Convert a list of filter names to an index or a slice

Parameters
----------
filterIndex: iterable or `object`
    Index to specify a filter or list of filters,
    usually a string or enum.
    For example `filterIndex` can be
    `"R"` or `["R", "G", "B"]` or `[Filter.R, Filter.G, Filter.B]`,
    if `Filter` is an enum.

Returns
-------
filterNames: `list`
    Names of the filters in the slice
filterIndex: `slice` or `list` of `int`
    Index of each filter in `filterNames` in
    `self.filters`.

Definition at line 184 of file multiband.py.

184 def _filterNamesToIndex(self, filterIndex):
185 """Convert a list of filter names to an index or a slice
186
187 Parameters
188 ----------
189 filterIndex: iterable or `object`
190 Index to specify a filter or list of filters,
191 usually a string or enum.
192 For example `filterIndex` can be
193 `"R"` or `["R", "G", "B"]` or `[Filter.R, Filter.G, Filter.B]`,
194 if `Filter` is an enum.
195
196 Returns
197 -------
198 filterNames: `list`
199 Names of the filters in the slice
200 filterIndex: `slice` or `list` of `int`
201 Index of each filter in `filterNames` in
202 `self.filters`.
203 """
204 if isinstance(filterIndex, slice):
205 if filterIndex.start is not None:
206 start = self.filters.index(filterIndex.start)
207 else:
208 start = None
209 if filterIndex.stop is not None:
210 stop = self.filters.index(filterIndex.stop)
211 else:
212 stop = None
213 filterIndices = slice(start, stop, filterIndex.step)
214 filterNames = self.filters[filterIndices]
215 else:
216 if isinstance(filterIndex, str):
217 filterNames = [filterIndex]
218 filterIndices = [self.filters.index(filterIndex)]
219 else:
220 try:
221 # Check to see if the filterIndex is an iterable
222 filterNames = [f for f in filterIndex]
223 except TypeError:
224 filterNames = [filterIndex]
225 filterIndices = [self.filters.index(f) for f in filterNames]
226 return tuple(filterNames), filterIndices
227

◆ _slice()

lsst.afw.multiband.MultibandBase._slice ( self,
filters,
filterIndex,
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
----------
filters: `list` of `str`
    List of filter names for the slice. This is a subset of the
    filters in the parent multiband object
filterIndex: `list` of `int` or `slice`
    Index along the filter dimension
indices: `tuple` of remaining indices
    `MultibandBase.__getitem__` separates the first (filter)
    index from the remaining indices, so `indices` is a tuple
    of all of the indices that come after `filter` 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.MultibandPixel, lsst.afw.image._image._multiband.MultibandImageBase, and lsst.afw.image._image._multiband.MultibandTripleBase.

Definition at line 282 of file multiband.py.

282 def _slice(self, filters, filterIndex, indices):
283 """Slice the current object and return the result
284
285 Different inherited classes will handling slicing differently,
286 so this method must be overloaded in inherited classes.
287
288 Parameters
289 ----------
290 filters: `list` of `str`
291 List of filter names for the slice. This is a subset of the
292 filters in the parent multiband object
293 filterIndex: `list` of `int` or `slice`
294 Index along the filter dimension
295 indices: `tuple` of remaining indices
296 `MultibandBase.__getitem__` separates the first (filter)
297 index from the remaining indices, so `indices` is a tuple
298 of all of the indices that come after `filter` in the
299 `args` passed to `MultibandBase.__getitem__`.
300
301 Returns
302 -------
303 result: `object`
304 Sliced version of the current object, which could be the
305 same class or a different class depending on the
306 slice being made.
307 """
308 pass
309

◆ 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.MultibandPixel, lsst.afw.image._image._multiband.MultibandImageBase, and lsst.afw.image._image._multiband.MultibandTripleBase.

Definition at line 68 of file multiband.py.

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

◆ filters()

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

Definition at line 86 of file multiband.py.

86 def filters(self):
87 """List of filter names for the single band objects
88 """
89 return self._filters
90

◆ 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 97 of file multiband.py.

97 def getBBox(self):
98 """Bounding box
99 """
100 return self._bbox
101

◆ getXY0()

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

Definition at line 102 of file multiband.py.

102 def getXY0(self):
103 """Minimum coordinate in the bounding box
104 """
105 return self.getBBox().getMin()
106

◆ height()

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

Definition at line 139 of file multiband.py.

139 def height(self):
140 """Height of the images
141 """
142 return self.getBBox().getHeight()
143

◆ 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 124 of file multiband.py.

124 def origin(self):
125 """Minimum (y,x) position
126
127 This is the position of `self.getBBox().getMin()`,
128 but available as a tuple for numpy array indexing.
129 """
130 return (self.y0, self.x0)
131

◆ 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 228 of file multiband.py.

228 def setXY0(self, xy0):
229 """Shift the bounding box but keep the same Extent
230
231 Parameters
232 ----------
233 xy0: `Point2I`
234 New minimum bounds of the bounding box
235 """
236 self._bbox = Box2I(xy0, self._bbox.getDimensions())
237 for singleObj in self.singles:
238 singleObj.setXY0(xy0)
239

◆ 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 262 of file multiband.py.

262 def shiftedBy(self, offset):
263 """Shift a bounding box by an offset, but keep the same Extent
264
265 This method is broken until DM-10781 is completed.
266
267 Parameters
268 ----------
269 offset: `Extent2I`
270 Amount to shift the bounding box in x and y.
271
272 Returns
273 -------
274 result: `MultibandBase`
275 A copy of the object, shifted by `offset`
276 """
277 raise NotImplementedError("shiftedBy not implemented until DM-10781")
278 xy0 = self._bbox.getMin() + offset
279 return self.shiftedTo(xy0)
280

◆ 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 240 of file multiband.py.

240 def shiftedTo(self, xy0):
241 """Shift the bounding box but keep the same Extent
242
243 This method is broken until DM-10781 is completed.
244
245 Parameters
246 ----------
247 xy0: `Point2I`
248 New minimum bounds of the bounding box
249
250 Returns
251 -------
252 result: `MultibandBase`
253 A copy of the object, shifted to `xy0`.
254 """
255 raise NotImplementedError("shiftedBy not implemented until DM-10781")
256 result = self.clone(False)
257 result._bbox = Box2I(xy0, result._bbox.getDimensions())
258 for singleObj in result.singles:
259 singleObj.setXY0(xy0)
260 return result
261

◆ singles()

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

Definition at line 92 of file multiband.py.

92 def singles(self):
93 """List of single band objects
94 """
95 return self._singles
96

◆ width()

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

Definition at line 133 of file multiband.py.

133 def width(self):
134 """Width of the images
135 """
136 return self.getBBox().getWidth()
137

◆ x0()

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

X component of XY0 `Point2I.getX()`

Definition at line 108 of file multiband.py.

108 def x0(self):
109 """X0
110
111 X component of XY0 `Point2I.getX()`
112 """
113 return self.getBBox().getMinX()
114

◆ y0()

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

Y component of XY0 `Point2I.getY()`

Definition at line 116 of file multiband.py.

116 def y0(self):
117 """Y0
118
119 Y component of XY0 `Point2I.getY()`
120 """
121 return self.getBBox().getMinY()
122

Member Data Documentation

◆ _bbox

lsst.afw.multiband.MultibandBase._bbox
protected

Definition at line 59 of file multiband.py.

◆ _filterIndex

lsst.afw.multiband.MultibandBase._filterIndex
protected

Definition at line 173 of file multiband.py.

◆ _filters

lsst.afw.multiband.MultibandBase._filters
protected

Definition at line 55 of file multiband.py.

◆ _singles

lsst.afw.multiband.MultibandBase._singles
protected

Definition at line 56 of file multiband.py.

◆ array

lsst.afw.multiband.MultibandBase.array

Definition at line 317 of file multiband.py.

◆ filters

lsst.afw.multiband.MultibandBase.filters

Definition at line 145 of file multiband.py.

◆ x0

lsst.afw.multiband.MultibandBase.x0

Definition at line 130 of file multiband.py.

◆ y0

lsst.afw.multiband.MultibandBase.y0

Definition at line 130 of file multiband.py.


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