<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.9.1" xml:lang="en-US">
  <compounddef id="dodecahedron_8py" kind="file" language="Python">
    <compoundname>dodecahedron.py</compoundname>
    <innerclass refid="classlsst_1_1skymap_1_1detail_1_1dodecahedron_1_1_dodecahedron" prot="public">lsst::skymap::detail::dodecahedron::Dodecahedron</innerclass>
    <innernamespace refid="namespacelsst_1_1skymap_1_1detail_1_1dodecahedron">lsst::skymap::detail::dodecahedron</innernamespace>
    <briefdescription>
    </briefdescription>
    <detaileddescription>
    </detaileddescription>
    <programlisting>
<codeline lineno="1" refid="namespacelsst_1_1skymap_1_1detail_1_1dodecahedron" refkind="compound"><highlight class="comment">#!/usr/bin/env<sp/>python</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="2"><highlight class="normal"></highlight></codeline>
<codeline lineno="3"><highlight class="normal">__all__<sp/>=<sp/>[</highlight><highlight class="stringliteral">&apos;Dodecahedron&apos;</highlight><highlight class="normal">]</highlight></codeline>
<codeline lineno="4"><highlight class="normal"></highlight></codeline>
<codeline lineno="5"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>math</highlight></codeline>
<codeline lineno="6"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>numpy</highlight></codeline>
<codeline lineno="7"><highlight class="normal"></highlight></codeline>
<codeline lineno="8"><highlight class="normal"></highlight></codeline>
<codeline lineno="9" refid="classlsst_1_1skymap_1_1detail_1_1dodecahedron_1_1_dodecahedron" refkind="compound"><highlight class="normal"></highlight><highlight class="keyword">class<sp/></highlight><highlight class="normal"><ref refid="classlsst_1_1skymap_1_1detail_1_1dodecahedron_1_1_dodecahedron" kindref="compound">Dodecahedron</ref>:</highlight></codeline>
<codeline lineno="10"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;A<sp/>dodecahedron<sp/>with<sp/><sp/>positions<sp/>of<sp/>faces<sp/>and<sp/>associated<sp/>vertices.</highlight></codeline>
<codeline lineno="11"><highlight class="stringliteral"></highlight></codeline>
<codeline lineno="12"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Parameters</highlight></codeline>
<codeline lineno="13"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>----------</highlight></codeline>
<codeline lineno="14"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>withFacesOnPoles<sp/>:<sp/>`bool`</highlight></codeline>
<codeline lineno="15"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>If<sp/>True<sp/>center<sp/>a<sp/>face<sp/>on<sp/>each<sp/>pole,<sp/>else<sp/>put<sp/>a<sp/>vertex<sp/>on<sp/>each<sp/>pole.</highlight></codeline>
<codeline lineno="16"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="17" refid="classlsst_1_1skymap_1_1detail_1_1dodecahedron_1_1_dodecahedron_1aecb04d83b730789337e24a8228c96014" refkind="member"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal"><ref refid="classlsst_1_1skymap_1_1detail_1_1dodecahedron_1_1_dodecahedron_1aecb04d83b730789337e24a8228c96014" kindref="member">__init__</ref>(self,<sp/>withFacesOnPoles=False):</highlight></codeline>
<codeline lineno="18"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classlsst_1_1skymap_1_1detail_1_1dodecahedron_1_1_dodecahedron_1a8b5a825861bceec18ab706a9bb0fc91a" kindref="member">_withFacesOnPoles</ref>_withFacesOnPoles<sp/>=<sp/>bool(withFacesOnPoles)</highlight></codeline>
<codeline lineno="19"><highlight class="normal"></highlight></codeline>
<codeline lineno="20"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>Basis<sp/>cartesian<sp/>vectors<sp/>describing<sp/>the<sp/>faces<sp/>of<sp/>a<sp/>dodecahedron;<sp/>the<sp/>full<sp/>set<sp/>of<sp/>vectors<sp/>is<sp/>obtained</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="21"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>by<sp/>choosing<sp/>both<sp/>signs<sp/>of<sp/>each<sp/>nonzero<sp/>component<sp/>of<sp/>each<sp/>vector.</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="22"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>The<sp/>orientation<sp/>of<sp/>the<sp/>resulting<sp/>dodecahedron,<sp/>while<sp/>very<sp/>convenient</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="23"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>for<sp/>specifying<sp/>face<sp/>vectors,<sp/>is<sp/>not<sp/>an<sp/>orientation<sp/>we<sp/>want<sp/>so<sp/>it<sp/>must<sp/>be<sp/>rotated.</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="24"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>g<sp/>=<sp/>(1.0<sp/>+<sp/>math.sqrt(5.0))<sp/>/<sp/>2.0</highlight></codeline>
<codeline lineno="25"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>faceBases<sp/>=<sp/>(</highlight></codeline>
<codeline lineno="26"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>(0,<sp/>1,<sp/>g),</highlight></codeline>
<codeline lineno="27"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>(1,<sp/>g,<sp/>0),</highlight></codeline>
<codeline lineno="28"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>(g,<sp/>0,<sp/>1),</highlight></codeline>
<codeline lineno="29"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>)</highlight></codeline>
<codeline lineno="30"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>unrotFaceVecList<sp/>=<sp/>_computeFullVecList(faceBases)</highlight></codeline>
<codeline lineno="31"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>unrotVertexVecList<sp/>=<sp/>_computeDodecahedronVertices(unrotFaceVecList)</highlight></codeline>
<codeline lineno="32"><highlight class="normal"></highlight></codeline>
<codeline lineno="33"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>self.<ref refid="classlsst_1_1skymap_1_1detail_1_1dodecahedron_1_1_dodecahedron_1a8b5a825861bceec18ab706a9bb0fc91a" kindref="member">_withFacesOnPoles</ref>_withFacesOnPoles:</highlight></codeline>
<codeline lineno="34"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>one<sp/>face<sp/>is<sp/>centered<sp/>on<sp/>each<sp/>pole</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="35"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vec0,<sp/>vec1<sp/>=<sp/>_findClosePair(unrotFaceVecList,<sp/>0)</highlight></codeline>
<codeline lineno="36"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>rotMat<sp/>=<sp/>_computeCoordTransform(vec0,<sp/>vec1)</highlight></codeline>
<codeline lineno="37"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">else</highlight><highlight class="normal">:</highlight></codeline>
<codeline lineno="38"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>one<sp/>vertex<sp/>is<sp/>on<sp/>each<sp/>pole</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="39"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vec0,<sp/>vec1<sp/>=<sp/>_findClosePair(unrotVertexVecList,<sp/>0)</highlight></codeline>
<codeline lineno="40"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>rotMat<sp/>=<sp/>_computeCoordTransform(vec0,<sp/>vec1,<sp/>vec1NegativeX=</highlight><highlight class="keyword">True</highlight><highlight class="normal">)</highlight></codeline>
<codeline lineno="41" refid="classlsst_1_1skymap_1_1detail_1_1dodecahedron_1_1_dodecahedron_1aa2ec81b6897f99247ca71f10a09d2413" refkind="member"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classlsst_1_1skymap_1_1detail_1_1dodecahedron_1_1_dodecahedron_1aa2ec81b6897f99247ca71f10a09d2413" kindref="member">vertexVecList</ref>vertexVecList<sp/>=<sp/>[numpy.dot(rotMat,<sp/>unrotVertexVec)<sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>unrotVertexVec<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>unrotVertexVecList]</highlight></codeline>
<codeline lineno="42"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>unsortedFaceList<sp/>=<sp/>[numpy.dot(rotMat,<sp/>unrotFaceVec)<sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>unrotFaceVec<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>unrotFaceVecList]</highlight></codeline>
<codeline lineno="43" refid="classlsst_1_1skymap_1_1detail_1_1dodecahedron_1_1_dodecahedron_1abbfa3397f180f946eebc24d37538fe41" refkind="member"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classlsst_1_1skymap_1_1detail_1_1dodecahedron_1_1_dodecahedron_1abbfa3397f180f946eebc24d37538fe41" kindref="member">faceVecList</ref>faceVecList<sp/>=<sp/>_sortedVectorList(unsortedFaceList)</highlight></codeline>
<codeline lineno="44"><highlight class="normal"></highlight></codeline>
<codeline lineno="45" refid="classlsst_1_1skymap_1_1detail_1_1dodecahedron_1_1_dodecahedron_1a5b820ed9d77eadcf67796b265783f981" refkind="member"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal"><ref refid="classlsst_1_1skymap_1_1detail_1_1dodecahedron_1_1_dodecahedron_1a5b820ed9d77eadcf67796b265783f981" kindref="member">getFaceCtrList</ref>(self):</highlight></codeline>
<codeline lineno="46"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;Return<sp/>a<sp/>list<sp/>of<sp/>face<sp/>centers.</highlight></codeline>
<codeline lineno="47"><highlight class="stringliteral"></highlight></codeline>
<codeline lineno="48"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns</highlight></codeline>
<codeline lineno="49"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>-------</highlight></codeline>
<codeline lineno="50"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>results<sp/>:<sp/>`list`<sp/>of<sp/>`numpy.ndarray`</highlight></codeline>
<codeline lineno="51"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>A<sp/>list<sp/>of<sp/>face<sp/>centers<sp/>(in<sp/>index<sp/>order);<sp/>each<sp/>a<sp/>unit<sp/>vector.</highlight></codeline>
<codeline lineno="52"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="53"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>self.<ref refid="classlsst_1_1skymap_1_1detail_1_1dodecahedron_1_1_dodecahedron_1abbfa3397f180f946eebc24d37538fe41" kindref="member">faceVecList</ref>faceVecList[:]</highlight></codeline>
<codeline lineno="54"><highlight class="normal"></highlight></codeline>
<codeline lineno="55" refid="classlsst_1_1skymap_1_1detail_1_1dodecahedron_1_1_dodecahedron_1a8b575aa47108cc044e86000eb275dda1" refkind="member"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal"><ref refid="classlsst_1_1skymap_1_1detail_1_1dodecahedron_1_1_dodecahedron_1a8b575aa47108cc044e86000eb275dda1" kindref="member">getFaceCtr</ref>(self,<sp/>ind):</highlight></codeline>
<codeline lineno="56"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;Return<sp/>the<sp/>center<sp/>of<sp/>the<sp/>specified<sp/>face.</highlight></codeline>
<codeline lineno="57"><highlight class="stringliteral"></highlight></codeline>
<codeline lineno="58"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Parameters</highlight></codeline>
<codeline lineno="59"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>----------</highlight></codeline>
<codeline lineno="60"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>ind<sp/>:<sp/>`int`</highlight></codeline>
<codeline lineno="61"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Index<sp/>of<sp/>the<sp/>face<sp/>to<sp/>look<sp/>up.</highlight></codeline>
<codeline lineno="62"><highlight class="stringliteral"></highlight></codeline>
<codeline lineno="63"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns</highlight></codeline>
<codeline lineno="64"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>-------</highlight></codeline>
<codeline lineno="65"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>results<sp/>:<sp/>`np.ndarray`</highlight></codeline>
<codeline lineno="66"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Face<sp/>center<sp/>as<sp/>a<sp/>unit<sp/>vector.</highlight></codeline>
<codeline lineno="67"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="68"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>self.<ref refid="classlsst_1_1skymap_1_1detail_1_1dodecahedron_1_1_dodecahedron_1abbfa3397f180f946eebc24d37538fe41" kindref="member">faceVecList</ref>faceVecList[ind][:]</highlight></codeline>
<codeline lineno="69"><highlight class="normal"></highlight></codeline>
<codeline lineno="70" refid="classlsst_1_1skymap_1_1detail_1_1dodecahedron_1_1_dodecahedron_1a5937686c6368ebfda810357c8010e609" refkind="member"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal"><ref refid="classlsst_1_1skymap_1_1detail_1_1dodecahedron_1_1_dodecahedron_1a5937686c6368ebfda810357c8010e609" kindref="member">getVertices</ref>(self,<sp/>ind):</highlight></codeline>
<codeline lineno="71"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;Return<sp/>the<sp/>vertices<sp/>for<sp/>a<sp/>given<sp/>face.</highlight></codeline>
<codeline lineno="72"><highlight class="stringliteral"></highlight></codeline>
<codeline lineno="73"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Parameters</highlight></codeline>
<codeline lineno="74"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>----------</highlight></codeline>
<codeline lineno="75"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>ind<sp/>:<sp/>`int`</highlight></codeline>
<codeline lineno="76"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Face<sp/>index.</highlight></codeline>
<codeline lineno="77"><highlight class="stringliteral"></highlight></codeline>
<codeline lineno="78"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns</highlight></codeline>
<codeline lineno="79"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>-------</highlight></codeline>
<codeline lineno="80"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>sortedVertexList<sp/>:<sp/>`list`<sp/>of<sp/>`numpy.ndarray`</highlight></codeline>
<codeline lineno="81"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>A<sp/>list<sp/>of<sp/>vertices,<sp/>each<sp/>a<sp/>unit<sp/>vector.</highlight></codeline>
<codeline lineno="82"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="83"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>faceVec<sp/>=<sp/>self.<ref refid="classlsst_1_1skymap_1_1detail_1_1dodecahedron_1_1_dodecahedron_1a8b575aa47108cc044e86000eb275dda1" kindref="member">getFaceCtr</ref>getFaceCtr(ind)</highlight></codeline>
<codeline lineno="84"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vertexList,<sp/>indList<sp/>=<sp/>_findCloseList(self.<ref refid="classlsst_1_1skymap_1_1detail_1_1dodecahedron_1_1_dodecahedron_1aa2ec81b6897f99247ca71f10a09d2413" kindref="member">vertexVecList</ref>vertexVecList,<sp/>faceVec)</highlight></codeline>
<codeline lineno="85"><highlight class="normal"></highlight></codeline>
<codeline lineno="86"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>sort<sp/>vertex<sp/>list<sp/>about<sp/>face<sp/>vector<sp/>(direction<sp/>is<sp/>random)</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="87"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>sortedVertexList<sp/>=<sp/>[vertexList[0]]</highlight></codeline>
<codeline lineno="88"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vertexList<sp/>=<sp/>list(vertexList[1:])</highlight></codeline>
<codeline lineno="89"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">while</highlight><highlight class="normal"><sp/>len(vertexList)<sp/>!=<sp/>0:</highlight></codeline>
<codeline lineno="90"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>nearVertexList,<sp/>nearInd<sp/>=<sp/>_findCloseList(vertexList,<sp/>sortedVertexList[-1])</highlight></codeline>
<codeline lineno="91"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>sortedVertexList.append(nearVertexList[0])</highlight></codeline>
<codeline lineno="92"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vertexList.pop(nearInd[0])</highlight></codeline>
<codeline lineno="93"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>sortedVertexList</highlight></codeline>
<codeline lineno="94"><highlight class="normal"></highlight></codeline>
<codeline lineno="95" refid="classlsst_1_1skymap_1_1detail_1_1dodecahedron_1_1_dodecahedron_1accc6e599d6276c9e4d78ea1307f7c826" refkind="member"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal"><ref refid="classlsst_1_1skymap_1_1detail_1_1dodecahedron_1_1_dodecahedron_1accc6e599d6276c9e4d78ea1307f7c826" kindref="member">getFaceInd</ref>(self,<sp/>vec):</highlight></codeline>
<codeline lineno="96"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;Return<sp/>the<sp/>index<sp/>of<sp/>the<sp/>face<sp/>containing<sp/>the<sp/>cartesian<sp/>vector.</highlight></codeline>
<codeline lineno="97"><highlight class="stringliteral"></highlight></codeline>
<codeline lineno="98"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Parameters</highlight></codeline>
<codeline lineno="99"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>----------</highlight></codeline>
<codeline lineno="100"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vec<sp/>:<sp/>`numpy.ndarray`</highlight></codeline>
<codeline lineno="101"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Cartesian<sp/>vector<sp/>(length<sp/>is<sp/>ignored).</highlight></codeline>
<codeline lineno="102"><highlight class="stringliteral"></highlight></codeline>
<codeline lineno="103"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns</highlight></codeline>
<codeline lineno="104"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>-------</highlight></codeline>
<codeline lineno="105"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>results<sp/>:<sp/>`numpy.ndarray`</highlight></codeline>
<codeline lineno="106"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Index<sp/>of<sp/>face<sp/>containing<sp/>vec.</highlight></codeline>
<codeline lineno="107"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="108"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>numpy.argmax(numpy.dot(self.<ref refid="classlsst_1_1skymap_1_1detail_1_1dodecahedron_1_1_dodecahedron_1abbfa3397f180f946eebc24d37538fe41" kindref="member">faceVecList</ref>faceVecList,<sp/>vec))</highlight></codeline>
<codeline lineno="109"><highlight class="normal"></highlight></codeline>
<codeline lineno="110" refid="classlsst_1_1skymap_1_1detail_1_1dodecahedron_1_1_dodecahedron_1acc5abfc65fca43daeae147d58b4e3666" refkind="member"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal"><ref refid="classlsst_1_1skymap_1_1detail_1_1dodecahedron_1_1_dodecahedron_1acc5abfc65fca43daeae147d58b4e3666" kindref="member">getWithFacesOnPoles</ref>(self):</highlight></codeline>
<codeline lineno="111"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>self.<ref refid="classlsst_1_1skymap_1_1detail_1_1dodecahedron_1_1_dodecahedron_1a8b5a825861bceec18ab706a9bb0fc91a" kindref="member">_withFacesOnPoles</ref>_withFacesOnPoles</highlight></codeline>
<codeline lineno="112"><highlight class="normal"></highlight></codeline>
<codeline lineno="113"><highlight class="normal"></highlight></codeline>
<codeline lineno="114" refid="namespacelsst_1_1skymap_1_1detail_1_1dodecahedron_1a33023e735edbc5f7997560a4f0383beb" refkind="member"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal"><ref refid="namespacelsst_1_1skymap_1_1detail_1_1dodecahedron_1a33023e735edbc5f7997560a4f0383beb" kindref="member">computeRotationMatrix</ref>(angle,<sp/>axis):</highlight></codeline>
<codeline lineno="115"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;Return<sp/>a<sp/>3D<sp/>rotation<sp/>matrix<sp/>for<sp/>rotation<sp/>by<sp/>a<sp/>specified<sp/>amount<sp/>around<sp/>a</highlight></codeline>
<codeline lineno="116"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>specified<sp/>axis.</highlight></codeline>
<codeline lineno="117"><highlight class="stringliteral"></highlight></codeline>
<codeline lineno="118"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Parameters</highlight></codeline>
<codeline lineno="119"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>----------</highlight></codeline>
<codeline lineno="120"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>angle<sp/>:<sp/>`float`</highlight></codeline>
<codeline lineno="121"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Amount<sp/>of<sp/>rotation<sp/>(rad).</highlight></codeline>
<codeline lineno="122"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>axis<sp/>:<sp/>`int`</highlight></codeline>
<codeline lineno="123"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Axis<sp/>of<sp/>rotation;<sp/>one<sp/>of<sp/>0,<sp/>1<sp/>or<sp/>2<sp/>for<sp/>x,<sp/>y<sp/>or<sp/>z.</highlight></codeline>
<codeline lineno="124"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="125"><highlight class="normal"><sp/><sp/><sp/><sp/>cosAng<sp/>=<sp/>math.cos(angle)</highlight></codeline>
<codeline lineno="126"><highlight class="normal"><sp/><sp/><sp/><sp/>sinAng<sp/>=<sp/>math.sin(angle)</highlight></codeline>
<codeline lineno="127"><highlight class="normal"><sp/><sp/><sp/><sp/>rotMat<sp/>=<sp/>numpy.zeros((3,<sp/>3),<sp/>dtype=float)</highlight></codeline>
<codeline lineno="128"><highlight class="normal"><sp/><sp/><sp/><sp/>rotMat[axis,<sp/>axis]<sp/>=<sp/>1</highlight></codeline>
<codeline lineno="129"><highlight class="normal"><sp/><sp/><sp/><sp/>rotMat[(axis<sp/>+<sp/>1)<sp/>%<sp/>3,<sp/>(axis<sp/>+<sp/>1)<sp/>%<sp/>3]<sp/>=<sp/>cosAng</highlight></codeline>
<codeline lineno="130"><highlight class="normal"><sp/><sp/><sp/><sp/>rotMat[(axis<sp/>+<sp/>2)<sp/>%<sp/>3,<sp/>(axis<sp/>+<sp/>1)<sp/>%<sp/>3]<sp/>=<sp/>sinAng</highlight></codeline>
<codeline lineno="131"><highlight class="normal"><sp/><sp/><sp/><sp/>rotMat[(axis<sp/>+<sp/>1)<sp/>%<sp/>3,<sp/>(axis<sp/>+<sp/>2)<sp/>%<sp/>3]<sp/>=<sp/>-sinAng</highlight></codeline>
<codeline lineno="132"><highlight class="normal"><sp/><sp/><sp/><sp/>rotMat[(axis<sp/>+<sp/>2)<sp/>%<sp/>3,<sp/>(axis<sp/>+<sp/>2)<sp/>%<sp/>3]<sp/>=<sp/>cosAng</highlight></codeline>
<codeline lineno="133"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>rotMat</highlight></codeline>
<codeline lineno="134"><highlight class="normal"></highlight></codeline>
<codeline lineno="135"><highlight class="normal"></highlight></codeline>
<codeline lineno="136"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">_computeCoordTransform(vec0,<sp/>vec1,<sp/>vec1NegativeX=False):</highlight></codeline>
<codeline lineno="137"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;Compute<sp/>a<sp/>rotation<sp/>matrix<sp/>that<sp/>puts<sp/>vec0<sp/>along<sp/>z<sp/>and<sp/>vec1<sp/>along<sp/>+x<sp/>in</highlight></codeline>
<codeline lineno="138"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>the<sp/>xz<sp/>plane.</highlight></codeline>
<codeline lineno="139"><highlight class="stringliteral"></highlight></codeline>
<codeline lineno="140"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Parameters</highlight></codeline>
<codeline lineno="141"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>----------</highlight></codeline>
<codeline lineno="142"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>vec0<sp/>:<sp/>`numpy.ndarray`</highlight></codeline>
<codeline lineno="143"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vector<sp/>0</highlight></codeline>
<codeline lineno="144"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>vec1<sp/>:<sp/>`numpy.ndarray`</highlight></codeline>
<codeline lineno="145"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vector<sp/>1</highlight></codeline>
<codeline lineno="146"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>vec1NegativeX<sp/>:<sp/>`bool`</highlight></codeline>
<codeline lineno="147"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>If<sp/>True<sp/>then<sp/>vec1<sp/>is<sp/>rotated<sp/>to<sp/>face<sp/>negative<sp/>x.</highlight></codeline>
<codeline lineno="148"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="149"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>rotate<sp/>around<sp/>x<sp/>by<sp/>angle<sp/>of<sp/>vec0<sp/>from<sp/>z<sp/>to<sp/>y</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="150"><highlight class="normal"><sp/><sp/><sp/><sp/>xAng<sp/>=<sp/>math.atan2(vec0[1],<sp/>vec0[2])</highlight></codeline>
<codeline lineno="151"><highlight class="normal"><sp/><sp/><sp/><sp/>xRotMat<sp/>=<sp/><ref refid="namespacelsst_1_1skymap_1_1detail_1_1dodecahedron_1a33023e735edbc5f7997560a4f0383beb" kindref="member">computeRotationMatrix</ref>(xAng,<sp/>0)</highlight></codeline>
<codeline lineno="152"><highlight class="normal"></highlight></codeline>
<codeline lineno="153"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>rotate<sp/>around<sp/>y<sp/>by<sp/>-angle<sp/>of<sp/>rotated<sp/>vec0<sp/>from<sp/>z<sp/>to<sp/>x</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="154"><highlight class="normal"><sp/><sp/><sp/><sp/>vec0RotX<sp/>=<sp/>numpy.dot(xRotMat,<sp/>vec0)</highlight></codeline>
<codeline lineno="155"><highlight class="normal"><sp/><sp/><sp/><sp/>yAng<sp/>=<sp/>-math.atan2(vec0RotX[0],<sp/>vec0RotX[2])</highlight></codeline>
<codeline lineno="156"><highlight class="normal"><sp/><sp/><sp/><sp/>yRotMat<sp/>=<sp/><ref refid="namespacelsst_1_1skymap_1_1detail_1_1dodecahedron_1a33023e735edbc5f7997560a4f0383beb" kindref="member">computeRotationMatrix</ref>(yAng,<sp/>1)</highlight></codeline>
<codeline lineno="157"><highlight class="normal"><sp/><sp/><sp/><sp/>xyRotMat<sp/>=<sp/>numpy.dot(yRotMat,<sp/>xRotMat)</highlight></codeline>
<codeline lineno="158"><highlight class="normal"></highlight></codeline>
<codeline lineno="159"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>rotate<sp/>around<sp/>z<sp/>by<sp/>-angle<sp/>of<sp/>rotated<sp/>vec1<sp/>from<sp/>+/-x<sp/>to<sp/>y</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="160"><highlight class="normal"><sp/><sp/><sp/><sp/>vec1RotXY<sp/>=<sp/>numpy.dot(xyRotMat,<sp/>vec1)</highlight></codeline>
<codeline lineno="161"><highlight class="normal"><sp/><sp/><sp/><sp/>xVal<sp/>=<sp/>vec1RotXY[0]</highlight></codeline>
<codeline lineno="162"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>vec1NegativeX:</highlight></codeline>
<codeline lineno="163"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>xVal<sp/>=<sp/>-xVal</highlight></codeline>
<codeline lineno="164"><highlight class="normal"><sp/><sp/><sp/><sp/>zAng<sp/>=<sp/>-math.atan2(vec1RotXY[1],<sp/>xVal)</highlight></codeline>
<codeline lineno="165"><highlight class="normal"><sp/><sp/><sp/><sp/>zRotMat<sp/>=<sp/><ref refid="namespacelsst_1_1skymap_1_1detail_1_1dodecahedron_1a33023e735edbc5f7997560a4f0383beb" kindref="member">computeRotationMatrix</ref>(zAng,<sp/>2)</highlight></codeline>
<codeline lineno="166"><highlight class="normal"><sp/><sp/><sp/><sp/>xyzRotMat<sp/>=<sp/>numpy.dot(zRotMat,<sp/>xyRotMat)</highlight></codeline>
<codeline lineno="167"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>xyzRotMat</highlight></codeline>
<codeline lineno="168"><highlight class="normal"></highlight></codeline>
<codeline lineno="169"><highlight class="normal"></highlight></codeline>
<codeline lineno="170"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">_computeDodecahedronVertices(faceVecList):</highlight></codeline>
<codeline lineno="171"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;Given<sp/>a<sp/>vector<sp/>of<sp/>face<sp/>positions<sp/>of<sp/>a<sp/>Dodecahedron<sp/>compute<sp/>the<sp/>vertices.</highlight></codeline>
<codeline lineno="172"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="173"><highlight class="normal"><sp/><sp/><sp/><sp/>closeIndSetList<sp/>=<sp/>[]</highlight></codeline>
<codeline lineno="174"><highlight class="normal"><sp/><sp/><sp/><sp/>vertexDict<sp/>=<sp/>{}</highlight></codeline>
<codeline lineno="175"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>i<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>range(len(faceVecList)):</highlight></codeline>
<codeline lineno="176"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>closeIndSet<sp/>=<sp/>_findCloseIndexSet(faceVecList,<sp/>i)</highlight></codeline>
<codeline lineno="177"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>len(closeIndSet)<sp/>!=<sp/>5:</highlight></codeline>
<codeline lineno="178"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">raise</highlight><highlight class="normal"><sp/>RuntimeError(</highlight><highlight class="stringliteral">&quot;Found<sp/>%s<sp/>vertices<sp/>instead<sp/>of<sp/>5<sp/>near<sp/>%s:<sp/>%s&quot;</highlight><highlight class="normal"><sp/>%</highlight></codeline>
<codeline lineno="179"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>(len(closeIndSet),<sp/>faceVecList[i],<sp/>closeIndSet))</highlight></codeline>
<codeline lineno="180"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>closeIndSetList.append(closeIndSet)</highlight></codeline>
<codeline lineno="181"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>i,<sp/>iCloseIndSet<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>enumerate(closeIndSetList):</highlight></codeline>
<codeline lineno="182"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>j<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>iCloseIndSet:</highlight></codeline>
<codeline lineno="183"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>jCloseIndSet<sp/>=<sp/>closeIndSetList[j]</highlight></codeline>
<codeline lineno="184"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>sharedCloseIndSet<sp/>=<sp/>iCloseIndSet.intersection(jCloseIndSet)</highlight></codeline>
<codeline lineno="185"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>len(sharedCloseIndSet)<sp/>!=<sp/>2:</highlight></codeline>
<codeline lineno="186"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">raise</highlight><highlight class="normal"><sp/>RuntimeError(</highlight><highlight class="stringliteral">&quot;Found<sp/>%s<sp/>vertices<sp/>instead<sp/>of<sp/>2<sp/>near<sp/>%s<sp/>and<sp/>%s:<sp/>%s&quot;</highlight><highlight class="normal"><sp/>%</highlight></codeline>
<codeline lineno="187"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>(len(sharedCloseIndSet),<sp/>faceVecList[i],<sp/>faceVecList[j],</highlight></codeline>
<codeline lineno="188"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>sharedCloseIndSet))</highlight></codeline>
<codeline lineno="189"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>k<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>sharedCloseIndSet:</highlight></codeline>
<codeline lineno="190"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>key<sp/>=<sp/>frozenset((i,<sp/>j,<sp/>k))</highlight></codeline>
<codeline lineno="191"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>key<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>vertexDict:</highlight></codeline>
<codeline lineno="192"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">continue</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="193"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vertexVec<sp/>=<sp/>faceVecList[i]<sp/>+<sp/>faceVecList[j]<sp/>+<sp/>faceVecList[k]</highlight></codeline>
<codeline lineno="194"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vertexVec<sp/>/=<sp/>numpy.sqrt(numpy.sum(vertexVec**2))</highlight></codeline>
<codeline lineno="195"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vertexDict[key]<sp/>=<sp/>vertexVec</highlight></codeline>
<codeline lineno="196"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>list(vertexDict.values())</highlight></codeline>
<codeline lineno="197"><highlight class="normal"></highlight></codeline>
<codeline lineno="198"><highlight class="normal"></highlight></codeline>
<codeline lineno="199"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">_computeFullVecList(basisSet):</highlight></codeline>
<codeline lineno="200"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;Given<sp/>a<sp/>collection<sp/>of<sp/>basis<sp/>vectors,<sp/>compute<sp/>all<sp/>permutations<sp/>with<sp/>both</highlight></codeline>
<codeline lineno="201"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>signs<sp/>of<sp/>all<sp/>nonzero<sp/>values.</highlight></codeline>
<codeline lineno="202"><highlight class="stringliteral"></highlight></codeline>
<codeline lineno="203"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>For<sp/>example::</highlight></codeline>
<codeline lineno="204"><highlight class="stringliteral"></highlight></codeline>
<codeline lineno="205"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>[(0,<sp/>1,<sp/>2)]<sp/>-&gt;<sp/>[(0,<sp/>1,<sp/>2),<sp/>(0,<sp/>-1,<sp/>2),<sp/>(0,<sp/>1,<sp/>-2),<sp/>(0,<sp/>-1,<sp/>-2)]</highlight></codeline>
<codeline lineno="206"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="207"><highlight class="normal"><sp/><sp/><sp/><sp/>fullSet<sp/>=<sp/>[]</highlight></codeline>
<codeline lineno="208"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>basisVec<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>basisSet:</highlight></codeline>
<codeline lineno="209"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vecLen<sp/>=<sp/>math.sqrt(numpy.sum(numpy.array(basisVec)**2))</highlight></codeline>
<codeline lineno="210"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>valueList<sp/>=<sp/>[]</highlight></codeline>
<codeline lineno="211"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>basisValue<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>basisVec:</highlight></codeline>
<codeline lineno="212"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>basisValue<sp/>==<sp/>0:</highlight></codeline>
<codeline lineno="213"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>valueList.append((0,))</highlight></codeline>
<codeline lineno="214"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">else</highlight><highlight class="normal">:</highlight></codeline>
<codeline lineno="215"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>valueList.append((basisValue,<sp/>-basisValue))</highlight></codeline>
<codeline lineno="216"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>fullSet<sp/>+=<sp/>list(numpy.array((x,<sp/>y,<sp/>z))/vecLen</highlight></codeline>
<codeline lineno="217"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>z<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>valueList[2]</highlight></codeline>
<codeline lineno="218"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>y<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>valueList[1]</highlight></codeline>
<codeline lineno="219"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>x<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>valueList[0]</highlight></codeline>
<codeline lineno="220"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>)</highlight></codeline>
<codeline lineno="221"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>fullSet</highlight></codeline>
<codeline lineno="222"><highlight class="normal"></highlight></codeline>
<codeline lineno="223"><highlight class="normal"></highlight></codeline>
<codeline lineno="224"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">_findCloseIndexSet(vecList,<sp/>ind):</highlight></codeline>
<codeline lineno="225"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;Given<sp/>a<sp/>list<sp/>of<sp/>cartesian<sp/>vectors,<sp/>return<sp/>a<sp/>set<sp/>of<sp/>indices<sp/>of<sp/>those</highlight></codeline>
<codeline lineno="226"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>closest<sp/>to<sp/>one<sp/>of<sp/>them.</highlight></codeline>
<codeline lineno="227"><highlight class="stringliteral"></highlight></codeline>
<codeline lineno="228"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>This<sp/>is<sp/>intended<sp/>for<sp/>regular<sp/>grids<sp/>where<sp/>distances<sp/>are<sp/>quantized.</highlight></codeline>
<codeline lineno="229"><highlight class="stringliteral"></highlight></codeline>
<codeline lineno="230"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Parameters</highlight></codeline>
<codeline lineno="231"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>----------</highlight></codeline>
<codeline lineno="232"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>vecList<sp/>:<sp/>`list`</highlight></codeline>
<codeline lineno="233"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>List<sp/>of<sp/>cartesian<sp/>vectors.</highlight></codeline>
<codeline lineno="234"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>ind<sp/>:<sp/>`int`</highlight></codeline>
<codeline lineno="235"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Index<sp/>of<sp/>vector<sp/>to<sp/>be<sp/>nearest.</highlight></codeline>
<codeline lineno="236"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="237"><highlight class="normal"><sp/><sp/><sp/><sp/>dotProductList<sp/>=<sp/>numpy.round(numpy.dot(vecList,<sp/>vecList[ind]),<sp/>2)</highlight></codeline>
<codeline lineno="238"><highlight class="normal"><sp/><sp/><sp/><sp/>dotProductList[ind]<sp/>=<sp/>-9e99</highlight></codeline>
<codeline lineno="239"><highlight class="normal"><sp/><sp/><sp/><sp/>minDist<sp/>=<sp/>numpy.max(dotProductList)</highlight></codeline>
<codeline lineno="240"><highlight class="normal"><sp/><sp/><sp/><sp/>indList<sp/>=<sp/>numpy.arange(len(dotProductList))[dotProductList<sp/>==<sp/>minDist]</highlight></codeline>
<codeline lineno="241"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>set(indList)</highlight></codeline>
<codeline lineno="242"><highlight class="normal"></highlight></codeline>
<codeline lineno="243"><highlight class="normal"></highlight></codeline>
<codeline lineno="244"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">_findCloseList(vecList,<sp/>vec):</highlight></codeline>
<codeline lineno="245"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;Given<sp/>a<sp/>list<sp/>of<sp/>cartesian<sp/>vectors,<sp/>return<sp/>all<sp/>those<sp/>closest<sp/>to<sp/>a</highlight></codeline>
<codeline lineno="246"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>specified<sp/>position</highlight></codeline>
<codeline lineno="247"><highlight class="stringliteral"></highlight></codeline>
<codeline lineno="248"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>This<sp/>is<sp/>intended<sp/>for<sp/>regular<sp/>grids<sp/>where<sp/>distances<sp/>are<sp/>quantized</highlight></codeline>
<codeline lineno="249"><highlight class="stringliteral"></highlight></codeline>
<codeline lineno="250"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Parameters</highlight></codeline>
<codeline lineno="251"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>----------</highlight></codeline>
<codeline lineno="252"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>vecList<sp/>:<sp/>`list`</highlight></codeline>
<codeline lineno="253"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>List<sp/>of<sp/>cartesian<sp/>vectors.</highlight></codeline>
<codeline lineno="254"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>vec<sp/>:<sp/>`iterable`<sp/>of<sp/>`float`</highlight></codeline>
<codeline lineno="255"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Vector<sp/>to<sp/>be<sp/>near.</highlight></codeline>
<codeline lineno="256"><highlight class="stringliteral"></highlight></codeline>
<codeline lineno="257"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Returns</highlight></codeline>
<codeline lineno="258"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>-------</highlight></codeline>
<codeline lineno="259"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>retList<sp/>:<sp/>`list`</highlight></codeline>
<codeline lineno="260"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>List<sp/>of<sp/>closest<sp/>vectors.</highlight></codeline>
<codeline lineno="261"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>indList<sp/>:<sp/>`list`</highlight></codeline>
<codeline lineno="262"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>List<sp/>if<sp/>indices<sp/>of<sp/>those<sp/>vectors.</highlight></codeline>
<codeline lineno="263"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="264"><highlight class="normal"><sp/><sp/><sp/><sp/>dotProductList<sp/>=<sp/>numpy.round(numpy.dot(vecList,<sp/>vec),<sp/>2)</highlight></codeline>
<codeline lineno="265"><highlight class="normal"><sp/><sp/><sp/><sp/>minDist<sp/>=<sp/>numpy.max(dotProductList)</highlight></codeline>
<codeline lineno="266"><highlight class="normal"><sp/><sp/><sp/><sp/>indList<sp/>=<sp/>numpy.arange(len(dotProductList))[dotProductList<sp/>==<sp/>minDist]</highlight></codeline>
<codeline lineno="267"><highlight class="normal"><sp/><sp/><sp/><sp/>retList<sp/>=<sp/>numpy.take(vecList,<sp/>indList,<sp/>0)</highlight></codeline>
<codeline lineno="268"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>retList,<sp/>indList</highlight></codeline>
<codeline lineno="269"><highlight class="normal"></highlight></codeline>
<codeline lineno="270"><highlight class="normal"></highlight></codeline>
<codeline lineno="271"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">_findClosePair(vecList,<sp/>ind=0):</highlight></codeline>
<codeline lineno="272"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;Given<sp/>a<sp/>list<sp/>of<sp/>cartesian<sp/>vectors<sp/>and<sp/>an<sp/>index,<sp/>return<sp/>the<sp/>vector<sp/>and</highlight></codeline>
<codeline lineno="273"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>one<sp/>of<sp/>its<sp/>closest<sp/>neighbors.</highlight></codeline>
<codeline lineno="274"><highlight class="stringliteral"></highlight></codeline>
<codeline lineno="275"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Parameters</highlight></codeline>
<codeline lineno="276"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>----------</highlight></codeline>
<codeline lineno="277"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>vecList<sp/>:<sp/>`list`<sp/>of<sp/>`numpy.ndarray`</highlight></codeline>
<codeline lineno="278"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>List<sp/>of<sp/>cartesian<sp/>vectors.</highlight></codeline>
<codeline lineno="279"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>ind<sp/>:<sp/>`int`</highlight></codeline>
<codeline lineno="280"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Index<sp/>of<sp/>first<sp/>vector.</highlight></codeline>
<codeline lineno="281"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="282"><highlight class="normal"><sp/><sp/><sp/><sp/>vec<sp/>=<sp/>vecList[ind]</highlight></codeline>
<codeline lineno="283"><highlight class="normal"><sp/><sp/><sp/><sp/>otherVecList<sp/>=<sp/>vecList[0:ind]<sp/>+<sp/>vecList[ind+1:]</highlight></codeline>
<codeline lineno="284"><highlight class="normal"><sp/><sp/><sp/><sp/>ind1<sp/>=<sp/>numpy.argmax(numpy.dot(otherVecList,<sp/>vec))</highlight></codeline>
<codeline lineno="285"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>vec,<sp/>otherVecList[ind1]</highlight></codeline>
<codeline lineno="286"><highlight class="normal"></highlight></codeline>
<codeline lineno="287"><highlight class="normal"></highlight></codeline>
<codeline lineno="288"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">_sortedVectorList(vecList):</highlight></codeline>
<codeline lineno="289"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;Return<sp/>a<sp/>list<sp/>of<sp/>cartesian<sp/>vectors<sp/>sorted<sp/>by<sp/>decreasing<sp/>latitude<sp/>and</highlight></codeline>
<codeline lineno="290"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>increasing<sp/>longitude.</highlight></codeline>
<codeline lineno="291"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="292"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">vecToSort(vec):</highlight></codeline>
<codeline lineno="293"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>ang<sp/>=<sp/>round(math.atan2(vec[1],<sp/>vec[0]),<sp/>2)</highlight></codeline>
<codeline lineno="294"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>ang<sp/>&lt;<sp/>0:</highlight></codeline>
<codeline lineno="295"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>ang<sp/>+=<sp/>2.0<sp/>*<sp/>math.pi</highlight></codeline>
<codeline lineno="296"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>(-round(vec[2],<sp/>1),<sp/>ang,<sp/>vec)</highlight></codeline>
<codeline lineno="297"><highlight class="normal"></highlight></codeline>
<codeline lineno="298"><highlight class="normal"><sp/><sp/><sp/><sp/>decoratedList<sp/>=<sp/>[vecToSort(v)<sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>v<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>vecList]</highlight></codeline>
<codeline lineno="299"><highlight class="normal"><sp/><sp/><sp/><sp/>decoratedList.sort()</highlight></codeline>
<codeline lineno="300"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>[d[2]<sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>d<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>decoratedList]</highlight></codeline>
<codeline lineno="301"><highlight class="normal"></highlight></codeline>
<codeline lineno="302"><highlight class="normal"></highlight></codeline>
<codeline lineno="303"><highlight class="normal"></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>__name__<sp/>==<sp/></highlight><highlight class="stringliteral">&quot;__main__&quot;</highlight><highlight class="normal">:</highlight></codeline>
<codeline lineno="304" refid="namespacelsst_1_1skymap_1_1detail_1_1dodecahedron_1a7d297ff1509ee2216eeda33927ef4cb6" refkind="member"><highlight class="normal"><sp/><sp/><sp/><sp/>numpy.set_printoptions(precision=2,<sp/>suppress=</highlight><highlight class="keyword">True</highlight><highlight class="normal">,<sp/>linewidth=120)</highlight></codeline>
<codeline lineno="305"><highlight class="normal"></highlight></codeline>
<codeline lineno="306"><highlight class="normal"><sp/><sp/><sp/><sp/>print(</highlight><highlight class="stringliteral">&quot;Dodecahedron<sp/>with<sp/>vertices<sp/>on<sp/>poles&quot;</highlight><highlight class="normal">)</highlight></codeline>
<codeline lineno="307" refid="namespacelsst_1_1skymap_1_1detail_1_1dodecahedron_1a7d4f77019aaf6c49c9d98e693674682f" refkind="member"><highlight class="normal"><sp/><sp/><sp/><sp/>vertexDodec<sp/>=<sp/><ref refid="classlsst_1_1skymap_1_1detail_1_1dodecahedron_1_1_dodecahedron" kindref="compound">Dodecahedron</ref>(withFacesOnPoles=</highlight><highlight class="keyword">False</highlight><highlight class="normal">)</highlight></codeline>
<codeline lineno="308"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>i<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>range(12):</highlight></codeline>
<codeline lineno="309" refid="namespacelsst_1_1skymap_1_1detail_1_1dodecahedron_1ab0c0dca1e51cabef3dc1b3f48288c4e7" refkind="member"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>faceVec<sp/>=<sp/>vertexDodec.getFaceCtr(i)</highlight></codeline>
<codeline lineno="310"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>print(</highlight><highlight class="stringliteral">&quot;Face<sp/>%2d:<sp/>%s&quot;</highlight><highlight class="normal"><sp/>%<sp/>(i,<sp/>faceVec))</highlight></codeline>
    </programlisting>
    <location file="python/lsst/skymap/detail/dodecahedron.py"/>
  </compounddef>
</doxygen>
