Belle II Software release-09-00-00
DedxVariables.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// needed to build variables here
10#include <reconstruction/variables/DedxVariables.h>
11#include <analysis/VariableManager/Manager.h>
12
13// framework - DataStore
14#include <framework/gearbox/Const.h>
15#include <framework/logging/Logger.h>
16#include <framework/utilities/Conversion.h>
17
18// dataobjects
19#include <analysis/dataobjects/Particle.h>
20#include <mdst/dataobjects/Track.h>
21#include <reconstruction/dataobjects/VXDDedxTrack.h>
22
23#include <TString.h>
24
25#include <cmath>
26
27namespace Belle2 {
37 {
38 const Track* track = particle->getTrack();
39 if (!track) {
40 return nullptr;
41 }
42
43 const VXDDedxTrack* dedxTrack = track->getRelatedTo<VXDDedxTrack>();
44 if (!dedxTrack) {
45 return nullptr;
46 }
47 return dedxTrack;
48 }
49
50
51 namespace Variable {
52
53 //Variables for SVD dedx
54
55 double SVD_p(const Particle* part)
56 {
57 const VXDDedxTrack* dedxTrack = getSVDDedxFromParticle(part);
58 if (!dedxTrack) {
59 return -999.0;
60 } else {
61 return dedxTrack->getMomentum();
62 }
63 }
64
65 double SVD_pTrue(const Particle* part)
66 {
67 const VXDDedxTrack* dedxTrack = getSVDDedxFromParticle(part);
68 if (!dedxTrack) {
69 return -999.0;
70 } else {
71 return dedxTrack->getTrueMomentum();
72 }
73 }
74
75 double SVDdedx(const Particle* part)
76 {
77 const VXDDedxTrack* dedxTrack = getSVDDedxFromParticle(part);
78 if (!dedxTrack) {
79 return -999.0;
80 } else {
81 return dedxTrack->getDedx(Const::EDetector::SVD);
82 }
83 }
84
85 double SVD_CosTheta(const Particle* part)
86 {
87 const VXDDedxTrack* dedxTrack = getSVDDedxFromParticle(part);
88 if (!dedxTrack) {
89 return -999.0;
90 } else {
91 return dedxTrack->getCosTheta();
92 }
93 }
94 double SVD_nHits(const Particle* part)
95 {
96 const VXDDedxTrack* dedxTrack = getSVDDedxFromParticle(part);
97 if (!dedxTrack) {
98 return -999.0;
99 } else {
100 return dedxTrack->size();
101 }
102 }
103
104 VARIABLE_GROUP("SVD dEdx");
105 //SVD variables
106 REGISTER_VARIABLE("SVDdEdx", SVDdedx, "SVD dE/dx truncated mean");
107 REGISTER_VARIABLE("pSVD", SVD_p, "momentum valid in the SVD");
108 REGISTER_VARIABLE("SVD_pTrue", SVD_pTrue, "true MC momentum valid in the SVD");
109 REGISTER_VARIABLE("SVD_CosTheta", SVD_CosTheta, "cos(theta) of the track valid in the SVD");
110 REGISTER_VARIABLE("SVD_nHits", SVD_nHits, "number of hits of the track valid in the SVD");
111
112 }
114}
Class to store reconstructed particles.
Definition: Particle.h:75
Class that bundles various TrackFitResults.
Definition: Track.h:25
Debug output for VXDDedxPID module.
Definition: VXDDedxTrack.h:29
VXDDedxTrack const * getSVDDedxFromParticle(Particle const *particle)
SVD dEdx value from particle.
Abstract base class for different kinds of events.