20 return StatusCode::SUCCESS;
26 std::vector<std::shared_ptr<xAOD::TruthParticle>> true_taus_1p;
27 std::vector<std::shared_ptr<xAOD::TruthParticle>> true_taus_3p;
33 return {true_taus_1p, true_taus_3p};
42 for(
const auto xTruthParticle : *truth_cont) {
43 if(xTruthParticle->isTau()) {
44 ATH_MSG_DEBUG(
"Tau with status " << xTruthParticle->status() <<
" and charge " << xTruthParticle->charge());
47 std::shared_ptr xTruthTau = std::make_shared<xAOD::TruthParticle>();
48 xTruthTau->makePrivateStore(*xTruthParticle);
54 if(acc_isleptonic(*xTruthTau))
continue;
56 float pt = acc_ptvis(*xTruthTau);
57 float eta = acc_etavis(*xTruthTau);
63 int nTracks = acc_ntracks(*xTruthTau);
64 if(nTracks == 1) true_taus_1p.push_back(xTruthTau);
65 else if(nTracks == 3) true_taus_3p.push_back(xTruthTau);
69 return {true_taus_1p, true_taus_3p};
75 if(!xTruthTau->
hasDecayVtx())
return StatusCode::FAILURE;
84 acc_isleptonic(*xTruthTau) =
false;
86 TLorentzVector VisSumTLV;
87 acc_ptvis(*xTruthTau) = 0.;
88 acc_etavis(*xTruthTau) = 0.;
89 acc_phivis(*xTruthTau) = 0.;
90 acc_mvis(*xTruthTau) = 0.;
91 acc_childChargeSum(*xTruthTau) = 0;
92 acc_ntracks(*xTruthTau) = 0;
97 for(std::size_t iChild = 0; iChild != nChildren; ++iChild) {
104 VisSumTLV += child->
p4();
105 acc_childChargeSum(*xTruthTau) += child->
charge();
106 acc_ntracks(*xTruthTau) += std::abs(child->
charge());
110 acc_ptvis(*xTruthTau) = VisSumTLV.Pt();
111 acc_etavis(*xTruthTau) = VisSumTLV.Eta();
112 acc_phivis(*xTruthTau) = VisSumTLV.Phi();
113 acc_mvis(*xTruthTau) = VisSumTLV.M();
115 if(acc_childChargeSum(*xTruthTau) != xTruthTau->
charge() || acc_ntracks(*xTruthTau)%2 == 0) {
116 ATH_MSG_WARNING(
"Strange tau: charge " << acc_childChargeSum(*xTruthTau) <<
" and " << acc_ntracks(*xTruthTau) <<
" tracks");
118 for(std::size_t iChild = 0; iChild != nChildren; ++iChild) {
124 return StatusCode::SUCCESS;
132 std::vector<std::shared_ptr<xAOD::TruthParticle>> true_taus_1p = true_taus.first;
133 std::vector<std::shared_ptr<xAOD::TruthParticle>> true_taus_3p = true_taus.second;
135 for(
const std::string& trigger :
m_triggers) {
139 if(
info.isHLTTandP() ||
info.isHLTDiTau())
continue;
142 std::vector<const xAOD::TauJet*> hlt_taus =
getOnlineTausAll(trigger,
true);
144 if(!true_taus_1p.empty()) {
149 if(!true_taus_3p.empty()) {
155 return StatusCode::SUCCESS;
161 ATH_MSG_DEBUG(
"Fill Truth Tau Matching to Offline and Online Taus efficiencies: " << trigger);
174 bool hlt_fires =
m_trigDecTool->isPassed(trigger, TrigDefs::Physics | TrigDefs::allowResurrectedDecision);
180 for(
const std::shared_ptr<xAOD::TruthParticle>& true_tau : true_taus) {
182 eta_vis = acc_etavis(*true_tau);
183 phi_vis = acc_phivis(*true_tau);
185 HLT_truth_match =
matchTruthObjects(true_tau.get(), online_tau_vec, 0.2) && hlt_fires;
187 bool is_highPt =
false;
188 if(
info.isHLTSingleTau()) is_highPt = pt_vis >
info.getHLTTauThreshold() + 20.0;
190 fill(
monGroup, pt_vis, eta_vis, phi_vis, HLT_truth_match);
193 HLT_truth_match_highPt =
static_cast<bool>(HLT_truth_match);
194 fill(
monGroup, eta_vis, phi_vis, HLT_truth_match_highPt);
201 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
207 std::vector<float>
ratio, ptvis, etavis, phivis, mvis;
215 float matchedRatio = -999, matchedptvis = -999, matchedetavis = 999, matchedphivis = 999, matchedmvis = -999;
227 for(
auto& HLTTau : ef_taus) {
228 for(
const std::shared_ptr<xAOD::TruthParticle>& true_tau : true_taus) {
230 double pt_vis = acc_ptvis(*true_tau);
232 matchedetavis = acc_etavis(*true_tau);
233 matchedphivis = acc_phivis(*true_tau);
234 matchedmvis = acc_mvis(*true_tau);
235 matchedRatio = HLTTau->pt()/pt_vis - 1.;
239 if(matchedptvis > 0) {
240 ptvis.push_back(matchedptvis);
241 etavis.push_back(matchedetavis);
242 phivis.push_back(matchedphivis);
243 mvis.push_back(matchedmvis);
244 ratio.push_back(matchedRatio);
248 fill(
monGroup, pt_vis, eta_vis, phi_vis, mass_vis, PtRatio);