Belle II Software development
TrackingVariables.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
9/* Tracking headers. */
10#include <tracking/dataobjects/RecoTrack.h>
11
12#include <framework/dataobjects/EventT0.h>
13
14/* Basf2 headers. */
15#include <analysis/dataobjects/Particle.h>
16#include <analysis/VariableManager/Manager.h>
17#include <mdst/dataobjects/Track.h>
18
19namespace Belle2 {
24 namespace Variable {
25
26 //HELPERS
27
29 RecoTrack* getRecoTrack(const Particle* particle)
30 {
31 const Track* track = particle->getTrack();
32 if (!track)
33 return nullptr;
34 return track->getRelatedTo<RecoTrack>();
35 }
36
37
38 // CHARGE-RELATED VARIABLES
39 double seedCharge(const Particle* particle)
40 {
41 RecoTrack* recoTrack = getRecoTrack(particle);
42 if (!recoTrack)
43 return Const::doubleNaN;
44 return recoTrack->getChargeSeed();
45 }
46
48 double firstFlipQualityIndicator(const Particle* particle)
49 {
50 RecoTrack* recoTrack = getRecoTrack(particle);
51 if (!recoTrack)
52 return Const::doubleNaN;
53 return recoTrack->getFlipQualityIndicator();
54 }
56 double secondFlipQualityIndicator(const Particle* particle)
57 {
58 RecoTrack* recoTrack = getRecoTrack(particle);
59 if (!recoTrack)
60 return Const::doubleNaN;
61 return recoTrack->get2ndFlipQualityIndicator();
62 }
63
64
65 // TIME-RELATED VARIABLES
66
68 double seedTime(const Particle* particle)
69 {
70 RecoTrack* recoTrack = getRecoTrack(particle);
71 if (!recoTrack)
72 return Const::doubleNaN;
73 return recoTrack->getTimeSeed();
74 }
75
77 double outgoingArmNSVDHits(const Particle* particle)
78 {
79 RecoTrack* recoTrack = getRecoTrack(particle);
80 if (!recoTrack)
81 return Const::doubleNaN;
82 return recoTrack->getNSVDHitsOfOutgoingArm();
83 }
84
86 double outgoingArmTime(const Particle* particle)
87 {
88 RecoTrack* recoTrack = getRecoTrack(particle);
89 if (!recoTrack)
90 return Const::doubleNaN;
91 return recoTrack->getOutgoingArmTime();
92 }
93
95 double outgoingArmTimeError(const Particle* particle)
96 {
97 RecoTrack* recoTrack = getRecoTrack(particle);
98 if (!recoTrack)
99 return Const::doubleNaN;
100 return recoTrack->getOutgoingArmTimeError();
101 }
102
103
105 double ingoingArmNSVDHits(const Particle* particle)
106 {
107 RecoTrack* recoTrack = getRecoTrack(particle);
108 if (!recoTrack)
109 return Const::doubleNaN;
110 return recoTrack->getNSVDHitsOfIngoingArm();
111 }
112
114 double ingoingArmTime(const Particle* particle)
115 {
116 RecoTrack* recoTrack = getRecoTrack(particle);
117 if (!recoTrack)
118 return Const::doubleNaN;
119 return recoTrack->getIngoingArmTime();
120 }
121
123 double ingoingArmTimeError(const Particle* particle)
124 {
125 RecoTrack* recoTrack = getRecoTrack(particle);
126 if (!recoTrack)
127 return Const::doubleNaN;
128 return recoTrack->getIngoingArmTimeError();
129 }
130
132 double SVDEventT0(const Particle*)
133 {
134
135 StoreObjPtr<EventT0> m_evtT0;
136 if (m_evtT0.isValid()) {
137 const auto bestSVDHypo = m_evtT0->getBestSVDTemporaryEventT0();
138 if (bestSVDHypo) {
139 return bestSVDHypo->eventT0;
140 }
141 }
142 return Const::doubleNaN;
143 }
144
145
146 VARIABLE_GROUP("Tracking Validation");
147
148 REGISTER_VARIABLE("seedCharge", seedCharge,
149 "[RecoTrack] Returns the charge of the seed");
150
151 REGISTER_VARIABLE("firstFlipQualityIndicator", firstFlipQualityIndicator,
152 "[RecoTrack] Returns the quality indicator of the first MVA of the Flip&Refit")
153 REGISTER_VARIABLE("secondFlipQualityIndicator", secondFlipQualityIndicator,
154 "[RecoTrack] Returns the quality indicator of the second MVA of the Flip&Refit")
155
156 REGISTER_VARIABLE("seedTime", seedTime,
157 "[RecoTrack] Returns the time of the seed");
158 REGISTER_VARIABLE("outgoingArmNSVDHits", outgoingArmNSVDHits,
159 "[RecoTrack] Returns the number of SVD hits on the outgoing arm");
160 REGISTER_VARIABLE("outgoingArmTime", outgoingArmTime,
161 "[RecoTrack] Returns the outgoing arm time");
162 REGISTER_VARIABLE("outgoingArmTimeError", outgoingArmTimeError,
163 "[RecoTrack] Returns the outgoing arm time");
164 REGISTER_VARIABLE("ingoingArmNSVDHits", ingoingArmNSVDHits,
165 "[RecoTrack] Returns the number of SVD hits on the ingoing arm");
166 REGISTER_VARIABLE("ingoingArmTime", ingoingArmTime,
167 "[RecoTrack] Returns the ingoing arm time");
168 REGISTER_VARIABLE("ingoingArmTimeError", ingoingArmTimeError,
169 "[RecoTrack] Returns the ingoing arm time");
170 REGISTER_VARIABLE("SVDEventT0", SVDEventT0,
171 "[Event] Returns the SVDEventT0");
172 }
174}
static const double doubleNaN
quiet_NaN
Definition: Const.h:703
Abstract base class for different kinds of events.