diff --git a/DataQuality/DataQualityTools/src/DQTGlobalWZFinderTool.cxx b/DataQuality/DataQualityTools/src/DQTGlobalWZFinderTool.cxx index 740bdd6fce4f5afaee93708f72e495291d0882a1..e9955f0047479827d5d0e20dce94be9bf51c0227 100644 --- a/DataQuality/DataQualityTools/src/DQTGlobalWZFinderTool.cxx +++ b/DataQuality/DataQualityTools/src/DQTGlobalWZFinderTool.cxx @@ -515,7 +515,7 @@ StatusCode DQTGlobalWZFinderTool::fillHistograms() ATH_MSG_DEBUG("Muon accept: " << m_muonSelectionTool->accept(**muonItr)); ATH_MSG_DEBUG("Muon pt: " << (*muonItr)->pt() << " " << m_muonPtCut*GeV); - ATH_MSG_DEBUG("Muon iso: " << m_isolationSelectionTool->accept(**muonItr)); + ATH_MSG_DEBUG("Muon iso: " << static_cast<bool> (m_isolationSelectionTool->accept(**muonItr))); ATH_MSG_DEBUG("Muon d0sig: " << d0sig); ATH_MSG_DEBUG("Muon Good vtx: " << pVtx); if (pVtx) diff --git a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IIsolationCloseByCorrectionTool.h b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IIsolationCloseByCorrectionTool.h index 045472749f6fa22c5084bf914b8a042479e0dcb2..c536f1b80796af7cee8777078a771e9241a9cf0d 100644 --- a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IIsolationCloseByCorrectionTool.h +++ b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IIsolationCloseByCorrectionTool.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration */ #ifndef ISOLATIONSELECTION_IISOLATIONCLOSEBYCORRECTIONTOOL_H @@ -7,7 +7,9 @@ #include <PATInterfaces/CorrectionCode.h> #include <IsolationSelection/Defs.h> -#include <PATCore/TAccept.h> + +#include <PATCore/AcceptData.h> +#include <PATCore/AcceptInfo.h> #include <xAODEgamma/ElectronContainer.h> #include <xAODEgamma/PhotonContainer.h> @@ -26,20 +28,33 @@ namespace CP { DirectCaloClusters = -1, ParticleCaloCorrection = 0, CaloCorrectionExtCore = 1, CaloCorrectionVarAnulus = 2 }; - // This function calculates and applies (the particle is not redecorated) the corrections for close-by objects for each isolation variables and tests whether the particle passes the isolation working point after the corrections. + // This function calculates and applies (the particle is not redecorated) the corrections + // for close-by objects for each isolation variables and tests whether the particle passes the isolation working point after the corrections. // Note that to use this functionality, a IsolationSelectionTool must have been passed to the tool (which must have been intialised indicating which isolation working point to use). - // The result returned is a TAccept object which is the decision made by the tool with respect to the particle passing the working point. - virtual Root::TAccept acceptCorrected(const xAOD::IParticle& x, const std::vector<const xAOD::IParticle*>& closePar, int topoetconeModel = TopoConeCorrectionModel::DirectCaloClusters) const = 0; - virtual Root::TAccept acceptCorrected(const xAOD::IParticle& x, const xAOD::IParticleContainer& closePar, int topoetconeModel = TopoConeCorrectionModel::DirectCaloClusters) const = 0; + // The result returned is a AcceptData object which is the decision made by the tool with respect to the particle passing the working point. + virtual asg::AcceptData acceptCorrected(const xAOD::IParticle& x, + const std::vector<const xAOD::IParticle*>& closePar, + int topoetconeModel = TopoConeCorrectionModel::DirectCaloClusters) const = 0; + virtual asg::AcceptData acceptCorrected(const xAOD::IParticle& x, + const xAOD::IParticleContainer& closePar, + int topoetconeModel = TopoConeCorrectionModel::DirectCaloClusters) const = 0; // This function calculates the values of the corrections for close-by objects to be applied to the isolation variables (without redecorating the particles). // The corrections are returned in a vector (one correction per isolation type provided). // This function is intended for experts only who want to check the effects of the corrections. - virtual CorrectionCode getCloseByCorrection(std::vector<float>& corrections, const xAOD::IParticle& par, const std::vector<xAOD::Iso::IsolationType>& types, const std::vector<const xAOD::IParticle*>& closePar, int topoetconeModel = TopoConeCorrectionModel::DirectCaloClusters) const = 0; - virtual CorrectionCode getCloseByCorrection(std::vector<float>& corrections, const xAOD::IParticle& par, const std::vector<xAOD::Iso::IsolationType>& types, const xAOD::IParticleContainer& closePar, int topoetconeModel = TopoConeCorrectionModel::DirectCaloClusters) const=0; + virtual CorrectionCode getCloseByCorrection(std::vector<float>& corrections, const xAOD::IParticle& par, + const std::vector<xAOD::Iso::IsolationType>& types, + const std::vector<const xAOD::IParticle*>& closePar, int topoetconeModel = TopoConeCorrectionModel::DirectCaloClusters) const = 0; + + virtual CorrectionCode getCloseByCorrection(std::vector<float>& corrections, + const xAOD::IParticle& par, + const std::vector<xAOD::Iso::IsolationType>& types, + const xAOD::IParticleContainer& closePar, int topoetconeModel = TopoConeCorrectionModel::DirectCaloClusters) const=0; - virtual CorrectionCode getCloseByIsoCorrection(xAOD::ElectronContainer* Electrons = nullptr, xAOD::MuonContainer* Muons = nullptr, xAOD::PhotonContainer* Photons = nullptr, int topoetconeModel = TopoConeCorrectionModel::DirectCaloClusters) const=0; - virtual CorrectionCode subtractCloseByContribution(xAOD::IParticle& x, const xAOD::IParticleContainer& closebyPar, int topoetconeModel = TopoConeCorrectionModel::DirectCaloClusters) const= 0; + virtual CorrectionCode getCloseByIsoCorrection(xAOD::ElectronContainer* Electrons = nullptr, xAOD::MuonContainer* Muons = nullptr, + xAOD::PhotonContainer* Photons = nullptr, int topoetconeModel = TopoConeCorrectionModel::DirectCaloClusters) const=0; + virtual CorrectionCode subtractCloseByContribution(xAOD::IParticle& x, const xAOD::IParticleContainer& closebyPar, + int topoetconeModel = TopoConeCorrectionModel::DirectCaloClusters) const= 0; virtual float getOriginalIsolation(const xAOD::IParticle& P, IsoType type) const=0; virtual float getOriginalIsolation(const xAOD::IParticle* P, IsoType type) const=0; diff --git a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IIsolationSelectionTool.h b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IIsolationSelectionTool.h index b4237c7d4586d8e87f7647d0fd66f5f3c806868c..5c24052e99dd85d7a3e74d982fdc7d058f1a07b2 100644 --- a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IIsolationSelectionTool.h +++ b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IIsolationSelectionTool.h @@ -1,10 +1,9 @@ // Dear emacs, this is -*- c++ -*- /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration */ -// $Id: IIsolationSelectionTool.h 764207 2016-07-25 18:16:03Z alesage $ // #ifndef ISOLATIONSELECTION_IISOLATIONSELECTIONTOOL_H // #define ISOLATIONSELECTION_IISOLATIONSELECTIONTOOL_H #ifndef ISOLATIONSELECTION_IISOLATIONSELECTIONTOOL_H @@ -12,8 +11,8 @@ // Framework include(s): #include "AsgTools/IAsgTool.h" -#include "PATCore/TAccept.h" - +#include "PATCore/AcceptData.h" +#include "PATCore/AcceptInfo.h" // EDM include(s): #include "xAODPrimitives/IsolationType.h" #include "xAODEgamma/Photon.h" @@ -44,17 +43,17 @@ namespace CP { public: // Cut on object - virtual const Root::TAccept& accept(const xAOD::Photon& x) const = 0; - virtual const Root::TAccept& accept(const xAOD::Electron& x) const = 0; - virtual const Root::TAccept& accept(const xAOD::Muon& x) const = 0; - virtual const Root::TAccept& accept(const strObj& x) const = 0; - virtual const Root::TAccept& accept(const xAOD::IParticle& x) const = 0; + virtual const asg::AcceptData accept(const xAOD::Photon& x) const = 0; + virtual const asg::AcceptData accept(const xAOD::Electron& x) const = 0; + virtual const asg::AcceptData accept(const xAOD::Muon& x) const = 0; + virtual const asg::AcceptData accept(const strObj& x) const = 0; + virtual const asg::AcceptData accept(const xAOD::IParticle& x) const = 0; virtual StatusCode setIParticleCutsFrom(xAOD::Type::ObjectType ObjType) = 0; - virtual const Root::TAccept& getPhotonTAccept() const = 0; - virtual const Root::TAccept& getElectronTAccept() const = 0; - virtual const Root::TAccept& getMuonTAccept() const = 0; - virtual const Root::TAccept& getObjTAccept() const = 0; + virtual const asg::AcceptInfo& getPhotonAcceptInfo() const = 0; + virtual const asg::AcceptInfo& getElectronAcceptInfo() const = 0; + virtual const asg::AcceptInfo& getMuonAcceptInfo() const = 0; + virtual const asg::AcceptInfo& getObjAcceptInfo() const = 0; virtual const std::vector<IsolationWP*>& getMuonWPs() const=0; virtual const std::vector<IsolationWP*>& getElectronWPs() const=0; diff --git a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IsolationCloseByCorrectionTool.h b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IsolationCloseByCorrectionTool.h index 7aa5f461a302d3e393692b664529806f74390bbc..20a06454a853e1877c03925ee62a3a70fa43d993 100644 --- a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IsolationCloseByCorrectionTool.h +++ b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IsolationCloseByCorrectionTool.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration */ #ifndef IsolationSelection_IsolationCloseByCorrectionTool_H @@ -56,8 +56,12 @@ namespace CP { virtual CorrectionCode getCloseByCorrection(std::vector<float>& corrections, const xAOD::IParticle& par, const std::vector<xAOD::Iso::IsolationType>& types, const std::vector<const xAOD::IParticle*>& closePar, int topoetconeModel = TopoConeCorrectionModel::DirectCaloClusters) const; virtual CorrectionCode getCloseByCorrection(std::vector<float>& corrections, const xAOD::IParticle& par, const std::vector<xAOD::Iso::IsolationType>& types, const xAOD::IParticleContainer& closePar, int topoetconeModel = TopoConeCorrectionModel::DirectCaloClusters) const; - virtual Root::TAccept acceptCorrected(const xAOD::IParticle& x, const std::vector<const xAOD::IParticle*>& closePar, int topoetconeModel = TopoConeCorrectionModel::DirectCaloClusters) const; - virtual Root::TAccept acceptCorrected(const xAOD::IParticle& x, const xAOD::IParticleContainer& closePar, int topoetconeModel = TopoConeCorrectionModel::DirectCaloClusters) const; + virtual asg::AcceptData acceptCorrected(const xAOD::IParticle& x, + const std::vector<const xAOD::IParticle*>& closePar, + int topoetconeModel = TopoConeCorrectionModel::DirectCaloClusters) const; + virtual asg::AcceptData acceptCorrected(const xAOD::IParticle& x, + const xAOD::IParticleContainer& closePar, + int topoetconeModel = TopoConeCorrectionModel::DirectCaloClusters) const; virtual CorrectionCode getCloseByIsoCorrection(xAOD::ElectronContainer* Electrons = nullptr, xAOD::MuonContainer* Muons = nullptr, xAOD::PhotonContainer* Photons = nullptr, int topoetconeModel = TopoConeCorrectionModel::DirectCaloClusters) const; virtual CorrectionCode subtractCloseByContribution(xAOD::IParticle& x, const xAOD::IParticleContainer& closebyPar, int topoetconeModel = TopoConeCorrectionModel::DirectCaloClusters) const; @@ -167,6 +171,7 @@ namespace CP { //Functionallity to backup the original cone variables if needed std::string m_backup_prefix; + asg::AcceptInfo m_corrAcceptInfo; asg::AnaToolHandle<InDet::IInDetTrackSelectionTool> m_trkselTool; mutable IsoHelperMap m_isohelpers; diff --git a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IsolationSelectionTool.h b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IsolationSelectionTool.h index debc23463841004e8bba9b62cb6ed03fb26c5f92..e2294c37154108881090d16224ea539fbe2395a7 100644 --- a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IsolationSelectionTool.h +++ b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IsolationSelectionTool.h @@ -1,10 +1,9 @@ // Dear emacs, this is -*- c++ -*- /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration */ -// $Id: IsolationSelectionTool.h 704447 2015-10-29 12:00:39Z jdevivi $ #ifndef ISOLATIONSELECTION_ISOLATIONSELECTIONTOOL_H #define ISOLATIONSELECTION_ISOLATIONSELECTIONTOOL_H @@ -53,16 +52,16 @@ namespace CP { enum IsoWPType { Efficiency, Cut }; - virtual const Root::TAccept& accept(const xAOD::Photon& x) const; - virtual const Root::TAccept& accept(const xAOD::Electron& x) const; - virtual const Root::TAccept& accept(const xAOD::Muon& x) const; - virtual const Root::TAccept& accept(const strObj& x) const; - virtual const Root::TAccept& accept(const xAOD::IParticle& x) const; // for tracks, and others? + virtual const asg::AcceptData accept(const xAOD::Photon& x) const; + virtual const asg::AcceptData accept(const xAOD::Electron& x) const; + virtual const asg::AcceptData accept(const xAOD::Muon& x) const; + virtual const asg::AcceptData accept(const strObj& x) const; + virtual const asg::AcceptData accept(const xAOD::IParticle& x) const; // for tracks, and others? - virtual const Root::TAccept& getPhotonTAccept() const; - virtual const Root::TAccept& getElectronTAccept() const; - virtual const Root::TAccept& getMuonTAccept() const; - virtual const Root::TAccept& getObjTAccept() const; + virtual const asg::AcceptInfo& getPhotonAcceptInfo() const; + virtual const asg::AcceptInfo& getElectronAcceptInfo() const; + virtual const asg::AcceptInfo& getMuonAcceptInfo() const; + virtual const asg::AcceptInfo& getObjAcceptInfo() const; virtual const std::vector<IsolationWP*>& getMuonWPs() const; virtual const std::vector<IsolationWP*>& getElectronWPs() const; @@ -86,7 +85,7 @@ namespace CP { private: //same interface for xAOD::IParticle and StrObj -> use template - template<typename T> void evaluateWP(const T& x, const std::vector<IsolationWP*>& WP, Root::TAccept& accept) const; + template<typename T> void evaluateWP(const T& x, const std::vector<IsolationWP*>& WP, asg::AcceptData& accept) const; void clearWPs(std::vector<IsolationWP*>& WP); // Stupid ROOT @@ -109,15 +108,15 @@ namespace CP { std::vector<IsolationWP*> m_phWPs; std::vector<IsolationWP*> m_objWPs; - /// TAccept's - mutable Root::TAccept m_photonAccept; - mutable Root::TAccept m_electronAccept; - mutable Root::TAccept m_muonAccept; - mutable Root::TAccept m_objAccept; + ///AcceptInfo + asg::AcceptInfo m_photonAcceptInfo; + asg::AcceptInfo m_electronAcceptInfo; + asg::AcceptInfo m_muonAcceptInfo; + asg::AcceptInfo m_objAcceptInfo; /// Iparticle interface std::vector<IsolationWP*>* m_iparWPs; - mutable Root::TAccept* m_iparAccept; + asg::AcceptInfo* m_iparAcceptInfo; // for cut interpolation bool m_doInterpM, m_doInterpE; diff --git a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IsolationWP.h b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IsolationWP.h index cb32ed55b7a2f8ea71cd2a0489e751f82593aa71..890745a5ce7fdd20f079b73372ed073c18e02f03 100644 --- a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IsolationWP.h +++ b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IsolationWP.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration */ #ifndef ISOLATIONSELECTION_ISOLATIONWP_H @@ -7,7 +7,8 @@ #include <xAODPrimitives/tools/getIsolationAccessor.h> #include <IsolationSelection/IsolationCondition.h> -#include "PATCore/TAccept.h" +#include "PATCore/AcceptData.h" +#include "PATCore/AcceptInfo.h" #include <map> namespace CP { @@ -19,28 +20,18 @@ namespace CP { void name(const std::string &name); - const Root::TAccept& accept(const xAOD::IParticle& p) const; - const Root::TAccept& accept(const strObj& p) const; + const asg::AcceptData accept(const xAOD::IParticle& p) const; + const asg::AcceptData accept(const strObj& p) const; void addCut(IsolationCondition* cut); - const Root::TAccept& getAccept() const; + const asg::AcceptInfo& getAcceptInfo() const; const std::vector<IsolationCondition*>& conditions() const; -// void saveCutValues(bool yes = true) { -// if (yes && (!m_cutValues)) m_cutValues = new std::map<xAOD::Iso::IsolationType, float>(); -// else if ((!yes) && m_cutValues) { -// delete m_cutValues; -// } -// } -// std::map<xAOD::Iso::IsolationType, float>* cutValues() { -// return m_cutValues; -// } - private: std::string m_name; std::vector<IsolationCondition*> m_cuts; std::map<xAOD::Iso::IsolationType, float>* m_cutValues; - mutable Root::TAccept m_accept; + asg::AcceptInfo m_acceptInfo; }; } #endif // ISOLATIONSELECTION_ISOLATIONWP_H diff --git a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/Root/IsolationCloseByCorrectionTool.cxx b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/Root/IsolationCloseByCorrectionTool.cxx index 28ad124fb2a278656ec57ffaf6cf2e20a80c0300..a452c52b18ef6263f27445d77851c31d75d67e0f 100644 --- a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/Root/IsolationCloseByCorrectionTool.cxx +++ b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/Root/IsolationCloseByCorrectionTool.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration */ #include <IsolationSelection/IsolationCloseByCorrectionTool.h> @@ -79,8 +79,9 @@ namespace CP { } StatusCode IsolationCloseByCorrectionTool::initialize() { - - //set default properties of track selection tool, if the user hasn't configured it + m_corrAcceptInfo.addCut( "NoToolCut", "No IsolationSelectionTool" ); + m_corrAcceptInfo.addCut("castCut", "Could not cast to right Object type"); + //set default properties of track selection tool, if the user hasn't configured it if (!m_trkselTool.isUserConfigured()) { SET_DUAL_TOOL(m_trkselTool, InDet::InDetTrackSelectionTool, "TackParticleSelectionTool"); ATH_MSG_INFO("No TrackSelectionTool provided, so I will create and configure my own, called: " << m_trkselTool.name()); @@ -172,8 +173,10 @@ namespace CP { ATH_MSG_ERROR("Failed to correct the isolation of particle with pt: " << Particle->pt() / 1.e3 << " GeV" << " eta: " << Particle->eta() << " phi: " << Particle->phi()); return CorrectionCode::Error; } - if (m_dec_isoselection) m_dec_isoselection->operator()(*Particle) = m_selectorTool->accept(*Particle); - } + if (m_dec_isoselection) { + m_dec_isoselection->operator()(*Particle) = static_cast<bool>(m_selectorTool->accept(*Particle)); + } + } return CorrectionCode::Ok; } const IsoVector* IsolationCloseByCorrectionTool::getIsolationTypes(const xAOD::IParticle* particle) const { @@ -515,27 +518,32 @@ namespace CP { } } } - Root::TAccept IsolationCloseByCorrectionTool::acceptCorrected(const xAOD::IParticle& x, const xAOD::IParticleContainer& closePar, int topoetconeModel) const { - Root::TAccept accept; + + asg::AcceptData IsolationCloseByCorrectionTool::acceptCorrected(const xAOD::IParticle& x, + const xAOD::IParticleContainer& closePar, + int topoetconeModel) const { + asg::AcceptData acceptData(&m_corrAcceptInfo); if (!m_isInitialised) { ATH_MSG_WARNING("The IsolationCloseByCorrectionTool was not initialised!!!"); } if (m_selectorTool.empty()) { ATH_MSG_ERROR("Please set the IsolationSelectionTool property with a valid IsolationSelectionTool"); - accept.clear(); - if (m_dec_isoselection) m_dec_isoselection->operator()(x) = false; - return accept; + acceptData.clear(); + acceptData.setCutResult("NoToolCut", false); + if (m_dec_isoselection) {m_dec_isoselection->operator()(x) = false;} + return acceptData; } if (!getIsolationTypes(&x)) { ATH_MSG_WARNING("Could not cast particle for acceptCorrected. Will return false."); - accept.setCutResult("castCut", false); - if (m_dec_isoselection) m_dec_isoselection->operator()(x) = false; - return accept; + acceptData.setCutResult("castCut", false); + if (m_dec_isoselection) {m_dec_isoselection->operator()(x) = false;} + return acceptData; } - if (closePar.empty()) return m_selectorTool->accept(x); - - accept.clear(); + if (closePar.empty()) { + return m_selectorTool->accept(x); + } + acceptData.clear(); strObj strPar; strPar.isolationValues.resize(xAOD::Iso::numIsolationTypes); strPar.pt = x.pt(); @@ -543,22 +551,22 @@ namespace CP { strPar.type = x.type(); std::vector<float> corrections; if (getCloseByCorrection(corrections, x, *getIsolationTypes(&x), closePar, topoetconeModel) == CorrectionCode::Error) { - ATH_MSG_WARNING("Could not calculate the corrections. acceptCorrected(x) is done without the corrections."); - if (m_dec_isoselection) m_dec_isoselection->operator()(x) = m_selectorTool->accept(x); - return m_selectorTool->accept(x); + ATH_MSG_WARNING("Could not calculate the corrections. acceptCorrected(x) is done without the corrections."); + if (m_dec_isoselection) m_dec_isoselection->operator()(x) = static_cast<bool>(m_selectorTool->accept(x)); + return m_selectorTool->accept(x); } for (unsigned int i = 0; i < getIsolationTypes(&x)->size(); i++) { - const SG::AuxElement::Accessor<float> *acc = xAOD::getIsolationAccessor(getIsolationTypes(&x)->at(i)); - float old = acc->operator()(x); - ATH_MSG_DEBUG("Correcting " << xAOD::Iso::toCString(getIsolationTypes(&x)->at(i)) << " from " << old << " to " << corrections.at(i)); - strPar.isolationValues[getIsolationTypes(&x)->at(i)] = corrections.at(i); + const SG::AuxElement::Accessor<float> *acc = xAOD::getIsolationAccessor(getIsolationTypes(&x)->at(i)); + float old = acc->operator()(x); + ATH_MSG_DEBUG("Correcting " << xAOD::Iso::toCString(getIsolationTypes(&x)->at(i)) << " from " << old << " to " << corrections.at(i)); + strPar.isolationValues[getIsolationTypes(&x)->at(i)] = corrections.at(i); } - accept = m_selectorTool->accept(strPar); - if (m_dec_isoselection) m_dec_isoselection->operator()(x) = accept; - return accept; + acceptData = m_selectorTool->accept(strPar); + if (m_dec_isoselection) m_dec_isoselection->operator()(x) = static_cast<bool>(acceptData); + return acceptData; } - Root::TAccept IsolationCloseByCorrectionTool::acceptCorrected(const xAOD::IParticle& x, const std::vector<const xAOD::IParticle*>& closePar, int topoetconeModel) const { + asg::AcceptData IsolationCloseByCorrectionTool::acceptCorrected(const xAOD::IParticle& x, const std::vector<const xAOD::IParticle*>& closePar, int topoetconeModel) const { xAOD::IParticleContainer Container(SG::VIEW_ELEMENTS); for (auto&P : closePar) Container.push_back(const_cast<xAOD::IParticle*>(P)); diff --git a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/Root/IsolationSelectionTool.cxx b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/Root/IsolationSelectionTool.cxx index 0b67946f104d626911b8c858946587de509bbef1..c04e13ce2179b7ae4d6c6594d13229da9605c5b5 100644 --- a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/Root/IsolationSelectionTool.cxx +++ b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/Root/IsolationSelectionTool.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration */ #include <xAODPrimitives/IsolationType.h> @@ -18,14 +18,12 @@ namespace CP { asg::AsgTool(name), /// input file m_calibFile(nullptr), - - /// TAccept's - m_photonAccept("IsolationSelectionToolPhotonTAccept"), - m_electronAccept("IsolationSelectionToolElectronTAccept"), - m_muonAccept("IsolationSelectionToolMuonTAccept"), - m_objAccept("IsolationSelectionToolObjTAccept"), - m_iparWPs(0), - m_iparAccept(0), + m_photonAcceptInfo("IsolationSelectionToolPhotonAccept"), + m_electronAcceptInfo("IsolationSelectionToolElectronAccept"), + m_muonAcceptInfo("IsolationSelectionToolMuonAccept"), + m_objAcceptInfo("IsolationSelectionToolObjAccept"), + m_iparWPs(nullptr), + m_iparAcceptInfo(nullptr), m_Interp(nullptr), m_TwikiLoc("https://twiki.cern.ch/twiki/bin/view/AtlasProtected/IsolationSelectionTool#List_of_current_official_working") { declareProperty("CalibFileName", m_calibFileName = "IsolationSelection/v2/MC15_Z_Jpsi_cutMap.root", "The config file to use"); @@ -123,13 +121,13 @@ namespace CP { StatusCode IsolationSelectionTool::setIParticleCutsFrom(xAOD::Type::ObjectType ObjType) { if (ObjType == xAOD::Type::Electron) { - m_iparAccept = &m_electronAccept; + m_iparAcceptInfo = &m_electronAcceptInfo; m_iparWPs = &m_elWPs; } else if (ObjType == xAOD::Type::Muon) { - m_iparAccept = &m_muonAccept; + m_iparAcceptInfo = &m_muonAcceptInfo; m_iparWPs = &m_muWPs; } else if (ObjType == xAOD::Type::Photon) { - m_iparAccept = &m_photonAccept; + m_iparAcceptInfo = &m_photonAcceptInfo; m_iparWPs = &m_phWPs; } else { return StatusCode::FAILURE; @@ -197,7 +195,7 @@ namespace CP { return StatusCode::FAILURE; } m_muWPs.push_back(wp); - m_muonAccept.addCut(wp->name(), wp->name()); + m_muonAcceptInfo.addCut(wp->name(), wp->name()); return StatusCode::SUCCESS; } @@ -231,7 +229,7 @@ namespace CP { } m_phWPs.push_back(wp); - m_photonAccept.addCut(wp->name(), wp->name()); + m_photonAcceptInfo.addCut(wp->name(), wp->name()); // Return gracefully: return StatusCode::SUCCESS; @@ -281,31 +279,33 @@ namespace CP { } m_elWPs.push_back(wp); - m_electronAccept.addCut(wp->name(), wp->name()); + m_electronAcceptInfo.addCut(wp->name(), wp->name()); // Return gracefully: return StatusCode::SUCCESS; } - StatusCode IsolationSelectionTool::addUserDefinedWP(std::string WPname, xAOD::Type::ObjectType ObjType, std::vector<std::pair<xAOD::Iso::IsolationType, std::string> >& cuts, std::string key, IsoWPType type) { + StatusCode IsolationSelectionTool::addUserDefinedWP(std::string WPname, xAOD::Type::ObjectType ObjType, + std::vector<std::pair<xAOD::Iso::IsolationType, + std::string> >& cuts, std::string key, IsoWPType type) { std::vector<IsolationWP*>* wps(nullptr); - Root::TAccept* ac(nullptr); + asg::AcceptInfo* ac(nullptr); if (ObjType == xAOD::Type::Electron) { if (key == "") key = m_elWPKey; wps = &m_elWPs; - ac = &m_electronAccept; + ac = &m_electronAcceptInfo; } else if (ObjType == xAOD::Type::Muon) { if (key == "") key = m_muWPKey; wps = &m_muWPs; - ac = &m_muonAccept; + ac = &m_muonAcceptInfo; } else if (ObjType == xAOD::Type::Photon) { if (key == "") key = m_phWPKey; wps = &m_phWPs; - ac = &m_photonAccept; + ac = &m_photonAcceptInfo; } else if (ObjType == xAOD::Type::Other) { if (key == "") return StatusCode::FAILURE; wps = &m_objWPs; - ac = &m_objAccept; + ac = &m_objAcceptInfo; } else { return StatusCode::FAILURE; } @@ -322,10 +322,8 @@ namespace CP { delete wp; return StatusCode::FAILURE; } - wps->push_back(wp); ac->addCut(wp->name(), wp->name()); - return StatusCode::SUCCESS; } @@ -343,94 +341,104 @@ namespace CP { StatusCode IsolationSelectionTool::addWP(IsolationWP* wp, xAOD::Type::ObjectType ObjType) { if (ObjType == xAOD::Type::Electron) { m_elWPs.push_back(wp); - m_electronAccept.addCut(wp->name(), wp->name()); + m_electronAcceptInfo.addCut(wp->name(), wp->name()); } else if (ObjType == xAOD::Type::Muon) { m_muWPs.push_back(wp); - m_muonAccept.addCut(wp->name(), wp->name()); + m_muonAcceptInfo.addCut(wp->name(), wp->name()); } else if (ObjType == xAOD::Type::Photon) { m_phWPs.push_back(wp); - m_photonAccept.addCut(wp->name(), wp->name()); + m_photonAcceptInfo.addCut(wp->name(), wp->name()); } else if (ObjType == xAOD::Type::Other) { m_objWPs.push_back(wp); - m_objAccept.addCut(wp->name(), wp->name()); + m_objAcceptInfo.addCut(wp->name(), wp->name()); } else { return StatusCode::FAILURE; } - return StatusCode::SUCCESS; } - template<typename T> void IsolationSelectionTool::evaluateWP(const T& x, const std::vector<IsolationWP*>& WP, Root::TAccept& accept) const { + + template<typename T> void IsolationSelectionTool::evaluateWP(const T& x, + const std::vector<IsolationWP*>& WP, + asg::AcceptData& accept) const { accept.clear(); for (auto& i : WP) { - if (i->accept(x)) accept.setCutResult(i->name(), true); + if (i->accept(x)) { + accept.setCutResult(i->name(), true); + } } } - const Root::TAccept& IsolationSelectionTool::accept(const xAOD::Photon& x) const { - evaluateWP(x, m_phWPs, m_photonAccept); - return m_photonAccept; + + const asg::AcceptData IsolationSelectionTool::accept(const xAOD::Photon& x) const { + asg::AcceptData acceptData(&m_photonAcceptInfo); + evaluateWP(x, m_phWPs, acceptData); + return acceptData; } - const Root::TAccept& IsolationSelectionTool::accept(const xAOD::Electron& x) const { - evaluateWP(x, m_elWPs, m_electronAccept); - return m_electronAccept; + const asg::AcceptData IsolationSelectionTool::accept(const xAOD::Electron& x) const { + asg::AcceptData acceptData(&m_electronAcceptInfo); + evaluateWP(x, m_elWPs, acceptData); + return acceptData; } - const Root::TAccept& IsolationSelectionTool::accept(const xAOD::Muon& x) const { - evaluateWP(x, m_muWPs, m_muonAccept); - return m_muonAccept; + const asg::AcceptData IsolationSelectionTool::accept(const xAOD::Muon& x) const { + asg::AcceptData acceptData(&m_muonAcceptInfo); + evaluateWP(x, m_muWPs, acceptData); + return acceptData; } - const Root::TAccept& IsolationSelectionTool::accept(const xAOD::IParticle& x) const { + const asg::AcceptData IsolationSelectionTool::accept(const xAOD::IParticle& x) const { - if (x.type() == xAOD::Type::Electron) { - evaluateWP(x, m_elWPs, m_electronAccept); - return m_electronAccept; - } else if (x.type() == xAOD::Type::Muon) { - evaluateWP(x, m_muWPs, m_muonAccept); - return m_muonAccept; - } else if (x.type() == xAOD::Type::Photon) { - evaluateWP(x, m_phWPs, m_photonAccept); - return m_photonAccept; - } + if (x.type() == xAOD::Type::Electron) { + const xAOD::Electron& el = static_cast<const xAOD::Electron&> (x); + return accept(el); + } else if (x.type() == xAOD::Type::Muon) { + const xAOD::Muon& muon = static_cast<const xAOD::Muon&> (x); + return accept(muon); + } else if (x.type() == xAOD::Type::Photon) { + const xAOD::Photon& ph = static_cast<const xAOD::Photon&> (x); + return accept(ph); + } + else if (m_iparAcceptInfo && m_iparWPs) { + asg::AcceptData acceptData(m_iparAcceptInfo); + evaluateWP(x, *m_iparWPs, acceptData); + return acceptData; + } + ATH_MSG_ERROR("Someting here makes really no sense"); + return asg::AcceptData(&m_objAcceptInfo); + } - else if (m_iparAccept && m_iparWPs) { - evaluateWP(x, *m_iparWPs, *m_iparAccept); - return *m_iparAccept; - } - ATH_MSG_ERROR("Someting here makes really no sense"); - m_objAccept.clear(); - return m_objAccept; - } - - const Root::TAccept& IsolationSelectionTool::accept(const strObj& x) const { - if (x.type == xAOD::Type::Electron) { - evaluateWP(x, m_elWPs, m_electronAccept); - return m_electronAccept; - } else if (x.type == xAOD::Type::Muon) { - evaluateWP(x, m_muWPs, m_muonAccept); - return m_muonAccept; - } else if (x.type == xAOD::Type::Photon) { - evaluateWP(x, m_phWPs, m_photonAccept); - return m_photonAccept; - } else { - evaluateWP(x, m_objWPs, m_objAccept); - } - return m_objAccept; + const asg::AcceptData IsolationSelectionTool::accept(const strObj& x) const { + if (x.type == xAOD::Type::Electron) { + asg::AcceptData acceptData(&m_electronAcceptInfo); + evaluateWP(x, m_elWPs, acceptData); + return acceptData; + } else if (x.type == xAOD::Type::Muon) { + asg::AcceptData acceptData(&m_muonAcceptInfo); + evaluateWP(x, m_muWPs, acceptData); + return acceptData; + } else if (x.type == xAOD::Type::Photon) { + asg::AcceptData acceptData(&m_photonAcceptInfo); + evaluateWP(x, m_phWPs, acceptData); + return acceptData; + } + asg::AcceptData acceptData(&m_objAcceptInfo); + evaluateWP(x, m_objWPs, acceptData); + return acceptData; } - const Root::TAccept& IsolationSelectionTool::getPhotonTAccept() const { - return m_photonAccept; + const asg::AcceptInfo& IsolationSelectionTool::getPhotonAcceptInfo() const { + return m_photonAcceptInfo; } - const Root::TAccept& IsolationSelectionTool::getElectronTAccept() const { - return m_electronAccept; + const asg::AcceptInfo& IsolationSelectionTool::getElectronAcceptInfo() const { + return m_electronAcceptInfo; } - const Root::TAccept& IsolationSelectionTool::getMuonTAccept() const { - return m_muonAccept; + const asg::AcceptInfo& IsolationSelectionTool::getMuonAcceptInfo() const { + return m_muonAcceptInfo; } - const Root::TAccept& IsolationSelectionTool::getObjTAccept() const { - return m_objAccept; + const asg::AcceptInfo& IsolationSelectionTool::getObjAcceptInfo() const { + return m_objAcceptInfo; } TDirectory* IsolationSelectionTool::getTemporaryDirectory(void) const { diff --git a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/Root/IsolationWP.cxx b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/Root/IsolationWP.cxx index fa7ab1a586773ead4b84b52f000c5833646ea4ed..effb85a62d0231ffcb089e4dc2700353a8250a21 100644 --- a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/Root/IsolationWP.cxx +++ b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/Root/IsolationWP.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration */ #include <IsolationSelection/IsolationWP.h> @@ -16,31 +16,36 @@ namespace CP { void IsolationWP::name(const std::string &name) { m_name = name; } - const Root::TAccept& IsolationWP::accept(const xAOD::IParticle& p) const { - m_accept.clear(); + + const asg::AcceptData IsolationWP::accept(const xAOD::IParticle& p) const { + asg::AcceptData acceptData(&m_acceptInfo); for (auto c : m_cuts) { - if (c->accept(p, m_cutValues)) m_accept.setCutResult(c->name(), true); + if (c->accept(p, m_cutValues)) { + acceptData.setCutResult(c->name(), true); + } } - return m_accept; + return acceptData; } - const Root::TAccept& IsolationWP::accept(const strObj& p) const { - m_accept.clear(); - for (auto c : m_cuts) { - if (c->accept(p, m_cutValues)) { - m_accept.setCutResult(c->name(), true); - } + const asg::AcceptData IsolationWP::accept(const strObj& p) const { + asg::AcceptData acceptData(&m_acceptInfo); + for (auto c : m_cuts) { + if (c->accept(p, m_cutValues)) { + acceptData.setCutResult(c->name(), true); } - return m_accept; + } + return acceptData; } void IsolationWP::addCut(IsolationCondition* i) { m_cuts.push_back(i); - m_accept.addCut(i->name(), i->name()); + m_acceptInfo.addCut(i->name(), i->name()); } - const Root::TAccept& IsolationWP::getAccept() const { - return m_accept; + + const asg::AcceptInfo& IsolationWP::getAcceptInfo() const { + return m_acceptInfo; } + const std::vector<IsolationCondition*>& IsolationWP::conditions() const{ return m_cuts; } @@ -49,6 +54,6 @@ namespace CP { m_name(name), m_cuts(), m_cutValues(nullptr), - m_accept(){ + m_acceptInfo(){ } } diff --git a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/src/TestIsolationCloseByCorrAthenaAlg.cxx b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/src/TestIsolationCloseByCorrAthenaAlg.cxx index a78c15614b029789fb7195d765f036aec73745c3..00a2ad8c6177beff586e5b7e29818c21800ce7b5 100644 --- a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/src/TestIsolationCloseByCorrAthenaAlg.cxx +++ b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/src/TestIsolationCloseByCorrAthenaAlg.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration */ //// Developed by Johannes Josef Junggeburth (jojungge@cern.ch) @@ -60,7 +60,7 @@ namespace CP { ATH_CHECK(CreateContainerLinks("Electrons", Electrons)); for (const auto ielec : *Electrons) { //Store if the electron passes the isolation - dec_PassIsol(*ielec) = m_isoSelectorTool->accept(*ielec); + dec_PassIsol(*ielec) = static_cast<bool>(m_isoSelectorTool->accept(*ielec)); //Quality criteria only baseline kinematic selection dec_PassQuality(*ielec) = ielec->pt() > 10.e3 && fabs(ielec->eta()) < 2.47; } @@ -68,7 +68,7 @@ namespace CP { ATH_CHECK(CreateContainerLinks("Photons", Photons)); for (const auto iphot : *Photons) { //Store if the photon passes the isolation (only needed for later comparisons) - dec_PassIsol(*iphot) = m_isoSelectorTool->accept(*iphot); + dec_PassIsol(*iphot) = static_cast<bool>(m_isoSelectorTool->accept(*iphot)); //Quality criteria only baseline kinematic selection dec_PassQuality(*iphot) = iphot->pt() > 25.e3 && fabs(iphot->eta()) < 2.35; } @@ -76,7 +76,7 @@ namespace CP { ATH_CHECK(CreateContainerLinks("Muons", Muons)); for (const auto imuon : *Muons) { //Store if the muon passes the isolation - dec_PassIsol(*imuon) = m_isoSelectorTool->accept(*imuon); + dec_PassIsol(*imuon) = static_cast<bool>(m_isoSelectorTool->accept(*imuon)); //Quality criteria only baseline kinematic selection dec_PassQuality(*imuon) = imuon->pt() > 5.e3 && fabs(imuon->eta()) < 2.7; }