From a4e71eb8f4d816cc06ce42cc0ecb6f3daa318c1e Mon Sep 17 00:00:00 2001 From: Mikael Martensson <mikael.martensson@cern.ch> Date: Fri, 14 Jun 2019 07:23:18 +0200 Subject: [PATCH] Changed TauSelectionTool in tau physics validation to ToolHandles --- .../share/PhysValTau_jobOptions.py | 41 +++++++++++++++ .../TauAnalysisTools/TauAnalysisTools/Enums.h | 2 + .../TauAnalysisTools/selection.xml | 2 + .../TauID/TauDQA/share/PhysValTau.h | 10 ++-- .../TauID/TauDQA/src/PhysValTau.cxx | 51 +++++++------------ 5 files changed, 68 insertions(+), 38 deletions(-) diff --git a/PhysicsAnalysis/PhysicsValidation/PhysValMonitoring/share/PhysValTau_jobOptions.py b/PhysicsAnalysis/PhysicsValidation/PhysValMonitoring/share/PhysValTau_jobOptions.py index 00e0c47bd5af..4ac0e676c34b 100644 --- a/PhysicsAnalysis/PhysicsValidation/PhysValMonitoring/share/PhysValTau_jobOptions.py +++ b/PhysicsAnalysis/PhysicsValidation/PhysValMonitoring/share/PhysValTau_jobOptions.py @@ -10,6 +10,47 @@ if recFlags.doTruth(): tool1.TauContainerName = "TauJets" tool1.TruthParticleContainerName = "TruthParticles" +# configuration of the truth matching tool +tool1.TauTruthMatchingTool.TruthElectronContainerName = "TruthElectrons" +tool1.TauTruthMatchingTool.TruthMuonContainerName = "MuonTruthParticles" +tool1.TauTruthMatchingTool.WriteTruthTaus = True + +# Trigger loading of TauAnalysisTools to make ID enums visible +import cppyy +try: + print("Successfully loaded TauAnalysisToolsDict") + cppyy.loadDictionary('TauAnalysisToolsDict') +except: + print("Could not load TauAnalysisToolsDict") + pass +from ROOT import TauAnalysisTools + +# configuration of the 'primitive' tau selection +tool1.PrimitiveTauSelectionTool.ConfigPath = "" +tool1.PrimitiveTauSelectionTool.SelectionCuts \ + = int(TauAnalysisTools.CutAbsEta | TauAnalysisTools.CutAbsCharge | + TauAnalysisTools.CutNTrack) +tool1.PrimitiveTauSelectionTool.PtMin = 0.0 +tool1.PrimitiveTauSelectionTool.JetIDWP = TauAnalysisTools.JETIDNONE +tool1.PrimitiveTauSelectionTool.EleOLR = False +tool1.PrimitiveTauSelectionTool.NTracks = (0, 1, 2, 3, 4, 5) +tool1.PrimitiveTauSelectionTool.AbsCharges = (0, 1, 2, 3) +tool1.PrimitiveTauSelectionTool.AbsEtaRegion = (0.0, 10.0) +tool1.PrimitiveTauSelectionTool.OutputLevel = DEBUG + +# configuration of the 'nominal' tau selection +tool1.NominalTauSelectionTool.ConfigPath = "" +tool1.NominalTauSelectionTool.SelectionCuts \ + = int(TauAnalysisTools.CutPt | TauAnalysisTools.CutAbsEta | + TauAnalysisTools.CutAbsCharge | TauAnalysisTools.CutNTrack) +tool1.NominalTauSelectionTool.PtMin = 2000000.0 +tool1.NominalTauSelectionTool.JetIDWP = TauAnalysisTools.JETIDNONE +tool1.NominalTauSelectionTool.EleOLR = False +tool1.NominalTauSelectionTool.NTracks = (0, 1, 2, 3, 4, 5) +tool1.NominalTauSelectionTool.AbsCharges = (0, 1, 2, 3) +tool1.NominalTauSelectionTool.AbsEtaRegion = (0.0, 1.37, 1.52, 2.5) +tool1.NominalTauSelectionTool.OutputLevel = DEBUG + monMan = CfgMgr.AthenaMonManager("PhysValMonManager") monMan.AthenaMonTools += [ tool1 ] diff --git a/PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h b/PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h index a8d852ad5d26..b703ba55f12d 100644 --- a/PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h +++ b/PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h @@ -157,6 +157,8 @@ typedef enum e_DataPeriodBinning PeriodBinningD_EFH23J_G = 3 } DataPeriodBinning; +struct ROOT6_NamespaceAutoloadHook{}; + } #endif // TAUANALYSISTOOLS_ENUMS_H diff --git a/PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/selection.xml b/PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/selection.xml index 769f6ff55d5b..c839cb9dd670 100644 --- a/PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/selection.xml +++ b/PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/selection.xml @@ -13,6 +13,8 @@ <class name="TauAnalysisTools::DiTauTruthMatchingTool" /> <function pattern="TauAnalysisTools::split*"/> <function pattern="TauAnalysisTools::testFileForEOFContainsCharacters*"/> + <enum name="TauAnalysisTools::e_JETID" /> + <enum name="TauAnalysisTools::SelectionCuts" /> <!-- Suppress the unwanted classes found by ROOT 6. --> <!-- Hopefully we can remove these extra lines at one point... --> diff --git a/PhysicsAnalysis/TauID/TauDQA/share/PhysValTau.h b/PhysicsAnalysis/TauID/TauDQA/share/PhysValTau.h index a54e7a905bc4..fc1606954626 100644 --- a/PhysicsAnalysis/TauID/TauDQA/share/PhysValTau.h +++ b/PhysicsAnalysis/TauID/TauDQA/share/PhysValTau.h @@ -17,8 +17,8 @@ // Local includes #include "AthenaMonitoring/ManagedMonitorToolBase.h" #include "TauValidationPlots.h" -#include "TauAnalysisTools/TauTruthMatchingTool.h" -#include "TauAnalysisTools/TauSelectionTool.h" +#include "TauAnalysisTools/ITauTruthMatchingTool.h" +#include "TauAnalysisTools/ITauSelectionTool.h" #include <TLorentzVector.h> //Additional includes @@ -84,10 +84,10 @@ class PhysValTau std::vector<size_t> m_matched_itr; // Tool used for truth-matching - TauAnalysisTools::TauTruthMatchingTool m_truthTool; + ToolHandle<TauAnalysisTools::ITauTruthMatchingTool> m_truthTool; // Tool used to select "primitive" and "nominal" taus - TauAnalysisTools::TauSelectionTool m_primTauSel; - TauAnalysisTools::TauSelectionTool m_nomiTauSel; + ToolHandle<TauAnalysisTools::ITauSelectionTool> m_primTauSel; + ToolHandle<TauAnalysisTools::ITauSelectionTool> m_nomiTauSel; //Histograms // general tau all prongs plots diff --git a/PhysicsAnalysis/TauID/TauDQA/src/PhysValTau.cxx b/PhysicsAnalysis/TauID/TauDQA/src/PhysValTau.cxx index 8188c5f3d9d9..8202cb349522 100644 --- a/PhysicsAnalysis/TauID/TauDQA/src/PhysValTau.cxx +++ b/PhysicsAnalysis/TauID/TauDQA/src/PhysValTau.cxx @@ -37,14 +37,20 @@ PhysValTau::PhysValTau(const std::string& type, const std::string& name, const IInterface* parent) : ManagedMonitorToolBase(type, name, parent), - m_truthTool("TauTruthMatchingTool"), - m_primTauSel("PrimitiveTauSelectionTool"), - m_nomiTauSel("NominalTauSelectionTool") + m_truthTool("TauAnalysisTools::TauTruthMatchingTool/" + "TauTruthMatchingTool", this), + m_primTauSel("TauAnalysisTools::TauSelectionTool/" + "PrimitiveTauSelectionTool", this), + m_nomiTauSel("TauAnalysisTools::TauSelectionTool/" + "NominalTauSelectionTool", this) { declareProperty("TauContainerName", m_TauJetContainerName = "TauRecContainer"); declareProperty("TruthParticleContainerName", m_TruthParticleContainerName = "TruthParticle"); declareProperty("TauDetailsContainerName", m_TauDetailsContainerName = "TauRecDetailsContainer"); declareProperty("isMC", m_isMC = false); + declareProperty("TauTruthMatchingTool", m_truthTool); + declareProperty("PrimitiveTauSelectionTool", m_primTauSel); + declareProperty("NominalTauSelectionTool", m_nomiTauSel); } // Destructor @@ -60,30 +66,11 @@ StatusCode PhysValTau::initialize() ATH_CHECK(ManagedMonitorToolBase::initialize()); if ( m_isMC ) { - CHECK(m_truthTool.setProperty("TruthElectronContainerName", - "TruthElectrons")); - CHECK(m_truthTool.setProperty("TruthMuonContainerName", - "MuonTruthParticles")); - CHECK(m_truthTool.setProperty("WriteTruthTaus", true)); - CHECK(m_truthTool.sysInitialize()); + ATH_CHECK(m_truthTool.retrieve()); } - // setup a "primitive" tau selection tool with basically no cuts - CHECK(m_primTauSel.setProperty("PtMin",0.0)); - CHECK(m_primTauSel.setProperty("JetIDWP",int(TauAnalysisTools::JETIDNONE))); - CHECK(m_primTauSel.setProperty("EleOLR",false)); - CHECK(m_primTauSel.setProperty("NTracks",std::vector<int>{0,1,2,3,4,5})); - CHECK(m_primTauSel.setProperty("AbsCharges",std::vector<int>{0,1,2,3})); - CHECK(m_primTauSel.setProperty("AbsEtaRegion",std::vector<double>{0.0,10.0})); - m_primTauSel.msg().setLevel(MSG::DEBUG); - CHECK(m_primTauSel.initialize()); - // setup a "nominal" tau selection tool (just eta and pt cuts) - CHECK(m_nomiTauSel.setProperty("PtMin",20.0)); - CHECK(m_nomiTauSel.setProperty("JetIDWP",int(TauAnalysisTools::JETIDNONE))); - CHECK(m_nomiTauSel.setProperty("EleOLR",false)); - CHECK(m_nomiTauSel.setProperty("NTracks",std::vector<int>{0,1,2,3,4,5})); - CHECK(m_nomiTauSel.setProperty("AbsCharges",std::vector<int>{0,1,2,3})); - m_nomiTauSel.msg().setLevel(MSG::DEBUG); - CHECK(m_nomiTauSel.initialize()); + // selections are configured in PhysicsValidation job options + ATH_CHECK(m_primTauSel.retrieve()); + ATH_CHECK(m_nomiTauSel.retrieve()); return StatusCode::SUCCESS; } @@ -107,7 +94,7 @@ StatusCode PhysValTau::bookHistograms() StatusCode PhysValTau::fillHistograms() { - + ATH_MSG_INFO ("Filling hists " << name() << "..."); // Retrieve tau container: @@ -135,8 +122,8 @@ StatusCode PhysValTau::fillHistograms() // Loop through reco tau jet container for (auto tau : *taus) { if ( m_detailLevel < 10 ) continue; - if ( m_primTauSel.accept(*tau) ) continue; - asg::AcceptData nominal = m_nomiTauSel.accept(*tau); + if ( !static_cast<bool>(m_primTauSel->accept(*tau)) ) continue; + bool nominal = static_cast<bool>(m_nomiTauSel->accept(*tau)); // fill histograms for reconstructed taus m_oTauValidationPlots->m_oRecoTauAllProngsPlots.fill(*tau); @@ -171,12 +158,11 @@ StatusCode PhysValTau::fillHistograms() if ( !m_isMC ) continue; ATH_MSG_DEBUG("Trying to truth-match tau"); - auto trueTau = m_truthTool.getTruth(*tau); + auto trueTau = m_truthTool->getTruth(*tau); // Fill truth and fake histograms if ( (bool)tau->auxdata<char>("IsTruthMatched") ) { ATH_MSG_DEBUG("Tau is truth-matched"); - // std::cout << "Truth pdgId = " << trueTau->pdgId() << std::endl; if ( trueTau->isTau() ) { if ( (bool)trueTau->auxdata<char>("IsHadronicTau") ) { ATH_MSG_DEBUG("Tau is hadronic tau"); @@ -209,7 +195,7 @@ StatusCode PhysValTau::fillHistograms() } xAOD::TauJetParameters::DecayMode trueMode - = m_truthTool.getDecayMode(*trueTau); + = m_truthTool->getDecayMode(*trueTau); m_oTauValidationPlots->m_oMigrationPlots.fill(*tau, trueMode); if ( nominal ) { m_oTauValidationPlots->m_oMigrationPlotsNom.fill(*tau, trueMode); @@ -226,7 +212,6 @@ StatusCode PhysValTau::fillHistograms() if ( truth->status() != 1 ) continue; if ( truth->pt() < 10000.0 ) continue; if ( tau->p4().DeltaR(truth->p4()) > 0.2 ) continue; - std::cout << "Found electron!" << std::endl; // OK, now it probably is an electron isElectron = true; break; -- GitLab