LSST Applications g0f08755f38+9c285cab97,g1635faa6d4+13f3999e92,g1653933729+a8ce1bb630,g1a0ca8cf93+bf6eb00ceb,g28da252d5a+0829b12dee,g29321ee8c0+5700dc9eac,g2bbee38e9b+9634bc57db,g2bc492864f+9634bc57db,g2cdde0e794+c2c89b37c4,g3156d2b45e+41e33cbcdc,g347aa1857d+9634bc57db,g35bb328faa+a8ce1bb630,g3a166c0a6a+9634bc57db,g3e281a1b8c+9f2c4e2fc3,g414038480c+077ccc18e7,g41af890bb2+fde0dd39b6,g5fbc88fb19+17cd334064,g781aacb6e4+a8ce1bb630,g80478fca09+55a9465950,g82479be7b0+d730eedb7d,g858d7b2824+9c285cab97,g9125e01d80+a8ce1bb630,g9726552aa6+10f999ec6a,ga5288a1d22+2a84bb7594,gacf8899fa4+c69c5206e8,gae0086650b+a8ce1bb630,gb58c049af0+d64f4d3760,gc28159a63d+9634bc57db,gcf0d15dbbd+4b7d09cae4,gda3e153d99+9c285cab97,gda6a2b7d83+4b7d09cae4,gdaeeff99f8+1711a396fd,ge2409df99d+5e831397f4,ge79ae78c31+9634bc57db,gf0baf85859+147a0692ba,gf3967379c6+41c94011de,gf3fb38a9a8+8f07a9901b,gfb92a5be7c+9c285cab97,w.2024.46
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.