Belle II Software development
BendFacetVarSet.cc
1/**************************************************************************
2 * basf2 (Belle II Analysis Software Framework) *
3 * Author: The Belle II Collaboration *
4 * *
5 * See git log for contributors and copyright holders. *
6 * This file is licensed under LGPL-3.0, see LICENSE.md. *
7 **************************************************************************/
8#include <tracking/trackFindingCDC/filters/facet/BendFacetVarSet.h>
9
10#include <tracking/trackFindingCDC/eventdata/hits/CDCFacet.h>
11
12using namespace Belle2;
13using namespace TrackFindingCDC;
14
16{
17 if (not ptrFacet) return false;
18 const CDCFacet& facet = *ptrFacet;
19
21 facet.adjustFitLine();
22
23 const CDCRLWireHit& startRLWirehit = facet.getStartRLWireHit();
24 const double startDriftLengthVar = startRLWirehit.getRefDriftLengthVariance();
25 const double startDriftLengthSigma = sqrt(startDriftLengthVar);
26 const double startWeight = 1.0 / startDriftLengthVar;
27
28 const CDCRLWireHit& middleRLWirehit = facet.getMiddleRLWireHit();
29 const double middleDriftLengthVar = middleRLWirehit.getRefDriftLengthVariance();
30 const double middleDriftLengthSigma = sqrt(middleDriftLengthVar);
31 const double middleWeight = 1.0 / middleDriftLengthVar;
32
33 const CDCRLWireHit& endRLWirehit = facet.getEndRLWireHit();
34 const double endDriftLengthVar = endRLWirehit.getRefDriftLengthVariance();
35 const double endDriftLengthSigma = sqrt(endDriftLengthVar);
36 const double endWeight = 1.0 / endDriftLengthVar;
37
38 const double sumWeight = startWeight + middleWeight + endWeight;
39
40 const ParameterLine2D& startToMiddleLine = facet.getStartToMiddleLine();
41 const ParameterLine2D& startToEndLine = facet.getStartToEndLine();
42 const ParameterLine2D& middleToEndLine = facet.getMiddleToEndLine();
43
44 const double startDistance = middleToEndLine.distance(startRLWirehit.getRefPos2D()) - startRLWirehit.getSignedRefDriftLength();
45 const double middleDistance = startToEndLine.distance(middleRLWirehit.getRefPos2D()) - middleRLWirehit.getSignedRefDriftLength();
46 const double endDistance = startToMiddleLine.distance(endRLWirehit.getRefPos2D()) - endRLWirehit.getSignedRefDriftLength();
47
48 const double startOptimalStep = startDistance * startWeight / sumWeight;
49 const double middleOptimalStep = middleDistance * middleWeight / sumWeight;
50 const double endOptimalStep = endDistance * endWeight / sumWeight;
51
52 const double startChi2 = startDistance * (startDistance - startOptimalStep) * startWeight;
53 const double middleChi2 = middleDistance * (middleDistance - middleOptimalStep) * middleWeight;
54 const double endChi2 = endDistance * (endDistance - endOptimalStep) * endWeight;
55
56 const Vector2D& startToMiddleTangentialVector = startToMiddleLine.tangential();
57 const Vector2D& startToEndTangentialVector = startToEndLine.tangential();
58 const Vector2D& middleToEndTangentialVector = middleToEndLine.tangential();
59
60 const double startToMiddleLength = startToMiddleTangentialVector.norm();
61 const double startToEndLength = startToEndTangentialVector.norm();
62 const double middleToEndLength = middleToEndTangentialVector.norm();
63
64 const double startPhi = startToMiddleTangentialVector.angleWith(startToEndTangentialVector);
65 const double middlePhi = startToMiddleTangentialVector.angleWith(middleToEndTangentialVector);
66 const double endPhi = startToEndTangentialVector.angleWith(middleToEndTangentialVector);
67
68 const double startToMiddleSigmaPhi = startDriftLengthSigma / startToMiddleLength;
69 const double startToEndSigmaPhi = startDriftLengthSigma / startToEndLength;
70
71 const double middleToStartSigmaPhi = middleDriftLengthSigma / startToMiddleLength;
72 const double middleToEndSigmaPhi = middleDriftLengthSigma / middleToEndLength;
73
74 const double endToStartSigmaPhi = endDriftLengthSigma / startToEndLength;
75 const double endToMiddleSigmaPhi = endDriftLengthSigma / middleToEndLength;
76
77 const double startPhiSigma = hypot3(startToEndSigmaPhi - startToMiddleSigmaPhi,
78 middleToStartSigmaPhi,
79 endToStartSigmaPhi);
80
81 const double middlePhiSigma = hypot3(startToMiddleSigmaPhi,
82 middleToStartSigmaPhi + middleToEndSigmaPhi,
83 endToMiddleSigmaPhi);
84
85 const double endPhiSigma = hypot3(startToEndSigmaPhi,
86 middleToEndSigmaPhi,
87 endToStartSigmaPhi - endToMiddleSigmaPhi);
88
89 const double startPhiPull = startPhi / startPhiSigma;
90 const double middlePhiPull = middlePhi / middlePhiSigma;
91 const double endPhiPull = endPhi / endPhiSigma;
92
93 const double curv = 2 * middlePhi / startToEndLength;
94 const double curvSigma = 2 * middlePhiSigma / startToEndLength;
95 const double curvPull = middlePhiPull / startToEndLength;
96
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;
102
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;
108
109 var<named("end_phi")>() = endPhi;
110 var<named("end_phi_sigma")>() = endPhiSigma;
111 var<named("end_phi_pull")>() = endPhiPull;
112 var<named("end_d")>() = endDistance;
113 var<named("end_chi2")>() = endChi2;
114
115 var<named("s")>() = startToEndLength;
116
117 var<named("curv")>() = curv;
118 var<named("curv_sigma")>() = curvSigma;
119 var<named("curv_pull")>() = curvPull;
120
121 return true;
122}
bool extract(const CDCFacet *ptrFacet) final
Generate and assign the contained variables.
Class representing a triple of neighboring oriented wire with additional trajectory information.
Definition CDCFacet.h:32
void adjustFitLine() const
Adjusts the contained fit line to touch such that it touches the first and third hit.
Definition CDCFacet.cc:61
ParameterLine2D getStartToEndLine() const
Getter for the tangential line from the first to the third hit.
Definition CDCFacet.cc:94
ParameterLine2D getStartToMiddleLine() const
Getter for the tangential line from the first to the second hit.
Definition CDCFacet.cc:86
ParameterLine2D getMiddleToEndLine() const
Getter for the tangential line from the second to the third hit.
Definition CDCFacet.cc:102
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)
Definition VarSet.h:78
A two dimensional vector which is equipped with functions for correct handling of orientation relate...
Definition Vector2D.h:32
double angleWith(const Vector2D &rhs) const
The angle between this and rhs.
Definition Vector2D.h:197
double norm() const
Calculates the length of the vector.
Definition Vector2D.h:175
double sqrt(double a)
sqrt for double
Definition beamHelpers.h:28
Abstract base class for different kinds of events.