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;
44 B2ASSERT(
"CDCSegmentPair initialized with nullptr as from segment", fromSegment);
45 B2ASSERT(
"CDCSegmentPair initialized with nullptr as to segment", toSegment);
55 B2ASSERT(
"CDCSegmentPair initialized with nullptr as from segment", fromSegment);
56 B2ASSERT(
"CDCSegmentPair initialized with nullptr as to segment", toSegment);
68 return getToSegment() ==
nullptr ? EStereoKind::c_Invalid
102 const bool toHits =
true;
110 const bool toHits =
true;
117 const bool fromHits =
true;
132 if (not ptrFromSegment) {
136 if (not ptrToSegment) {
143 if (fromSegment.empty() or toSegment.empty()) {
147 const CDCRecoHit2D& lastRecoHit_fromSegment = fromSegment.back();
148 const CDCRecoHit2D& firstRecoHit_toSegment = toSegment.front();
153 return lastPos2D_fromSegment.
angleWith(firstPos2D_toSegment);
161 if (not ptrFromSegment) {
165 if (not ptrToSegment) {
172 if (fromSegment.empty() or toSegment.empty()) {
176 const CDCRecoHit2D& firstRecoHit_fromSegment = fromSegment.front();
177 const CDCRecoHit2D& lastRecoHit_fromSegment = fromSegment.back();
179 const CDCRecoHit2D& firstRecoHit_toSegment = toSegment.front();
185 Vector2D firstToLast_fromSegment = lastPos2D_fromSegment - firstPos2D_fromSegment;
186 Vector2D firstToFirst = firstPos2D_toSegment - firstPos2D_fromSegment;
188 return firstToLast_fromSegment.
angleWith(firstToFirst);
196 if (not ptrFromSegment) {
200 if (not ptrToSegment) {
207 if (fromSegment.empty() or toSegment.empty()) {
211 const CDCRecoHit2D& lastRecoHit_fromSegment = fromSegment.back();
213 const CDCRecoHit2D& firstRecoHit_toSegment = toSegment.front();
214 const CDCRecoHit2D& lastRecoHit_toSegment = toSegment.back();
220 Vector2D firstToLast_toSegment = lastPos2D_toSegment - firstPos2D_toSegment;
221 Vector2D lastToLast = lastPos2D_toSegment - lastPos2D_fromSegment;
223 return firstToLast_toSegment.
angleWith(lastToLast);
231 if (not ptrFromSegment) {
235 if (not ptrToSegment) {
242 if (fromSegment.empty() or toSegment.empty()) {
246 const CDCRecoHit2D& firstRecoHit_fromSegment = fromSegment.front();
247 const CDCRecoHit2D& lastRecoHit_fromSegment = fromSegment.back();
249 const CDCRecoHit2D& firstRecoHit_toSegment = toSegment.front();
250 const CDCRecoHit2D& lastRecoHit_toSegment = toSegment.back();
258 Vector2D firstToLast_fromSegment = lastPos2D_fromSegment - firstPos2D_fromSegment;
259 Vector2D firstToLast_toSegment = lastPos2D_toSegment - firstPos2D_toSegment;
261 return firstToLast_fromSegment.
angleWith(firstToLast_toSegment);
269 if (fromIsCoaligned == EForwardBackward::c_Forward and
270 toIsCoaligned == EForwardBackward::c_Forward) {
271 return EForwardBackward::c_Forward;
272 }
else if (fromIsCoaligned == EForwardBackward::c_Backward and
273 toIsCoaligned == EForwardBackward::c_Backward) {
274 return EForwardBackward::c_Backward;
276 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.
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.
CDCSegmentPair()
Default constructor - for ROOT compatibility.
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.