8#include <tracking/trackFindingCDC/filters/facet/BendFacetVarSet.h>
10#include <tracking/trackFindingCDC/eventdata/hits/CDCFacet.h>
13using namespace TrackFindingCDC;
17 if (not ptrFacet)
return false;
25 const double startDriftLengthSigma =
sqrt(startDriftLengthVar);
26 const double startWeight = 1.0 / startDriftLengthVar;
30 const double middleDriftLengthSigma =
sqrt(middleDriftLengthVar);
31 const double middleWeight = 1.0 / middleDriftLengthVar;
35 const double endDriftLengthSigma =
sqrt(endDriftLengthVar);
36 const double endWeight = 1.0 / endDriftLengthVar;
38 const double sumWeight = startWeight + middleWeight + endWeight;
48 const double startOptimalStep = startDistance * startWeight / sumWeight;
49 const double middleOptimalStep = middleDistance * middleWeight / sumWeight;
50 const double endOptimalStep = endDistance * endWeight / sumWeight;
52 const double startChi2 = startDistance * (startDistance - startOptimalStep) * startWeight;
53 const double middleChi2 = middleDistance * (middleDistance - middleOptimalStep) * middleWeight;
54 const double endChi2 = endDistance * (endDistance - endOptimalStep) * endWeight;
60 const double startToMiddleLength = startToMiddleTangentialVector.
norm();
61 const double startToEndLength = startToEndTangentialVector.
norm();
62 const double middleToEndLength = middleToEndTangentialVector.
norm();
64 const double startPhi = startToMiddleTangentialVector.angleWith(startToEndTangentialVector);
65 const double middlePhi = startToMiddleTangentialVector.angleWith(middleToEndTangentialVector);
66 const double endPhi = startToEndTangentialVector.
angleWith(middleToEndTangentialVector);
68 const double startToMiddleSigmaPhi = startDriftLengthSigma / startToMiddleLength;
69 const double startToEndSigmaPhi = startDriftLengthSigma / startToEndLength;
71 const double middleToStartSigmaPhi = middleDriftLengthSigma / startToMiddleLength;
72 const double middleToEndSigmaPhi = middleDriftLengthSigma / middleToEndLength;
74 const double endToStartSigmaPhi = endDriftLengthSigma / startToEndLength;
75 const double endToMiddleSigmaPhi = endDriftLengthSigma / middleToEndLength;
77 const double startPhiSigma = hypot3(startToEndSigmaPhi - startToMiddleSigmaPhi,
78 middleToStartSigmaPhi,
81 const double middlePhiSigma = hypot3(startToMiddleSigmaPhi,
82 middleToStartSigmaPhi + middleToEndSigmaPhi,
85 const double endPhiSigma = hypot3(startToEndSigmaPhi,
87 endToStartSigmaPhi - endToMiddleSigmaPhi);
89 const double startPhiPull = startPhi / startPhiSigma;
90 const double middlePhiPull = middlePhi / middlePhiSigma;
91 const double endPhiPull = endPhi / endPhiSigma;
93 const double curv = 2 * middlePhi / startToEndLength;
94 const double curvSigma = 2 * middlePhiSigma / startToEndLength;
95 const double curvPull = middlePhiPull / startToEndLength;
97 var<
named(
"start_phi")>() = startPhi;
98 var<
named(
"start_phi_sigma")>() = startPhiSigma;
99 var<
named(
"start_phi_pull")>() = startPhiPull;
100 var<
named(
"start_d")>() = startDistance;
101 var<
named(
"start_chi2")>() = startChi2;
103 var<
named(
"middle_phi")>() = middlePhi;
104 var<
named(
"middle_phi_sigma")>() = middlePhiSigma;
105 var<
named(
"middle_phi_pull")>() = middlePhiPull;
106 var<
named(
"middle_d")>() = middleDistance;
107 var<
named(
"middle_chi2")>() = middleChi2;
110 var<
named(
"end_phi_sigma")>() = endPhiSigma;
111 var<
named(
"end_phi_pull")>() = endPhiPull;
112 var<
named(
"end_d")>() = endDistance;
115 var<
named(
"s")>() = startToEndLength;
118 var<
named(
"curv_sigma")>() = curvSigma;
119 var<
named(
"curv_pull")>() = curvPull;
bool extract(const CDCFacet *ptrFacet) final
Generate and assign the contained variables.
Class representing a triple of neighboring oriented wire with additional trajectory information.
void adjustFitLine() const
Adjusts the contained fit line to touch such that it touches the first and third hit.
ParameterLine2D getStartToEndLine() const
Getter for the tangential line from the first to the third hit.
ParameterLine2D getStartToMiddleLine() const
Getter for the tangential line from the first to the second hit.
ParameterLine2D getMiddleToEndLine() const
Getter for the tangential line from the second to the third hit.
CDCRLWireHit & getStartRLWireHit()
Getter for the first oriented wire hit.
CDCRLWireHit & getEndRLWireHit()
Getter for the third oriented wire hit.
CDCRLWireHit & getMiddleRLWireHit()
Getter for the second oriented wire hit.
Class representing an oriented hit wire including a hypotheses whether the causing track passes left ...
double getRefDriftLengthVariance() const
Getter for the variance of the drift length at the reference position of the wire.
double getSignedRefDriftLength() const
Getter for the drift length at the reference position of the wire.
const Vector2D & getRefPos2D() const
The two dimensional reference position of the underlying wire.
A line with a support point and tangential vector.
double distance(const Vector2D &point) const
Gives the signed distance of a point to the line.
const Vector2D & tangential() const
Gives the tangential vector of the line.
static constexpr int named(const char *name)
Getter for the index from the name.
Float_t & var()
Reference getter for the value of the ith variable. Static version.
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.
double norm() const
Calculates the length of the vector.
double sqrt(double a)
sqrt for double
Abstract base class for different kinds of events.