LSST Applications g063fba187b+cac8b7c890,g0f08755f38+6aee506743,g1653933729+a8ce1bb630,g168dd56ebc+a8ce1bb630,g1a2382251a+b4475c5878,g1dcb35cd9c+8f9bc1652e,g20f6ffc8e0+6aee506743,g217e2c1bcf+73dee94bd0,g28da252d5a+1f19c529b9,g2bbee38e9b+3f2625acfc,g2bc492864f+3f2625acfc,g3156d2b45e+6e55a43351,g32e5bea42b+1bb94961c2,g347aa1857d+3f2625acfc,g35bb328faa+a8ce1bb630,g3a166c0a6a+3f2625acfc,g3e281a1b8c+c5dd892a6c,g3e8969e208+a8ce1bb630,g414038480c+5927e1bc1e,g41af890bb2+8a9e676b2a,g7af13505b9+809c143d88,g80478fca09+6ef8b1810f,g82479be7b0+f568feb641,g858d7b2824+6aee506743,g89c8672015+f4add4ffd5,g9125e01d80+a8ce1bb630,ga5288a1d22+2903d499ea,gb58c049af0+d64f4d3760,gc28159a63d+3f2625acfc,gcab2d0539d+b12535109e,gcf0d15dbbd+46a3f46ba9,gda6a2b7d83+46a3f46ba9,gdaeeff99f8+1711a396fd,ge79ae78c31+3f2625acfc,gef2f8181fd+0a71e47438,gf0baf85859+c1f95f4921,gfa517265be+6aee506743,gfa999e8aa5+17cd334064,w.2024.51
LSST Data Management Base Package
Loading...
Searching...
No Matches
Classes | Functions | Variables
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.