21 return StatusCode::SUCCESS;
27 std::vector<std::shared_ptr<xAOD::TruthParticle>> true_taus_1p;
28 std::vector<std::shared_ptr<xAOD::TruthParticle>> true_taus_3p;
34 return {true_taus_1p, true_taus_3p};
43 for(
const auto xTruthParticle : *truth_cont) {
44 if(xTruthParticle->isTau()) {
45 ATH_MSG_DEBUG(
"Tau with status " << xTruthParticle->status() <<
" and charge " << xTruthParticle->charge());
48 std::shared_ptr xTruthTau = std::make_shared<xAOD::TruthParticle>();
49 xTruthTau->makePrivateStore(*xTruthParticle);
55 if(acc_isleptonic(*xTruthTau))
continue;
57 float pt = acc_ptvis(*xTruthTau);
58 float eta = acc_etavis(*xTruthTau);
64 int nTracks = acc_ntracks(*xTruthTau);
65 if(nTracks == 1) true_taus_1p.push_back(xTruthTau);
66 else if(nTracks == 3) true_taus_3p.push_back(xTruthTau);
70 return {true_taus_1p, true_taus_3p};
76 if(!xTruthTau->
hasDecayVtx())
return StatusCode::FAILURE;
85 acc_isleptonic(*xTruthTau) =
false;
87 TLorentzVector VisSumTLV;
88 acc_ptvis(*xTruthTau) = 0.;
89 acc_etavis(*xTruthTau) = 0.;
90 acc_phivis(*xTruthTau) = 0.;
91 acc_mvis(*xTruthTau) = 0.;
92 acc_childChargeSum(*xTruthTau) = 0;
93 acc_ntracks(*xTruthTau) = 0;
98 for(std::size_t iChild = 0; iChild != nChildren; ++iChild) {
105 VisSumTLV += child->
p4();
106 acc_childChargeSum(*xTruthTau) += child->
charge();
107 acc_ntracks(*xTruthTau) += std::abs(child->
charge());
111 acc_ptvis(*xTruthTau) = VisSumTLV.Pt();
112 acc_etavis(*xTruthTau) = VisSumTLV.Eta();
113 acc_phivis(*xTruthTau) = VisSumTLV.Phi();
114 acc_mvis(*xTruthTau) = VisSumTLV.M();
116 if(acc_childChargeSum(*xTruthTau) != xTruthTau->
charge() || acc_ntracks(*xTruthTau)%2 == 0) {
117 ATH_MSG_WARNING(
"Strange tau: charge " << acc_childChargeSum(*xTruthTau) <<
" and " << acc_ntracks(*xTruthTau) <<
" tracks");
119 for(std::size_t iChild = 0; iChild != nChildren; ++iChild) {
125 return StatusCode::SUCCESS;
133 std::vector<std::shared_ptr<xAOD::TruthParticle>> true_taus_1p = true_taus.first;
134 std::vector<std::shared_ptr<xAOD::TruthParticle>> true_taus_3p = true_taus.second;
136 for(
const std::string& trigger :
m_triggers) {
140 if(
info.isHLTTandP() ||
info.isHLTDiTau())
continue;
143 std::vector<const xAOD::TauJet*> hlt_taus =
getOnlineTausAll(trigger,
true);
145 if(!true_taus_1p.empty()) {
150 if(!true_taus_3p.empty()) {
156 return StatusCode::SUCCESS;
162 ATH_MSG_DEBUG(
"Fill Truth Tau Matching to Offline and Online Taus efficiencies: " << trigger);
175 bool hlt_fires =
m_trigDecTool->isPassed(trigger, TrigDefs::Physics | TrigDefs::allowResurrectedDecision);
181 for(
const std::shared_ptr<xAOD::TruthParticle>& true_tau : true_taus) {
183 eta_vis = acc_etavis(*true_tau);
184 phi_vis = acc_phivis(*true_tau);
186 HLT_truth_match =
matchTruthObjects(true_tau.get(), online_tau_vec, 0.2) && hlt_fires;
188 bool is_highPt =
false;
189 if(
info.isHLTSingleTau()) is_highPt = pt_vis >
info.getHLTTauThreshold() + 20.0;
191 fill(
monGroup, pt_vis, eta_vis, phi_vis, HLT_truth_match);
194 HLT_truth_match_highPt =
static_cast<bool>(HLT_truth_match);
195 fill(
monGroup, eta_vis, phi_vis, HLT_truth_match_highPt);
202 void TrigTauMonitorTruthAlgorithm::fillTruthVars(
const std::vector<const xAOD::TauJet*>& ef_taus,
const std::vector<std::shared_ptr<xAOD::TruthParticle>>& true_taus,
const std::string& trigger,
const std::string& nProng)
const
208 std::vector<float>
ratio, ptvis, etavis, phivis, mvis;
216 float matchedRatio = -999, matchedptvis = -999, matchedetavis = 999, matchedphivis = 999, matchedmvis = -999;
228 for(
auto& HLTTau : ef_taus) {
229 for(
const std::shared_ptr<xAOD::TruthParticle>& true_tau : true_taus) {
231 double pt_vis = acc_ptvis(*true_tau);
233 matchedetavis = acc_etavis(*true_tau);
234 matchedphivis = acc_phivis(*true_tau);
235 matchedmvis = acc_mvis(*true_tau);
236 matchedRatio = HLTTau->pt()/pt_vis - 1.;
240 if(matchedptvis > 0) {
241 ptvis.push_back(matchedptvis);
242 etavis.push_back(matchedetavis);
243 phivis.push_back(matchedphivis);
244 mvis.push_back(matchedmvis);
245 ratio.push_back(matchedRatio);
249 fill(
monGroup, pt_vis, eta_vis, phi_vis, mass_vis, PtRatio);