10 #include <tracking/trackFindingCDC/findlets/minimal/SegmentTripleCreator.h>
12 #include <tracking/trackFindingCDC/eventdata/tracks/CDCSegmentTriple.h>
13 #include <tracking/trackFindingCDC/eventdata/tracks/CDCAxialSegmentPair.h>
14 #include <tracking/trackFindingCDC/eventdata/segments/CDCSegment2D.h>
16 #include <tracking/trackFindingCDC/topology/ISuperLayer.h>
18 #include <framework/logging/Logger.h>
26 using namespace TrackFindingCDC;
35 return "Creates segment triples from a set of middle segments and already combined axial "
36 "segment pairs filtered by some acceptance criterion";
45 const std::vector<CDCAxialSegmentPair>& inputAxialSegmentPairs,
46 std::vector<CDCSegmentTriple>& segmentTriples)
50 segementsInSuperLayer.clear();
54 ISuperLayer iSuperLayer = segment.getISuperLayer();
60 const CDCSegment2D* startSegment = axialSegmentPair.getStartSegment();
61 const CDCSegment2D* endSegment = axialSegmentPair.getEndSegment();
63 ISuperLayer startISuperLayer = startSegment->getISuperLayer();
64 ISuperLayer endISuperLayer = endSegment->getISuperLayer();
69 if (startISuperLayer != endISuperLayer) {
70 ISuperLayer middleISuperLayer = (startISuperLayer + endISuperLayer) / 2;
75 create(axialSegmentPair, middleSegments, segmentTriples);
81 for (ISuperLayer middleISuperLayer : {middleISuperLayerIn, middleISuperLayerOut}) {
84 create(axialSegmentPair, middleSegments, segmentTriples);
89 std::sort(segmentTriples.begin(), segmentTriples.end());
93 const std::vector<const CDCSegment2D*>& middleSegments,
94 std::vector<CDCSegmentTriple>& segmentTriples)
97 for (
const CDCSegment2D* middleSegment : middleSegments) {
104 if (not std::isnan(weight)) {
106 segmentTriples.insert(segmentTriples.end(), segmentTriple);