Main algorithm applying the adjustment of the orientation.
54{
57
58 outputSegments = inputSegments;
59
61 outputSegments.reserve(2 * inputSegments.size());
62 for (const CDCSegment2D& segment : inputSegments) {
63 outputSegments.push_back(segment);
64 if (segment->hasReverseFlag()) continue;
65 outputSegments.back()->setReverseFlag();
66 outputSegments.push_back(segment.reversed());
67 outputSegments.back()->setReverseFlag();
68 }
69
71
72
73 outputSegments.reserve(1.5 * inputSegments.size());
74 for (const CDCSegment2D& segment : inputSegments) {
75 if (segment->hasReverseFlag()) {
76 outputSegments.push_back(segment);
77 continue;
78 }
79 const CDCTrajectory2D& trajectory2D = segment.getTrajectory2D();
80 bool isFitted = trajectory2D.
isFitted();
81 bool isCurler = trajectory2D.
isCurler(1.1);
83
84 bool isLeaver = isFitted and (not isCurler) and isOriginer;
85 if (isLeaver) {
86
87 const CDCRecoHit2D& firstHit = segment.front();
88 const CDCRecoHit2D& lastHit = segment.back();
90 outputSegments.push_back(segment.reversed());
91 } else {
92 outputSegments.push_back(segment);
93 }
94 } else {
95
96 outputSegments.push_back(segment);
97 outputSegments.back()->setReverseFlag();
98 outputSegments.push_back(segment.reversed());
99 outputSegments.back()->setReverseFlag();
100 }
101 }
102
104 outputSegments.reserve(inputSegments.size());
105 for (const CDCSegment2D& segment : inputSegments) {
106 const CDCRecoHit2D& firstHit = segment.front();
107 const CDCRecoHit2D& lastHit = segment.back();
109 outputSegments.push_back(segment.reversed());
110 } else {
111 outputSegments.push_back(segment);
112 }
113 }
115 outputSegments.reserve(inputSegments.size());
116 for (const CDCSegment2D& segment : inputSegments) {
117 const CDCRecoHit2D& firstHit = segment.front();
118 const CDCRecoHit2D& lastHit = segment.back();
120 outputSegments.push_back(segment.reversed());
121 } else {
122 outputSegments.push_back(segment);
123 }
124 }
125
126 } else {
127 B2WARNING("Unexpected 'SegmentOrientation' parameter of segment finder module : '" <<
129 "'. No segments are put out.");
130 }
131}
Vector2D getRecoPos2D() const
Getter for the position in the reference plane.
bool isOriginer(double factor=1) const
Checks if the trajectory intersects with the inner radius of the CDC time the given tolerance factor.
bool isCurler(double factor=1) const
Checks if the trajectory leaves the outer radius of the CDC times the given tolerance factor.
bool isFitted() const
Checks if the circle is already set to a valid value.
std::string m_param_segmentOrientationString
Parameter: String that states the desired segment orientation.
EPreferredDirection m_segmentOrientation
Encoded desired segment orientation.
double cylindricalR() const
Gives the cylindrical radius of the vector. Same as norm()
double y() const
Getter for the y coordinate.