50 const std::vector<CDCWireHit*>& wireHits)
const
52 assert(std::is_sorted(wireHits.begin(), wireHits.end(), LessOf<Deref>()) &&
53 "Expected wire hits to be sorted");
56 std::vector<const CDCWire*> m_wireNeighbors;
57 m_wireNeighbors.reserve(nWireNeighbors);
59 std::vector<CDCWireHit*> m_wireHitNeighbors;
60 m_wireHitNeighbors.reserve(2 * nWireNeighbors);
63 const CDCWire& wire = from->getWire();
71 const CDCWire* cwSixthSecondWireNeighbor = ccwSixthSecondWireNeighbor;
75 const CDCWire* cwTwelvethSecondWireNeighbor = ccwTwelvethSecondWireNeighbor;
81 m_wireNeighbors.push_back(ccwSixthSecondWireNeighbor);
83 if (cwInWireNeighbor) m_wireNeighbors.push_back(cwInWireNeighbor);
84 if (ccwInWireNeighbor) m_wireNeighbors.push_back(ccwInWireNeighbor);
86 if (cwWireNeighbor) m_wireNeighbors.push_back(cwWireNeighbor);
87 if (ccwWireNeighbor) m_wireNeighbors.push_back(ccwWireNeighbor);
89 if (cwOutWireNeighbor) m_wireNeighbors.push_back(cwOutWireNeighbor);
90 if (ccwOutWireNeighbor) m_wireNeighbors.push_back(ccwOutWireNeighbor);
93 m_wireNeighbors.push_back(ccwTwelvethSecondWireNeighbor);
96 if (cwSixthSecondWireNeighbor) {
97 cwSixthSecondWireNeighbor = cwSixthSecondWireNeighbor->
getNeighborCW();
98 m_wireNeighbors.push_back(cwSixthSecondWireNeighbor);
100 if (ccwSixthSecondWireNeighbor) {
101 ccwSixthSecondWireNeighbor = ccwSixthSecondWireNeighbor->
getNeighborCCW();
102 m_wireNeighbors.push_back(ccwSixthSecondWireNeighbor);
105 if (cwInWireNeighbor) {
107 m_wireNeighbors.push_back(cwInWireNeighbor);
109 if (ccwInWireNeighbor) {
111 m_wireNeighbors.push_back(ccwInWireNeighbor);
114 if (cwWireNeighbor) {
116 m_wireNeighbors.push_back(cwWireNeighbor);
118 if (ccwWireNeighbor) {
120 m_wireNeighbors.push_back(ccwWireNeighbor);
123 if (cwOutWireNeighbor) {
125 m_wireNeighbors.push_back(cwOutWireNeighbor);
127 if (ccwOutWireNeighbor) {
129 m_wireNeighbors.push_back(ccwOutWireNeighbor);
132 if (cwTwelvethSecondWireNeighbor) {
133 cwTwelvethSecondWireNeighbor = cwTwelvethSecondWireNeighbor->
getNeighborCW();
134 m_wireNeighbors.push_back(cwTwelvethSecondWireNeighbor);
136 if (ccwTwelvethSecondWireNeighbor) {
137 ccwTwelvethSecondWireNeighbor = ccwTwelvethSecondWireNeighbor->
getNeighborCCW();
138 m_wireNeighbors.push_back(ccwTwelvethSecondWireNeighbor);
142 std::sort(std::begin(m_wireNeighbors), std::end(m_wireNeighbors));
144 for (
const CDCWire* neighborWire : m_wireNeighbors) {
145 ConstVectorRange<CDCWireHit*> neighborWireHits{
146 std::equal_range(wireHits.begin(), wireHits.end(), neighborWire, LessOf<Deref>())};
148 m_wireHitNeighbors.insert(m_wireHitNeighbors.end(),
149 neighborWireHits.begin(),
150 neighborWireHits.end());
153 return m_wireHitNeighbors;