Belle II Software  release-05-02-19
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.
 
virtual std::vector< Named< Float_t * > > getNamedVariables (const std::string &prefix __attribute__((unused)))
 Getter for the named references to the individual variables Base implementaton returns empty vector. More...
 
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 __attribute__((unused)))
 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 BendFacetVarNames ::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 76 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 17 of file BendFacetVarSet.cc.

18 {
19  if (not ptrFacet) return false;
20  const CDCFacet& facet = *ptrFacet;
21 
23  facet.adjustFitLine();
24 
25  const CDCRLWireHit& startRLWirehit = facet.getStartRLWireHit();
26  const double startDriftLengthVar = startRLWirehit.getRefDriftLengthVariance();
27  const double startDriftLengthSigma = sqrt(startDriftLengthVar);
28  const double startWeight = 1.0 / startDriftLengthVar;
29 
30  const CDCRLWireHit& middleRLWirehit = facet.getMiddleRLWireHit();
31  const double middleDriftLengthVar = middleRLWirehit.getRefDriftLengthVariance();
32  const double middleDriftLengthSigma = sqrt(middleDriftLengthVar);
33  const double middleWeight = 1.0 / middleDriftLengthVar;
34 
35  const CDCRLWireHit& endRLWirehit = facet.getEndRLWireHit();
36  const double endDriftLengthVar = endRLWirehit.getRefDriftLengthVariance();
37  const double endDriftLengthSigma = sqrt(endDriftLengthVar);
38  const double endWeight = 1.0 / endDriftLengthVar;
39 
40  const double sumWeight = startWeight + middleWeight + endWeight;
41 
42  const ParameterLine2D& startToMiddleLine = facet.getStartToMiddleLine();
43  const ParameterLine2D& startToEndLine = facet.getStartToEndLine();
44  const ParameterLine2D& middleToEndLine = facet.getMiddleToEndLine();
45 
46  const double startDistance = middleToEndLine.distance(startRLWirehit.getRefPos2D()) - startRLWirehit.getSignedRefDriftLength();
47  const double middleDistance = startToEndLine.distance(middleRLWirehit.getRefPos2D()) - middleRLWirehit.getSignedRefDriftLength();
48  const double endDistance = startToMiddleLine.distance(endRLWirehit.getRefPos2D()) - endRLWirehit.getSignedRefDriftLength();
49 
50  const double startOptimalStep = startDistance * startWeight / sumWeight;
51  const double middleOptimalStep = middleDistance * middleWeight / sumWeight;
52  const double endOptimalStep = endDistance * endWeight / sumWeight;
53 
54  const double startChi2 = startDistance * (startDistance - startOptimalStep) * startWeight;
55  const double middleChi2 = middleDistance * (middleDistance - middleOptimalStep) * middleWeight;
56  const double endChi2 = endDistance * (endDistance - endOptimalStep) * endWeight;
57 
58  const Vector2D& startToMiddleTangentialVector = startToMiddleLine.tangential();
59  const Vector2D& startToEndTangentialVector = startToEndLine.tangential();
60  const Vector2D& middleToEndTangentialVector = middleToEndLine.tangential();
61 
62  const double startToMiddleLength = startToMiddleTangentialVector.norm();
63  const double startToEndLength = startToEndTangentialVector.norm();
64  const double middleToEndLength = middleToEndTangentialVector.norm();
65 
66  const double startPhi = startToMiddleTangentialVector.angleWith(startToEndTangentialVector);
67  const double middlePhi = startToMiddleTangentialVector.angleWith(middleToEndTangentialVector);
68  const double endPhi = startToEndTangentialVector.angleWith(middleToEndTangentialVector);
69 
70  const double startToMiddleSigmaPhi = startDriftLengthSigma / startToMiddleLength;
71  const double startToEndSigmaPhi = startDriftLengthSigma / startToEndLength;
72 
73  const double middleToStartSigmaPhi = middleDriftLengthSigma / startToMiddleLength;
74  const double middleToEndSigmaPhi = middleDriftLengthSigma / middleToEndLength;
75 
76  const double endToStartSigmaPhi = endDriftLengthSigma / startToEndLength;
77  const double endToMiddleSigmaPhi = endDriftLengthSigma / middleToEndLength;
78 
79  const double startPhiSigma = hypot3(startToEndSigmaPhi - startToMiddleSigmaPhi,
80  middleToStartSigmaPhi,
81  endToStartSigmaPhi);
82 
83  const double middlePhiSigma = hypot3(startToMiddleSigmaPhi,
84  middleToStartSigmaPhi + middleToEndSigmaPhi,
85  endToMiddleSigmaPhi);
86 
87  const double endPhiSigma = hypot3(startToEndSigmaPhi,
88  middleToEndSigmaPhi,
89  endToStartSigmaPhi - endToMiddleSigmaPhi);
90 
91  const double startPhiPull = startPhi / startPhiSigma;
92  const double middlePhiPull = middlePhi / middlePhiSigma;
93  const double endPhiPull = endPhi / endPhiSigma;
94 
95  const double curv = 2 * middlePhi / startToEndLength;
96  const double curvSigma = 2 * middlePhiSigma / startToEndLength;
97  const double curvPull = middlePhiPull / startToEndLength;
98 
99  var<named("start_phi")>() = startPhi;
100  var<named("start_phi_sigma")>() = startPhiSigma;
101  var<named("start_phi_pull")>() = startPhiPull;
102  var<named("start_d")>() = startDistance;
103  var<named("start_chi2")>() = startChi2;
104 
105  var<named("middle_phi")>() = middlePhi;
106  var<named("middle_phi_sigma")>() = middlePhiSigma;
107  var<named("middle_phi_pull")>() = middlePhiPull;
108  var<named("middle_d")>() = middleDistance;
109  var<named("middle_chi2")>() = middleChi2;
110 
111  var<named("end_phi")>() = endPhi;
112  var<named("end_phi_sigma")>() = endPhiSigma;
113  var<named("end_phi_pull")>() = endPhiPull;
114  var<named("end_d")>() = endDistance;
115  var<named("end_chi2")>() = endChi2;
116 
117  var<named("s")>() = startToEndLength;
118 
119  var<named("curv")>() = curv;
120  var<named("curv_sigma")>() = curvSigma;
121  var<named("curv_pull")>() = curvPull;
122 
123  return true;
124 }

◆ extract() [2/2]

virtual bool extract ( const Object *obj  __attribute__(unused))
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.

Definition at line 58 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< BendFacetVarNames ::Object >.

Definition at line 74 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 90 of file BaseVarSet.h.

◆ getNamedVariables()

virtual std::vector<Named<Float_t*> > getNamedVariables ( const std::string &prefix  __attribute__(unused))
inlinevirtualinherited

Getter for the named references to the individual variables Base implementaton returns empty vector.

Parameters
prefixName prefix to apply to all variable names.

Definition at line 74 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 88 of file VarSet.h.


The documentation for this class was generated from the following files:
Belle2::TrackFindingCDC::VarSet< BendFacetVarNames >::named
constexpr static int named(const char *name)
Getter for the index from the name.
Definition: VarSet.h:88
Belle2::TrackFindingCDC::VarSet< BendFacetVarNames >::var
Float_t & var()
Reference getter for the value of the ith variable. Static version.
Definition: VarSet.h:103