Belle II Software  release-06-01-15
KLMMuidLikelihoodVariables.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 /* KLM headers. */
10 #include <klm/dataobjects/KLMMuidLikelihood.h>
11 
12 /* Belle 2 headers. */
13 #include <analysis/dataobjects/Particle.h>
14 #include <analysis/VariableManager/Manager.h>
15 #include <mdst/dataobjects/Track.h>
16 
17 using namespace std;
18 
19 namespace Belle2 {
24  namespace Variable {
25 
27  KLMMuidLikelihood* getMuid(const Particle* particle)
28  {
29  const Track* track = particle->getTrack();
30  if (!track)
31  return nullptr;
32  return track->getRelatedTo<KLMMuidLikelihood>();
33  }
34 
36  double muidMuonProbability(const Particle* particle)
37  {
38  KLMMuidLikelihood* muid = getMuid(particle);
39  if (!muid)
40  return std::numeric_limits<double>::quiet_NaN();
41  return muid->getMuonPDFValue();
42  }
43 
45  double muidPionProbability(const Particle* particle)
46  {
47  KLMMuidLikelihood* muid = getMuid(particle);
48  if (!muid)
49  return std::numeric_limits<double>::quiet_NaN();
50  return muid->getPionPDFValue();
51  }
52 
54  double muidKaonProbability(const Particle* particle)
55  {
56  KLMMuidLikelihood* muid = getMuid(particle);
57  if (!muid)
58  return std::numeric_limits<double>::quiet_NaN();
59  return muid->getKaonPDFValue();
60  }
61 
63  double muidElectronProbability(const Particle* particle)
64  {
65  KLMMuidLikelihood* muid = getMuid(particle);
66  if (!muid)
67  return std::numeric_limits<double>::quiet_NaN();
68  return muid->getElectronPDFValue();
69  }
70 
72  double muidProtonProbability(const Particle* particle)
73  {
74  KLMMuidLikelihood* muid = getMuid(particle);
75  if (!muid)
76  return std::numeric_limits<double>::quiet_NaN();
77  return muid->getProtonPDFValue();
78  }
79 
81  double muidDeuteronProbability(const Particle* particle)
82  {
83  KLMMuidLikelihood* muid = getMuid(particle);
84  if (!muid)
85  return std::numeric_limits<double>::quiet_NaN();
86  return muid->getDeuteronPDFValue();
87  }
88 
90  double muidMuonLogLikelihood(const Particle* particle)
91  {
92  KLMMuidLikelihood* muid = getMuid(particle);
93  if (!muid)
94  return std::numeric_limits<double>::quiet_NaN();
95  return muid->getLogL_mu();
96  }
97 
99  double muidPionLogLikelihood(const Particle* particle)
100  {
101  KLMMuidLikelihood* muid = getMuid(particle);
102  if (!muid)
103  return std::numeric_limits<double>::quiet_NaN();
104  return muid->getLogL_pi();
105  }
106 
108  double muidKaonLogLikelihood(const Particle* particle)
109  {
110  KLMMuidLikelihood* muid = getMuid(particle);
111  if (!muid)
112  return std::numeric_limits<double>::quiet_NaN();
113  return muid->getLogL_K();
114  }
115 
117  double muidElectronLogLikelihood(const Particle* particle)
118  {
119  KLMMuidLikelihood* muid = getMuid(particle);
120  if (!muid)
121  return std::numeric_limits<double>::quiet_NaN();
122  return muid->getLogL_e();
123  }
124 
126  double muidProtonLogLikelihood(const Particle* particle)
127  {
128  KLMMuidLikelihood* muid = getMuid(particle);
129  if (!muid)
130  return std::numeric_limits<double>::quiet_NaN();
131  return muid->getLogL_p();
132  }
133 
135  double muidDeuteronLogLikelihood(const Particle* particle)
136  {
137  KLMMuidLikelihood* muid = getMuid(particle);
138  if (!muid)
139  return std::numeric_limits<double>::quiet_NaN();
140  return muid->getLogL_d();
141  }
142 
144  double muidOutcomeExtTrack(const Particle* particle)
145  {
146  KLMMuidLikelihood* muid = getMuid(particle);
147  if (!muid)
148  return std::numeric_limits<double>::quiet_NaN();
149  return muid->getOutcome();
150  }
151 
153  double muidChiSquared(const Particle* particle)
154  {
155  KLMMuidLikelihood* muid = getMuid(particle);
156  if (!muid)
157  return std::numeric_limits<double>::quiet_NaN();
158  return muid->getChiSquared();
159  }
160 
162  double muidDegreesOfFreedom(const Particle* particle)
163  {
164  KLMMuidLikelihood* muid = getMuid(particle);
165  if (!muid)
166  return std::numeric_limits<double>::quiet_NaN();
167  return muid->getDegreesOfFreedom();
168  }
169 
171  double muidEndcapExtLayer(const Particle* particle)
172  {
173  KLMMuidLikelihood* muid = getMuid(particle);
174  if (!muid)
175  return std::numeric_limits<double>::quiet_NaN();
176  return muid->getEndcapExtLayer();
177  }
178 
180  double muidBarrelExtLayer(const Particle* particle)
181  {
182  KLMMuidLikelihood* muid = getMuid(particle);
183  if (!muid)
184  return std::numeric_limits<double>::quiet_NaN();
185  return muid->getBarrelExtLayer();
186  }
187 
189  double muidExtLayer(const Particle* particle)
190  {
191  KLMMuidLikelihood* muid = getMuid(particle);
192  if (!muid)
193  return std::numeric_limits<double>::quiet_NaN();
194  return muid->getExtLayer();
195  }
196 
198  double muidEndcapHitLayer(const Particle* particle)
199  {
200  KLMMuidLikelihood* muid = getMuid(particle);
201  if (!muid)
202  return std::numeric_limits<double>::quiet_NaN();
203  return muid->getEndcapHitLayer();
204  }
205 
207  double muidBarrelHitLayer(const Particle* particle)
208  {
209  KLMMuidLikelihood* muid = getMuid(particle);
210  if (!muid)
211  return std::numeric_limits<double>::quiet_NaN();
212  return muid->getBarrelHitLayer();
213  }
214 
216  double muidHitLayer(const Particle* particle)
217  {
218  KLMMuidLikelihood* muid = getMuid(particle);
219  if (!muid)
220  return std::numeric_limits<double>::quiet_NaN();
221  return muid->getHitLayer();
222  }
223 
225  double muidExtLayerPattern(const Particle* particle)
226  {
227  KLMMuidLikelihood* muid = getMuid(particle);
228  if (!muid)
229  return std::numeric_limits<double>::quiet_NaN();
230  return muid->getExtLayerPattern();
231  }
232 
234  double muidHitLayerPattern(const Particle* particle)
235  {
236  KLMMuidLikelihood* muid = getMuid(particle);
237  if (!muid)
238  return std::numeric_limits<double>::quiet_NaN();
239  return muid->getHitLayerPattern();
240  }
241 
243  double muidTotalBarrelHits(const Particle* particle)
244  {
245  KLMMuidLikelihood* muid = getMuid(particle);
246  if (!muid)
247  return std::numeric_limits<double>::quiet_NaN();
248  return muid->getTotalBarrelHits();
249  }
250 
252  double muidTotalEndcapHits(const Particle* particle)
253  {
254  KLMMuidLikelihood* muid = getMuid(particle);
255  if (!muid)
256  return std::numeric_limits<double>::quiet_NaN();
257  return muid->getTotalEndcapHits();
258  }
259 
261  double muidTotalHits(const Particle* particle)
262  {
263  return muidTotalBarrelHits(particle) + muidTotalEndcapHits(particle);
264  }
265 
266  VARIABLE_GROUP("KLMMuidLikelihood calibration");
267  REGISTER_VARIABLE("muidMuonProbability", muidMuonProbability,
268  "[Calibration] Returns the muon probability stored in the KLMMuidLikelihood dataobject");
269  REGISTER_VARIABLE("muidPionProbability", muidPionProbability,
270  "[Calibration] Returns the pion probability stored in the KLMMuidLikelihood dataobject");
271  REGISTER_VARIABLE("muidKaonProbability", muidKaonProbability,
272  "[Calibration] Returns the kaon probability stored in the KLMMuidLikelihood dataobject");
273  REGISTER_VARIABLE("muidElectronProbability", muidElectronProbability,
274  "[Calibration] Returns the electron probability stored in the KLMMuidLikelihood dataobject");
275  REGISTER_VARIABLE("muidProtonProbability", muidProtonProbability,
276  "[Calibration] Returns the proton probability stored in the KLMMuidLikelihood dataobject");
277  REGISTER_VARIABLE("muidDeuteronProbability", muidDeuteronProbability,
278  "[Calibration] Returns the deuteron probability stored in the KLMMuidLikelihood dataobject");
279  REGISTER_VARIABLE("muidMuonLogLikelihood", muidMuonLogLikelihood,
280  "[Calibration] Returns the muon log-likelihood stored in the KLMMuidLikelihood dataobject");
281  REGISTER_VARIABLE("muidPionLogLikelihood", muidPionLogLikelihood,
282  "[Calibration] Returns the pion log-likelihood stored in the KLMMuidLikelihood dataobject");
283  REGISTER_VARIABLE("muidKaonLogLikelihood", muidKaonLogLikelihood,
284  "[Calibration] Returns the kaon log-likelihood stored in the KLMMuidLikelihood dataobject");
285  REGISTER_VARIABLE("muidElectronLogLikelihood", muidElectronLogLikelihood,
286  "[Calibration] Returns the electron log-likelihood stored in the KLMMuidLikelihood dataobject");
287  REGISTER_VARIABLE("muidProtonLogLikelihood", muidProtonLogLikelihood,
288  "[Calibration] Returns the proton log-likelihood stored in the KLMMuidLikelihood dataobject");
289  REGISTER_VARIABLE("muidDeuteronLogLikelihood", muidDeuteronLogLikelihood,
290  "[Calibration] Returns the deuteron log-likelihood stored in the KLMMuidLikelihood dataobject");
291  REGISTER_VARIABLE("muidOutcomeExtTrack", muidOutcomeExtTrack,
292  "[Calibration] Returns outcome of muon extrapolation (see MuidElementNumbers for the complete list of the outcome values)");
293  REGISTER_VARIABLE("muidChiSquared", muidChiSquared,
294  "[Calibration] Returns chi-squared for this extrapolation");
295  REGISTER_VARIABLE("muidDegreesOfFreedom", muidDegreesOfFreedom,
296  "[Calibration] Returns number of degrees of freedom in chi-squared calculation");
297  REGISTER_VARIABLE("muidEndcapExtLayer", muidEndcapExtLayer,
298  "[Calibration] Returns outermost EKLM layer crossed by track during extrapolation");
299  REGISTER_VARIABLE("muidBarrelExtLayer", muidBarrelExtLayer,
300  "[Calibration] Returns outermost BKLM layer crossed by track during extrapolation");
301  REGISTER_VARIABLE("muidExtLayer", muidExtLayer,
302  "[Calibration] Returns outermost BKLM or EKLM layer crossed by track during extrapolation");
303  REGISTER_VARIABLE("muidEndcapHitLayer", muidEndcapHitLayer, "[Calibration] Returns outermost EKLM layer with a matching hit");
304  REGISTER_VARIABLE("muidBarrelHitLayer", muidBarrelHitLayer, "[Calibration] Returns outermost BKLM layer with a matching hit");
305  REGISTER_VARIABLE("muidHitLayer", muidHitLayer, "[Calibration] Return outermost BKLM or EKLM layer with a matching hit");
306  REGISTER_VARIABLE("muidExtLayerPattern", muidExtLayerPattern,
307  "[Calibration] Returns layer-crossing bit pattern during extrapolation");
308  REGISTER_VARIABLE("muidHitLayerPattern", muidHitLayerPattern, "[Calibration] Returns matching-hit bit pattern");
309  REGISTER_VARIABLE("muidTotalBarrelHits", muidTotalBarrelHits, "[Calibration] Returns total number of matching BKLM hits");
310  REGISTER_VARIABLE("muidTotalEndcapHits", muidTotalEndcapHits, "[Calibration] Returns total number of matching EKLM hits");
311  REGISTER_VARIABLE("muidTotalHits", muidTotalHits, "[Calibration] Returns total number of matching KLM hits");
312  }
314 }
Abstract base class for different kinds of events.