Belle II Software  release-05-02-19
EventInfoExtractor.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 
16 #include <limits>
17 
18 namespace Belle2 {
23  class EventInfoExtractor : public VariableExtractor {
25  public:
26 
28  explicit EventInfoExtractor(std::vector<Named<float*>>& variableSet):
29  VariableExtractor()
30  {
31  addVariable("N_RecoTracks", variableSet);
32  addVariable("N_PXDRecoTracks", variableSet);
33  addVariable("N_SVDRecoTracks", variableSet);
34  addVariable("N_CDCRecoTracks", variableSet);
35  addVariable("N_diff_PXD_SVD_RecoTracks", variableSet);
36  addVariable("N_diff_SVD_CDC_RecoTracks", variableSet);
37  addVariable("RTs_Min_Mom_diff_Mag", variableSet);
38  addVariable("RTs_Min_Mom_diff_Pt", variableSet);
39  addVariable("RTs_Min_Pos_diff_Theta", variableSet);
40  addVariable("RTs_Min_Pos_diff_Phi", variableSet);
41  }
42 
44  void extractVariables(const StoreArray<RecoTrack>& recoTracks, const RecoTrack& thisRecoTrack)
45  {
46  m_variables.at("N_RecoTracks") = recoTracks.getEntries();
47 
48  int n_pxdRecoTracks = 0;
49  int n_svdRecoTracks = 0;
50  int n_cdcRecoTracks = 0;
51  float min_mom_diff_mag = std::numeric_limits<float>::max();
52  float min_mom_diff_Pt = std::numeric_limits<float>::max();
53  float min_pos_diff_Theta = std::numeric_limits<float>::max();
54  float min_pos_diff_Phi = std::numeric_limits<float>::max();
55 
56  for (const RecoTrack& recoTrack : recoTracks) {
57  if (recoTrack.hasPXDHits())
58  n_pxdRecoTracks++;
59  if (recoTrack.hasSVDHits())
60  n_svdRecoTracks++;
61  if (recoTrack.hasCDCHits())
62  n_cdcRecoTracks++;
63 
64  if (recoTrack.getArrayIndex() == thisRecoTrack.getArrayIndex())
65  continue;
66 
67  float mom_diff_mag = fabs(recoTrack.getMomentumSeed().Mag() - thisRecoTrack.getMomentumSeed().Mag());
68  if (mom_diff_mag < min_mom_diff_mag) {
69  min_mom_diff_mag = mom_diff_mag;
70  }
71  float mom_diff_Pt = fabs(recoTrack.getMomentumSeed().Pt() - thisRecoTrack.getMomentumSeed().Pt());
72  if (mom_diff_Pt < min_mom_diff_Pt) {
73  min_mom_diff_Pt = mom_diff_Pt;
74  }
75  float pos_diff_Theta = fabs(recoTrack.getPositionSeed().Theta() - thisRecoTrack.getPositionSeed().Theta());
76  if (pos_diff_Theta < min_pos_diff_Theta) {
77  min_pos_diff_Theta = pos_diff_Theta;
78  }
79  float pos_diff_Phi = fabs(recoTrack.getPositionSeed().Phi() - thisRecoTrack.getPositionSeed().Phi());
80  if (pos_diff_Phi < min_pos_diff_Phi) {
81  min_pos_diff_Phi = pos_diff_Phi;
82  }
83  }
84 
85  m_variables.at("N_PXDRecoTracks") = n_pxdRecoTracks;
86  m_variables.at("N_SVDRecoTracks") = n_svdRecoTracks;
87  m_variables.at("N_CDCRecoTracks") = n_cdcRecoTracks;
88  m_variables.at("N_diff_PXD_SVD_RecoTracks") = n_svdRecoTracks - n_pxdRecoTracks;
89  m_variables.at("N_diff_SVD_CDC_RecoTracks") = n_cdcRecoTracks - n_svdRecoTracks;
90  m_variables.at("RTs_Min_Mom_diff_Mag") = min_mom_diff_mag;
91  m_variables.at("RTs_Min_Mom_diff_Pt") = min_mom_diff_Pt;
92  m_variables.at("RTs_Min_Pos_diff_Theta") = min_pos_diff_Theta;
93  m_variables.at("RTs_Min_Pos_diff_Phi") = min_pos_diff_Phi;
94  }
95 
96  private:
97 
98  };
100 }
Belle2::RecoTrack
This is the Reconstruction Event-Data Model Track.
Definition: RecoTrack.h:78
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::EventInfoExtractor::extractVariables
void extractVariables(const StoreArray< RecoTrack > &recoTracks, const RecoTrack &thisRecoTrack)
extract the actual variables and write into a variable set
Definition: EventInfoExtractor.h:52
Belle2::RelationsInterface::getArrayIndex
int getArrayIndex() const
Returns this object's array index (in StoreArray), or -1 if not found.
Definition: RelationsObject.h:387
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::StoreArray
Accessor to arrays stored in the data store.
Definition: ECLMatchingPerformanceExpertModule.h:33
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::StoreArray::getEntries
int getEntries() const
Get the number of objects in the array.
Definition: StoreArray.h:226
Belle2::EventInfoExtractor::EventInfoExtractor
EventInfoExtractor(std::vector< Named< float * >> &variableSet)
Define names of variables that get extracted.
Definition: EventInfoExtractor.h:36