8#include <tracking/trackFindingCDC/filters/segmentTriple/SimpleSegmentTripleFilter.h>
10#include <tracking/trackingUtilities/eventdata/tracks/CDCSegmentTriple.h>
11#include <tracking/trackingUtilities/eventdata/segments/CDCSegment3D.h>
12#include <tracking/trackingUtilities/eventdata/segments/CDCSegment2D.h>
14#include <tracking/trackingUtilities/eventdata/trajectories/CDCTrajectorySZ.h>
16#include <cdc/topology/CDCWire.h>
18#include <framework/logging/Logger.h>
22using namespace TrackFindingCDC;
23using namespace TrackingUtilities;
27 const CDCAxialSegment2D* ptrStartSegment = segmentTriple.
getStartSegment();
28 const CDCStereoSegment2D* ptrMiddleSegment = segmentTriple.
getMiddleSegment();
29 const CDCAxialSegment2D* ptrEndSegment = segmentTriple.
getEndSegment();
31 assert(ptrStartSegment);
32 assert(ptrMiddleSegment);
33 assert(ptrEndSegment);
35 const CDCAxialSegment2D& startSegment = *ptrStartSegment;
36 const CDCStereoSegment2D& middleSegment = *ptrMiddleSegment;
37 const CDCAxialSegment2D& endSegment = *ptrEndSegment;
39 const double toleranceFraction = 0.0;
61 if (not agrees)
return NAN;
72 if (fbInfo != EForwardBackward::c_Forward)
return NAN;
78 if (not reconstructedMiddle.back().isInCellZBounds(toleranceFraction)) {
79 B2DEBUG(25,
" RecoHit out of CDC");
89 Weight result = startSegment.size() + middleSegment.size() + endSegment.size();
Class representing a sense wire in the central drift chamber.
bool isInCellZBounds(const ROOT::Math::XYZVector &pos3D, const double factor=1) const
Checks whether the position is in the z bounds of the drift cell (scaled by the factor) surrounding t...
TrackingUtilities::CDCTrajectory2D fit(const CDCObservations2D &observations2D) const
Fits a collection of observation drift circles.
void update(const TrackingUtilities::CDCSegmentPair &segmentPair) const
Updates the trajectory of the axial stereo segment pair inplace.
const CDCSZFitter & getSZFitter() const
Returns the sz fitter instance that is used by this filter.
const CDCRiemannFitter & getFitter2D() const
Returns the xy fitter instance that is used by this filter.
TrackingUtilities::Weight operator()(const TrackingUtilities::CDCSegmentTriple &segmentTriple) final
Checks if a triple of axial, stereo and axial segments is a good combination to be stored.
Class representing a two dimensional reconstructed hit in the central drift chamber.
Vector3D reconstruct3D(const CDCTrajectory2D &trajectory2D, const double z=0) const
Reconstruct the three dimensional position (especially of stereo hits) by determining the z coordinat...
const CDC::CDCWire & getWire() const
Getter for the wire the reconstructed hit associated to.
static CDCRecoHit3D reconstruct(const CDCRecoHit2D &recoHit2D, const CDCTrajectory2D &trajectory2D)
Reconstructs the three dimensional hit from the two dimensional and the two dimensional trajectory.
A segment consisting of three dimensional reconstructed hits.
Class representing a triple of reconstructed segments in adjacent superlayer.
const CDCStereoSegment2D * getMiddleSegment() const
Getter for the middle stereo segment.
const CDCAxialSegment2D * getEndSegment() const
Getter for the end axial segment.
void setTrajectory3D(const CDCTrajectory3D &trajectory3D) const
Setter for the three dimensional helix trajectory.
const CDCAxialSegment2D * getStartSegment() const
Getter for the start axial segment.
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.
Linear trajectory in sz space.
HepGeom::Vector3D< double > Vector3D
3D Vector
Abstract base class for different kinds of events.