103 if(
m_trigDecTool->ExperimentalAndExpertMethods().isHLTTruncated()) {
105 return StatusCode::SUCCESS;
111 bool Eofflinepv(
false);
112 float offlinepvz(-1.e6);
113 float offlinepvx(-1.e6);
114 float offlinepvy(-1.e6);
125 return StatusCode::FAILURE;
127 ATH_MSG_DEBUG(
" Size of the Off-line PV container: " << offlinepv->size() );
128 if ( offlinepv->size() ) {
130 offlinepvz = offlinepv->front()->z();
131 offlinepvx = offlinepv->front()->x();
132 offlinepvy = offlinepv->front()->y();
133 OffNVtx = offlinepv->size() ;
134 for (
unsigned int j = 0; j<offlinepv->size(); j++) {
135 if ( (*(offlinepv))[j]->nTrackParticles()==0 )
continue;
136 if ( (*(offlinepv))[j]->vertexType()==0 )
continue;
137 OffxVtx = (*(offlinepv))[j]->
x();
138 OffyVtx = (*(offlinepv))[j]->
y();
139 OffzVtx = (*(offlinepv))[j]->
z();
140 fill(
"TrigBjetMonitor",OffxVtx,OffyVtx,OffzVtx);
142 fill(
"TrigBjetMonitor",OffNVtx);
148 std::string chainName;
151 ATH_MSG_DEBUG(
" Size of the AllChains trigger container: " << size_AllChains );
152 for (
int i =0; i<size_AllChains; i++) {
154 ATH_MSG_DEBUG(
" Chain number: " << i <<
" AllChains Chain Name: " << chainName );
159 bool mujetChain(
false);
160 bool bjetChain(
true);
161 bool L2bjetChain(
false);
168 ATH_MSG_DEBUG(
" Trigger chain from AllChains list: " << trigName <<
" has fired !!! " );
172 const unsigned int passBits =
m_trigDecTool->isPassedBits(trigName);
184 std::size_t found = trigName.find(
"HLT_mu");
185 if (found!=std::string::npos) mujetChain =
true;
187 found = trigName.find(
"a10sd_cssk");
188 if (found!=std::string::npos) L2bjetChain =
true;
189 else bjetChain =
true;
192 ATH_MSG_DEBUG(
" ===> Run 3 access to Trigger Item: " << trigName );
193 ATH_MSG_DEBUG(
" bjetChain: " << bjetChain <<
" mujetChain: " << mujetChain <<
" L2bjetChain: " << L2bjetChain );
200 ATH_MSG_DEBUG(
" Pt of track in TrackParticleContainer: " << track->pt() );
213 std::string NameH =
"PVz_tr_"+trigName;
219 fill(
"TrigBjetMonitor",PVz_tr);
221 NameH =
"DiffOnOffPVz_tr_"+trigName;
224 DiffOnOffPVz_tr = vtx->z()-offlinepvz;
226 fill(
"TrigBjetMonitor",DiffOnOffPVz_tr);
228 NameH =
"PVx_tr_"+trigName;
233 fill(
"TrigBjetMonitor",PVx_tr);
235 NameH =
"DiffOnOffPVx_tr_"+trigName;
238 DiffOnOffPVx_tr = vtx->x()-offlinepvx;
240 fill(
"TrigBjetMonitor",DiffOnOffPVx_tr);
242 NameH =
"PVy_tr_"+trigName;
247 fill(
"TrigBjetMonitor",PVy_tr);
249 NameH =
"DiffOnOffPVy_tr_"+trigName;
252 DiffOnOffPVy_tr = vtx->y()-offlinepvy;
254 fill(
"TrigBjetMonitor",DiffOnOffPVy_tr);
258 std::string NpvH =
"nPV_tr_"+trigName;
262 fill(
"TrigBjetMonitor",nPV_tr);
271 std::string nJetH =
"LargeR_nJet_"+trigName;
273 nJet = onlinejets.size();
275 fill(
"TrigBjetMonitor",nJet);
276 for(
const auto& jetLinkInfo : onlinejets) {
280 static const SG::AuxElement::ConstAccessor<float> pqcd_accessor(
"GN2XTrig_pqcd");
281 static const SG::AuxElement::ConstAccessor<float> ptop_accessor(
"GN2XTrig_ptop");
282 static const SG::AuxElement::ConstAccessor<float> phbb_accessor(
"GN2XTrig_phbb");
283 bool isGN2XTrigAvailable = pqcd_accessor.isAvailable(*
jet);
285 std::string NameH =
"GN2XTrig_pqcd_tr_"+trigName;
288 GN2XTrig_pqcd = isGN2XTrigAvailable ? pqcd_accessor(*
jet) : -1.;
289 fill(
"TrigBjetMonitor",GN2XTrig_pqcd);
291 NameH =
"GN2XTrig_ptop_tr_"+trigName;
294 GN2XTrig_ptop = isGN2XTrigAvailable ? ptop_accessor(*
jet) : -1.;
295 fill(
"TrigBjetMonitor",GN2XTrig_ptop);
297 NameH =
"GN2XTrig_phbb_tr_"+trigName;
300 GN2XTrig_phbb = isGN2XTrigAvailable ? phbb_accessor(*
jet) : -1.;
301 fill(
"TrigBjetMonitor",GN2XTrig_phbb);
303 NameH =
"GN2XTrig_mv_tr_"+trigName;
306 ATH_MSG_DEBUG(
" GN2XTrig_pqcd: " << GN2XTrig_pqcd <<
" GN2XTrig_ptop: " << GN2XTrig_ptop <<
" GN2XTrig_phbb: " << GN2XTrig_phbb );
307 bool theLLRW =
LLRW (GN2XTrig_pqcd, GN2XTrig_ptop, GN2XTrig_phbb, GN2XTrig_mv);
308 ATH_MSG_DEBUG(
" GN2XTrig_mv: " << GN2XTrig_mv <<
" LLRW: " << theLLRW);
309 if ( theLLRW )
fill(
"TrigBjetMonitor",GN2XTrig_mv);
312 NameH =
"LargeR_jetPt_"+trigName;
315 LargeR_jetPt = (
jet->pt())*1.e-3;
317 fill(
"TrigBjetMonitor",LargeR_jetPt);
320 NameH =
"LargeR_jetEta_"+trigName;
323 LargeR_jetEta =
jet->eta();
326 NameH =
"LargeR_jetPhi_"+trigName;
329 LargeR_jetPhi =
jet->phi();
330 ATH_MSG_DEBUG(
" LargeR_jetEta: " << LargeR_jetEta <<
" LargeR_jetPhi : " << LargeR_jetPhi);
331 fill(
"TrigBjetMonitor",LargeR_jetEta,LargeR_jetPhi);
334 NameH =
"LargeR_jetMass_"+trigName;
337 LargeR_jetMass = (
jet->m())*1.e-3;
339 fill(
"TrigBjetMonitor",LargeR_jetMass);
342 static const SG::AuxElement::ConstAccessor<float> pqcd_accessor0(
"GN2Xv01_pqcd");
343 static const SG::AuxElement::ConstAccessor<float> ptop_accessor0(
"GN2Xv01_ptop");
344 static const SG::AuxElement::ConstAccessor<float> phbb_accessor0(
"GN2Xv01_phbb");
345 bool isGN2Xv01Available = pqcd_accessor0.isAvailable(*
jet);
347 NameH =
"GN2Xv01_pqcd_tr_"+trigName;
350 GN2Xv01_pqcd = isGN2Xv01Available ? pqcd_accessor0(*
jet) : -1.;
351 fill(
"TrigBjetMonitor",GN2Xv01_pqcd);
353 NameH =
"GN2Xv01_ptop_tr_"+trigName;
356 GN2Xv01_ptop = isGN2Xv01Available ? ptop_accessor0(*
jet) : -1.;
357 fill(
"TrigBjetMonitor",GN2Xv01_ptop);
359 NameH =
"GN2Xv01_phbb_tr_"+trigName;
362 GN2Xv01_phbb = isGN2Xv01Available ? phbb_accessor0(*
jet) : -1.;
363 fill(
"TrigBjetMonitor",GN2Xv01_phbb);
365 NameH =
"GN2Xv01_mv_tr_"+trigName;
368 ATH_MSG_DEBUG(
" GN2Xv01_pqcd: " << GN2Xv01_pqcd <<
" GN2Xv01_ptop: " << GN2Xv01_ptop <<
" GN2Xv01_phbb: " << GN2Xv01_phbb );
369 theLLRW =
LLRW (GN2Xv01_pqcd, GN2Xv01_ptop, GN2Xv01_phbb, GN2Xv01_mv);
370 ATH_MSG_DEBUG(
" GN2Xv01_mv: " << GN2Xv01_mv <<
" LLRW: " << theLLRW);
371 if ( theLLRW )
fill(
"TrigBjetMonitor",GN2Xv01_mv);
381 std::string nMuonH =
"nMuon_"+trigName;
383 nMuon = onlinemuons.size();
384 fill(
"TrigBjetMonitor",nMuon);
388 std::string nJetH =
"nJet_"+trigName;
390 nJet = onlinejets.size();
391 fill(
"TrigBjetMonitor",nJet);
393 if (nMuon*nJet > 0) {
395 float muonPt1(0.), muonEta1(0.), muonPhi1(0.), muonZ1(0.), jetPt1(0.), jetEta1(0.), jetPhi1(0.), jetZ1(0.), muonZ(0.);
396 double GN1_mv(0.), GN2_mv(0.);
397 bool theLLR_GN1(
false), theLLR_GN2(
false);
398 bool plotDeltaZ(
false);
400 for(
const auto& muonLinkInfo : onlinemuons) {
401 const xAOD::Muon* muon = *(muonLinkInfo.link);
403 std::string NameH =
"muonPt_"+trigName;
406 muonPt = (muon->pt())*1.e-3;
408 fill(
"TrigBjetMonitor",muonPt);
410 NameH =
"muonEta_"+trigName;
413 muonEta = muon->eta();
415 fill(
"TrigBjetMonitor",muonEta);
417 NameH =
"muonPhi_"+trigName;
420 muonPhi = muon->phi();
423 auto track = muon->trackParticle(xAOD::Muon::TrackParticleType::CombinedTrackParticle);
426 muonZ = track->z0() + track->vz();
441 for(
const auto& jetLinkInfo : onlinejets) {
444 NameH =
"jetPt_"+trigName;
447 jetPt = (
jet->pt())*1.e-3;
449 fill(
"TrigBjetMonitor",jetPt);
451 NameH =
"jetEta_"+trigName;
456 fill(
"TrigBjetMonitor",jetEta);
458 NameH =
"jetPhi_"+trigName;
474 if ( btaggingLinkInfo.isValid() ) {
475 obj_storing_btag = *(btaggingLinkInfo.link);
478 obj_storing_btag = *(jetLinkInfo.link);
481 static const SG::AuxElement::ConstAccessor<float> GN1pu_accessor(
"GN120220813_pu");
482 static const SG::AuxElement::ConstAccessor<float> GN1pc_accessor(
"GN120220813_pc");
483 static const SG::AuxElement::ConstAccessor<float> GN1pb_accessor(
"GN120220813_pb");
485 static const SG::AuxElement::ConstAccessor<float> GN2pu_accessor(
"GN220240122_pu");
486 static const SG::AuxElement::ConstAccessor<float> GN2pc_accessor(
"GN220240122_pc");
487 static const SG::AuxElement::ConstAccessor<float> GN2pb_accessor(
"GN220240122_pb");
490 if (GN1pu_accessor.isAvailable(*obj_storing_btag)) {
491 double GN1_pu(-1.), GN1_pc(-1.), GN1_pb(-1.);
492 GN1_pu = GN1pu_accessor(*obj_storing_btag);
494 GN1_pc = GN1pc_accessor(*obj_storing_btag);
496 GN1_pb = GN1pb_accessor(*obj_storing_btag);
498 theLLR_GN1 =
LLR (GN1_pu, GN1_pc, GN1_pb, GN1_mv);
499 ATH_MSG_DEBUG(
" GN1_mv: " << GN1_mv <<
" LLR: " << theLLR_GN1);
501 if (GN2pu_accessor.isAvailable(*obj_storing_btag)) {
502 double GN2_pu(-1.), GN2_pc(-1.), GN2_pb(-1.);
503 GN2_pu = GN2pu_accessor(*obj_storing_btag);
505 GN2_pc = GN2pc_accessor(*obj_storing_btag);
507 GN2_pb = GN2pb_accessor(*obj_storing_btag);
509 theLLR_GN2 =
LLR (GN2_pu, GN2_pc, GN2_pb, GN2_mv);
510 ATH_MSG_DEBUG(
" GN2_mv: " << GN2_mv <<
" LLR: " << theLLR_GN2);
525 std::string DeltaRH =
"DeltaR_"+trigName;
528 float DeltaEta = muonEta1 - jetEta1;
530 DeltaR = sqrt( DeltaEta*DeltaEta + DeltaPhi*DeltaPhi );
532 fill(
"TrigBjetMonitor",DeltaR);
535 std::string DeltaZH =
"DeltaZ_"+trigName;
538 DeltaZ = std::abs(muonZ1-jetZ1);
540 if (plotDeltaZ)
fill(
"TrigBjetMonitor",DeltaZ);
543 std::string RatioPtH =
"RatioPt_"+trigName;
547 if (jetPt1 > 0.) RatioPt = muonPt1/jetPt1;
549 if (RatioPt > 0.)
fill(
"TrigBjetMonitor",RatioPt);
552 std::string RelPtH =
"RelPt_"+trigName;
556 bool calc_relpt =
CalcRelPt (muonPt1, muonEta1, muonPhi1, jetPt1, jetEta1, jetPhi1, RelPt);
560 std::string wGN1H =
"wGN1_"+trigName;
563 wGN1 = float(GN1_mv);
565 if (calc_relpt && theLLR_GN1)
fill(
"TrigBjetMonitor",wGN1,RelPt);
568 std::string wGN2H =
"wGN2_"+trigName;
571 wGN2 = float(GN2_mv);
573 if (calc_relpt && theLLR_GN2)
fill(
"TrigBjetMonitor",wGN2,RelPt);
588 std::string nJetH =
"nJet_"+trigName;
590 nJet = onlinejets.size();
591 fill(
"TrigBjetMonitor",nJet);
595 for(
const auto& jetLinkInfo : onlinejets) {
598 std::string NameH =
"jetPt_"+trigName;
601 jetPt = (
jet->pt())*1.e-3;
603 fill(
"TrigBjetMonitor",jetPt);
605 NameH =
"jetEta_"+trigName;
610 NameH =
"jetPhi_"+trigName;
614 ATH_MSG_DEBUG(
" jetEta: " << jetEta <<
" jetPhi : " << jetPhi);
615 fill(
"TrigBjetMonitor",jetEta,jetPhi);
623 if ( vtxname.compare(0, 4,
"HLT_")==0 ) vtxname.erase(0,4);
627 NameH =
"PVz_jet_"+trigName;
632 fill(
"TrigBjetMonitor",PVz_jet);
633 NameH =
"PVx_jet_"+trigName;
638 fill(
"TrigBjetMonitor",PVx_jet);
639 NameH =
"PVy_jet_"+trigName;
644 fill(
"TrigBjetMonitor",PVy_jet);
654 if ( btaggingLinkInfo.isValid() ) {
655 obj_storing_btag = *(btaggingLinkInfo.link);
658 obj_storing_btag = *(jetLinkInfo.link);
662 static const SG::AuxElement::ConstAccessor<float> GN1pu_accessor(
"GN120220813_pu");
663 static const SG::AuxElement::ConstAccessor<float> GN1pc_accessor(
"GN120220813_pc");
664 static const SG::AuxElement::ConstAccessor<float> GN1pb_accessor(
"GN120220813_pb");
665 static const SG::AuxElement::ConstAccessor<float> GN2pu_accessor(
"GN220240122_pu");
666 static const SG::AuxElement::ConstAccessor<float> GN2pc_accessor(
"GN220240122_pc");
667 static const SG::AuxElement::ConstAccessor<float> GN2pb_accessor(
"GN220240122_pb");
669 bool GN1_available = GN1pu_accessor.isAvailable(*obj_storing_btag);
670 bool GN2_available = GN2pu_accessor.isAvailable(*obj_storing_btag);
671 NameH =
"GN1_pu_tr_"+trigName;
674 GN1_pu = GN1_available ? GN1pu_accessor(*obj_storing_btag) : -1.0;
676 fill(
"TrigBjetMonitor",GN1_pu);
678 NameH =
"GN1_pc_tr_"+trigName;
681 GN1_pc = GN1_available ? GN1pc_accessor(*obj_storing_btag) : -1.0;
683 fill(
"TrigBjetMonitor",GN1_pc);
685 NameH =
"GN1_pb_tr_"+trigName;
688 GN1_pb = GN1_available ? GN1pb_accessor(*obj_storing_btag) : -1.0;
690 fill(
"TrigBjetMonitor",GN1_pb);
692 NameH =
"GN1_mv_tr_"+trigName;
695 theLLR =
LLR (GN1_pu, GN1_pc, GN1_pb, GN1_mv);
696 if ( theLLR )
fill(
"TrigBjetMonitor",GN1_mv);
700 NameH =
"GN2_pu_tr_"+trigName;
703 GN2_pu = GN2_available ? GN2pu_accessor(*obj_storing_btag) : -1.0;
705 fill(
"TrigBjetMonitor",GN2_pu);
707 NameH =
"GN2_pc_tr_"+trigName;
710 GN2_pc = GN2_available ? GN2pc_accessor(*obj_storing_btag) : -1.0;
712 fill(
"TrigBjetMonitor",GN2_pc);
714 NameH =
"GN2_pb_tr_"+trigName;
717 GN2_pb = GN2_available ? GN2pb_accessor(*obj_storing_btag) : -1.0;
719 fill(
"TrigBjetMonitor",GN2_pb);
721 NameH =
"GN2_mv_tr_"+trigName;
724 theLLR =
LLR (GN2_pu, GN2_pc, GN2_pb, GN2_mv);
725 if ( theLLR )
fill(
"TrigBjetMonitor",GN2_mv);
730 const auto track_it_pair =
m_trigDecTool->associateToEventView(theTracks, jetLinkInfo.source,
"roi");
737 ATH_MSG_DEBUG(
" Track " <<
count <<
" with pT " << (*it)->pt() <<
" from BJet with pT " << (*jetLinkInfo.link)->pt() );
738 ATH_MSG_DEBUG(
" Track " <<
count <<
" with pT/eta/phi " << (*it)->pt() <<
"/" << (*it)->eta() <<
"/" << (*it)->phi() );
741 std::string NameH =
"trkPt_"+trigName;
744 trkPt = ((*it)->pt())*1.e-3;
746 fill(
"TrigBjetMonitor",trkPt);
747 NameH =
"trkEta_"+trigName;
750 trkEta = (*it)->eta();
751 NameH =
"trkPhi_"+trigName;
754 trkPhi = (*it)->phi();
755 ATH_MSG_DEBUG(
" trkEta: " << trkEta <<
" trkPhi : " << trkPhi);
756 fill(
"TrigBjetMonitor",trkEta,trkPhi);
757 NameH =
"d0_"+trigName;
762 fill(
"TrigBjetMonitor",d0);
763 NameH =
"z0_"+trigName;
768 fill(
"TrigBjetMonitor",z0);
769 NameH =
"ed0_"+trigName;
772 ed0 =
Amg::error((*it)->definingParametersCovMatrix(), 0);
774 fill(
"TrigBjetMonitor",ed0);
775 NameH =
"sd0_"+trigName;
779 if (ed0 > 0.) sd0 = std::abs(d0)/ed0;
781 fill(
"TrigBjetMonitor",sd0);
782 NameH =
"ez0_"+trigName;
785 ez0 =
Amg::error((*it)->definingParametersCovMatrix(), 1);
787 fill(
"TrigBjetMonitor",ez0);
794 ATH_MSG_DEBUG(
" Total number of triggered b-jets: " << ijet <<
" nJet : " << nJet);
795 ATH_MSG_DEBUG(
" Total number of triggered tracks associated to the b-jets: " << itrack);
796 std::string nTrackH =
"nTrack_"+trigName;
799 fill(
"TrigBjetMonitor",nTrack);
806 ATH_MSG_DEBUG(
" Chain " << trigName <<
" is declared for the Express Stream but it is NOT in the Express Stream in an Express Job");
810 ATH_MSG_DEBUG(
" Trigger chain from AllChains list: " << trigName <<
" has not fired " );
816 return StatusCode::SUCCESS;