Belle II Software development
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 double SVD_p(const Particle* part)
55 {
56 const VXDDedxTrack* dedxTrack = getSVDDedxFromParticle(part);
57 if (!dedxTrack) {
58 return -999.0;
59 } else {
60 return dedxTrack->getMomentum();
61 }
62 }
63
64 double SVD_pTrue(const Particle* part)
65 {
66 const VXDDedxTrack* dedxTrack = getSVDDedxFromParticle(part);
67 if (!dedxTrack) {
68 return -999.0;
69 } else {
70 return dedxTrack->getTrueMomentum();
71 }
72 }
73
74 double SVDdedx(const Particle* part)
75 {
76 const VXDDedxTrack* dedxTrack = getSVDDedxFromParticle(part);
77 if (!dedxTrack) {
78 return -999.0;
79 } else {
80 return dedxTrack->getDedx(Const::EDetector::SVD);
81 }
82 }
83
84 double SVD_CosTheta(const Particle* part)
85 {
86 const VXDDedxTrack* dedxTrack = getSVDDedxFromParticle(part);
87 if (!dedxTrack) {
88 return -999.0;
89 } else {
90 return dedxTrack->getCosTheta();
91 }
92 }
93 double SVD_nHits(const Particle* part)
94 {
95 const VXDDedxTrack* dedxTrack = getSVDDedxFromParticle(part);
96 if (!dedxTrack) {
97 return -999.0;
98 } else {
99 return dedxTrack->size();
100 }
101 }
102
103 VARIABLE_GROUP("SVD dEdx");
104 //SVD variables
105 REGISTER_VARIABLE("SVDdEdx", SVDdedx, "SVD dE/dx truncated mean");
106 REGISTER_VARIABLE("pSVD", SVD_p, "momentum valid in the SVD");
107 REGISTER_VARIABLE("SVD_pTrue", SVD_pTrue, "true MC momentum valid in the SVD");
108 REGISTER_VARIABLE("SVD_CosTheta", SVD_CosTheta, "cos(theta) of the track valid in the SVD");
109 REGISTER_VARIABLE("SVD_nHits", SVD_nHits, "number of hits of the track valid in the SVD");
110
111 }
113}
Class to store reconstructed particles.
Definition: Particle.h:76
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.