50 std::vector<CDCSegmentPair>& segmentPairs)
52 segmentPairs.reserve(500);
56 segmentsInSuperLayer.clear();
60 if (segment.empty())
continue;
61 ISuperLayer iSuperLayer = segment.front().getISuperLayer();
76 create(fromSegments, toSegments, segmentPairs);
83 create(fromSegments, toSegments, segmentPairs);
87 std::sort(segmentPairs.begin(), segmentPairs.end());
92 std::vector<CDCAxialSegmentPair> axialSegmentPairs;
99 const CDCSegment2D* startSegment = axialSegmentPair.getStartSegment();
100 const CDCSegment2D* endSegment = axialSegmentPair.getEndSegment();
102 CDCTrajectory2D startCommonTrajectory = axialSegmentPair.getTrajectory2D();
103 if (not startCommonTrajectory.
isFitted())
continue;
107 startSegment->setTrajectory2D(startCommonTrajectory);
108 std::vector<const CDCSegment2D*> startSegments{startSegment};
110 CDCTrajectory2D endCommonTrajectory = axialSegmentPair.getTrajectory2D();
113 endSegment->setTrajectory2D(endCommonTrajectory);
114 std::vector<const CDCSegment2D*> endSegments{endSegment};
116 if (startSegment->getISuperLayer() == endSegment->getISuperLayer()) {
117 ISuperLayer iSuperLayerCommon = startSegment->getISuperLayer();
122 create(startSegments, middleSegments, segmentPairs);
123 create(middleSegments, endSegments, segmentPairs);
129 create(startSegments, middleSegments, segmentPairs);
130 create(middleSegments, endSegments, segmentPairs);
134 ISuperLayer iSuperLayerMiddle =
135 (startSegment->getISuperLayer() + endSegment->getISuperLayer()) / 2;
137 create(startSegments, middleSegments, segmentPairs);
138 create(middleSegments, endSegments, segmentPairs);
140 startSegment->setTrajectory2D(startTrajectory2D);
141 endSegment->setTrajectory2D(endTrajectory2D);
145 if (lhs < rhs)
return true;
146 if (rhs < lhs)
return false;
150 std::sort(segmentPairs.begin(), segmentPairs.end(), lessPairAndgreaterWeight);
161 const std::vector<const CDCSegment2D*>& toSegments,
162 std::vector<CDCSegmentPair>& segmentPairs)
165 for (
const CDCSegment2D* ptrFromSegment : fromSegments) {
168 if (ptrFromSegment == ptrToSegment)
continue;
169 segmentPair.
setSegments(ptrFromSegment, ptrToSegment);
173 if (not std::isnan(pairWeight)) {
175 segmentPairs.push_back(segmentPair);