10 #include <tracking/trackFindingCDC/findlets/minimal/SegmentOrienter.h>
12 #include <tracking/trackFindingCDC/eventdata/segments/CDCSegment2D.h>
14 #include <tracking/trackFindingCDC/utilities/StringManipulation.h>
16 #include <framework/core/ModuleParamList.templateDetails.h>
17 #include <framework/logging/Logger.h>
20 using namespace TrackFindingCDC;
24 return "Fixes the flight direction of segments to a preferred orientation by simple heuristics.";
30 moduleParamList->
addParameter(prefixed(prefix,
"SegmentOrientation"),
32 "Option which orientation of segments shall be generate. "
33 "Valid options are '' (default of the finder), "
34 "'none' (one orientation, algorithm dependent), "
48 }
catch (std::invalid_argument& e) {
55 std::vector<CDCSegment2D>& outputSegments)
60 outputSegments = inputSegments;
63 outputSegments.reserve(2 * inputSegments.size());
65 outputSegments.push_back(segment);
66 if (segment->hasReverseFlag())
continue;
67 outputSegments.back()->setReverseFlag();
68 outputSegments.push_back(segment.reversed());
69 outputSegments.back()->setReverseFlag();
75 outputSegments.reserve(1.5 * inputSegments.size());
77 if (segment->hasReverseFlag()) {
78 outputSegments.push_back(segment);
82 bool isFitted = trajectory2D.
isFitted();
83 bool isCurler = trajectory2D.
isCurler(1.1);
86 bool isLeaver = isFitted and (not isCurler) and isOriginer;
92 outputSegments.push_back(segment.reversed());
94 outputSegments.push_back(segment);
98 outputSegments.push_back(segment);
99 outputSegments.back()->setReverseFlag();
100 outputSegments.push_back(segment.reversed());
101 outputSegments.back()->setReverseFlag();
106 outputSegments.reserve(inputSegments.size());
111 outputSegments.push_back(segment.reversed());
113 outputSegments.push_back(segment);
117 outputSegments.reserve(inputSegments.size());
122 outputSegments.push_back(segment.reversed());
124 outputSegments.push_back(segment);
129 B2WARNING(
"Unexpected 'SegmentOrientation' parameter of segment finder module : '" <<
131 "'. No segments are put out.");