10 #include <tracking/trackFindingCDC/filters/wireHitRelation/WholeWireHitRelationFilter.h>
12 #include <tracking/trackFindingCDC/eventdata/hits/CDCWireHit.h>
14 #include <tracking/trackFindingCDC/topology/CDCWireTopology.h>
15 #include <tracking/trackFindingCDC/topology/CDCWire.h>
17 #include <tracking/trackFindingCDC/filters/base/RelationFilter.icc.h>
19 #include <tracking/trackFindingCDC/utilities/StringManipulation.h>
20 #include <tracking/trackFindingCDC/utilities/Functional.h>
22 #include <framework/core/ModuleParamList.templateDetails.h>
29 using namespace TrackFindingCDC;
34 : m_param_degree(neighborhoodDegree)
41 const std::string& prefix)
46 "Neighbor degree which are included. 1 for primary, 2 for secondary, 3 ...",
52 const std::vector<CDCWireHit*>& wireHits)
const
54 assert(std::is_sorted(wireHits.begin(), wireHits.end(),
LessOf<Deref>()) &&
55 "Expected wire hits to be sorted");
58 std::vector<const CDCWire*> m_wireNeighbors;
59 m_wireNeighbors.reserve(nWireNeighbors);
61 std::vector<CDCWireHit*> m_wireHitNeighbors;
62 m_wireHitNeighbors.reserve(2 * nWireNeighbors);
65 const CDCWire& wire = from->getWire();
73 const CDCWire* cwSixthSecondWireNeighbor = ccwSixthSecondWireNeighbor;
77 const CDCWire* cwTwelvethSecondWireNeighbor = ccwTwelvethSecondWireNeighbor;
83 m_wireNeighbors.push_back(ccwSixthSecondWireNeighbor);
85 if (cwInWireNeighbor) m_wireNeighbors.push_back(cwInWireNeighbor);
86 if (ccwInWireNeighbor) m_wireNeighbors.push_back(ccwInWireNeighbor);
88 if (cwWireNeighbor) m_wireNeighbors.push_back(cwWireNeighbor);
89 if (ccwWireNeighbor) m_wireNeighbors.push_back(ccwWireNeighbor);
91 if (cwOutWireNeighbor) m_wireNeighbors.push_back(cwOutWireNeighbor);
92 if (ccwOutWireNeighbor) m_wireNeighbors.push_back(ccwOutWireNeighbor);
95 m_wireNeighbors.push_back(ccwTwelvethSecondWireNeighbor);
98 if (cwSixthSecondWireNeighbor) {
99 cwSixthSecondWireNeighbor = cwSixthSecondWireNeighbor->
getNeighborCW();
100 m_wireNeighbors.push_back(cwSixthSecondWireNeighbor);
102 if (ccwSixthSecondWireNeighbor) {
103 ccwSixthSecondWireNeighbor = ccwSixthSecondWireNeighbor->getNeighborCCW();
104 m_wireNeighbors.push_back(ccwSixthSecondWireNeighbor);
107 if (cwInWireNeighbor) {
109 m_wireNeighbors.push_back(cwInWireNeighbor);
111 if (ccwInWireNeighbor) {
113 m_wireNeighbors.push_back(ccwInWireNeighbor);
116 if (cwWireNeighbor) {
118 m_wireNeighbors.push_back(cwWireNeighbor);
120 if (ccwWireNeighbor) {
122 m_wireNeighbors.push_back(ccwWireNeighbor);
125 if (cwOutWireNeighbor) {
127 m_wireNeighbors.push_back(cwOutWireNeighbor);
129 if (ccwOutWireNeighbor) {
131 m_wireNeighbors.push_back(ccwOutWireNeighbor);
134 if (cwTwelvethSecondWireNeighbor) {
135 cwTwelvethSecondWireNeighbor = cwTwelvethSecondWireNeighbor->
getNeighborCW();
136 m_wireNeighbors.push_back(cwTwelvethSecondWireNeighbor);
138 if (ccwTwelvethSecondWireNeighbor) {
139 ccwTwelvethSecondWireNeighbor = ccwTwelvethSecondWireNeighbor->getNeighborCCW();
140 m_wireNeighbors.push_back(ccwTwelvethSecondWireNeighbor);
144 std::sort(std::begin(m_wireNeighbors), std::end(m_wireNeighbors));
146 for (
const CDCWire* neighborWire : m_wireNeighbors) {
148 std::equal_range(wireHits.begin(), wireHits.end(), neighborWire,
LessOf<Deref>())};
150 m_wireHitNeighbors.insert(m_wireHitNeighbors.end(),
151 neighborWireHits.begin(),
152 neighborWireHits.end());
155 return m_wireHitNeighbors;