Belle II Software  release-08-01-10
BendFacetVarSet Class Reference

Class to compute floating point variables from a facet which can be recorded as a flat TNtuple or serve as input to a MVA method. More...

#include <BendFacetVarSet.h>

Inheritance diagram for BendFacetVarSet:
Collaboration diagram for BendFacetVarSet:

Public Types

using Object = typename Super::Object
 Type from which variables should be extracted.
 

Public Member Functions

bool extract (const CDCFacet *ptrFacet) final
 Generate and assign the contained variables. More...
 
std::vector< Named< Float_t * > > getNamedVariables (const std::string &prefix) override
 Getter for the named references to the individual variables Base implementaton returns empty vector.
 
std::vector< Named< Float_t * > > getNamedVariables ()
 Getter for the named references to the individual variables.
 
MayBePtr< Float_t > find (const std::string &varName) override
 Pointer to the variable with the given name. More...
 
virtual bool extract (const Object *obj)
 Main method that extracts the variable values from the complex object. More...
 
bool extract (const Object &obj)
 Method for extraction from an object instead of a pointer.
 
std::map< std::string, Float_t > getNamedValues (const std::string &prefix) const
 Getter for a map of names to float values. More...
 
std::map< std::string, Float_t > getNamedValues () const
 Getter for a map of names to float values.
 
void initialize () override
 Receive and dispatch signal before the start of the event processing.
 
void beginRun () override
 Receive and dispatch signal for the beginning of a new run.
 
void beginEvent () override
 Receive and dispatch signal for the start of a new event.
 
void endRun () override
 Receive and dispatch signal for the end of the run.
 
void terminate () override
 Receive and dispatch Signal for termination of the event processing.
 

Protected Member Functions

Float_t get () const
 Getter for the value of the ith variable. Static version.
 
Float_t & var ()
 Reference getter for the value of the ith variable. Static version.
 
AssignFinite< Float_t > finitevar ()
 Reference getter for the value of the ith variable. Transforms non-finite values to finite value.
 
void addProcessingSignalListener (ProcessingSignalListener *psl)
 Register a processing signal listener to be notified.
 
int getNProcessingSignalListener ()
 Get the number of currently registered listeners.
 

Static Protected Member Functions

constexpr static int named (const char *name)
 Getter for the index from the name. More...
 

Private Types

using Super = BaseVarSet< typename AVarNames::Object >
 Type of the super class.
 

Private Attributes

FixedSizeNamedFloatTuple< BendFacetVarNamesm_variables
 Memory for nVars floating point values.
 
std::vector< ProcessingSignalListener * > m_subordinaryProcessingSignalListeners
 References to subordinary signal processing listener contained in this findlet.
 
bool m_initialized = false
 Flag to keep track whether initialization happend before.
 
bool m_terminated = false
 Flag to keep track whether termination happend before.
 
std::string m_initializedAs
 Name of the type during initialisation.
 

Static Private Attributes

static const size_t nVars
 Number of floating point values represented by this class.
 

Detailed Description

Class to compute floating point variables from a facet which can be recorded as a flat TNtuple or serve as input to a MVA method.

Definition at line 69 of file BendFacetVarSet.h.

Member Function Documentation

◆ extract() [1/2]

bool extract ( const CDCFacet ptrFacet)
final

Generate and assign the contained variables.

Fit tangents

Definition at line 15 of file BendFacetVarSet.cc.

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 }
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

◆ extract() [2/2]

virtual bool extract ( const Object obj)
inlinevirtualinherited

Main method that extracts the variable values from the complex object.

Returns indication whether the extraction could be completed successfully. Base implementation returns always true.

Parameters
objdummy object not used
Returns
: always true for the base implementation

Definition at line 50 of file BaseVarSet.h.

◆ find()

MayBePtr<Float_t> find ( const std::string &  varName)
inlineoverridevirtualinherited

Pointer to the variable with the given name.

Returns nullptr if not found.

Reimplemented from BaseVarSet< AVarNames::Object >.

Definition at line 64 of file VarSet.h.

◆ getNamedValues()

std::map<std::string, Float_t> getNamedValues ( const std::string &  prefix) const
inlineinherited

Getter for a map of names to float values.

Parameters
prefixName prefix to apply to all variable names.

Definition at line 83 of file BaseVarSet.h.

◆ named()

constexpr static int named ( const char *  name)
inlinestaticconstexprprotectedinherited

Getter for the index from the name.

Looks through the associated names and returns the right index if found Returns nVars (one after the last element) if not found.

Parameters
nameName of the sought variable
Returns
Index of the name, nVars if not found.

Definition at line 78 of file VarSet.h.


The documentation for this class was generated from the following files: