ATLAS Offline Software
NSWPRDValAlg.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 // NSWValAlg inlcudes
6 #include "NSWPRDValAlg.h"
7 
9 
10 #include "EDM_object.h"
11 
12 // Other NSW includes
14 
15 // Misc includes
16 #include "GaudiKernel/ITHistSvc.h"
17 
18 #include <mutex>
19 
20 using namespace MuonPRDTest;
21 NSWPRDValAlg::NSWPRDValAlg(const std::string& name, ISvcLocator* pSvcLocator) : AthHistogramAlgorithm(name, pSvcLocator) {}
22 
24  ATH_MSG_DEBUG("initialize()");
25  unsigned int ev_infomask{EventInfoBranch::writePileUp};
26  if (!m_isData) ev_infomask |= EventInfoBranch::isMC | EventInfoBranch::writeBeamSpot;
27  m_tree.addBranch(std::make_unique<EventInfoBranch>(m_tree,ev_infomask));
28 
29  ATH_CHECK(m_idHelperSvc.retrieve());
30 
31  if (m_doTruth) { m_tree.addBranch(std::make_unique<TruthVariables>(m_tree, m_Truth_ContainerName, msgLevel())); }
32 
33  if (m_doMuEntry) {
34  m_tree.addBranch(std::make_unique<MuEntryVariables>(m_tree, m_MuEntry_ContainerName, msgLevel()));
35  }
36 
37  if (m_doSTGCHit) { m_tree.addBranch(std::make_unique<sTGCSimHitVariables>(m_tree, m_NSWsTGC_ContainerName.value(), msgLevel())); }
38  if (m_doSTGCDigit) {
39  m_tree.addBranch(std::make_unique<sTgcDigitVariables>(m_tree, m_NSWsTGC_DigitContainerName.value(), msgLevel()));
40  }
41  if (m_doSTGCSDO) {
42  m_tree.addBranch(std::make_unique<sTgcSDOVariables>(m_tree, m_NSWsTGC_SDOContainerName.value(), msgLevel()));
43  }
44  if (m_doSTGCFastDigit) { m_tree.addBranch(std::make_unique<sTgcSDOVariables>(m_tree, "sTGCfast_SDO", msgLevel())); }
45  if (m_doSTGCRDO) { m_tree.addBranch(std::make_unique<sTGCRDOVariables>(m_tree, m_NSWsTGC_RDOContainerName.value(), msgLevel())); }
46  if (m_doSTGCPRD) { m_tree.addBranch(std::make_unique<sTGCPRDVariables>(m_tree, m_NSWsTGC_PRDContainerName.value(), msgLevel())); }
47 
48  if (m_doMMHit) { m_tree.addBranch(std::make_unique<MMSimHitVariables>(m_tree, m_NSWMM_ContainerName.value(), msgLevel())); }
49  if (m_doMMDigit) {
50  m_tree.addBranch(std::make_unique<MMDigitVariables>(m_tree, m_NSWMM_DigitContainerName.value(), msgLevel()));
51  }
52  if (m_doMMSDO) {
53  m_tree.addBranch(std::make_unique<MMSDOVariables>(m_tree, m_NSWMM_SDOContainerName.value(), msgLevel()));
54  }
55  if (m_doMMFastDigit) { m_tree.addBranch(std::make_unique<MMSDOVariables>(m_tree, "MMfast_SDO", msgLevel())); }
56  if (m_doMMRDO) { m_tree.addBranch(std::make_unique<MMRDOVariables>(m_tree, m_NSWMM_RDOContainerName.value(), msgLevel())); }
57  if (m_doMMPRD ) { m_tree.addBranch(std::make_unique<MMPRDVariables>(m_tree, m_NSWMM_PRDContainerName.value(), msgLevel())); }
58 
59  if (m_doCSCHit) { m_tree.addBranch(std::make_unique<CSCSimHitVariables>(m_tree, m_CSC_SimContainerName.value(), msgLevel())); }
60  if (m_doCSCSDO) { m_tree.addBranch(std::make_unique<CscSDOVariables>(m_tree, m_CSC_SDOContainerName.value(), msgLevel())); }
61  if (m_doCSCDigit) { m_tree.addBranch(std::make_unique<CscDigitVariables>(m_tree, m_CSC_DigitContainerName.value(), msgLevel())); }
62  if (m_doCSCRDO) {
63  ATH_CHECK(m_csc_decoder.retrieve());
64  m_tree.addBranch(std::make_unique<CSCRDOVariables>(m_tree, m_CSC_RDOContainerName.value(), msgLevel(), &m_idHelperSvc->cscIdHelper(), m_csc_decoder.get()));
65  }
66  if (m_doCSCPRD) { m_tree.addBranch(std::make_unique<CSCPRDVariables>(m_tree, m_CSC_PRDContainerName.value(), msgLevel())); }
67 
68  if (m_doMDTHit) { m_tree.addBranch(std::make_unique<MDTSimHitVariables>(m_tree, m_MDT_SimContainerName.value(), msgLevel())); }
69  if (m_doMDTSDO) { m_tree.addBranch(std::make_unique<MdtSDOVariables>(m_tree, m_MDT_SDOContainerName.value(), msgLevel())); }
70  if (m_doMDTDigit) { m_tree.addBranch(std::make_unique<MdtDigitVariables>(m_tree, m_MDT_DigitContainerName.value(), msgLevel())); }
71 
72  if (m_doRPCHit) { m_tree.addBranch(std::make_unique<RPCSimHitVariables>(m_tree, m_RPC_SimContainerName, msgLevel())); }
73  if (m_doRPCSDO) { m_tree.addBranch(std::make_unique<RpcSDOVariables>(m_tree, m_RPC_SDOContainerName, msgLevel())); }
74  if (m_doRPCDigit) { m_tree.addBranch(std::make_unique<RpcDigitVariables>(m_tree, m_RPC_DigitContainerName, msgLevel())); }
75 
76  if (m_doTGCHit) { m_tree.addBranch(std::make_unique<TGCSimHitVariables>(m_tree, m_TGC_SimContainerName.value(), msgLevel())); }
77  if (m_doTGCSDO) { m_tree.addBranch(std::make_unique<TgcSDOVariables>(m_tree, m_TGC_SDOContainerName.value(), msgLevel())); }
78  if (m_doTGCDigit) { m_tree.addBranch(std::make_unique<TgcDigitVariables>(m_tree, m_TGC_DigitContainerName.value(), msgLevel())); }
79  if (m_doTGCRDO) {
80  ATH_CHECK(m_tgcCabling.retrieve());
81  m_tree.addBranch(std::make_unique<TGCRDOVariables>(m_tree, m_TGC_RDOContainerName.value(), msgLevel(), m_tgcCabling));
82  }
83  if (m_doTGCPRD) { m_tree.addBranch(std::make_unique<TGCPRDVariables>(m_tree, m_TGC_PRDContainerName.value(), msgLevel())); }
84 
85  ATH_MSG_DEBUG("Init TTree");
86  ATH_CHECK(m_tree.init(this));
87 
88  ATH_MSG_DEBUG("Finished with the initialization");
89  return StatusCode::SUCCESS;
90 }
91 
93  ATH_MSG_DEBUG("NSWPRDValAlg:: Finalize + Matching");
96  return StatusCode::SUCCESS;
97 }
98 
100  ATH_MSG_DEBUG("execute()");
101  const EventContext& ctx = Gaudi::Hive::currentContext();
102  ATH_MSG_DEBUG("Fill TTree");
103  if (!m_tree.fill(ctx)) return StatusCode::FAILURE;
104 
105  return StatusCode::SUCCESS;
106 }
107 
108 /*****************************************************************************************************************************************
109 The rest of this file is the NSW matching algorithm. This can be (de)activated with the input variable doNSWMatchingAlg.
110 The matching algorithm will check each conversion in the Hit->PRD digitization chain.
111 For each conversion, the algorithm will try to match the two objects.
112 The input variable setMaxStripDistance (default value = 3) give the maximum strip distance two objects can have, while still be considered a
113 match The input variable doNSWMatchingMuonOnly can be set to true to only use events which contain exclusively muons
114 ******************************************************************************************************************************************/
115 
116 // First set up which object should be matched, given the input used to fill the NSW Ntuple
118  ATH_MSG_DEBUG("NSWMatchingAlg: building Data objects");
119 
120  // Use the EDM object, as defined in EDM_object.h, to build the hits, digits, SDO, RDO and PRD for both sTGC and MM
121  EDM_object Hits_sTGC, Digits_sTGC, SDO_sTGC, RDO_sTGC, PRD_sTGC;
122  EDM_object Hits_MM, Digits_MM, SDO_MM, RDO_MM, PRD_MM;
123 
124  Hits_sTGC.setName("Hits", "sTGC");
125  Digits_sTGC.setName("Digits", "sTGC");
126  SDO_sTGC.setName("SDO", "sTGC");
127  RDO_sTGC.setName("RDO", "sTGC");
128  PRD_sTGC.setName("PRD", "sTGC");
129 
130  Hits_MM.setName("Hits", "MM");
131  Digits_MM.setName("Digits", "MM");
132  SDO_MM.setName("SDO", "MM");
133  RDO_MM.setName("RDO", "MM");
134  PRD_MM.setName("PRD", "MM");
135 
136  // Match the EDM objects with the variables in the NSW Validation Ntuple
137  TString branch_name;
138  TObjArray* brlst = m_tree->GetListOfBranches();
139  for (TBranch* branch = (TBranch*)brlst->First(); branch; branch = (TBranch*)brlst->After(branch)) {
140  branch_name = branch->GetName();
141  ATH_MSG_VERBOSE("About to check branch: " << branch_name);
142 
143  ATH_CHECK(setDataAdress(Hits_sTGC, branch_name));
144  ATH_CHECK(setDataAdress(Digits_sTGC, branch_name));
145  ATH_CHECK(setDataAdress(SDO_sTGC, branch_name));
146  ATH_CHECK(setDataAdress(RDO_sTGC, branch_name));
147  ATH_CHECK(setDataAdress(PRD_sTGC, branch_name));
148 
149  ATH_CHECK(setDataAdress(Hits_MM, branch_name));
150  ATH_CHECK(setDataAdress(Digits_MM, branch_name));
151  ATH_CHECK(setDataAdress(SDO_MM, branch_name));
152  ATH_CHECK(setDataAdress(RDO_MM, branch_name));
153  ATH_CHECK(setDataAdress(PRD_MM, branch_name));
154  }
155 
156  // Prepare the output file
157  std::ofstream efficiencies;
158  efficiencies.open("NSWMatchingAlg_efficiencies.txt");
159  efficiencies << "NSW Matching algorithm, efficiencies of conversion from and to various EDM objects" << std::endl;
160  efficiencies << "Settings:\n" << m_doNSWMatchingMuon << std::endl;
161  efficiencies << " 'Maximum Strip Distance':" << m_maxStripDiff << std::endl;
162  efficiencies.close();
163 
164  // sTGC matching
165  if (m_doSTGCHit && m_doSTGCDigit) {
166  ATH_CHECK(NSWMatchingAlg(Hits_sTGC, Digits_sTGC));
167  ATH_CHECK(NSWMatchingAlg(Hits_sTGC, SDO_sTGC));
168  }
169  if (m_doSTGCDigit && m_doSTGCRDO) {
170  ATH_CHECK(NSWMatchingAlg(Digits_sTGC, RDO_sTGC));
171  ATH_CHECK(NSWMatchingAlg(SDO_sTGC, RDO_sTGC));
172  }
173  if (m_doSTGCRDO && m_doSTGCPRD) { ATH_CHECK(NSWMatchingAlg(RDO_sTGC, PRD_sTGC)); }
174 
175  // sTGC fast digitization
177  ATH_CHECK(NSWMatchingAlg(Hits_sTGC, PRD_sTGC));
178  ATH_CHECK(NSWMatchingAlg(Hits_sTGC, SDO_sTGC));
179  ATH_CHECK(NSWMatchingAlg(SDO_sTGC, PRD_sTGC));
180  }
181 
182  // MM matching
183  if (m_doMMHit && m_doMMDigit) {
184  ATH_CHECK(NSWMatchingAlg(Hits_MM, Digits_MM));
185  ATH_CHECK(NSWMatchingAlg(Hits_MM, SDO_MM));
186  }
187  if (m_doMMDigit && m_doMMRDO) {
188  ATH_CHECK(NSWMatchingAlg(Digits_MM, RDO_MM));
189  ATH_CHECK(NSWMatchingAlg(SDO_MM, RDO_MM));
190  }
191  if (m_doMMRDO && m_doMMPRD) { ATH_CHECK(NSWMatchingAlg(RDO_MM, PRD_MM)); }
192 
193  // MM fast digitization
194  if (m_doMMHit && m_doMMFastDigit) {
195  ATH_CHECK(NSWMatchingAlg(Hits_MM, PRD_MM));
196  ATH_CHECK(NSWMatchingAlg(Hits_MM, SDO_MM));
197  ATH_CHECK(NSWMatchingAlg(SDO_MM, PRD_MM));
198  }
199 
200  return StatusCode::SUCCESS;
201 }
202 
203 // This part of the matching algortihm does the actual comparison given two EDM obects
205  if (data0.getDetector() != data1.getDetector()) {
206  ATH_MSG_ERROR("Matching " << data0.getDetector() << " data with " << data1.getDetector()
207  << " data. This is not implemented in this algorithm");
208  }
209 
210  ATH_MSG_DEBUG("NSWMatchingAlg: Start matching " << data0.getName() << " and " << data1.getName() << " for " << data0.getDetector());
211  data0.setMatchedwith(data1.getName());
212  data1.setMatchedwith(data0.getName());
213 
214  // Prepare Muon only check
215  std::vector<int>* TruthParticle_Pdg;
216  if (m_doNSWMatchingMuon) {
217  TruthParticle_Pdg = nullptr;
218  m_tree->SetBranchAddress("TruthParticle_Pdg", &TruthParticle_Pdg);
219  }
220 
221  Long64_t nEntries = m_tree->GetEntriesFast();
222  for (Long64_t i_entry = 0; i_entry < nEntries; ++i_entry) {
223  // event numbering starts at 1
224  ATH_MSG_DEBUG("Now checking event number " << i_entry + 1);
225  m_tree->GetEntry(i_entry);
226 
227  if (data0.empty()) {
228  ATH_MSG_WARNING("No " << data0.getDetector() << data0.getName() << " found in event " << i_entry + 1);
229  continue;
230  }
231  if (data1.empty()) {
232  ATH_MSG_WARNING("No " << data1.getDetector() << data1.getName() << " found in event " << i_entry + 1);
233  continue;
234  }
235 
236  ATH_MSG_DEBUG("Number of " << data0.getDetector() << data0.getName() << ": " << data0.size() << ", number of "
237  << data1.getDetector() << data1.getName() << ": " << data1.size());
238 
239  // only muon events:
240  if (m_doNSWMatchingMuon) {
241  bool allMu = true;
242  int mu_pdg = 13;
243  for (int pdg : *TruthParticle_Pdg) { allMu &= (abs(pdg) == mu_pdg); }
244  if (!allMu) {
245  ATH_MSG_VERBOSE("Skipping event, because doNSWMatchingMuonOnly is true and there non muon particles");
246  continue;
247  }
248  }
249 
250  // Reset variables to have a clean sheet
251  data0.init_matching();
252  data1.init_matching();
253 
254  // Actual Matching
255  for (uint i = 0; i < data0.size(); ++i) {
256  int nMatch = 0;
257  for (uint j = 0; j < data1.size(); ++j) {
258  if (data0.identifierMatch(data0, data1, i, j)) {
259  nMatch++;
260  data0.update_match(i, data1.m_channel->at(j));
261  data1.update_match(j, data0.m_channel->at(i));
262  }
263  }
264  ATH_MSG_VERBOSE("Total Number of matches found: " << nMatch << " " << data1.getName() << " for a single " << data0.getName());
265  if (nMatch == 0) {
266  if (m_noMatchWarning) {
267  static std::once_flag flag;
268  std::call_once(flag, [&]() {
269  ATH_MSG_WARNING("No match found! Will now disable this kind of WARNING but please be "
270  "aware that you are running with suppressNoMatchWarning set to true!");
271  });
272  } else {
273  ATH_MSG_DEBUG("No match found!");
274  }
275  }
276  }
277  if (msgLevel() <= MSG::DEBUG) {
278  ATH_MSG_DEBUG("Full info for " << data0.getName() << data0.getDetector());
279  data0.printInfo();
280  ATH_MSG_DEBUG("Full info for " << data1.getName() << data1.getDetector());
281  data1.printInfo();
282  }
283 
285  data1.update_efficiency(m_maxStripDiff);
286 
287  // The data0 vs data1 matching will now be overwritten
288  data0.clearVars();
289  data1.clearVars();
290  }
291 
292  // Write result to file
293  std::ofstream efficiencies;
294  efficiencies.open("NSWMatchingAlg_efficiencies.txt", std::ofstream::app);
296  data1.printEfficiency(efficiencies);
297  efficiencies.close();
298 
299  return StatusCode::SUCCESS;
300 }
301 
302 // This function couples the branch of the NSW validation Ntuple with the EDM object.
303 // In case the brach does not exist, or is completely empty, the object will remain empty and the code will skip the matching entirly,
304 // giving a ATH_WARNING in the process
305 StatusCode NSWPRDValAlg::setDataAdress(EDM_object& oData, const TString& branch_name) {
306  bool setBranch = false;
307  if (!(branch_name.Contains(oData.getName()) && branch_name.Contains(oData.getDetector()))) { return StatusCode::SUCCESS; }
308  // For sim hits select the offline identifiers, rather than the sim identifiers
309  if (branch_name.Contains("_sim_")) { return StatusCode::SUCCESS; }
310  if (branch_name.EndsWith("stationName")) {
311  m_tree->SetBranchAddress(branch_name, &oData.m_stationName);
312  setBranch = true;
313  }
314  if (branch_name.EndsWith("stationEta")) {
315  m_tree->SetBranchAddress(branch_name, &oData.m_stationEta);
316  setBranch = true;
317  }
318  if (branch_name.EndsWith("stationPhi")) {
319  m_tree->SetBranchAddress(branch_name, &oData.m_stationPhi);
320  setBranch = true;
321  }
322  if (branch_name.EndsWith("multiplet")) {
323  m_tree->SetBranchAddress(branch_name, &oData.m_multiplet);
324  setBranch = true;
325  }
326  if (branch_name.EndsWith("gas_gap")) {
327  m_tree->SetBranchAddress(branch_name, &oData.m_gas_gap);
328  setBranch = true;
329  }
330  if (branch_name.EndsWith("channel") && !branch_name.Contains("rdos")) {
331  m_tree->SetBranchAddress(branch_name, &oData.m_channel);
332  setBranch = true;
333  }
334  if (branch_name.EndsWith("channel_type")) {
335  m_tree->SetBranchAddress(branch_name, &oData.m_channel_type);
336  setBranch = true;
337  }
338  if (setBranch) { ATH_MSG_DEBUG("Set data adress of branch " << branch_name); }
339 
340  return StatusCode::SUCCESS;
341 }
NSWPRDValAlg::m_doMMRDO
Gaudi::Property< bool > m_doMMRDO
Definition: NSWPRDValAlg.h:52
NSWPRDValAlg::m_maxStripDiff
Gaudi::Property< uint > m_maxStripDiff
Definition: NSWPRDValAlg.h:112
EDM_object::identifierMatch
bool identifierMatch(EDM_object &data0, EDM_object &data1, uint i, uint j)
Definition: EDM_object.cxx:69
NSWPRDValAlg::m_doMDTDigit
Gaudi::Property< bool > m_doMDTDigit
Definition: NSWPRDValAlg.h:61
sTgcDigitEffiDump.efficiencies
list efficiencies
translate the station name indices into the string staiton name
Definition: sTgcDigitEffiDump.py:23
NSWPRDValAlg::m_doCSCHit
Gaudi::Property< bool > m_doCSCHit
Definition: NSWPRDValAlg.h:54
NSWPRDValAlg::m_NSWsTGC_PRDContainerName
Gaudi::Property< std::string > m_NSWsTGC_PRDContainerName
Definition: NSWPRDValAlg.h:80
NSWPRDValAlg::m_doCSCRDO
Gaudi::Property< bool > m_doCSCRDO
Definition: NSWPRDValAlg.h:57
NSWPRDValAlg::m_NSWMM_ContainerName
Gaudi::Property< std::string > m_NSWMM_ContainerName
Definition: NSWPRDValAlg.h:82
EDM_object::m_stationName
std::vector< std::string > * m_stationName
Definition: EDM_object.h:46
NSWPRDValAlg::m_doTGCPRD
Gaudi::Property< bool > m_doTGCPRD
Definition: NSWPRDValAlg.h:69
NSWPRDValAlg::m_CSC_DigitContainerName
Gaudi::Property< std::string > m_CSC_DigitContainerName
Definition: NSWPRDValAlg.h:90
MuonVal::MuonTesterTree::init
StatusCode init(OWNER *instance)
Initialize method.
NSWPRDValAlg::m_TGC_SDOContainerName
Gaudi::Property< std::string > m_TGC_SDOContainerName
Definition: NSWPRDValAlg.h:103
EDM_object
Definition: EDM_object.h:14
NSWPRDValAlg::m_TGC_SimContainerName
Gaudi::Property< std::string > m_TGC_SimContainerName
Definition: NSWPRDValAlg.h:102
NSWPRDValAlg::m_doMMHit
Gaudi::Property< bool > m_doMMHit
Definition: NSWPRDValAlg.h:49
NSWPRDValAlg::m_doNSWMatchingMuon
Gaudi::Property< bool > m_doNSWMatchingMuon
Definition: NSWPRDValAlg.h:111
EDM_object::setMatchedwith
void setMatchedwith(TString matchedwith)
Definition: EDM_object.h:29
NSWPRDValAlg::setDataAdress
StatusCode setDataAdress(EDM_object &oData, const TString &branch_name)
Definition: NSWPRDValAlg.cxx:305
NSWPRDValAlg::NSWPRDValAlg
NSWPRDValAlg(const std::string &name, ISvcLocator *pSvcLocator)
Definition: NSWPRDValAlg.cxx:21
NSWPRDValAlg::m_doMMSDO
Gaudi::Property< bool > m_doMMSDO
Definition: NSWPRDValAlg.h:70
NSWPRDValAlg::m_NSWsTGC_DigitContainerName
Gaudi::Property< std::string > m_NSWsTGC_DigitContainerName
Definition: NSWPRDValAlg.h:78
EDM_object::setName
void setName(TString name)
Definition: EDM_object.h:26
EDM_object::size
size_t size()
Definition: EDM_object.cxx:35
NSWPRDValAlg::m_doMDTSDO
Gaudi::Property< bool > m_doMDTSDO
Definition: NSWPRDValAlg.h:60
NSWPRDValAlg::m_doCSCDigit
Gaudi::Property< bool > m_doCSCDigit
Definition: NSWPRDValAlg.h:56
EDM_object::m_stationPhi
std::vector< int > * m_stationPhi
Definition: EDM_object.h:48
EDM_object::m_channel
std::vector< int > * m_channel
Definition: EDM_object.h:52
NSWPRDValAlg::m_CSC_SDOContainerName
Gaudi::Property< std::string > m_CSC_SDOContainerName
Definition: NSWPRDValAlg.h:89
EDM_object::update_efficiency
void update_efficiency(int maximum_difference)
Definition: EDM_object.cxx:107
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
NSWPRDValAlg::m_RPC_SDOContainerName
Gaudi::Property< std::string > m_RPC_SDOContainerName
Definition: NSWPRDValAlg.h:99
NSWPRDValAlg::m_doSTGCPRD
Gaudi::Property< bool > m_doSTGCPRD
Definition: NSWPRDValAlg.h:48
NSWPRDValAlg::m_doSTGCHit
Gaudi::Property< bool > m_doSTGCHit
Definition: NSWPRDValAlg.h:44
NSWPRDValAlg::m_NSWsTGC_RDOContainerName
Gaudi::Property< std::string > m_NSWsTGC_RDOContainerName
Definition: NSWPRDValAlg.h:79
NSWPRDValAlg::m_doTruth
Gaudi::Property< bool > m_doTruth
Definition: NSWPRDValAlg.h:42
NSWPRDValAlg::m_doRPCSDO
Gaudi::Property< bool > m_doRPCSDO
Definition: NSWPRDValAlg.h:63
EDM_object::empty
bool empty()
Definition: EDM_object.cxx:101
NSWPRDValAlg::m_MDT_SDOContainerName
Gaudi::Property< std::string > m_MDT_SDOContainerName
Definition: NSWPRDValAlg.h:95
NSWPRDValAlg::m_tree
MuonVal::MuonTesterTree m_tree
Definition: NSWPRDValAlg.h:34
NSWPRDValAlg::m_MuEntry_ContainerName
Gaudi::Property< std::string > m_MuEntry_ContainerName
Definition: NSWPRDValAlg.h:74
NSWPRDValAlg::m_doMMPRD
Gaudi::Property< bool > m_doMMPRD
Definition: NSWPRDValAlg.h:53
NSWPRDValAlg::m_TGC_DigitContainerName
Gaudi::Property< std::string > m_TGC_DigitContainerName
Definition: NSWPRDValAlg.h:104
NSWPRDValAlg::m_NSWsTGC_ContainerName
Gaudi::Property< std::string > m_NSWsTGC_ContainerName
Definition: NSWPRDValAlg.h:76
EDM_object::m_gas_gap
std::vector< int > * m_gas_gap
Definition: EDM_object.h:50
EDM_object::m_channel_type
std::vector< int > * m_channel_type
Definition: EDM_object.h:51
NSWPRDValAlg::m_doMMFastDigit
Gaudi::Property< bool > m_doMMFastDigit
Definition: NSWPRDValAlg.h:50
NSWPRDValAlg::m_RPC_DigitContainerName
Gaudi::Property< std::string > m_RPC_DigitContainerName
Definition: NSWPRDValAlg.h:100
NSWPRDValAlg::m_idHelperSvc
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Definition: NSWPRDValAlg.h:38
uint
unsigned int uint
Definition: LArOFPhaseFill.cxx:20
NSWPRDValAlg::m_doMuEntry
Gaudi::Property< bool > m_doMuEntry
Definition: NSWPRDValAlg.h:43
NSWPRDValAlg::initialize
StatusCode initialize() override
Definition: NSWPRDValAlg.cxx:23
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
lumiFormat.i
int i
Definition: lumiFormat.py:85
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
MuonPRDTestDict.h
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
NSWPRDValAlg::m_CSC_SimContainerName
Gaudi::Property< std::string > m_CSC_SimContainerName
Definition: NSWPRDValAlg.h:88
master.flag
bool flag
Definition: master.py:29
NSWPRDValAlg::m_doTGCRDO
Gaudi::Property< bool > m_doTGCRDO
Definition: NSWPRDValAlg.h:68
NSWPRDValAlg::execute
StatusCode execute() override
Definition: NSWPRDValAlg.cxx:99
EDM_object::init_matching
void init_matching()
Definition: EDM_object.cxx:95
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
NSWPRDValAlg::NSWMatchingAlg
StatusCode NSWMatchingAlg()
Definition: NSWPRDValAlg.cxx:117
NSWPRDValAlg::m_RPC_SimContainerName
Gaudi::Property< std::string > m_RPC_SimContainerName
Definition: NSWPRDValAlg.h:98
NSWPRDValAlg::m_MDT_SimContainerName
Gaudi::Property< std::string > m_MDT_SimContainerName
Definition: NSWPRDValAlg.h:94
AthHistogramAlgorithm
Definition: AthHistogramAlgorithm.h:32
NSWPRDValAlg::m_doCSCPRD
Gaudi::Property< bool > m_doCSCPRD
Definition: NSWPRDValAlg.h:58
EDM_object::getDetector
TString getDetector()
Definition: EDM_object.h:33
NSWPRDValAlg::m_doTGCDigit
Gaudi::Property< bool > m_doTGCDigit
Definition: NSWPRDValAlg.h:67
NSWPRDValAlg::m_doTGCSDO
Gaudi::Property< bool > m_doTGCSDO
Definition: NSWPRDValAlg.h:66
NSWPRDValAlg::m_doNSWMatching
Gaudi::Property< bool > m_doNSWMatching
Definition: NSWPRDValAlg.h:110
NSWPRDValAlg::m_tgcCabling
ServiceHandle< MuonTGC_CablingSvc > m_tgcCabling
Definition: NSWPRDValAlg.h:36
EDM_object::update_match
bool update_match(int index, int ch_candidate)
Definition: EDM_object.cxx:80
NSWPRDValAlg.h
NSWPRDValAlg::m_NSWMM_PRDContainerName
Gaudi::Property< std::string > m_NSWMM_PRDContainerName
Definition: NSWPRDValAlg.h:86
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
NSWPRDValAlg::m_CSC_PRDContainerName
Gaudi::Property< std::string > m_CSC_PRDContainerName
Definition: NSWPRDValAlg.h:92
EDM_object::getName
TString getName()
Definition: EDM_object.h:32
NSWPRDValAlg::finalize
StatusCode finalize() override
Definition: NSWPRDValAlg.cxx:92
NSWPRDValAlg::m_doSTGCDigit
Gaudi::Property< bool > m_doSTGCDigit
Definition: NSWPRDValAlg.h:46
NSWPRDValAlg::m_doSTGCRDO
Gaudi::Property< bool > m_doSTGCRDO
Definition: NSWPRDValAlg.h:47
NSWPRDValAlg::m_isData
Gaudi::Property< bool > m_isData
Definition: NSWPRDValAlg.h:41
MuonDetectorManager.h
RTTAlgmain.data1
data1
Definition: RTTAlgmain.py:54
NSWPRDValAlg::m_Truth_ContainerName
Gaudi::Property< std::string > m_Truth_ContainerName
Definition: NSWPRDValAlg.h:73
RTTAlgmain.branch
branch
Definition: RTTAlgmain.py:61
NSWPRDValAlg::m_NSWMM_SDOContainerName
Gaudi::Property< std::string > m_NSWMM_SDOContainerName
Definition: NSWPRDValAlg.h:83
NSWPRDValAlg::m_doRPCDigit
Gaudi::Property< bool > m_doRPCDigit
Definition: NSWPRDValAlg.h:64
EDM_object::printEfficiency
void printEfficiency(std::ofstream &file)
Definition: EDM_object.cxx:120
EDM_object.h
NSWPRDValAlg::m_doCSCSDO
Gaudi::Property< bool > m_doCSCSDO
Definition: NSWPRDValAlg.h:55
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
NSWPRDValAlg::m_TGC_RDOContainerName
Gaudi::Property< std::string > m_TGC_RDOContainerName
Definition: NSWPRDValAlg.h:105
NSWPRDValAlg::m_doSTGCFastDigit
Gaudi::Property< bool > m_doSTGCFastDigit
Definition: NSWPRDValAlg.h:45
DEBUG
#define DEBUG
Definition: page_access.h:11
MuonPRDTest
Definition: CSCDigitVariables.h:10
NSWPRDValAlg::m_NSWMM_RDOContainerName
Gaudi::Property< std::string > m_NSWMM_RDOContainerName
Definition: NSWPRDValAlg.h:85
EDM_object::m_multiplet
std::vector< int > * m_multiplet
Definition: EDM_object.h:49
NSWPRDValAlg::m_doTGCHit
Gaudi::Property< bool > m_doTGCHit
Definition: NSWPRDValAlg.h:65
MuonVal::MuonTesterTree::fill
bool fill(const EventContext &ctx)
Fills the tree per call.
Definition: MuonTesterTree.cxx:89
NSWPRDValAlg::m_doSTGCSDO
Gaudi::Property< bool > m_doSTGCSDO
Definition: NSWPRDValAlg.h:71
MuonVal::MuonTesterTree::write
StatusCode write()
Finally write the TTree objects.
Definition: MuonTesterTree.cxx:178
EventInfoRead.isMC
isMC
Definition: EventInfoRead.py:11
NSWPRDValAlg::m_doMDTHit
Gaudi::Property< bool > m_doMDTHit
Definition: NSWPRDValAlg.h:59
EDM_object::clearVars
void clearVars()
Definition: EDM_object.cxx:28
NSWPRDValAlg::m_NSWMM_DigitContainerName
Gaudi::Property< std::string > m_NSWMM_DigitContainerName
Definition: NSWPRDValAlg.h:84
NSWPRDValAlg::m_TGC_PRDContainerName
Gaudi::Property< std::string > m_TGC_PRDContainerName
Definition: NSWPRDValAlg.h:106
NSWPRDValAlg::m_csc_decoder
PublicToolHandle< Muon::ICSC_RDO_Decoder > m_csc_decoder
Definition: NSWPRDValAlg.h:39
dqBeamSpot.nEntries
int nEntries
Definition: dqBeamSpot.py:73
EDM_object::printInfo
void printInfo()
Definition: EDM_object.cxx:55
NSWPRDValAlg::m_CSC_RDOContainerName
Gaudi::Property< std::string > m_CSC_RDOContainerName
Definition: NSWPRDValAlg.h:91
NSWPRDValAlg::m_doMMDigit
Gaudi::Property< bool > m_doMMDigit
Definition: NSWPRDValAlg.h:51
NSWPRDValAlg::m_NSWsTGC_SDOContainerName
Gaudi::Property< std::string > m_NSWsTGC_SDOContainerName
Definition: NSWPRDValAlg.h:77
EDM_object::m_stationEta
std::vector< int > * m_stationEta
Definition: EDM_object.h:47
MuonVal::MuonTesterTree::addBranch
bool addBranch(std::shared_ptr< IMuonTesterBranch > branch)
Branch is added to the tree without transferring the ownership.
Definition: MuonTesterTree.cxx:61
NSWPRDValAlg::m_doRPCHit
Gaudi::Property< bool > m_doRPCHit
Definition: NSWPRDValAlg.h:62
NSWPRDValAlg::m_MDT_DigitContainerName
Gaudi::Property< std::string > m_MDT_DigitContainerName
Definition: NSWPRDValAlg.h:96
NSWPRDValAlg::m_noMatchWarning
Gaudi::Property< bool > m_noMatchWarning
Definition: NSWPRDValAlg.h:114