16 constexpr float threshold_offset = 10.0;
25 if(!info.isHLTDiTau()) {
26 ATH_MSG_WARNING(
"Chain \"" << trigger <<
"\" is not a di-tau trigger. Skipping...");
39 std::vector<const xAOD::TauJet*> offline_taus =
classifyTausAll(offline_taus_with_id, info.getHLTTauThreshold() - threshold_offset);
48 return StatusCode::SUCCESS;
59 if(offline_tau_vec.size() != 2)
return;
61 auto monGroup =
getGroup(trigger+
"_DiTauHLT_Efficiency");
75 bool tau0_match =
matchObjects(offline_tau_vec.at(0), online_tau_vec, 0.2);
76 bool tau1_match =
matchObjects(offline_tau_vec.at(1), online_tau_vec, 0.2);
78 dR = offline_tau_vec.at(0)->p4().DeltaR(offline_tau_vec.at(1)->p4());
79 dEta = std::abs(offline_tau_vec.at(0)->p4().Eta() - offline_tau_vec.at(1)->p4().Eta());
80 dPhi = offline_tau_vec.at(0)->p4().DeltaPhi(offline_tau_vec.at(1)->p4());
82 HLT_match = hlt_fires && tau0_match && tau1_match;
84 float tau0_pT = offline_tau_vec.at(0)->pt()/Gaudi::Units::GeV;
85 float tau1_pT = offline_tau_vec.at(1)->pt()/Gaudi::Units::GeV;
86 bool is_highPt = tau0_pT > info.getHLTTauThresholds().at(0) + 20.0 && tau1_pT > info.getHLTTauThresholds().at(1) + 20.0;
90 Total_match =
static_cast<bool>(HLT_match);
91 fill(monGroup,
dR, dEta, dPhi, Total_match);
94 Total_match_highPt =
static_cast<bool>(HLT_match);
95 fill(monGroup,
dR, dEta, dPhi, Total_match_highPt);
100 if(l1_accept_flag && online_tau_vec.size() == 2) {
101 fill(monGroup,
dR, dEta, dPhi, averageMu, HLT_match);
104 HLT_match_highPt =
static_cast<bool>(HLT_match);
105 fill(monGroup,
dR, dEta, dPhi, HLT_match_highPt);
109 ATH_MSG_DEBUG(
"After fill DiTau HLT efficiencies: " << trigger);
117 auto monGroup =
getGroup(trigger+
"_DiTauVars");
119 if(tau_vec.size() != 2)
return;
138 unsigned int index0 = 0, index1 = 1;
139 if(tau_vec.at(1)->p4().Pt() > tau_vec.at(0)->p4().Pt()) {
144 TLorentzVector leadTau4V, subleadTau4V, diTau4V;
145 leadTau4V.SetPtEtaPhiM(0,0,0,0);
146 subleadTau4V.SetPtEtaPhiM(0,0,0,0);
148 leadTau4V = tau_vec.at(index0)->p4();
149 subleadTau4V = tau_vec.at(index1)->p4();
150 diTau4V = leadTau4V + subleadTau4V;
152 leadHLTEt = leadTau4V.Pt()/Gaudi::Units::GeV;
153 subleadHLTEt = subleadTau4V.Pt()/Gaudi::Units::GeV;
154 leadHLTEta = leadTau4V.Eta();
155 subleadHLTEta = subleadTau4V.Eta();
156 leadHLTPhi = leadTau4V.Phi();
157 subleadHLTPhi = subleadTau4V.Phi();
158 dR = leadTau4V.DeltaR(subleadTau4V);
159 dEta = std::abs(leadTau4V.Eta() - subleadTau4V.Eta());
160 dPhi = leadTau4V.DeltaPhi(subleadTau4V);
162 dPt = std::abs((leadTau4V.Pt() - subleadTau4V.Pt())/Gaudi::Units::GeV);
163 Pt = diTau4V.Pt()/Gaudi::Units::GeV;
166 M = diTau4V.M()/Gaudi::Units::GeV;
168 fill(monGroup, leadHLTEt, subleadHLTEt, leadHLTEta, subleadHLTEta, leadHLTPhi, subleadHLTPhi,
dR, dEta, dPhi, dPt, Pt, Eta, Phi, M);
#define ATH_MSG_WARNING(x)
const ToolHandle< GenericMonitoringTool > & getGroup(const std::string &name) const
Get a specific monitoring tool from the tool handle array.
PublicToolHandle< Trig::TrigDecisionTool > m_trigDecTool
Tool to tell whether a specific trigger is passed.
Declare a monitored scalar variable.
Gaudi::Property< bool > m_do_efficiency_plots
double dR(const double eta1, const double phi1, const double eta2, const double phi2) const
TrigTauMonitorBaseAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
std::vector< const xAOD::TauJet * > getOfflineTausAll(const EventContext &ctx, const float threshold=20.0) const
bool matchObjects(const T1 *tau, const std::vector< const T2 * > &tau_vec, float threshold) const
Gaudi::Property< std::vector< std::string > > m_triggers
const TrigTauInfo & getTrigInfo(const std::string &trigger) const
std::vector< const xAOD::TauJet * > classifyTausAll(const std::vector< const xAOD::TauJet * > &taus, const float threshold=0.0, const TauID tau_id=TauID::None) const
Gaudi::Property< bool > m_do_variable_plots
std::vector< const xAOD::TauJet * > getOnlineTausAll(const std::string &trigger, bool include_0P=true) const
void fillDiTauVars(const std::string &trigger, const std::vector< const xAOD::TauJet * > &tau_vec) const
TrigTauMonitorDiTauAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Gaudi::Property< bool > m_requireOfflineTaus
void fillDiTauHLTEfficiencies(const EventContext &ctx, const std::string &trigger, const bool l1_accept_flag, const std::vector< const xAOD::TauJet * > &offline_tau_vec, const std::vector< const xAOD::TauJet * > &online_tau_vec) const
Gaudi::Property< bool > m_doTotalEfficiency
Gaudi::Property< unsigned int > m_offline_tau_id
virtual StatusCode processEvent(const EventContext &ctx) const override
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.
virtual float lbAverageInteractionsPerCrossing(const EventContext &ctx=Gaudi::Hive::currentContext()) const
Calculate the average mu, i.e.
static const unsigned int EF_prescaled
static const unsigned int L1_isPassedAfterVeto
static const unsigned int Physics