22 for(
const auto& [
key,
p] :
m) {
23 if(
p.first.empty() ||
p.second.empty()) {
24 ATH_MSG_WARNING(
"Invalid HLT TauID score variable names; skipping this entry for the monitoring!");
41 if(
p.first.empty() ||
p.second.empty()) {
42 ATH_MSG_WARNING(
"Invalid Offline TauID score variable names; skipping this entry for the monitoring!");
57 return StatusCode::SUCCESS;
63 constexpr
float threshold_offset = 10.0;
72 if(!
info.isHLTSingleTau()) {
73 ATH_MSG_WARNING(
"Chain \"" << trigger <<
"\" is not a single tau trigger. Skipping...");
78 const bool l1_accept_flag =
passBits & TrigDefs::L1_isPassedAfterVeto;
79 const bool hlt_not_prescaled_flag = (
passBits & TrigDefs::EF_prescaled) == 0;
87 std::vector<const xAOD::TauJet*> offline_taus_1p = offline_taus.first;
88 std::vector<const xAOD::TauJet*> offline_taus_3p = offline_taus.second;
91 std::vector<const xAOD::TauJet*> hlt_taus_all =
getOnlineTausAll(trigger,
true);
93 std::vector<const xAOD::TauJet*> hlt_taus_0p = std::get<0>(hlt_taus);
94 std::vector<const xAOD::TauJet*> hlt_taus_1p = std::get<1>(hlt_taus);
95 std::vector<const xAOD::TauJet*> hlt_taus_mp = std::get<2>(hlt_taus);
101 fillIDScores(ctx, trigger, offline_taus_1p,
"1P",
false);
108 fillIDScores(ctx, trigger, offline_taus_3p,
"3P",
false);
115 if(!hlt_taus_0p.empty()) {
124 if(!hlt_taus_1p.empty()) {
133 if(!hlt_taus_mp.empty()) {
148 return StatusCode::SUCCESS;
152 void TrigTauMonitorSingleAlgorithm::fillHLTEfficiencies(
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 std::string& nProng)
const
154 ATH_MSG_DEBUG(
"Fill HLT " << nProng <<
" efficiencies: " << trigger);
173 bool hlt_fires =
m_trigDecTool->isPassed(trigger, TrigDefs::Physics | TrigDefs::allowResurrectedDecision);
176 for(
const auto *offline_tau : offline_tau_vec) {
177 bool L1_match =
false;
181 for(
const TLorentzVector& roi :
rois) {
182 L1_match = offline_tau->p4().DeltaR(roi) <= 0.3;
187 tauEta = offline_tau->eta();
188 tauPhi = offline_tau->phi();
191 bool is_highPt =
tauPt >
info.getHLTTauThreshold() + 20.0;
194 HLT_match =
matchObjects(offline_tau, online_tau_vec, 0.2) && hlt_fires;
198 Total_match =
static_cast<bool>(HLT_match);
202 Total_match_highPt =
static_cast<bool>(HLT_match);
207 if(!L1_match || !l1_accept_flag)
continue;
212 HLT_match_highPt =
static_cast<bool>(HLT_match);
225 auto monGroup =
getGroup(trigger+
"_ID_"+(online ?
"HLT" :
"Offline")+
"_InputScalar_"+nProng);
275 detail = std::log10(std::max(detail, 140.0f));
284 fill(
monGroup,
centFrac,
etOverPtLeadTrk,
dRmax,
absipSigLeadTrk, sumPtTrkFrac, emPOverTrkSysP,
ptRatioEflowApprox,
mEflowApprox,
ptDetectorAxis,
massTrkSys,
trFlightPathSig);
294 auto monGroup =
getGroup(trigger+
"_ID_"+(online ?
"HLT" :
"Offline")+
"_InputTrack");
299 for(
const auto *tau : tau_vec) {
302 bool linksValid =
true;
304 if(!trackEL.isValid()) {
310 ATH_MSG_WARNING(
"Invalid track element links from TauJet in " << trigger);
330 uint8_t inner_pixel_hits, inner_pixel_exp;
334 if(success1_innerPixel_hits && success2_innerPixel_exp) {
detail = inner_pixel_exp ? inner_pixel_hits : 1.; };
338 uint8_t pixel_hits, pixel_dead;
342 if(success1_pixel_hits && success2_pixel_dead) {
detail = pixel_hits + pixel_dead; };
350 if(success1_sct_hits && success2_sct_dead) {
detail = sct_hits + sct_dead; };
354 fill(
monGroup, n_track, track_pt_log, track_eta, track_phi, track_dEta, track_dPhi, track_z0sinthetaTJVA_abs_log, track_d0_abs_log, track_nIBLHitsAndExp, track_nPixelHitsPlusDeadSensors, track_nSCTHitsPlusDeadSensors);
363 ATH_MSG_DEBUG(
"Fill ID input Cluster: " << trigger <<
" for online/offline " << online);
365 auto monGroup =
getGroup(trigger+
"_ID_"+(online ?
"HLT" :
"Offline")+
"_InputCluster");
367 for(
const auto *tau : tau_vec){
370 std::vector<const xAOD::CaloCluster*>
clusters;
395 if(success_SECOND_LAMBDA)
detail = std::log10(
detail + 0.1);
402 if(success_CENTER_LAMBDA)
detail = std::log10(
detail + 1
e-6);
406 fill(
monGroup, n_cluster, cluster_pt_jetseed_log, cluster_et_log, cluster_eta, cluster_phi, cluster_dEta, cluster_dPhi, cluster_SECOND_R_log10, cluster_SECOND_LAMBDA_log10, cluster_CENTER_LAMBDA_log10);
417 auto monGroup =
getGroup(trigger+
"_"+(online ?
"HLT" :
"Offline")+
"_basicVars_"+nProng);
460 const std::string tau_id =
info.getHLTTauID();
461 bool store_all = tau_id ==
"idperf" || tau_id ==
"perf";
473 auto monGroup =
getGroup(trigger+
"_"+(online ?
"HLT" :
"Offline")+
"_IDScores_"+nProng);
475 for(
const auto& [
key,
p] : decor_handle_keys) {
477 if(online && !store_all && tau_id !=
key)
continue;
485 std::vector<float>
score, score_sig_trans;
487 score.push_back(score_handle(*tau));
488 score_sig_trans.push_back(score_sig_trans_handle(*tau));
502 std::vector<TLorentzVector> ret;
507 if(
info.getL1TauType() ==
"eTAU") {
509 v.SetPtEtaPhiM(roi->et(), roi->eta(), roi->phi(), 0);
512 }
else if(
info.getL1TauType() ==
"jTAU") {
514 v.SetPtEtaPhiM(roi->et(), roi->eta(), roi->phi(), 0);
517 }
else if(
info.getL1TauType() ==
"cTAU") {
518 for(
const auto& [eTau_roi, jTau_roi] :
getL1cTAUs(ctx,
info.getL1TauItem())) {
519 v.SetPtEtaPhiM(eTau_roi->et(), eTau_roi->eta(), eTau_roi->phi(), 0);