ATLAS Offline Software
MuonTruthSummaryTool.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #ifndef MUON_MUONTRUTHSUMMARYTOOL_H
6 #define MUON_MUONTRUTHSUMMARYTOOL_H
7 
8 #include <atomic>
9 #include <functional>
10 #include <mutex>
11 #include <set>
12 #include <string>
13 #include <unordered_map>
14 
16 #include "GaudiKernel/IIncidentListener.h"
17 #include "GaudiKernel/ServiceHandle.h"
18 #include "GaudiKernel/ToolHandle.h"
25 
26 namespace Trk {
27  class Track;
28  class MeasurementBase;
29 } // namespace Trk
30 
31 class IIncidentSvc;
32 class ITHistSvc;
33 class TTree;
34 
35 namespace Muon {
36  class MuonSegment;
37 
39  class MuonTruthSummaryTool : public AthAlgTool, virtual public IMuonTruthSummaryTool, virtual public IIncidentListener {
40  public:
41  //** Constructor with parameters */
42  MuonTruthSummaryTool(const std::string& t, const std::string& n, const IInterface* p);
43 
44  // Athena Hooks
47 
49  void clear();
50 
52  void init() const;
53 
55  int getBarcode(const Identifier& id) const; // FIXME barcode-based
56 
58  int getPdgId(int barcode) const; // FIXME barcode-based
59 
61  void add(const Identifier& id, int level) const;
62 
64  void add(const MuonSegment& seg, int level) const;
65 
67  void add(const Trk::Track& track, int level) const;
68 
70  std::string printSummary();
71 
72  void handle(const Incident& inc);
73 
74  struct IdentifierHash {
75  size_t operator()(const Identifier& id) const { return std::hash<Identifier::value_type>{}(id.get_compact()); }
76  };
77 
78  private:
80  void add(const std::vector<const Trk::MeasurementBase*>& measurements, int level) const;
81  std::string printSummary(const std::unordered_set<Identifier, IdentifierHash>& truth,
82  const std::unordered_set<Identifier, IdentifierHash>& found);
83 
85  this,
86  "MuonIdHelperSvc",
87  "Muon::MuonIdHelperSvc/MuonIdHelperSvc",
88  };
90  this,
91  "edmHelper",
92  "Muon::MuonEDMHelperSvc/MuonEDMHelperSvc",
93  "Handle to the service providing the IMuonEDMHelperSvc interface",
94  };
96 
97  PublicToolHandle<MuonEDMPrinterTool> m_printer{
98  this,
99  "Printer",
100  "Muon::MuonEDMPrinterTool/MuonEDMPrinterTool",
101  };
102 
103  mutable std::atomic<bool> m_wasInit;
104 
106  this, "TruthNames", {"RPC_TruthMap", "TGC_TruthMap", "MDT_TruthMap"}, "truth names"};
107 
108  mutable std::unordered_map<int, int> m_pdgIdLookupFromBarcode ATLAS_THREAD_SAFE; // protected by mutex// FIXME barcode-based
109  mutable std::unordered_map<Identifier, int, IdentifierHash> m_truthHits
110  ATLAS_THREAD_SAFE; // protected by mutex. map containing truth hits associated with muons, stores barcode as
111  // second element // FIXME barcode-based
112  mutable std::unordered_map<int, std::unordered_set<Identifier, IdentifierHash>> m_truthDataPerLevel
113  ATLAS_THREAD_SAFE; // protected by mutex
114  std::unordered_map<int, unsigned int> m_lossesPerLevel;
115  mutable unsigned int m_truthHitsTotal ATLAS_THREAD_SAFE; // protected by mutex
116 
117  mutable std::recursive_mutex m_mutex;
118 
119  TTree* m_tree;
120  ITHistSvc* m_thistSvc;
121  bool m_writeTree; // Set to true in order to write out ntuple
122  std::string m_treeName;
123  std::string m_histStream;
124  unsigned int m_level;
126 
127  std::vector<unsigned int> m_numChambers;
128  std::vector<std::vector<uint8_t>*> m_numMissedHits;
129  std::vector<std::vector<uint8_t>*> m_missedHitTechnologyIndex; // [0..5] maps to "MDT", "CSC", "RPC", "TGC", "STGC", "MM"
130  std::vector<std::vector<int>*> m_missedHitStationPhi; // increases with eta (0 at eta=0)
131  std::vector<std::vector<int>*> m_missedHitStationSector; // increases with eta (0 at eta=0)
132  std::vector<std::vector<int>*> m_missedHitStationEta; // increases with phi
133  // std::vector< std::vector<float> * > m_missedHitR; // Can't do these without re-writing code a bit to have
134  // link to Meas. Not sure it's worth it. std::vector< std::vector<float> * > m_missedHitZ; std::vector<
135  // std::vector<std::string>* > m_missedHitStationName; // "BIL", "EMS", "T1F", etc.
136  std::vector<std::vector<int>*> m_missedHitStationNameIndex; // BI=0 , BM=1, BO=2, BE=3,
137 
138  void fillChamberVariables(const Identifier& chamberId, const unsigned int numMissedHits);
139  void clearChamberVariables(const unsigned int level);
140  void initChamberVariables(const unsigned int levels);
141  };
142 
143 } // namespace Muon
144 
145 #endif
ReadHandleKeyArray.h
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
Muon::MuonTruthSummaryTool::m_numMissedHits
std::vector< std::vector< uint8_t > * > m_numMissedHits
Definition: MuonTruthSummaryTool.h:128
Trk::Track
The ATLAS Track class.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/Track.h:73
MuonEDMPrinterTool.h
Muon::MuonTruthSummaryTool::ATLAS_THREAD_SAFE
std::unordered_map< int, std::unordered_set< Identifier, IdentifierHash > > m_truthDataPerLevel ATLAS_THREAD_SAFE
Definition: MuonTruthSummaryTool.h:113
Muon::MuonTruthSummaryTool::printSummary
std::string printSummary()
print summary
Definition: MuonTruthSummaryTool.cxx:146
Muon::MuonTruthSummaryTool::m_TruthNames
SG::ReadHandleKeyArray< PRD_MultiTruthCollection > m_TruthNames
Definition: MuonTruthSummaryTool.h:105
Muon::MuonTruthSummaryTool::m_level
unsigned int m_level
Definition: MuonTruthSummaryTool.h:124
Muon::MuonTruthSummaryTool::ATLAS_THREAD_SAFE
std::unordered_map< Identifier, int, IdentifierHash > m_truthHits ATLAS_THREAD_SAFE
Definition: MuonTruthSummaryTool.h:110
Muon::MuonTruthSummaryTool::finalize
StatusCode finalize()
Definition: MuonTruthSummaryTool.cxx:72
SG::HandleKeyArray
Definition: StoreGate/StoreGate/HandleKeyArray.h:38
Muon::MuonTruthSummaryTool::m_missedHitStationPhi
std::vector< std::vector< int > * > m_missedHitStationPhi
Definition: MuonTruthSummaryTool.h:130
Muon::MuonTruthSummaryTool::m_numChambers
std::vector< unsigned int > m_numChambers
Definition: MuonTruthSummaryTool.h:127
Muon::MuonTruthSummaryTool::m_idHelperSvc
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Definition: MuonTruthSummaryTool.h:84
Muon::MuonTruthSummaryTool::ATLAS_THREAD_SAFE
unsigned int m_truthHitsTotal ATLAS_THREAD_SAFE
Definition: MuonTruthSummaryTool.h:115
Muon::MuonTruthSummaryTool::m_mutex
std::recursive_mutex m_mutex
Definition: MuonTruthSummaryTool.h:117
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
Muon::MuonTruthSummaryTool::m_printer
PublicToolHandle< MuonEDMPrinterTool > m_printer
Definition: MuonTruthSummaryTool.h:97
IMuonTruthSummaryTool.h
Muon::MuonTruthSummaryTool::handle
void handle(const Incident &inc)
Definition: MuonTruthSummaryTool.cxx:290
Muon::MuonTruthSummaryTool::IdentifierHash
Definition: MuonTruthSummaryTool.h:74
Muon
This class provides conversion from CSC RDO data to CSC Digits.
Definition: TrackSystemController.h:49
xAOD::MuonSegment
MuonSegment_v1 MuonSegment
Reference the current persistent version:
Definition: Event/xAOD/xAODMuon/xAODMuon/MuonSegment.h:13
Muon::MuonTruthSummaryTool::m_writeTree
bool m_writeTree
Definition: MuonTruthSummaryTool.h:121
python.iconfTool.models.loaders.level
level
Definition: loaders.py:20
Muon::MuonTruthSummaryTool::getPdgId
int getPdgId(int barcode) const
get the associated pdgId for a given barcode
Definition: MuonTruthSummaryTool.cxx:108
Muon::MuonTruthSummaryTool::clear
void clear()
clear tool
Definition: MuonTruthSummaryTool.cxx:78
Muon::MuonTruthSummaryTool::clearChamberVariables
void clearChamberVariables(const unsigned int level)
Definition: MuonTruthSummaryTool.cxx:261
Identifier
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:32
beamspotman.n
n
Definition: beamspotman.py:731
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
HepMC::barcode
int barcode(const T *p)
Definition: Barcode.h:16
Muon::MuonTruthSummaryTool::m_wasInit
std::atomic< bool > m_wasInit
Definition: MuonTruthSummaryTool.h:103
AthAlgTool.h
Muon::MuonTruthSummaryTool::init
void init() const
init truth
Definition: MuonTruthSummaryTool.cxx:85
Muon::MuonTruthSummaryTool::initialize
StatusCode initialize()
Definition: MuonTruthSummaryTool.cxx:35
IMuonEDMHelperSvc.h
Trk
Ensure that the ATLAS eigen extensions are properly loaded.
Definition: FakeTrackBuilder.h:9
Muon::MuonTruthSummaryTool::fillChamberVariables
void fillChamberVariables(const Identifier &chamberId, const unsigned int numMissedHits)
Definition: MuonTruthSummaryTool.cxx:276
Muon::MuonTruthSummaryTool::m_lossesPerLevel
std::unordered_map< int, unsigned int > m_lossesPerLevel
Definition: MuonTruthSummaryTool.h:114
Muon::MuonTruthSummaryTool::m_selectedPdgId
int m_selectedPdgId
Definition: MuonTruthSummaryTool.h:125
Muon::MuonTruthSummaryTool::m_histStream
std::string m_histStream
Definition: MuonTruthSummaryTool.h:123
Muon::MuonTruthSummaryTool::initChamberVariables
void initChamberVariables(const unsigned int levels)
Definition: MuonTruthSummaryTool.cxx:207
Muon::MuonTruthSummaryTool::getBarcode
int getBarcode(const Identifier &id) const
get the associated barcode for the identifier, return -1 if the channel was not hit by a muon
Definition: MuonTruthSummaryTool.cxx:116
Muon::MuonTruthSummaryTool::add
void add(const Identifier &id, int level) const
add identifier
Definition: MuonTruthSummaryTool.cxx:124
Muon::MuonTruthSummaryTool::m_missedHitStationNameIndex
std::vector< std::vector< int > * > m_missedHitStationNameIndex
Definition: MuonTruthSummaryTool.h:136
Muon::MuonTruthSummaryTool::m_thistSvc
ITHistSvc * m_thistSvc
Definition: MuonTruthSummaryTool.h:120
CondAlgsOpts.found
int found
Definition: CondAlgsOpts.py:101
Muon::MuonTruthSummaryTool::m_edmHelperSvc
ServiceHandle< IMuonEDMHelperSvc > m_edmHelperSvc
Definition: MuonTruthSummaryTool.h:89
Muon::MuonTruthSummaryTool::MuonTruthSummaryTool
MuonTruthSummaryTool(const std::string &t, const std::string &n, const IInterface *p)
Constructor.
Definition: MuonTruthSummaryTool.cxx:19
Muon::MuonTruthSummaryTool::m_missedHitStationEta
std::vector< std::vector< int > * > m_missedHitStationEta
Definition: MuonTruthSummaryTool.h:132
Muon::MuonTruthSummaryTool::IdentifierHash::operator()
size_t operator()(const Identifier &id) const
Definition: MuonTruthSummaryTool.h:75
Muon::MuonTruthSummaryTool::m_missedHitTechnologyIndex
std::vector< std::vector< uint8_t > * > m_missedHitTechnologyIndex
Definition: MuonTruthSummaryTool.h:129
PRD_MultiTruthCollection.h
Track
Definition: TriggerChamberClusterOnTrackCreator.h:21
Muon::MuonTruthSummaryTool::m_missedHitStationSector
std::vector< std::vector< int > * > m_missedHitStationSector
Definition: MuonTruthSummaryTool.h:131
Muon::IMuonTruthSummaryTool
Interface for tools calculating hit count summaries for track.
Definition: IMuonTruthSummaryTool.h:18
xAOD::track
@ track
Definition: TrackingPrimitives.h:512
Muon::MuonSegment
Definition: MuonSpectrometer/MuonReconstruction/MuonRecEvent/MuonSegment/MuonSegment/MuonSegment.h:45
AthAlgTool
Definition: AthAlgTool.h:26
Muon::MuonTruthSummaryTool::m_incidentSvc
ServiceHandle< IIncidentSvc > m_incidentSvc
Definition: MuonTruthSummaryTool.h:95
Muon::MuonTruthSummaryTool
Interface for tools calculating hit count summaries for track.
Definition: MuonTruthSummaryTool.h:39
Muon::MuonTruthSummaryTool::m_treeName
std::string m_treeName
Definition: MuonTruthSummaryTool.h:122
Muon::MuonTruthSummaryTool::ATLAS_THREAD_SAFE
std::unordered_map< int, int > m_pdgIdLookupFromBarcode ATLAS_THREAD_SAFE
Definition: MuonTruthSummaryTool.h:108
IMuonIdHelperSvc.h
ServiceHandle< Muon::IMuonIdHelperSvc >
Muon::MuonTruthSummaryTool::m_tree
TTree * m_tree
Definition: MuonTruthSummaryTool.h:119