diff --git a/Trigger/TrigMonitoring/TrigTauMonitoring/python/TrigTauMonitoringConfigMT.py b/Trigger/TrigMonitoring/TrigTauMonitoring/python/TrigTauMonitoringConfigMT.py index c002129da1621023ff68f969427110d7547e2a7b..431108af58da1a6d01df91f6276947154ea1985c 100644 --- a/Trigger/TrigMonitoring/TrigTauMonitoring/python/TrigTauMonitoringConfigMT.py +++ b/Trigger/TrigMonitoring/TrigTauMonitoring/python/TrigTauMonitoringConfigMT.py @@ -196,6 +196,30 @@ class TrigTauMonAlgBuilder: self.bookRNNCluster( monAlg, trigger, online=False ) self.bookbasicVars( monAlg, trigger, online=True ) self.bookbasicVars( monAlg, trigger, online=False ) + self.bookHLTEffHistograms( monAlg, trigger,nProng='1P') + self.bookHLTEffHistograms( monAlg, trigger,nProng='MP') + + # + # Booking HLT efficiencies + # + + def bookHLTEffHistograms( self, monAlg, trigger, nProng ): + + monGroupName = trigger+'_HLT_Efficiency_'+nProng + monGroupPath = 'HLT_Efficiency/'+trigger+'/HLT_Efficiency_'+ nProng + + monGroup = self.helper.addGroup( monAlg, monGroupName, + self.basePath+'/'+monGroupPath ) + + def defineEachStepHistograms(xvariable, xlabel, xbins, xmin, xmax): + + monGroup.defineHistogram(monGroupName+'_HLTpass,'+monGroupName+'_'+xvariable+';EffHLT_'+xvariable+'_wrt_Offline', + title='HLT Efficiency ' +trigger+' '+nProng+';'+xlabel+';Efficiency', + type='TEfficiency',xbins=xbins,xmin=xmin,xmax=xmax) + + defineEachStepHistograms('tauPt', 'p_{T} [GeV]', 60, 0.0, 300.) + defineEachStepHistograms('tauEta','#eta', 13, -2.6, 2.6) + defineEachStepHistograms('tauPhi','#phi', 16, -3.2, 3.2) # # Book RNN Variables diff --git a/Trigger/TrigMonitoring/TrigTauMonitoring/src/TrigTauMonitorAlgorithm.cxx b/Trigger/TrigMonitoring/TrigTauMonitoring/src/TrigTauMonitorAlgorithm.cxx index dc88474d2c6bb5a3604781663e4f485b34e94cf2..26cc4f271cdc2fd612afa174a416d0e2b91535ef 100644 --- a/Trigger/TrigMonitoring/TrigTauMonitoring/src/TrigTauMonitorAlgorithm.cxx +++ b/Trigger/TrigMonitoring/TrigTauMonitoring/src/TrigTauMonitorAlgorithm.cxx @@ -122,8 +122,10 @@ void TrigTauMonitorAlgorithm::fillDistributions(std::vector< std::pair< const xA { ATH_MSG_DEBUG ("TrigTauMonitorAlgorithm::fillDistributions"); - std::vector<const xAOD::TauJet*> tau_vec_1p; - std::vector<const xAOD::TauJet*> tau_vec_np; + std::vector<const xAOD::TauJet*> offline_tau_vec_1p; + std::vector<const xAOD::TauJet*> offline_tau_vec_mp; + std::vector<const xAOD::TauJet*> online_tau_vec_1p; + std::vector<const xAOD::TauJet*> online_tau_vec_mp; const TrigInfo info = getTrigInfo(trigger); @@ -135,28 +137,25 @@ void TrigTauMonitorAlgorithm::fillDistributions(std::vector< std::pair< const xA pairObj.first->detail(xAOD::TauJetParameters::nChargedTracks, nTracks); ATH_MSG_DEBUG("NTracks Offline: " << nTracks); if(nTracks==1){ - tau_vec_1p.push_back(pairObj.first); + offline_tau_vec_1p.push_back(pairObj.first); }else if(nTracks>1){ - tau_vec_np.push_back(pairObj.first); + offline_tau_vec_mp.push_back(pairObj.first); } } // Offline if(info.isRNN){ - fillRNNInputVars( trigger, tau_vec_1p,"1P", false ); - fillRNNInputVars( trigger, tau_vec_np,"MP", false ); - fillRNNTrack( trigger, tau_vec_1p, false ); - fillRNNTrack( trigger, tau_vec_np, false ); - fillRNNCluster( trigger, tau_vec_1p, false ); - fillRNNCluster( trigger, tau_vec_np, false ); - fillbasicVars( trigger, tau_vec_1p, false); - fillbasicVars( trigger, tau_vec_np, false); + fillRNNInputVars( trigger, offline_tau_vec_1p,"1P", false ); + fillRNNInputVars( trigger, offline_tau_vec_mp,"MP", false ); + fillRNNTrack( trigger, offline_tau_vec_1p, false ); + fillRNNTrack( trigger, offline_tau_vec_mp, false ); + fillRNNCluster( trigger, offline_tau_vec_1p, false ); + fillRNNCluster( trigger, offline_tau_vec_mp, false ); + fillbasicVars( trigger, offline_tau_vec_1p, false); + fillbasicVars( trigger, offline_tau_vec_mp, false); } - tau_vec_1p.clear(); - tau_vec_np.clear(); - auto vec = m_trigDecTool->features<xAOD::TauJetContainer>(trigger,TrigDefs::includeFailedDecisions ,"HLT_TrigTauRecMerged_MVA" ); for( auto &featLinkInfo : vec ){ const auto *feat = *(featLinkInfo.link); @@ -166,24 +165,60 @@ void TrigTauMonitorAlgorithm::fillDistributions(std::vector< std::pair< const xA feat->detail(xAOD::TauJetParameters::nChargedTracks, nTracks); ATH_MSG_DEBUG("NTracks Online: " << nTracks); if(nTracks==1){ - tau_vec_1p.push_back(feat); + online_tau_vec_1p.push_back(feat); }else if(nTracks>1){ - tau_vec_np.push_back(feat); + online_tau_vec_mp.push_back(feat); } } if(info.isRNN){ - fillRNNInputVars( trigger, tau_vec_1p,"1P", true ); - fillRNNInputVars( trigger, tau_vec_np,"MP", true ); - fillRNNTrack( trigger, tau_vec_1p, true ); - fillRNNTrack( trigger, tau_vec_np, true ); - fillRNNCluster( trigger, tau_vec_1p, true ); - fillRNNCluster( trigger, tau_vec_np, true ); - fillbasicVars( trigger, tau_vec_1p, true); - fillbasicVars( trigger, tau_vec_np, true); + fillRNNInputVars( trigger, online_tau_vec_1p,"1P", true ); + fillRNNInputVars( trigger, online_tau_vec_mp,"MP", true ); + fillRNNTrack( trigger, online_tau_vec_1p, true ); + fillRNNTrack( trigger, online_tau_vec_mp, true ); + fillRNNCluster( trigger, online_tau_vec_1p, true ); + fillRNNCluster( trigger, online_tau_vec_mp, true ); + fillbasicVars( trigger, online_tau_vec_1p, true); + fillbasicVars( trigger, online_tau_vec_mp, true); } - - + + + if(info.isRNN){ + fillEfficiencies(trigger, offline_tau_vec_1p, online_tau_vec_1p, "1P"); + fillEfficiencies(trigger, offline_tau_vec_mp, online_tau_vec_mp, "MP"); + } + + offline_tau_vec_1p.clear(); + offline_tau_vec_mp.clear(); + online_tau_vec_1p.clear(); + online_tau_vec_mp.clear(); +} + +void TrigTauMonitorAlgorithm::fillEfficiencies(const std::string trigger, std::vector<const xAOD::TauJet*> offline_tau_vec, std::vector<const xAOD::TauJet*> online_tau_vec, std::string nProng) const +{ + ATH_MSG_DEBUG("Fill HLT efficiencies: " << trigger); + + std::string monGroupName = trigger+"_HLT_Efficiency_"+nProng; + + auto monGroup = getGroup(monGroupName); + + auto tauPt = Monitored::Scalar<float>(monGroupName+"_tauPt",0.0); + auto tauEta = Monitored::Scalar<float>(monGroupName+"_tauEta",0.0); + auto tauPhi = Monitored::Scalar<float>(monGroupName+"_tauPhi",0.0); + auto HLT_match = Monitored::Scalar<bool>(monGroupName+"_HLTpass",false); + + for(auto offline_tau : offline_tau_vec){ + + tauPt = offline_tau->pt()/1e3; + tauEta = offline_tau->eta(); + tauPhi = offline_tau->phi(); + HLT_match = HLTMatching(offline_tau, online_tau_vec, 0.2); + + fill(monGroup, tauPt, tauEta, tauPhi, HLT_match); + } + + ATH_MSG_DEBUG("After fill HLT efficiencies: " << trigger); + } void TrigTauMonitorAlgorithm::fillRNNInputVars(const std::string trigger, std::vector<const xAOD::TauJet*> tau_vec,const std::string nProng, bool online) const @@ -320,6 +355,8 @@ void TrigTauMonitorAlgorithm::fillRNNTrack(const std::string trigger, std::vecto fill(monGroup,track_pt_log,track_dEta,track_dPhi,track_z0sinThetaTJVA_abs_log,track_d0_abs_log,track_nIBLHitsAndExp,track_nPixelHitsPlusDeadSensors,track_nSCTHitsPlusDeadSensors); } + + ATH_MSG_DEBUG("After fill RNN input Track: " << trigger); } @@ -400,6 +437,7 @@ void TrigTauMonitorAlgorithm::fillRNNCluster(const std::string trigger, std::vec fill(monGroup,cluster_pt_jetseed_log,cluster_et_log,cluster_dEta,cluster_dPhi,cluster_log_SECOND_R,cluster_SECOND_LAMBDA,cluster_CENTER_LAMBDA); } + ATH_MSG_DEBUG("After fill RNN input Cluster: " << trigger); } void TrigTauMonitorAlgorithm::fillbasicVars(const std::string trigger, std::vector<const xAOD::TauJet*> tau_vec,bool online) const @@ -425,6 +463,8 @@ void TrigTauMonitorAlgorithm::fillbasicVars(const std::string trigger, std::vect fill(monGroup, hEFEt,hEFEta,hEFPhi,hEFnTrack,hEFnWideTrack); + ATH_MSG_DEBUG("After fill Basic variables: " << trigger); + } TrigInfo TrigTauMonitorAlgorithm::getTrigInfo(const std::string trigger) const{ diff --git a/Trigger/TrigMonitoring/TrigTauMonitoring/src/TrigTauMonitorAlgorithm.h b/Trigger/TrigMonitoring/TrigTauMonitoring/src/TrigTauMonitorAlgorithm.h index 8cdade1c6761d6c02d0b43403f33fce587763d81..9f27d6b8006a82e3e5d96a101db474bfd6a187da 100644 --- a/Trigger/TrigMonitoring/TrigTauMonitoring/src/TrigTauMonitorAlgorithm.h +++ b/Trigger/TrigMonitoring/TrigTauMonitoring/src/TrigTauMonitorAlgorithm.h @@ -51,6 +51,7 @@ class TrigTauMonitorAlgorithm : public AthMonitorAlgorithm { void fillRNNCluster(const std::string trigger, std::vector<const xAOD::TauJet*> tau_vec, bool online) const; void fillbasicVars(const std::string trigger, std::vector<const xAOD::TauJet*> tau_vec, bool online) const; void fillDistributions(std::vector< std::pair< const xAOD::TauJet*, const TrigCompositeUtils::Decision * >> pairObjs, const std::string trigger) const; + void fillEfficiencies(const std::string trigger, std::vector<const xAOD::TauJet*> offline_tau_vec, std::vector<const xAOD::TauJet*> online_tau_vec, std::string nProng) const; inline double dR(const double eta1, const double phi1, const double eta2, const double phi2) const { @@ -59,6 +60,16 @@ class TrigTauMonitorAlgorithm : public AthMonitorAlgorithm { return sqrt(deta*deta + dphi*dphi); }; + inline bool HLTMatching(const xAOD::TauJet* offline_tau, std::vector<const xAOD::TauJet*> online_tau_vec, float threshold) const + { + for(auto online_tau: online_tau_vec){ + float deltaR = dR(offline_tau->eta(),offline_tau->phi(), online_tau->eta(),online_tau->phi()); + if(deltaR < threshold){ + return true; + } + } + return false; + }; SG::ReadHandleKey< xAOD::TauJetContainer> m_offlineTauJetKey { this, "offlineTauJetKey", "TauJets", "Offline taujet container key" }; SG::ReadHandleKey< xAOD::EmTauRoIContainer > m_l1TauRoIKey { this, "l1TauRoIKey","LVL1EmTauRoIs","Tau L1 RoI key"};