Main method constructing pairs in adjacent super layers.
51{
52 segmentPairs.reserve(500);
53
54
56 segmentsInSuperLayer.clear();
57 }
58
59 for (const CDCSegment2D& segment : inputSegments) {
60 if (segment.empty()) continue;
61 ISuperLayer iSuperLayer = segment.front().getISuperLayer();
63 const CDCSegment2D* ptrSegment = &segment;
65 }
66 }
67
68
71
72
76 create(fromSegments, toSegments, segmentPairs);
77 }
78
79
83 create(fromSegments, toSegments, segmentPairs);
84 }
85 }
86
87 std::sort(segmentPairs.begin(), segmentPairs.end());
88
90
91
92 std::vector<CDCAxialSegmentPair> axialSegmentPairs;
93
94
96
97
98 for (const CDCAxialSegmentPair& axialSegmentPair : axialSegmentPairs) {
99 const CDCSegment2D* startSegment = axialSegmentPair.getStartSegment();
100 const CDCSegment2D* endSegment = axialSegmentPair.getEndSegment();
101
102 CDCTrajectory2D startCommonTrajectory = axialSegmentPair.getTrajectory2D();
103 if (not startCommonTrajectory.
isFitted())
continue;
104
105 CDCTrajectory2D startTrajectory2D = startSegment->getTrajectory2D();
107 startSegment->setTrajectory2D(startCommonTrajectory);
108 std::vector<const CDCSegment2D*> startSegments{startSegment};
109
110 CDCTrajectory2D endCommonTrajectory = axialSegmentPair.getTrajectory2D();
111 CDCTrajectory2D endTrajectory2D = endSegment->getTrajectory2D();
113 endSegment->setTrajectory2D(endCommonTrajectory);
114 std::vector<const CDCSegment2D*> endSegments{endSegment};
115
116 if (startSegment->getISuperLayer() == endSegment->getISuperLayer()) {
117 ISuperLayer iSuperLayerCommon = startSegment->getISuperLayer();
118
122 create(startSegments, middleSegments, segmentPairs);
123 create(middleSegments, endSegments, segmentPairs);
124 }
125
129 create(startSegments, middleSegments, segmentPairs);
130 create(middleSegments, endSegments, segmentPairs);
131 }
132
133 } else {
134 ISuperLayer iSuperLayerMiddle =
135 (startSegment->getISuperLayer() + endSegment->getISuperLayer()) / 2;
137 create(startSegments, middleSegments, segmentPairs);
138 create(middleSegments, endSegments, segmentPairs);
139 }
140 startSegment->setTrajectory2D(startTrajectory2D);
141 endSegment->setTrajectory2D(endTrajectory2D);
142 }
143
144 auto lessPairAndgreaterWeight = [](const CDCSegmentPair & lhs, const CDCSegmentPair & rhs) {
145 if (lhs < rhs) return true;
146 if (rhs < lhs) return false;
148 };
149
150 std::sort(segmentPairs.begin(), segmentPairs.end(), lessPairAndgreaterWeight);
151
152
153
154
155
156
157
158}
Weight getCellWeight() const
Getter for the cell weight.
AutomatonCell & getAutomatonCell() const
Mutable getter for the automaton cell.
double setLocalOrigin(const Vector2D &localOrigin)
Setter for the origin of the local coordinate system.
bool isFitted() const
Checks if the circle is already set to a valid value.
const Vector2D & getLocalOrigin() const
Getter for the origin of the local coordinate system.
void create(const std::vector< const CDCSegment2D * > &fromSegments, const std::vector< const CDCSegment2D * > &toSegments, std::vector< CDCSegmentPair > &segmentPairs)
Creates segment pairs from a combination of from segments and to segments.
bool m_param_axialBridging
Parameter : Switch to enable the search for axial to axial pairs to enable more stable reconstruction...
std::array< std::vector< const CDCSegment2D * >, ISuperLayerUtil::c_N > m_segmentsBySuperLayer
Structure for the segments grouped by super layer id.
static const ISuperLayer c_N
Constant representing the total number of cdc superlayers.
static ISuperLayer getNextInwards(ISuperLayer iSuperLayer)
Returns the super layer that is inside of the given super layer.
static bool isInvalid(ISuperLayer iSuperLayer)
Indicates if the given number corresponds to a true cdc superlayer - excludes the logic ids for inner...
static ISuperLayer getNextOutwards(ISuperLayer iSuperLayer)
Returns the super layer that is outside of the given super layer.
static bool isInCDC(ISuperLayer iSuperLayer)
Indicates if the given number corresponds to a true cdc superlayer - excludes the logic ids for inner...