8#include <tracking/trackingUtilities/eventdata/tracks/CDCSegmentPair.h>
10#include <tracking/trackingUtilities/eventdata/segments/CDCSegment2D.h>
11#include <tracking/trackingUtilities/eventdata/hits/CDCRecoHit2D.h>
12#include <tracking/trackingUtilities/eventdata/trajectories/CDCTrajectory3D.h>
13#include <tracking/trackingUtilities/eventdata/trajectories/CDCTrajectory2D.h>
14#include <tracking/trackingUtilities/eventdata/trajectories/CDCTrajectorySZ.h>
16#include <cdc/topology/EStereoKind.h>
17#include <cdc/topology/ISuperLayer.h>
19#include <tracking/trackingUtilities/geometry/Vector2D.h>
21#include <tracking/trackingUtilities/ca/AutomatonCell.h>
23#include <tracking/trackingUtilities/numerics/EForwardBackward.h>
25#include <framework/logging/Logger.h>
32using namespace TrackingUtilities;
38 B2ASSERT(
"CDCSegmentPair initialized with nullptr as from segment", fromSegment);
39 B2ASSERT(
"CDCSegmentPair initialized with nullptr as to segment", toSegment);
49 B2ASSERT(
"CDCSegmentPair initialized with nullptr as from segment", fromSegment);
50 B2ASSERT(
"CDCSegmentPair initialized with nullptr as to segment", toSegment);
62 return getToSegment() ==
nullptr ? EStereoKind::c_Invalid
96 const bool toHits =
true;
104 const bool toHits =
true;
111 const bool fromHits =
true;
126 if (not ptrFromSegment) {
130 if (not ptrToSegment) {
137 if (fromSegment.empty() or toSegment.empty()) {
141 const CDCRecoHit2D& lastRecoHit_fromSegment = fromSegment.back();
142 const CDCRecoHit2D& firstRecoHit_toSegment = toSegment.front();
147 return lastPos2D_fromSegment.
angleWith(firstPos2D_toSegment);
155 if (not ptrFromSegment) {
159 if (not ptrToSegment) {
166 if (fromSegment.empty() or toSegment.empty()) {
170 const CDCRecoHit2D& firstRecoHit_fromSegment = fromSegment.front();
171 const CDCRecoHit2D& lastRecoHit_fromSegment = fromSegment.back();
173 const CDCRecoHit2D& firstRecoHit_toSegment = toSegment.front();
179 Vector2D firstToLast_fromSegment = lastPos2D_fromSegment - firstPos2D_fromSegment;
180 Vector2D firstToFirst = firstPos2D_toSegment - firstPos2D_fromSegment;
182 return firstToLast_fromSegment.
angleWith(firstToFirst);
190 if (not ptrFromSegment) {
194 if (not ptrToSegment) {
201 if (fromSegment.empty() or toSegment.empty()) {
205 const CDCRecoHit2D& lastRecoHit_fromSegment = fromSegment.back();
207 const CDCRecoHit2D& firstRecoHit_toSegment = toSegment.front();
208 const CDCRecoHit2D& lastRecoHit_toSegment = toSegment.back();
214 Vector2D firstToLast_toSegment = lastPos2D_toSegment - firstPos2D_toSegment;
215 Vector2D lastToLast = lastPos2D_toSegment - lastPos2D_fromSegment;
217 return firstToLast_toSegment.
angleWith(lastToLast);
225 if (not ptrFromSegment) {
229 if (not ptrToSegment) {
236 if (fromSegment.empty() or toSegment.empty()) {
240 const CDCRecoHit2D& firstRecoHit_fromSegment = fromSegment.front();
241 const CDCRecoHit2D& lastRecoHit_fromSegment = fromSegment.back();
243 const CDCRecoHit2D& firstRecoHit_toSegment = toSegment.front();
244 const CDCRecoHit2D& lastRecoHit_toSegment = toSegment.back();
252 Vector2D firstToLast_fromSegment = lastPos2D_fromSegment - firstPos2D_fromSegment;
253 Vector2D firstToLast_toSegment = lastPos2D_toSegment - firstPos2D_toSegment;
255 return firstToLast_fromSegment.
angleWith(firstToLast_toSegment);
263 if (fromIsCoaligned == EForwardBackward::c_Forward and
264 toIsCoaligned == EForwardBackward::c_Forward) {
265 return EForwardBackward::c_Forward;
266 }
else if (fromIsCoaligned == EForwardBackward::c_Backward and
267 toIsCoaligned == EForwardBackward::c_Backward) {
268 return EForwardBackward::c_Backward;
270 return EForwardBackward::c_Invalid;
void setMaskedFlag(bool setTo=true)
Sets the masked flag to the given value. Default value true.
void unsetMaskedFlag()
Resets the masked flag to false.
Class representing a two dimensional reconstructed hit in the central drift chamber.
Vector2D getRecoPos2D() const
Getter for the position in the reference plane.
A reconstructed sequence of two dimensional hits in one super layer.
double computeToIsAfterFromFitless() const
Indicator if the from segment lies before the to segment, build without using the trajectories,...
CDCTrajectory3D m_trajectory3D
Memory for the common three dimensional trajectory.
CDC::EStereoKind getToStereoKind() const
Getter for the stereo type of the second segment.
CDCTrajectory2D getTrajectory2D() const
Getter for the two dimensional projection of the common three dimensional trajectory.
const CDCSegment2D * m_toSegment
Reference to the to segment.
CDCSegmentPair()=default
Default constructor - for ROOT compatibility.
CDC::EStereoKind getFromStereoKind() const
Getter for the stereo type of the first segment.
const CDCSegment2D * getToSegment() const
Getter for the to segment.
AutomatonCell & getAutomatonCell() const
Mutable getter for the automaton cell.
void setAndForwardMaskedFlag() const
Sets the masked flag of the segment triple's automaton cell and of the three contained segments.
void unsetAndForwardMaskedFlag() const
Unsets the masked flag of the segment triple's automaton cell and of the three contained segments.
double computeFromIsBeforeToFitless() const
Indicator if the from segment lies before the to segment, build without using the trajectories,...
double computeDeltaPhiAtSuperLayerBound() const
Determines the angle between the last reconstructed position of the from segment and the first recons...
CDCTrajectorySZ getTrajectorySZ() const
Getter for the sz projection of the common three dimensional trajectory.
CDC::ISuperLayer getFromISuperLayer() const
Getter for the superlayer id of the from segment.
CDCTrajectory3D & getTrajectory3D() const
Getter for the three dimensional trajectory.
EForwardBackward isCoaligned(const CDCTrajectory2D &trajectory2D) const
Checks if the last entity in the vector lies greater or lower travel distance than the last entity.
CDC::ISuperLayer getToISuperLayer() const
Getter for the superlayer id of the to segment.
std::size_t size() const
Getter for the total number of hits in this segment pair.
void receiveMaskedFlag() const
If one of the contained segments is marked as masked this segment triple is set be masked as well.
const CDCSegment2D * m_fromSegment
Reference to the from segment.
const CDCSegment2D * getFromSegment() const
Getter for the from segment.
double computeIsCoalignedFitless() const
Indicator if the from segment and the to segment have roughly the same travel direction without using...
Particle trajectory as it is seen in xy projection represented as a circle.
EForwardBackward isForwardOrBackwardTo(const AHits &hits) const
Calculates if this trajectory and the hits are coaligned Returns:
Particle full three dimensional trajectory.
CDCTrajectory2D getTrajectory2D() const
Getter for the two dimensional trajectory.
CDCTrajectorySZ getTrajectorySZ() const
Getter for the sz trajectory.
Linear trajectory in sz space.
A two dimensional vector which is equipped with functions for correct handling of orientation relate...
double angleWith(const Vector2D &rhs) const
The angle between this and rhs.
EStereoKind
Type for the stereo property of the wire.
signed short ISuperLayer
The type of the layer and superlayer ids.
Abstract base class for different kinds of events.
static const ISuperLayer c_Invalid
Constant making an invalid superlayer id.