ATLAS Offline Software
TrigBjetMonitorAlgorithm.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
9 #include "xAODJet/JetContainer.h"
11 
12 
13 TrigBjetMonitorAlgorithm::TrigBjetMonitorAlgorithm( const std::string& name, ISvcLocator* pSvcLocator )
14  : AthMonitorAlgorithm(name,pSvcLocator)
15 {}
16 
18 
19 
22 
28  ATH_CHECK( m_trigDecTool.retrieve() );
29 
31 }
32 
33 bool LLR(double pu, double pc, double pb, double &w) {
34  w = -100.;
35  bool ll = false;
36  double denom;
37  float cfrac(0.018); // DG 2022/07/28
38  if (pb > 0.) {
39  denom = pu*(1.-cfrac)+pc*cfrac;
40  if (denom > 0.) {
41  w = log(pb/denom);
42  ll = true;
43  }
44  }
45  return ll;
46 }
47 
48 bool LLRW(float pqcd, float ptop, float phbb, float &w) { // RJ 17/02/2025
49  w = -100.;
50  bool ll = false;
51  float denom;
52  float topfrac(0.25);
53  if (phbb > 0.) {
54  denom = pqcd*(1.-topfrac)+ptop*topfrac;
55  if (denom > 0.) {
56  w = log(phbb/denom);
57  ll = true;
58  }
59  }
60  return ll;
61 }
62 
63 
64 bool CalcRelPt (float muonPt, float muonEta, float muonPhi, float jetPt, float jetEta, float jetPhi, float &RelPt) {
65 
66  bool r = false;
67  RelPt = -20.;
68 
69  float muonT, muonX, muonY, muonZ, muon, jetT, jetX, jetY, jetZ, jet, scprod;
70 
71  muonT = 2.*atan( exp(-muonEta) );
72  jetT = 2.*atan( exp(-jetEta) );
73  if ( (std::abs(muonT) > 0.) && (std::abs(jetT) > 0.) ) {
74  muon = muonPt/std::abs( sin(muonT) );
75  muonX = muonPt*cos(muonPhi);
76  muonY = muonPt*sin(muonPhi);
77  muonZ = muon*cos(muonT);
78  jet = jetPt/std::abs( sin(jetT) );
79  jetX = jetPt*cos(jetPhi);
80  jetY = jetPt*sin(jetPhi);
81  jetZ = jet*cos(jetT);
82  scprod = (muonX*jetX + muonY*jetY + muonZ*jetZ)/(muon*jet);
83  scprod *= scprod;
84  if ( (1. - scprod) > 0. ) {
85  RelPt = muon * sqrt(1. - scprod);
86  r = true;
87  }
88  }
89 
90  return r;
91 
92 }
93 
94 float phiCorr(float phi) {
95  if (phi < -M_PI) phi += 2*M_PI;
96  if (phi > M_PI) phi -= 2*M_PI;
97  return phi;
98 }
99 
100 
101 StatusCode TrigBjetMonitorAlgorithm::fillHistograms( const EventContext& ctx ) const {
102  using namespace Monitored;
103 
104  if(m_trigDecTool->ExperimentalAndExpertMethods().isHLTTruncated()) {
105  ATH_MSG_WARNING("HLTResult truncated, skip trigger analysis");
106  return StatusCode::SUCCESS;
107  } // ATR-31454
108 
109 
110  // Read off-line PV's and fill histograms
111 
112  bool Eofflinepv(false);
113  float offlinepvz(-1.e6);
114  float offlinepvx(-1.e6);
115  float offlinepvy(-1.e6);
116 
117  if (m_collisionRun) {
118  auto OffNVtx = Monitored::Scalar<int>("Off_NVtx",0);
119  auto OffxVtx = Monitored::Scalar<float>("Off_xVtx",0.0);
120  auto OffyVtx = Monitored::Scalar<float>("Off_yVtx",0.0);
121  auto OffzVtx = Monitored::Scalar<float>("Off_zVtx",0.0);
122 
124  if (! offlinepv.isValid() ) {
125  ATH_MSG_ERROR("evtStore() does not contain VertexContainer Collection with name "<< m_offlineVertexContainerKey);
126  return StatusCode::FAILURE;
127  }
128  ATH_MSG_DEBUG(" Size of the Off-line PV container: " << offlinepv->size() );
129  if ( offlinepv->size() ) {
130  Eofflinepv = true;
131  offlinepvz = offlinepv->front()->z();
132  offlinepvx = offlinepv->front()->x();
133  offlinepvy = offlinepv->front()->y();
134  OffNVtx = offlinepv->size() ;
135  for (unsigned int j = 0; j<offlinepv->size(); j++) {
136  if ( (*(offlinepv))[j]->nTrackParticles()==0 ) continue; // MS 9/7/2025
137  if ( (*(offlinepv))[j]->vertexType()==0 ) continue; // MS 9/7/2025
138  OffxVtx = (*(offlinepv))[j]->x();
139  OffyVtx = (*(offlinepv))[j]->y();
140  OffzVtx = (*(offlinepv))[j]->z();
141  fill("TrigBjetMonitor",OffxVtx,OffyVtx,OffzVtx);
142  }
143  fill("TrigBjetMonitor",OffNVtx);
144  } // if size
145  } // if m_collisionRun
146 
147  // print the trigger chain names
148 
149  std::string chainName;
150 
151  int size_AllChains = m_allChains.size();
152  ATH_MSG_DEBUG(" Size of the AllChains trigger container: " << size_AllChains );
153  for (int i =0; i<size_AllChains; i++) {
155  ATH_MSG_DEBUG(" Chain number: " << i << " AllChains Chain Name: " << chainName );
156  }
157 
158  // Verifiy if the trigger chain was fired and if yes, fill the corresponding histogram
159 
160  bool mujetChain(false);
161  bool bjetChain(true);
162  bool L2bjetChain(false);
163 
164 
165  for ( auto& trigName : m_allChains ) {
166 
167 
168  if ( m_trigDecTool->isPassed(trigName) ) {
169  ATH_MSG_DEBUG(" Trigger chain from AllChains list: " << trigName << " has fired !!! " );
170 
171  // Verify if the chain was in the Express Stream if the job was an express job
172 
173  const unsigned int passBits = m_trigDecTool->isPassedBits(trigName);
174  const bool expressPass = passBits & TrigDefs::Express_passed;
175 
176  ATH_MSG_DEBUG( " Express Stream Test: Chain: " << trigName<< " m_expressStreamFlag: " << m_expressStreamFlag << " expressPass: " << expressPass );
177 
178  if ( !m_expressStreamFlag || (m_expressStreamFlag && expressPass) ) {
179 
180 
181  // bjet vs mujet vs L2bjetChain
182  mujetChain = false;
183  L2bjetChain = false;
184  bjetChain = false;
185  std::size_t found = trigName.find("HLT_mu");
186  if (found!=std::string::npos) mujetChain = true;
187  else {
188  found = trigName.find("a10sd_cssk");
189  if (found!=std::string::npos) L2bjetChain = true;
190  else bjetChain = true;
191  }
192 
193  ATH_MSG_DEBUG(" ===> Run 3 access to Trigger Item: " << trigName );
194  ATH_MSG_DEBUG(" bjetChain: " << bjetChain << " mujetChain: " << mujetChain << " L2bjetChain: " << L2bjetChain );
195 
196 
197  // online track container
199  // verify the content
200  for ( const xAOD::TrackParticle* track : *theTracks ) {
201  ATH_MSG_DEBUG( " Pt of track in TrackParticleContainer: " << track->pt() );
202  }
203 
204  float zPrmVtx = 0.; // used for muon-jets
205 
206  // Online Primary Vertex from SG
207 
208  if (m_collisionRun) {
210  int nPV = 0;
211  for (const xAOD::Vertex* vtx : *vtxContainer) {
212  if (vtx->vertexType() == xAOD::VxType::PriVtx) {
213  nPV++;
214  std::string NameH = "PVz_tr_"+trigName;
215  ATH_MSG_DEBUG( " NameH: " << NameH );
216  auto PVz_tr = Monitored::Scalar<float>(NameH,0.0);
217  PVz_tr = vtx->z();
218  zPrmVtx = PVz_tr;
219  ATH_MSG_DEBUG(" PVz_tr: " << PVz_tr);
220  fill("TrigBjetMonitor",PVz_tr);
221  if (Eofflinepv) {
222  NameH = "DiffOnOffPVz_tr_"+trigName;
223  ATH_MSG_DEBUG( " NameH: " << NameH );
224  auto DiffOnOffPVz_tr = Monitored::Scalar<float>(NameH,0.0);
225  DiffOnOffPVz_tr = vtx->z()-offlinepvz;
226  ATH_MSG_DEBUG(" DiffOnOffPVz_tr: " << DiffOnOffPVz_tr);
227  fill("TrigBjetMonitor",DiffOnOffPVz_tr);
228  } // if Eofflinepv
229  NameH = "PVx_tr_"+trigName;
230  ATH_MSG_DEBUG( " NameH: " << NameH );
231  auto PVx_tr = Monitored::Scalar<float>(NameH,0.0);
232  PVx_tr = vtx->x();
233  ATH_MSG_DEBUG(" PVx_tr: " << PVx_tr);
234  fill("TrigBjetMonitor",PVx_tr);
235  if (Eofflinepv) {
236  NameH = "DiffOnOffPVx_tr_"+trigName;
237  ATH_MSG_DEBUG( " NameH: " << NameH );
238  auto DiffOnOffPVx_tr = Monitored::Scalar<float>(NameH,0.0);
239  DiffOnOffPVx_tr = vtx->x()-offlinepvx;
240  ATH_MSG_DEBUG(" DiffOnOffPVx_tr: " << DiffOnOffPVx_tr);
241  fill("TrigBjetMonitor",DiffOnOffPVx_tr);
242  } // if Eofflinepv
243  NameH = "PVy_tr_"+trigName;
244  ATH_MSG_DEBUG( " NameH: " << NameH );
245  auto PVy_tr = Monitored::Scalar<float>(NameH,0.0);
246  PVy_tr = vtx->y();
247  ATH_MSG_DEBUG(" PVy_tr: " << PVy_tr);
248  fill("TrigBjetMonitor",PVy_tr);
249  if (Eofflinepv) {
250  NameH = "DiffOnOffPVy_tr_"+trigName;
251  ATH_MSG_DEBUG( " NameH: " << NameH );
252  auto DiffOnOffPVy_tr = Monitored::Scalar<float>(NameH,0.0);
253  DiffOnOffPVy_tr = vtx->y()-offlinepvy;
254  ATH_MSG_DEBUG(" DiffOnOffPVy_tr: " << DiffOnOffPVy_tr);
255  fill("TrigBjetMonitor",DiffOnOffPVy_tr);
256  } // if Eofflinepv
257  } // if vtx type
258  } // loop on vtxContainer
259  std::string NpvH = "nPV_tr_"+trigName;
260  ATH_MSG_DEBUG( " NpvH: " << NpvH );
261  auto nPV_tr = Monitored::Scalar<int>(NpvH,0.0);
262  nPV_tr = nPV;
263  fill("TrigBjetMonitor",nPV_tr);
264  } // if m_collisionRun
265 
266  // L2bjetChain
267 
268 
269  if (L2bjetChain) {
270  std::vector< TrigCompositeUtils::LinkInfo<xAOD::JetContainer> > onlinejets = m_trigDecTool->features<xAOD::JetContainer>(trigName, TrigDefs::Physics);
271 
272  std::string nJetH = "LargeR_nJet_"+trigName;
273  auto nJet = Monitored::Scalar<int>(nJetH,0.0);
274  nJet = onlinejets.size();
275  ATH_MSG_DEBUG(" nJet: " << nJet);
276  fill("TrigBjetMonitor",nJet);
277  for(const auto& jetLinkInfo : onlinejets) {
278  const xAOD::Jet* jet = *(jetLinkInfo.link);
279 
280 
281  bool theLLRW(false);
282 
283  // GN2XTrig
284 
285  std::string NameH = "GN2XTrig_pqcd_tr_"+trigName;
286  ATH_MSG_DEBUG( " NameH: " << NameH );
287  auto GN2XTrig_pqcd = Monitored::Scalar<float>(NameH,0.0);
288  const SG::AuxElement::ConstAccessor<float> pqcd_accessor("GN2XTrig_pqcd"); // DG 03-03-2025
289  GN2XTrig_pqcd = pqcd_accessor(*jet); // DG 03-03-2025
290  ATH_MSG_DEBUG(" GN2XTrig_pqcd: " << GN2XTrig_pqcd);
291  fill("TrigBjetMonitor",GN2XTrig_pqcd);
292 
293  NameH = "GN2XTrig_ptop_tr_"+trigName;
294  ATH_MSG_DEBUG( " NameH: " << NameH );
295  auto GN2XTrig_ptop = Monitored::Scalar<float>(NameH,0.0);
296  const SG::AuxElement::ConstAccessor<float> ptop_accessor("GN2XTrig_ptop"); // DG 03-03-2025
297  GN2XTrig_ptop = ptop_accessor(*jet); // DG 03-03-2025
298  ATH_MSG_DEBUG(" GN2XTrig_ptop: " << GN2XTrig_ptop);
299  fill("TrigBjetMonitor",GN2XTrig_ptop);
300 
301  NameH = "GN2XTrig_phbb_tr_"+trigName;
302  ATH_MSG_DEBUG( " NameH: " << NameH );
303  auto GN2XTrig_phbb = Monitored::Scalar<float>(NameH,0.0);
304  const SG::AuxElement::ConstAccessor<float> phbb_accessor("GN2XTrig_phbb"); // DG 03-03-2025
305  GN2XTrig_phbb = phbb_accessor(*jet); // DG 03-03-2025
306  ATH_MSG_DEBUG(" GN2XTrig_phbb: " << GN2XTrig_phbb);
307  fill("TrigBjetMonitor",GN2XTrig_phbb);
308 
309  NameH = "GN2XTrig_mv_tr_"+trigName;
310  ATH_MSG_DEBUG( " NameH: " << NameH );
311  auto GN2XTrig_mv = Monitored::Scalar<float>(NameH,0.0);
312  ATH_MSG_DEBUG(" GN2XTrig_pqcd: " << GN2XTrig_pqcd << " GN2XTrig_ptop: " << GN2XTrig_ptop << " GN2XTrig_phbb: " << GN2XTrig_phbb );
313  theLLRW = LLRW (GN2XTrig_pqcd, GN2XTrig_ptop, GN2XTrig_phbb, GN2XTrig_mv);
314  ATH_MSG_DEBUG(" GN2XTrig_mv: " << GN2XTrig_mv << " LLRW: " << theLLRW);
315  if ( theLLRW ) fill("TrigBjetMonitor",GN2XTrig_mv);
316 
317 
318  // jetPt
319  NameH = "LargeR_jetPt_"+trigName;
320  ATH_MSG_DEBUG( " NameH: " << NameH );
321  auto LargeR_jetPt = Monitored::Scalar<float>(NameH,0.0);
322  LargeR_jetPt = (jet->pt())*1.e-3;
323  ATH_MSG_DEBUG(" LargeR_jetPt: " << LargeR_jetPt);
324  fill("TrigBjetMonitor",LargeR_jetPt);
325 
326  // jetEta
327  NameH = "LargeR_jetEta_"+trigName;
328  ATH_MSG_DEBUG( " NameH: " << NameH );
329  auto LargeR_jetEta = Monitored::Scalar<float>(NameH,0.0);
330  LargeR_jetEta = jet->eta();
331 
332  // jetPhi
333  NameH = "LargeR_jetPhi_"+trigName;
334  ATH_MSG_DEBUG( " NameH: " << NameH );
335  auto LargeR_jetPhi = Monitored::Scalar<float>(NameH,0.0);
336  LargeR_jetPhi = jet->phi();
337  ATH_MSG_DEBUG(" LargeR_jetEta: " << LargeR_jetEta << " LargeR_jetPhi : " << LargeR_jetPhi);
338  fill("TrigBjetMonitor",LargeR_jetEta,LargeR_jetPhi);
339 
340  // jetMass
341  NameH = "LargeR_jetMass_"+trigName;
342  ATH_MSG_DEBUG( " NameH: " << NameH );
343  auto LargeR_jetMass = Monitored::Scalar<float>(NameH,0.0);
344  LargeR_jetMass = (jet->m())*1.e-3;
345  ATH_MSG_DEBUG(" LargeR_jetMass: " << LargeR_jetMass);
346  fill("TrigBjetMonitor",LargeR_jetMass);
347 
348  // GN2Xv01
349 
350  NameH = "GN2Xv01_pqcd_tr_"+trigName;
351  ATH_MSG_DEBUG( " NameH: " << NameH );
352  auto GN2Xv01_pqcd = Monitored::Scalar<float>(NameH,0.0);
353  const SG::AuxElement::ConstAccessor<float> pqcd_accessor0("GN2Xv01_pqcd"); // DG 03-03-2025
354  GN2Xv01_pqcd = pqcd_accessor0(*jet); // DG 03-03-2025
355  ATH_MSG_DEBUG(" GN2Xv01_pqcd: " << GN2Xv01_pqcd);
356  fill("TrigBjetMonitor",GN2Xv01_pqcd);
357 
358  NameH = "GN2Xv01_ptop_tr_"+trigName;
359  ATH_MSG_DEBUG( " NameH: " << NameH );
360  auto GN2Xv01_ptop = Monitored::Scalar<float>(NameH,0.0);
361  const SG::AuxElement::ConstAccessor<float> ptop_accessor0("GN2Xv01_ptop"); // DG 03-03-2025
362  GN2Xv01_ptop = ptop_accessor0(*jet); // DG 03-03-2025
363  ATH_MSG_DEBUG(" GN2Xv01_ptop: " << GN2Xv01_ptop);
364  fill("TrigBjetMonitor",GN2Xv01_ptop);
365 
366  NameH = "GN2Xv01_phbb_tr_"+trigName;
367  ATH_MSG_DEBUG( " NameH: " << NameH );
368  auto GN2Xv01_phbb = Monitored::Scalar<float>(NameH,0.0);
369  const SG::AuxElement::ConstAccessor<float> phbb_accessor0("GN2Xv01_phbb"); // DG 03-03-2025
370  GN2Xv01_phbb = phbb_accessor0(*jet); // DG 03-03-2025
371  ATH_MSG_DEBUG(" GN2Xv01_phbb: " << GN2Xv01_phbb);
372  fill("TrigBjetMonitor",GN2Xv01_phbb);
373 
374  NameH = "GN2Xv01_mv_tr_"+trigName;
375  ATH_MSG_DEBUG( " NameH: " << NameH );
376  auto GN2Xv01_mv = Monitored::Scalar<float>(NameH,0.0);
377  ATH_MSG_DEBUG(" GN2Xv01_pqcd: " << GN2Xv01_pqcd << " GN2Xv01_ptop: " << GN2Xv01_ptop << " GN2Xv01_phbb: " << GN2Xv01_phbb );
378  theLLRW = LLRW (GN2Xv01_pqcd, GN2Xv01_ptop, GN2Xv01_phbb, GN2Xv01_mv);
379  ATH_MSG_DEBUG(" GN2Xv01_mv: " << GN2Xv01_mv << " LLRW: " << theLLRW);
380  if ( theLLRW ) fill("TrigBjetMonitor",GN2Xv01_mv);
381 
382 
383 
384  } // for jetLinkInfo
385 
386  } // if (L2bjetChain)
387 
388 
389  if (mujetChain) {
390  std::vector< TrigCompositeUtils::LinkInfo<xAOD::MuonContainer> > onlinemuons = m_trigDecTool->features<xAOD::MuonContainer>(trigName, TrigDefs::Physics); // TM 2022-05-16
391  int imuon = 0;
392  std::string nMuonH = "nMuon_"+trigName;
393  auto nMuon = Monitored::Scalar<int>(nMuonH,0.0);
394  nMuon = onlinemuons.size();
395  fill("TrigBjetMonitor",nMuon);
396 
397  std::vector< TrigCompositeUtils::LinkInfo<xAOD::JetContainer> > onlinejets = m_trigDecTool->features<xAOD::JetContainer>(trigName, TrigDefs::Physics); // TM 2021-10-30
398  int ijet = 0;
399  std::string nJetH = "nJet_"+trigName;
400  auto nJet = Monitored::Scalar<int>(nJetH,0.0);
401  nJet = onlinejets.size();
402  fill("TrigBjetMonitor",nJet);
403 
404  if (nMuon*nJet > 0) {
405 
406  float muonPt1(0.), muonEta1(0.), muonPhi1(0.), muonZ1(0.), jetPt1(0.), jetEta1(0.), jetPhi1(0.), jetZ1(0.), muonZ(0.);
407  double GN1_mv(0.), GN2_mv(0.);
408  bool theLLR(false), theLLR_GN1(false), theLLR_GN2(false);
409  bool plotDeltaZ(false);
410 
411  for(const auto& muonLinkInfo : onlinemuons) {
412  const xAOD::Muon* muon = *(muonLinkInfo.link);
413  // muonPt
414  std::string NameH = "muonPt_"+trigName;
415  ATH_MSG_DEBUG( " NameH: " << NameH );
416  auto muonPt = Monitored::Scalar<float>(NameH,0.0);
417  muonPt = (muon->pt())*1.e-3;
418  ATH_MSG_DEBUG(" muonPt: " << muonPt);
419  fill("TrigBjetMonitor",muonPt);
420  // muonEta
421  NameH = "muonEta_"+trigName;
422  ATH_MSG_DEBUG( " NameH: " << NameH );
423  auto muonEta = Monitored::Scalar<float>(NameH,0.0);
424  muonEta = muon->eta();
425  ATH_MSG_DEBUG(" muonEta: " << muonEta);
426  fill("TrigBjetMonitor",muonEta);
427  // muonPhi
428  NameH = "muonPhi_"+trigName;
429  ATH_MSG_DEBUG( " NameH: " << NameH );
430  auto muonPhi = Monitored::Scalar<float>(NameH,0.0);
431  muonPhi = muon->phi();
432  ATH_MSG_DEBUG(" muonPhi : " << muonPhi);
433  // muonZ
434  auto link = muon->combinedTrackParticleLink(); // TM and DG 18/06/22
435  if (link.isValid()) {
436  plotDeltaZ = true;
437  const xAOD::TrackParticle* track = *link;
438  muonZ = track->z0() + track->vz();
439  } else {
440  plotDeltaZ = false;
441  muonZ = 0.;
442  }
443 
444  if (imuon == 0) {
445  //store the parameter for the 1st muon
446  muonPt1 = muonPt;
447  muonEta1 = muonEta;
448  muonPhi1 = muonPhi;
449  muonZ1 = muonZ;
450  }// if imuon==0
451 
452  // The associated jet loop
453  for(const auto& jetLinkInfo : onlinejets) {
454  const xAOD::Jet* jet = *(jetLinkInfo.link);
455  // jetPt
456  NameH = "jetPt_"+trigName;
457  ATH_MSG_DEBUG( " NameH: " << NameH );
458  auto jetPt = Monitored::Scalar<float>(NameH,0.0);
459  jetPt = (jet->pt())*1.e-3;
460  ATH_MSG_DEBUG(" jetPt: " << jetPt);
461  fill("TrigBjetMonitor",jetPt);
462  // jetEta
463  NameH = "jetEta_"+trigName;
464  ATH_MSG_DEBUG( " NameH: " << NameH );
465  auto jetEta = Monitored::Scalar<float>(NameH,0.0);
466  jetEta = jet->eta();
467  ATH_MSG_DEBUG(" jetEta : " << jetEta);
468  fill("TrigBjetMonitor",jetEta);
469  // jetPhi
470  NameH = "jetPhi_"+trigName;
471  ATH_MSG_DEBUG( " NameH: " << NameH );
472  auto jetPhi = Monitored::Scalar<float>(NameH,0.0);
473  jetPhi = jet->phi();
474  ATH_MSG_DEBUG(" jetPhi : " << jetPhi);
475 
476  // Take the b-tagging info from the first jet
477  if (ijet == 0) {
478  //store the parameter for the 1st jet
479  jetPt1 = jetPt;
480  jetEta1 = jetEta;
481  jetPhi1 = jetPhi;
482  jetZ1 = zPrmVtx;
483 
484  auto btaggingLinkInfo = TrigCompositeUtils::findLink<xAOD::BTaggingContainer>(jetLinkInfo.source, m_btaggingLinkName); // TM 2021-10-30
485  const SG::AuxElement* obj_storing_btag = nullptr;
486  if ( btaggingLinkInfo.isValid() ) {
487  obj_storing_btag = *(btaggingLinkInfo.link);
488  }
489  else {
490  obj_storing_btag = *(jetLinkInfo.link);
491  }
492 
493  static const SG::AuxElement::ConstAccessor<float> GN1pu_accessor("GN120220813_pu");
494  static const SG::AuxElement::ConstAccessor<float> GN1pc_accessor("GN120220813_pc");
495  static const SG::AuxElement::ConstAccessor<float> GN1pb_accessor("GN120220813_pb");
496 
497  static const SG::AuxElement::ConstAccessor<float> GN2pu_accessor("GN220240122_pu");
498  static const SG::AuxElement::ConstAccessor<float> GN2pc_accessor("GN220240122_pc");
499  static const SG::AuxElement::ConstAccessor<float> GN2pb_accessor("GN220240122_pb");
500 
501  // checking just pu is enough
502  if (GN1pu_accessor.isAvailable(*obj_storing_btag)) {
503  double GN1_pu(0.), GN1_pc(0.), GN1_pb(0.);
504  GN1_pu = GN1pu_accessor(*obj_storing_btag);
505  ATH_MSG_DEBUG(" GN1_pu: " << GN1_pu);
506  GN1_pc = GN1pc_accessor(*obj_storing_btag);
507  ATH_MSG_DEBUG(" GN1_pc: " << GN1_pc);
508  GN1_pb = GN1pb_accessor(*obj_storing_btag);
509  ATH_MSG_DEBUG(" GN1_pb: " << GN1_pb);
510  theLLR = LLR (GN1_pu, GN1_pc, GN1_pb, GN1_mv);
511  theLLR_GN1 = theLLR;
512  if ( !theLLR ) GN1_mv=-100.;
513  ATH_MSG_DEBUG(" GN1_mv: " << GN1_mv << " LLR: " << theLLR);
514  }
515  if (GN2pu_accessor.isAvailable(*obj_storing_btag)) {
516  double GN2_pu(0.), GN2_pc(0.), GN2_pb(0.);
517  GN2_pu = GN2pu_accessor(*obj_storing_btag);
518  ATH_MSG_DEBUG(" GN2_pu: " << GN2_pu);
519  GN2_pc = GN2pc_accessor(*obj_storing_btag);
520  ATH_MSG_DEBUG(" GN2_pc: " << GN2_pc);
521  GN2_pb = GN2pb_accessor(*obj_storing_btag);
522  ATH_MSG_DEBUG(" GN2_pb: " << GN2_pb);
523  theLLR = LLR (GN2_pu, GN2_pc, GN2_pb, GN2_mv);
524  theLLR_GN2 = theLLR;
525  if ( !theLLR ) GN2_mv=-100.;
526  ATH_MSG_DEBUG(" GN2_mv: " << GN2_mv << " LLR: " << theLLR);
527  }
528  }// if ijet==0
529 
530  ijet++;
531 
532  }// for onlinejets
533 
534  imuon++;
535 
536  }// for onlinemuons
537 
538  // muon vs jet histograms
539 
540  // Delta R(muon,jet)
541  std::string DeltaRH = "DeltaR_"+trigName;
542  ATH_MSG_DEBUG( " DeltaRH: " << DeltaRH );
543  auto DeltaR = Monitored::Scalar<float>(DeltaRH,0.0);
544  float DeltaEta = muonEta1 - jetEta1;
545  float DeltaPhi = phiCorr( phiCorr(muonPhi1) - phiCorr(jetPhi1) );
546  DeltaR = sqrt( DeltaEta*DeltaEta + DeltaPhi*DeltaPhi );
547  ATH_MSG_DEBUG(" Delta R : " << DeltaR);
548  fill("TrigBjetMonitor",DeltaR);
549 
550  // Delta Z(muon,jet)
551  std::string DeltaZH = "DeltaZ_"+trigName;
552  ATH_MSG_DEBUG( " DeltaZH: " << DeltaZH );
553  auto DeltaZ = Monitored::Scalar<float>(DeltaZH,0.0);
554  DeltaZ = std::abs(muonZ1-jetZ1);
555  ATH_MSG_DEBUG(" Delta Z : " << DeltaZ);
556  if (plotDeltaZ) fill("TrigBjetMonitor",DeltaZ);
557 
558  // muonPt/jetPt
559  std::string RatioPtH = "RatioPt_"+trigName;
560  ATH_MSG_DEBUG( " RatioPtH: " << RatioPtH );
561  auto RatioPt = Monitored::Scalar<float>(RatioPtH,0.0);
562  RatioPt = -100.;
563  if (jetPt1 > 0.) RatioPt = muonPt1/jetPt1;
564  ATH_MSG_DEBUG(" RatioPt : " << RatioPt);
565  if (RatioPt > 0.) fill("TrigBjetMonitor",RatioPt);
566 
567  // muonPt relative to jet direction
568  std::string RelPtH = "RelPt_"+trigName;
569  ATH_MSG_DEBUG( " RelPtH: " << RelPtH );
570  auto RelPt = Monitored::Scalar<float>(RelPtH,0.0);
571  RelPt = 1.e10;
572  bool calc_relpt = CalcRelPt (muonPt1, muonEta1, muonPhi1, jetPt1, jetEta1, jetPhi1, RelPt);
573  ATH_MSG_DEBUG(" RelPt : " << RelPt);
574 
575  // wGN1
576  std::string wGN1H = "wGN1_"+trigName;
577  ATH_MSG_DEBUG( " NameH: " << wGN1H );
578  auto wGN1 = Monitored::Scalar<float>(wGN1H,0.0);
579  wGN1 = float(GN1_mv);
580  ATH_MSG_DEBUG(" wGN1: " << wGN1 << " RelPt : " << RelPt);
581  if (calc_relpt && theLLR_GN1) fill("TrigBjetMonitor",wGN1,RelPt);
582 
583  // wGN2
584  std::string wGN2H = "wGN2_"+trigName;
585  ATH_MSG_DEBUG( " NameH: " << wGN2H );
586  auto wGN2 = Monitored::Scalar<float>(wGN2H,0.0);
587  wGN2 = float(GN2_mv);
588  ATH_MSG_DEBUG(" wGN2: " << wGN2 << " RelPt : " << RelPt);
589  if (calc_relpt && theLLR_GN2) fill("TrigBjetMonitor",wGN2,RelPt);
590 
591  } // if (nMuon*nJet > 0)
592 
593  }// if mujetChain
594 
595  // bjet chains
596  if (bjetChain) {
597 
598  // Jets and PV and tracks through jet link
599 
600  std::vector< TrigCompositeUtils::LinkInfo<xAOD::JetContainer> > onlinejets = m_trigDecTool->features<xAOD::JetContainer>(trigName, TrigDefs::Physics); // TM 2021-10-30
601 
602  int ijet = 0;
603  int itrack = 0;
604  std::string nJetH = "nJet_"+trigName;
605  auto nJet = Monitored::Scalar<int>(nJetH,0.0);
606  nJet = onlinejets.size();
607  fill("TrigBjetMonitor",nJet);
608 
609  if (nJet > 0) {
610 
611  for(const auto& jetLinkInfo : onlinejets) {
612  const xAOD::Jet* jet = *(jetLinkInfo.link);
613  // jetPt
614  std::string NameH = "jetPt_"+trigName;
615  ATH_MSG_DEBUG( " NameH: " << NameH );
616  auto jetPt = Monitored::Scalar<float>(NameH,0.0);
617  jetPt = (jet->pt())*1.e-3;
618  ATH_MSG_DEBUG(" jetPt: " << jetPt);
619  fill("TrigBjetMonitor",jetPt);
620  // jetEta
621  NameH = "jetEta_"+trigName;
622  ATH_MSG_DEBUG( " NameH: " << NameH );
623  auto jetEta = Monitored::Scalar<float>(NameH,0.0);
624  jetEta = jet->eta();
625  // jetPhi
626  NameH = "jetPhi_"+trigName;
627  ATH_MSG_DEBUG( " NameH: " << NameH );
628  auto jetPhi = Monitored::Scalar<float>(NameH,0.0);
629  jetPhi = jet->phi();
630  ATH_MSG_DEBUG(" jetEta: " << jetEta << " jetPhi : " << jetPhi);
631  fill("TrigBjetMonitor",jetEta,jetPhi);
632 
633  // zPV associated to the jets in the same event: they are the same for every jet in the same event so only the first zPV should be plotted
634  if (ijet == 0) {
635 
636  // Fetch and plot PV
637 
638  std::string vtxname = m_onlineVertexContainerKey.key();
639  if ( vtxname.compare(0, 4, "HLT_")==0 ) vtxname.erase(0,4);
640  auto vertexLinkInfo = TrigCompositeUtils::findLink<xAOD::VertexContainer>(jetLinkInfo.source, vtxname ); // CV 200120 & MS 290620
641  ATH_CHECK( vertexLinkInfo.isValid() ) ; // TM 200120
642  const xAOD::Vertex* vtx = *(vertexLinkInfo.link);
643  NameH = "PVz_jet_"+trigName;
644  ATH_MSG_DEBUG( " NameH: " << NameH );
645  auto PVz_jet = Monitored::Scalar<float>(NameH,0.0);
646  PVz_jet = vtx->z();
647  ATH_MSG_DEBUG(" PVz_jet: " << PVz_jet);
648  fill("TrigBjetMonitor",PVz_jet);
649  NameH = "PVx_jet_"+trigName;
650  ATH_MSG_DEBUG( " NameH: " << NameH );
651  auto PVx_jet = Monitored::Scalar<float>(NameH,0.0);
652  PVx_jet = vtx->x();
653  ATH_MSG_DEBUG(" PVx_jet: " << PVx_jet);
654  fill("TrigBjetMonitor",PVx_jet);
655  NameH = "PVy_jet_"+trigName;
656  ATH_MSG_DEBUG( " NameH: " << NameH );
657  auto PVy_jet = Monitored::Scalar<float>(NameH,0.0);
658  PVy_jet = vtx->y();
659  ATH_MSG_DEBUG(" PVy_jet: " << PVy_jet);
660  fill("TrigBjetMonitor",PVy_jet);
661 
662 
663  } // if (ijet == 0)
664 
665  ijet++;
666 
667  // Fetch and plot BTagging information
668  const SG::AuxElement* obj_storing_btag = nullptr;
669  auto btaggingLinkInfo = TrigCompositeUtils::findLink<xAOD::BTaggingContainer>(jetLinkInfo.source, m_btaggingLinkName); // TM 2021-10-30
670  if ( btaggingLinkInfo.isValid() ) {
671  obj_storing_btag = *(btaggingLinkInfo.link);
672  }
673  else {
674  obj_storing_btag = *(jetLinkInfo.link);
675  }
676 
677  bool theLLR(false);
678  static const SG::AuxElement::ConstAccessor<float> GN1pu_accessor("GN120220813_pu");
679  static const SG::AuxElement::ConstAccessor<float> GN1pc_accessor("GN120220813_pc");
680  static const SG::AuxElement::ConstAccessor<float> GN1pb_accessor("GN120220813_pb");
681  static const SG::AuxElement::ConstAccessor<float> GN2pu_accessor("GN220240122_pu");
682  static const SG::AuxElement::ConstAccessor<float> GN2pc_accessor("GN220240122_pc");
683  static const SG::AuxElement::ConstAccessor<float> GN2pb_accessor("GN220240122_pb");
684  // checking only pu should be sufficient
685  bool GN1_available = GN1pu_accessor.isAvailable(*obj_storing_btag);
686  bool GN2_available = GN2pu_accessor.isAvailable(*obj_storing_btag);
687  NameH = "GN1_pu_tr_"+trigName;
688  ATH_MSG_DEBUG( " NameH: " << NameH );
689  auto GN1_pu = Monitored::Scalar<double>(NameH,0.0);
690  GN1_pu = GN1_available ? GN1pu_accessor(*obj_storing_btag) : 0.0;
691  ATH_MSG_DEBUG(" GN1_pu: " << GN1_pu);
692  fill("TrigBjetMonitor",GN1_pu);
693 
694  NameH = "GN1_pc_tr_"+trigName;
695  ATH_MSG_DEBUG( " NameH: " << NameH );
696  auto GN1_pc = Monitored::Scalar<double>(NameH,0.0);
697  GN1_pc = GN1_available ? GN1pc_accessor(*obj_storing_btag) : 0.0;
698  ATH_MSG_DEBUG(" GN1_pc: " << GN1_pc);
699  fill("TrigBjetMonitor",GN1_pc);
700 
701  NameH = "GN1_pb_tr_"+trigName;
702  ATH_MSG_DEBUG( " NameH: " << NameH );
703  auto GN1_pb = Monitored::Scalar<double>(NameH,0.0);
704  GN1_pb = GN1_available ? GN1pb_accessor(*obj_storing_btag) : 0.0;
705  ATH_MSG_DEBUG(" GN1_pb: " << GN1_pb);
706  fill("TrigBjetMonitor",GN1_pb);
707 
708  NameH = "GN1_mv_tr_"+trigName;
709  ATH_MSG_DEBUG( " NameH: " << NameH );
710  auto GN1_mv = Monitored::Scalar<double>(NameH,0.0);
711  theLLR = LLR (GN1_pu, GN1_pc, GN1_pb, GN1_mv);
712  if ( theLLR ) fill("TrigBjetMonitor",GN1_mv);
713  ATH_MSG_DEBUG(" GN1_mv: " << GN1_mv << " LLR: " << theLLR);
714 
715 
716  NameH = "GN2_pu_tr_"+trigName;
717  ATH_MSG_DEBUG( " NameH: " << NameH );
718  auto GN2_pu = Monitored::Scalar<double>(NameH,0.0);
719  GN2_pu = GN2_available ? GN2pu_accessor(*obj_storing_btag) : 0.0;
720  ATH_MSG_DEBUG(" GN2_pu: " << GN2_pu);
721  fill("TrigBjetMonitor",GN2_pu);
722 
723  NameH = "GN2_pc_tr_"+trigName;
724  ATH_MSG_DEBUG( " NameH: " << NameH );
725  auto GN2_pc = Monitored::Scalar<double>(NameH,0.0);
726  GN2_pc = GN2_available ? GN2pc_accessor(*obj_storing_btag) : 0.0;
727  ATH_MSG_DEBUG(" GN2_pc: " << GN2_pc);
728  fill("TrigBjetMonitor",GN2_pc);
729 
730  NameH = "GN2_pb_tr_"+trigName;
731  ATH_MSG_DEBUG( " NameH: " << NameH );
732  auto GN2_pb = Monitored::Scalar<double>(NameH,0.0);
733  GN2_pb = GN2_available ? GN2pb_accessor(*obj_storing_btag) : 0.0;
734  ATH_MSG_DEBUG(" GN2_pb: " << GN2_pb);
735  fill("TrigBjetMonitor",GN2_pb);
736 
737  NameH = "GN2_mv_tr_"+trigName;
738  ATH_MSG_DEBUG( " NameH: " << NameH );
739  auto GN2_mv = Monitored::Scalar<double>(NameH,0.0);
740  theLLR = LLR (GN2_pu, GN2_pc, GN2_pb, GN2_mv);
741  if ( theLLR ) fill("TrigBjetMonitor",GN2_mv);
742  ATH_MSG_DEBUG(" GN2_mv: " << GN2_mv << " LLR: " << theLLR);
743 
744 
745  // Tracks associated to triggered jets ( featurs = onlinejets ) courtesy of Tim Martin on 12/05/2020
746  const auto track_it_pair = m_trigDecTool->associateToEventView(theTracks, jetLinkInfo.source, "roi");
747  const xAOD::TrackParticleContainer::const_iterator start_it = track_it_pair.first;
748  const xAOD::TrackParticleContainer::const_iterator end_it = track_it_pair.second;
749 
750  int count = 0;
751  for ( xAOD::TrackParticleContainer::const_iterator it = start_it; it != end_it; ++it) {
752  count++;
753  ATH_MSG_DEBUG( " Track " << count << " with pT " << (*it)->pt() <<" from BJet with pT " << (*jetLinkInfo.link)->pt() );
754  ATH_MSG_DEBUG( " Track " << count << " with pT/eta/phi " << (*it)->pt() << "/" << (*it)->eta() << "/" << (*it)->phi() );
755  ATH_MSG_DEBUG( " Track " << count << " with d0/sigd0 " << (*it)->d0() << "/" << Amg::error((*it)->definingParametersCovMatrix(), 0) );
756  ATH_MSG_DEBUG( " Track " << count << " with z0/sigz0 " << (*it)->z0() << "/" << Amg::error((*it)->definingParametersCovMatrix(), 1) );
757  std::string NameH = "trkPt_"+trigName;
758  ATH_MSG_DEBUG( " NameH: " << NameH );
759  auto trkPt = Monitored::Scalar<float>(NameH,0.0);
760  trkPt = ((*it)->pt())*1.e-3;
761  ATH_MSG_DEBUG(" trkPt: " << trkPt);
762  fill("TrigBjetMonitor",trkPt);
763  NameH = "trkEta_"+trigName;
764  ATH_MSG_DEBUG( " NameH: " << NameH );
765  auto trkEta = Monitored::Scalar<float>(NameH,0.0);
766  trkEta = (*it)->eta();
767  NameH = "trkPhi_"+trigName;
768  ATH_MSG_DEBUG( " NameH: " << NameH );
769  auto trkPhi = Monitored::Scalar<float>(NameH,0.0);
770  trkPhi = (*it)->phi();
771  ATH_MSG_DEBUG(" trkEta: " << trkEta << " trkPhi : " << trkPhi);
772  fill("TrigBjetMonitor",trkEta,trkPhi);
773  NameH = "d0_"+trigName;
774  ATH_MSG_DEBUG( " NameH: " << NameH );
775  auto d0 = Monitored::Scalar<float>(NameH,0.0);
776  d0 = (*it)->d0();
777  ATH_MSG_DEBUG(" d0: " << d0);
778  fill("TrigBjetMonitor",d0);
779  NameH = "z0_"+trigName;
780  ATH_MSG_DEBUG( " NameH: " << NameH );
781  auto z0 = Monitored::Scalar<float>(NameH,0.0);
782  z0 = (*it)->z0();
783  ATH_MSG_DEBUG(" z0: " << z0);
784  fill("TrigBjetMonitor",z0);
785  NameH = "ed0_"+trigName;
786  ATH_MSG_DEBUG( " NameH: " << NameH );
787  auto ed0 = Monitored::Scalar<float>(NameH,0.0);
788  ed0 = Amg::error((*it)->definingParametersCovMatrix(), 0);
789  ATH_MSG_DEBUG(" ed0: " << ed0);
790  fill("TrigBjetMonitor",ed0);
791  NameH = "sd0_"+trigName;
792  ATH_MSG_DEBUG( " NameH: " << NameH );
793  auto sd0 = Monitored::Scalar<float>(NameH,0.0);
794  sd0 = -10.;
795  if (ed0 > 0.) sd0 = std::abs(d0)/ed0;
796  ATH_MSG_DEBUG(" sd0: " << sd0);
797  fill("TrigBjetMonitor",sd0);
798  NameH = "ez0_"+trigName;
799  ATH_MSG_DEBUG( " NameH: " << NameH );
800  auto ez0 = Monitored::Scalar<float>(NameH,0.0);
801  ez0 = Amg::error((*it)->definingParametersCovMatrix(), 1);
802  ATH_MSG_DEBUG(" ez0: " << ez0);
803  fill("TrigBjetMonitor",ez0);
804  } // it on tracks
805  ATH_MSG_DEBUG( " Number of tracks: " << count );
806  itrack += count;
807 
808  } // jetLinkInfo from onlinejets
809 
810  ATH_MSG_DEBUG(" Total number of triggered b-jets: " << ijet << " nJet : " << nJet);
811  ATH_MSG_DEBUG(" Total number of triggered tracks associated to the b-jets: " << itrack);
812  std::string nTrackH = "nTrack_"+trigName;
813  auto nTrack = Monitored::Scalar<int>(nTrackH,0.0);
814  nTrack = itrack;
815  fill("TrigBjetMonitor",nTrack);
816 
817  } // if (nJet > 0)
818 
819  } //if bjetChain
820 
821  } else {
822  ATH_MSG_DEBUG(" Chain " << trigName << " is declared for the Express Stream but it is NOT in the Express Stream in an Express Job");
823  } // if m_expressStreamFlag
824 
825  } else {
826  ATH_MSG_DEBUG( " Trigger chain from AllChains list: " << trigName << " has not fired " );
827  } // trigger not fired
828 
829 
830  } // for AllChains
831 
832  return StatusCode::SUCCESS;
833 }
AllowedVariables::e
e
Definition: AsgElectronSelectorTool.cxx:37
beamspotman.r
def r
Definition: beamspotman.py:672
xAOD::Vertex_v1::x
float x() const
Returns the x position.
xAOD::muon
@ muon
Definition: TrackingPrimitives.h:196
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:67
detail::ll
long long ll
Definition: PrimitiveHelpers.h:47
keylayer_zslicemap.pb
pb
Definition: keylayer_zslicemap.py:188
AthMonitorAlgorithm::m_trigDecTool
PublicToolHandle< Trig::TrigDecisionTool > m_trigDecTool
Tool to tell whether a specific trigger is passed.
Definition: AthMonitorAlgorithm.h:340
TrigBjetMonitorAlgorithm::~TrigBjetMonitorAlgorithm
virtual ~TrigBjetMonitorAlgorithm()
Definition: TrigBjetMonitorAlgorithm.cxx:17
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:67
SG::AuxElement
Base class for elements of a container that can have aux data.
Definition: AuxElement.h:483
met::DeltaR
@ DeltaR
Definition: METRecoCommon.h:11
EventPrimitivesHelpers.h
skel.it
it
Definition: skel.GENtoEVGEN.py:407
M_PI
#define M_PI
Definition: ActiveFraction.h:11
xAOD::passBits
passBits
Definition: TrigPassBits_v1.cxx:115
TrigBjetMonitorAlgorithm::initialize
virtual StatusCode initialize() override
initialize
Definition: TrigBjetMonitorAlgorithm.cxx:20
SG::ConstAccessor
Helper class to provide constant type-safe access to aux data.
Definition: ConstAccessor.h:55
drawFromPickle.cos
cos
Definition: drawFromPickle.py:36
drawFromPickle.exp
exp
Definition: drawFromPickle.py:36
xAOD::Muon_v1
Class describing a Muon.
Definition: Muon_v1.h:38
XMLtoHeader.count
count
Definition: XMLtoHeader.py:84
drawFromPickle.atan
atan
Definition: drawFromPickle.py:36
TrigBjetMonitorAlgorithm.h
AthMonitorAlgorithm
Base class for Athena Monitoring Algorithms.
Definition: AthMonitorAlgorithm.h:36
SG::makeHandle
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
Definition: ReadCondHandle.h:274
TrigCompositeUtils.h
jet
Definition: JetCalibTools_PlotJESFactors.cxx:23
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
lumiFormat.i
int i
Definition: lumiFormat.py:85
Monitored
Generic monitoring tool for athena components.
Definition: GenericMonitoringTool.h:28
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
xAOD::VxType::PriVtx
@ PriVtx
Primary vertex.
Definition: TrackingPrimitives.h:572
TRT::Track::d0
@ d0
Definition: InnerDetector/InDetCalibEvent/TRT_CalibData/TRT_CalibData/TrackInfo.h:62
DataVector::front
const T * front() const
Access the first element in the collection as an rvalue.
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
LLRW
bool LLRW(float pqcd, float ptop, float phbb, float &w)
Definition: TrigBjetMonitorAlgorithm.cxx:48
xAOD::Vertex_v1::z
float z() const
Returns the z position.
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.
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
TRT::Track::z0
@ z0
Definition: InnerDetector/InDetCalibEvent/TRT_CalibData/TRT_CalibData/TrackInfo.h:63
TrigBjetMonitorAlgorithm::TrigBjetMonitorAlgorithm
TrigBjetMonitorAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Definition: TrigBjetMonitorAlgorithm.cxx:13
DataVector
Derived DataVector<T>.
Definition: DataVector.h:794
compute_lumi.denom
denom
Definition: compute_lumi.py:76
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
phiCorr
float phiCorr(float phi)
Definition: TrigBjetMonitorAlgorithm.cxx:94
CalcRelPt
bool CalcRelPt(float muonPt, float muonEta, float muonPhi, float jetPt, float jetEta, float jetPhi, float &RelPt)
Definition: TrigBjetMonitorAlgorithm.cxx:64
TrigBjetMonitorAlgorithm::m_btaggingLinkName
Gaudi::Property< std::string > m_btaggingLinkName
Definition: TrigBjetMonitorAlgorithm.h:25
TrigBjetMonitorAlgorithm::m_onlineTrackContainerKey
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_onlineTrackContainerKey
Definition: TrigBjetMonitorAlgorithm.h:33
BTaggingContainer.h
TrigBjetMonitorAlgorithm::m_muonContainerKey
SG::ReadHandleKey< xAOD::MuonContainer > m_muonContainerKey
Definition: TrigBjetMonitorAlgorithm.h:30
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
Amg::error
double error(const Amg::MatrixX &mat, int index)
return diagonal error of the matrix caller should ensure the matrix is symmetric and the index is in ...
Definition: EventPrimitivesHelpers.h:40
xAOD::vertexType
vertexType
Definition: Vertex_v1.cxx:166
checkTriggerxAOD.found
found
Definition: checkTriggerxAOD.py:328
TrigBjetMonitorAlgorithm::m_onlineVertexContainerKey
SG::ReadHandleKey< xAOD::VertexContainer > m_onlineVertexContainerKey
Definition: TrigBjetMonitorAlgorithm.h:32
AthMonitorAlgorithm::initialize
virtual StatusCode initialize() override
initialize
Definition: AthMonitorAlgorithm.cxx:18
CheckAppliedSFs.pu
pu
Definition: CheckAppliedSFs.py:311
xAOD::Jet_v1
Class describing a jet.
Definition: Jet_v1.h:57
TrigBjetMonitorAlgorithm::m_collisionRun
Gaudi::Property< bool > m_collisionRun
Definition: TrigBjetMonitorAlgorithm.h:23
TrigBjetMonitorAlgorithm::m_onlineEMTopoBJetContainerKey
SG::ReadHandleKey< xAOD::JetContainer > m_onlineEMTopoBJetContainerKey
Definition: TrigBjetMonitorAlgorithm.h:35
xAOD::Vertex_v1
Class describing a Vertex.
Definition: Vertex_v1.h:42
JetContainer.h
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
LLR
bool LLR(double pu, double pc, double pb, double &w)
Definition: TrigBjetMonitorAlgorithm.cxx:33
python.TriggerAPI.TriggerAPISession.chainName
chainName
Definition: TriggerAPISession.py:426
xAOD::Vertex_v1::y
float y() const
Returns the y position.
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
SG::ConstAccessor::isAvailable
bool isAvailable(const ELT &e) const
Test to see if this variable exists in the store.
TrigBjetMonitorAlgorithm::fillHistograms
virtual StatusCode fillHistograms(const EventContext &ctx) const override
adds event to the monitoring histograms
Definition: TrigBjetMonitorAlgorithm.cxx:101
TrigBjetMonitorAlgorithm::m_allChains
Gaudi::Property< std::vector< std::string > > m_allChains
Definition: TrigBjetMonitorAlgorithm.h:28
TrigBjetMonitorAlgorithm::m_offlineVertexContainerKey
SG::ReadHandleKey< xAOD::VertexContainer > m_offlineVertexContainerKey
Definition: TrigBjetMonitorAlgorithm.h:31
TrigBjetMonitorAlgorithm::m_expressStreamFlag
Gaudi::Property< bool > m_expressStreamFlag
Definition: TrigBjetMonitorAlgorithm.h:26
xAOD::track
@ track
Definition: TrackingPrimitives.h:513
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
Monitored::Scalar
Declare a monitored scalar variable.
Definition: MonitoredScalar.h:34
python.IoTestsLib.w
def w
Definition: IoTestsLib.py:198
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
TrigBjetMonitorAlgorithm::m_onlineEMPFlowBJetContainerKey
SG::ReadHandleKey< xAOD::JetContainer > m_onlineEMPFlowBJetContainerKey
Definition: TrigBjetMonitorAlgorithm.h:34
python.SystemOfUnits.pc
float pc
Definition: SystemOfUnits.py:114
python.LArMinBiasAlgConfig.float
float
Definition: LArMinBiasAlgConfig.py:65