ATLAS Offline Software
TgcRawDataMonitorAlgorithm.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
7 #include "TObjArray.h"
11 #include "CxxUtils/starts_with.h"
12 
13 namespace {
14  // Cut values on pt bein exploited throughout the monitoring
15  constexpr double pt_30_cut = 30. * Gaudi::Units::GeV;
16  constexpr double pt_15_cut = 15. * Gaudi::Units::GeV;
17  constexpr double pt_10_cut = 10. * Gaudi::Units::GeV;
18  constexpr double pt_4_cut = 4. * Gaudi::Units::GeV;
19 
21  constexpr double barrel_end = 1.05;
22  constexpr double eifi_boundary = 1.3;
23  constexpr double endcap_end = 1.9;
24  constexpr double trigger_end = 2.4;
25 
26  // offset for better drawing
27  constexpr double tgc_coin_phi_small_offset = 0.0001;
28 
29  // NSW-related parameters
30  constexpr double nsw_rmax = 5000;
31  constexpr double nsw_rmin = 900;
32  constexpr double nsw_z = 7824.46;
33  constexpr double nsw_rindex_div = 255;
34  constexpr double nsw_rindex_step = ( nsw_rmax - nsw_rmin ) / nsw_rindex_div;
35 }
36 TgcRawDataMonitorAlgorithm::TgcRawDataMonitorAlgorithm(const std::string &name, ISvcLocator *pSvcLocator) :
37  AthMonitorAlgorithm(name, pSvcLocator) {
38 }
39 
41  ATH_MSG_DEBUG("initialize()");
56 
57  ATH_CHECK(m_extrapolator.retrieve(DisableTool{m_extrapolator.empty()}));
58  ATH_CHECK(m_tgcMonTool.retrieve(DisableTool{m_tgcMonTool.empty()}));
59  ATH_CHECK(m_muonSelectionTool.retrieve(DisableTool{m_muonSelectionTool.empty()}));
60  ATH_CHECK(m_GoodRunsListSelectorTool.retrieve(DisableTool{m_GoodRunsListSelectorTool.empty()}));
61 
62  ATH_CHECK(m_L1MenuKey.initialize()); // ReadHandleKey, but DetStore (so renounce)
65 
66  m_extZposition.push_back(m_M1_Z);
67  m_extZposition.push_back(m_M2_Z);
68  m_extZposition.push_back(m_M3_Z);
69  m_extZposition.push_back(m_EI_Z);
70  m_extZposition.push_back(m_FI_Z);
71  m_extZposition.push_back(-m_M1_Z);
72  m_extZposition.push_back(-m_M2_Z);
73  m_extZposition.push_back(-m_M3_Z);
74  m_extZposition.push_back(-m_EI_Z);
75  m_extZposition.push_back(-m_FI_Z);
76 
77 
78  if(m_ctpDecMonList!=""){
79  m_CtpDecMonObj.clear();
80  TString Str = m_ctpDecMonList.value();// format="Tit:L1_MU20_Run3,Mul:1,HLT:HLT_mu26_ivarmedium_L1MU20,RPC:6,TGC:12FCH;"
81  std::unique_ptr<TObjArray> monTrigs( Str.Tokenize(";") );
82  for(int i = 0 ; i < monTrigs->GetEntries() ; i++){
83  TString monTrig = monTrigs->At(i)->GetName();
84  if(monTrig.IsNull())continue;
85  CtpDecMonObj monObj;
86  monObj.trigItem = monObj.title = "dummy";
87  monObj.rpcThr=monObj.tgcThr=monObj.multiplicity=0;
88  monObj.tgcF=monObj.tgcC=monObj.tgcH=monObj.rpcR=monObj.rpcM=false;
89  std::unique_ptr<TObjArray> monElement( monTrig.Tokenize(",") );
90  for(int j = 0 ; j < monElement->GetEntries() ; j++){
91  std::string sysItem = monElement->At(j)->GetName();
92  if(sysItem.empty())continue;
93  std::string item = sysItem.substr(4,sysItem.size());// remove "Tit:", "CTP:", "HLT:", "RPC:", "TGC:"
94  if(CxxUtils::starts_with (sysItem, "Tit")){
95  monObj.title = item;
96  }else if(CxxUtils::starts_with (sysItem, "Mul")){
97  monObj.multiplicity = std::atoi(item.data());
98  }else if(CxxUtils::starts_with (sysItem, "CTP")|| CxxUtils::starts_with (sysItem, "HLT")){
99  monObj.trigItem = item;
100  }else if(CxxUtils::starts_with (sysItem, "RPC")){
101  monObj.rpcThr = std::atoi(item.data());
102  monObj.rpcR = (item.find('R')!=std::string::npos);
103  monObj.rpcM = (item.find('M')!=std::string::npos);
104  }else if(CxxUtils::starts_with (sysItem, "TGC")){
105  monObj.tgcThr = std::atoi(item.data());
106  monObj.tgcF = (item.find('F')!=std::string::npos);
107  monObj.tgcC = (item.find('C')!=std::string::npos);
108  monObj.tgcH = (item.find('H')!=std::string::npos);
109  }
110  }
111  m_CtpDecMonObj.push_back(monObj);
112  }
113  }
114 
115  if(m_thrPatternList!=""){
116  m_thrMonList.clear();
117  TString Str = m_thrPatternList.value();
118  std::unique_ptr<TObjArray> arr( Str.Tokenize(",") );
119  for(int i = 0 ; i < arr->GetEntries() ; i++){
120  std::string name = arr->At(i)->GetName();
121  if(!CxxUtils::starts_with (name, "MU"))continue;
122  m_thrMonList.insert(name);
123  }
124  }
125 
126  if(m_maskChannelFileName!=""){
127  ATH_MSG_INFO("Opening mask channel file: " << m_maskChannelFileName);
128  std::ifstream fi(m_maskChannelFileName);
129  if(fi){
130  std::string str;
131  while(getline(fi,str)){
132  m_maskChannelList.insert(str);
133  }
134  }
135  ATH_MSG_INFO("Number of mask channels = " << m_maskChannelList.size());
136  fi.close();
137  }
138 
139  return StatusCode::SUCCESS;
140 }
141 
142 StatusCode
144  // Print out all available muon triggers
145  // This is to be used when making a list of triggers
146  // to be monitored, and writted in .py config file
147  // The defult should be FALSE
149  ATH_MSG_DEBUG("printAvailableMuonTriggers");
150  if( getTrigDecisionTool().empty() ){
151  ATH_MSG_ERROR("TDT is not availeble");
152  return StatusCode::FAILURE;
153  }else{
154  std::set<std::string> available_muon_triggers;
155  auto chainGroup = getTrigDecisionTool()->getChainGroup(".*");
156  if( chainGroup != nullptr ){
157  auto triggerList = chainGroup->getListOfTriggers();
158  if( !triggerList.empty() ){
159  for(const auto &trig : triggerList) {
160  std::string thisTrig = trig;
161  if( thisTrig.find("mu")==std::string::npos && thisTrig.find("MU")==std::string::npos)continue;
162  if(getTrigDecisionTool()->getNavigationFormat() == "TriggerElement") { // run 2 access
163  auto fc = getTrigDecisionTool()->features(thisTrig.data(),TrigDefs::alsoDeactivateTEs);
164  for(const auto& comb : fc.getCombinations()){
165  auto initRoIs = comb.get<TrigRoiDescriptor>("initialRoI",TrigDefs::alsoDeactivateTEs);
166  for(const auto& roi : initRoIs){
167  if( roi.empty() )continue;
168  if( roi.cptr()==nullptr ) continue;
169  // found an available muon trigger here
170  available_muon_triggers.insert(thisTrig);
171  }
172  }
173  }else{ // run 3 access
174  auto initialRoIs = getTrigDecisionTool()->features<TrigRoiDescriptorCollection>(thisTrig.data(), TrigDefs::includeFailedDecisions, "", TrigDefs::lastFeatureOfType, "initialRoI");
175  for(const auto& roiLinkInfo : initialRoIs) {
176  if( !roiLinkInfo.isValid() )continue;
177  auto roiEL = roiLinkInfo.link;
178  if( !roiEL.isValid() )continue;
179  auto roi = *roiEL;
180  if( roi==nullptr ) continue;
181  // found an available muon trigger here
182  available_muon_triggers.insert(thisTrig);
183  }
184  }
185  }
186  }
187  }
188  for(const auto& trig : available_muon_triggers){
189  ATH_MSG_INFO("Available Muon Trigger: " << trig);
190  }
191  }
192  }
193  return StatusCode::SUCCESS;
194 }
195 
196 std::set<std::string>
199  ATH_MSG_DEBUG("Preparing trigger information");
200  std::set<std::string> list_of_single_muon_triggers;
201  if ( !getTrigDecisionTool().empty() ){
202  auto chainGroup = getTrigDecisionTool()->getChainGroup("HLT_.*");
203  if( chainGroup != nullptr ){
204  auto triggerList = chainGroup->getListOfTriggers();
205  if( !triggerList.empty() ){
206  for(const auto &trig : triggerList) {
207  if( trig.find("HLT_mu") != 0 )continue; // muon trigger
208  if( trig.find('-') != std::string::npos )continue; // vetoing topo item
209  if( trig.find("L1MU") == std::string::npos )continue; // RoI-seedeed L1 muon trigger
210  if( trig.find("mu") != trig.rfind("mu") )continue; // mu occurrence only once -> single muon trigger
211  if( trig.find("MU") != trig.rfind("MU") )continue; // MU occurrence only once -> single muon trigger
212  list_of_single_muon_triggers.insert( trig );
213  }
214  }
215  }
216  }
217  return list_of_single_muon_triggers;
218 }
219 
220 const xAOD::Vertex*
221 TgcRawDataMonitorAlgorithm::getPrimaryVertex( const EventContext& ctx) const{
222  const xAOD::Vertex* primVertex = nullptr;
223  if(!m_PrimaryVertexContainerKey.empty()){
225  if(primVtxContainer.isValid()){
226  for(const auto vtx : *primVtxContainer){
227  if(vtx->vertexType() == xAOD::VxType::VertexType::PriVtx){
228  primVertex = vtx;
229  break;
230  }
231  }
232  }
233  }
234  return primVertex;
235 }
236 
237 std::vector<TgcRawDataMonitorAlgorithm::TimedMuonRoI>
238 TgcRawDataMonitorAlgorithm::getRegionsOfInterest( const EventContext& ctx) const {
239 std::vector<TimedMuonRoI> AllBCMuonRoIs;
240  if (m_anaMuonRoI) {
241  ATH_MSG_DEBUG("Getting MuonRoI pointer");
242  /* raw LVL1MuonRoIs distributions */
243  bool isRun3 = false;
244  if (!m_MuonRoIContainerKey.empty()){
246  if(handle.isValid()) {
247  for(const auto roi : *handle.cptr()){
248  isRun3 = roi->isRun3();
249  TimedMuonRoI myMuonRoI(roi);// current BC
250  AllBCMuonRoIs.push_back(myMuonRoI);
251  }
252  }
253  }
254  if(isRun3){
255  if(!m_MuonRoIContainerBCm2Key.empty()){
257  if(handle.isValid()) {
258  for(const auto roi : *handle.cptr()){
259  TimedMuonRoI myMuonRoI(roi,-2);
260  AllBCMuonRoIs.push_back(myMuonRoI);
261  }
262  }
263  }
264  if(!m_MuonRoIContainerBCm1Key.empty()){
266  if(handle.isValid()) {
267  for(const auto roi : *handle.cptr()){
268  TimedMuonRoI myMuonRoI(roi,-1);
269  AllBCMuonRoIs.push_back(myMuonRoI);
270  }
271  }
272  }
273  if(!m_MuonRoIContainerBCp1Key.empty()){
275  if(handle.isValid()) {
276  for(const auto roi : *handle.cptr()){
277  TimedMuonRoI myMuonRoI(roi,+1);
278  AllBCMuonRoIs.push_back(myMuonRoI);
279  }
280  }
281  }
282  if(!m_MuonRoIContainerBCp2Key.empty()){
284  if(handle.isValid()) {
285  for(const auto roi : *handle.cptr()){
286  const TimedMuonRoI myMuonRoI(roi,+2);
287  AllBCMuonRoIs.push_back(myMuonRoI);
288  }
289  }
290  }
291  }
292  }
293  return AllBCMuonRoIs;
294 }
295 
296 void
297 TgcRawDataMonitorAlgorithm::fillRoiHistograms(const std::vector<TgcRawDataMonitorAlgorithm::TimedMuonRoI> & roiVec, const EventContext& ctx) const{
299  if( not roiVec.empty() ){
300  ATH_MSG_DEBUG("Filling MuonRoI-only histograms");
301  MonVariables roi_variables;
302  auto roi_bcid = Monitored::Scalar<int>("roi_bcid", GetEventInfo(ctx)->bcid());
303  roi_variables.push_back(roi_bcid);
304  auto roi_pileup = Monitored::Scalar<int>("roi_pileup", lbAverageInteractionsPerCrossing(ctx));
305  roi_variables.push_back(roi_pileup);
306  auto roi_lumiBlock = Monitored::Scalar<int>("roi_lumiBlock", GetEventInfo(ctx)->lumiBlock());
307  roi_variables.push_back(roi_lumiBlock);
308  auto roi_timing = Monitored::Collection("roi_timing", roiVec, [](const TimedMuonRoI& m) {
309  return m.timing;
310  });
311  roi_variables.push_back(roi_timing);
312  auto roi_currentBC = Monitored::Collection("roi_currentBC", roiVec, [](const TimedMuonRoI& m) {
313  return m.timing==0;
314  });
315  roi_variables.push_back(roi_currentBC);
316  auto roi_previousBC = Monitored::Collection("roi_previousBC", roiVec, [](const TimedMuonRoI& m) {
317  return m.timing==-1;
318  });
319  roi_variables.push_back(roi_previousBC);
320  auto roi_nextBC = Monitored::Collection("roi_nextBC", roiVec, [](const TimedMuonRoI& m) {
321  return m.timing==+1;
322  });
323  roi_variables.push_back(roi_nextBC);
324  auto roi_roiNumber = Monitored::Collection("roi_roiNumber", roiVec, [](const TimedMuonRoI& m) {
325  return m.muonRoI->getRoI();
326  });
327  roi_variables.push_back(roi_roiNumber);
328  auto roi_sector = Monitored::Collection("roi_sector", roiVec, [](const TimedMuonRoI& m) {
329  return (m.muonRoI->getHemisphere() == xAOD::MuonRoI::Positive)?(m.muonRoI->getSectorID()+1):(-1 * m.muonRoI->getSectorID()-1);
330  });
331  roi_variables.push_back(roi_sector);
332  auto roi_sectorAbs = Monitored::Collection("roi_sectorAbs", roiVec, [](const TimedMuonRoI& m) {
333  return m.muonRoI->getSectorID()+1;
334  });
335  roi_variables.push_back(roi_sectorAbs);
336  auto roi_sector_wBW3Coin = Monitored::Collection("roi_sector_wBW3Coin", roiVec, [](const TimedMuonRoI& m) {
337  return (m.muonRoI->getBW3Coincidence()) ? ((m.muonRoI->getHemisphere() == xAOD::MuonRoI::Positive)?(m.muonRoI->getSectorID()+1):(-1 * m.muonRoI->getSectorID()-1)) : (-999);
338  });
339  roi_variables.push_back(roi_sector_wBW3Coin);
340  auto roi_sector_wInnerCoin = Monitored::Collection("roi_sector_wInnerCoin", roiVec, [](const TimedMuonRoI& m) {
341  return (m.muonRoI->getInnerCoincidence()) ? ((m.muonRoI->getHemisphere() == xAOD::MuonRoI::Positive)?(m.muonRoI->getSectorID()+1):(-1 * m.muonRoI->getSectorID()-1)) : (-999);
342  });
343  roi_variables.push_back(roi_sector_wInnerCoin);
344  auto roi_eta = Monitored::Collection("roi_eta", roiVec, [](const TimedMuonRoI& m) {
345  return m.muonRoI->eta();
346  });
347  roi_variables.push_back(roi_eta);
348  auto roi_eta_rpc = Monitored::Collection("roi_eta_rpc", roiVec, [](const TimedMuonRoI& m) {
349  return (m.muonRoI->getSource() == xAOD::MuonRoI::Barrel)?(m.muonRoI->eta()):(-10);
350  });
351  roi_variables.push_back(roi_eta_rpc);
352  auto roi_eta_tgc = Monitored::Collection("roi_eta_tgc", roiVec, [](const TimedMuonRoI& m) {
353  return (m.muonRoI->getSource() != xAOD::MuonRoI::Barrel)?(m.muonRoI->eta()):(-10);
354  });
355  roi_variables.push_back(roi_eta_tgc);
356  auto roi_wInnerCoinEtaUpTo1p3 = Monitored::Collection("roi_wInnerCoinEtaUpTo1p3", roiVec, [](const TimedMuonRoI& m) {
357  return (m.muonRoI->getSource() != xAOD::MuonRoI::Barrel && std::abs(m.muonRoI->eta()) < 1.3 && m.muonRoI->getInnerCoincidence());
358  });
359  roi_variables.push_back(roi_wInnerCoinEtaUpTo1p3);
360  auto roi_wInnerCoinEtaBeyond1p3 = Monitored::Collection("roi_wInnerCoinEtaBeyond1p3", roiVec, [](const TimedMuonRoI& m) {
361  return (m.muonRoI->getSource() != xAOD::MuonRoI::Barrel && std::abs(m.muonRoI->eta()) > 1.3 && m.muonRoI->getInnerCoincidence());
362  });
363  roi_variables.push_back(roi_wInnerCoinEtaBeyond1p3);
364  auto roi_eta_wInnerCoin = Monitored::Collection("roi_eta_wInnerCoin", roiVec, [](const TimedMuonRoI& m) {
365  return (m.muonRoI->getInnerCoincidence() && m.muonRoI->getSource() != xAOD::MuonRoI::Barrel)?(m.muonRoI->eta()):(-10);
366  });
367  roi_variables.push_back(roi_eta_wInnerCoin);
368  auto roi_eta_wBW3Coin = Monitored::Collection("roi_eta_wBW3Coin", roiVec, [](const TimedMuonRoI& m) {
369  return (m.muonRoI->getBW3Coincidence() && m.muonRoI->getSource() != xAOD::MuonRoI::Barrel)?(m.muonRoI->eta()):(-10);
370  });
371  roi_variables.push_back(roi_eta_wBW3Coin);
372  auto roi_eta_wInnerCoinVeto = Monitored::Collection("roi_eta_wInnerCoinVeto", roiVec, [](const TimedMuonRoI& m) {
373  return (!m.muonRoI->getInnerCoincidence() && m.muonRoI->getSource() != xAOD::MuonRoI::Barrel)?(m.muonRoI->eta()):(-10);
374  });
375  roi_variables.push_back(roi_eta_wInnerCoinVeto);
376  auto roi_eta_wBW3CoinVeto = Monitored::Collection("roi_eta_wBW3CoinVeto", roiVec, [](const TimedMuonRoI& m) {
377  return (!m.muonRoI->getBW3Coincidence() && m.muonRoI->getSource() != xAOD::MuonRoI::Barrel)?(m.muonRoI->eta()):(-10);
378  });
379  roi_variables.push_back(roi_eta_wBW3CoinVeto);
380  auto roi_phi = Monitored::Collection("roi_phi", roiVec, [](const TimedMuonRoI& m) {
381  return m.muonRoI->phi();
382  });
383  roi_variables.push_back(roi_phi);
384  auto roi_phi_sideA = Monitored::Collection("roi_phi_sideA", roiVec, [](const TimedMuonRoI& m) {
385  return ( (m.muonRoI->getHemisphere() == xAOD::MuonRoI::Positive)?(m.muonRoI->phi()):(-10) );
386  });
387  roi_variables.push_back(roi_phi_sideA);
388  auto roi_phi_sideC = Monitored::Collection("roi_phi_sideC", roiVec, [](const TimedMuonRoI& m) {
389  return ( (m.muonRoI->getHemisphere() == xAOD::MuonRoI::Negative)?(m.muonRoI->phi()):(-10) );
390  });
391  roi_variables.push_back(roi_phi_sideC);
392  auto roi_phi_rpc = Monitored::Collection("roi_phi_rpc", roiVec, [](const TimedMuonRoI& m) {
393  return (m.muonRoI->getSource() == xAOD::MuonRoI::Barrel) ? m.muonRoI->phi() : -10;
394  });
395  roi_variables.push_back(roi_phi_rpc);
396  auto roi_phi_tgc = Monitored::Collection("roi_phi_tgc", roiVec, [](const TimedMuonRoI& m) {
397  return (m.muonRoI->getSource() != xAOD::MuonRoI::Barrel) ? m.muonRoI->phi() : -10;
398  });
399  roi_variables.push_back(roi_phi_tgc);
400  auto roi_phi_wInnerCoin = Monitored::Collection("roi_phi_wInnerCoin", roiVec, [](const TimedMuonRoI& m) {
401  return (m.muonRoI->getInnerCoincidence() && m.muonRoI->getSource() != xAOD::MuonRoI::Barrel)?(m.muonRoI->phi()):(-10);;
402  });
403  roi_variables.push_back(roi_phi_wInnerCoin);
404  auto roi_phi_wBW3Coin = Monitored::Collection("roi_phi_wBW3Coin", roiVec, [](const TimedMuonRoI& m) {
405  return (m.muonRoI->getBW3Coincidence() && m.muonRoI->getSource() != xAOD::MuonRoI::Barrel)?(m.muonRoI->phi()):(-10);;
406  });
407  roi_variables.push_back(roi_phi_wBW3Coin);
408  auto roi_phi_wInnerCoinVeto = Monitored::Collection("roi_phi_wInnerCoinVeto", roiVec, [](const TimedMuonRoI& m) {
409  return (!m.muonRoI->getInnerCoincidence() && m.muonRoI->getSource() != xAOD::MuonRoI::Barrel)?(m.muonRoI->phi()):(-10);;
410  });
411  roi_variables.push_back(roi_phi_wInnerCoinVeto);
412  auto roi_phi_wBW3CoinVeto = Monitored::Collection("roi_phi_wBW3CoinVeto", roiVec, [](const TimedMuonRoI& m) {
413  return (!m.muonRoI->getBW3Coincidence() && m.muonRoI->getSource() != xAOD::MuonRoI::Barrel)?(m.muonRoI->phi()):(-10);;
414  });
415  roi_variables.push_back(roi_phi_wBW3CoinVeto);
416  auto roi_phi_wBW3Coin_sideA = Monitored::Collection("roi_phi_wBW3Coin_sideA", roiVec, [](const TimedMuonRoI& m) {
417  return (m.muonRoI->getBW3Coincidence() && m.muonRoI->getHemisphere() == xAOD::MuonRoI::Positive)?(m.muonRoI->phi()):(-10);;
418  });
419  roi_variables.push_back(roi_phi_wBW3Coin_sideA);
420  auto roi_phi_wBW3Coin_sideC = Monitored::Collection("roi_phi_wBW3Coin_sideC", roiVec, [](const TimedMuonRoI& m) {
421  return (m.muonRoI->getBW3Coincidence() && m.muonRoI->getHemisphere() == xAOD::MuonRoI::Negative)?(m.muonRoI->phi()):(-10);;
422  });
423  roi_variables.push_back(roi_phi_wBW3Coin_sideC);
424  auto roi_phi_wBW3CoinVeto_sideA = Monitored::Collection("roi_phi_wBW3CoinVeto_sideA", roiVec, [](const TimedMuonRoI& m) {
425  return (!m.muonRoI->getBW3Coincidence() && m.muonRoI->getHemisphere() == xAOD::MuonRoI::Positive)?(m.muonRoI->phi()):(-10);;
426  });
427  roi_variables.push_back(roi_phi_wBW3CoinVeto_sideA);
428  auto roi_phi_wBW3CoinVeto_sideC = Monitored::Collection("roi_phi_wBW3CoinVeto_sideC", roiVec, [](const TimedMuonRoI& m) {
429  return (!m.muonRoI->getBW3Coincidence() && m.muonRoI->getHemisphere() == xAOD::MuonRoI::Negative)?(m.muonRoI->phi()):(-10);;
430  });
431  roi_variables.push_back(roi_phi_wBW3CoinVeto_sideC);
432  auto roi_thr = Monitored::Collection("roi_thr", roiVec, [](const TimedMuonRoI& m) {
433  return m.muonRoI->getThrNumber();
434  });
435  roi_variables.push_back(roi_thr);
436  auto roi_rpc = Monitored::Collection("roi_rpc", roiVec, [](const TimedMuonRoI& m) {
437  return m.muonRoI->getSource() == xAOD::MuonRoI::Barrel;
438  });
439  roi_variables.push_back(roi_rpc);
440  auto roi_tgc = Monitored::Collection("roi_tgc", roiVec, [](const TimedMuonRoI& m) {
441  return m.muonRoI->getSource() != xAOD::MuonRoI::Barrel;
442  });
443  roi_variables.push_back(roi_tgc);
444  auto roi_barrel = Monitored::Collection("roi_barrel", roiVec, [](const TimedMuonRoI& m) {
445  return m.muonRoI->getSource() == xAOD::MuonRoI::Barrel;
446  });
447  roi_variables.push_back(roi_barrel);
448  auto roi_endcap = Monitored::Collection("roi_endcap", roiVec, [](const TimedMuonRoI& m) {
449  return m.muonRoI->getSource() == xAOD::MuonRoI::Endcap;
450  });
451  roi_variables.push_back(roi_endcap);
452  auto roi_forward = Monitored::Collection("roi_forward", roiVec, [](const TimedMuonRoI& m) {
453  return m.muonRoI->getSource() == xAOD::MuonRoI::Forward;
454  });
455  roi_variables.push_back(roi_forward);
456  auto roi_phi_barrel = Monitored::Collection("roi_phi_barrel", roiVec, [](const TimedMuonRoI& m) {
457  return (m.muonRoI->getSource() == xAOD::MuonRoI::Barrel) ? m.muonRoI->phi() : -10;
458  });
459  roi_variables.push_back(roi_phi_barrel);
460  auto roi_phi_endcap = Monitored::Collection("roi_phi_endcap", roiVec, [](const TimedMuonRoI& m) {
461  return (m.muonRoI->getSource() == xAOD::MuonRoI::Endcap) ? m.muonRoI->phi() : -10;
462  });
463  roi_variables.push_back(roi_phi_endcap);
464  auto roi_phi_forward = Monitored::Collection("roi_phi_forward", roiVec, [](const TimedMuonRoI& m) {
465  return (m.muonRoI->getSource() == xAOD::MuonRoI::Forward) ? m.muonRoI->phi() : -10;
466  });
467  roi_variables.push_back(roi_phi_forward);
468  auto roi_sideA = Monitored::Collection("roi_sideA", roiVec, [](const TimedMuonRoI& m) {
469  return m.muonRoI->getHemisphere() == xAOD::MuonRoI::Positive;
470  });
471  roi_variables.push_back(roi_sideA);
472  auto roi_sideC = Monitored::Collection("roi_sideC", roiVec, [](const TimedMuonRoI& m) {
473  return m.muonRoI->getHemisphere() == xAOD::MuonRoI::Negative;
474  });
475  roi_variables.push_back(roi_sideC);
476  auto thrmask1 = Monitored::Collection("thrmask1", roiVec, [](const TimedMuonRoI& m) {
477  return m.muonRoI->getThrNumber() == 1;
478  });
479  roi_variables.push_back(thrmask1);
480  auto thrmask2 = Monitored::Collection("thrmask2", roiVec, [](const TimedMuonRoI& m) {
481  return m.muonRoI->getThrNumber() == 2;
482  });
483  roi_variables.push_back(thrmask2);
484  auto thrmask3 = Monitored::Collection("thrmask3", roiVec, [](const TimedMuonRoI& m) {
485  return m.muonRoI->getThrNumber() == 3;
486  });
487  roi_variables.push_back(thrmask3);
488  auto thrmask4 = Monitored::Collection("thrmask4", roiVec, [](const TimedMuonRoI& m) {
489  return m.muonRoI->getThrNumber() == 4;
490  });
491  roi_variables.push_back(thrmask4);
492  auto thrmask5 = Monitored::Collection("thrmask5", roiVec, [](const TimedMuonRoI& m) {
493  return m.muonRoI->getThrNumber() == 5;
494  });
495  roi_variables.push_back(thrmask5);
496  auto thrmask6 = Monitored::Collection("thrmask6", roiVec, [](const TimedMuonRoI& m) {
497  return m.muonRoI->getThrNumber() == 6;
498  });
499  roi_variables.push_back(thrmask6);
500  auto thrmask7 = Monitored::Collection("thrmask7", roiVec, [](const TimedMuonRoI& m) {
501  return m.muonRoI->getThrNumber() == 7;
502  });
503  roi_variables.push_back(thrmask7);
504  auto thrmask8 = Monitored::Collection("thrmask8", roiVec, [](const TimedMuonRoI& m) {
505  return m.muonRoI->getThrNumber() == 8;
506  });
507  roi_variables.push_back(thrmask8);
508  auto thrmask9 = Monitored::Collection("thrmask9", roiVec, [](const TimedMuonRoI& m) {
509  return m.muonRoI->getThrNumber() == 9;
510  });
511  roi_variables.push_back(thrmask9);
512  auto thrmask10 = Monitored::Collection("thrmask10", roiVec, [](const TimedMuonRoI& m) {
513  return m.muonRoI->getThrNumber() == 10;
514  });
515  roi_variables.push_back(thrmask10);
516  auto thrmask11 = Monitored::Collection("thrmask11", roiVec, [](const TimedMuonRoI& m) {
517  return m.muonRoI->getThrNumber() == 11;
518  });
519  roi_variables.push_back(thrmask11);
520  auto thrmask12 = Monitored::Collection("thrmask12", roiVec, [](const TimedMuonRoI& m) {
521  return m.muonRoI->getThrNumber() == 12;
522  });
523  roi_variables.push_back(thrmask12);
524  auto thrmask13 = Monitored::Collection("thrmask13", roiVec, [](const TimedMuonRoI& m) {
525  return m.muonRoI->getThrNumber() == 13;
526  });
527  roi_variables.push_back(thrmask13);
528  auto thrmask14 = Monitored::Collection("thrmask14", roiVec, [](const TimedMuonRoI& m) {
529  return m.muonRoI->getThrNumber() == 14;
530  });
531  roi_variables.push_back(thrmask14);
532  auto thrmask15 = Monitored::Collection("thrmask15", roiVec, [](const TimedMuonRoI& m) {
533  return m.muonRoI->getThrNumber() == 15;
534  });
535  roi_variables.push_back(thrmask15);
536  auto roi_charge = Monitored::Collection("roi_charge", roiVec, [](const TimedMuonRoI& m) {
537  return (m.muonRoI->getCharge()==xAOD::MuonRoI::Neg)?(-1):((m.muonRoI->getCharge()==xAOD::MuonRoI::Pos)?(+1):(0));
538  });
539  roi_variables.push_back(roi_charge);
540  auto roi_bw3coin = Monitored::Collection("roi_bw3coin",roiVec,[](const TimedMuonRoI& m) {
541  return m.muonRoI->getBW3Coincidence();
542  });
543  roi_variables.push_back(roi_bw3coin);
544  auto roi_bw3coinveto = Monitored::Collection("roi_bw3coinveto",roiVec,[](const TimedMuonRoI& m) {
545  return !m.muonRoI->getBW3Coincidence() && m.muonRoI->getSource()!=xAOD::MuonRoI::Barrel;
546  });
547  roi_variables.push_back(roi_bw3coinveto);
548  auto roi_innercoin = Monitored::Collection("roi_innercoin",roiVec,[](const TimedMuonRoI& m) {
549  return m.muonRoI->getInnerCoincidence();
550  });
551  roi_variables.push_back(roi_innercoin);
552  auto roi_innveto = Monitored::Collection("roi_innveto",roiVec,[](const TimedMuonRoI& m) {
553  return !m.muonRoI->getInnerCoincidence() && m.muonRoI->getSource()!=xAOD::MuonRoI::Barrel;
554  });
555  roi_variables.push_back(roi_innveto);
556  auto roi_goodmf = Monitored::Collection("roi_goodmf",roiVec,[](const TimedMuonRoI& m) {
557  return m.muonRoI->getGoodMF();
558  });
559  roi_variables.push_back(roi_goodmf);
560  auto roi_badmf = Monitored::Collection("roi_badmf",roiVec,[](const TimedMuonRoI& m){
561  return !m.muonRoI->getGoodMF() && m.muonRoI->getSource()!=xAOD::MuonRoI::Barrel;
562  });
563  roi_variables.push_back(roi_badmf);
564  auto roi_ismorecand = Monitored::Collection("roi_ismorecand",roiVec,[](const TimedMuonRoI& m){
565  return m.muonRoI->isMoreCandInRoI();
566  });
567  roi_variables.push_back(roi_ismorecand);
568  auto roi_posCharge = Monitored::Collection("roi_posCharge",roiVec,[](const TimedMuonRoI& m){
569  return m.muonRoI->getCharge()==xAOD::MuonRoI::Pos;
570  });
571  roi_variables.push_back(roi_posCharge);
572  auto roi_negCharge = Monitored::Collection("roi_negCharge",roiVec,[](const TimedMuonRoI& m){
573  return m.muonRoI->getCharge()==xAOD::MuonRoI::Neg;
574  });
575  roi_variables.push_back(roi_negCharge);
576  fill(m_packageName, roi_variables);
577  ATH_MSG_DEBUG("End filling MuonRoI-only histograms");
578  }
579 }
580 
581 void
582 TgcRawDataMonitorAlgorithm::fillHistogramsAfterTriggerDecision(std::vector<TgcRawDataMonitorAlgorithm::TimedMuonRoI> & roiVec) const {
584  if ( !getTrigDecisionTool().empty() && roiVec.size()>0 && m_monitorTriggerMultiplicity ) {
585  ATH_MSG_DEBUG("Filling histograms for MuonRoIs after trigger decision");
586  for(const auto& monObj : m_CtpDecMonObj){
587  std::set<unsigned int> allCands;
588  std::set<unsigned int> ctpMuonCands;
589  std::set<unsigned int> inputMuonCands;
590  // collecting roiWords out of the CTP decision
591  bool isRun2Legacy = false;
592  if(getTrigDecisionTool()->getNavigationFormat() == "TriggerElement") { // run 2 access
593  isRun2Legacy = true;
594  if(monObj.title.find("Run2Legacy")==std::string::npos) continue;
595  auto fc = getTrigDecisionTool()->features(monObj.trigItem.data(),TrigDefs::alsoDeactivateTEs);
596  for(const auto& comb : fc.getCombinations()){
597  auto initRoIs = comb.get<TrigRoiDescriptor>("initialRoI",TrigDefs::alsoDeactivateTEs);
598  for(const auto& roi : initRoIs){
599  if( roi.empty() )continue;
600  if( roi.cptr()==nullptr ) continue;
601  ctpMuonCands.insert(roi.cptr()->roiWord());
602  allCands.insert(roi.cptr()->roiWord());
603  }
604  }
605  }else{ // run 3 access
606  auto initialRoIs = getTrigDecisionTool()->features<TrigRoiDescriptorCollection>(monObj.trigItem.data(), TrigDefs::includeFailedDecisions, "", TrigDefs::lastFeatureOfType, "initialRoI");
607  for(const auto& roiLinkInfo : initialRoIs) {
608  if( !roiLinkInfo.isValid() )continue;
609  auto roiEL = roiLinkInfo.link;
610  if( !roiEL.isValid() )continue;
611  auto roi = *roiEL;
612  if( roi==nullptr ) continue;
613  ctpMuonCands.insert(roi->roiWord());
614  allCands.insert(roi->roiWord());
615  }
616  }
617  // collecting roiWords out of RPC/TGC
618  bool isRun3 = false;
619  for(const auto& allBcMuonRoI : roiVec){
620  const xAOD::MuonRoI* roi = allBcMuonRoI.muonRoI;
621  isRun3 = roi->isRun3();
622  if(roi->getSource()==xAOD::MuonRoI::Barrel){
623  if(roi->getThrNumber()<monObj.rpcThr)continue;
624  if(monObj.rpcM && !roi->isMoreCandInRoI())continue;
625  }else{
626  if(roi->getThrNumber()<monObj.tgcThr)continue;
627  if(monObj.tgcF && !roi->getBW3Coincidence())continue;
628  if(monObj.tgcC && !roi->getInnerCoincidence())continue;
629  if(monObj.tgcH && !roi->getGoodMF())continue;
630  }
631  inputMuonCands.insert(roi->roiWord());
632  allCands.insert(roi->roiWord());
633  }
634  if(!isRun3 && isRun2Legacy && monObj.title.find("Run2Legacy")==std::string::npos)continue; // Run2Legacy
635  if(!isRun3 && !isRun2Legacy && (monObj.title.find("Run2Legacy")!=std::string::npos||monObj.title.find("Run3")!=std::string::npos))continue; // Run2
636  if(isRun3 && monObj.title.find("Run3")==std::string::npos)continue; // Run3
637 
638  if(ctpMuonCands.size()==0 && inputMuonCands.size()<monObj.multiplicity)continue;
639 
640  std::vector<int> roiMatching_CTPin;
641  std::vector<int> roiMatching_CTPout;
642 
643  std::vector<double> roi_Eta;
644  std::vector<double> roi_Phi;
645  std::vector<double> roi_dRmin;
646  std::vector<double> roi_pTdiff;
647  std::vector<int> roi_ThrNum;
648  std::vector<int> roi_Charge;
649  std::vector<int> roi_BW3Coin;
650  std::vector<int> roi_InnerCoin;
651  std::vector<int> roi_GoodMF;
652  std::vector<int> roi_IsMoreCandInRoI;
653  std::vector<int> roi_PhiOverlap;
654  std::vector<int> roi_EtaOverlap;
655  std::vector<int> roi_isVetoed;
656  std::vector<bool> roi_inOk_outOk;
657  std::vector<bool> roi_inOk_outNg;
658  std::vector<bool> roi_inNg_outOk;
659 
660  for(const auto& allBcMuonRoI : roiVec){ // scan all MuonRoIs
661  const xAOD::MuonRoI* roi = allBcMuonRoI.muonRoI;
662  bool ctp_in = inputMuonCands.find(roi->roiWord())!=inputMuonCands.end();
663  bool ctp_out = ctpMuonCands.find(roi->roiWord())!=ctpMuonCands.end();
664  if(!ctp_in && !ctp_out)continue;
665  roiMatching_CTPin.push_back(ctp_in?1:0);
666  roiMatching_CTPout.push_back(ctp_out?1:0);
667  double dRmin = 1000;
668  double pTdiff = -15;
669  for(const auto& allBcMuonRoI2 : roiVec){ // scan all the other MuonRoIs to check the isolation
670  const xAOD::MuonRoI* roi2 = allBcMuonRoI2.muonRoI;
671  if(roi == roi2)continue;
672  double dr = xAOD::P4Helpers::deltaR(roi->eta(),roi->phi(),roi2->eta(),roi2->phi());
673  if(dr < dRmin){
674  dRmin = dr;
675  pTdiff = roi2->getThrNumber() - roi->getThrNumber();
676  }
677  }
678  // adjust the value so that the value can be in the histgram range
679  if(dRmin>999) dRmin = -0.05;
680  else if(dRmin>1.0) dRmin = 0.95;
681  roi_Eta.push_back(roi->eta());
682  roi_Phi.push_back(roi->phi());
683  roi_dRmin.push_back(dRmin);
684  roi_pTdiff.push_back(pTdiff);
685  roi_ThrNum.push_back((roi->getSource()==xAOD::MuonRoI::Barrel)?(roi->getThrNumber()):(-roi->getThrNumber()));
686  roi_Charge.push_back((roi->getCharge()==xAOD::MuonRoI::Neg)?(-1):((roi->getCharge()==xAOD::MuonRoI::Pos)?(+1):(0)));
687  roi_BW3Coin.push_back((roi->getSource()!=xAOD::MuonRoI::Barrel)?roi->getBW3Coincidence():-1);
688  roi_InnerCoin.push_back((roi->getSource()!=xAOD::MuonRoI::Barrel)?roi->getInnerCoincidence():-1);
689  roi_GoodMF.push_back((roi->getSource()!=xAOD::MuonRoI::Barrel)?roi->getGoodMF():-1);
690  roi_IsMoreCandInRoI.push_back((roi->getSource()==xAOD::MuonRoI::Barrel)?roi->isMoreCandInRoI():-1);
691  roi_PhiOverlap.push_back((roi->getSource()==xAOD::MuonRoI::Barrel)?roi->getPhiOverlap():-1);
692  roi_EtaOverlap.push_back(roi->getEtaOverlap());
693  roi_isVetoed.push_back(roi->isVetoed());
694  roi_inOk_outOk.push_back( ctp_in && ctp_out );
695  roi_inOk_outNg.push_back( ctp_in && !ctp_out );
696  roi_inNg_outOk.push_back( !ctp_in && ctp_out );
697  }
698 
699  MonVariables ctpMonVariables;
700  auto val_roiMatching_CTPin = Monitored::Collection("roiMatching_CTPin", roiMatching_CTPin);
701  auto val_roiMatching_CTPout = Monitored::Collection("roiMatching_CTPout", roiMatching_CTPout);
702 
703  auto val_ctpMultiplicity = Monitored::Scalar<int>("ctpMultiplicity",ctpMuonCands.size());
704  auto val_rawMultiplicity = Monitored::Scalar<int>("rawMultiplicity",inputMuonCands.size());
705  auto val_countDiff = Monitored::Scalar<int>("countDiff",ctpMuonCands.size()-inputMuonCands.size());
706 
707  auto val_roi_Eta = Monitored::Collection("Eta",roi_Eta);
708  auto val_roi_Phi = Monitored::Collection("Phi",roi_Phi);
709  auto val_roi_dRmin = Monitored::Collection("dRmin",roi_dRmin);
710  auto val_roi_pTdiff = Monitored::Collection("pTdiff",roi_pTdiff);
711  auto val_roi_ThrNum = Monitored::Collection("ThrNum",roi_ThrNum);
712  auto val_roi_Charge = Monitored::Collection("Charge",roi_Charge);
713  auto val_roi_BW3Coin = Monitored::Collection("BW3Coin",roi_BW3Coin);
714  auto val_roi_InnerCoin = Monitored::Collection("InnerCoin",roi_InnerCoin);
715  auto val_roi_GoodMF = Monitored::Collection("GoodMF",roi_GoodMF);
716  auto val_roi_IsMoreCandInRoI = Monitored::Collection("IsMoreCandInRoI",roi_IsMoreCandInRoI);
717  auto val_roi_PhiOverlap = Monitored::Collection("PhiOverlap",roi_PhiOverlap);
718  auto val_roi_EtaOverlap = Monitored::Collection("EtaOverlap",roi_EtaOverlap);
719  auto val_roi_isVetoed = Monitored::Collection("isVetoed",roi_isVetoed);
720  auto val_roi_inOk_outOk = Monitored::Collection("inOk_outOk",roi_inOk_outOk);
721  auto val_roi_inOk_outNg = Monitored::Collection("inOk_outNg",roi_inOk_outNg);
722  auto val_roi_inNg_outOk = Monitored::Collection("inNg_outOk",roi_inNg_outOk);
723 
724  ctpMonVariables.push_back(val_roiMatching_CTPin);
725  ctpMonVariables.push_back(val_roiMatching_CTPout);
726  ctpMonVariables.push_back(val_ctpMultiplicity);
727  ctpMonVariables.push_back(val_rawMultiplicity);
728  ctpMonVariables.push_back(val_countDiff);
729  ctpMonVariables.push_back(val_roi_Eta);
730  ctpMonVariables.push_back(val_roi_Phi);
731  ctpMonVariables.push_back(val_roi_dRmin);
732  ctpMonVariables.push_back(val_roi_pTdiff);
733  ctpMonVariables.push_back(val_roi_ThrNum);
734  ctpMonVariables.push_back(val_roi_Charge);
735  ctpMonVariables.push_back(val_roi_BW3Coin);
736  ctpMonVariables.push_back(val_roi_InnerCoin);
737  ctpMonVariables.push_back(val_roi_GoodMF);
738  ctpMonVariables.push_back(val_roi_IsMoreCandInRoI);
739  ctpMonVariables.push_back(val_roi_PhiOverlap);
740  ctpMonVariables.push_back(val_roi_EtaOverlap);
741  ctpMonVariables.push_back(val_roi_isVetoed);
742  ctpMonVariables.push_back(val_roi_inOk_outOk);
743  ctpMonVariables.push_back(val_roi_inOk_outNg);
744  ctpMonVariables.push_back(val_roi_inNg_outOk);
745  fill(m_packageName + monObj.title, ctpMonVariables);
746  }
747  ATH_MSG_DEBUG("End filling histograms for MuonRoIs after trigger decision");
748  }
750 }
751 
752 
754  ATH_MSG_DEBUG("fillHistograms()");
755 
756  if( !m_GoodRunsListSelectorTool.empty() ){
757  int runNumber = GetEventInfo(ctx)->runNumber();
758  int lumiBlockNr = GetEventInfo(ctx)->lumiBlock();
759  if(m_GoodRunsListSelectorTool->getGRLCollection()->IsEmpty()){
760  ATH_MSG_ERROR("Empty GRL");
761  return StatusCode::FAILURE;
762  }
763  bool pass = m_GoodRunsListSelectorTool->getGRLCollection()->HasRunLumiBlock(runNumber,lumiBlockNr);
764  if(pass){
765  ATH_MSG_DEBUG("passing GRL: run=" << runNumber << " lb=" << lumiBlockNr);
766  }else{
767  ATH_MSG_DEBUG("failed GRL: run=" << runNumber << " lb=" << lumiBlockNr);
768  return StatusCode::SUCCESS;
769  }
770  }
771 
772  if( !m_streamerFilter.empty() ) {
774  const unsigned int passBits = getTrigDecisionTool()->isPassedBits(m_streamerFilter);
775  const bool expressPass = passBits & TrigDefs::Express_passed;
776  if(!expressPass){
777  ATH_MSG_DEBUG("failed expressPass");
778  return StatusCode::SUCCESS;
779  }
780  }
781  bool pass = getTrigDecisionTool()->isPassed(m_streamerFilter,TrigDefs::Physics);
782  if(pass){
783  ATH_MSG_DEBUG("passing StreamerFilter: " << m_streamerFilter );
784  }else{
785  ATH_MSG_DEBUG("failed StreamerFilter: " << m_streamerFilter );
786  return StatusCode::SUCCESS;
787  }
788  }
789  if (auto sc = printOutAvailableMuonTriggers();not sc.isSuccess()) return sc;
790  auto list_of_single_muon_triggers = checkTriggerInfo();
791 
793 
794  const xAOD::Vertex* primVertex = getPrimaryVertex(ctx);
795 
796  double primaryVertexZ = (primVertex!=nullptr)?(primVertex->z()):(-999);
797  // define common monitoring variables //
798  auto mon_bcid = Monitored::Scalar<int>("mon_bcid", GetEventInfo(ctx)->bcid());
799  auto mon_pileup = Monitored::Scalar<int>("mon_pileup", lbAverageInteractionsPerCrossing(ctx));
800  auto mon_lb = Monitored::Scalar<int>("mon_lb", GetEventInfo(ctx)->lumiBlock());
801  auto mon_primvtx_z=Monitored::Scalar<double>("mon_primvtx_z",primaryVertexZ);
802 
803  fill(m_packageName+"_Common", mon_bcid, mon_pileup, mon_lb, mon_primvtx_z);
805  std::vector<TimedMuonRoI> AllBCMuonRoIs = getRegionsOfInterest(ctx);
806  fillRoiHistograms(AllBCMuonRoIs, ctx);
808  fillHistogramsAfterTriggerDecision(AllBCMuonRoIs);
809 
810 
812  std::map<const xAOD::MuonRoI*,std::set<std::string>> roiAndMenu;
813  std::map<std::string,std::vector<const xAOD::MuonRoI*>> menuAndRoIs;
814  fillMuonRoisInThresholdPattern(roiAndMenu, menuAndRoIs, AllBCMuonRoIs, ctx);
816 
818  std::vector < const xAOD::Muon* > oflmuons;
819  std::set < const xAOD::Muon* > biasedMuons;
820  std::vector < TimedMuon > mymuons;
821  std::map < std::string, std::vector< ExtPos > > extpositions;
822  std::vector< ExtPos > extpositions_pivot;
823  std::vector<double> deltaR_muons;
824  std::vector<double> deltaR_muons_roi;
825  std::vector<double> deltaR_muons_hlt;
826  std::vector<double> muon2pv_dz;
827  std::vector<double> muon2pv_dca;
828  std::vector<double> mymuon2pv_dz;
829  std::vector<double> mymuon2pv_dca;
830  if (m_anaOfflMuon) {
832  if (!muons.isValid()) {
833  ATH_MSG_ERROR("Failed to get xAOD::MuonContainer");
834  return StatusCode::SUCCESS;
835  }
836  ATH_MSG_DEBUG("Filling offline muon-related histograms");
837  for (const auto muon : *muons) {
838  // skip if muon is empty
839  if (muon == nullptr) continue;
840  // standard quality cuts for muons
841  if (muon->pt() < 1000.) continue;
842  // minimum requirements
843  if ( muon->author() > xAOD::Muon::Author::MuidSA )continue;
844  if ( muon->muonType() > xAOD::Muon::MuonType::MuonStandAlone )continue;
845  // very loose-quality muons
846  oflmuons.push_back(muon);
847  // selectable requirements
848  double dz=-999,dca=-999;
849  if( dataType() != DataType_t::cosmics ){
850  if(m_useMuonSelectorTool && !m_muonSelectionTool->accept(*muon)) continue;
851  if(m_useOnlyCombinedMuons && muon->muonType()!=xAOD::Muon::MuonType::Combined) continue;
853  if(!m_PrimaryVertexContainerKey.empty()){
854  if(primVertex==nullptr)continue;
855  auto trackParticle = muon->primaryTrackParticle();
856  if(trackParticle!=nullptr){
857  dz = trackParticle->z0() - primVertex->z();
858  dca = trackParticle->d0();
859  }
860  muon2pv_dz.push_back(dz);
861  muon2pv_dca.push_back(dca);
862  if( std::abs(dz-m_muonToPVdzOffset) > m_muonToPVdz )continue;
863  if( std::abs(dca) > m_muonToPVdca )continue;
864  }
865  }
866  // initialize for muon-isolation check
867  bool isolated = true;
868  // initialize for tag-and-probe check
869  bool probeOK = true;
870  if( m_TagAndProbe ) probeOK = false; // t&p should be performed
871  if( dataType() == DataType_t::cosmics ) probeOK = true; // won't performa t&p for cosmics because no enough muons
872  // OK, let's start looking at the second muons
873  for(const auto muon2 : *muons){
874  // skip if muon is empty
875  if (muon2 == nullptr) continue;
876 
877  // skip the same muon candidate
878  if( muon == muon2 )continue;
879 
880  // skip possible mismeasured muons
881  if( muon2->pt() < 1000. ) continue;
882 
883  // minimum requirements on muon quality
884  if ( muon2->author() > xAOD::Muon::Author::MuidSA )continue;
885  if ( muon2->muonType() > xAOD::Muon::MuonType::MuonStandAlone )continue;
886 
887  // tag muon to be only in the other region, barrel or endcap, to remove possible bias from the same region
889  ( (std::abs(muon->eta()) < barrel_end && std::abs(muon2->eta()) < barrel_end) ||
890  (std::abs(muon->eta()) > barrel_end && std::abs(muon2->eta()) > barrel_end) ) )continue;
891 
892  // isolation calculation
893  double dr_muons = xAOD::P4Helpers::deltaR(muon,muon2,false);
894  deltaR_muons.push_back(dr_muons);
895  if( dr_muons < m_isolationWindow ) isolated = false;
896 
897  // no need to check further if probeOK is already True
898  // 0) if muon-orthogonal triggers are avaialble/fired
899  // 1) if we don't use tag-and-probe
900  // 2) if TrigDecTool is not available
901  // 3) if the second muon matches the trigger requirement
902  if(probeOK)continue;
903 
904  // loop over the single muon triggers if at least one of them matches this second muon
905  for (const auto &trigName : list_of_single_muon_triggers) {
906  if(m_doExpressProcessing){ // check the express_express bit
907  const unsigned int passBits = getTrigDecisionTool()->isPassedBits(trigName.data());
908  const bool expressPass = passBits & TrigDefs::Express_passed;
909  if(!expressPass)continue;
910  }
911  // check if this particular tirgger has fired in this event
912  if (!getTrigDecisionTool()->isPassed(trigName.data(),TrigDefs::Physics)) continue;
913  ATH_MSG_DEBUG("This muon trigger, " << trigName << ", is fired in this event!!");
914  // check if this second muon matches the HLT muon trigger
915  if(getTrigDecisionTool()->getNavigationFormat() == "TriggerElement") { // run 2 access
916  ATH_MSG_DEBUG("Trying Run2-style feature access");
917  auto fc = getTrigDecisionTool()->features(trigName.data(),TrigDefs::Physics);
918  for(const auto& comb : fc.getCombinations()){
919  if(!comb.active())continue;
920  auto MuFeatureContainers = comb.get<xAOD::MuonContainer>("MuonEFInfo",TrigDefs::Physics);
921  for(const auto& mucont : MuFeatureContainers){
922  if(mucont.empty())continue;
923  if(mucont.te()==nullptr)continue;
924  if(!mucont.te()->getActiveState())continue;
925  for(const auto hltmu : *mucont.cptr()){
926  if (hltmu == nullptr) continue; // skip if hltmu is empty
927  if (hltmu->pt() < 1000.)continue; // skip if pT is very small
928  double dr = xAOD::P4Helpers::deltaR(muon2,hltmu,false);
929  deltaR_muons_hlt.push_back(dr);
930  if( dr < m_trigMatchWindow ){
931  probeOK = true;
932  ATH_MSG_DEBUG("Trigger matched: "<<trigName<<" dR=" << dr );
933  biasedMuons.insert(muon2);
934  }
935  }// end loop of mucont.cptr()
936  }// end loop of MuonFeatureContainers
937  }//end loop of Combinations
938  }else{ // run 3 access
939  ATH_MSG_DEBUG("Trying Run3-style feature access");
940  auto features = getTrigDecisionTool()->features < xAOD::MuonContainer > (trigName.data(), TrigDefs::Physics, "HLT_MuonsCB_RoI");
941  for (const auto& aaa : features) {
942  if (!aaa.isValid()) continue;
943  auto hltmu_link = aaa.link;
944  if (!hltmu_link.isValid()) continue;
945  auto hltmu = *hltmu_link;
946  if (hltmu == nullptr) continue; // skip if hltmu is empty
947  if (hltmu->pt() < 1000.)continue; // skip if pT is very small
948  double dr = xAOD::P4Helpers::deltaR(muon2,hltmu,false);
949  deltaR_muons_hlt.push_back(dr);
950  if( dr < m_trigMatchWindow ){
951  probeOK = true;
952  ATH_MSG_DEBUG("Trigger matched: "<<trigName<<" dR=" << dr );
953  biasedMuons.insert(muon2);
954  }
955  } // end loop of features
956  } // end IF Run2 or Run3 feature access
957  } // end loop of single muon triggers
958  // check if the second muon matches the single muon trigger
959  if(!probeOK) continue;
960  ATH_MSG_DEBUG("Basic Tag-and-Probe is OK");
961  // check further if this muon pair satisfies Z->mumu criteria
962  if( m_TagAndProbeZmumu && muon->charge() != muon2->charge() ){
963  double m2 = 2. * muon->pt() * muon2->pt() * ( std::cosh(muon->eta() - muon2->eta()) - std::cos(muon->phi() - muon2->phi()) );
964  double m = (m2>0.) ? ( std::sqrt(m2) ) : (0.);
965  double mdiff = std::abs( m - m_zMass );
966  probeOK = mdiff < m_zMassWindow;
967  ATH_MSG_DEBUG("Checking Zmumu cut: " << probeOK);
968  }
969  ATH_MSG_DEBUG("Final condition of probleOK for this muon is: " << probeOK);
970  if(probeOK) break; // no need to check further if probeOK is already True
971  } // end loop of the second muons
972  // check if the isolation requirement is OK
973  if(m_requireIsolated && !isolated)continue;
974  // check if the tag-and-probe requirement is OK
975  if(!probeOK)continue;
976 
977  TimedMuon mymuon;
978  /* fill basic info */
979  mymuon.muon = muon;
980  /* fill extrapolation info (only to TGC) */
981  if ( std::abs(muon->eta()) > 0.5 // only endcap region
982  && muon->pt() > m_pTCutOnExtrapolation ) { // only reasonably-high pT muons
983  for (const auto &z : m_extZposition) {
984  if( muon->eta()<0 && z>0 )continue;
985  if( muon->eta()>0 && z<0 )continue;
986  xAOD::Muon::TrackParticleType trkPtclType;
987  if(m_useIDTrackForExtrapolation){ trkPtclType = xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle;
988  }else if(m_useMSTrackForExtrapolation){trkPtclType = xAOD::Muon::TrackParticleType::MuonSpectrometerTrackParticle;
989  }else if(m_useCBTrackForExtrapolation){trkPtclType = xAOD::Muon::TrackParticleType::CombinedTrackParticle;
990  }else if(m_useExtMSTrackForExtrapolation){trkPtclType = xAOD::Muon::TrackParticleType::ExtrapolatedMuonSpectrometerTrackParticle;
991  }else if(m_useMSOnlyExtMSTrackForExtrapolation){trkPtclType = xAOD::Muon::TrackParticleType::MSOnlyExtrapolatedMuonSpectrometerTrackParticle;
992  }else{ trkPtclType = xAOD::Muon::TrackParticleType::Primary; } // default is Primary (i.e. same as muonType )
993  auto trackParticle = (m_useDirectPrimaryTrackForExtrapolation) ? muon->primaryTrackParticle() : muon->trackParticle( trkPtclType );
994  if(trackParticle==nullptr)continue;
995  auto matrix = std::make_unique<Amg::Transform3D>();
996  matrix->setIdentity();
997  matrix->translation().z() = z;
998  auto disc = std::make_unique < Trk::DiscSurface > (*matrix,
1001  const Trk::BoundaryCheck boundaryCheck = true;
1002  const auto extTrkParams = m_extrapolator->extrapolate(ctx,
1003  trackParticle->perigeeParameters(),
1004  *disc,
1006  boundaryCheck,
1007  Trk::muon);
1008  if(extTrkParams != nullptr){
1009  if( std::abs(extTrkParams->position().z() - z) > 10. )continue; // wrong extrapolation
1010  ExtPos ext;
1011  ext.extPosZ = z;
1012  ext.extPos = extTrkParams->position();
1013  ext.extVec = extTrkParams->momentum();
1014  Amg::Vector3D extVec(extTrkParams->position().x(),extTrkParams->position().y(),z);
1015  ext.passedChambers = m_tgcMonTool->getPassedChambers(extVec);
1016  ext.muon = muon;
1017  if( std::abs( std::abs(z) - m_M3_Z ) < 10. && // trigger pivot plane (i.e. M3)
1018  std::abs( muon->eta() ) > 1.05 &&
1019  std::abs( muon->eta() ) < 2.40){ // only endcap
1020  extpositions_pivot.push_back(ext);
1021  }
1022  for(const auto& cham : ext.passedChambers){
1023  extpositions[cham].push_back(ext);
1024  }
1025  }
1026  }
1027  }
1028  /* L1Muon RoI matching */
1029  mymuon.matchedL1Charge=false;
1030  mymuon.passBW3Coin=false;
1031  mymuon.passInnerCoin=false;
1032  mymuon.passGoodMF=false;
1033  mymuon.passIsMoreCandInRoI=false;
1034  double max_dr = getMatchingWindow(mymuon.muon);
1035  if (AllBCMuonRoIs.size()==0) {
1036  ATH_MSG_DEBUG("No RoI matching possible as no container has been retrieved");
1037  mymuons.push_back(mymuon);
1038  continue;
1039  }
1040  for(const auto& allBcMuonRoI : AllBCMuonRoIs){
1041  const xAOD::MuonRoI* roi = allBcMuonRoI.muonRoI;
1042  double dr = xAOD::P4Helpers::deltaR(*muon,roi->eta(),roi->phi(),false);
1043  deltaR_muons_roi.push_back(dr);
1044  if( dr < max_dr ){
1045  if(roiAndMenu.count(roi)>0)mymuon.matchedL1Items.insert( roiAndMenu[roi].begin(), roiAndMenu[roi].end() );
1046  mymuon.matchedL1ThrExclusive.insert( roi->getThrNumber() );
1047  if(roi->getSource()!=xAOD::MuonRoI::Barrel)mymuon.matchedL1ThrExclusiveTGC.insert( roi->getThrNumber() );
1048  if(muon->charge()<0 && roi->getCharge()==xAOD::MuonRoI::Neg)mymuon.matchedL1Charge|=true;
1049  else if(muon->charge()>0 && roi->getCharge()==xAOD::MuonRoI::Pos)mymuon.matchedL1Charge|=true;
1050  mymuon.passBW3Coin|=roi->getBW3Coincidence();
1051  mymuon.passInnerCoin|=roi->getInnerCoincidence();
1052  mymuon.passGoodMF|=roi->getGoodMF();
1053  mymuon.passIsMoreCandInRoI|=roi->isMoreCandInRoI();
1054  }
1055  }
1056  for (int ithr = 1; ithr <= 15 ; ++ithr) { // TGC thresholds from 1 up to 15
1057  for (const auto &thr : mymuon.matchedL1ThrExclusive) {
1058  if (thr >= ithr) {
1059  mymuon.matchedL1ThrInclusive.insert(ithr);
1060  break;
1061  }
1062  }
1063  for (const auto &thr : mymuon.matchedL1ThrExclusiveTGC) {
1064  if (thr >= ithr) {
1065  mymuon.matchedL1ThrInclusiveTGC.insert(ithr);
1066  break;
1067  }
1068  }
1069  }
1070  /* store TimedMuon */
1071  mymuons.push_back(mymuon);
1072  mymuon2pv_dz.push_back(dz);
1073  mymuon2pv_dca.push_back(dca);
1074  }
1075 
1076 
1077  auto oflmuon_num=Monitored::Scalar<int>("oflmuon_num",(*muons).size());
1078  auto oflmuon_muonType=Monitored::Collection("oflmuon_muonType",*muons,[](const xAOD::Muon*m){return m->muonType();});
1079  auto oflmuon_author=Monitored::Collection("oflmuon_author",*muons,[](const xAOD::Muon*m){return m->author();});
1080  auto oflmuon_quality=Monitored::Collection("oflmuon_quality",*muons,[](const xAOD::Muon*m){return m->quality();});
1081  auto oflmuon_pt=Monitored::Collection("oflmuon_pt",*muons,[](const xAOD::Muon*m){return m->pt() / Gaudi::Units::GeV;});
1082  auto oflmuon_eta=Monitored::Collection("oflmuon_eta",*muons,[](const xAOD::Muon*m){return m->eta();});
1083  auto oflmuon_phi=Monitored::Collection("oflmuon_phi",*muons,[](const xAOD::Muon*m){return m->phi();});
1084  auto oflmuon_pvdz=Monitored::Collection("oflmuon_pvdz",muon2pv_dz);
1085  auto oflmuon_pvdca=Monitored::Collection("oflmuon_pvdca",muon2pv_dca);
1086 
1087  auto oflmuon_probe_num=Monitored::Scalar<int>("oflmuon_probe_num",mymuons.size());
1088  auto oflmuon_probe_muonType=Monitored::Collection("oflmuon_probe_muonType",mymuons,[](const TimedMuon&m){return m.muon->muonType();});
1089  auto oflmuon_probe_author=Monitored::Collection("oflmuon_probe_author",mymuons,[](const TimedMuon&m){return m.muon->author();});
1090  auto oflmuon_probe_quality=Monitored::Collection("oflmuon_probe_quality",mymuons,[](const TimedMuon&m){return m.muon->quality();});
1091  auto oflmuon_probe_pt=Monitored::Collection("oflmuon_probe_pt",mymuons,[](const TimedMuon&m){return m.muon->pt() / Gaudi::Units::GeV;});
1092  auto oflmuon_probe_eta=Monitored::Collection("oflmuon_probe_eta",mymuons,[](const TimedMuon&m){return m.muon->eta();});
1093  auto oflmuon_probe_phi=Monitored::Collection("oflmuon_probe_phi",mymuons,[](const TimedMuon&m){return m.muon->phi();});
1094  auto oflmuon_probe_pvdz=Monitored::Collection("oflmuon_probe_pvdz",mymuon2pv_dz);
1095  auto oflmuon_probe_pvdca=Monitored::Collection("oflmuon_probe_pvdca",mymuon2pv_dca);
1096 
1097  auto oflmuon_deltaR=Monitored::Collection("oflmuon_deltaR",deltaR_muons);
1098  auto oflmuon_deltaR_roi=Monitored::Collection("oflmuon_deltaR_roi",deltaR_muons_roi);
1099  auto oflmuon_deltaR_hlt=Monitored::Collection("oflmuon_deltaR_hlt",deltaR_muons_hlt);
1100 
1101 
1102  fill(m_packageName+"_Muon",
1103  oflmuon_num,oflmuon_muonType,oflmuon_author,oflmuon_quality,oflmuon_pt,oflmuon_eta,oflmuon_phi,oflmuon_pvdz,oflmuon_pvdca,
1104  oflmuon_probe_num,oflmuon_probe_muonType,oflmuon_probe_author,oflmuon_probe_quality,oflmuon_probe_pt,oflmuon_probe_eta,oflmuon_probe_phi,oflmuon_probe_pvdz,oflmuon_probe_pvdca,
1105  oflmuon_deltaR, oflmuon_deltaR_roi, oflmuon_deltaR_hlt
1106  );
1107 
1108 
1109 
1110  MonVariables oflmuon_variables;
1111  oflmuon_variables.push_back(oflmuon_num);
1112  oflmuon_variables.push_back(oflmuon_muonType);
1113  oflmuon_variables.push_back(oflmuon_author);
1114  oflmuon_variables.push_back(oflmuon_quality);
1115  oflmuon_variables.push_back(oflmuon_pt);
1116  oflmuon_variables.push_back(oflmuon_eta);
1117  oflmuon_variables.push_back(oflmuon_phi);
1118 
1119 
1120  auto muon_charge = Monitored::Collection("muon_charge",mymuons,[](const TimedMuon& m){
1121  return m.muon->charge();
1122  });
1123  oflmuon_variables.push_back(muon_charge);
1124  auto muon_chargePos = Monitored::Collection("muon_chargePos",mymuons,[](const TimedMuon& m){
1125 return (m.muon->charge()>0);
1126  });
1127  oflmuon_variables.push_back(muon_chargePos);
1128  auto muon_chargeNeg = Monitored::Collection("muon_chargeNeg",mymuons,[](const TimedMuon& m){
1129  return (m.muon->charge()<0);
1130  });
1131  oflmuon_variables.push_back(muon_chargeNeg);
1132  auto muon_eta4gev = Monitored::Collection("muon_eta4gev",mymuons,[](const TimedMuon& m){
1133  return (m.muon->pt()>pt_4_cut)?m.muon->eta():-10;
1134  });
1135  oflmuon_variables.push_back(muon_eta4gev);
1136  auto muon_phi4gev = Monitored::Collection("muon_phi4gev",mymuons,[](const TimedMuon& m){
1137  return (m.muon->pt()>pt_4_cut)?m.muon->phi():-10;
1138  });
1139  oflmuon_variables.push_back(muon_phi4gev);
1140  auto muon_phi4gev_1p05eta1p3 = Monitored::Collection("muon_phi4gev_1p05eta1p3",mymuons,[](const TimedMuon& m){
1141  return (m.muon->pt()>pt_4_cut && std::abs(m.muon->eta())>barrel_end && std::abs(m.muon->eta())<eifi_boundary)?m.muon->phi():-10;
1142  });
1143  oflmuon_variables.push_back(muon_phi4gev_1p05eta1p3);
1144  auto muon_phi4gev_1p05eta1p3A = Monitored::Collection("muon_phi4gev_1p05eta1p3A",mymuons,[](const TimedMuon& m){
1145  return (m.muon->pt()>pt_4_cut && std::abs(m.muon->eta())>barrel_end && std::abs(m.muon->eta())<eifi_boundary && m.muon->eta()>0)?m.muon->phi():-10;
1146  });
1147  oflmuon_variables.push_back(muon_phi4gev_1p05eta1p3A);
1148  auto muon_phi4gev_1p05eta1p3C = Monitored::Collection("muon_phi4gev_1p05eta1p3C",mymuons,[](const TimedMuon& m){
1149  return (m.muon->pt()>pt_4_cut && std::abs(m.muon->eta())>barrel_end && std::abs(m.muon->eta())<eifi_boundary && m.muon->eta()<0)?m.muon->phi():-10;
1150  });
1151  oflmuon_variables.push_back(muon_phi4gev_1p05eta1p3C);
1152  auto muon_phi4gev_1p3eta2p4 = Monitored::Collection("muon_phi4gev_1p3eta2p4",mymuons,[](const TimedMuon& m){
1153  return (m.muon->pt()>pt_4_cut && std::abs(m.muon->eta())>eifi_boundary && std::abs(m.muon->eta())<trigger_end)?m.muon->phi():-10;
1154  });
1155  oflmuon_variables.push_back(muon_phi4gev_1p3eta2p4);
1156  auto muon_phi4gev_1p3eta2p4A = Monitored::Collection("muon_phi4gev_1p3eta2p4A",mymuons,[](const TimedMuon& m){
1157  return (m.muon->pt()>pt_4_cut && std::abs(m.muon->eta())>eifi_boundary && std::abs(m.muon->eta())<trigger_end && m.muon->eta()>0)?m.muon->phi():-10;
1158  });
1159  oflmuon_variables.push_back(muon_phi4gev_1p3eta2p4A);
1160  auto muon_phi4gev_1p3eta2p4C = Monitored::Collection("muon_phi4gev_1p3eta2p4C",mymuons,[](const TimedMuon& m){
1161  return (m.muon->pt()>pt_4_cut && std::abs(m.muon->eta())>eifi_boundary && std::abs(m.muon->eta())<trigger_end && m.muon->eta()<0)?m.muon->phi():-10;
1162  });
1163  oflmuon_variables.push_back(muon_phi4gev_1p3eta2p4C);
1164  auto muon_phi4gev_rpc = Monitored::Collection("muon_phi4gev_rpc",mymuons,[](const TimedMuon& m){
1165  return (std::abs(m.muon->eta()) < barrel_end && m.muon->pt() > pt_4_cut) ? m.muon->phi() : -10;
1166  });
1167  oflmuon_variables.push_back(muon_phi4gev_rpc);
1168  auto muon_phi4gev_rpcA = Monitored::Collection("muon_phi4gev_rpcA",mymuons,[](const TimedMuon& m){
1169  return (std::abs(m.muon->eta()) < barrel_end && m.muon->pt() > pt_4_cut && m.muon->eta() > 0) ? m.muon->phi() : -10;
1170  });
1171  oflmuon_variables.push_back(muon_phi4gev_rpcA);
1172  auto muon_phi4gev_rpcC = Monitored::Collection("muon_phi4gev_rpcC",mymuons,[](const TimedMuon& m){
1173  return (std::abs(m.muon->eta()) < barrel_end && m.muon->pt() > pt_4_cut && m.muon->eta() < 0) ? m.muon->phi() : -10;
1174  });
1175  oflmuon_variables.push_back(muon_phi4gev_rpcC);
1176  auto muon_phi4gev_tgc = Monitored::Collection("muon_phi4gev_tgc",mymuons,[](const TimedMuon& m){
1177  return (std::abs(m.muon->eta()) > barrel_end && std::abs(m.muon->eta()) < trigger_end && m.muon->pt() > pt_4_cut) ? m.muon->phi() : -10;
1178  });
1179  oflmuon_variables.push_back(muon_phi4gev_tgc);
1180  auto muon_phi4gev_tgcA = Monitored::Collection("muon_phi4gev_tgcA",mymuons,[](const TimedMuon& m){
1181  return (std::abs(m.muon->eta()) > barrel_end && std::abs(m.muon->eta()) < trigger_end && m.muon->pt() > pt_4_cut && m.muon->eta() > 0) ? m.muon->phi() : -10;
1182  });
1183  oflmuon_variables.push_back(muon_phi4gev_tgcA);
1184  auto muon_phi4gev_tgcC = Monitored::Collection("muon_phi4gev_tgcC",mymuons,[](const TimedMuon& m){
1185  return (std::abs(m.muon->eta()) > barrel_end && std::abs(m.muon->eta()) < trigger_end && m.muon->pt() > pt_4_cut && m.muon->eta() < 0) ? m.muon->phi() : -10;
1186  });
1187  oflmuon_variables.push_back(muon_phi4gev_tgcC);
1188  auto muon_phi0gev_tgc = Monitored::Collection("muon_phi0gev_tgc",mymuons,[](const TimedMuon& m){
1189  return (std::abs(m.muon->eta()) > barrel_end && std::abs(m.muon->eta()) < trigger_end) ? m.muon->phi() : -10;
1190  });
1191  oflmuon_variables.push_back(muon_phi0gev_tgc);
1192  auto muon_phi0gev_tgcA = Monitored::Collection("muon_phi0gev_tgcA",mymuons,[](const TimedMuon& m){
1193  return (std::abs(m.muon->eta()) > barrel_end && std::abs(m.muon->eta()) < trigger_end && m.muon->eta() > 0) ? m.muon->phi() : -10;
1194  });
1195  oflmuon_variables.push_back(muon_phi0gev_tgcA);
1196  auto muon_phi0gev_tgcC = Monitored::Collection("muon_phi0gev_tgcC",mymuons,[](const TimedMuon& m){
1197  return (std::abs(m.muon->eta()) > barrel_end && std::abs(m.muon->eta()) < trigger_end && m.muon->eta() < 0) ? m.muon->phi() : -10;
1198  });
1199  oflmuon_variables.push_back(muon_phi0gev_tgcC);
1200  auto muon_eta = Monitored::Collection("muon_eta", mymuons, [](const TimedMuon &m) {
1201  return (m.muon->pt() > pt_30_cut) ? m.muon->eta() : -10;
1202  });
1203  oflmuon_variables.push_back(muon_eta);
1204  auto muon_phi = Monitored::Collection("muon_phi", mymuons, [](const TimedMuon &m) {
1205  return (m.muon->pt() > pt_30_cut) ? m.muon->phi() : -10;
1206  });
1207  oflmuon_variables.push_back(muon_phi);
1208  auto muon_phi_rpc = Monitored::Collection("muon_phi_rpc", mymuons, [](const TimedMuon &m) {
1209  return (std::abs(m.muon->eta()) < barrel_end && m.muon->pt() > pt_30_cut) ? m.muon->phi() : -10;
1210  });
1211  oflmuon_variables.push_back(muon_phi_rpc);
1212  auto muon_phi_rpcA = Monitored::Collection("muon_phi_rpcA", mymuons, [](const TimedMuon &m) {
1213  return (std::abs(m.muon->eta()) < barrel_end && m.muon->pt() > pt_30_cut && m.muon->eta()>0) ? m.muon->phi() : -10;
1214  });
1215  oflmuon_variables.push_back(muon_phi_rpcA);
1216  auto muon_phi_rpcC = Monitored::Collection("muon_phi_rpcC", mymuons, [](const TimedMuon &m) {
1217  return (std::abs(m.muon->eta()) < barrel_end && m.muon->pt() > pt_30_cut && m.muon->eta()<0) ? m.muon->phi() : -10;
1218  });
1219  oflmuon_variables.push_back(muon_phi_rpcC);
1220  auto muon_phi_tgc = Monitored::Collection("muon_phi_tgc", mymuons, [](const TimedMuon &m) {
1221  return (std::abs(m.muon->eta()) > barrel_end && std::abs(m.muon->eta()) < trigger_end && m.muon->pt() > pt_30_cut) ? m.muon->phi() : -10;
1222  });
1223  oflmuon_variables.push_back(muon_phi_tgc);
1224  auto muon_phi_tgcA = Monitored::Collection("muon_phi_tgcA", mymuons, [](const TimedMuon &m) {
1225  return (std::abs(m.muon->eta()) > barrel_end && std::abs(m.muon->eta()) < trigger_end && m.muon->pt() > pt_30_cut && m.muon->eta()>0) ? m.muon->phi() : -10;
1226  });
1227  oflmuon_variables.push_back(muon_phi_tgcA);
1228  auto muon_phi_tgcC = Monitored::Collection("muon_phi_tgcC", mymuons, [](const TimedMuon &m) {
1229  return (std::abs(m.muon->eta()) > barrel_end && std::abs(m.muon->eta()) < trigger_end && m.muon->pt() > pt_30_cut && m.muon->eta()<0) ? m.muon->phi() : -10;
1230  });
1231  oflmuon_variables.push_back(muon_phi_tgcC);
1232  auto muon_pt_rpc = Monitored::Collection("muon_pt_rpc", mymuons, [](const TimedMuon &m) {
1233  return (std::abs(m.muon->eta()) < barrel_end) ? m.muon->pt() / Gaudi::Units::GeV : -10;
1234  });
1235  oflmuon_variables.push_back(muon_pt_rpc);
1236  auto muon_pt_tgc = Monitored::Collection("muon_pt_tgc", mymuons, [](const TimedMuon &m) {
1237  return (std::abs(m.muon->eta()) > barrel_end && std::abs(m.muon->eta()) < trigger_end) ? m.muon->pt() / Gaudi::Units::GeV : -10;
1238  });
1239  oflmuon_variables.push_back(muon_pt_tgc);
1240  auto muon_barrel = Monitored::Collection("muon_barrel", mymuons, [](const TimedMuon &m) {
1241  return (std::abs(m.muon->eta()) < barrel_end);
1242  });
1243  oflmuon_variables.push_back(muon_barrel);
1244  auto muon_endcap = Monitored::Collection("muon_endcap", mymuons, [](const TimedMuon &m) {
1245  return (std::abs(m.muon->eta()) > barrel_end && std::abs(m.muon->eta()) < endcap_end);
1246  });
1247  oflmuon_variables.push_back(muon_endcap);
1248  auto muon_forward = Monitored::Collection("muon_forward", mymuons, [](const TimedMuon &m) {
1249  return (std::abs(m.muon->eta()) > endcap_end && std::abs(m.muon->eta()) < trigger_end);
1250  });
1251  oflmuon_variables.push_back(muon_forward);
1252  auto muon_l1passThr1TGC = Monitored::Collection("muon_l1passThr1TGC", mymuons, [](const TimedMuon &m) {
1253  return m.matchedL1ThrInclusiveTGC.find(1) != m.matchedL1ThrInclusiveTGC.end();
1254  });
1255  oflmuon_variables.push_back(muon_l1passThr1TGC);
1256  auto muon_l1passThr1 = Monitored::Collection("muon_l1passThr1", mymuons, [](const TimedMuon &m) {
1257  return m.matchedL1ThrInclusive.find(1) != m.matchedL1ThrInclusive.end();
1258  });
1259  oflmuon_variables.push_back(muon_l1passThr1);
1260  auto muon_l1passThr2 = Monitored::Collection("muon_l1passThr2", mymuons, [](const TimedMuon &m) {
1261  return m.matchedL1ThrInclusive.find(2) != m.matchedL1ThrInclusive.end();
1262  });
1263  oflmuon_variables.push_back(muon_l1passThr2);
1264  auto muon_l1passThr3 = Monitored::Collection("muon_l1passThr3", mymuons, [](const TimedMuon &m) {
1265  return m.matchedL1ThrInclusive.find(3) != m.matchedL1ThrInclusive.end();
1266  });
1267  oflmuon_variables.push_back(muon_l1passThr3);
1268  auto muon_l1passThr4 = Monitored::Collection("muon_l1passThr4", mymuons, [](const TimedMuon &m) {
1269  return m.matchedL1ThrInclusive.find(4) != m.matchedL1ThrInclusive.end();
1270  });
1271  oflmuon_variables.push_back(muon_l1passThr4);
1272  auto muon_l1passThr5 = Monitored::Collection("muon_l1passThr5", mymuons, [](const TimedMuon &m) {
1273  return m.matchedL1ThrInclusive.find(5) != m.matchedL1ThrInclusive.end();
1274  });
1275  oflmuon_variables.push_back(muon_l1passThr5);
1276  auto muon_l1passThr6 = Monitored::Collection("muon_l1passThr6", mymuons, [](const TimedMuon &m) {
1277  return m.matchedL1ThrInclusive.find(6) != m.matchedL1ThrInclusive.end();
1278  });
1279  oflmuon_variables.push_back(muon_l1passThr6);
1280  auto muon_l1passThr7 = Monitored::Collection("muon_l1passThr7", mymuons, [](const TimedMuon &m) {
1281  return m.matchedL1ThrInclusive.find(7) != m.matchedL1ThrInclusive.end();
1282  });
1283  oflmuon_variables.push_back(muon_l1passThr7);
1284  auto muon_l1passThr8 = Monitored::Collection("muon_l1passThr8", mymuons, [](const TimedMuon &m) {
1285  return m.matchedL1ThrInclusive.find(8) != m.matchedL1ThrInclusive.end();
1286  });
1287  oflmuon_variables.push_back(muon_l1passThr8);
1288  auto muon_l1passThr9 = Monitored::Collection("muon_l1passThr9", mymuons, [](const TimedMuon &m) {
1289  return m.matchedL1ThrInclusive.find(9) != m.matchedL1ThrInclusive.end();
1290  });
1291  oflmuon_variables.push_back(muon_l1passThr9);
1292  auto muon_l1passThr10 = Monitored::Collection("muon_l1passThr10", mymuons, [](const TimedMuon &m) {
1293  return m.matchedL1ThrInclusive.find(10) != m.matchedL1ThrInclusive.end();
1294  });
1295  oflmuon_variables.push_back(muon_l1passThr10);
1296  auto muon_l1passThr11 = Monitored::Collection("muon_l1passThr11", mymuons, [](const TimedMuon &m) {
1297  return m.matchedL1ThrInclusive.find(11) != m.matchedL1ThrInclusive.end();
1298  });
1299  oflmuon_variables.push_back(muon_l1passThr11);
1300  auto muon_l1passThr12 = Monitored::Collection("muon_l1passThr12", mymuons, [](const TimedMuon &m) {
1301  return m.matchedL1ThrInclusive.find(12) != m.matchedL1ThrInclusive.end();
1302  });
1303  oflmuon_variables.push_back(muon_l1passThr12);
1304  auto muon_l1passThr13 = Monitored::Collection("muon_l1passThr13", mymuons, [](const TimedMuon &m) {
1305  return m.matchedL1ThrInclusive.find(13) != m.matchedL1ThrInclusive.end();
1306  });
1307  oflmuon_variables.push_back(muon_l1passThr13);
1308  auto muon_l1passThr14 = Monitored::Collection("muon_l1passThr14", mymuons, [](const TimedMuon &m) {
1309  return m.matchedL1ThrInclusive.find(14) != m.matchedL1ThrInclusive.end();
1310  });
1311  oflmuon_variables.push_back(muon_l1passThr14);
1312  auto muon_l1passThr15 = Monitored::Collection("muon_l1passThr15", mymuons, [](const TimedMuon &m) {
1313  return m.matchedL1ThrInclusive.find(15) != m.matchedL1ThrInclusive.end();
1314  });
1315  oflmuon_variables.push_back(muon_l1passThr15);
1316  auto muon_l1passCharge = Monitored::Collection("muon_l1passCharge",mymuons,[](const TimedMuon& m){
1317  return m.matchedL1Charge;
1318  });
1319  oflmuon_variables.push_back(muon_l1passCharge);
1320  auto muon_l1passBW3Coin = Monitored::Collection("muon_l1passBW3Coin",mymuons,[](const TimedMuon& m){
1321  return m.passBW3Coin;
1322  });
1323  oflmuon_variables.push_back(muon_l1passBW3Coin);
1324  auto muon_l1passBW3CoinVeto = Monitored::Collection("muon_l1passBW3CoinVeto",mymuons,[](const TimedMuon& m){
1325  return !m.passBW3Coin;
1326  });
1327  oflmuon_variables.push_back(muon_l1passBW3CoinVeto);
1328  auto muon_l1passInnerCoin = Monitored::Collection("muon_l1passInnerCoin",mymuons,[](const TimedMuon& m){
1329  return m.passInnerCoin;
1330  });
1331  oflmuon_variables.push_back(muon_l1passInnerCoin);
1332  auto muon_l1passInnerCoinVeto = Monitored::Collection("muon_l1passInnerCoinVeto",mymuons,[](const TimedMuon& m){
1333  return !m.passInnerCoin;
1334  });
1335  oflmuon_variables.push_back(muon_l1passInnerCoinVeto);
1336  auto muon_l1passGoodMF = Monitored::Collection("muon_l1passGoodMF",mymuons,[](const TimedMuon& m){
1337  return m.passGoodMF;
1338  });
1339  oflmuon_variables.push_back(muon_l1passGoodMF);
1340  auto muon_l1passBadMF = Monitored::Collection("muon_l1passBadMF",mymuons,[](const TimedMuon& m){
1341  return !m.passGoodMF;
1342  });
1343  oflmuon_variables.push_back(muon_l1passBadMF);
1344  auto muon_l1passIsMoreCandInRoI = Monitored::Collection("muon_l1passIsMoreCandInRoI",mymuons,[](const TimedMuon& m){
1345  return m.passIsMoreCandInRoI;
1346  });
1347  oflmuon_variables.push_back(muon_l1passIsMoreCandInRoI);
1348  fill(m_packageName, oflmuon_variables);
1349 
1350  ATH_MSG_DEBUG("End filling offline muon-related histograms");
1351  }
1353  fillThresholdPatternHistograms(menuAndRoIs, mymuons, ctx);
1354 
1356  fillTgcPrdHistograms(mon_bcid, mon_pileup, mon_lb, extpositions,ctx);
1358 
1359 
1361  if(m_anaTgcCoin){
1365  if (!tgcCoinCurr.isValid() || !tgcCoinNext.isValid() || !tgcCoinPrev.isValid()) {
1366  ATH_MSG_WARNING("Couldn't get TGC Coin Data");
1367  }else{
1368  ATH_MSG_DEBUG("Filling TGC CoinData histograms");
1369  std::map<int, SG::ReadHandle<Muon::TgcCoinDataContainer> > tgcCoin;
1370  tgcCoin[-1] = tgcCoinPrev;
1371  tgcCoin[0] = tgcCoinCurr;
1372  tgcCoin[+1] = tgcCoinNext;
1375  if(tgcCoinNextNext.isValid())tgcCoin[+2] = tgcCoinNextNext;
1376  }
1377  std::vector< TgcTrig > tgcTrigMap_SL;
1378  std::vector< TgcTrig > tgcTrigMap_SL_Endcap;
1379  std::vector< TgcTrig > tgcTrigMap_SL_Forward;
1380  std::vector< TgcTrig > tgcTrigMap_HPT_Wire;
1381  std::vector< TgcTrig > tgcTrigMap_HPT_Endcap_Wire;
1382  std::vector< TgcTrig > tgcTrigMap_HPT_Forward_Wire;
1383  std::vector< TgcTrig > tgcTrigMap_HPT_Strip;
1384  std::vector< TgcTrig > tgcTrigMap_HPT_Endcap_Strip;
1385  std::vector< TgcTrig > tgcTrigMap_HPT_Forward_Strip;
1386  std::vector< TgcTrig > tgcTrigMap_LPT_Wire;
1387  std::vector< TgcTrig > tgcTrigMap_LPT_Endcap_Wire;
1388  std::vector< TgcTrig > tgcTrigMap_LPT_Forward_Wire;
1389  std::vector< TgcTrig > tgcTrigMap_LPT_Strip;
1390  std::vector< TgcTrig > tgcTrigMap_LPT_Endcap_Strip;
1391  std::vector< TgcTrig > tgcTrigMap_LPT_Forward_Strip;
1392  std::vector< TgcTrig > tgcTrigMap_EIFI_Wire;
1393  std::vector< TgcTrig > tgcTrigMap_EIFI_Endcap_Wire;
1394  std::vector< TgcTrig > tgcTrigMap_EIFI_Forward_Wire;
1395  std::vector< TgcTrig > tgcTrigMap_EIFI_Strip;
1396  std::vector< TgcTrig > tgcTrigMap_EIFI_Endcap_Strip;
1397  std::vector< TgcTrig > tgcTrigMap_EIFI_Forward_Strip;
1398  std::vector< TgcTrigTile > tgcTrigTileMap;
1399  std::vector< TgcTrigNsw > tgcTrigNswMap;
1400  std::vector< TgcTrigRpc > tgcTrigRpcMap;
1401  std::vector< TgcTrigEifi > tgcTrigEifiMap;
1402  int n_TgcCoin_detElementIsNull = 0;
1403  int n_TgcCoin_postOutPtrIsNull = 0;
1404  for (auto thisCoin : tgcCoin) {
1405  int bunch = thisCoin.first;
1406  for (const auto tgccnt : *(thisCoin.second)) {
1407  for (const auto data : *tgccnt) {
1408  if ( data->detectorElementOut() == nullptr ) n_TgcCoin_detElementIsNull++;
1409  if ( data->posOutPtr() == nullptr ) n_TgcCoin_postOutPtrIsNull++;
1410 
1411  int slsector = (data->isForward()) ? ( data->phi() % 24 + 1) : ( (data->phi() + 1) % 48 + 1); // translation from the phi index to trigger sector
1412  if(!data->isAside()) slsector *= -1;
1413 
1414  if(data->type() == Muon::TgcCoinData::TYPE_UNKNOWN){ // inner muon detectors (EI/FI/Tile/NSW/RPCBIS78)
1415  if (data->isInner() && data->isStrip()) { // RPC-BIS78
1416  TgcTrigRpc rpcCoin;
1417  rpcCoin.slSector = slsector;
1419  rpcCoin.bunch = bunch;
1420  rpcCoin.currBc = (bunch==0);
1425  tgcTrigRpcMap.push_back(rpcCoin);
1426  } else if (data->isInner() && !data->isStrip()) { // NSW
1427  TgcTrigNsw nswCoin;
1428  nswCoin.slSector = slsector;
1430  int boardID = (std::abs(nswCoin.slSector)-1) / 2 + 1; // 1..24 (1..12)
1431  nswCoin.slInputIndex = (boardID-1) * 6 + nswCoin.slInput;
1432  nswCoin.isAside = data->isAside();
1433  nswCoin.isForward = data->isForward();
1435  nswCoin.bunch = bunch;
1436  nswCoin.currBc = (bunch==0);
1440  if(nswCoin.R!=0 && nswCoin.Phi!=0)
1441  tgcTrigNswMap.push_back(nswCoin);
1442  } else if (!data->isInner() && data->isStrip()) { // TMDB
1443  TgcTrigTile tileCoin;
1444  tileCoin.slSector = slsector;
1446  tileCoin.bunch = bunch;
1447  tileCoin.currBc = (bunch==0);
1449  if(tileCoin.tmdbDecisions!=0)
1450  tgcTrigTileMap.push_back(tileCoin);
1451  } else if (!data->isInner() && !data->isStrip()) { // EI
1452  TgcTrigEifi eifiCoin;
1453  eifiCoin.slSector = slsector;
1454  eifiCoin.bunch = bunch;
1455  eifiCoin.currBc = (bunch==0);
1456  tgcTrigEifiMap.push_back(eifiCoin);
1457  }
1458  }
1459 
1460  if ( data->detectorElementOut() == nullptr ||
1461  data->posOutPtr() == nullptr )continue; // to avoid FPE
1462  TgcTrig tgcTrig;
1463  tgcTrig.lb = GetEventInfo(ctx)->lumiBlock();
1464  const Amg::Vector3D &posIn = data->globalposIn();
1465  tgcTrig.x_In = posIn[0];
1466  tgcTrig.y_In = posIn[1];
1467  tgcTrig.z_In = posIn[2];
1468  const Amg::Vector3D &posOut = data->globalposOut();
1469  tgcTrig.x_Out = posOut[0];
1470  tgcTrig.y_Out = posOut[1];
1471  tgcTrig.z_Out = posOut[2];
1472  tgcTrig.eta = posOut.eta();
1473  tgcTrig.phi = posOut.phi();
1474  tgcTrig.width_In = data->widthIn();
1475  tgcTrig.width_Out = data->widthOut();
1476  if (data->type() == Muon::TgcCoinData::TYPE_SL) {
1477  const Amg::MatrixX &matrix = data->errMat();
1478  tgcTrig.width_R = matrix(0, 0);
1479  tgcTrig.width_Phi = matrix(1, 1);
1480 
1481  tgcTrig.muonMatched = 0;
1482  for(const auto& ext : extpositions_pivot){
1483  if(ext.muon->pt() < m_pTCutOnTrigExtrapolation.value() )continue;
1484  if(data->isAside() && ext.extPos.z()<0)continue;
1485  if(!data->isAside()&& ext.extPos.z()>0)continue;
1486  if( Amg::deltaR(posOut,ext.extPos) > m_l1trigMatchWindowPt15 )continue;
1487  tgcTrig.muonMatched = 1;
1488  break;
1489  }
1490 
1491  tgcTrig.loosemuonMatched = 0;
1492  for (const auto& muon : oflmuons) {
1493  double max_dr = getMatchingWindow(muon);
1494  double dr = xAOD::P4Helpers::deltaR(*muon,tgcTrig.eta,tgcTrig.phi,false);
1495  if( dr > max_dr )continue;
1496  tgcTrig.loosemuonMatched = 1;
1497  break;
1498  }
1499 
1500  tgcTrig.isBiased = 0;
1501  for(const auto& muon : biasedMuons){
1502  double max_dr = getMatchingWindow(muon);
1503  double dr = xAOD::P4Helpers::deltaR(*muon,tgcTrig.eta,tgcTrig.phi,false);
1504  if( dr > max_dr )continue;
1505  tgcTrig.isBiased = 1;
1506  break;
1507  }
1508  // real1: if biasedMuons.size()==1, reject biased muon
1509  // real2: if biasedMuons.size()>=2, use any muons.
1510  // fake: just reject biased muons
1511  if(biasedMuons.size()>=2) tgcTrig.isBiased = 0;
1512 
1513  } else {
1514  tgcTrig.width_R = 0.;
1515  tgcTrig.width_Phi = 0.;
1516  }
1517  int etaout = 0;
1518  int etain = 0;
1519  const Identifier tcdidout = data->channelIdOut();
1520  if (tcdidout.is_valid()) {
1521  etaout = std::abs(int(m_idHelperSvc->tgcIdHelper().stationEta(tcdidout)));
1522  }
1523  const Identifier tcdidin = data->channelIdIn();
1524  if (tcdidin.is_valid()) {
1525  etain = std::abs(int(m_idHelperSvc->tgcIdHelper().stationEta(tcdidin)));
1526  }
1527  tgcTrig.etaout = etaout;
1528  tgcTrig.etain = etain;
1529  tgcTrig.isAside = data->isAside();
1530  tgcTrig.isForward = data->isForward();
1531  tgcTrig.isStrip = data->isStrip();
1532  tgcTrig.isInner = data->isInner();
1533  tgcTrig.isPositiveDeltaR = data->isPositiveDeltaR();
1534  tgcTrig.type = data->type();
1535  tgcTrig.trackletId = data->trackletId();
1536  tgcTrig.trackletIdStrip = data->trackletIdStrip();
1537  tgcTrig.sector = slsector;
1538  tgcTrig.roi = data->roi();
1539  tgcTrig.pt = data->pt();
1540  tgcTrig.delta = data->delta();
1541  tgcTrig.sub = data->sub();
1542  tgcTrig.veto = data->veto();
1543  tgcTrig.bunch = bunch;
1544  tgcTrig.bcid = (GetEventInfo(ctx)->bcid() & 0xF);
1545  tgcTrig.inner = data->inner();
1546  if( !data->isInner() ){
1547  if (data->type() == Muon::TgcCoinData::TYPE_SL && !data->isForward()) {
1548  tgcTrigMap_SL_Endcap.push_back(tgcTrig);
1549  tgcTrigMap_SL.push_back(tgcTrig);
1550  }else if (data->type() == Muon::TgcCoinData::TYPE_SL && data->isForward()) {
1551  tgcTrigMap_SL_Forward.push_back(tgcTrig);
1552  tgcTrigMap_SL.push_back(tgcTrig);
1553  }else if(data->type() == Muon::TgcCoinData::TYPE_HIPT && !data->isForward()){
1554  if(tgcTrig.isStrip){
1555  tgcTrigMap_HPT_Endcap_Strip.push_back(tgcTrig);
1556  tgcTrigMap_HPT_Strip.push_back(tgcTrig);
1557  }else{
1558  tgcTrigMap_HPT_Endcap_Wire.push_back(tgcTrig);
1559  tgcTrigMap_HPT_Wire.push_back(tgcTrig);
1560  }
1561  }else if(data->type() == Muon::TgcCoinData::TYPE_HIPT && data->isForward()){
1562  if(tgcTrig.isStrip){
1563  tgcTrigMap_HPT_Forward_Strip.push_back(tgcTrig);
1564  tgcTrigMap_HPT_Strip.push_back(tgcTrig);
1565  }else{
1566  tgcTrigMap_HPT_Forward_Wire.push_back(tgcTrig);
1567  tgcTrigMap_HPT_Wire.push_back(tgcTrig);
1568  }
1569  }else if(data->type() == Muon::TgcCoinData::TYPE_TRACKLET && !data->isForward()){
1570  if(tgcTrig.isStrip){
1571  tgcTrigMap_LPT_Endcap_Strip.push_back(tgcTrig);
1572  tgcTrigMap_LPT_Strip.push_back(tgcTrig);
1573  }else{
1574  tgcTrigMap_LPT_Endcap_Wire.push_back(tgcTrig);
1575  tgcTrigMap_LPT_Wire.push_back(tgcTrig);
1576  }
1577  }else if(data->type() == Muon::TgcCoinData::TYPE_TRACKLET && data->isForward()){
1578  if(tgcTrig.isStrip){
1579  tgcTrigMap_LPT_Forward_Strip.push_back(tgcTrig);
1580  tgcTrigMap_LPT_Strip.push_back(tgcTrig);
1581  }else{
1582  tgcTrigMap_LPT_Forward_Wire.push_back(tgcTrig);
1583  tgcTrigMap_LPT_Wire.push_back(tgcTrig);
1584  }
1585  }else if(data->type() == Muon::TgcCoinData::TYPE_TRACKLET_EIFI && !data->isForward()){
1586  if(tgcTrig.isStrip){
1587  tgcTrigMap_EIFI_Endcap_Strip.push_back(tgcTrig);
1588  tgcTrigMap_EIFI_Strip.push_back(tgcTrig);
1589  }else{
1590  tgcTrigMap_EIFI_Endcap_Wire.push_back(tgcTrig);
1591  tgcTrigMap_EIFI_Wire.push_back(tgcTrig);
1592  }
1593  }else if(data->type() == Muon::TgcCoinData::TYPE_TRACKLET_EIFI && data->isForward()){
1594  if(tgcTrig.isStrip){
1595  tgcTrigMap_EIFI_Forward_Strip.push_back(tgcTrig);
1596  tgcTrigMap_EIFI_Strip.push_back(tgcTrig);
1597  }else{
1598  tgcTrigMap_EIFI_Forward_Wire.push_back(tgcTrig);
1599  tgcTrigMap_EIFI_Wire.push_back(tgcTrig);
1600  }
1601  }
1602  }else{ // inner coincidence, i.e. EI/FI/Tile/BIS78/NSW
1603 
1604  }
1605  }
1606  }
1607  }
1608 
1609 
1610  for(auto& sl : tgcTrigMap_SL){
1611  if( sl.bunch != 0 )continue;
1612  for(auto& inner : tgcTrigRpcMap){
1613  if( sl.isForward == 1 )break;
1614  if( sl.sector != inner.slSector )continue;
1615  inner.roiEta = sl.eta;
1616  inner.roiPhi = sl.phi;
1617  inner.roiNum = sl.roi;
1618  inner.deltaBcid = (sl.bunch==0 && sl.muonMatched==1 && sl.isBiased==0) ? (inner.bcid - sl.bcid) : -999;
1619  inner.deltaTiming = (sl.bunch==0 && sl.muonMatched==1 && sl.isBiased==0) ? (inner.bunch - sl.bunch) : -999;
1620  inner.goodBcid0 = inner.deltaBcid==0;
1621  inner.goodBcid1 = (std::abs(inner.deltaBcid)<=1 || (16-std::abs(inner.deltaBcid))<=1);
1622  inner.goodBcid2 = (std::abs(inner.deltaBcid)<=2 || (16-std::abs(inner.deltaBcid))<=2);
1623  inner.goodTiming = (inner.bunch==sl.bunch && sl.bunch==0 && sl.muonMatched==1 && sl.isBiased==0);
1624  sl.rpc.push_back(&inner);
1625  }
1626  for(auto& inner : tgcTrigNswMap){
1627  if( sl.sector != inner.slSector )continue;
1628  if( sl.isForward != inner.isForward )continue;
1629  inner.deltaR = inner.R - std::abs(getNswRindexFromEta(sl.eta));
1630  inner.roiEta = sl.eta;
1631  inner.roiPhi = sl.phi;
1632  inner.roiNum = sl.roi;
1633  if( std::abs(inner.deltaR) < m_NswDeltaRCut ){
1634  inner.deltaBcid = (sl.bunch==0 && sl.muonMatched==1 && sl.isBiased==0) ? (inner.bcid - sl.bcid) : -999;
1635  inner.deltaTiming = (sl.bunch==0 && sl.muonMatched==1 && sl.isBiased==0) ? (inner.bunch - sl.bunch) : -999;
1636  inner.goodBcid0 = inner.deltaBcid==0;
1637  inner.goodBcid1 = (std::abs(inner.deltaBcid)<=1 || (16-std::abs(inner.deltaBcid))<=1);
1638  inner.goodBcid2 = (std::abs(inner.deltaBcid)<=2 || (16-std::abs(inner.deltaBcid))<=2);
1639  inner.goodTiming = (inner.bunch==sl.bunch && sl.bunch==0 && sl.muonMatched==1 && sl.isBiased==0);
1640  sl.nsw.push_back(&inner);
1641  }
1642  }
1643  for(auto& inner : tgcTrigTileMap){
1644  if( sl.isForward == 1 )break;
1645  if( sl.sector != inner.slSector )continue;
1646  inner.roiEta = sl.eta;
1647  inner.roiPhi = sl.phi;
1648  inner.roiNum = sl.roi;
1649  inner.deltaBcid = (sl.bunch==0 && sl.muonMatched==1 && sl.isBiased==0) ? (inner.bcid - sl.bcid) : -999;
1650  inner.deltaTiming = (sl.bunch==0 && sl.muonMatched==1 && sl.isBiased==0) ? (inner.bunch - sl.bunch) : -999;
1651  inner.goodBcid0 = inner.deltaBcid==0;
1652  inner.goodBcid1 = (std::abs(inner.deltaBcid)<=1 || (16-std::abs(inner.deltaBcid))<=1);
1653  inner.goodBcid2 = (std::abs(inner.deltaBcid)<=2 || (16-std::abs(inner.deltaBcid))<=2);
1654  inner.goodTiming = (inner.bunch==sl.bunch && sl.bunch==0 && sl.muonMatched==1 && sl.isBiased==0);
1655  sl.tile.push_back(&inner);
1656  }
1657  for(auto& inner : tgcTrigEifiMap){
1658  if( sl.isForward == 1 )break;
1659  if( sl.sector != inner.slSector )continue;
1660  inner.roiEta = sl.eta;
1661  inner.roiPhi = sl.phi;
1662  inner.roiNum = sl.roi;
1663  inner.deltaTiming = (sl.bunch==0 && sl.muonMatched==1 && sl.isBiased==0) ? (inner.bunch - sl.bunch) : -999;
1664  inner.goodTiming = (inner.bunch==sl.bunch && sl.bunch==0 && sl.muonMatched==1 && sl.isBiased==0);
1665  sl.eifi.push_back(&inner);
1666  }
1667  }
1668 
1669  std::vector< TgcTrigTile > tgcTrigTileMap_allmods;
1670  for(auto& inner : tgcTrigTileMap){
1671  if(inner.roiNum<0)continue;
1672  for(int i = 0 ; i < 12 ; i++){
1673  TgcTrigTile inner2 = inner;
1674  if((inner.tmdbDecisions>>i) & 0x1){
1675  inner2.tmdbDecisions = (i+3)%3 + 1;
1676  tgcTrigTileMap_allmods.push_back(inner2);
1677  }
1678  }
1679  }
1680 
1681 
1682 
1683  MonVariables tgcCoin_variables;
1684  tgcCoin_variables.push_back(mon_bcid);
1685  tgcCoin_variables.push_back(mon_pileup);
1686  tgcCoin_variables.push_back(mon_lb);
1687 
1688  auto mon_nTgcCoin_detElementIsNull = Monitored::Scalar<int>("nTgcCoinDetElementIsNull", n_TgcCoin_detElementIsNull);
1689  auto mon_nTgcCoin_postOutPtrIsNull = Monitored::Scalar<int>("nTgcCoinPostOutPtrIsNull", n_TgcCoin_postOutPtrIsNull);
1690  tgcCoin_variables.push_back(mon_nTgcCoin_detElementIsNull);
1691  tgcCoin_variables.push_back(mon_nTgcCoin_postOutPtrIsNull);
1692 
1693  std::vector<Monitored::ObjectsCollection<std::vector<TgcTrig>, double>> vo_coin;
1694  vo_coin.reserve(38 * 21);
1695 
1696  fillTgcCoin("SL",tgcTrigMap_SL,vo_coin,tgcCoin_variables);
1697  fillTgcCoin("SL_Endcap",tgcTrigMap_SL_Endcap,vo_coin,tgcCoin_variables);
1698  fillTgcCoin("SL_Forward",tgcTrigMap_SL_Forward,vo_coin,tgcCoin_variables);
1699  fillTgcCoin("HPT_Wire",tgcTrigMap_HPT_Wire,vo_coin,tgcCoin_variables);
1700  fillTgcCoin("HPT_Endcap_Wire",tgcTrigMap_HPT_Endcap_Wire,vo_coin,tgcCoin_variables);
1701  fillTgcCoin("HPT_Forward_Wire",tgcTrigMap_HPT_Forward_Wire,vo_coin,tgcCoin_variables);
1702  fillTgcCoin("HPT_Strip",tgcTrigMap_HPT_Strip,vo_coin,tgcCoin_variables);
1703  fillTgcCoin("HPT_Endcap_Strip",tgcTrigMap_HPT_Endcap_Strip,vo_coin,tgcCoin_variables);
1704  fillTgcCoin("HPT_Forward_Strip",tgcTrigMap_HPT_Forward_Strip,vo_coin,tgcCoin_variables);
1705  fillTgcCoin("LPT_Wire",tgcTrigMap_LPT_Wire,vo_coin,tgcCoin_variables);
1706  fillTgcCoin("LPT_Endcap_Wire",tgcTrigMap_LPT_Endcap_Wire,vo_coin,tgcCoin_variables);
1707  fillTgcCoin("LPT_Forward_Wire",tgcTrigMap_LPT_Forward_Wire,vo_coin,tgcCoin_variables);
1708  fillTgcCoin("LPT_Strip",tgcTrigMap_LPT_Strip,vo_coin,tgcCoin_variables);
1709  fillTgcCoin("LPT_Endcap_Strip",tgcTrigMap_LPT_Endcap_Strip,vo_coin,tgcCoin_variables);
1710  fillTgcCoin("LPT_Forward_Strip",tgcTrigMap_LPT_Forward_Strip,vo_coin,tgcCoin_variables);
1711  fillTgcCoin("EIFI_Wire",tgcTrigMap_EIFI_Wire,vo_coin,tgcCoin_variables);
1712  fillTgcCoin("EIFI_Endcap_Wire",tgcTrigMap_EIFI_Endcap_Wire,vo_coin,tgcCoin_variables);
1713  fillTgcCoin("EIFI_Forward_Wire",tgcTrigMap_EIFI_Forward_Wire,vo_coin,tgcCoin_variables);
1714  fillTgcCoin("EIFI_Strip",tgcTrigMap_EIFI_Strip,vo_coin,tgcCoin_variables);
1715  fillTgcCoin("EIFI_Endcap_Strip",tgcTrigMap_EIFI_Endcap_Strip,vo_coin,tgcCoin_variables);
1716  fillTgcCoin("EIFI_Forward_Strip",tgcTrigMap_EIFI_Forward_Strip,vo_coin,tgcCoin_variables);
1717 
1718  std::vector<Monitored::ObjectsCollection<std::vector<ExtTrigInfo>, double>> vo_exttriginfo;
1719  vo_exttriginfo.reserve(13 * 5);
1720  std::vector<ExtTrigInfo> extTrigInfo_SL;
1721  std::vector<ExtTrigInfo> extTrigInfo_HPT_Wire;
1722  std::vector<ExtTrigInfo> extTrigInfo_HPT_Strip;
1723  std::vector<ExtTrigInfo> extTrigInfo_LPT_Wire;
1724  std::vector<ExtTrigInfo> extTrigInfo_LPT_Strip;
1725  fillTgcCoinEff("SL",tgcTrigMap_SL,extpositions_pivot,extTrigInfo_SL,vo_exttriginfo,tgcCoin_variables);
1726  fillTgcCoinEff("HPT_Wire",tgcTrigMap_HPT_Wire,extpositions_pivot,extTrigInfo_HPT_Wire,vo_exttriginfo,tgcCoin_variables);
1727  fillTgcCoinEff("HPT_Strip",tgcTrigMap_HPT_Strip,extpositions_pivot,extTrigInfo_HPT_Strip,vo_exttriginfo,tgcCoin_variables);
1728  fillTgcCoinEff("LPT_Wire",tgcTrigMap_LPT_Wire,extpositions_pivot,extTrigInfo_LPT_Wire,vo_exttriginfo,tgcCoin_variables);
1729  fillTgcCoinEff("LPT_Strip",tgcTrigMap_LPT_Strip,extpositions_pivot,extTrigInfo_LPT_Strip,vo_exttriginfo,tgcCoin_variables);
1730 
1731  // TGC
1732  auto coin_inner_tgc_roi=Monitored::Collection("coin_inner_tgc_roi",tgcTrigMap_SL,[](const TgcTrig&m){
1733  return m.roi;
1734  });
1735  tgcCoin_variables.push_back(coin_inner_tgc_roi);
1736  auto coin_inner_tgc_sector=Monitored::Collection("coin_inner_tgc_sector",tgcTrigMap_SL,[](const TgcTrig&m){
1737  return (m.bunch==0 && m.muonMatched==1 && m.isBiased==0) ? (m.sector) : -999;
1738  });
1739  tgcCoin_variables.push_back(coin_inner_tgc_sector);
1740  auto coin_inner_tgc_fake_sector=Monitored::Collection("coin_inner_tgc_fake_sector",tgcTrigMap_SL,[](const TgcTrig&m){
1741  return (m.bunch==0 && m.muonMatched==0 && m.loosemuonMatched==0 && m.isBiased==0) ? (m.sector) : -999;
1742  });
1743  tgcCoin_variables.push_back(coin_inner_tgc_fake_sector);
1744 
1745  auto coin_inner_tgc_eta=Monitored::Collection("coin_inner_tgc_eta",tgcTrigMap_SL,[](const TgcTrig&m){
1746  return (m.bunch==0 && m.muonMatched==1 && m.isBiased==0) ? (m.eta) : -999;
1747  });
1748  tgcCoin_variables.push_back(coin_inner_tgc_eta);
1749  auto coin_inner_tgc_phi=Monitored::Collection("coin_inner_tgc_phi",tgcTrigMap_SL,[](const TgcTrig&m){
1750  return (m.bunch==0 && m.muonMatched==1 && m.isBiased==0) ? (m.phi) : -999;
1751  });
1752  tgcCoin_variables.push_back(coin_inner_tgc_phi);
1753 
1754  auto coin_inner_tgc_fake_eta=Monitored::Collection("coin_inner_tgc_fake_eta",tgcTrigMap_SL,[](const TgcTrig&m){
1755  return (m.bunch==0 && m.muonMatched==0 && m.loosemuonMatched==0 && m.isBiased==0) ? (m.eta) : -999;
1756  });
1757  tgcCoin_variables.push_back(coin_inner_tgc_fake_eta);
1758  auto coin_inner_tgc_fake_phi=Monitored::Collection("coin_inner_tgc_fake_phi",tgcTrigMap_SL,[](const TgcTrig&m){
1759  return (m.bunch==0 && m.muonMatched==0 && m.loosemuonMatched==0 && m.isBiased==0) ? (m.phi) : -999;
1760  });
1761  tgcCoin_variables.push_back(coin_inner_tgc_fake_phi);
1762 
1763  auto coin_inner_tgc_forward=Monitored::Collection("coin_inner_tgc_forward",tgcTrigMap_SL,[](const TgcTrig&m){
1764  return m.isForward==1;
1765  });
1766  tgcCoin_variables.push_back(coin_inner_tgc_forward);
1767  auto coin_inner_tgc_endcap=Monitored::Collection("coin_inner_tgc_endcap",tgcTrigMap_SL,[](const TgcTrig&m){
1768  return m.isForward==0;
1769  });
1770  tgcCoin_variables.push_back(coin_inner_tgc_endcap);
1771  auto coin_inner_tgc_etaupto1p3=Monitored::Collection("coin_inner_tgc_etaupto1p3",tgcTrigMap_SL,[](const TgcTrig&m){
1772  return std::abs(m.eta) < 1.3;
1773  });
1774  tgcCoin_variables.push_back(coin_inner_tgc_etaupto1p3);
1775  auto coin_inner_tgc_etafrom1p3_endcap=Monitored::Collection("coin_inner_tgc_etafrom1p3_endcap",tgcTrigMap_SL,[](const TgcTrig&m){
1776  return std::abs(m.eta) > 1.3 && m.isForward==0;
1777  });
1778  tgcCoin_variables.push_back(coin_inner_tgc_etafrom1p3_endcap);
1779 
1780  auto coin_inner_tgc_coinflagEifi=Monitored::Collection("coin_inner_tgc_coinflagEifi",tgcTrigMap_SL,[](const TgcTrig&m){
1781  return (((m.pt>>CoinFlagEI)&0x1)!=0) ? 1.0 : 0.0;
1782  });
1783  tgcCoin_variables.push_back(coin_inner_tgc_coinflagEifi);
1784  auto coin_inner_tgc_coinflagTile=Monitored::Collection("coin_inner_tgc_coinflagTile",tgcTrigMap_SL,[](const TgcTrig&m){
1785  return (((m.pt>>CoinFlagTile)&0x1)!=0) ? 1.0 : 0.0;
1786  });
1787  tgcCoin_variables.push_back(coin_inner_tgc_coinflagTile);
1788  auto coin_inner_tgc_coinflagRpc=Monitored::Collection("coin_inner_tgc_coinflagRpc",tgcTrigMap_SL,[](const TgcTrig&m){
1789  return (((m.pt>>CoinFlagRPC)&0x1)!=0) ? 1.0 : 0.0;
1790  });
1791  tgcCoin_variables.push_back(coin_inner_tgc_coinflagRpc);
1792  auto coin_inner_tgc_coinflagNsw=Monitored::Collection("coin_inner_tgc_coinflagNsw",tgcTrigMap_SL,[](const TgcTrig&m){
1793  return (((m.pt>>CoinFlagNSW)&0x1)!=0) ? 1.0 : 0.0;
1794  });
1795  tgcCoin_variables.push_back(coin_inner_tgc_coinflagNsw);
1796  auto coin_inner_tgc_coinflagC=Monitored::Collection("coin_inner_tgc_coinflagC",tgcTrigMap_SL,[](const TgcTrig&m){
1797  return (((m.pt>>CoinFlagC)&0x1)!=0) ? 1.0 : 0.0;
1798  });
1799  tgcCoin_variables.push_back(coin_inner_tgc_coinflagC);
1800 
1801  // RPC
1802  auto coin_inner_tgc_anyBcRpc=Monitored::Collection("coin_inner_tgc_anyBcRpc",tgcTrigMap_SL,[](const TgcTrig&m) -> double{
1803  return (m.rpc.size()>0);
1804  });
1805  tgcCoin_variables.push_back(coin_inner_tgc_anyBcRpc);
1806  auto coin_inner_tgc_prevBcRpc=Monitored::Collection("coin_inner_tgc_prevBcRpc",tgcTrigMap_SL,[](const TgcTrig&m){
1807  for(const auto& inner : m.rpc){
1808  if(inner->bunch == -1) return 1.;
1809  }
1810  return 0.;
1811  });
1812  tgcCoin_variables.push_back(coin_inner_tgc_prevBcRpc);
1813  auto coin_inner_tgc_currBcRpc=Monitored::Collection("coin_inner_tgc_currBcRpc",tgcTrigMap_SL,[](const TgcTrig&m){
1814  for(const auto& inner : m.rpc){
1815  if(inner->bunch == 0) return 1.;
1816  }
1817  return 0.;
1818  });
1819  tgcCoin_variables.push_back(coin_inner_tgc_currBcRpc);
1820  auto coin_inner_tgc_currBcRpc_goodBcid0=Monitored::Collection("coin_inner_tgc_currBcRpc_goodBcid0",tgcTrigMap_SL,[](const TgcTrig&m){
1821  for(const auto& inner : m.rpc){
1822  if(inner->bunch == 0 && inner->goodBcid0 == 1) return 1.;
1823  }
1824  return 0.;
1825  });
1826  tgcCoin_variables.push_back(coin_inner_tgc_currBcRpc_goodBcid0);
1827  auto coin_inner_tgc_currBcRpc_goodBcid1=Monitored::Collection("coin_inner_tgc_currBcRpc_goodBcid1",tgcTrigMap_SL,[](const TgcTrig&m){
1828  for(const auto& inner : m.rpc){
1829  if(inner->bunch == 0 && inner->goodBcid1 == 1) return 1.;
1830  }
1831  return 0.;
1832  });
1833  tgcCoin_variables.push_back(coin_inner_tgc_currBcRpc_goodBcid1);
1834  auto coin_inner_tgc_currBcRpc_goodBcid2=Monitored::Collection("coin_inner_tgc_currBcRpc_goodBcid2",tgcTrigMap_SL,[](const TgcTrig&m){
1835  for(const auto& inner : m.rpc){
1836  if(inner->bunch == 0 && inner->goodBcid2 == 1) return 1.;
1837  }
1838  return 0.;
1839  });
1840  tgcCoin_variables.push_back(coin_inner_tgc_currBcRpc_goodBcid2);
1841  auto coin_inner_tgc_nextBcRpc=Monitored::Collection("coin_inner_tgc_nextBcRpc",tgcTrigMap_SL,[](const TgcTrig&m){
1842  for(const auto& inner : m.rpc){
1843  if(inner->bunch == 1) return 1.;
1844  }
1845  return 0.;
1846  });
1847  tgcCoin_variables.push_back(coin_inner_tgc_nextBcRpc);
1848  auto coin_inner_tgc_nextnextBcRpc=Monitored::Collection("coin_inner_tgc_nextnextBcRpc",tgcTrigMap_SL,[](const TgcTrig&m){
1849  for(const auto& inner : m.rpc){
1850  if(inner->bunch == 2) return 1.;
1851  }
1852  return 0.;
1853  });
1854  tgcCoin_variables.push_back(coin_inner_tgc_nextnextBcRpc);
1855 
1856  auto coin_inner_tgc_prevBcRpc_goodBcid0=Monitored::Collection("coin_inner_tgc_prevBcRpc_goodBcid0",tgcTrigMap_SL,[](const TgcTrig&m){
1857  for(const auto& inner : m.rpc){
1858  if(inner->bunch == -1 && inner->goodBcid0 == 1) return 1.;
1859  }
1860  return 0.;
1861  });
1862  tgcCoin_variables.push_back(coin_inner_tgc_prevBcRpc_goodBcid0);
1863  auto coin_inner_tgc_nextBcRpc_goodBcid0=Monitored::Collection("coin_inner_tgc_nextBcRpc_goodBcid0",tgcTrigMap_SL,[](const TgcTrig&m){
1864  for(const auto& inner : m.rpc){
1865  if(inner->bunch == 1 && inner->goodBcid0 == 1) return 1.;
1866  }
1867  return 0.;
1868  });
1869  tgcCoin_variables.push_back(coin_inner_tgc_nextBcRpc_goodBcid0);
1870  auto coin_inner_tgc_nextnextBcRpc_goodBcid0=Monitored::Collection("coin_inner_tgc_nextnextBcRpc_goodBcid0",tgcTrigMap_SL,[](const TgcTrig&m){
1871  for(const auto& inner : m.rpc){
1872  if(inner->bunch == 2 && inner->goodBcid0 == 1) return 1.;
1873  }
1874  return 0.;
1875  });
1876  tgcCoin_variables.push_back(coin_inner_tgc_nextnextBcRpc_goodBcid0);
1877 
1878  // NSW
1879  auto coin_inner_tgc_anyBcNsw=Monitored::Collection("coin_inner_tgc_anyBcNsw",tgcTrigMap_SL,[](const TgcTrig&m) -> double{
1880  return (m.nsw.size()>0);
1881  });
1882  tgcCoin_variables.push_back(coin_inner_tgc_anyBcNsw);
1883  auto coin_inner_tgc_prevBcNsw=Monitored::Collection("coin_inner_tgc_prevBcNsw",tgcTrigMap_SL,[](const TgcTrig&m){
1884  for(const auto& inner : m.nsw){
1885  if(inner->bunch == -1) return 1.;
1886  }
1887  return 0.;
1888  });
1889  tgcCoin_variables.push_back(coin_inner_tgc_prevBcNsw);
1890  auto coin_inner_tgc_currBcNsw=Monitored::Collection("coin_inner_tgc_currBcNsw",tgcTrigMap_SL,[](const TgcTrig&m){
1891  for(const auto& inner : m.nsw){
1892  if(inner->bunch == 0) return 1.;
1893  }
1894  return 0.;
1895  });
1896  tgcCoin_variables.push_back(coin_inner_tgc_currBcNsw);
1897  auto coin_inner_tgc_currBcNsw_goodBcid0=Monitored::Collection("coin_inner_tgc_currBcNsw_goodBcid0",tgcTrigMap_SL,[](const TgcTrig&m){
1898  for(const auto& inner : m.nsw){
1899  if(inner->bunch == 0 && inner->goodBcid0 == 1) return 1.;
1900  }
1901  return 0.;
1902  });
1903  tgcCoin_variables.push_back(coin_inner_tgc_currBcNsw_goodBcid0);
1904  auto coin_inner_tgc_currBcNsw_goodBcid1=Monitored::Collection("coin_inner_tgc_currBcNsw_goodBcid1",tgcTrigMap_SL,[](const TgcTrig&m){
1905  for(const auto& inner : m.nsw){
1906  if(inner->bunch == 0 && inner->goodBcid1 == 1) return 1.;
1907  }
1908  return 0.;
1909  });
1910  tgcCoin_variables.push_back(coin_inner_tgc_currBcNsw_goodBcid1);
1911  auto coin_inner_tgc_currBcNsw_goodBcid2=Monitored::Collection("coin_inner_tgc_currBcNsw_goodBcid2",tgcTrigMap_SL,[](const TgcTrig&m){
1912  for(const auto& inner : m.nsw){
1913  if(inner->bunch == 0 && inner->goodBcid2 == 1) return 1.;
1914  }
1915  return 0.;
1916  });
1917  tgcCoin_variables.push_back(coin_inner_tgc_currBcNsw_goodBcid2);
1918  auto coin_inner_tgc_nextBcNsw=Monitored::Collection("coin_inner_tgc_nextBcNsw",tgcTrigMap_SL,[](const TgcTrig&m){
1919  for(const auto& inner : m.nsw){
1920  if(inner->bunch == 1) return 1.;
1921  }
1922  return 0.;
1923  });
1924  tgcCoin_variables.push_back(coin_inner_tgc_nextBcNsw);
1925  auto coin_inner_tgc_nextnextBcNsw=Monitored::Collection("coin_inner_tgc_nextnextBcNsw",tgcTrigMap_SL,[](const TgcTrig&m){
1926  for(const auto& inner : m.nsw){
1927  if(inner->bunch == 2) return 1.;
1928  }
1929  return 0.;
1930  });
1931  tgcCoin_variables.push_back(coin_inner_tgc_nextnextBcNsw);
1932 
1933  auto coin_inner_tgc_prevBcNsw_goodBcid0=Monitored::Collection("coin_inner_tgc_prevBcNsw_goodBcid0",tgcTrigMap_SL,[](const TgcTrig&m){
1934  for(const auto& inner : m.nsw){
1935  if(inner->bunch == -1 && inner->goodBcid0 == 1) return 1.;
1936  }
1937  return 0.;
1938  });
1939  tgcCoin_variables.push_back(coin_inner_tgc_prevBcNsw_goodBcid0);
1940  auto coin_inner_tgc_nextBcNsw_goodBcid0=Monitored::Collection("coin_inner_tgc_nextBcNsw_goodBcid0",tgcTrigMap_SL,[](const TgcTrig&m){
1941  for(const auto& inner : m.nsw){
1942  if(inner->bunch == 1 && inner->goodBcid0 == 1) return 1.;
1943  }
1944  return 0.;
1945  });
1946  tgcCoin_variables.push_back(coin_inner_tgc_nextBcNsw_goodBcid0);
1947  auto coin_inner_tgc_nextnextBcNsw_goodBcid0=Monitored::Collection("coin_inner_tgc_nextnextBcNsw_goodBcid0",tgcTrigMap_SL,[](const TgcTrig&m){
1948  for(const auto& inner : m.nsw){
1949  if(inner->bunch == 2 && inner->goodBcid0 == 1) return 1.;
1950  }
1951  return 0.;
1952  });
1953  tgcCoin_variables.push_back(coin_inner_tgc_nextnextBcNsw_goodBcid0);
1954 
1955  // Tile
1956  auto coin_inner_tgc_anyBcTile=Monitored::Collection("coin_inner_tgc_anyBcTile",tgcTrigMap_SL,[](const TgcTrig&m) -> double{
1957  return (m.tile.size()>0);
1958  });
1959  tgcCoin_variables.push_back(coin_inner_tgc_anyBcTile);
1960  auto coin_inner_tgc_prevBcTile=Monitored::Collection("coin_inner_tgc_prevBcTile",tgcTrigMap_SL,[](const TgcTrig&m){
1961  for(const auto& inner : m.tile){
1962  if(inner->bunch == -1) return 1.;
1963  }
1964  return 0.;
1965  });
1966  tgcCoin_variables.push_back(coin_inner_tgc_prevBcTile);
1967  auto coin_inner_tgc_currBcTile=Monitored::Collection("coin_inner_tgc_currBcTile",tgcTrigMap_SL,[](const TgcTrig&m){
1968  for(const auto& inner : m.tile){
1969  if(inner->bunch == 0) return 1.;
1970  }
1971  return 0.;
1972  });
1973  tgcCoin_variables.push_back(coin_inner_tgc_currBcTile);
1974  auto coin_inner_tgc_currBcTile_goodBcid0=Monitored::Collection("coin_inner_tgc_currBcTile_goodBcid0",tgcTrigMap_SL,[](const TgcTrig&m){
1975  for(const auto& inner : m.tile){
1976  if(inner->bunch == 0 && inner->goodBcid0 == 1) return 1.;
1977  }
1978  return 0.;
1979  });
1980  tgcCoin_variables.push_back(coin_inner_tgc_currBcTile_goodBcid0);
1981  auto coin_inner_tgc_currBcTile_goodBcid1=Monitored::Collection("coin_inner_tgc_currBcTile_goodBcid1",tgcTrigMap_SL,[](const TgcTrig&m){
1982  for(const auto& inner : m.tile){
1983  if(inner->bunch == 0 && inner->goodBcid1 == 1) return 1.;
1984  }
1985  return 0.;
1986  });
1987  tgcCoin_variables.push_back(coin_inner_tgc_currBcTile_goodBcid1);
1988  auto coin_inner_tgc_currBcTile_goodBcid2=Monitored::Collection("coin_inner_tgc_currBcTile_goodBcid2",tgcTrigMap_SL,[](const TgcTrig&m){
1989  for(const auto& inner : m.tile){
1990  if(inner->bunch == 0 && inner->goodBcid2 == 1) return 1.;
1991  }
1992  return 0.;
1993  });
1994  tgcCoin_variables.push_back(coin_inner_tgc_currBcTile_goodBcid2);
1995  auto coin_inner_tgc_nextBcTile=Monitored::Collection("coin_inner_tgc_nextBcTile",tgcTrigMap_SL,[](const TgcTrig&m){
1996  for(const auto& inner : m.tile){
1997  if(inner->bunch == 1) return 1.;
1998  }
1999  return 0.;
2000  });
2001  tgcCoin_variables.push_back(coin_inner_tgc_nextBcTile);
2002  auto coin_inner_tgc_nextnextBcTile=Monitored::Collection("coin_inner_tgc_nextnextBcTile",tgcTrigMap_SL,[](const TgcTrig&m){
2003  for(const auto inner : m.tile){
2004  if(inner->bunch == 2) return 1.;
2005  }
2006  return 0.;
2007  });
2008  tgcCoin_variables.push_back(coin_inner_tgc_nextnextBcTile);
2009 
2010  auto coin_inner_tgc_prevBcTile_goodBcid0=Monitored::Collection("coin_inner_tgc_prevBcTile_goodBcid0",tgcTrigMap_SL,[](const TgcTrig&m){
2011  for(const auto& inner : m.tile){
2012  if(inner->bunch == -1 && inner->goodBcid0 == 1) return 1.;
2013  }
2014  return 0.;
2015  });
2016  tgcCoin_variables.push_back(coin_inner_tgc_prevBcTile_goodBcid0);
2017  auto coin_inner_tgc_nextBcTile_goodBcid0=Monitored::Collection("coin_inner_tgc_nextBcTile_goodBcid0",tgcTrigMap_SL,[](const TgcTrig&m){
2018  for(const auto& inner : m.tile){
2019  if(inner->bunch == 1 && inner->goodBcid0 == 1) return 1.;
2020  }
2021  return 0.;
2022  });
2023  tgcCoin_variables.push_back(coin_inner_tgc_nextBcTile_goodBcid0);
2024  auto coin_inner_tgc_nextnextBcTile_goodBcid0=Monitored::Collection("coin_inner_tgc_nextnextBcTile_goodBcid0",tgcTrigMap_SL,[](const TgcTrig&m){
2025  for(const auto inner : m.tile){
2026  if(inner->bunch == 2 && inner->goodBcid0 == 1) return 1.;
2027  }
2028  return 0.;
2029  });
2030  tgcCoin_variables.push_back(coin_inner_tgc_nextnextBcTile_goodBcid0);
2031 
2032  // EIFI
2033  auto coin_inner_tgc_anyBcEifi=Monitored::Collection("coin_inner_tgc_anyBcEifi",tgcTrigMap_SL,[](const TgcTrig&m) -> double{
2034  return (m.eifi.size()>0);
2035  });
2036  tgcCoin_variables.push_back(coin_inner_tgc_anyBcEifi);
2037  auto coin_inner_tgc_prevBcEifi=Monitored::Collection("coin_inner_tgc_prevBcEifi",tgcTrigMap_SL,[](const TgcTrig&m){
2038  for(const auto& inner : m.eifi){
2039  if(inner->bunch == -1) return 1.;
2040  }
2041  return 0.;
2042  });
2043  tgcCoin_variables.push_back(coin_inner_tgc_prevBcEifi);
2044  auto coin_inner_tgc_currBcEifi=Monitored::Collection("coin_inner_tgc_currBcEifi",tgcTrigMap_SL,[](const TgcTrig&m){
2045  for(const auto& inner : m.eifi){
2046  if(inner->bunch == 0) return 1.;
2047  }
2048  return 0.;
2049  });
2050  tgcCoin_variables.push_back(coin_inner_tgc_currBcEifi);
2051  auto coin_inner_tgc_nextBcEifi=Monitored::Collection("coin_inner_tgc_nextBcEifi",tgcTrigMap_SL,[](const TgcTrig&m){
2052  for(const auto& inner : m.eifi){
2053  if(inner->bunch == 1) return 1.;
2054  }
2055  return 0.;
2056  });
2057  tgcCoin_variables.push_back(coin_inner_tgc_nextBcEifi);
2058  auto coin_inner_tgc_nextnextBcEifi=Monitored::Collection("coin_inner_tgc_nextnextBcEifi",tgcTrigMap_SL,[](const TgcTrig&m){
2059  for(const auto inner : m.eifi){
2060  if(inner->bunch == 2) return 1.;
2061  }
2062  return 0.;
2063  });
2064  tgcCoin_variables.push_back(coin_inner_tgc_nextnextBcEifi);
2065 
2066 
2067  // RPC BIS78 inner coincidence
2068  auto coin_inner_rpc_slSector=Monitored::Collection("coin_inner_rpc_slSector",tgcTrigRpcMap,[](const TgcTrigRpc&m){
2069  return m.slSector;
2070  });
2071  tgcCoin_variables.push_back(coin_inner_rpc_slSector);
2072  auto coin_inner_rpc_slSector_goodTiming=Monitored::Collection("coin_inner_rpc_slSector_goodTiming",tgcTrigRpcMap,[](const TgcTrigRpc&m){
2073  return (m.goodTiming) ? m.slSector : -999;
2074  });
2075  tgcCoin_variables.push_back(coin_inner_rpc_slSector_goodTiming);
2076  auto coin_inner_rpc_roiEta=Monitored::Collection("coin_inner_rpc_roiEta",tgcTrigRpcMap,[](const TgcTrigRpc&m){
2077  return m.roiEta;
2078  });
2079  tgcCoin_variables.push_back(coin_inner_rpc_roiEta);
2080  auto coin_inner_rpc_roiPhi=Monitored::Collection("coin_inner_rpc_roiPhi",tgcTrigRpcMap,[](const TgcTrigRpc&m){
2081  return m.roiPhi;
2082  });
2083  tgcCoin_variables.push_back(coin_inner_rpc_roiPhi);
2084  auto coin_inner_rpc_roiNum=Monitored::Collection("coin_inner_rpc_roiNum",tgcTrigRpcMap,[](const TgcTrigRpc&m){
2085  return m.roiNum;
2086  });
2087  tgcCoin_variables.push_back(coin_inner_rpc_roiNum);
2088  auto coin_inner_rpc_deltaBcid=Monitored::Collection("coin_inner_rpc_deltaBcid",tgcTrigRpcMap,[](const TgcTrigRpc&m){
2089  return m.deltaBcid;
2090  });
2091  tgcCoin_variables.push_back(coin_inner_rpc_deltaBcid);
2092  auto coin_inner_rpc_deltaTiming=Monitored::Collection("coin_inner_rpc_deltaTiming",tgcTrigRpcMap,[](const TgcTrigRpc&m){
2093  return m.deltaTiming;
2094  });
2095  tgcCoin_variables.push_back(coin_inner_rpc_deltaTiming);
2096  auto coin_inner_rpc_rpcEta=Monitored::Collection("coin_inner_rpc_rpcEta",tgcTrigRpcMap,[](const TgcTrigRpc&m){
2097  return m.rpcEta;
2098  });
2099  tgcCoin_variables.push_back(coin_inner_rpc_rpcEta);
2100  auto coin_inner_rpc_rpcPhi=Monitored::Collection("coin_inner_rpc_rpcPhi",tgcTrigRpcMap,[](const TgcTrigRpc&m){
2101  return m.rpcPhi;
2102  });
2103  tgcCoin_variables.push_back(coin_inner_rpc_rpcPhi);
2104  auto coin_inner_rpc_rpcDEta=Monitored::Collection("coin_inner_rpc_rpcDEta",tgcTrigRpcMap,[](const TgcTrigRpc&m){
2105  return m.rpcDEta;
2106  });
2107  tgcCoin_variables.push_back(coin_inner_rpc_rpcDEta);
2108  auto coin_inner_rpc_rpcDPhi=Monitored::Collection("coin_inner_rpc_rpcDPhi",tgcTrigRpcMap,[](const TgcTrigRpc&m){
2109  return m.rpcDPhi;
2110  });
2111  tgcCoin_variables.push_back(coin_inner_rpc_rpcDPhi);
2112  auto coin_inner_rpc_currBc=Monitored::Collection("coin_inner_rpc_currBc",tgcTrigRpcMap,[](const TgcTrigRpc&m){
2113  return m.currBc;
2114  });
2115  tgcCoin_variables.push_back(coin_inner_rpc_currBc);
2116  auto coin_inner_rpc_goodBcid0=Monitored::Collection("coin_inner_rpc_goodBcid0",tgcTrigRpcMap,[](const TgcTrigRpc&m){
2117  return m.goodBcid0;
2118  });
2119  tgcCoin_variables.push_back(coin_inner_rpc_goodBcid0);
2120  auto coin_inner_rpc_goodBcid1=Monitored::Collection("coin_inner_rpc_goodBcid1",tgcTrigRpcMap,[](const TgcTrigRpc&m){
2121  return m.goodBcid1;
2122  });
2123  tgcCoin_variables.push_back(coin_inner_rpc_goodBcid1);
2124  auto coin_inner_rpc_goodBcid2=Monitored::Collection("coin_inner_rpc_goodBcid2",tgcTrigRpcMap,[](const TgcTrigRpc&m){
2125  return m.goodBcid2;
2126  });
2127  tgcCoin_variables.push_back(coin_inner_rpc_goodBcid2);
2128  auto coin_inner_rpc_goodTiming=Monitored::Collection("coin_inner_rpc_goodTiming",tgcTrigRpcMap,[](const TgcTrigRpc&m){
2129  return m.goodTiming;
2130  });
2131  tgcCoin_variables.push_back(coin_inner_rpc_goodTiming);
2132 
2133 
2134  // NSW inner coincidence
2135  auto coin_inner_nsw_deltaR=Monitored::Collection("coin_inner_nsw_deltaR",tgcTrigNswMap,[](const TgcTrigNsw&m){
2136  return m.deltaR;
2137  });
2138  tgcCoin_variables.push_back(coin_inner_nsw_deltaR);
2139  auto coin_inner_nsw_slSector=Monitored::Collection("coin_inner_nsw_slSector",tgcTrigNswMap,[](const TgcTrigNsw&m){
2140  return m.slSector;
2141  });
2142  tgcCoin_variables.push_back(coin_inner_nsw_slSector);
2143  auto coin_inner_nsw_slSector_goodTiming=Monitored::Collection("coin_inner_nsw_slSector_goodTiming",tgcTrigNswMap,[](const TgcTrigNsw&m){
2144  return (m.goodTiming) ? m.slSector : -999;
2145  });
2146  tgcCoin_variables.push_back(coin_inner_nsw_slSector_goodTiming);
2147  auto coin_inner_nsw_slSector_endcap=Monitored::Collection("coin_inner_nsw_slSector_endcap",tgcTrigNswMap,[](const TgcTrigNsw&m){
2148  return (std::abs(m.roiEta)>1.3 && m.isForward==0) ? m.slSector : -999;
2149  });
2150  tgcCoin_variables.push_back(coin_inner_nsw_slSector_endcap);
2151  auto coin_inner_nsw_slSector_forward=Monitored::Collection("coin_inner_nsw_slSector_forward",tgcTrigNswMap,[](const TgcTrigNsw&m){
2152  return (m.isForward==1) ? m.slSector : -999;
2153  });
2154  tgcCoin_variables.push_back(coin_inner_nsw_slSector_forward);
2155  auto coin_inner_nsw_slSector_goodTiming_endcap=Monitored::Collection("coin_inner_nsw_slSector_goodTiming_endcap",tgcTrigNswMap,[](const TgcTrigNsw&m){
2156  return (std::abs(m.roiEta)>1.3 && m.isForward==0 && m.goodTiming) ? m.slSector : -999;
2157  });
2158  tgcCoin_variables.push_back(coin_inner_nsw_slSector_goodTiming_endcap);
2159  auto coin_inner_nsw_slSector_goodTiming_forward=Monitored::Collection("coin_inner_nsw_slSector_goodTiming_forward",tgcTrigNswMap,[](const TgcTrigNsw&m){
2160  return (m.isForward==1 && m.goodTiming) ? m.slSector : -999;
2161  });
2162  tgcCoin_variables.push_back(coin_inner_nsw_slSector_goodTiming_forward);
2163  auto coin_inner_nsw_roiEta=Monitored::Collection("coin_inner_nsw_roiEta",tgcTrigNswMap,[](const TgcTrigNsw&m){
2164  return m.roiEta;
2165  });
2166  tgcCoin_variables.push_back(coin_inner_nsw_roiEta);
2167  auto coin_inner_nsw_roiPhi=Monitored::Collection("coin_inner_nsw_roiPhi",tgcTrigNswMap,[](const TgcTrigNsw&m){
2168  return m.roiPhi;
2169  });
2170  tgcCoin_variables.push_back(coin_inner_nsw_roiPhi);
2171  auto coin_inner_nsw_roiNum=Monitored::Collection("coin_inner_nsw_roiNum",tgcTrigNswMap,[](const TgcTrigNsw&m){
2172  return m.roiNum;
2173  });
2174  tgcCoin_variables.push_back(coin_inner_nsw_roiNum);
2175  auto coin_inner_nsw_deltaBcid=Monitored::Collection("coin_inner_nsw_deltaBcid",tgcTrigNswMap,[](const TgcTrigNsw&m){
2176  return m.deltaBcid;
2177  });
2178  tgcCoin_variables.push_back(coin_inner_nsw_deltaBcid);
2179  auto coin_inner_nsw_deltaTiming=Monitored::Collection("coin_inner_nsw_deltaTiming",tgcTrigNswMap,[](const TgcTrigNsw&m){
2180  return m.deltaTiming;
2181  });
2182  tgcCoin_variables.push_back(coin_inner_nsw_deltaTiming);
2183  auto coin_inner_nsw_R=Monitored::Collection("coin_inner_nsw_R",tgcTrigNswMap,[](const TgcTrigNsw&m){
2184  return m.R;
2185  });
2186  tgcCoin_variables.push_back(coin_inner_nsw_R);
2187  auto coin_inner_nsw_Phi=Monitored::Collection("coin_inner_nsw_Phi",tgcTrigNswMap,[](const TgcTrigNsw&m){
2188  return m.Phi;
2189  });
2190  tgcCoin_variables.push_back(coin_inner_nsw_Phi);
2191  auto coin_inner_nsw_deltaTheta=Monitored::Collection("coin_inner_nsw_deltaTheta",tgcTrigNswMap,[](const TgcTrigNsw&m){
2192  return m.deltaTheta;
2193  });
2194  tgcCoin_variables.push_back(coin_inner_nsw_deltaTheta);
2195  auto coin_inner_nsw_isForward=Monitored::Collection("coin_inner_nsw_isForward",tgcTrigNswMap,[](const TgcTrigNsw&m){
2196  return m.isForward==1;
2197  });
2198  tgcCoin_variables.push_back(coin_inner_nsw_isForward);
2199  auto coin_inner_nsw_isEndcap=Monitored::Collection("coin_inner_nsw_isEndcap",tgcTrigNswMap,[](const TgcTrigNsw&m){
2200  return m.isForward==0;
2201  });
2202  tgcCoin_variables.push_back(coin_inner_nsw_isEndcap);
2203  auto coin_inner_nsw_currBc=Monitored::Collection("coin_inner_nsw_currBc",tgcTrigNswMap,[](const TgcTrigNsw&m){
2204  return m.currBc;
2205  });
2206  tgcCoin_variables.push_back(coin_inner_nsw_currBc);
2207  auto coin_inner_nsw_endcap_currBc=Monitored::Collection("coin_inner_nsw_endcap_currBc",tgcTrigNswMap,[](const TgcTrigNsw&m){
2208  return (m.isForward==0 && m.currBc==1);
2209  });
2210  tgcCoin_variables.push_back(coin_inner_nsw_endcap_currBc);
2211  auto coin_inner_nsw_forward_currBc=Monitored::Collection("coin_inner_nsw_forward_currBc",tgcTrigNswMap,[](const TgcTrigNsw&m){
2212  return (m.isForward==1 && m.currBc==1);
2213  });
2214  tgcCoin_variables.push_back(coin_inner_nsw_forward_currBc);
2215  auto coin_inner_nsw_goodBcid0=Monitored::Collection("coin_inner_nsw_goodBcid0",tgcTrigNswMap,[](const TgcTrigNsw&m){
2216  return m.goodBcid0;
2217  });
2218  tgcCoin_variables.push_back(coin_inner_nsw_goodBcid0);
2219  auto coin_inner_nsw_goodBcid1=Monitored::Collection("coin_inner_nsw_goodBcid1",tgcTrigNswMap,[](const TgcTrigNsw&m){
2220  return m.goodBcid1;
2221  });
2222  tgcCoin_variables.push_back(coin_inner_nsw_goodBcid1);
2223  auto coin_inner_nsw_goodBcid2=Monitored::Collection("coin_inner_nsw_goodBcid2",tgcTrigNswMap,[](const TgcTrigNsw&m){
2224  return m.goodBcid2;
2225  });
2226  tgcCoin_variables.push_back(coin_inner_nsw_goodBcid2);
2227  auto coin_inner_nsw_goodTiming=Monitored::Collection("coin_inner_nsw_goodTiming",tgcTrigNswMap,[](const TgcTrigNsw&m){
2228  return m.goodTiming;
2229  });
2230  tgcCoin_variables.push_back(coin_inner_nsw_goodTiming);
2231 
2232  auto coin_inner_nsw_slInputIndex=Monitored::Collection("coin_inner_nsw_slInputIndex",tgcTrigNswMap,[](const TgcTrigNsw&m){
2233  return m.slInputIndex;
2234  });
2235  tgcCoin_variables.push_back(coin_inner_nsw_slInputIndex);
2236  auto coin_inner_nsw_slInputIndex_AEndcap=Monitored::Collection("coin_inner_nsw_slInputIndex_AEndcap",tgcTrigNswMap,[](const TgcTrigNsw&m){
2237  return (m.isAside==1 && m.isForward==0) ? m.slInputIndex : -999;
2238  });
2239  tgcCoin_variables.push_back(coin_inner_nsw_slInputIndex_AEndcap);
2240  auto coin_inner_nsw_slInputIndex_CEndcap=Monitored::Collection("coin_inner_nsw_slInputIndex_CEndcap",tgcTrigNswMap,[](const TgcTrigNsw&m){
2241  return (m.isAside==0 && m.isForward==0) ? m.slInputIndex : -999;
2242  });
2243  tgcCoin_variables.push_back(coin_inner_nsw_slInputIndex_CEndcap);
2244  auto coin_inner_nsw_slInputIndex_AForward=Monitored::Collection("coin_inner_nsw_slInputIndex_AForward",tgcTrigNswMap,[](const TgcTrigNsw&m){
2245  return (m.isAside==1 && m.isForward==1) ? m.slInputIndex : -999;
2246  });
2247  tgcCoin_variables.push_back(coin_inner_nsw_slInputIndex_AForward);
2248  auto coin_inner_nsw_slInputIndex_CForward=Monitored::Collection("coin_inner_nsw_slInputIndex_CForward",tgcTrigNswMap,[](const TgcTrigNsw&m){
2249  return (m.isAside==0 && m.isForward==1) ? m.slInputIndex : -999;
2250  });
2251  tgcCoin_variables.push_back(coin_inner_nsw_slInputIndex_CForward);
2252 
2253  auto coin_inner_nsw_goodTimingBcid0=Monitored::Collection("coin_inner_nsw_goodTimingBcid0",tgcTrigNswMap,[](const TgcTrigNsw&m){
2254  return (m.goodTiming==1 && m.goodBcid0==1);
2255  });
2256  tgcCoin_variables.push_back(coin_inner_nsw_goodTimingBcid0);
2257  auto coin_inner_nsw_goodTimingBcid1=Monitored::Collection("coin_inner_nsw_goodTimingBcid1",tgcTrigNswMap,[](const TgcTrigNsw&m){
2258  return (m.goodTiming==1 && m.goodBcid1==1);
2259  });
2260  tgcCoin_variables.push_back(coin_inner_nsw_goodTimingBcid1);
2261  auto coin_inner_nsw_goodTimingBcid2=Monitored::Collection("coin_inner_nsw_goodTimingBcid2",tgcTrigNswMap,[](const TgcTrigNsw&m){
2262  return (m.goodTiming==1 && m.goodBcid2==1);
2263  });
2264  tgcCoin_variables.push_back(coin_inner_nsw_goodTimingBcid2);
2265  auto coin_inner_nsw_BcPrev=Monitored::Collection("coin_inner_nsw_BcPrev",tgcTrigNswMap,[](const TgcTrigNsw&m){
2266  return m.deltaTiming==-1;
2267  });
2268  tgcCoin_variables.push_back(coin_inner_nsw_BcPrev);
2269  auto coin_inner_nsw_BcCurr=Monitored::Collection("coin_inner_nsw_BcCurr",tgcTrigNswMap,[](const TgcTrigNsw&m){
2270  return m.deltaTiming==0;
2271  });
2272  tgcCoin_variables.push_back(coin_inner_nsw_BcCurr);
2273  auto coin_inner_nsw_BcNext=Monitored::Collection("coin_inner_nsw_BcNext",tgcTrigNswMap,[](const TgcTrigNsw&m){
2274  return m.deltaTiming==1;
2275  });
2276  tgcCoin_variables.push_back(coin_inner_nsw_BcNext);
2277  auto coin_inner_nsw_BcNextNext=Monitored::Collection("coin_inner_nsw_BcNextNext",tgcTrigNswMap,[](const TgcTrigNsw&m){
2278  return m.deltaTiming==2;
2279  });
2280  tgcCoin_variables.push_back(coin_inner_nsw_BcNextNext);
2281 
2282  // Tile inner coincidence
2283  auto coin_inner_tile_slSector=Monitored::Collection("coin_inner_tile_slSector",tgcTrigTileMap,[](const TgcTrigTile&m){
2284  return m.slSector;
2285  });
2286  tgcCoin_variables.push_back(coin_inner_tile_slSector);
2287  auto coin_inner_tile_slSector_goodTiming=Monitored::Collection("coin_inner_tile_slSector_goodTiming",tgcTrigTileMap,[](const TgcTrigTile&m){
2288  return (m.goodTiming) ? m.slSector : -999;
2289  });
2290  tgcCoin_variables.push_back(coin_inner_tile_slSector_goodTiming);
2291  auto coin_inner_tile_roiEta=Monitored::Collection("coin_inner_tile_roiEta",tgcTrigTileMap,[](const TgcTrigTile&m){
2292  return m.roiEta;
2293  });
2294  tgcCoin_variables.push_back(coin_inner_tile_roiEta);
2295  auto coin_inner_tile_roiPhi=Monitored::Collection("coin_inner_tile_roiPhi",tgcTrigTileMap,[](const TgcTrigTile&m){
2296  return m.roiPhi;
2297  });
2298  tgcCoin_variables.push_back(coin_inner_tile_roiPhi);
2299  auto coin_inner_tile_roiNum=Monitored::Collection("coin_inner_tile_roiNum",tgcTrigTileMap,[](const TgcTrigTile&m){
2300  return m.roiNum;
2301  });
2302  tgcCoin_variables.push_back(coin_inner_tile_roiNum);
2303  auto coin_inner_tile_deltaBcid=Monitored::Collection("coin_inner_tile_deltaBcid",tgcTrigTileMap,[](const TgcTrigTile&m){
2304  return m.deltaBcid;
2305  });
2306  tgcCoin_variables.push_back(coin_inner_tile_deltaBcid);
2307  auto coin_inner_tile_deltaTiming=Monitored::Collection("coin_inner_tile_deltaTiming",tgcTrigTileMap,[](const TgcTrigTile&m){
2308  return m.deltaTiming;
2309  });
2310  tgcCoin_variables.push_back(coin_inner_tile_deltaTiming);
2311  auto coin_inner_tile_tmdbDecisions=Monitored::Collection("coin_inner_tile_tmdbDecisions",tgcTrigTileMap,[](const TgcTrigTile&m){
2312  return m.tmdbDecisions;
2313  });
2314  tgcCoin_variables.push_back(coin_inner_tile_tmdbDecisions);
2315  auto coin_inner_tile_currBc=Monitored::Collection("coin_inner_tile_currBc",tgcTrigTileMap,[](const TgcTrigTile&m){
2316  return m.currBc;
2317  });
2318  tgcCoin_variables.push_back(coin_inner_tile_currBc);
2319  auto coin_inner_tile_goodBcid0=Monitored::Collection("coin_inner_tile_goodBcid0",tgcTrigTileMap,[](const TgcTrigTile&m){
2320  return m.goodBcid0;
2321  });
2322  tgcCoin_variables.push_back(coin_inner_tile_goodBcid0);
2323  auto coin_inner_tile_goodBcid1=Monitored::Collection("coin_inner_tile_goodBcid1",tgcTrigTileMap,[](const TgcTrigTile&m){
2324  return m.goodBcid1;
2325  });
2326  tgcCoin_variables.push_back(coin_inner_tile_goodBcid1);
2327  auto coin_inner_tile_goodBcid2=Monitored::Collection("coin_inner_tile_goodBcid2",tgcTrigTileMap,[](const TgcTrigTile&m){
2328  return m.goodBcid2;
2329  });
2330  tgcCoin_variables.push_back(coin_inner_tile_goodBcid2);
2331  auto coin_inner_tile_goodTiming=Monitored::Collection("coin_inner_tile_goodTiming",tgcTrigTileMap,[](const TgcTrigTile&m){
2332  return m.goodTiming;
2333  });
2334  tgcCoin_variables.push_back(coin_inner_tile_goodTiming);
2335  // Tile inner coincidence (modified decisions)
2336  auto coin_inner_tile2_slSector=Monitored::Collection("coin_inner_tile2_slSector",tgcTrigTileMap_allmods,[](const TgcTrigTile&m){
2337  return m.slSector;
2338  });
2339  tgcCoin_variables.push_back(coin_inner_tile2_slSector);
2340  auto coin_inner_tile2_currBc=Monitored::Collection("coin_inner_tile2_currBc",tgcTrigTileMap_allmods,[](const TgcTrigTile&m){
2341  return m.currBc;
2342  });
2343  tgcCoin_variables.push_back(coin_inner_tile2_currBc);
2344  auto coin_inner_tile2_tmdbDecisions=Monitored::Collection("coin_inner_tile2_tmdbDecisions",tgcTrigTileMap_allmods,[](const TgcTrigTile&m){
2345  return m.tmdbDecisions;
2346  });
2347  tgcCoin_variables.push_back(coin_inner_tile2_tmdbDecisions);
2348 
2349  // EIFI inner coincidence
2350  auto coin_inner_eifi_slSector_goodTiming=Monitored::Collection("coin_inner_eifi_slSector_goodTiming",tgcTrigEifiMap,[](const TgcTrigEifi&m){
2351  return (m.goodTiming) ? m.slSector : -999;
2352  });
2353  tgcCoin_variables.push_back(coin_inner_eifi_slSector_goodTiming);
2354  auto coin_inner_eifi_slSector=Monitored::Collection("coin_inner_eifi_slSector",tgcTrigEifiMap,[](const TgcTrigEifi&m){
2355  return m.slSector;
2356  });
2357  tgcCoin_variables.push_back(coin_inner_eifi_slSector);
2358  auto coin_inner_eifi_roiEta=Monitored::Collection("coin_inner_eifi_roiEta",tgcTrigEifiMap,[](const TgcTrigEifi&m){
2359  return m.roiEta;
2360  });
2361  tgcCoin_variables.push_back(coin_inner_eifi_roiEta);
2362  auto coin_inner_eifi_roiPhi=Monitored::Collection("coin_inner_eifi_roiPhi",tgcTrigEifiMap,[](const TgcTrigEifi&m){
2363  return m.roiPhi;
2364  });
2365  tgcCoin_variables.push_back(coin_inner_eifi_roiPhi);
2366  auto coin_inner_eifi_roiNum=Monitored::Collection("coin_inner_eifi_roiNum",tgcTrigEifiMap,[](const TgcTrigEifi&m){
2367  return m.roiNum;
2368  });
2369  tgcCoin_variables.push_back(coin_inner_eifi_roiNum);
2370  auto coin_inner_eifi_deltaTiming=Monitored::Collection("coin_inner_eifi_deltaTiming",tgcTrigEifiMap,[](const TgcTrigEifi&m){
2371  return m.deltaTiming;
2372  });
2373  tgcCoin_variables.push_back(coin_inner_eifi_deltaTiming);
2374  auto coin_inner_eifi_currBc=Monitored::Collection("coin_inner_eifi_currBc",tgcTrigEifiMap,[](const TgcTrigEifi&m){
2375  return m.currBc;
2376  });
2377  tgcCoin_variables.push_back(coin_inner_eifi_currBc);
2378  auto coin_inner_eifi_goodTiming=Monitored::Collection("coin_inner_eifi_goodTiming",tgcTrigEifiMap,[](const TgcTrigEifi&m){
2379  return m.goodTiming;
2380  });
2381  tgcCoin_variables.push_back(coin_inner_eifi_goodTiming);
2382 
2383 
2384  fill(m_packageName+"_TgcCoin", tgcCoin_variables);
2385 
2386  ATH_MSG_DEBUG("End filling TGC CoinData histograms");
2387  }
2388  }
2389 
2391  ATH_MSG_DEBUG("Done fillHistograms()");
2392  return StatusCode::SUCCESS;
2393 }
2394 
2396  const std::vector<TgcTrig>& tgcTrigs,
2397  std::vector<Monitored::ObjectsCollection<std::vector<TgcTrig>, double>>& varowner,
2398  MonVariables& variables) const {
2399  varowner.push_back(Monitored::Collection(type+"_coin_lb",tgcTrigs,[](const TgcTrig&m){return m.lb;}));
2400  variables.push_back(varowner.back());
2401  varowner.push_back(Monitored::Collection(type+"_coin_eta",tgcTrigs,[](const TgcTrig&m){return m.eta;}));
2402  variables.push_back(varowner.back());
2403  varowner.push_back(Monitored::Collection(type+"_coin_phi",tgcTrigs,[](const TgcTrig&m){return m.phi + tgc_coin_phi_small_offset;}));
2404  variables.push_back(varowner.back());
2405  varowner.push_back(Monitored::Collection(type+"_coin_bunch",tgcTrigs,[](const TgcTrig&m){return m.bunch;}));
2406  variables.push_back(varowner.back());
2407  varowner.push_back(Monitored::Collection(type+"_coin_roi",tgcTrigs,[](const TgcTrig&m){return m.roi;}));
2408  variables.push_back(varowner.back());
2409  varowner.push_back(Monitored::Collection(type+"_coin_sector",tgcTrigs,[](const TgcTrig&m){return m.sector;}));
2410  variables.push_back(varowner.back());
2411  varowner.push_back(Monitored::Collection(type+"_coin_pt",tgcTrigs,[](const TgcTrig&m){return m.pt & 0xF;}));
2412  variables.push_back(varowner.back());
2413  varowner.push_back(Monitored::Collection(type+"_coin_CoinFlagQ",tgcTrigs,[](const TgcTrig&m){return m.isPositiveDeltaR;}));
2414  variables.push_back(varowner.back());
2415  varowner.push_back(Monitored::Collection(type+"_coin_CoinFlagQpos",tgcTrigs,[](const TgcTrig&m){return m.isPositiveDeltaR==0;}));
2416  variables.push_back(varowner.back());
2417  varowner.push_back(Monitored::Collection(type+"_coin_CoinFlagQneg",tgcTrigs,[](const TgcTrig&m){return m.isPositiveDeltaR==1;}));
2418  variables.push_back(varowner.back());
2419  varowner.push_back(Monitored::Collection(type+"_coin_CoinFlags",tgcTrigs,[](const TgcTrig&m){return (m.pt>>CoinFlags)&0x7;}));
2420  variables.push_back(varowner.back());
2421  varowner.push_back(Monitored::Collection(type+"_coin_CoinFlagF",tgcTrigs,[](const TgcTrig&m){return (m.pt>>CoinFlagF)&0x1;}));
2422  variables.push_back(varowner.back());
2423  varowner.push_back(Monitored::Collection(type+"_coin_CoinFlagC",tgcTrigs,[](const TgcTrig&m){return (m.pt>>CoinFlagC)&0x1;}));
2424  variables.push_back(varowner.back());
2425  varowner.push_back(Monitored::Collection(type+"_coin_CoinFlagH",tgcTrigs,[](const TgcTrig&m){return (m.pt>>CoinFlagH)&0x1;}));
2426  variables.push_back(varowner.back());
2427  varowner.push_back(Monitored::Collection(type+"_coin_InnerCoinType",tgcTrigs,[](const TgcTrig&m){return (m.pt>>InnerCoinFlags)&0xF;}));
2428  variables.push_back(varowner.back());
2429  varowner.push_back(Monitored::Collection(type+"_coin_CoinFlagEI",tgcTrigs,[](const TgcTrig&m){return (m.pt>>CoinFlagEI)&0x1;}));
2430  variables.push_back(varowner.back());
2431  varowner.push_back(Monitored::Collection(type+"_coin_CoinFlagTile",tgcTrigs,[](const TgcTrig&m){return (m.pt>>CoinFlagTile)&0x1;}));
2432  variables.push_back(varowner.back());
2433  varowner.push_back(Monitored::Collection(type+"_coin_CoinFlagRPC",tgcTrigs,[](const TgcTrig&m){return (m.pt>>CoinFlagRPC)&0x1;}));
2434  variables.push_back(varowner.back());
2435  varowner.push_back(Monitored::Collection(type+"_coin_CoinFlagNSW",tgcTrigs,[](const TgcTrig&m){return (m.pt>>CoinFlagNSW)&0x1;}));
2436  variables.push_back(varowner.back());
2437  varowner.push_back(Monitored::Collection(type+"_coin_veto",tgcTrigs,[](const TgcTrig&m){return m.veto;}));
2438  variables.push_back(varowner.back());
2439  varowner.push_back(Monitored::Collection(type+"_coin_veto_sector",tgcTrigs,[](const TgcTrig&m){return (m.veto==1)?(m.sector):(-1);}));
2440  variables.push_back(varowner.back());
2441  varowner.push_back(Monitored::Collection(type+"_coin_veto_roi",tgcTrigs,[](const TgcTrig&m){return (m.veto==1)?(m.roi):(-1);}));
2442  variables.push_back(varowner.back());
2443  varowner.push_back(Monitored::Collection(type+"_coin_isPositiveDeltaR",tgcTrigs,[](const TgcTrig&m){return m.isPositiveDeltaR;}));
2444  variables.push_back(varowner.back());
2445  varowner.push_back(Monitored::Collection(type+"_coin_cutmask_pt1",tgcTrigs,[](const TgcTrig&m){return ((m.pt&0xF)==1);}));
2446  variables.push_back(varowner.back());
2447  varowner.push_back(Monitored::Collection(type+"_coin_cutmask_pt2",tgcTrigs,[](const TgcTrig&m){return ((m.pt&0xF)==2);}));
2448  variables.push_back(varowner.back());
2449  varowner.push_back(Monitored::Collection(type+"_coin_cutmask_pt3",tgcTrigs,[](const TgcTrig&m){return ((m.pt&0xF)==3);}));
2450  variables.push_back(varowner.back());
2451  varowner.push_back(Monitored::Collection(type+"_coin_cutmask_pt4",tgcTrigs,[](const TgcTrig&m){return ((m.pt&0xF)==4);}));
2452  variables.push_back(varowner.back());
2453  varowner.push_back(Monitored::Collection(type+"_coin_cutmask_pt5",tgcTrigs,[](const TgcTrig&m){return ((m.pt&0xF)==5);}));
2454  variables.push_back(varowner.back());
2455  varowner.push_back(Monitored::Collection(type+"_coin_cutmask_pt6",tgcTrigs,[](const TgcTrig&m){return ((m.pt&0xF)==6);}));
2456  variables.push_back(varowner.back());
2457  varowner.push_back(Monitored::Collection(type+"_coin_cutmask_pt7",tgcTrigs,[](const TgcTrig&m){return ((m.pt&0xF)==7);}));
2458  variables.push_back(varowner.back());
2459  varowner.push_back(Monitored::Collection(type+"_coin_cutmask_pt8",tgcTrigs,[](const TgcTrig&m){return ((m.pt&0xF)==8);}));
2460  variables.push_back(varowner.back());
2461  varowner.push_back(Monitored::Collection(type+"_coin_cutmask_pt9",tgcTrigs,[](const TgcTrig&m){return ((m.pt&0xF)==9);}));
2462  variables.push_back(varowner.back());
2463  varowner.push_back(Monitored::Collection(type+"_coin_cutmask_pt10",tgcTrigs,[](const TgcTrig&m){return ((m.pt&0xF)==10);}));
2464  variables.push_back(varowner.back());
2465  varowner.push_back(Monitored::Collection(type+"_coin_cutmask_pt11",tgcTrigs,[](const TgcTrig&m){return ((m.pt&0xF)==11);}));
2466  variables.push_back(varowner.back());
2467  varowner.push_back(Monitored::Collection(type+"_coin_cutmask_pt12",tgcTrigs,[](const TgcTrig&m){return ((m.pt&0xF)==12);}));
2468  variables.push_back(varowner.back());
2469  varowner.push_back(Monitored::Collection(type+"_coin_cutmask_pt13",tgcTrigs,[](const TgcTrig&m){return ((m.pt&0xF)==13);}));
2470  variables.push_back(varowner.back());
2471  varowner.push_back(Monitored::Collection(type+"_coin_cutmask_pt14",tgcTrigs,[](const TgcTrig&m){return ((m.pt&0xF)==14);}));
2472  variables.push_back(varowner.back());
2473  varowner.push_back(Monitored::Collection(type+"_coin_cutmask_pt15",tgcTrigs,[](const TgcTrig&m){return ((m.pt&0xF)==15);}));
2474  variables.push_back(varowner.back());
2475 }
2477  const std::vector<TgcTrig>& tgcTrigs,
2478  const std::vector<ExtPos>& extpositions_pivot,
2479  std::vector<ExtTrigInfo>& extTrigInfoVec,
2480  std::vector<Monitored::ObjectsCollection<std::vector<ExtTrigInfo>, double>>& varowner,
2481  MonVariables& variables) const {
2482  for(const auto& ext : extpositions_pivot){
2483  if(ext.muon->pt() < m_pTCutOnTrigExtrapolation.value() )continue;
2484  bool matched = false;
2485  bool matchedQ = false;
2486  bool matchedF = false;
2487  bool matchedC = false;
2488  bool matchedH = false;
2489  bool matchedEI = false;
2490  bool matchedTile = false;
2491  bool matchedRPC = false;
2492  bool matchedNSW = false;
2493  for(const auto& tgcTrig : tgcTrigs){
2494  if(tgcTrig.bunch!=0)continue; // only the current bunch
2495  if(tgcTrig.isAside==1 && ext.extPos.z()<0)continue;
2496  if(tgcTrig.isAside==0 && ext.extPos.z()>0)continue;
2497  if(tgcTrig.type == Muon::TgcCoinData::TYPE_SL){
2498  const Amg::Vector3D posOut(tgcTrig.x_Out,tgcTrig.y_Out,tgcTrig.z_Out);
2499  if( Amg::deltaR(posOut,ext.extPos) > m_l1trigMatchWindowPt15 )continue;
2500  }else{
2501  TVector2 vec(tgcTrig.x_Out,tgcTrig.y_Out);
2502  double deltaPhi = vec.DeltaPhi( TVector2(ext.extPos.x(), ext.extPos.y()) );
2503  double deltaR = vec.Mod() - TVector2(ext.extPos.x(), ext.extPos.y()).Mod();
2504  if( std::abs(deltaPhi) > m_dPhiCutOnM3 || std::abs(deltaR) > m_dRCutOnM3 )continue;
2505  }
2506  matched |= 1;
2507  int charge = (tgcTrig.isPositiveDeltaR==0) ? (-1) : (+1);
2508  matchedQ |= (ext.muon->charge()*charge>0);
2509  matchedF |= (tgcTrig.pt>>CoinFlagF) & 0x1;
2510  matchedC |= (tgcTrig.pt>>CoinFlagC) & 0x1;
2511  matchedH |= (tgcTrig.pt>>CoinFlagH) & 0x1;
2512  matchedEI |= (tgcTrig.pt>>CoinFlagEI) & 0x1;
2513  matchedTile |= (tgcTrig.pt>>CoinFlagTile) & 0x1;
2514  matchedRPC |= (tgcTrig.pt>>CoinFlagRPC) & 0x1;
2515  matchedNSW |= (tgcTrig.pt>>CoinFlagNSW) & 0x1;
2516  }
2517  ExtTrigInfo extTrigInfo;
2518  extTrigInfo.eta = ext.extPos.eta();
2519  extTrigInfo.phi = ext.extPos.phi();
2520  extTrigInfo.matched = matched;
2521  extTrigInfo.matchedQ = matchedQ;
2522  extTrigInfo.matchedF = matchedF;
2523  extTrigInfo.matchedC = matchedC;
2524  extTrigInfo.matchedH = matchedH;
2525  extTrigInfo.matchedEI = matchedEI;
2526  extTrigInfo.matchedTile = matchedTile;
2527  extTrigInfo.matchedRPC = matchedRPC;
2528  extTrigInfo.matchedNSW = matchedNSW;
2529  extTrigInfoVec.push_back(extTrigInfo);
2530  }
2531  varowner.push_back(Monitored::Collection(type+"_coin_ext_eta",extTrigInfoVec,[](const ExtTrigInfo&m){return m.eta;}));
2532  variables.push_back(varowner.back());
2533  varowner.push_back(Monitored::Collection(type+"_coin_ext_phi",extTrigInfoVec,[](const ExtTrigInfo&m){return m.phi;}));
2534  variables.push_back(varowner.back());
2535  varowner.push_back(Monitored::Collection(type+"_coin_ext_matched",extTrigInfoVec,[](const ExtTrigInfo&m){return m.matched;}));
2536  variables.push_back(varowner.back());
2537  varowner.push_back(Monitored::Collection(type+"_coin_ext_matched_eta",extTrigInfoVec,[](const ExtTrigInfo&m){return (m.matched)?m.eta:(-10);}));
2538  variables.push_back(varowner.back());
2539  varowner.push_back(Monitored::Collection(type+"_coin_ext_matched_phi",extTrigInfoVec,[](const ExtTrigInfo&m){return (m.matched)?m.phi:(-10);}));
2540  variables.push_back(varowner.back());
2541  varowner.push_back(Monitored::Collection(type+"_coin_ext_matched_CoinFlagQ",extTrigInfoVec,[](const ExtTrigInfo&m){return m.matchedQ;}));
2542  variables.push_back(varowner.back());
2543  varowner.push_back(Monitored::Collection(type+"_coin_ext_matched_CoinFlagF",extTrigInfoVec,[](const ExtTrigInfo&m){return m.matchedF;}));
2544  variables.push_back(varowner.back());
2545  varowner.push_back(Monitored::Collection(type+"_coin_ext_matched_CoinFlagC",extTrigInfoVec,[](const ExtTrigInfo&m){return m.matchedC;}));
2546  variables.push_back(varowner.back());
2547  varowner.push_back(Monitored::Collection(type+"_coin_ext_matched_CoinFlagH",extTrigInfoVec,[](const ExtTrigInfo&m){return m.matchedH;}));
2548  variables.push_back(varowner.back());
2549  varowner.push_back(Monitored::Collection(type+"_coin_ext_matched_CoinFlagEI",extTrigInfoVec,[](const ExtTrigInfo&m){return m.matchedEI;}));
2550  variables.push_back(varowner.back());
2551  varowner.push_back(Monitored::Collection(type+"_coin_ext_matched_CoinFlagTile",extTrigInfoVec,[](const ExtTrigInfo&m){return m.matchedTile;}));
2552  variables.push_back(varowner.back());
2553  varowner.push_back(Monitored::Collection(type+"_coin_ext_matched_CoinFlagRPC",extTrigInfoVec,[](const ExtTrigInfo&m){return m.matchedRPC;}));
2554  variables.push_back(varowner.back());
2555  varowner.push_back(Monitored::Collection(type+"_coin_ext_matched_CoinFlagNSW",extTrigInfoVec,[](const ExtTrigInfo&m){return m.matchedNSW;}));
2556  variables.push_back(varowner.back());
2557 }
2559  double theta = 2.0 * std::atan( std::exp(-1.0 * std::abs(eta)) );
2560  double r = std::tan( theta ) * nsw_z;
2561  double rindex = (r - nsw_rmin) / nsw_rindex_step;
2562  return rindex;
2563 }
2565  // matching window
2566  double max_dr = 999;
2567  double pt = muon->pt();
2568  if (pt > pt_15_cut) max_dr = m_l1trigMatchWindowPt15;
2569  else if (pt > pt_10_cut) max_dr = m_l1trigMatchWindowPt10a + m_l1trigMatchWindowPt10b * pt / Gaudi::Units::GeV;
2571  return max_dr;
2572 }
2573 
2574 void
2575 TgcRawDataMonitorAlgorithm::fillThresholdPatternHistograms(std::map<std::string,std::vector<const xAOD::MuonRoI*>> & menuAndRoIs, const std::vector < TimedMuon > & mymuons, const EventContext & ctx) const {
2577  for(const auto& item : m_thrMonList){
2578  std::vector<bool> passed;
2579  passed.reserve(mymuons.size());
2580  for(const auto& mymuon : mymuons){
2581  passed.push_back( mymuon.matchedL1Items.find(item) != mymuon.matchedL1Items.end() );
2582  }
2583  auto passed_rois = menuAndRoIs[item];
2584 
2585  MonVariables thrMonVariables;
2586 
2587  auto lumiBlock_l1item = Monitored::Scalar<int>(Form("lumiBlock_l1item_%s",item.data()),GetEventInfo(ctx)->lumiBlock());
2588  thrMonVariables.push_back(lumiBlock_l1item);
2589 
2590  auto muon_passed_l1item = Monitored::Collection(Form("muon_passed_l1item_%s",item.data()),passed);
2591  thrMonVariables.push_back(muon_passed_l1item);
2592 
2593  auto muon_eta_l1item=Monitored::Collection(Form("muon_eta_l1item_%s",item.data()),mymuons,[](const TimedMuon&m){
2594  return (m.muon->pt() > pt_30_cut) ? m.muon->eta() : -10;
2595  });
2596  thrMonVariables.push_back(muon_eta_l1item);
2597  auto muon_phi_l1item=Monitored::Collection(Form("muon_phi_l1item_%s",item.data()),mymuons,[](const TimedMuon&m){
2598  return (m.muon->pt() > pt_30_cut) ? m.muon->phi() : -10;
2599  });
2600  thrMonVariables.push_back(muon_phi_l1item);
2601  auto muon_pt_rpc_l1item=Monitored::Collection(Form("muon_pt_rpc_l1item_%s",item.data()),mymuons,[](const TimedMuon&m){
2602  return (std::abs(m.muon->eta()) < barrel_end) ? m.muon->pt() / Gaudi::Units::GeV : -10;
2603  });
2604  thrMonVariables.push_back(muon_pt_rpc_l1item);
2605  auto muon_pt_tgc_l1item=Monitored::Collection(Form("muon_pt_tgc_l1item_%s",item.data()),mymuons,[](const TimedMuon&m){
2606  return (std::abs(m.muon->eta()) > barrel_end && std::abs(m.muon->eta()) < trigger_end) ? m.muon->pt() / Gaudi::Units::GeV : -10;
2607  });
2608  thrMonVariables.push_back(muon_pt_tgc_l1item);
2609  auto muon_phi_rpc_l1item=Monitored::Collection(Form("muon_phi_rpc_l1item_%s",item.data()),mymuons,[](const TimedMuon&m){
2610  return (std::abs(m.muon->eta()) < barrel_end && m.muon->pt() > pt_30_cut) ? m.muon->phi() : -10;
2611  });
2612  thrMonVariables.push_back(muon_phi_rpc_l1item);
2613  auto muon_phi_tgc_l1item=Monitored::Collection(Form("muon_phi_tgc_l1item_%s",item.data()),mymuons,[](const TimedMuon&m){
2614  return (std::abs(m.muon->eta()) > barrel_end && std::abs(m.muon->eta()) < trigger_end && m.muon->pt() > pt_30_cut) ? m.muon->phi() : -10;
2615  });
2616  thrMonVariables.push_back(muon_phi_tgc_l1item);
2617 
2618  auto l1item_roi_eta=Monitored::Collection(Form("l1item_roi_eta_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m){return m->eta();});
2619  thrMonVariables.push_back(l1item_roi_eta);
2620  auto l1item_roi_phi=Monitored::Collection(Form("l1item_roi_phi_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m){return m->phi();});
2621  thrMonVariables.push_back(l1item_roi_phi);
2622  auto l1item_roi_phi_rpc=Monitored::Collection(Form("l1item_roi_phi_rpc_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m){
2623  return (m->getSource()==xAOD::MuonRoI::Barrel)?(m->phi()):(-10);
2624  });
2625  auto l1item_roi_phi_tgc=Monitored::Collection(Form("l1item_roi_phi_tgc_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m){
2626  return (m->getSource()!=xAOD::MuonRoI::Barrel)?(m->phi()):(-10);
2627  });
2628  thrMonVariables.push_back(l1item_roi_phi_tgc);
2629 
2630  auto l1item_roi_phi_barrel=Monitored::Collection(Form("l1item_roi_phi_barrel_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m){
2631  return (m->getSource() == xAOD::MuonRoI::Barrel) ? m->phi() : -10;
2632  });
2633  thrMonVariables.push_back(l1item_roi_phi_barrel);
2634  auto l1item_roi_phi_endcap=Monitored::Collection(Form("l1item_roi_phi_endcap_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m){
2635  return (m->getSource() == xAOD::MuonRoI::Endcap) ? m->phi() : -10;
2636  });
2637  thrMonVariables.push_back(l1item_roi_phi_endcap);
2638  auto l1item_roi_phi_forward=Monitored::Collection(Form("l1item_roi_phi_forward_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m){
2639  return (m->getSource() == xAOD::MuonRoI::Forward) ? m->phi() : -10;
2640  });
2641  thrMonVariables.push_back(l1item_roi_phi_forward);
2642  auto l1item_roi_sideA=Monitored::Collection(Form("l1item_roi_sideA_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m){
2643  return m->getHemisphere() == xAOD::MuonRoI::Positive;
2644  });
2645  thrMonVariables.push_back(l1item_roi_sideA);
2646  auto l1item_roi_sideC=Monitored::Collection(Form("l1item_roi_sideC_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m){
2647  return m->getHemisphere() == xAOD::MuonRoI::Negative;
2648  });
2649  thrMonVariables.push_back(l1item_roi_sideC);
2650 
2651  auto l1item_roi_roiNumber=Monitored::Collection(Form("l1item_roi_roiNumber_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m){
2652  return m->getRoI();
2653  });
2654  thrMonVariables.push_back(l1item_roi_roiNumber);
2655 
2656  auto l1item_roi_sector = Monitored::Collection(Form("l1item_roi_sector_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m) {
2657  return (m->getHemisphere() == xAOD::MuonRoI::Positive)?(m->getSectorID()+1):(-1 * m->getSectorID()-1);
2658  });
2659  thrMonVariables.push_back(l1item_roi_sector);
2660  auto l1item_roi_barrel = Monitored::Collection(Form("l1item_roi_barrel_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m) {
2661  return m->getSource() == xAOD::MuonRoI::Barrel;
2662  });
2663  thrMonVariables.push_back(l1item_roi_barrel);
2664  auto l1item_roi_endcap = Monitored::Collection(Form("l1item_roi_endcap_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m) {
2665  return m->getSource() == xAOD::MuonRoI::Endcap;
2666  });
2667  thrMonVariables.push_back(l1item_roi_endcap);
2668  auto l1item_roi_forward = Monitored::Collection(Form("l1item_roi_forward_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m) {
2669  return m->getSource() == xAOD::MuonRoI::Forward;
2670  });
2671  thrMonVariables.push_back(l1item_roi_forward);
2672  auto l1item_roi_thrNumber=Monitored::Collection(Form("l1item_roi_thrNumber_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m){
2673  return m->getThrNumber();
2674  });
2675  thrMonVariables.push_back(l1item_roi_thrNumber);
2676 
2677  auto l1item_roi_ismorecand=Monitored::Collection(Form("l1item_roi_ismorecand_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m){
2678  return (m->getSource()==xAOD::MuonRoI::Barrel)?(m->isMoreCandInRoI()):(-1);
2679  });
2680  thrMonVariables.push_back(l1item_roi_ismorecand);
2681  auto l1item_roi_bw3coin=Monitored::Collection(Form("l1item_roi_bw3coin_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m){
2682  return (m->getSource()!=xAOD::MuonRoI::Barrel)?(m->getBW3Coincidence()):(-1);
2683  });
2684  thrMonVariables.push_back(l1item_roi_bw3coin);
2685  auto l1item_roi_innercoin=Monitored::Collection(Form("l1item_roi_innercoin_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m){
2686  return (m->getSource()!=xAOD::MuonRoI::Barrel)?(m->getInnerCoincidence()):(-1);
2687  });
2688  thrMonVariables.push_back(l1item_roi_innercoin);
2689  auto l1item_roi_goodmf=Monitored::Collection(Form("l1item_roi_goodmf_%s",item.data()),passed_rois,[](const xAOD::MuonRoI*m){
2690  return (m->getSource()!=xAOD::MuonRoI::Barrel)?(m->getGoodMF()):(-1);
2691  });
2692  thrMonVariables.push_back(l1item_roi_goodmf);
2693 
2694  fill(m_packageName + item.data(), thrMonVariables);
2695  }
2696  }
2698 }
2699 
2700 void
2701 TgcRawDataMonitorAlgorithm::fillTgcPrdHistograms(Monitored::Scalar<int> & mon_bcid, Monitored::Scalar<int> & mon_pileup, Monitored::Scalar<int> & mon_lb,std::map <std::string, std::vector< ExtPos>> & extpositions, const EventContext & ctx) const{
2702  if (m_anaTgcPrd) {
2703  ATH_MSG_DEBUG("m_anaTgcPrd = True");
2705  const MuonGM::MuonDetectorManager* muonMgr = DetectorManagerHandle.cptr();
2707  std::map<const xAOD::Muon*, std::set<std::string>> map_muon_and_tgchits;
2708  if(tgcPrd.isValid() && muonMgr!=nullptr){
2709  ATH_MSG_DEBUG("Filling TGC PRD histograms");
2710  const TgcIdHelper &tgcIdHelper = m_idHelperSvc->tgcIdHelper();
2711  std::vector < TGC::TgcHit > tgcHits;
2712  std::map<std::string, std::vector<TGC::TgcHit>> tgcHitsMap;
2713  for (const auto tgccnt : *tgcPrd) {
2714  for (const auto data : *tgccnt) {
2715  const MuonGM::TgcReadoutElement *element = data->detectorElement();
2716  const Identifier id = data->identify();
2717  const int gasGap = tgcIdHelper.gasGap(id);
2718  const int channel = tgcIdHelper.channel(id);
2719  const bool isStrip = tgcIdHelper.isStrip(id);
2720  const Amg::Vector3D &pos = isStrip ? element->stripPos(gasGap, channel) : element->wireGangPos(gasGap, channel);
2721  const double shortWidth = (isStrip)?(element->stripShortWidth(gasGap, channel)):(element->gangShortWidth(gasGap, channel));
2722  const double longWidth = (isStrip)?(element->stripLongWidth(gasGap, channel)):(element->gangLongWidth(gasGap, channel));
2723  const double length = (isStrip)?(element->stripLength()):(element->gangRadialLength(gasGap, channel));
2724  const int bcmask = data->getBcBitMap();
2725  TGC::TgcHit tgcHit(pos[0],pos[1],pos[2],
2726  shortWidth,longWidth, length,
2727  isStrip,gasGap,channel,tgcIdHelper.stationEta(id),tgcIdHelper.stationPhi(id),tgcIdHelper.stationName(id),
2728  bcmask);
2729  if(extpositions.find(tgcHit.cham_name())!=extpositions.end()){
2730  for(auto& cham : extpositions[tgcHit.cham_name()]){
2731  double newX = cham.extPos.x() + cham.extVec.x() / cham.extVec.z() * ( tgcHit.Z() - cham.extPos.z() );
2732  double newY = cham.extPos.y() + cham.extVec.y() / cham.extVec.z() * ( tgcHit.Z() - cham.extPos.z() );
2733  Identifier id2 = muonMgr->tgcIdHelper()->elementID(tgcHit.StationName(), tgcHit.StationEta(), tgcHit.StationPhi());
2734 
2735  auto detEle = muonMgr->getTgcReadoutElement(id2);
2736  double chamPhi = detEle->center().phi();
2737  TVector2 extPos(newX,newY);
2738  TVector2 hitPos(tgcHit.X(),tgcHit.Y());
2739  TVector2 rot_extPos = extPos.Rotate(-chamPhi + M_PI/2.);
2740  TVector2 rot_hitPos = hitPos.Rotate(-chamPhi + M_PI/2.);
2741  double res = (tgcHit.isStrip())? std::sin( rot_extPos.DeltaPhi( rot_hitPos ) ) * rot_extPos.Mod(): rot_hitPos.Y() - rot_extPos.Y();
2742  tgcHit.addResidual( cham.muon, res );
2743  if( std::abs(res) < m_residualWindow ){
2744  cham.chambersHasHit.insert(tgcHit.type_name());
2745  map_muon_and_tgchits[cham.muon].insert(tgcHit.channel_name());
2746  }
2747  }
2748  }
2749  tgcHits.push_back(tgcHit);
2750  tgcHitsMap[tgcHit.cham_name() + ( (tgcHit.isStrip())?("S"):("W") )].push_back(tgcHit); // <- chamber-by-chamber residual plots
2751  tgcHitsMap[tgcHit.type_name()].push_back(tgcHit); // <- gap-by-gap channel occupancy plots
2752  }
2753  }
2754 
2755  std::map<std::string, std::vector<int>> tgcHitPhiMap;
2756  std::map<std::string, std::vector<int>> tgcHitEtaMap;
2757  std::map<std::string, std::vector<int>> tgcHitPhiMapGlobal;
2758  std::map<std::string, std::vector<int>> tgcHitTiming;
2759  std::map<std::string, std::vector<int>> tgcHitPhiMapGlobalWithTrack;
2760  std::map<std::string, std::vector<int>> tgcHitTimingWithTrack;
2761  std::map<const std::string, std::vector<TGC::TgcHit>> tgcHitBCMaskMap;
2762  std::vector <int> vec_bw24sectors; // 1..12 BW-A, -1..-12 BW-C
2763  std::vector <int> vec_bw24sectors_wire;
2764  std::vector <int> vec_bw24sectors_strip;
2765  std::vector <int> vec_bwfulleta; // 0(Forward), 1..4(M1), 1..5(M2,M3)
2766  std::vector <int> vec_bwfulleta_wire;
2767  std::vector <int> vec_bwfulleta_strip;
2768  std::vector <int> vec_bwtiming;
2769  std::vector <int> vec_bwtiming_wire;
2770  std::vector <int> vec_bwtiming_strip;
2771  std::vector <int> vec_bw24sectors_wTrack; // 1..12 BW-A, -1..-12 BW-C
2772  std::vector <int> vec_bw24sectors_wire_wTrack;
2773  std::vector <int> vec_bw24sectors_strip_wTrack;
2774  std::vector <int> vec_bwfulleta_wTrack; // 0(Forward), 1..4(M1), 1..5(M2,M3)
2775  std::vector <int> vec_bwfulleta_wire_wTrack;
2776  std::vector <int> vec_bwfulleta_strip_wTrack;
2777  std::vector <int> vec_bwtiming_wTrack;
2778  std::vector <int> vec_bwtiming_wire_wTrack;
2779  std::vector <int> vec_bwtiming_strip_wTrack;
2780  for(const auto& tgcHit : tgcHits){
2781  bool hasAssociatedGoodMuonTrack = false;
2782  for(const auto& res : tgcHit.residuals()){
2783  const xAOD::Muon* muon = res.first;
2784  if(map_muon_and_tgchits[muon].find(tgcHit.channel_name()) == map_muon_and_tgchits[muon].end()) continue;
2785  int nWhits = 0;
2786  int nShits = 0;
2787  for(const auto& chamHasHit : map_muon_and_tgchits[muon]){
2788  if( chamHasHit.find(tgcHit.gap_name()) != std::string::npos ) continue; // skipping the same gap
2789  if( chamHasHit.find("M04") != std::string::npos ) continue; // skipping EI/FI
2790  if( chamHasHit.find('W') != std::string::npos ) nWhits++;
2791  if( chamHasHit.find('S') != std::string::npos ) nShits++;
2792  }
2793  if(nWhits < m_nHitsInOtherBWTGCWire) continue;
2794  if(nShits < m_nHitsInOtherBWTGCStrip) continue;
2795  hasAssociatedGoodMuonTrack = true;
2796  break;
2797  }
2798 
2799  // debugging purpose: should be False by default
2800  if(m_dumpFullChannelList)ATH_MSG_INFO("TGCHIT: " << tgcHit.channel_name());
2801 
2802  // BCID analysis for TGC TTCrx delay scan
2803  if(hasAssociatedGoodMuonTrack) tgcHitBCMaskMap[tgcHit.channel_name()].push_back(tgcHit);
2804 
2805  std::string station_name = Form("%sM%02d%s",(tgcHit.iSide()==TGC::TGCSIDE::TGCASIDE)?("A"):("C"),tgcHit.iM(),(tgcHit.isStrip())?("S"):("W"));
2806  int phimap_index = 0;
2807  int etamap_index = 0;
2808  int phimap_global_index = 0; // no empty bins compare to the above index
2809  m_tgcMonTool->getMapIndex(tgcHit,etamap_index,phimap_index,phimap_global_index );
2810  for(int bunch = -1 ; bunch <= +1 ; bunch++){
2811  if(bunch==-1 && (tgcHit.bcmask()&Muon::TgcPrepData::BCBIT_PREVIOUS)==0)continue;
2812  if(bunch== 0 && (tgcHit.bcmask()&Muon::TgcPrepData::BCBIT_CURRENT)==0)continue;
2813  if(bunch==+1 && (tgcHit.bcmask()&Muon::TgcPrepData::BCBIT_NEXT)==0)continue;
2814  tgcHitPhiMap[station_name].push_back(phimap_index);
2815  tgcHitEtaMap[station_name].push_back(etamap_index);
2816  tgcHitPhiMapGlobal[station_name].push_back(phimap_global_index);
2817  tgcHitTiming[station_name].push_back(bunch);
2818  if(hasAssociatedGoodMuonTrack){
2819  tgcHitPhiMapGlobalWithTrack[station_name].push_back(phimap_global_index);
2820  tgcHitTimingWithTrack[station_name].push_back(bunch);
2821  }
2822 
2823  if(tgcHit.iM()!=4){
2824  vec_bw24sectors.push_back((tgcHit.iSide()==TGC::TGCSIDE::TGCASIDE)?(tgcHit.iSec()):(-tgcHit.iSec()));
2825  vec_bwfulleta.push_back(tgcHit.iEta());
2826  vec_bwtiming.push_back(bunch);
2827  if(hasAssociatedGoodMuonTrack){
2828  vec_bw24sectors_wTrack.push_back((tgcHit.iSide()==TGC::TGCSIDE::TGCASIDE)?(tgcHit.iSec()):(-tgcHit.iSec()));
2829  vec_bwfulleta_wTrack.push_back(tgcHit.iEta());
2830  vec_bwtiming_wTrack.push_back(bunch);
2831  }
2832  if(tgcHit.isStrip()){
2833  vec_bw24sectors_strip.push_back((tgcHit.iSide()==TGC::TGCSIDE::TGCASIDE)?(tgcHit.iSec()):(-tgcHit.iSec()));
2834  vec_bwfulleta_strip.push_back(tgcHit.iEta());
2835  vec_bwtiming_strip.push_back(bunch);
2836  if(hasAssociatedGoodMuonTrack){
2837  vec_bw24sectors_strip_wTrack.push_back((tgcHit.iSide()==TGC::TGCSIDE::TGCASIDE)?(tgcHit.iSec()):(-tgcHit.iSec()));
2838  vec_bwfulleta_strip_wTrack.push_back(tgcHit.iEta());
2839  vec_bwtiming_strip_wTrack.push_back(bunch);
2840  }
2841  }else{
2842  vec_bw24sectors_wire.push_back((tgcHit.iSide()==TGC::TGCSIDE::TGCASIDE)?(tgcHit.iSec()):(-tgcHit.iSec()));
2843  vec_bwfulleta_wire.push_back(tgcHit.iEta());
2844  vec_bwtiming_wire.push_back(bunch);
2845  if(hasAssociatedGoodMuonTrack){
2846  vec_bw24sectors_wire_wTrack.push_back((tgcHit.iSide()==TGC::TGCSIDE::TGCASIDE)?(tgcHit.iSec()):(-tgcHit.iSec()));
2847  vec_bwfulleta_wire_wTrack.push_back(tgcHit.iEta());
2848  vec_bwtiming_wire_wTrack.push_back(bunch);
2849  }
2850  }
2851  }
2852  }
2853  }
2854 
2855  ATH_MSG_DEBUG("filling hit_variables");
2856 
2857  MonVariables hit_variables;
2858  hit_variables.push_back(mon_bcid);
2859  hit_variables.push_back(mon_pileup);
2860  hit_variables.push_back(mon_lb);
2861 
2862  auto hit_n = Monitored::Scalar<int>("hit_n", tgcHits.size());
2863  hit_variables.push_back(hit_n);
2864 
2865  auto hit_bcmask=Monitored::Collection("hit_bcmask",tgcHits,[](const TGC::TgcHit&m){return m.bcmask();});
2866  hit_variables.push_back(hit_bcmask);
2867 
2868  auto hit_sideA=Monitored::Collection("hit_sideA",tgcHits,[](const TGC::TgcHit&m){return m.Z()>0;});
2869  hit_variables.push_back(hit_sideA);
2870 
2871  auto hit_sideC=Monitored::Collection("hit_sideC",tgcHits,[](const TGC::TgcHit&m){return m.Z() < 0;});
2872  hit_variables.push_back(hit_sideC);
2873 
2874  auto hit_bw24sectors=Monitored::Collection("hit_bw24sectors",vec_bw24sectors,[](const int&m){return m;});
2875  hit_variables.push_back(hit_bw24sectors);
2876  auto hit_bw24sectors_strip=Monitored::Collection("hit_bw24sectors_strip",vec_bw24sectors_strip,[](const int&m){return m;});
2877  hit_variables.push_back(hit_bw24sectors_strip);
2878  auto hit_bw24sectors_wire=Monitored::Collection("hit_bw24sectors_wire",vec_bw24sectors_wire,[](const int&m){return m;});
2879  hit_variables.push_back(hit_bw24sectors_wire);
2880  auto hit_bwfulleta=Monitored::Collection("hit_bwfulleta",vec_bwfulleta,[](const int&m){return m;});
2881  hit_variables.push_back(hit_bwfulleta);
2882  auto hit_bwfulleta_strip=Monitored::Collection("hit_bwfulleta_strip",vec_bwfulleta_strip,[](const int&m){return m;});
2883  hit_variables.push_back(hit_bwfulleta_strip);
2884  auto hit_bwfulleta_wire=Monitored::Collection("hit_bwfulleta_wire",vec_bwfulleta_wire,[](const int&m){return m;});
2885  hit_variables.push_back(hit_bwfulleta_wire);
2886  auto hit_bwtiming=Monitored::Collection("hit_bwtiming",vec_bwtiming,[](const int&m){return m;});
2887  hit_variables.push_back(hit_bwtiming);
2888  auto hit_bwtiming_strip=Monitored::Collection("hit_bwtiming_strip",vec_bwtiming_strip,[](const int&m){return m;});
2889  hit_variables.push_back(hit_bwtiming_strip);
2890  auto hit_bwtiming_wire=Monitored::Collection("hit_bwtiming_wire",vec_bwtiming_wire,[](const int&m){return m;});
2891  hit_variables.push_back(hit_bwtiming_wire);
2892 
2893  auto hit_bw24sectors_wTrack=Monitored::Collection("hit_bw24sectors_wTrack",vec_bw24sectors_wTrack,[](const int&m){return m;});
2894  hit_variables.push_back(hit_bw24sectors_wTrack);
2895  auto hit_bw24sectors_strip_wTrack=Monitored::Collection("hit_bw24sectors_strip_wTrack",vec_bw24sectors_strip_wTrack,[](const int&m){return m;});
2896  hit_variables.push_back(hit_bw24sectors_strip_wTrack);
2897  auto hit_bw24sectors_wire_wTrack=Monitored::Collection("hit_bw24sectors_wire_wTrack",vec_bw24sectors_wire_wTrack,[](const int&m){return m;});
2898  hit_variables.push_back(hit_bw24sectors_wire_wTrack);
2899  auto hit_bwfulleta_wTrack=Monitored::Collection("hit_bwfulleta_wTrack",vec_bwfulleta_wTrack,[](const int&m){return m;});
2900  hit_variables.push_back(hit_bwfulleta_wTrack);
2901  auto hit_bwfulleta_strip_wTrack=Monitored::Collection("hit_bwfulleta_strip_wTrack",vec_bwfulleta_strip_wTrack,[](const int&m){return m;});
2902  hit_variables.push_back(hit_bwfulleta_strip_wTrack);
2903  auto hit_bwfulleta_wire_wTrack=Monitored::Collection("hit_bwfulleta_wire_wTrack",vec_bwfulleta_wire_wTrack,[](const int&m){return m;});
2904  hit_variables.push_back(hit_bwfulleta_wire_wTrack);
2905  auto hit_bwtiming_wTrack=Monitored::Collection("hit_bwtiming_wTrack",vec_bwtiming_wTrack,[](const int&m){return m;});
2906  hit_variables.push_back(hit_bwtiming_wTrack);
2907  auto hit_bwtiming_strip_wTrack=Monitored::Collection("hit_bwtiming_strip_wTrack",vec_bwtiming_strip_wTrack,[](const int&m){return m;});
2908  hit_variables.push_back(hit_bwtiming_strip_wTrack);
2909  auto hit_bwtiming_wire_wTrack=Monitored::Collection("hit_bwtiming_wire_wTrack",vec_bwtiming_wire_wTrack,[](const int&m){return m;});
2910  hit_variables.push_back(hit_bwtiming_wire_wTrack);
2911 
2912  std::vector<Monitored::ObjectsCollection<std::vector<int>, double>> varowner;
2913  varowner.reserve(tgcHitPhiMap.size() * 2 + tgcHitPhiMapGlobal.size() * 2 + tgcHitPhiMapGlobalWithTrack.size() * 2);
2914  for (const auto &phimap : tgcHitPhiMap) {
2915  varowner.push_back(Monitored::Collection(Form("hit_x_%s",phimap.first.data()),tgcHitEtaMap[phimap.first],[](const int&m){return m;}));
2916  hit_variables.push_back(varowner.back());
2917  varowner.push_back(Monitored::Collection(Form("hit_y_%s", phimap.first.data()),phimap.second,[](const int&m){return m;}));
2918  hit_variables.push_back(varowner.back());
2919  }
2920  for (const auto &phimap : tgcHitPhiMapGlobal) {
2921  varowner.push_back(Monitored::Collection(Form("hit_glblphi_%s", phimap.first.data()),phimap.second,[](const int&m){return m;}));
2922  hit_variables.push_back(varowner.back());
2923  varowner.push_back(Monitored::Collection(Form("hit_bunch_%s", phimap.first.data()),tgcHitTiming[phimap.first],[](const int&m){return m;}));
2924  hit_variables.push_back(varowner.back());
2925  }
2926  for (const auto &phimap : tgcHitPhiMapGlobalWithTrack) {
2927  varowner.push_back(Monitored::Collection(Form("hit_glblphi_wTrack_%s", phimap.first.data()),phimap.second,[](const int&m){return m;}));
2928  hit_variables.push_back(varowner.back());
2929  varowner.push_back(Monitored::Collection(Form("hit_bunch_wTrack_%s", phimap.first.data()),tgcHitTimingWithTrack[phimap.first],[](const int&m){return m;}));
2930  hit_variables.push_back(varowner.back());
2931  }
2932 
2933  // BCMask plots (for TTCrx gate delay scan)
2934  std::map<std::string, std::vector<int>> tgcHitBCMaskGlobalIndex;
2935  std::map<std::string, std::vector<int>> tgcHitBCMask;
2936  std::map<std::string, std::vector<int>> tgcHitBCMaskBWSectors;
2937  std::map<std::string, std::vector<int>> tgcHitBCMaskForBWSectors;
2938  for(const auto& channelNameAndBCMask : tgcHitBCMaskMap){
2939  if(m_maskChannelList.find(channelNameAndBCMask.first)!=m_maskChannelList.end())continue; // skipping problematic channels
2940  std::string chamberNameWithWS = channelNameAndBCMask.first.substr(0,16); // e.g. A01M01f01E01L01W
2941  int thisChannel = std::atoi( channelNameAndBCMask.first.substr(18,3).data() ); // e.g. 001 of "Ch001"
2942  std::string prev1ChannelName = Form("%sCh%03d",chamberNameWithWS.data(),thisChannel-1);
2943  std::string next1ChannelName = Form("%sCh%03d",chamberNameWithWS.data(),thisChannel+1);
2944  // vetoing if neighboring channels have hits to avoid cross-talk effect
2945  if(tgcHitBCMaskMap.find(prev1ChannelName)!=tgcHitBCMaskMap.end())continue;
2946  if(tgcHitBCMaskMap.find(next1ChannelName)!=tgcHitBCMaskMap.end())continue;
2947  std::string cham_name = channelNameAndBCMask.first.substr(0,12); // e.g. A01M01f01E01
2948  int iLay = std::atoi( channelNameAndBCMask.first.substr(13,2).data() );
2949  TGC::TgcChamber cham; cham.initChamber(cham_name);
2950  int phimap_index = 0;
2951  int etamap_index = 0;
2952  int phimap_global_index = 0;
2953  if(!m_tgcMonTool->getMapIndex(cham,iLay,etamap_index,phimap_index,phimap_global_index ))continue;
2954  std::string station_name = Form("%sM%02d%s",(cham.iSide()==TGC::TGCSIDE::TGCASIDE)?("A"):("C"),cham.iM(),channelNameAndBCMask.first.substr(15,1).data());
2955  for(const auto& tgcHit : channelNameAndBCMask.second){
2956  tgcHitBCMaskGlobalIndex[station_name].push_back(phimap_global_index);
2957  tgcHitBCMask[station_name].push_back(tgcHit.bcmask());
2958  if(cham.iM()!=4){
2959  tgcHitBCMaskBWSectors["All"].push_back( (cham.iSide()==TGC::TGCSIDE::TGCASIDE)?( +1 * cham.iSec() ):(-1 * cham.iSec()) );
2960  tgcHitBCMaskForBWSectors["All"].push_back(tgcHit.bcmask());
2961  if(chamberNameWithWS.find('W')!=std::string::npos){
2962  tgcHitBCMaskBWSectors["Wire"].push_back( (cham.iSide()==TGC::TGCSIDE::TGCASIDE)?( +1 * cham.iSec() ):(-1 * cham.iSec()) );
2963  tgcHitBCMaskForBWSectors["Wire"].push_back(tgcHit.bcmask());
2964  }else{
2965  tgcHitBCMaskBWSectors["Strip"].push_back( (cham.iSide()==TGC::TGCSIDE::TGCASIDE)?( +1 * cham.iSec() ):(-1 * cham.iSec()) );
2966  tgcHitBCMaskForBWSectors["Strip"].push_back(tgcHit.bcmask());
2967  }
2968  }
2969  }
2970  }
2971  std::vector<Monitored::ObjectsCollection<std::vector<int>, double>> varowner_bcmask;
2972  varowner_bcmask.reserve(tgcHitBCMask.size() * 2 + tgcHitBCMaskBWSectors.size() * 2);
2973  for(const auto& chamType : tgcHitBCMaskBWSectors){
2974  varowner_bcmask.push_back(Monitored::Collection(Form("hit_bcmask_bw24sectors_%s",chamType.first.data()),chamType.second,[](const int&m){return m;}));
2975  hit_variables.push_back(varowner_bcmask.back());
2976  varowner_bcmask.push_back(Monitored::Collection(Form("hit_bcmask_for_bw24sectors_%s",chamType.first.data()),tgcHitBCMaskForBWSectors[chamType.first],[](const int&m){return m;}));
2977  hit_variables.push_back(varowner_bcmask.back());
2978  }
2979  for(const auto& stationNameAndBCMask : tgcHitBCMask){
2980  varowner_bcmask.push_back(Monitored::Collection(Form("hit_bcmask_glblphi_%s",stationNameAndBCMask.first.data()),tgcHitBCMaskGlobalIndex[stationNameAndBCMask.first],[](const int&m){return m;}));
2981  hit_variables.push_back(varowner_bcmask.back());
2982  varowner_bcmask.push_back(Monitored::Collection(Form("hit_bcmask_%s",stationNameAndBCMask.first.data()),stationNameAndBCMask.second,[](const int&m){return m;}));
2983  hit_variables.push_back(varowner_bcmask.back());
2984  }
2985 
2986  // gap-by-gap efficiency by track extrapolation
2987  ATH_MSG_DEBUG("preparing for efficiency plots");
2988  std::map<std::string, std::vector<double>> tgcEffPhiMap_Denominator;
2989  std::map<std::string, std::vector<double>> tgcEffEtaMap_Denominator;
2990  std::map<std::string, std::vector<double>> tgcEffPhiMapGlobal_Denominator;
2991  std::map<std::string, std::vector<double>> tgcEffPhiMap_Numerator;
2992  std::map<std::string, std::vector<double>> tgcEffEtaMap_Numerator;
2993  std::map<std::string, std::vector<double>> tgcEffPhiMapGlobal_Numerator;
2994  std::map<std::string, std::vector<double>> tgcEffMapExtX;
2995  std::map<std::string, std::vector<double>> tgcEffMapExtY;
2996  std::map<std::string, std::vector<double>> tgcEffMapHasHit;
2997  for(const auto& exts : extpositions){
2998  const std::string& cham_name = exts.first;
2999  TGC::TgcChamber cham; cham.initChamber(cham_name);
3000  // local-coordinate x'-y'
3001  Identifier id2 = muonMgr->tgcIdHelper()->elementID(cham.StationName(), cham.StationEta(), cham.StationPhi());
3002  auto detEle = muonMgr->getTgcReadoutElement(id2);
3003  for(const auto& ext : exts.second){ // how often tracks are extrapolated to this chamber surface,e.i. denominator
3004  Amg::Vector3D extPosLocal = detEle->transform().inverse() * ext.extPos;
3005  Amg::Vector3D extVecLocal = detEle->transform().inverse() * ext.extVec;
3006  for(int iLay = 1 ; iLay <= 3 ; iLay++){
3007  int phimap_index = 0;
3008  int etamap_index = 0;
3009  int phimap_global_index = 0;
3010  if(!m_tgcMonTool->getMapIndex(cham,iLay,etamap_index,phimap_index,phimap_global_index ))continue;
3011 
3012  double newX = extPosLocal.x() - extVecLocal.x() / extVecLocal.z() * extPosLocal.z();
3013  double newY = extPosLocal.y() - extVecLocal.y() / extVecLocal.z() * extPosLocal.z();
3014  for(int iSorW = 0 ; iSorW < 2 ; iSorW++){
3015  if(cham.iM()==1 && iLay==2 && iSorW==0)continue;
3016  std::string gap_name = Form("%sL%02d",cham_name.data(),iLay);
3017  std::string type_name = Form("%sL%02d%s",cham_name.data(),iLay,(iSorW==0)?("S"):("W"));
3018  int nWhits = 0;
3019  int nShits = 0;
3020  for(const auto& chamHasHit : map_muon_and_tgchits[ext.muon]){
3021  if( chamHasHit.find(gap_name) != std::string::npos ) continue; // skipping the same gap
3022  if( chamHasHit.find("M04") != std::string::npos ) continue; // skipping EI/FI
3023  if( chamHasHit.find('W') != std::string::npos ) nWhits++;
3024  if( chamHasHit.find('S') != std::string::npos ) nShits++;
3025  }
3026  if(nWhits < m_nHitsInOtherBWTGCWire)continue;
3027  if(nShits < m_nHitsInOtherBWTGCStrip)continue;
3028  std::string station_name = Form("%sM%02d%s",(cham.iSide()==TGC::TGCSIDE::TGCASIDE)?("A"):("C"),cham.iM(),(iSorW==0)?("S"):("W"));
3029  tgcEffPhiMap_Denominator[station_name].push_back(phimap_index);
3030  tgcEffEtaMap_Denominator[station_name].push_back(etamap_index);
3031  tgcEffPhiMapGlobal_Denominator[station_name].push_back(phimap_global_index);
3032  tgcEffMapExtX[type_name].push_back(newX);
3033  tgcEffMapExtY[type_name].push_back(newY);
3034  double hitExist = 0;
3035  if( ext.chambersHasHit.find(type_name) != ext.chambersHasHit.end()) hitExist=1;
3036  tgcEffPhiMap_Numerator[station_name].push_back(hitExist);
3037  tgcEffEtaMap_Numerator[station_name].push_back(hitExist);
3038  tgcEffPhiMapGlobal_Numerator[station_name].push_back(hitExist);
3039  tgcEffMapHasHit[type_name].push_back(hitExist);
3040 
3041  }
3042  }
3043  }
3044  }
3045 
3046  std::vector<Monitored::ObjectsCollection<std::vector<double>, double>> varowner_hiteff;
3047  std::vector<Monitored::ObjectsCollection<std::vector<TGC::TgcHit>, double>> varowner_eachchamber;
3048  std::vector<Monitored::ObjectsCollection<std::vector<double>, double>> varowner_eachchamber_double;
3049  std::map<std::string,std::vector<double>> cham_and_res;
3050 
3052 
3053  ATH_MSG_DEBUG("hit efficiency plots");
3054  varowner_hiteff.reserve(tgcEffPhiMap_Denominator.size() * 4 + tgcEffPhiMapGlobal_Denominator.size() * 2 + tgcEffMapHasHit.size() * 3);
3055  for (const auto &phimap : tgcEffPhiMap_Denominator) {
3056  varowner_hiteff.push_back(Monitored::Collection(Form("hit_effden_x_%s",phimap.first.data()),tgcEffEtaMap_Denominator[phimap.first],[](const double&m){return m;}));
3057  hit_variables.push_back(varowner_hiteff.back());
3058  varowner_hiteff.push_back(Monitored::Collection(Form("hit_effden_y_%s", phimap.first.data()),tgcEffPhiMap_Denominator[phimap.first],[](const double&m){return m;}));
3059  hit_variables.push_back(varowner_hiteff.back());
3060  varowner_hiteff.push_back(Monitored::Collection(Form("hit_effnum_x_%s",phimap.first.data()),tgcEffEtaMap_Numerator[phimap.first],[](const double&m){return m;}));
3061  hit_variables.push_back(varowner_hiteff.back());
3062  varowner_hiteff.push_back(Monitored::Collection(Form("hit_effnum_y_%s", phimap.first.data()),tgcEffPhiMap_Numerator[phimap.first],[](const double&m){return m;}));
3063  hit_variables.push_back(varowner_hiteff.back());
3064  }
3065  for (const auto &phimap : tgcEffPhiMapGlobal_Denominator) {
3066  varowner_hiteff.push_back(Monitored::Collection(Form("hit_glblphi_effden_%s", phimap.first.data()),tgcEffPhiMapGlobal_Denominator[phimap.first],[](const double&m){return m;}));
3067  hit_variables.push_back(varowner_hiteff.back());
3068  varowner_hiteff.push_back(Monitored::Collection(Form("hit_glblphi_effnum_%s", phimap.first.data()),tgcEffPhiMapGlobal_Numerator[phimap.first],[](const double&m){return m;}));
3069  hit_variables.push_back(varowner_hiteff.back());
3070  }
3071  for(const auto& hiteffmap : tgcEffMapHasHit){
3072  varowner_hiteff.push_back(Monitored::Collection(Form("hit_localX_effden_%s", hiteffmap.first.data()),tgcEffMapExtX[hiteffmap.first],[](const double&m){return m;}));
3073  hit_variables.push_back(varowner_hiteff.back());
3074  varowner_hiteff.push_back(Monitored::Collection(Form("hit_localY_effden_%s", hiteffmap.first.data()),tgcEffMapExtY[hiteffmap.first],[](const double&m){return m;}));
3075  hit_variables.push_back(varowner_hiteff.back());
3076  varowner_hiteff.push_back(Monitored::Collection(Form("hit_effnum_%s", hiteffmap.first.data()),tgcEffMapHasHit[hiteffmap.first],[](const double&m){return m;}));
3077  hit_variables.push_back(varowner_hiteff.back());
3078  }
3079 
3080  ATH_MSG_DEBUG("gap-by-gap occupancy plots and residual plots");
3081  varowner_eachchamber.reserve(tgcHitsMap.size());
3082  varowner_eachchamber_double.reserve(tgcHitsMap.size());
3083  for (const auto &tgcHitMap : tgcHitsMap) {
3084  auto chanName = tgcHitMap.first;
3085  if(chanName.find('L')!=std::string::npos){ // individual gaps
3086  varowner_eachchamber.push_back(Monitored::Collection(Form("hit_on_%s",chanName.data()),tgcHitMap.second,[](const TGC::TgcHit&m){return m.channel();}));
3087  hit_variables.push_back(varowner_eachchamber.back());
3088  }else{ // only summed over the gaps
3089  for(const auto&tgcHit:tgcHitMap.second){
3090  for(const auto&tgcRes:tgcHit.residuals()){
3091  cham_and_res[chanName].push_back(tgcRes.second);
3092  }
3093  }
3094  varowner_eachchamber_double.push_back(Monitored::Collection(Form("hit_residual_on_%s",chanName.data()),cham_and_res[chanName],[](const double&m){return m;}));
3095  hit_variables.push_back(varowner_eachchamber_double.back());
3096  }
3097  }
3098 
3099  }
3100 
3101  ATH_MSG_DEBUG("before fill for hits");
3102  fill(m_packageName+"_TgcHit", hit_variables);
3103  ATH_MSG_DEBUG("End filling TGC PRD histograms");
3104  }else{
3105  ATH_MSG_WARNING("Couldn't get TGC PRD");
3106  }
3107  }
3108 }
3109 
3110 void
3111 TgcRawDataMonitorAlgorithm::fillMuonRoisInThresholdPattern(std::map<const xAOD::MuonRoI*,std::set<std::string>> &roiAndMenu, std::map<std::string,std::vector<const xAOD::MuonRoI*>> & menuAndRoIs, std::vector<TimedMuonRoI> & AllBCMuonRoIs, const EventContext & ctx) const {
3112 
3113  if(m_monitorThresholdPatterns && AllBCMuonRoIs.size()>0 ){
3114  ATH_MSG_DEBUG("Filling histograms for MuonRoIs in thresholdPattern");
3116  SG::ReadDecorHandle<xAOD::MuonRoIContainer,uint64_t> thrPatternAcc = SG::makeHandle<uint64_t>(m_thresholdPatternsKey, ctx);
3117  if(l1Menu.isValid() && thrPatternAcc.isPresent() && thrPatternAcc.isAvailable()){
3118  for(const auto& item : m_thrMonList){
3119  ATH_MSG_DEBUG("Item = " << item);
3120  bool ok = false;
3121  for(const auto& m : l1Menu->thresholdNames()){
3122  ATH_MSG_DEBUG("item = " << m);
3123  if( m == item ){
3124  ok = true;
3125  break;
3126  }
3127  }
3128  if(!ok){
3129  ATH_MSG_DEBUG("skipping " << item);
3130  continue;
3131  }
3132  ATH_MSG_DEBUG("continue checking " << item);
3133  const TrigConf::L1Threshold& thr = l1Menu->threshold(item.data());
3134  std::vector<const xAOD::MuonRoI*> passed_rois;
3135  for(const auto& allBcMuonRoI : AllBCMuonRoIs){
3136  if(allBcMuonRoI.timing!=0)continue; // only current BC
3137  const xAOD::MuonRoI* roi = allBcMuonRoI.muonRoI;
3138  const uint64_t thrPattern = thrPatternAcc(*roi);
3139  bool passed = ( thrPattern & (1 << thr.mapping()) );
3140  if(passed){
3141  passed_rois.push_back(roi);
3142  ATH_MSG_DEBUG("This RoI passed "<< item <<", roiWord=" << roi->roiWord() << ", thrNumber=" << roi->getThrNumber() << " eta=" << roi->eta() << " phi=" << roi->phi());
3143  if(roiAndMenu.count(roi)==0){
3144  std::set<std::string> items;
3145  roiAndMenu.insert(std::make_pair(roi,items));
3146  }
3147  roiAndMenu[roi].insert(item);
3148  }
3149  }
3150  menuAndRoIs.insert(std::make_pair(item,passed_rois));
3151  }
3152  }
3153  ATH_MSG_DEBUG("End filling histograms for MuonRoIs in thresholdPattern");
3154  }
3155 }
3156 
3157 
3158 
TgcRawDataMonitorAlgorithm::TgcTrigNsw::isForward
int isForward
Definition: TgcRawDataMonitorAlgorithm.h:121
TgcRawDataMonitorAlgorithm::m_tgcMonTool
ToolHandle< ITgcRawDataMonitorTool > m_tgcMonTool
Definition: TgcRawDataMonitorAlgorithm.h:329
TgcRawDataMonitorAlgorithm::m_TgcCoinDataContainerNextBCKey
SG::ReadHandleKey< Muon::TgcCoinDataContainer > m_TgcCoinDataContainerNextBCKey
Definition: TgcRawDataMonitorAlgorithm.h:247
TgcRawDataMonitorAlgorithm::m_useCBTrackForExtrapolation
BooleanProperty m_useCBTrackForExtrapolation
Definition: TgcRawDataMonitorAlgorithm.h:280
TGC::TgcHit::isStrip
const bool & isStrip() const
Definition: TgcHit.h:62
TgcRawDataMonitorAlgorithm::TgcTrigTile::bunch
int bunch
Definition: TgcRawDataMonitorAlgorithm.h:107
TgcRawDataMonitorAlgorithm::m_l1trigMatchWindowPt0a
DoubleProperty m_l1trigMatchWindowPt0a
Definition: TgcRawDataMonitorAlgorithm.h:274
TgcRawDataMonitorAlgorithm::TgcTrigRpc
Definition: TgcRawDataMonitorAlgorithm.h:137
TgcRawDataMonitorAlgorithm::m_TagAndProbeZmumu
BooleanProperty m_TagAndProbeZmumu
Definition: TgcRawDataMonitorAlgorithm.h:260
TgcRawDataMonitorAlgorithm::m_L1MenuKey
SG::ReadHandleKey< TrigConf::L1Menu > m_L1MenuKey
Definition: TgcRawDataMonitorAlgorithm.h:231
TgcRawDataMonitorAlgorithm::TimedMuon::muon
const xAOD::Muon * muon
Definition: TgcRawDataMonitorAlgorithm.h:50
beamspotman.r
def r
Definition: beamspotman.py:676
TGC::TgcChamber::initChamber
void initChamber(const std::string &chamber_name)
Definition: TgcChamber.cxx:8
TrigConf::L1Threshold::mapping
unsigned int mapping() const
Accessor to the mapping number The mapping is unique within a type.
Definition: L1ThresholdBase.h:163
plotBeamSpotCompare.x1
x1
Definition: plotBeamSpotCompare.py:216
Muon::TgcCoinData::INNER_RPC_DPHI_BITSHIFT
static constexpr uint32_t INNER_RPC_DPHI_BITSHIFT
Definition: TgcCoinData.h:252
TgcRawDataMonitorAlgorithm::TgcTrigTile
Definition: TgcRawDataMonitorAlgorithm.h:98
TgcRawDataMonitorAlgorithm::TgcTrig::x_Out
double x_Out
Definition: TgcRawDataMonitorAlgorithm.h:171
xAOD::muon
@ muon
Definition: TrackingPrimitives.h:195
data
char data[hepevt_bytes_allocation_ATLAS]
Definition: HepEvt.cxx:11
MuonGM::MuonClusterReadoutElement::transform
virtual const Amg::Transform3D & transform() const override
Return local to global transform.
Definition: MuonClusterReadoutElement.h:124
TgcRawDataMonitorAlgorithm::m_nHitsInOtherBWTGCStrip
IntegerProperty m_nHitsInOtherBWTGCStrip
Definition: TgcRawDataMonitorAlgorithm.h:304
TgcRawDataMonitorAlgorithm::fillHistograms
virtual StatusCode fillHistograms(const EventContext &ctx) const override
adds event to the monitoring histograms
Definition: TgcRawDataMonitorAlgorithm.cxx:753
TgcRawDataMonitorAlgorithm::fillMuonRoisInThresholdPattern
void fillMuonRoisInThresholdPattern(std::map< const xAOD::MuonRoI *, std::set< std::string >> &, std::map< std::string, std::vector< const xAOD::MuonRoI * >> &, std::vector< TimedMuonRoI > &AllBCMuonRoIs, const EventContext &ctx) const
Definition: TgcRawDataMonitorAlgorithm.cxx:3111
dumpTgcDigiDeadChambers.gasGap
list gasGap
Definition: dumpTgcDigiDeadChambers.py:33
TgcRawDataMonitorAlgorithm::MonVariables
std::vector< std::reference_wrapper< Monitored::IMonitoredVariable > > MonVariables
Definition: TgcRawDataMonitorAlgorithm.h:314
AthMonitorAlgorithm::dataType
DataType_t dataType() const
Accessor functions for the data type.
Definition: AthMonitorAlgorithm.h:221
TgcRawDataMonitorAlgorithm::m_fillGapByGapHistograms
BooleanProperty m_fillGapByGapHistograms
Definition: TgcRawDataMonitorAlgorithm.h:264
TgcRawDataMonitorAlgorithm::TgcTrigTile::slSector
int slSector
Definition: TgcRawDataMonitorAlgorithm.h:99
xAOD::MuonRoI_v1::getPhiOverlap
bool getPhiOverlap() const
Returns whether there's overlap between barrel sectors.
xAOD::MuonRoI_v1::Endcap
@ Endcap
The muon candidate was detected in the endcap region.
Definition: MuonRoI_v1.h:39
Amg::MatrixX
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
Definition: EventPrimitives.h:29
Muon::TgcCoinData::INNER_TILE_BCID_BITSHIFT
static constexpr uint32_t INNER_TILE_BCID_BITSHIFT
Definition: TgcCoinData.h:270
TgcRawDataMonitorAlgorithm::m_useIDTrackForExtrapolation
BooleanProperty m_useIDTrackForExtrapolation
Definition: TgcRawDataMonitorAlgorithm.h:278
CxxUtils::starts_with
bool starts_with(const char *s, const char *prefix)
Test whether one null-terminated byte string starts with another.
python.SystemOfUnits.m2
int m2
Definition: SystemOfUnits.py:92
python.SystemOfUnits.m
int m
Definition: SystemOfUnits.py:91
TGC::TgcChamber::cham_name
const std::string & cham_name() const
Definition: TgcChamber.h:43
Muon::TgcCoinData::INNER_RPC_DETA_BIT
static constexpr uint32_t INNER_RPC_DETA_BIT
Definition: TgcCoinData.h:251
TgcRawDataMonitorAlgorithm::CtpDecMonObj::trigItem
std::string trigItem
Definition: TgcRawDataMonitorAlgorithm.h:208
xAOD::MuonRoI_v1::getInnerCoincidence
bool getInnerCoincidence() const
Returns whether or not there was an inner coincidence in the TGC.
checkCoolLatestUpdate.variables
variables
Definition: checkCoolLatestUpdate.py:13
TgcRawDataMonitorAlgorithm::m_l1trigMatchWindowPt15
DoubleProperty m_l1trigMatchWindowPt15
Definition: TgcRawDataMonitorAlgorithm.h:271
TGC::TgcChamber::iSec
const int & iSec() const
Definition: TgcChamber.h:46
plotting.yearwise_efficiency.channel
channel
Definition: yearwise_efficiency.py:28
TgcRawDataMonitorAlgorithm::m_TagAndProbe
BooleanProperty m_TagAndProbe
Definition: TgcRawDataMonitorAlgorithm.h:259
TgcRawDataMonitorAlgorithm::TgcTrig::etain
double etain
Definition: TgcRawDataMonitorAlgorithm.h:176
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
TrigCompositeUtils::passed
bool passed(DecisionID id, const DecisionIDContainer &idSet)
checks if required decision ID is in the set of IDs in the container
Definition: TrigCompositeUtilsRoot.cxx:117
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
find
std::string find(const std::string &s)
return a remapped string
Definition: hcg.cxx:135
TGRLCollection.h
xAOD::MuonRoI_v1::getThrNumber
int getThrNumber() const
Get the logic number of the highest threshold this RoI passed.
SG::ReadHandle::cptr
const_pointer_type cptr()
Dereference the pointer.
TgcIdHelper::gasGap
int gasGap(const Identifier &id) const override
get the hashes
Definition: TgcIdHelper.cxx:642
Muon::TgcCoinData::INNER_RPC_BCID_BIT
static constexpr uint32_t INNER_RPC_BCID_BIT
Definition: TgcCoinData.h:257
TgcRawDataMonitorAlgorithm::CtpDecMonObj::rpcR
bool rpcR
Definition: TgcRawDataMonitorAlgorithm.h:219
MuonGM::MuonClusterReadoutElement::center
virtual const Amg::Vector3D & center() const override
Return the center of the element.
Definition: MuonClusterReadoutElement.h:125
TgcRawDataMonitorAlgorithm::m_MuonRoIContainerBCm2Key
SG::ReadHandleKey< xAOD::MuonRoIContainer > m_MuonRoIContainerBCm2Key
Definition: TgcRawDataMonitorAlgorithm.h:239
TgcRawDataMonitorAlgorithm::CoinFlagF
@ CoinFlagF
Definition: TgcRawDataMonitorAlgorithm.h:38
TgcRawDataMonitorAlgorithm::TgcTrig::bunch
int bunch
Definition: TgcRawDataMonitorAlgorithm.h:196
TGC::TgcChamber::StationName
const int & StationName() const
Definition: TgcChamber.h:50
TgcRawDataMonitorAlgorithm::m_requireIsolated
BooleanProperty m_requireIsolated
Definition: TgcRawDataMonitorAlgorithm.h:277
TgcRawDataMonitorAlgorithm::m_streamerFilter
StringProperty m_streamerFilter
Definition: TgcRawDataMonitorAlgorithm.h:235
xAOD::MuonRoI_v1::Neg
@ Neg
Candidate is a mu- from a TGC sector.
Definition: MuonRoI_v1.h:49
TgcIdHelper
Definition: TgcIdHelper.h:50
TgcRawDataMonitorAlgorithm::CtpDecMonObj::title
std::string title
Definition: TgcRawDataMonitorAlgorithm.h:209
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:79
Muon::TgcPrepData::BCBIT_PREVIOUS
@ BCBIT_PREVIOUS
Definition: TgcPrepData.h:97
TGC::TgcHit::channel_name
const std::string & channel_name() const
Definition: TgcHit.h:71
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
xAODP4Helpers.h
TgcRawDataMonitorAlgorithm::m_DetectorManagerKey
SG::ReadCondHandleKey< MuonGM::MuonDetectorManager > m_DetectorManagerKey
Definition: TgcRawDataMonitorAlgorithm.h:331
TgcRawDataMonitorAlgorithm::ExtTrigInfo::matchedF
double matchedF
Definition: TgcRawDataMonitorAlgorithm.h:90
TgcRawDataMonitorAlgorithm::m_MuonRoIContainerBCp2Key
SG::ReadHandleKey< xAOD::MuonRoIContainer > m_MuonRoIContainerBCp2Key
Definition: TgcRawDataMonitorAlgorithm.h:242
TgcRawDataMonitorAlgorithm::m_MuonContainerKey
SG::ReadHandleKey< xAOD::MuonContainer > m_MuonContainerKey
Definition: TgcRawDataMonitorAlgorithm.h:237
TgcRawDataMonitorAlgorithm::TimedMuon::matchedL1Items
std::set< std::string > matchedL1Items
Definition: TgcRawDataMonitorAlgorithm.h:58
xAOD::deltaPhi
setSAddress setEtaMS setDirPhiMS setDirZMS setBarrelRadius setEndcapAlpha setEndcapRadius setInterceptInner setEtaMap setEtaBin setIsTgcFailure setDeltaPt deltaPhi
Definition: L2StandAloneMuon_v1.cxx:160
TgcRawDataMonitorAlgorithm::m_MuonRoIContainerBCp1Key
SG::ReadHandleKey< xAOD::MuonRoIContainer > m_MuonRoIContainerBCp1Key
Definition: TgcRawDataMonitorAlgorithm.h:241
TgcRawDataMonitorAlgorithm::TgcTrig::z_Out
double z_Out
Definition: TgcRawDataMonitorAlgorithm.h:173
TgcRawDataMonitorAlgorithm::fillThresholdPatternHistograms
void fillThresholdPatternHistograms(std::map< std::string, std::vector< const xAOD::MuonRoI * >> &menuAndRoIs, const std::vector< TimedMuon > &mymuons, const EventContext &ctx) const
Definition: TgcRawDataMonitorAlgorithm.cxx:2575
TgcRawDataMonitorAlgorithm::TgcTrig::loosemuonMatched
int loosemuonMatched
Definition: TgcRawDataMonitorAlgorithm.h:199
TgcRawDataMonitorAlgorithm.h
TgcRawDataMonitorAlgorithm::m_M1_Z
DoubleProperty m_M1_Z
Definition: TgcRawDataMonitorAlgorithm.h:289
theta
Scalar theta() const
theta method
Definition: AmgMatrixBasePlugin.h:71
TgcRawDataMonitorAlgorithm::m_l1trigMatchWindowPt10a
DoubleProperty m_l1trigMatchWindowPt10a
Definition: TgcRawDataMonitorAlgorithm.h:272
TgcRawDataMonitorAlgorithm::TgcTrigEifi::currBc
int currBc
Definition: TgcRawDataMonitorAlgorithm.h:163
TgcRawDataMonitorAlgorithm::m_l1trigMatchWindowPt0b
DoubleProperty m_l1trigMatchWindowPt0b
Definition: TgcRawDataMonitorAlgorithm.h:275
TgcRawDataMonitorAlgorithm::TgcTrigNsw::Phi
int Phi
Definition: TgcRawDataMonitorAlgorithm.h:127
TgcRawDataMonitorAlgorithm::TgcTrig::eta
double eta
Definition: TgcRawDataMonitorAlgorithm.h:174
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::renounce
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)
Definition: AthCommonDataStore.h:380
TgcRawDataMonitorAlgorithm::m_TgcCoinDataContainerNextNextBCKey
SG::ReadHandleKey< Muon::TgcCoinDataContainer > m_TgcCoinDataContainerNextNextBCKey
Definition: TgcRawDataMonitorAlgorithm.h:248
TgcRawDataMonitorAlgorithm::TimedMuon::matchedL1ThrExclusiveTGC
std::set< int > matchedL1ThrExclusiveTGC
Definition: TgcRawDataMonitorAlgorithm.h:55
PlotCalibFromCool.begin
begin
Definition: PlotCalibFromCool.py:94
TgcRawDataMonitorAlgorithm::m_residualWindow
DoubleProperty m_residualWindow
Definition: TgcRawDataMonitorAlgorithm.h:300
TgcRawDataMonitorAlgorithm::m_useExtMSTrackForExtrapolation
BooleanProperty m_useExtMSTrackForExtrapolation
Definition: TgcRawDataMonitorAlgorithm.h:281
TgcRawDataMonitorAlgorithm::TgcTrig::veto
int veto
Definition: TgcRawDataMonitorAlgorithm.h:195
Muon::TgcCoinData::INNER_RPC_PHI_BITSHIFT
static constexpr uint32_t INNER_RPC_PHI_BITSHIFT
Definition: TgcCoinData.h:248
AthMonitorAlgorithm::getTrigDecisionTool
const ToolHandle< Trig::TrigDecisionTool > & getTrigDecisionTool() const
Get the trigger decision tool member.
Definition: AthMonitorAlgorithm.cxx:189
test_pyathena.pt
pt
Definition: test_pyathena.py:11
TgcRawDataMonitorAlgorithm::TgcTrigRpc::bunch
int bunch
Definition: TgcRawDataMonitorAlgorithm.h:149
M_PI
#define M_PI
Definition: ActiveFraction.h:11
xAOD::passBits
passBits
Definition: TrigPassBits_v1.cxx:115
TGC::TgcHit::X
const double & X() const
Definition: TgcHit.h:56
SG::ReadDecorHandle::isPresent
bool isPresent() const
Is the referenced container present in SG?
TgcRawDataMonitorAlgorithm::ExtTrigInfo::matchedQ
double matchedQ
Definition: TgcRawDataMonitorAlgorithm.h:89
xAOD::MuonRoI_v1::eta
float eta() const
The pseudorapidity ( ) of the muon candidate.
TgcRawDataMonitorAlgorithm::m_endcapPivotPlaneMinimumRadius
DoubleProperty m_endcapPivotPlaneMinimumRadius
Definition: TgcRawDataMonitorAlgorithm.h:297
TgcRawDataMonitorAlgorithm::TgcTrigNsw::isAside
int isAside
Definition: TgcRawDataMonitorAlgorithm.h:122
TgcRawDataMonitorAlgorithm::m_l1trigMatchWindowPt10b
DoubleProperty m_l1trigMatchWindowPt10b
Definition: TgcRawDataMonitorAlgorithm.h:273
MuonGM::TgcReadoutElement::stripLength
double stripLength() const
Returns the length of each strip which is equal to the height of the chamber.
TgcRawDataMonitorAlgorithm::TimedMuon
Definition: TgcRawDataMonitorAlgorithm.h:49
TgcRawDataMonitorAlgorithm::TimedMuon::matchedL1ThrExclusive
std::set< int > matchedL1ThrExclusive
Definition: TgcRawDataMonitorAlgorithm.h:54
Monitored::ObjectsCollection
Monitoring of object collections (internal)
Definition: MonitoredCollection.h:19
Muon::TgcCoinData::TYPE_TRACKLET
@ TYPE_TRACKLET
Definition: TgcCoinData.h:50
Muon::TgcCoinData::INNER_NSW_BCID_BITSHIFT
static constexpr uint32_t INNER_NSW_BCID_BITSHIFT
Definition: TgcCoinData.h:240
TrigRoiDescriptor
nope - should be used for standalone also, perhaps need to protect the class def bits #ifndef XAOD_AN...
Definition: TrigRoiDescriptor.h:56
TgcRawDataMonitorAlgorithm::TgcTrigTile::bcid
int bcid
Definition: TgcRawDataMonitorAlgorithm.h:106
Trk::alongMomentum
@ alongMomentum
Definition: PropDirection.h:20
vec
std::vector< size_t > vec
Definition: CombinationsGeneratorTest.cxx:12
TgcRawDataMonitorAlgorithm::TgcTrigNsw::slSector
int slSector
Definition: TgcRawDataMonitorAlgorithm.h:115
TGC::TgcHit::Y
const double & Y() const
Definition: TgcHit.h:57
python.TurnDataReader.dr
dr
Definition: TurnDataReader.py:112
TgcRawDataMonitorAlgorithm::TgcTrigNsw::bunch
int bunch
Definition: TgcRawDataMonitorAlgorithm.h:130
TgcRawDataMonitorAlgorithm::m_monitorThresholdPatterns
BooleanProperty m_monitorThresholdPatterns
Definition: TgcRawDataMonitorAlgorithm.h:233
TgcRawDataMonitorAlgorithm::ExtTrigInfo::matchedNSW
double matchedNSW
Definition: TgcRawDataMonitorAlgorithm.h:96
TgcRawDataMonitorAlgorithm::getMatchingWindow
double getMatchingWindow(const xAOD::Muon *muon) const
Definition: TgcRawDataMonitorAlgorithm.cxx:2564
drawFromPickle.cos
cos
Definition: drawFromPickle.py:36
MuonIdHelper::stationName
int stationName(const Identifier &id) const
Definition: MuonIdHelper.cxx:804
TgcRawDataMonitorAlgorithm::m_TgcPrepDataContainerKey
SG::ReadHandleKey< Muon::TgcPrepDataContainer > m_TgcPrepDataContainerKey
Definition: TgcRawDataMonitorAlgorithm.h:244
TgcRawDataMonitorAlgorithm::m_maskChannelFileName
StringProperty m_maskChannelFileName
Definition: TgcRawDataMonitorAlgorithm.h:306
TgcRawDataMonitorAlgorithm::m_MuonRoIContainerKey
SG::ReadHandleKey< xAOD::MuonRoIContainer > m_MuonRoIContainerKey
Definition: TgcRawDataMonitorAlgorithm.h:238
TgcRawDataMonitorAlgorithm::TgcTrig::width_R
double width_R
Definition: TgcRawDataMonitorAlgorithm.h:180
drawFromPickle.exp
exp
Definition: drawFromPickle.py:36
TrigConf::L1Menu::thresholdNames
std::vector< std::string > thresholdNames() const
List of L1 thresholds names.
Definition: L1Menu.cxx:242
TgcRawDataMonitorAlgorithm::TgcTrigRpc::rpcEta
int rpcEta
Definition: TgcRawDataMonitorAlgorithm.h:144
TgcRawDataMonitorAlgorithm::TgcTrigRpc::rpcDPhi
int rpcDPhi
Definition: TgcRawDataMonitorAlgorithm.h:147
Muon::TgcCoinData::INNER_RPC_DETA_BITSHIFT
static constexpr uint32_t INNER_RPC_DETA_BITSHIFT
Definition: TgcCoinData.h:250
TgcRawDataMonitorAlgorithm::TimedMuon::matchedL1ThrInclusiveTGC
std::set< int > matchedL1ThrInclusiveTGC
Definition: TgcRawDataMonitorAlgorithm.h:57
empty
bool empty(TH1 *h)
Definition: computils.cxx:294
TgcRawDataMonitorAlgorithm::m_zMassWindow
DoubleProperty m_zMassWindow
Definition: TgcRawDataMonitorAlgorithm.h:296
Identifier::is_valid
bool is_valid() const
Check if id is in a valid state.
TgcRawDataMonitorAlgorithm::TgcTrigNsw::R
int R
Definition: TgcRawDataMonitorAlgorithm.h:126
TgcRawDataMonitorAlgorithm::fillRoiHistograms
void fillRoiHistograms(const std::vector< TgcRawDataMonitorAlgorithm::TimedMuonRoI > &roiVec, const EventContext &ctx) const
Definition: TgcRawDataMonitorAlgorithm.cxx:297
TgcRawDataMonitorAlgorithm::TimedMuonRoI
Definition: TgcRawDataMonitorAlgorithm.h:41
xAOD::Muon_v1
Class describing a Muon.
Definition: Muon_v1.h:38
TgcRawDataMonitorAlgorithm::m_useDirectPrimaryTrackForExtrapolation
BooleanProperty m_useDirectPrimaryTrackForExtrapolation
Definition: TgcRawDataMonitorAlgorithm.h:283
TgcRawDataMonitorAlgorithm::m_MuonRoIContainerBCm1Key
SG::ReadHandleKey< xAOD::MuonRoIContainer > m_MuonRoIContainerBCm1Key
Definition: TgcRawDataMonitorAlgorithm.h:240
Muon::TgcCoinData::INNER_RPC_DPHI_BIT
static constexpr uint32_t INNER_RPC_DPHI_BIT
Definition: TgcCoinData.h:253
TgcRawDataMonitorAlgorithm::m_muonToPVdca
DoubleProperty m_muonToPVdca
Definition: TgcRawDataMonitorAlgorithm.h:253
Muon::TgcCoinData::INNER_NSW_INPUT_BITSHIFT
static constexpr uint32_t INNER_NSW_INPUT_BITSHIFT
Definition: TgcCoinData.h:242
TgcRawDataMonitorAlgorithm::m_muonToPVdzOffset
DoubleProperty m_muonToPVdzOffset
Definition: TgcRawDataMonitorAlgorithm.h:252
drawFromPickle.atan
atan
Definition: drawFromPickle.py:36
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
MuonGM::TgcReadoutElement::wireGangPos
Amg::Vector3D wireGangPos(const Identifier &id) const
Returns the global position of a wireGang.
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:93
Muon::TgcCoinData::INNER_NSW_DTHETA_BIT
static constexpr uint32_t INNER_NSW_DTHETA_BIT
Definition: TgcCoinData.h:233
Monitored::Collection
ValuesCollection< T > Collection(std::string name, const T &collection)
Declare a monitored (double-convertible) collection.
Definition: MonitoredCollection.h:38
TgcRawDataMonitorAlgorithm::m_pTCutOnExtrapolation
DoubleProperty m_pTCutOnExtrapolation
Definition: TgcRawDataMonitorAlgorithm.h:287
Muon::TgcPrepData::BCBIT_CURRENT
@ BCBIT_CURRENT
Definition: TgcPrepData.h:97
TgcRawDataMonitorAlgorithm::m_tagMuonInDifferentSystem
BooleanProperty m_tagMuonInDifferentSystem
Definition: TgcRawDataMonitorAlgorithm.h:261
TgcRawDataMonitorAlgorithm::m_PrimaryVertexContainerKey
SG::ReadHandleKey< xAOD::VertexContainer > m_PrimaryVertexContainerKey
Definition: TgcRawDataMonitorAlgorithm.h:249
TgcRawDataMonitorAlgorithm::TgcTrig::width_Out
double width_Out
Definition: TgcRawDataMonitorAlgorithm.h:179
TgcRawDataMonitorAlgorithm::TimedMuon::matchedL1ThrInclusive
std::set< int > matchedL1ThrInclusive
Definition: TgcRawDataMonitorAlgorithm.h:56
TgcRawDataMonitorAlgorithm::TgcTrigRpc::rpcDEta
int rpcDEta
Definition: TgcRawDataMonitorAlgorithm.h:146
TgcIdHelper::channel
int channel(const Identifier &id) const override
Definition: TgcIdHelper.cxx:649
TgcRawDataMonitorAlgorithm::m_GoodRunsListSelectorTool
ToolHandle< IGoodRunsListSelectorTool > m_GoodRunsListSelectorTool
Definition: TgcRawDataMonitorAlgorithm.h:327
AthMonitorAlgorithm
Base class for Athena Monitoring Algorithms.
Definition: AthMonitorAlgorithm.h:36
TgcRawDataMonitorAlgorithm::CoinFlagRPC
@ CoinFlagRPC
Definition: TgcRawDataMonitorAlgorithm.h:38
TgcRawDataMonitorAlgorithm::TgcTrig
Definition: TgcRawDataMonitorAlgorithm.h:166
TgcRawDataMonitorAlgorithm::TimedMuon::matchedL1Charge
bool matchedL1Charge
Definition: TgcRawDataMonitorAlgorithm.h:59
TGC::TgcHit::Z
const double & Z() const
Definition: TgcHit.h:58
MuonGM::MuonDetectorManager::getTgcReadoutElement
const TgcReadoutElement * getTgcReadoutElement(const Identifier &id) const
access via extended identifier (requires unpacking)
Definition: MuonDetDescr/MuonReadoutGeometry/src/MuonDetectorManager.cxx:247
InDet::ExclusiveOrigin::Primary
@ Primary
Definition: InDetTrackTruthOriginDefs.h:163
TgcRawDataMonitorAlgorithm::TgcTrigNsw::bcid
int bcid
Definition: TgcRawDataMonitorAlgorithm.h:129
SG::makeHandle
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
Definition: ReadCondHandle.h:270
TgcRawDataMonitorAlgorithm::CtpDecMonObj::tgcF
bool tgcF
Definition: TgcRawDataMonitorAlgorithm.h:216
TgcRawDataMonitorAlgorithm::CtpDecMonObj::multiplicity
long unsigned int multiplicity
Definition: TgcRawDataMonitorAlgorithm.h:210
CxxUtils::vec
typename vecDetail::vec_typedef< T, N >::type vec
Define a nice alias for the vectorized type.
Definition: vec.h:207
PyPoolBrowser.item
item
Definition: PyPoolBrowser.py:129
TgcRawDataMonitorAlgorithm::TgcTrig::roi
int roi
Definition: TgcRawDataMonitorAlgorithm.h:191
xAOD::MuonRoI_v1::isRun3
bool isRun3() const
Returns extra flag at end of RoI word indicating that it's in Run3 format.
TgcRawDataMonitorAlgorithm::m_anaOfflMuon
BooleanProperty m_anaOfflMuon
Definition: TgcRawDataMonitorAlgorithm.h:265
TgcRawDataMonitorAlgorithm::TgcTrig::isBiased
int isBiased
Definition: TgcRawDataMonitorAlgorithm.h:200
TgcRawDataMonitorAlgorithm::ExtTrigInfo::matchedRPC
double matchedRPC
Definition: TgcRawDataMonitorAlgorithm.h:95
TgcRawDataMonitorAlgorithm::m_useMSOnlyExtMSTrackForExtrapolation
BooleanProperty m_useMSOnlyExtMSTrackForExtrapolation
Definition: TgcRawDataMonitorAlgorithm.h:282
xAOD::MuonRoI_v1::isMoreCandInRoI
bool isMoreCandInRoI() const
Returns if there were other muons detected in the same RoI.
TgcRawDataMonitorAlgorithm::m_useMSTrackForExtrapolation
BooleanProperty m_useMSTrackForExtrapolation
Definition: TgcRawDataMonitorAlgorithm.h:279
TgcRawDataMonitorAlgorithm::m_CtpDecMonObj
std::vector< CtpDecMonObj > m_CtpDecMonObj
Definition: TgcRawDataMonitorAlgorithm.h:310
xAOD::MuonRoI_v1::isVetoed
bool isVetoed() const
Returns the veto flag for the candidate.
TgcRawDataMonitorAlgorithm::TgcTrig::type
int type
Definition: TgcRawDataMonitorAlgorithm.h:187
TgcRawDataMonitorAlgorithm::CoinFlagC
@ CoinFlagC
Definition: TgcRawDataMonitorAlgorithm.h:38
TgcRawDataMonitorAlgorithm::TgcTrig::width_Phi
double width_Phi
Definition: TgcRawDataMonitorAlgorithm.h:181
TgcRawDataMonitorAlgorithm::m_NswDeltaRCut
DoubleProperty m_NswDeltaRCut
Definition: TgcRawDataMonitorAlgorithm.h:307
MuonGM::TgcReadoutElement::gangLongWidth
double gangLongWidth(int gasGap, int gang) const
Returns the length of the most top wire in the gang.
Definition: MuonDetDescr/MuonReadoutGeometry/src/TgcReadoutElement.cxx:86
Muon::TgcCoinData::TYPE_HIPT
@ TYPE_HIPT
Definition: TgcCoinData.h:51
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
TgcRawDataMonitorAlgorithm::TgcTrig::isAside
int isAside
Definition: TgcRawDataMonitorAlgorithm.h:182
SG::ReadDecorHandle
Handle class for reading a decoration on an object.
Definition: StoreGate/StoreGate/ReadDecorHandle.h:94
id2
HWIdentifier id2
Definition: LArRodBlockPhysicsV0.cxx:564
TgcRawDataMonitorAlgorithm::ExtTrigInfo::matchedEI
double matchedEI
Definition: TgcRawDataMonitorAlgorithm.h:93
TgcRawDataMonitorAlgorithm::m_pTCutOnTrigExtrapolation
DoubleProperty m_pTCutOnTrigExtrapolation
Definition: TgcRawDataMonitorAlgorithm.h:288
TgcRawDataMonitorAlgorithm::TgcTrigRpc::rpcPhi
int rpcPhi
Definition: TgcRawDataMonitorAlgorithm.h:145
lumiFormat.i
int i
Definition: lumiFormat.py:92
TgcRawDataMonitorAlgorithm::m_FI_Z
DoubleProperty m_FI_Z
Definition: TgcRawDataMonitorAlgorithm.h:293
TgcRawDataMonitorAlgorithm::m_idHelperSvc
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Definition: TgcRawDataMonitorAlgorithm.h:229
TgcRawDataMonitorAlgorithm::CoinFlagH
@ CoinFlagH
Definition: TgcRawDataMonitorAlgorithm.h:38
z
#define z
TgcRawDataMonitorAlgorithm::TgcTrigRpc::slSector
int slSector
Definition: TgcRawDataMonitorAlgorithm.h:138
xAOD::P4Helpers::deltaR
double deltaR(double rapidity1, double phi1, double rapidity2, double phi2)
from bare bare rapidity,phi
Definition: xAODP4Helpers.h:150
TgcRawDataMonitorAlgorithm::ExtTrigInfo::matchedH
double matchedH
Definition: TgcRawDataMonitorAlgorithm.h:92
Muon::TgcCoinData::INNER_TILE_MODULE_BIT
static constexpr uint32_t INNER_TILE_MODULE_BIT
Definition: TgcCoinData.h:269
TgcRawDataMonitorAlgorithm::m_zMass
DoubleProperty m_zMass
Definition: TgcRawDataMonitorAlgorithm.h:295
Identifier
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:32
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
TgcRawDataMonitorAlgorithm::TgcTrigEifi::bunch
int bunch
Definition: TgcRawDataMonitorAlgorithm.h:162
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
TgcRawDataMonitorAlgorithm::m_maskChannelList
std::set< std::string > m_maskChannelList
Definition: TgcRawDataMonitorAlgorithm.h:312
MuonGM::TgcReadoutElement::gangShortWidth
double gangShortWidth(int gasGap, int gang) const
Returns the length of the most bottom wire in the gang.
Definition: MuonDetDescr/MuonReadoutGeometry/src/TgcReadoutElement.cxx:79
TgcRawDataMonitorAlgorithm::m_thresholdPatternsKey
SG::ReadDecorHandleKey< xAOD::MuonRoIContainer > m_thresholdPatternsKey
Definition: TgcRawDataMonitorAlgorithm.h:232
TgcRawDataMonitorAlgorithm::m_useOnlyCombinedMuons
BooleanProperty m_useOnlyCombinedMuons
Definition: TgcRawDataMonitorAlgorithm.h:284
createCablingJSON.station_name
int station_name
Simple script to generate a BIS78 cabling map as used for the Monte Carlo processing.
Definition: createCablingJSON.py:8
TgcRawDataMonitorAlgorithm::TimedMuon::passGoodMF
bool passGoodMF
Definition: TgcRawDataMonitorAlgorithm.h:62
TgcRawDataMonitorAlgorithm::TimedMuon::passIsMoreCandInRoI
bool passIsMoreCandInRoI
Definition: TgcRawDataMonitorAlgorithm.h:63
res
std::pair< std::vector< unsigned int >, bool > res
Definition: JetGroupProductTest.cxx:14
xAOD::VxType::PriVtx
@ PriVtx
Primary vertex.
Definition: TrackingPrimitives.h:571
TgcRawDataMonitorAlgorithm::TgcTrigTile::currBc
int currBc
Definition: TgcRawDataMonitorAlgorithm.h:108
xAOD::MuonRoI_v1
Class describing a LVL1 muon region of interest.
Definition: MuonRoI_v1.h:33
MuonGM::TgcReadoutElement
A TgcReadoutElement corresponds to a single TGC chamber; therefore typically a TGC station contains s...
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/TgcReadoutElement.h:42
TgcRawDataMonitorAlgorithm::m_EI_Z
DoubleProperty m_EI_Z
Definition: TgcRawDataMonitorAlgorithm.h:292
Muon::TgcCoinData::INNER_RPC_ETA_BITSHIFT
static constexpr uint32_t INNER_RPC_ETA_BITSHIFT
Bit info in int inner for the RPC inner-coincidence.
Definition: TgcCoinData.h:246
TgcRawDataMonitorAlgorithm::m_muonSelectionTool
ToolHandle< CP::IMuonSelectionTool > m_muonSelectionTool
Definition: TgcRawDataMonitorAlgorithm.h:330
Muon::TgcCoinData::INNER_TILE_MODULE_BITSHIFT
static constexpr uint32_t INNER_TILE_MODULE_BITSHIFT
Bit info in int inner for the Tile inner-coincidence.
Definition: TgcCoinData.h:268
Muon::TgcCoinData::INNER_NSW_DTHETA_BITSHIFT
static constexpr uint32_t INNER_NSW_DTHETA_BITSHIFT
Definition: TgcCoinData.h:232
TgcRawDataMonitorAlgorithm::m_packageName
StringProperty m_packageName
Definition: TgcRawDataMonitorAlgorithm.h:255
MuonGM::TgcReadoutElement::gangRadialLength
double gangRadialLength(int gasGap, int gang) const
Returns the length of the wire gang along the radial direction [pitch x N_{wire}^{gang}].
Definition: MuonDetDescr/MuonReadoutGeometry/src/TgcReadoutElement.cxx:72
xAOD::uint64_t
uint64_t
Definition: EventInfo_v1.cxx:123
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
TgcRawDataMonitorAlgorithm::m_doExpressProcessing
BooleanProperty m_doExpressProcessing
Definition: TgcRawDataMonitorAlgorithm.h:254
TgcRawDataMonitorAlgorithm::CtpDecMonObj::tgcThr
int tgcThr
Definition: TgcRawDataMonitorAlgorithm.h:212
Muon::TgcPrepData::BCBIT_NEXT
@ BCBIT_NEXT
Definition: TgcPrepData.h:97
TgcRawDataMonitorAlgorithm::m_ctpDecMonList
StringProperty m_ctpDecMonList
Definition: TgcRawDataMonitorAlgorithm.h:256
MakeFileForMJB.ext
string ext
Definition: Moriond2016/MakeFileForMJB.py:41
drawFromPickle.tan
tan
Definition: drawFromPickle.py:36
TgcRawDataMonitorAlgorithm::m_endcapPivotPlaneMaximumRadius
DoubleProperty m_endcapPivotPlaneMaximumRadius
Definition: TgcRawDataMonitorAlgorithm.h:298
xAOD::Vertex_v1::z
float z() const
Returns the z position.
TGC::TgcHit::type_name
const std::string & type_name() const
Definition: TgcHit.h:70
AthMonitorAlgorithm::fill
void fill(const ToolHandle< GenericMonitoringTool > &groupHandle, std::vector< std::reference_wrapper< Monitored::IMonitoredVariable >> &&variables) const
Fills a vector of variables to a group by reference.
TgcRawDataMonitorAlgorithm::TgcTrig::trackletId
int trackletId
Definition: TgcRawDataMonitorAlgorithm.h:188
TgcRawDataMonitorAlgorithm::CoinFlagEI
@ CoinFlagEI
Definition: TgcRawDataMonitorAlgorithm.h:38
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
TgcRawDataMonitorAlgorithm::CoinFlagTile
@ CoinFlagTile
Definition: TgcRawDataMonitorAlgorithm.h:38
Muon::TgcCoinData::INNER_RPC_BCID_BITSHIFT
static constexpr uint32_t INNER_RPC_BCID_BITSHIFT
Definition: TgcCoinData.h:256
TgcRawDataMonitorAlgorithm::m_anaMuonRoI
BooleanProperty m_anaMuonRoI
Definition: TgcRawDataMonitorAlgorithm.h:269
TgcRawDataMonitorAlgorithm::TgcTrig::muonMatched
int muonMatched
Definition: TgcRawDataMonitorAlgorithm.h:198
Trk::muon
@ muon
Definition: ParticleHypothesis.h:28
AthMonitorAlgorithm::GetEventInfo
SG::ReadHandle< xAOD::EventInfo > GetEventInfo(const EventContext &) const
Return a ReadHandle for an EventInfo object (get run/event numbers, etc.)
Definition: AthMonitorAlgorithm.cxx:107
Muon::TgcCoinData::TYPE_UNKNOWN
@ TYPE_UNKNOWN
Definition: TgcCoinData.h:53
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
TgcIdHelper::isStrip
int isStrip(const Identifier &id) const
isStrip corresponds to measuresPhi
Definition: TgcIdHelper.cxx:645
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
starts_with.h
C++20-like starts_with/ends_with for strings.
Muon::TgcCoinData::INNER_NSW_PHI_BIT
static constexpr uint32_t INNER_NSW_PHI_BIT
Definition: TgcCoinData.h:231
Trk::Combined
@ Combined
Definition: TrackSummaryTool.h:32
AthMonitorAlgorithm::DataType_t::cosmics
@ cosmics
TgcIdHelper::elementID
Identifier elementID(int stationName, int stationEta, int stationPhi) const
Definition: TgcIdHelper.cxx:556
MuonIdHelper::stationPhi
int stationPhi(const Identifier &id) const
Definition: MuonIdHelper.cxx:814
TgcRawDataMonitorAlgorithm::TgcTrig::width_In
double width_In
Definition: TgcRawDataMonitorAlgorithm.h:178
MuonGM::TgcReadoutElement::stripPos
Amg::Vector3D stripPos(int gasGap, int strip) const
Returns the global position of a strip.
TGC::TgcChamber
Definition: TgcChamber.h:10
TgcRawDataMonitorAlgorithm::getNswRindexFromEta
double getNswRindexFromEta(const double &eta) const
Definition: TgcRawDataMonitorAlgorithm.cxx:2558
xAOD::MuonRoI_v1::Barrel
@ Barrel
The muon candidate was detected in the barrel region.
Definition: MuonRoI_v1.h:38
TgcRawDataMonitorAlgorithm::TgcTrigNsw::currBc
int currBc
Definition: TgcRawDataMonitorAlgorithm.h:131
xAOD::MuonRoI_v1::Negative
@ Negative
The candidate came from the -z side (side C)
Definition: MuonRoI_v1.h:45
dumpTgcDigiThreshold.isStrip
list isStrip
Definition: dumpTgcDigiThreshold.py:33
MuonGM::TgcReadoutElement::stripLongWidth
double stripLongWidth(int, int) const
Definition: MuonDetDescr/MuonReadoutGeometry/src/TgcReadoutElement.cxx:162
MuonGM::MuonDetectorManager::tgcIdHelper
const TgcIdHelper * tgcIdHelper() const
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonDetectorManager.h:230
TgcRawDataMonitorAlgorithm::m_dPhiCutOnM3
DoubleProperty m_dPhiCutOnM3
Definition: TgcRawDataMonitorAlgorithm.h:301
TgcRawDataMonitorAlgorithm::CoinFlags
@ CoinFlags
Definition: TgcRawDataMonitorAlgorithm.h:39
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
TgcRawDataMonitorAlgorithm::TgcTrigRpc::bcid
int bcid
Definition: TgcRawDataMonitorAlgorithm.h:148
TgcRawDataMonitorAlgorithm::m_dumpFullChannelList
BooleanProperty m_dumpFullChannelList
Definition: TgcRawDataMonitorAlgorithm.h:305
TgcRawDataMonitorAlgorithm::m_dRCutOnM3
DoubleProperty m_dRCutOnM3
Definition: TgcRawDataMonitorAlgorithm.h:302
TrigConf::L1Menu::threshold
const TrigConf::L1Threshold & threshold(const std::string &thresholdName) const
Access to L1Threshold by name.
Definition: L1Menu.cxx:279
TgcRawDataMonitorAlgorithm::CtpDecMonObj::tgcC
bool tgcC
Definition: TgcRawDataMonitorAlgorithm.h:217
TgcRawDataMonitorAlgorithm::m_TgcCoinDataContainerPrevBCKey
SG::ReadHandleKey< Muon::TgcCoinDataContainer > m_TgcCoinDataContainerPrevBCKey
Definition: TgcRawDataMonitorAlgorithm.h:245
charge
double charge(const T &p)
Definition: AtlasPID.h:494
TgcRawDataMonitorAlgorithm::m_printAvailableMuonTriggers
BooleanProperty m_printAvailableMuonTriggers
Definition: TgcRawDataMonitorAlgorithm.h:258
TgcRawDataMonitorAlgorithm::m_thrPatternList
StringProperty m_thrPatternList
Definition: TgcRawDataMonitorAlgorithm.h:234
TgcRawDataMonitorAlgorithm::TgcTrig::isInner
int isInner
Definition: TgcRawDataMonitorAlgorithm.h:185
Muon::TgcCoinData::INNER_NSW_R_BITSHIFT
static constexpr uint32_t INNER_NSW_R_BITSHIFT
Bit info in int inner for the NSW inner-coincidence.
Definition: TgcCoinData.h:228
TgcRawDataMonitorAlgorithm::TgcTrig::inner
int inner
Definition: TgcRawDataMonitorAlgorithm.h:197
python.ElectronD3PDObject.matched
matched
Definition: ElectronD3PDObject.py:138
TgcRawDataMonitorAlgorithm::TimedMuon::passInnerCoin
bool passInnerCoin
Definition: TgcRawDataMonitorAlgorithm.h:61
MuonParameters::MuidSA
@ MuidSA
Definition: MuonParamDefs.h:59
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
xAOD::bcid
setEventNumber setTimeStamp bcid
Definition: EventInfo_v1.cxx:133
TGC::TgcHit::addResidual
void addResidual(const xAOD::Muon *m, const double v)
Definition: TgcHit.h:73
TrigJetMonitorAlgorithm.items
items
Definition: TrigJetMonitorAlgorithm.py:79
MuonIdHelper::stationEta
int stationEta(const Identifier &id) const
Definition: MuonIdHelper.cxx:809
item
Definition: ItemListSvc.h:43
Muon::TgcCoinData::INNER_NSW_BCID_BIT
static constexpr uint32_t INNER_NSW_BCID_BIT
Definition: TgcCoinData.h:241
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
TgcRawDataMonitorAlgorithm::TgcTrig::isStrip
int isStrip
Definition: TgcRawDataMonitorAlgorithm.h:184
AthMonitorAlgorithm::lbAverageInteractionsPerCrossing
virtual float lbAverageInteractionsPerCrossing(const EventContext &ctx=Gaudi::Hive::currentContext()) const
Calculate the average mu, i.e.
Definition: AthMonitorAlgorithm.cxx:222
TgcRawDataMonitorAlgorithm::TgcTrigRpc::currBc
int currBc
Definition: TgcRawDataMonitorAlgorithm.h:150
TGC::TgcChamber::StationEta
const int & StationEta() const
Definition: TgcChamber.h:51
TgcRawDataMonitorAlgorithm::m_anaTgcPrd
BooleanProperty m_anaTgcPrd
Definition: TgcRawDataMonitorAlgorithm.h:262
TgcRawDataMonitorAlgorithm::TgcTrig::pt
int pt
Definition: TgcRawDataMonitorAlgorithm.h:192
MuonGM::TgcReadoutElement::stripShortWidth
double stripShortWidth(int, int) const
Definition: MuonDetDescr/MuonReadoutGeometry/src/TgcReadoutElement.cxx:150
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:18
TgcRawDataMonitorAlgorithm::ExtTrigInfo::phi
double phi
Definition: TgcRawDataMonitorAlgorithm.h:87
Muon::TgcCoinData::INNER_RPC_ETA_BIT
static constexpr uint32_t INNER_RPC_ETA_BIT
Definition: TgcCoinData.h:247
TGC::TgcChamber::iM
const int & iM() const
Definition: TgcChamber.h:47
AthMonitorAlgorithm::initialize
virtual StatusCode initialize() override
initialize
Definition: AthMonitorAlgorithm.cxx:18
TgcRawDataMonitorAlgorithm::ExtTrigInfo
Definition: TgcRawDataMonitorAlgorithm.h:85
TgcRawDataMonitorAlgorithm::TgcTrigNsw::slInputIndex
int slInputIndex
Definition: TgcRawDataMonitorAlgorithm.h:117
TgcRawDataMonitorAlgorithm::TgcTrig::isForward
int isForward
Definition: TgcRawDataMonitorAlgorithm.h:183
MuonParameters::MuidCo
@ MuidCo
Definition: MuonParamDefs.h:60
DeMoAtlasDataLoss.runNumber
string runNumber
Definition: DeMoAtlasDataLoss.py:64
xAOD::thrPattern
thrPattern
Definition: EmTauRoI_v2.cxx:60
TgcRawDataMonitorAlgorithm::TgcTrig::phi
double phi
Definition: TgcRawDataMonitorAlgorithm.h:175
Amg::deltaR
double deltaR(const Amg::Vector3D &v1, const Amg::Vector3D &v2)
Definition: GeoPrimitivesHelpers.h:122
TgcRawDataMonitorAlgorithm::m_isolationWindow
DoubleProperty m_isolationWindow
Definition: TgcRawDataMonitorAlgorithm.h:276
TgcRawDataMonitorAlgorithm::TgcTrigEifi::slSector
int slSector
Definition: TgcRawDataMonitorAlgorithm.h:157
TgcRawDataMonitorAlgorithm::ExtPos
Definition: TgcRawDataMonitorAlgorithm.h:75
python.testIfMatch.matrix
matrix
Definition: testIfMatch.py:66
TgcRawDataMonitorAlgorithm::m_useMuonSelectorTool
BooleanProperty m_useMuonSelectorTool
Definition: TgcRawDataMonitorAlgorithm.h:286
TgcRawDataMonitorAlgorithm::TgcRawDataMonitorAlgorithm
TgcRawDataMonitorAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Definition: TgcRawDataMonitorAlgorithm.cxx:36
TgcRawDataMonitorAlgorithm::initialize
virtual StatusCode initialize() override
initialize
Definition: TgcRawDataMonitorAlgorithm.cxx:40
TgcRawDataMonitorAlgorithm::m_anaTgcCoin
BooleanProperty m_anaTgcCoin
Definition: TgcRawDataMonitorAlgorithm.h:263
xAOD::Vertex_v1
Class describing a Vertex.
Definition: Vertex_v1.h:42
TgcRawDataMonitorAlgorithm::TgcTrig::etaout
double etaout
Definition: TgcRawDataMonitorAlgorithm.h:177
TgcRawDataMonitorAlgorithm::ExtTrigInfo::matchedC
double matchedC
Definition: TgcRawDataMonitorAlgorithm.h:91
python.CaloScaleNoiseConfig.str
str
Definition: CaloScaleNoiseConfig.py:78
MuonGM::MuonDetectorManager
The MuonDetectorManager stores the transient representation of the Muon Spectrometer geometry and pro...
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonDetectorManager.h:49
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
TgcRawDataMonitorAlgorithm::CtpDecMonObj::rpcThr
int rpcThr
Definition: TgcRawDataMonitorAlgorithm.h:211
Muon::TgcCoinData::TYPE_SL
@ TYPE_SL
Definition: TgcCoinData.h:52
TrigRoiDescriptorCollection
Definition: TrigRoiDescriptorCollection.h:21
Trk::BoundaryCheck
Definition: BoundaryCheck.h:51
TgcRawDataMonitorAlgorithm::fillTgcCoinEff
void fillTgcCoinEff(const std::string &, const std::vector< TgcTrig > &, const std::vector< ExtPos > &, std::vector< ExtTrigInfo > &, std::vector< Monitored::ObjectsCollection< std::vector< ExtTrigInfo >, double >> &, MonVariables &) const
Definition: TgcRawDataMonitorAlgorithm.cxx:2476
TgcRawDataMonitorAlgorithm::fillTgcCoin
void fillTgcCoin(const std::string &, const std::vector< TgcTrig > &, std::vector< Monitored::ObjectsCollection< std::vector< TgcTrig >, double >> &, MonVariables &) const
Definition: TgcRawDataMonitorAlgorithm.cxx:2395
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
TgcRawDataMonitorAlgorithm::TgcTrig::bcid
int bcid
Definition: TgcRawDataMonitorAlgorithm.h:201
TgcRawDataMonitorAlgorithm::getPrimaryVertex
const xAOD::Vertex * getPrimaryVertex(const EventContext &ctx) const
Definition: TgcRawDataMonitorAlgorithm.cxx:221
TgcRawDataMonitorAlgorithm::TgcTrigNsw
Definition: TgcRawDataMonitorAlgorithm.h:114
TgcRawDataMonitorAlgorithm::m_nHitsInOtherBWTGCWire
IntegerProperty m_nHitsInOtherBWTGCWire
Definition: TgcRawDataMonitorAlgorithm.h:303
TgcRawDataMonitorAlgorithm::m_muonToPVdz
DoubleProperty m_muonToPVdz
Definition: TgcRawDataMonitorAlgorithm.h:251
TgcRawDataMonitorAlgorithm::m_extrapolator
ToolHandle< Trk::IExtrapolator > m_extrapolator
Definition: TgcRawDataMonitorAlgorithm.h:328
TgcRawDataMonitorAlgorithm::TgcTrigTile::tmdbDecisions
int tmdbDecisions
Definition: TgcRawDataMonitorAlgorithm.h:105
TgcRawDataMonitorAlgorithm::fillTgcPrdHistograms
void fillTgcPrdHistograms(Monitored::Scalar< int > &mon_bcid, Monitored::Scalar< int > &mon_pileup, Monitored::Scalar< int > &mon_lb, std::map< std::string, std::vector< ExtPos > > &extpositions, const EventContext &ctx) const
Definition: TgcRawDataMonitorAlgorithm.cxx:2701
TgcRawDataMonitorAlgorithm::fillHistogramsAfterTriggerDecision
void fillHistogramsAfterTriggerDecision(std::vector< TgcRawDataMonitorAlgorithm::TimedMuonRoI > &roiVec) const
Definition: TgcRawDataMonitorAlgorithm.cxx:582
TgcRawDataMonitorAlgorithm::CtpDecMonObj
Definition: TgcRawDataMonitorAlgorithm.h:207
TgcRawDataMonitorAlgorithm::CoinFlagNSW
@ CoinFlagNSW
Definition: TgcRawDataMonitorAlgorithm.h:38
Muon::TgcCoinData::TYPE_TRACKLET_EIFI
@ TYPE_TRACKLET_EIFI
Definition: TgcCoinData.h:54
TgcRawDataMonitorAlgorithm::CtpDecMonObj::rpcM
bool rpcM
Definition: TgcRawDataMonitorAlgorithm.h:220
checkFileSG.fi
fi
Definition: checkFileSG.py:65
xAOD::MuonRoI_v1::Forward
@ Forward
The muon candidate was detected in the forward region.
Definition: MuonRoI_v1.h:40
TgcRawDataMonitorAlgorithm::TgcTrigNsw::deltaTheta
int deltaTheta
Definition: TgcRawDataMonitorAlgorithm.h:128
CxxUtils::atoi
int atoi(std::string_view str)
Helper functions to unpack numbers decoded in string into integers and doubles The strings are requir...
Definition: Control/CxxUtils/Root/StringUtils.cxx:85
ReadDecorHandle.h
Handle class for reading a decoration on an object.
TgcRawDataMonitorAlgorithm::getRegionsOfInterest
std::vector< TgcRawDataMonitorAlgorithm::TimedMuonRoI > getRegionsOfInterest(const EventContext &ctx) const
Definition: TgcRawDataMonitorAlgorithm.cxx:238
xAOD::MuonRoI_v1::getBW3Coincidence
bool getBW3Coincidence() const
Returns whether or not there was a 3-station coincidence in the TGC.
str
Definition: BTagTrackIpAccessor.cxx:11
Muon::TgcCoinData::INNER_NSW_PHI_BITSHIFT
static constexpr uint32_t INNER_NSW_PHI_BITSHIFT
Definition: TgcCoinData.h:230
TgcRawDataMonitorAlgorithm::TgcTrig::y_Out
double y_Out
Definition: TgcRawDataMonitorAlgorithm.h:172
xAOD::STACO
@ STACO
Tracks produced by STACO.
Definition: TrackingPrimitives.h:99
TgcRawDataMonitorAlgorithm::m_monitorTriggerMultiplicity
BooleanProperty m_monitorTriggerMultiplicity
Definition: TgcRawDataMonitorAlgorithm.h:257
TgcRawDataMonitorAlgorithm::checkTriggerInfo
std::set< std::string > checkTriggerInfo() const
Definition: TgcRawDataMonitorAlgorithm.cxx:197
TgcRawDataMonitorAlgorithm::TgcTrig::y_In
double y_In
Definition: TgcRawDataMonitorAlgorithm.h:169
Muon::TgcCoinData::INNER_RPC_PHI_BIT
static constexpr uint32_t INNER_RPC_PHI_BIT
Definition: TgcCoinData.h:249
TgcRawDataMonitorAlgorithm::ExtTrigInfo::matchedTile
double matchedTile
Definition: TgcRawDataMonitorAlgorithm.h:94
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
xAOD::MuonRoI_v1::getCharge
Charge getCharge() const
Returns the charge sign of the muon candidate.
Monitored::Scalar
Declare a monitored scalar variable.
Definition: MonitoredScalar.h:34
TgcRawDataMonitorAlgorithm::TgcTrig::sub
int sub
Definition: TgcRawDataMonitorAlgorithm.h:194
TgcRawDataMonitorAlgorithm::TgcTrig::trackletIdStrip
int trackletIdStrip
Definition: TgcRawDataMonitorAlgorithm.h:189
TgcRawDataMonitorAlgorithm::m_trigMatchWindow
DoubleProperty m_trigMatchWindow
Definition: TgcRawDataMonitorAlgorithm.h:270
TgcRawDataMonitorAlgorithm::TgcTrig::isPositiveDeltaR
int isPositiveDeltaR
Definition: TgcRawDataMonitorAlgorithm.h:186
TgcRawDataMonitorAlgorithm::TgcTrig::x_In
double x_In
Definition: TgcRawDataMonitorAlgorithm.h:168
TgcRawDataMonitorAlgorithm::TgcTrig::lb
int lb
Definition: TgcRawDataMonitorAlgorithm.h:167
Muon::TgcCoinData::INNER_NSW_R_BIT
static constexpr uint32_t INNER_NSW_R_BIT
Definition: TgcCoinData.h:229
TgcRawDataMonitorAlgorithm::m_thrMonList
std::set< std::string > m_thrMonList
Definition: TgcRawDataMonitorAlgorithm.h:311
TgcRawDataMonitorAlgorithm::ExtTrigInfo::eta
double eta
Definition: TgcRawDataMonitorAlgorithm.h:86
TgcRawDataMonitorAlgorithm::m_M2_Z
DoubleProperty m_M2_Z
Definition: TgcRawDataMonitorAlgorithm.h:290
xAOD::lumiBlock
setTeId lumiBlock
Definition: L2StandAloneMuon_v1.cxx:327
TgcRawDataMonitorAlgorithm::m_useOnlyMuidCoStacoMuons
BooleanProperty m_useOnlyMuidCoStacoMuons
Definition: TgcRawDataMonitorAlgorithm.h:285
TgcRawDataMonitorAlgorithm::m_extZposition
std::vector< double > m_extZposition
Definition: TgcRawDataMonitorAlgorithm.h:309
SG::AllowEmpty
@ AllowEmpty
Definition: StoreGate/StoreGate/VarHandleKey.h:30
TGC::TgcChamber::StationPhi
const int & StationPhi() const
Definition: TgcChamber.h:52
TgcRawDataMonitorAlgorithm::TgcTrigNsw::slInput
int slInput
Definition: TgcRawDataMonitorAlgorithm.h:116
TgcRawDataMonitorAlgorithm::printOutAvailableMuonTriggers
StatusCode printOutAvailableMuonTriggers() const
Definition: TgcRawDataMonitorAlgorithm.cxx:143
SG::ReadDecorHandle::isAvailable
bool isAvailable()
Test to see if this variable exists in the store, for the referenced object.
Muon::TgcCoinData::INNER_NSW_INPUT_BIT
static constexpr uint32_t INNER_NSW_INPUT_BIT
Definition: TgcCoinData.h:243
GeV
#define GeV
Definition: CaloTransverseBalanceVecMon.cxx:30
TgcRawDataMonitorAlgorithm::m_M3_Z
DoubleProperty m_M3_Z
Definition: TgcRawDataMonitorAlgorithm.h:291
TgcRawDataMonitorAlgorithm::TgcTrig::sector
int sector
Definition: TgcRawDataMonitorAlgorithm.h:190
makeComparison.deltaR
float deltaR
Definition: makeComparison.py:36
TgcRawDataMonitorAlgorithm::TgcTrig::z_In
double z_In
Definition: TgcRawDataMonitorAlgorithm.h:170
xAOD::MuonRoI_v1::getSource
RoISource getSource() const
Returns the system that detected the muon candidate.
length
double length(const pvec &v)
Definition: FPGATrackSimLLPDoubletHoughTransformTool.cxx:26
TgcRawDataMonitorAlgorithm::m_TgcCoinDataContainerCurrBCKey
SG::ReadHandleKey< Muon::TgcCoinDataContainer > m_TgcCoinDataContainerCurrBCKey
Definition: TgcRawDataMonitorAlgorithm.h:246
TGC::TgcChamber::iSide
const TGCSIDE & iSide() const
Definition: TgcChamber.h:44
TgcRawDataMonitorAlgorithm::InnerCoinFlags
@ InnerCoinFlags
Definition: TgcRawDataMonitorAlgorithm.h:39
TgcRawDataMonitorAlgorithm::TgcTrig::delta
int delta
Definition: TgcRawDataMonitorAlgorithm.h:193
TGC::TgcHit
Definition: TgcHit.h:11
TGC::TGCSIDE::TGCASIDE
@ TGCASIDE
xAOD::MuonRoI_v1::Pos
@ Pos
Candidate is a mu+ from a TGC sector.
Definition: MuonRoI_v1.h:50
xAOD::MuonRoI_v1::Positive
@ Positive
The candidate came from the +z side (side A)
Definition: MuonRoI_v1.h:44
xAOD::MuonRoI_v1::roiWord
uint32_t roiWord() const
The "raw" RoI word describing the muon candidate.
TrigConf::L1Threshold
Standard L1 threshold configuration.
Definition: L1ThresholdBase.h:125
TgcRawDataMonitorAlgorithm::TimedMuon::passBW3Coin
bool passBW3Coin
Definition: TgcRawDataMonitorAlgorithm.h:60
TgcRawDataMonitorAlgorithm::CtpDecMonObj::tgcH
bool tgcH
Definition: TgcRawDataMonitorAlgorithm.h:218
xAOD::MuonRoI_v1::getEtaOverlap
bool getEtaOverlap() const
Returns whether there's overlap between the barrel-EC sectors.
xAOD::MuonRoI_v1::getGoodMF
bool getGoodMF() const
Returns whether or not there was a good magnetic field quality in the TGC.
TgcRawDataMonitorAlgorithm::ExtTrigInfo::matched
double matched
Definition: TgcRawDataMonitorAlgorithm.h:88
Muon::TgcCoinData::INNER_TILE_BCID_BIT
static constexpr uint32_t INNER_TILE_BCID_BIT
Definition: TgcCoinData.h:271
TgcRawDataMonitorAlgorithm::TgcTrigEifi
Definition: TgcRawDataMonitorAlgorithm.h:156
xAOD::MuonRoI_v1::phi
float phi() const
The azimuthal angle ( ) of the muon candidate.