27StatusCode TrigMuonTruthMon :: fillVariablesPerChain(
const EventContext &ctx,
const std::string &chain)
const {
28 ATH_MSG_DEBUG(
"Filling muon truth monitoring histograms for " << name() <<
"...");
35 return StatusCode::FAILURE;
64 bool passed_EF =
false;
65 bool passed_L1 =
false;
66 bool passed_L2CB =
false;
70 std::size_t index_i = chain.find(
"mu")+2;
71 std::size_t index_f = chain.find(
"_", index_i+1);
72 if (index_f < chain.length()) {
73 pT_cut = std::stod(chain.substr(index_i, index_f - index_i));
76 pT_cut = std::stod(chain.substr(index_i, chain.length()-1));
78 pT_cut = pT_cut + 1.0;
80 for (
const auto truthMu : *truthMuons) {
82 double eta = truthMu->eta();
83 if(std::abs(
eta) > 2.5)
continue;
86 auto fillTruthVars = [&] (var_t& truthEtaVar, var_t& truthPhiVar, var_t& truthPtVar,
87 var_t& truthEndcapPtVar, var_t& truthBarrelPtVar, var_t& truthIntPerBCVar) {
88 truthPtVar = truthMu->pt()/1e3;
90 if(std::abs(
eta) < 1.05){
91 truthBarrelPtVar = truthMu->pt()/1e3;
95 truthEndcapPtVar = truthMu->pt()/1e3;
98 if (pT_cut < truthPt){
99 truthEtaVar = truthMu->eta();
100 truthPhiVar = truthMu->phi();
101 truthIntPerBCVar = eventInfo->actualInteractionsPerCrossing();
102 fill(
m_group+
"_"+chain, truthEtaVar, truthPhiVar, truthIntPerBCVar);
106 fillTruthVars(truthEta, truthPhi, truthPt,
107 truthEndcapPt, truthBarrelPt, truthIntPerBC);
111 if(chain.find(
"msonly") != std::string::npos){
112 efmuon =
m_matchTool->matchEFSA(truthMu, chain, passed_EF);
115 efmuon =
m_matchTool->matchEFCB(truthMu, chain, passed_EF);
118 if(efmuon && passed_EF){
119 fillTruthVars(MatchedEFCBtruthEta, MatchedEFCBtruthPhi, MatchedEFCBtruthPt,
120 MatchedEFCBtruthEndcapPt, MatchedEFCBtruthBarrelPt, MatchedEFCBtruthIntPerBC);
126 if(l1muon && passed_L1){
127 fillTruthVars(MatchedL1truthEta, MatchedL1truthPhi, MatchedL1truthPt,
128 MatchedL1truthEndcapPt, MatchedL1truthBarrelPt, MatchedL1truthIntPerBC);
131 if((l1muon && passed_L1) && !(passed_EF && efmuon)){
135 if(!(passed_L1 && l1muon) && (passed_EF && efmuon)){
139 const bool isPh2FastReco = chain.find(
"newFast") != std::string::npos;
140 bool isFound =
false;
142 if(chain.find(
"msonly") != std::string::npos || isPh2FastReco){
143 isFound = isPh2FastReco
144 ?
m_matchTool->matchFastRecoSA(truthMu, chain, passed_L2CB) != nullptr
145 :
m_matchTool->matchL2SA(truthMu, chain, passed_L2CB) !=
nullptr;
148 isFound =
m_matchTool->matchL2CB(truthMu, chain, passed_L2CB) !=
nullptr;
150 ATH_MSG_VERBOSE(
"L2CB matching: passed: " << passed_L2CB <<
", found:" << isFound);
152 if (isFound && passed_L2CB) {
153 fillTruthVars(MatchedL2CBtruthEta, MatchedL2CBtruthPhi, MatchedL2CBtruthPt,
154 MatchedL2CBtruthEndcapPt, MatchedL2CBtruthBarrelPt, MatchedL2CBtruthIntPerBC);
163 return StatusCode::SUCCESS;