Belle II Software  release-08-01-10
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 
12 using namespace Belle2;
13 using namespace TrackFindingCDC;
14 
15 bool BendFacetVarSet::extract(const CDCFacet* ptrFacet)
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 & getEndRLWireHit()
Getter for the third oriented wire hit.
CDCRLWireHit & getMiddleRLWireHit()
Getter for the second oriented wire hit.
CDCRLWireHit & getStartRLWireHit()
Getter for the first oriented wire hit.
Class representing an oriented hit wire including a hypotheses whether the causing track passes left ...
Definition: CDCRLWireHit.h:41
double getRefDriftLengthVariance() const
Getter for the variance of the drift length at the reference position of the wire.
Definition: CDCRLWireHit.h:222
double getSignedRefDriftLength() const
Getter for the drift length at the reference position of the wire.
Definition: CDCRLWireHit.h:216
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.
constexpr static int named(const char *name)
Getter for the index from the name.
Definition: VarSet.h:78
Float_t & var()
Reference getter for the value of the ith variable. Static version.
Definition: VarSet.h:93
A two dimensional vector which is equipped with functions for correct handeling of orientation relat...
Definition: Vector2D.h:35
double angleWith(const Vector2D &rhs) const
The angle between this and rhs.
Definition: Vector2D.h:209
double norm() const
Calculates the length of the vector.
Definition: Vector2D.h:187
double sqrt(double a)
sqrt for double
Definition: beamHelpers.h:28
Abstract base class for different kinds of events.