Belle II Software  release-05-01-25
FitFacetVarSet.cc
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2015 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Oliver Frost *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 #include <tracking/trackFindingCDC/filters/facet/FitFacetVarSet.h>
11 
12 #include <tracking/trackFindingCDC/fitting/FacetFitter.h>
13 
14 #include <tracking/trackFindingCDC/eventdata/hits/CDCFacet.h>
15 #include <tracking/trackFindingCDC/eventdata/hits/CDCWireHit.h>
16 
17 #include <tracking/trackFindingCDC/numerics/Quadratic.h>
18 
19 using namespace Belle2;
20 using namespace TrackFindingCDC;
21 
22 bool FitFacetVarSet::extract(const CDCFacet* ptrFacet)
23 {
24  if (not ptrFacet) return false;
25  const CDCFacet& facet = *ptrFacet;
26 
27  const Vector2D startWirePos2D = facet.getStartWireHit().getRefPos2D();
28  const Vector2D middleWirePos2D = facet.getMiddleWireHit().getRefPos2D();
29  const Vector2D endWirePos2D = facet.getEndWireHit().getRefPos2D();
30 
31  // 0 step fit
32  {
33  constexpr const int nSteps = 0;
34  const double chi2_0 = FacetFitter::fit(facet, nSteps);
35  const UncertainParameterLine2D& fitLine = facet.getFitLine();
36  const double s = fitLine->lengthOnCurve(startWirePos2D, endWirePos2D);
37 
38  var<named("chi2_0")>() = chi2_0;
39  var<named("chi2_0_per_s")>() = chi2_0 / s;
40  var<named("fit_0_phi0")>() = fitLine->tangential().phi();
41  var<named("fit_0_phi0_sigma")>() = std::sqrt(fitLine.variance(ELineParameter::c_Phi0));
42  }
43 
44  // 1 step fit
45  {
46  constexpr const int nSteps = 1;
47  const double chi2_1 = FacetFitter::fit(facet, nSteps);
48  const UncertainParameterLine2D& fitLine = facet.getFitLine();
49  const double s = fitLine->lengthOnCurve(startWirePos2D, endWirePos2D);
50 
51  var<named("chi2_1")>() = chi2_1;
52  var<named("chi2_1_per_s")>() = chi2_1 / s;
53  var<named("fit_1_phi0")>() = fitLine->tangential().phi();
54  var<named("fit_1_phi0_sigma")>() = std::sqrt(fitLine.variance(ELineParameter::c_Phi0));
55  }
56 
57  // N step fit
58  {
59  const double chi2 = FacetFitter::fit(facet);
60  const UncertainParameterLine2D& fitLine = facet.getFitLine();
61  const double s = fitLine->lengthOnCurve(startWirePos2D, endWirePos2D);
62 
63  var<named("chi2")>() = chi2;
64  var<named("chi2_per_s")>() = chi2 / s;
65 
66  // Heuristic flattening functions. Factor is chosen by hand for some experimentation here.
67  constexpr const double erfWidth = 120.0;
68  constexpr const double tanhWidth = 1.64 * erfWidth;
69 
70  var<named("erf")>() = std::erf(chi2 / erfWidth);
71  var<named("tanh")>() = std::tanh(chi2 / tanhWidth);
72  var<named("fit_phi0")>() = fitLine->tangential().phi();
73  var<named("fit_phi0_sigma")>() = std::sqrt(fitLine.variance(ELineParameter::c_Phi0));
74 
75  const CDCRLWireHit& startRLWireHit = facet.getStartRLWireHit();
76  const CDCRLWireHit& middleRLWireHit = facet.getMiddleRLWireHit();
77  const CDCRLWireHit& endRLWireHit = facet.getEndRLWireHit();
78 
79  const double startL = startRLWireHit.getSignedRefDriftLength();
80  const double middleL = middleRLWireHit.getSignedRefDriftLength();
81  const double endL = endRLWireHit.getSignedRefDriftLength();
82 
83  const double startDistance = fitLine->distance(startWirePos2D) - startL;
84  const double middleDistance = fitLine->distance(middleWirePos2D) - middleL;
85  const double endDistance = fitLine->distance(endWirePos2D) - endL;
86 
87  var<named("start_distance")>() = startDistance;
88  var<named("middle_distance")>() = middleDistance;
89  var<named("end_distance")>() = endDistance;
90  var<named("d2")>() = square(startDistance) + square(middleDistance) + square(endDistance);
91  }
92  return true;
93 }
Belle2::TrackFindingCDC::Vector2D
A two dimensional vector which is equipped with functions for correct handeling of orientation relat...
Definition: Vector2D.h:37
Belle2::TrackFindingCDC::CDCRLWireHitTriple::getStartWireHit
const CDCWireHit & getStartWireHit() const
Getter for the hit wire of the first oriented wire hit.
Definition: CDCRLWireHitTriple.h:212
Belle2::TrackFindingCDC::CDCWireHit::getRefPos2D
const Vector2D & getRefPos2D() const
The two dimensional reference position (z=0) of the underlying wire.
Definition: CDCWireHit.cc:214
Belle2::TrackFindingCDC::FacetFitter::fit
static double fit(const CDCFacet &facet, int nSteps=100)
Fits a proper line to facet and returns the chi2.
Belle2::TrackFindingCDC::CDCRLWireHit::getSignedRefDriftLength
double getSignedRefDriftLength() const
Getter for the drift length at the reference position of the wire.
Definition: CDCRLWireHit.h:226
Belle2::TrackFindingCDC::CDCRLWireHitTriple::getEndWireHit
const CDCWireHit & getEndWireHit() const
Getter for the hit wire of the third oriented wire hit.
Definition: CDCRLWireHitTriple.h:224
Belle2::TrackFindingCDC::Vector2D::phi
double phi() const
Gives the azimuth angle being the angle to the x axes ( range -M_PI to M_PI )
Definition: Vector2D.h:583
Belle2::TrackFindingCDC::CDCRLWireHitTriple::getMiddleWireHit
const CDCWireHit & getMiddleWireHit() const
Getter for the hit wire of the second oriented wire hit.
Definition: CDCRLWireHitTriple.h:218
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::TrackFindingCDC::CDCRLWireHit
Class representing an oriented hit wire including a hypotheses whether the causing track passes left ...
Definition: CDCRLWireHit.h:51
Belle2::TrackFindingCDC::ParameterLine2D::lengthOnCurve
double lengthOnCurve(const Vector2D &from, const Vector2D &to) const
Denotes the length on the line between the two points.
Definition: ParameterLine2D.h:283
Belle2::TrackFindingCDC::CDCRLWireHitTriple::getMiddleRLWireHit
CDCRLWireHit & getMiddleRLWireHit()
Getter for the second oriented wire hit.
Definition: CDCRLWireHitTriple.h:243
Belle2::TrackFindingCDC::CDCFacet
Class representing a triple of neighboring oriented wire with additional trajectory information.
Definition: CDCFacet.h:42
Belle2::TrackFindingCDC::ParameterLine2D::distance
double distance(const Vector2D &point) const
Gives the signed distance of a point to the line.
Definition: ParameterLine2D.h:211
Belle2::TrackFindingCDC::ParameterLine2D::tangential
const Vector2D & tangential() const
Gives the tangential vector of the line.
Definition: ParameterLine2D.h:135
Belle2::TrackFindingCDC::UncertainParameterLine2D::variance
double variance(const ELineParameter &i) const
Getter for individual diagonal elements of the covariance matrix.
Definition: UncertainParameterLine2D.h:104
Belle2::TrackFindingCDC::CDCRLWireHitTriple::getEndRLWireHit
CDCRLWireHit & getEndRLWireHit()
Getter for the third oriented wire hit.
Definition: CDCRLWireHitTriple.h:249
Belle2::TrackFindingCDC::VarSet< FitFacetVarNames >::named
constexpr static int named(const char *name)
Getter for the index from the name.
Definition: VarSet.h:88
Belle2::TrackFindingCDC::VarSet< FitFacetVarNames >::var
Float_t & var()
Reference getter for the value of the ith variable. Static version.
Definition: VarSet.h:103
Belle2::TrackFindingCDC::UncertainParameterLine2D
A parameter line including including an line covariance matrix which is interpreted as located in the...
Definition: UncertainParameterLine2D.h:34
Belle2::TrackFindingCDC::FitFacetVarSet::extract
bool extract(const CDCFacet *ptrFacet) final
Generate and assign the contained variables.
Definition: FitFacetVarSet.cc:22
Belle2::TrackFindingCDC::CDCRLWireHitTriple::getStartRLWireHit
CDCRLWireHit & getStartRLWireHit()
Getter for the first oriented wire hit.
Definition: CDCRLWireHitTriple.h:237
Belle2::TrackFindingCDC::CDCFacet::getFitLine
const UncertainParameterLine2D & getFitLine() const
Getter for the contained line fit information.
Definition: CDCFacet.h:71