Main method constructing pairs in adjacent super layers.
53{
54 segmentPairs.reserve(500);
55
56
58 segmentsInSuperLayer.clear();
59 }
60
61 for (const CDCSegment2D& segment : inputSegments) {
62 if (segment.empty()) continue;
63 ISuperLayer iSuperLayer = segment.front().getISuperLayer();
65 const CDCSegment2D* ptrSegment = &segment;
67 }
68 }
69
70
73
74
78 create(fromSegments, toSegments, segmentPairs);
79 }
80
81
85 create(fromSegments, toSegments, segmentPairs);
86 }
87 }
88
89 std::sort(segmentPairs.begin(), segmentPairs.end());
90
92
93
94 std::vector<CDCAxialSegmentPair> axialSegmentPairs;
95
96
98
99
100 for (const CDCAxialSegmentPair& axialSegmentPair : axialSegmentPairs) {
101 const CDCSegment2D* startSegment = axialSegmentPair.getStartSegment();
102 const CDCSegment2D* endSegment = axialSegmentPair.getEndSegment();
103
104 CDCTrajectory2D startCommonTrajectory = axialSegmentPair.getTrajectory2D();
105 if (not startCommonTrajectory.
isFitted())
continue;
106
107 CDCTrajectory2D startTrajectory2D = startSegment->getTrajectory2D();
109 startSegment->setTrajectory2D(startCommonTrajectory);
110 std::vector<const CDCSegment2D*> startSegments{startSegment};
111
112 CDCTrajectory2D endCommonTrajectory = axialSegmentPair.getTrajectory2D();
113 CDCTrajectory2D endTrajectory2D = endSegment->getTrajectory2D();
115 endSegment->setTrajectory2D(endCommonTrajectory);
116 std::vector<const CDCSegment2D*> endSegments{endSegment};
117
118 if (startSegment->getISuperLayer() == endSegment->getISuperLayer()) {
119 ISuperLayer iSuperLayerCommon = startSegment->getISuperLayer();
120
124 create(startSegments, middleSegments, segmentPairs);
125 create(middleSegments, endSegments, segmentPairs);
126 }
127
131 create(startSegments, middleSegments, segmentPairs);
132 create(middleSegments, endSegments, segmentPairs);
133 }
134
135 } else {
137 (startSegment->getISuperLayer() + endSegment->getISuperLayer()) / 2;
139 create(startSegments, middleSegments, segmentPairs);
140 create(middleSegments, endSegments, segmentPairs);
141 }
142 startSegment->setTrajectory2D(startTrajectory2D);
143 endSegment->setTrajectory2D(endTrajectory2D);
144 }
145
146 auto lessPairAndgreaterWeight = [](const CDCSegmentPair & lhs, const CDCSegmentPair & rhs) {
147 if (lhs < rhs) return true;
148 if (rhs < lhs) return false;
150 };
151
152 std::sort(segmentPairs.begin(), segmentPairs.end(), lessPairAndgreaterWeight);
153
154
155
156
157
158
159
160}
std::array< std::vector< const TrackingUtilities::CDCSegment2D * >, CDC::ISuperLayerUtil::c_N > m_segmentsBySuperLayer
Structure for the segments grouped by super layer id.
bool m_param_axialBridging
Parameter : Switch to enable the search for axial to axial pairs to enable more stable reconstruction...
void create(const std::vector< const TrackingUtilities::CDCSegment2D * > &fromSegments, const std::vector< const TrackingUtilities::CDCSegment2D * > &toSegments, std::vector< TrackingUtilities::CDCSegmentPair > &segmentPairs)
Creates segment pairs from a combination of from segments and to segments.
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.
signed short ISuperLayer
The type of the layer and superlayer ids.
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...