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.skymap.detail.dodecahedron Namespace Reference

Classes

class  Dodecahedron
 

Functions

 computeRotationMatrix (angle, axis)
 
 _computeCoordTransform (vec0, vec1, vec1NegativeX=False)
 
 _computeDodecahedronVertices (faceVecList)
 
 _computeFullVecList (basisSet)
 
 _findCloseIndexSet (vecList, ind)
 
 _findCloseList (vecList, vec)
 
 _findClosePair (vecList, ind=0)
 
 _sortedVectorList (vecList)
 

Variables

 precision
 
 suppress
 
 True
 
 linewidth
 
 vertexDodec = Dodecahedron(withFacesOnPoles=False)
 
 faceVec = vertexDodec.getFaceCtr(i)
 

Function Documentation

◆ _computeCoordTransform()

lsst.skymap.detail.dodecahedron._computeCoordTransform ( vec0,
vec1,
vec1NegativeX = False )
protected
Compute a rotation matrix that puts vec0 along z and vec1 along +x in
the xz plane.

Parameters
----------
vec0 : `numpy.ndarray`
    vector 0
vec1 : `numpy.ndarray`
    vector 1
vec1NegativeX : `bool`
    If True then vec1 is rotated to face negative x.

Definition at line 138 of file dodecahedron.py.

138def _computeCoordTransform(vec0, vec1, vec1NegativeX=False):
139 """Compute a rotation matrix that puts vec0 along z and vec1 along +x in
140 the xz plane.
141
142 Parameters
143 ----------
144 vec0 : `numpy.ndarray`
145 vector 0
146 vec1 : `numpy.ndarray`
147 vector 1
148 vec1NegativeX : `bool`
149 If True then vec1 is rotated to face negative x.
150 """
151 # rotate around x by angle of vec0 from z to y
152 xAng = math.atan2(vec0[1], vec0[2])
153 xRotMat = computeRotationMatrix(xAng, 0)
154
155 # rotate around y by -angle of rotated vec0 from z to x
156 vec0RotX = numpy.dot(xRotMat, vec0)
157 yAng = -math.atan2(vec0RotX[0], vec0RotX[2])
158 yRotMat = computeRotationMatrix(yAng, 1)
159 xyRotMat = numpy.dot(yRotMat, xRotMat)
160
161 # rotate around z by -angle of rotated vec1 from +/-x to y
162 vec1RotXY = numpy.dot(xyRotMat, vec1)
163 xVal = vec1RotXY[0]
164 if vec1NegativeX:
165 xVal = -xVal
166 zAng = -math.atan2(vec1RotXY[1], xVal)
167 zRotMat = computeRotationMatrix(zAng, 2)
168 xyzRotMat = numpy.dot(zRotMat, xyRotMat)
169 return xyzRotMat
170
171

◆ _computeDodecahedronVertices()

lsst.skymap.detail.dodecahedron._computeDodecahedronVertices ( faceVecList)
protected
Given a vector of face positions of a Dodecahedron compute the vertices.

Definition at line 172 of file dodecahedron.py.

172def _computeDodecahedronVertices(faceVecList):
173 """Given a vector of face positions of a Dodecahedron compute the vertices.
174 """
175 closeIndSetList = []
176 vertexDict = {}
177 for i in range(len(faceVecList)):
178 closeIndSet = _findCloseIndexSet(faceVecList, i)
179 if len(closeIndSet) != 5:
180 raise RuntimeError("Found %s vertices instead of 5 near %s: %s" %
181 (len(closeIndSet), faceVecList[i], closeIndSet))
182 closeIndSetList.append(closeIndSet)
183 for i, iCloseIndSet in enumerate(closeIndSetList):
184 for j in iCloseIndSet:
185 jCloseIndSet = closeIndSetList[j]
186 sharedCloseIndSet = iCloseIndSet.intersection(jCloseIndSet)
187 if len(sharedCloseIndSet) != 2:
188 raise RuntimeError("Found %s vertices instead of 2 near %s and %s: %s" %
189 (len(sharedCloseIndSet), faceVecList[i], faceVecList[j],
190 sharedCloseIndSet))
191 for k in sharedCloseIndSet:
192 key = frozenset((i, j, k))
193 if key in vertexDict:
194 continue
195 vertexVec = faceVecList[i] + faceVecList[j] + faceVecList[k]
196 vertexVec /= numpy.sqrt(numpy.sum(vertexVec**2))
197 vertexDict[key] = vertexVec
198 return list(vertexDict.values())
199
200

◆ _computeFullVecList()

lsst.skymap.detail.dodecahedron._computeFullVecList ( basisSet)
protected
Given a collection of basis vectors, compute all permutations with both
signs of all nonzero values.

For example::

    [(0, 1, 2)] -> [(0, 1, 2), (0, -1, 2), (0, 1, -2), (0, -1, -2)]

Definition at line 201 of file dodecahedron.py.

201def _computeFullVecList(basisSet):
202 """Given a collection of basis vectors, compute all permutations with both
203 signs of all nonzero values.
204
205 For example::
206
207 [(0, 1, 2)] -> [(0, 1, 2), (0, -1, 2), (0, 1, -2), (0, -1, -2)]
208 """
209 fullSet = []
210 for basisVec in basisSet:
211 vecLen = math.sqrt(numpy.sum(numpy.array(basisVec)**2))
212 valueList = []
213 for basisValue in basisVec:
214 if basisValue == 0:
215 valueList.append((0,))
216 else:
217 valueList.append((basisValue, -basisValue))
218 fullSet += list(numpy.array((x, y, z))/vecLen
219 for z in valueList[2]
220 for y in valueList[1]
221 for x in valueList[0]
222 )
223 return fullSet
224
225

◆ _findCloseIndexSet()

lsst.skymap.detail.dodecahedron._findCloseIndexSet ( vecList,
ind )
protected
Given a list of cartesian vectors, return a set of indices of those
closest to one of them.

This is intended for regular grids where distances are quantized.

Parameters
----------
vecList : `list`
    List of cartesian vectors.
ind : `int`
    Index of vector to be nearest.

Definition at line 226 of file dodecahedron.py.

226def _findCloseIndexSet(vecList, ind):
227 """Given a list of cartesian vectors, return a set of indices of those
228 closest to one of them.
229
230 This is intended for regular grids where distances are quantized.
231
232 Parameters
233 ----------
234 vecList : `list`
235 List of cartesian vectors.
236 ind : `int`
237 Index of vector to be nearest.
238 """
239 dotProductList = numpy.round(numpy.dot(vecList, vecList[ind]), 2)
240 dotProductList[ind] = -9e99
241 minDist = numpy.max(dotProductList)
242 indList = numpy.arange(len(dotProductList))[dotProductList == minDist]
243 return set(indList)
244
245

◆ _findCloseList()

lsst.skymap.detail.dodecahedron._findCloseList ( vecList,
vec )
protected
Given a list of cartesian vectors, return all those closest to a
specified position

This is intended for regular grids where distances are quantized

Parameters
----------
vecList : `list`
    List of cartesian vectors.
vec : `iterable` of `float`
    Vector to be near.

Returns
-------
retList : `list`
    List of closest vectors.
indList : `list`
    List if indices of those vectors.

Definition at line 246 of file dodecahedron.py.

246def _findCloseList(vecList, vec):
247 """Given a list of cartesian vectors, return all those closest to a
248 specified position
249
250 This is intended for regular grids where distances are quantized
251
252 Parameters
253 ----------
254 vecList : `list`
255 List of cartesian vectors.
256 vec : `iterable` of `float`
257 Vector to be near.
258
259 Returns
260 -------
261 retList : `list`
262 List of closest vectors.
263 indList : `list`
264 List if indices of those vectors.
265 """
266 dotProductList = numpy.round(numpy.dot(vecList, vec), 2)
267 minDist = numpy.max(dotProductList)
268 indList = numpy.arange(len(dotProductList))[dotProductList == minDist]
269 retList = numpy.take(vecList, indList, 0)
270 return retList, indList
271
272

◆ _findClosePair()

lsst.skymap.detail.dodecahedron._findClosePair ( vecList,
ind = 0 )
protected
Given a list of cartesian vectors and an index, return the vector and
one of its closest neighbors.

Parameters
----------
vecList : `list` of `numpy.ndarray`
    List of cartesian vectors.
ind : `int`
    Index of first vector.

Definition at line 273 of file dodecahedron.py.

273def _findClosePair(vecList, ind=0):
274 """Given a list of cartesian vectors and an index, return the vector and
275 one of its closest neighbors.
276
277 Parameters
278 ----------
279 vecList : `list` of `numpy.ndarray`
280 List of cartesian vectors.
281 ind : `int`
282 Index of first vector.
283 """
284 vec = vecList[ind]
285 otherVecList = vecList[0:ind] + vecList[ind+1:]
286 ind1 = numpy.argmax(numpy.dot(otherVecList, vec))
287 return vec, otherVecList[ind1]
288
289

◆ _sortedVectorList()

lsst.skymap.detail.dodecahedron._sortedVectorList ( vecList)
protected
Return a list of cartesian vectors sorted by decreasing latitude and
increasing longitude.

Definition at line 290 of file dodecahedron.py.

290def _sortedVectorList(vecList):
291 """Return a list of cartesian vectors sorted by decreasing latitude and
292 increasing longitude.
293 """
294 def vecToSort(vec):
295 ang = round(math.atan2(vec[1], vec[0]), 2)
296 if ang < 0:
297 ang += 2.0 * math.pi
298 return (-round(vec[2], 1), ang, vec)
299
300 decoratedList = [vecToSort(v) for v in vecList]
301 decoratedList.sort()
302 return [d[2] for d in decoratedList]
303
304

◆ computeRotationMatrix()

lsst.skymap.detail.dodecahedron.computeRotationMatrix ( angle,
axis )
Return a 3D rotation matrix for rotation by a specified amount around a
specified axis.

Parameters
----------
angle : `float`
    Amount of rotation (rad).
axis : `int`
    Axis of rotation; one of 0, 1 or 2 for x, y or z.

Definition at line 116 of file dodecahedron.py.

116def computeRotationMatrix(angle, axis):
117 """Return a 3D rotation matrix for rotation by a specified amount around a
118 specified axis.
119
120 Parameters
121 ----------
122 angle : `float`
123 Amount of rotation (rad).
124 axis : `int`
125 Axis of rotation; one of 0, 1 or 2 for x, y or z.
126 """
127 cosAng = math.cos(angle)
128 sinAng = math.sin(angle)
129 rotMat = numpy.zeros((3, 3), dtype=float)
130 rotMat[axis, axis] = 1
131 rotMat[(axis + 1) % 3, (axis + 1) % 3] = cosAng
132 rotMat[(axis + 2) % 3, (axis + 1) % 3] = sinAng
133 rotMat[(axis + 1) % 3, (axis + 2) % 3] = -sinAng
134 rotMat[(axis + 2) % 3, (axis + 2) % 3] = cosAng
135 return rotMat
136
137

Variable Documentation

◆ faceVec

lsst.skymap.detail.dodecahedron.faceVec = vertexDodec.getFaceCtr(i)

Definition at line 311 of file dodecahedron.py.

◆ linewidth

lsst.skymap.detail.dodecahedron.linewidth

Definition at line 306 of file dodecahedron.py.

◆ precision

lsst.skymap.detail.dodecahedron.precision

Definition at line 306 of file dodecahedron.py.

◆ suppress

lsst.skymap.detail.dodecahedron.suppress

Definition at line 306 of file dodecahedron.py.

◆ True

lsst.skymap.detail.dodecahedron.True

Definition at line 306 of file dodecahedron.py.

◆ vertexDodec

lsst.skymap.detail.dodecahedron.vertexDodec = Dodecahedron(withFacesOnPoles=False)

Definition at line 309 of file dodecahedron.py.