52 std::vector<CDCSegmentPair>& segmentPairs)
54 segmentPairs.reserve(500);
58 segmentsInSuperLayer.clear();
62 if (segment.empty())
continue;
63 ISuperLayer iSuperLayer = segment.front().getISuperLayer();
78 create(fromSegments, toSegments, segmentPairs);
85 create(fromSegments, toSegments, segmentPairs);
89 std::sort(segmentPairs.begin(), segmentPairs.end());
94 std::vector<CDCAxialSegmentPair> axialSegmentPairs;
101 const CDCSegment2D* startSegment = axialSegmentPair.getStartSegment();
102 const CDCSegment2D* endSegment = axialSegmentPair.getEndSegment();
104 CDCTrajectory2D startCommonTrajectory = axialSegmentPair.getTrajectory2D();
105 if (not startCommonTrajectory.
isFitted())
continue;
109 startSegment->setTrajectory2D(startCommonTrajectory);
110 std::vector<const CDCSegment2D*> startSegments{startSegment};
112 CDCTrajectory2D endCommonTrajectory = axialSegmentPair.getTrajectory2D();
115 endSegment->setTrajectory2D(endCommonTrajectory);
116 std::vector<const CDCSegment2D*> endSegments{endSegment};
118 if (startSegment->getISuperLayer() == endSegment->getISuperLayer()) {
119 ISuperLayer iSuperLayerCommon = startSegment->getISuperLayer();
124 create(startSegments, middleSegments, segmentPairs);
125 create(middleSegments, endSegments, segmentPairs);
131 create(startSegments, middleSegments, segmentPairs);
132 create(middleSegments, endSegments, segmentPairs);
137 (startSegment->getISuperLayer() + endSegment->getISuperLayer()) / 2;
139 create(startSegments, middleSegments, segmentPairs);
140 create(middleSegments, endSegments, segmentPairs);
142 startSegment->setTrajectory2D(startTrajectory2D);
143 endSegment->setTrajectory2D(endTrajectory2D);
147 if (lhs < rhs)
return true;
148 if (rhs < lhs)
return false;
152 std::sort(segmentPairs.begin(), segmentPairs.end(), lessPairAndgreaterWeight);
163 const std::vector<const CDCSegment2D*>& toSegments,
164 std::vector<CDCSegmentPair>& segmentPairs)
167 for (
const CDCSegment2D* ptrFromSegment : fromSegments) {
170 if (ptrFromSegment == ptrToSegment)
continue;
171 segmentPair.
setSegments(ptrFromSegment, ptrToSegment);
175 if (not std::isnan(pairWeight)) {
177 segmentPairs.push_back(segmentPair);