Belle II Software  release-05-02-19
RecoTrackExtractor.h
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2017 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Sebastian Racs *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 
11 #pragma once
12 
13 #include <tracking/trackFindingVXD/variableExtractors/VariableExtractor.h>
14 #include <tracking/dataobjects/RecoTrack.h>
15 #include <tracking/dataobjects/RecoHitInformation.h>
16 
17 #include <genfit/FitStatus.h>
18 #include <root/TVector3.h>
19 #include <limits>
20 
21 namespace Belle2 {
26  class RecoTrackExtractor : public VariableExtractor {
28  public:
29 
31  explicit RecoTrackExtractor(std::vector<Named<float*>>& variableSet, const std::string& prefix = ""):
32  VariableExtractor(), m_prefix(prefix)
33  {
34  addVariable(prefix + "seed_Charge", variableSet);
35 
36  addVariable(prefix + "seed_Pos_Pt", variableSet);
37  addVariable(prefix + "seed_Pos_Z", variableSet);
38  addVariable(prefix + "seed_Pos_Mag", variableSet);
39  addVariable(prefix + "seed_Pos_Theta", variableSet);
40  addVariable(prefix + "seed_Pos_Phi", variableSet);
41 
42  addVariable(prefix + "seed_Mom_Pt", variableSet);
43  addVariable(prefix + "seed_Mom_Z", variableSet);
44  addVariable(prefix + "seed_Mom_Mag", variableSet);
45  addVariable(prefix + "seed_Mom_Theta", variableSet);
46  addVariable(prefix + "seed_Mom_Phi", variableSet);
47 
48  addVariable(prefix + "seed_Time", variableSet);
49 
50  addVariable(prefix + "N_tracking_hits", variableSet);
51  addVariable(prefix + "N_CDC_hits", variableSet);
52  addVariable(prefix + "N_SVD_hits", variableSet);
53  addVariable(prefix + "N_PXD_hits", variableSet);
54 
55  addVariable(prefix + "Fit_Charge", variableSet);
56  addVariable(prefix + "Fit_Chi2", variableSet);
57  addVariable(prefix + "Fit_Ndf", variableSet);
58  addVariable(prefix + "Fit_NFailedPoints", variableSet);
59  addVariable(prefix + "Fit_PVal", variableSet);
60  addVariable(prefix + "Fit_Successful", variableSet);
61 
62  addVariable(prefix + "POCA_Pos_Pt", variableSet);
63  addVariable(prefix + "POCA_Pos_Z", variableSet);
64  addVariable(prefix + "POCA_Pos_Mag", variableSet);
65  addVariable(prefix + "POCA_Pos_Theta", variableSet);
66  addVariable(prefix + "POCA_Pos_Phi", variableSet);
67 
68  addVariable(prefix + "POCA_Mom_Pt", variableSet);
69  addVariable(prefix + "POCA_Mom_Z", variableSet);
70  addVariable(prefix + "POCA_Mom_Mag", variableSet);
71  addVariable(prefix + "POCA_Mom_Theta", variableSet);
72  addVariable(prefix + "POCA_Mom_Phi", variableSet);
73  }
74 
76  void extractVariables(const RecoTrack& recoTrack)
77  {
78  m_variables.at(m_prefix + "seed_Charge") = recoTrack.getChargeSeed();
79 
80  m_variables.at(m_prefix + "seed_Pos_Pt") = recoTrack.getPositionSeed().Pt();
81  m_variables.at(m_prefix + "seed_Pos_Z") = recoTrack.getPositionSeed().Z();
82  m_variables.at(m_prefix + "seed_Pos_Mag") = recoTrack.getPositionSeed().Mag();
83  m_variables.at(m_prefix + "seed_Pos_Theta") = recoTrack.getPositionSeed().Theta();
84  m_variables.at(m_prefix + "seed_Pos_Phi") = recoTrack.getPositionSeed().Phi();
85 
86  m_variables.at(m_prefix + "seed_Mom_Pt") = recoTrack.getMomentumSeed().Pt();
87  m_variables.at(m_prefix + "seed_Mom_Z") = recoTrack.getMomentumSeed().Z();
88  m_variables.at(m_prefix + "seed_Mom_Mag") = recoTrack.getMomentumSeed().Mag();
89  m_variables.at(m_prefix + "seed_Mom_Theta") = recoTrack.getMomentumSeed().Theta();
90  m_variables.at(m_prefix + "seed_Mom_Phi") = recoTrack.getMomentumSeed().Phi();
91 
92  m_variables.at(m_prefix + "seed_Time") = recoTrack.getTimeSeed();
93 
94  m_variables.at(m_prefix + "N_tracking_hits") = recoTrack.getNumberOfTrackingHits();
95  m_variables.at(m_prefix + "N_CDC_hits") = recoTrack.getNumberOfCDCHits();
96  m_variables.at(m_prefix + "N_SVD_hits") = recoTrack.getNumberOfSVDHits();
97  m_variables.at(m_prefix + "N_PXD_hits") = recoTrack.getNumberOfPXDHits();
98 
99  const genfit::FitStatus* rt_TrackFitStatus = recoTrack.getTrackFitStatus();
100  if (rt_TrackFitStatus) {
101  m_variables.at(m_prefix + "Fit_Charge") = rt_TrackFitStatus->getCharge();
102  m_variables.at(m_prefix + "Fit_Chi2") = rt_TrackFitStatus->getChi2();
103  m_variables.at(m_prefix + "Fit_Ndf") = rt_TrackFitStatus->getNdf();
104  m_variables.at(m_prefix + "Fit_NFailedPoints") = rt_TrackFitStatus->getNFailedPoints();
105  m_variables.at(m_prefix + "Fit_PVal") = rt_TrackFitStatus->getPVal();
106  } else {
107  m_variables.at(m_prefix + "Fit_Charge") = -std::numeric_limits<float>::max();
108  m_variables.at(m_prefix + "Fit_Chi2") = -1.;
109  m_variables.at(m_prefix + "Fit_Ndf") = -1.;
110  m_variables.at(m_prefix + "Fit_NFailedPoints") = -1.;
111  m_variables.at(m_prefix + "Fit_PVal") = -1.;
112  }
113 
114  m_variables.at(m_prefix + "Fit_Successful") = recoTrack.wasFitSuccessful();
115 
116  if (recoTrack.wasFitSuccessful()) {
117  TVector3 linePoint(0., 0., 0.);
118  TVector3 lineDirection(0., 0., 1.);
119 
121  try {
122  reco_sop = recoTrack.getMeasuredStateOnPlaneFromFirstHit();
123  reco_sop.extrapolateToLine(linePoint, lineDirection);
124  m_variables.at(m_prefix + "POCA_Pos_Pt") = reco_sop.getPos().Pt();
125  m_variables.at(m_prefix + "POCA_Pos_Z") = reco_sop.getPos().Z();
126  m_variables.at(m_prefix + "POCA_Pos_Mag") = reco_sop.getPos().Mag();
127  m_variables.at(m_prefix + "POCA_Pos_Theta") = reco_sop.getPos().Theta();
128  m_variables.at(m_prefix + "POCA_Pos_Phi") = reco_sop.getPos().Phi();
129 
130  m_variables.at(m_prefix + "POCA_Mom_Pt") = reco_sop.getMom().Pt();
131  m_variables.at(m_prefix + "POCA_Mom_Z") = reco_sop.getMom().Z();
132  m_variables.at(m_prefix + "POCA_Mom_Mag") = reco_sop.getMom().Mag();
133  m_variables.at(m_prefix + "POCA_Mom_Theta") = reco_sop.getMom().Theta();
134  m_variables.at(m_prefix + "POCA_Mom_Phi") = reco_sop.getMom().Phi();
135  } catch (genfit::Exception const& e) {
136  // extrapolation not possible, skip this track
137  B2WARNING("RecoTrackExtractor: recoTrack BeamPipe POCA extrapolation failed!\n"
138  << "-->" << e.what());
139  m_variables.at(m_prefix + "POCA_Pos_Pt") = -1;
140  m_variables.at(m_prefix + "POCA_Pos_Z") = -std::numeric_limits<float>::max();
141  m_variables.at(m_prefix + "POCA_Pos_Mag") = -1;
142  m_variables.at(m_prefix + "POCA_Pos_Theta") = -10;
143  m_variables.at(m_prefix + "POCA_Pos_Phi") = -10;
144 
145  m_variables.at(m_prefix + "POCA_Mom_Pt") = -1;
146  m_variables.at(m_prefix + "POCA_Mom_Z") = -std::numeric_limits<float>::max();
147  m_variables.at(m_prefix + "POCA_Mom_Mag") = -1;
148  m_variables.at(m_prefix + "POCA_Mom_Theta") = -10;
149  m_variables.at(m_prefix + "POCA_Mom_Phi") = -10;
150  }
151  } else {
152  m_variables.at(m_prefix + "POCA_Pos_Pt") = -1;
153  m_variables.at(m_prefix + "POCA_Pos_Z") = -std::numeric_limits<float>::max();
154  m_variables.at(m_prefix + "POCA_Pos_Mag") = -1;
155  m_variables.at(m_prefix + "POCA_Pos_Theta") = -10;
156  m_variables.at(m_prefix + "POCA_Pos_Phi") = -10;
157 
158  m_variables.at(m_prefix + "POCA_Mom_Pt") = -1;
159  m_variables.at(m_prefix + "POCA_Mom_Z") = -std::numeric_limits<float>::max();
160  m_variables.at(m_prefix + "POCA_Mom_Mag") = -1;
161  m_variables.at(m_prefix + "POCA_Mom_Theta") = -10;
162  m_variables.at(m_prefix + "POCA_Mom_Phi") = -10;
163  }
164 
165  }
166 
167  protected:
169  std::string m_prefix;
170  };
172 }
Belle2::RecoTrack::getNumberOfPXDHits
unsigned int getNumberOfPXDHits() const
Return the number of pxd hits.
Definition: RecoTrack.h:423
genfit::FitStatus::getCharge
double getCharge() const
Get the fitted charge.
Definition: FitStatus.h:118
genfit::Exception
Exception class for error handling in GENFIT (provides storage for diagnostic information)
Definition: Exception.h:48
Belle2::RecoTrack::getTrackFitStatus
const genfit::FitStatus * getTrackFitStatus(const genfit::AbsTrackRep *representation=nullptr) const
Return the track fit status for the given representation or for the cardinal one. You are not allowed...
Definition: RecoTrack.h:537
genfit::FitStatus::getChi2
double getChi2() const
Get chi^2 of the fit.
Definition: FitStatus.h:120
Belle2::RecoTrack::wasFitSuccessful
bool wasFitSuccessful(const genfit::AbsTrackRep *representation=nullptr) const
Returns true if the last fit with the given representation was successful.
Definition: RecoTrack.cc:326
prepareAsicCrosstalkSimDB.e
e
aux.
Definition: prepareAsicCrosstalkSimDB.py:53
genfit::MeasuredStateOnPlane
#StateOnPlane with additional covariance matrix.
Definition: MeasuredStateOnPlane.h:39
Belle2::RecoTrackExtractor::m_prefix
std::string m_prefix
prefix for RecoTrack extracted variables
Definition: RecoTrackExtractor.h:177
Belle2::RecoTrack::getMeasuredStateOnPlaneFromFirstHit
const genfit::MeasuredStateOnPlane & getMeasuredStateOnPlaneFromFirstHit(const genfit::AbsTrackRep *representation=nullptr) const
Return genfit's MeasuredStateOnPlane for the first hit in a fit useful for extrapolation of measureme...
Definition: RecoTrack.cc:580
Belle2::RecoTrack::getNumberOfSVDHits
unsigned int getNumberOfSVDHits() const
Return the number of svd hits.
Definition: RecoTrack.h:420
Belle2::RecoTrack::getNumberOfTrackingHits
unsigned int getNumberOfTrackingHits() const
Return the number of cdc + svd + pxd hits.
Definition: RecoTrack.h:439
Belle2::RecoTrack::getTimeSeed
double getTimeSeed() const
Return the time seed stored in the reco track. ATTENTION: This is not the fitted time.
Definition: RecoTrack.h:500
Belle2::RecoTrack
This is the Reconstruction Event-Data Model Track.
Definition: RecoTrack.h:78
genfit::FitStatus::getPVal
virtual double getPVal() const
Get the p value of the fit.
Definition: FitStatus.h:128
Belle2::RecoTrack::getPositionSeed
TVector3 getPositionSeed() const
Return the position seed stored in the reco track. ATTENTION: This is not the fitted position.
Definition: RecoTrack.h:477
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::VariableExtractor::m_variables
std::unordered_map< std::string, float > m_variables
unordered_map to associate float value with a string name
Definition: VariableExtractor.h:45
Belle2::RecoTrackExtractor::extractVariables
void extractVariables(const RecoTrack &recoTrack)
extract the actual variables and write into a variable set
Definition: RecoTrackExtractor.h:84
genfit::FitStatus::getNdf
double getNdf() const
Get the degrees of freedom of the fit.
Definition: FitStatus.h:122
Belle2::RecoTrack::getNumberOfCDCHits
unsigned int getNumberOfCDCHits() const
Return the number of cdc hits.
Definition: RecoTrack.h:417
Belle2::RecoTrack::getMomentumSeed
TVector3 getMomentumSeed() const
Return the momentum seed stored in the reco track. ATTENTION: This is not the fitted momentum.
Definition: RecoTrack.h:484
Belle2::RecoTrack::getChargeSeed
short int getChargeSeed() const
Return the charge seed stored in the reco track. ATTENTION: This is not the fitted charge.
Definition: RecoTrack.h:497
genfit::FitStatus
Class where important numbers and properties of a fit can be stored.
Definition: FitStatus.h:80
Belle2::VariableExtractor::addVariable
void addVariable(const std::string &identifier, std::vector< Named< float * >> &variables)
add a variable to the variable set
Definition: VariableExtractor.h:37
Belle2::RecoTrackExtractor::RecoTrackExtractor
RecoTrackExtractor(std::vector< Named< float * >> &variableSet, const std::string &prefix="")
Define names of variables that get extracted.
Definition: RecoTrackExtractor.h:39