LSST Applications  21.0.0-172-gfb10e10a+18fedfabac,22.0.0+297cba6710,22.0.0+80564b0ff1,22.0.0+8d77f4f51a,22.0.0+a28f4c53b1,22.0.0+dcf3732eb2,22.0.1-1-g7d6de66+2a20fdde0d,22.0.1-1-g8e32f31+297cba6710,22.0.1-1-geca5380+7fa3b7d9b6,22.0.1-12-g44dc1dc+2a20fdde0d,22.0.1-15-g6a90155+515f58c32b,22.0.1-16-g9282f48+790f5f2caa,22.0.1-2-g92698f7+dcf3732eb2,22.0.1-2-ga9b0f51+7fa3b7d9b6,22.0.1-2-gd1925c9+bf4f0e694f,22.0.1-24-g1ad7a390+a9625a72a8,22.0.1-25-g5bf6245+3ad8ecd50b,22.0.1-25-gb120d7b+8b5510f75f,22.0.1-27-g97737f7+2a20fdde0d,22.0.1-32-gf62ce7b1+aa4237961e,22.0.1-4-g0b3f228+2a20fdde0d,22.0.1-4-g243d05b+871c1b8305,22.0.1-4-g3a563be+32dcf1063f,22.0.1-4-g44f2e3d+9e4ab0f4fa,22.0.1-42-gca6935d93+ba5e5ca3eb,22.0.1-5-g15c806e+85460ae5f3,22.0.1-5-g58711c4+611d128589,22.0.1-5-g75bb458+99c117b92f,22.0.1-6-g1c63a23+7fa3b7d9b6,22.0.1-6-g50866e6+84ff5a128b,22.0.1-6-g8d3140d+720564cf76,22.0.1-6-gd805d02+cc5644f571,22.0.1-8-ge5750ce+85460ae5f3,master-g6e05de7fdc+babf819c66,master-g99da0e417a+8d77f4f51a,w.2021.48
LSST Data Management Base Package
Public Member Functions | Public Attributes | Static Public Attributes | List of all members
lsst.skymap.tractBuilder.CellTractBuilder Class Reference
Inheritance diagram for lsst.skymap.tractBuilder.CellTractBuilder:
lsst.skymap.tractBuilder.BaseTractBuilder

Public Member Functions

def __init__ (self, config)
 
def getPatchInfo (self, index, tractWcs)
 
def getPackedConfig (self, config)
 
def setupPatches (self, minBBox, wcs)
 
def getPatchBorder (self)
 
def getPatchInnerDimensions (self)
 
def getSequentialPatchIndex (self, patchInfo)
 
def getSequentialPatchIndexFromPair (self, index)
 
def getPatchIndexPair (self, sequentialIndex)
 

Public Attributes

 config
 

Static Public Attributes

 ConfigClass = CellTractBuilderConfig
 

Detailed Description

Definition at line 300 of file tractBuilder.py.

Constructor & Destructor Documentation

◆ __init__()

def lsst.skymap.tractBuilder.CellTractBuilder.__init__ (   self,
  config 
)

Reimplemented from lsst.skymap.tractBuilder.BaseTractBuilder.

Definition at line 303 of file tractBuilder.py.

303  def __init__(self, config):
304  super().__init__(config)
305 
306  self._cellInnerDimensions = geom.Extent2I(*(val
307  for val in config.cellInnerDimensions))
308  self._cellBorder = config.cellBorder
309  self._numCellsPerPatchInner = config.numCellsPerPatchInner
310  self._numCellsInPatchBorder = config.numCellsInPatchBorder
311  self._patchInnerDimensions = geom.Extent2I(*(val*self._numCellsPerPatchInner
312  for val in config.cellInnerDimensions))
313  # The patch border is the number of cells in the border + the cell border
314  self._patchBorder = config.numCellsInPatchBorder*config.cellInnerDimensions[0] + self._cellBorder
315  self._initialized = False
316 

Member Function Documentation

◆ getPackedConfig()

def lsst.skymap.tractBuilder.CellTractBuilder.getPackedConfig (   self,
  config 
)
Get a packed config suitable for using in a sha1.

Parameters
----------
config : `lsst.skymap.BaseTractBuilderConfig`

Returns
-------
configPacked : `bytes`

Reimplemented from lsst.skymap.tractBuilder.BaseTractBuilder.

Definition at line 353 of file tractBuilder.py.

353  def getPackedConfig(self, config):
354  subConfig = config.tractBuilder[config.tractBuilder.name]
355  configPacked = struct.pack(
356  "<iiiiidd3sd",
357  subConfig.cellInnerDimensions[0],
358  subConfig.cellInnerDimensions[1],
359  subConfig.cellBorder,
360  subConfig.numCellsPerPatchInner,
361  subConfig.numCellsInPatchBorder,
362  config.tractOverlap,
363  config.pixelScale,
364  config.projection.encode('ascii'),
365  config.rotation
366  )
367 
368  return configPacked
369 
370 

◆ getPatchBorder()

def lsst.skymap.tractBuilder.BaseTractBuilder.getPatchBorder (   self)
inherited

Definition at line 94 of file tractBuilder.py.

94  def getPatchBorder(self):
95  return self._patchBorder
96 

◆ getPatchIndexPair()

def lsst.skymap.tractBuilder.BaseTractBuilder.getPatchIndexPair (   self,
  sequentialIndex 
)
inherited
Convert sequential index into patch index (x,y) pair.

Parameters
----------
sequentialIndex : `int`

Returns
-------
x, y : `lsst.skymap.Index2D`

Definition at line 165 of file tractBuilder.py.

165  def getPatchIndexPair(self, sequentialIndex):
166  """Convert sequential index into patch index (x,y) pair.
167 
168  Parameters
169  ----------
170  sequentialIndex : `int`
171 
172  Returns
173  -------
174  x, y : `lsst.skymap.Index2D`
175  """
176  nx, ny = self._numPatches
177  x = sequentialIndex % nx
178  y = sequentialIndex // nx
179  return Index2D(x=x, y=y)
180 

◆ getPatchInfo()

def lsst.skymap.tractBuilder.CellTractBuilder.getPatchInfo (   self,
  index,
  tractWcs 
)
Return information for the specified patch.

Parameters
----------
index : `lsst.skymap.Index2D` or `Iterable` [`int`, `int`]
    Index of patch, as Index2D or pair of ints;
    or a sequential index as returned by getSequentialPatchIndex;
    negative values are not supported.
tractWcs : `lsst.afw.geom.SkyWcs`
    WCS associated with the tract.

Returns
-------
result : `lsst.skymap.PatchInfo`
    The patch info for that index.

Raises
------
IndexError
    If index is out of range.

Reimplemented from lsst.skymap.tractBuilder.BaseTractBuilder.

Definition at line 317 of file tractBuilder.py.

317  def getPatchInfo(self, index, tractWcs):
318  # This should always be initialized
319  if not self._initialized:
320  raise RuntimeError("Programmer error; this should always be initialized.")
321  if isinstance(index, Index2D):
322  _index = index
323  else:
324  if isinstance(index, numbers.Number):
325  _index = self.getPatchIndexPair(index)
326  else:
327  _index = Index2D(*index)
328  if (not 0 <= _index.x < self._numPatches.x) \
329  or (not 0 <= _index.y < self._numPatches.y):
330  raise IndexError("Patch index %s is not in range [0-%d, 0-%d]" %
331  (_index, self._numPatches.x - 1, self._numPatches.y - 1))
332  innerMin = geom.Point2I(*[_index[i]*self._patchInnerDimensions[i] for i in range(2)])
333  innerBBox = geom.Box2I(innerMin, self._patchInnerDimensions)
334  if not self._tractBBox.contains(innerBBox):
335  raise RuntimeError(
336  "Bug: patch index %s valid but inner bbox=%s not contained in tract bbox=%s" %
337  (_index, innerBBox, self._tractBBox))
338  outerBBox = geom.Box2I(innerBBox)
339  outerBBox.grow(self.getPatchBorder())
340  # We do not clip the patch for cell-based tracts.
341  return PatchInfo(
342  index=_index,
343  innerBBox=innerBBox,
344  outerBBox=outerBBox,
345  sequentialIndex=self.getSequentialPatchIndexFromPair(_index),
346  tractWcs=tractWcs,
347  cellInnerDimensions=self._cellInnerDimensions,
348  cellBorder=self._cellBorder,
349  numCellsPerPatchInner=self._numCellsPerPatchInner,
350  numCellsInPatchBorder=self._numCellsInPatchBorder
351  )
352 
An integer coordinate rectangle.
Definition: Box.h:55

◆ getPatchInnerDimensions()

def lsst.skymap.tractBuilder.BaseTractBuilder.getPatchInnerDimensions (   self)
inherited
Get dimensions of inner region of the patches (all are the same)

Definition at line 122 of file tractBuilder.py.

122  def getPatchInnerDimensions(self):
123  """Get dimensions of inner region of the patches (all are the same)
124  """
125  return self._patchInnerDimensions
126 

◆ getSequentialPatchIndex()

def lsst.skymap.tractBuilder.BaseTractBuilder.getSequentialPatchIndex (   self,
  patchInfo 
)
inherited
Return a single integer that uniquely identifies
the given patch within this tract.

Parameters
----------
patchInfo : `lsst.skymap.PatchInfo`

Returns
-------
sequentialIndex : `int`

Definition at line 127 of file tractBuilder.py.

127  def getSequentialPatchIndex(self, patchInfo):
128  """Return a single integer that uniquely identifies
129  the given patch within this tract.
130 
131  Parameters
132  ----------
133  patchInfo : `lsst.skymap.PatchInfo`
134 
135  Returns
136  -------
137  sequentialIndex : `int`
138  """
139  index = patchInfo.getIndex()
140  return self.getSequentialPatchIndexFromPair(index)
141 

◆ getSequentialPatchIndexFromPair()

def lsst.skymap.tractBuilder.BaseTractBuilder.getSequentialPatchIndexFromPair (   self,
  index 
)
inherited
Return a single integer that uniquely identifies
the patch index within the tract.

Parameters
----------
index : `lsst.skymap.Index2D` or `Iterable` [`int`, `int`]

Returns
-------
sequentialIndex : `int`

Definition at line 142 of file tractBuilder.py.

142  def getSequentialPatchIndexFromPair(self, index):
143  """Return a single integer that uniquely identifies
144  the patch index within the tract.
145 
146  Parameters
147  ----------
148  index : `lsst.skymap.Index2D` or `Iterable` [`int`, `int`]
149 
150  Returns
151  -------
152  sequentialIndex : `int`
153  """
154  if isinstance(index, Index2D):
155  _index = index
156  else:
157  if not isinstance(index, Iterable):
158  raise ValueError("Input index is not an iterable.")
159  if len(index) != 2:
160  raise ValueError("Input index does not have two values.")
161  _index = Index2D(*index)
162  nx, ny = self._numPatches
163  return nx*_index.y + _index.x
164 

◆ setupPatches()

def lsst.skymap.tractBuilder.BaseTractBuilder.setupPatches (   self,
  minBBox,
  wcs 
)
inherited
Set up the patches of a particular size in a tract.

We grow the tract bounding box to hold an exact multiple of
the desired size (patchInnerDimensions or
numCellsPerPatchInner*cellInnerDimensions), while keeping
the center roughly the same.  We return the final tract
bounding box, and the number of patches in each dimension
(as an Index2D).

Parameters
----------
minBBox : `lsst.geom.Box2I`
    Minimum bounding box for tract
wcs : `lsst.afw.geom.SkyWcs`
    Wcs object

Returns
-------
bbox : `lsst.geom.Box2I
    final bounding box, number of patches
numPatches : `lsst.skymap.Index2D`

Definition at line 51 of file tractBuilder.py.

51  def setupPatches(self, minBBox, wcs):
52  """Set up the patches of a particular size in a tract.
53 
54  We grow the tract bounding box to hold an exact multiple of
55  the desired size (patchInnerDimensions or
56  numCellsPerPatchInner*cellInnerDimensions), while keeping
57  the center roughly the same. We return the final tract
58  bounding box, and the number of patches in each dimension
59  (as an Index2D).
60 
61  Parameters
62  ----------
63  minBBox : `lsst.geom.Box2I`
64  Minimum bounding box for tract
65  wcs : `lsst.afw.geom.SkyWcs`
66  Wcs object
67 
68  Returns
69  -------
70  bbox : `lsst.geom.Box2I
71  final bounding box, number of patches
72  numPatches : `lsst.skymap.Index2D`
73  """
74  bbox = geom.Box2I(minBBox)
75  bboxMin = bbox.getMin()
76  bboxDim = bbox.getDimensions()
77  numPatchesList = [0, 0]
78  for i, innerDim in enumerate(self._patchInnerDimensions):
79  num = (bboxDim[i] + innerDim - 1) // innerDim # round up
80  deltaDim = (innerDim*num) - bboxDim[i]
81  if deltaDim > 0:
82  bboxDim[i] = innerDim * num
83  bboxMin[i] -= deltaDim // 2
84  numPatchesList[i] = num
85  numPatches = Index2D(*numPatchesList)
86  bbox = geom.Box2I(bboxMin, bboxDim)
87  self._numPatches = numPatches
88  # The final tract BBox starts at zero.
89  self._tractBBox = geom.Box2I(geom.Point2I(0, 0), bbox.getDimensions())
90  self._initialized = True
91 
92  return bbox, numPatches
93 

Member Data Documentation

◆ config

lsst.skymap.tractBuilder.BaseTractBuilder.config
inherited

Definition at line 49 of file tractBuilder.py.

◆ ConfigClass

lsst.skymap.tractBuilder.CellTractBuilder.ConfigClass = CellTractBuilderConfig
static

Definition at line 301 of file tractBuilder.py.


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