diff --git a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/CMakeLists.txt b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/CMakeLists.txt index a66fb849a1308107ec477df06ea56439aaf5305f..89972b4e58421e4649e750c05be77b66ded59fec 100644 --- a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/CMakeLists.txt +++ b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/CMakeLists.txt @@ -50,5 +50,4 @@ if( XAOD_STANDALONE OR XAOD_ANALYSIS ) endif() # Install files from the package: -atlas_install_joboptions( share/*.py ) atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} ) diff --git a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IIsolationSelectionTool.h b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IIsolationSelectionTool.h index d71ce70cd89a01b056c068c815b091d999d0787c..5cd82b482c858e5c49dc1787132682a1defa97fd 100644 --- a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IIsolationSelectionTool.h +++ b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IIsolationSelectionTool.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration */ #ifndef ISOLATIONSELECTION_IISOLATIONSELECTIONTOOL_H @@ -29,9 +29,10 @@ /// /// @brief Select isolated Photons, Electrons and Muons /// -struct strObj; + namespace CP { + struct strObj; class IsolationWP; class IIsolationSelectionTool : virtual public asg::IAsgTool { /// Declare the interface that the class provides diff --git a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IsoVariableHelper.h b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IsoVariableHelper.h index c53dc71a27969c856bccd47693ecccea495ef7fa..98f07c4164403f0af88717bcb97443097a837327 100644 --- a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IsoVariableHelper.h +++ b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IsoVariableHelper.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration */ #ifndef ISOLATIONSELECTION_ISOVARIABLEHELPER_H @@ -7,6 +7,7 @@ #include <IsolationSelection/Defs.h> #include <PATInterfaces/CorrectionCode.h> +#include <AsgMessaging/AsgMessaging.h> #include <xAODBase/IParticle.h> #include <memory> @@ -16,7 +17,7 @@ namespace CP { typedef std::unique_ptr<IsoVariableHelper> IsoHelperPtr; - class IsoVariableHelper { + class IsoVariableHelper: public asg::AsgMessaging { public: CorrectionCode getOriginalIsolation(const xAOD::IParticle* particle, float& value) const; CorrectionCode getIsolation(const xAOD::IParticle* particle, float& value) const; diff --git a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IsolationCondition.h b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IsolationCondition.h index 65e82f3c436df4aa5e41529cf15c8437bd702ef7..de23578426c424138394d9c96850d0caa84d297c 100644 --- a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IsolationCondition.h +++ b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IsolationCondition.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration */ #ifndef ISOLATIONSELECTION_ISOLATIONCONDITION_H @@ -15,16 +15,19 @@ #include <vector> #include "AthContainers/AuxElement.h" +#include "AsgMessaging/AsgMessaging.h" + -struct strObj { - float pt{0.f}; - float eta{0.f}; - std::vector<float> isolationValues; - xAOD::Type::ObjectType type{xAOD::Type::ObjectType::EventInfo}; -}; namespace CP { - class IsolationCondition { + struct strObj { + float pt{0.f}; + float eta{0.f}; + std::vector<float> isolationValues; + xAOD::Type::ObjectType type{xAOD::Type::ObjectType::EventInfo}; + }; + + class IsolationCondition : public asg::AsgMessaging { public: IsolationCondition(const std::string& name, xAOD::Iso::IsolationType isoType, const std::string& isoDecSuffix = ""); IsolationCondition(const std::string& name, const std::vector<xAOD::Iso::IsolationType>& isoTypes, const std::string& isoDecSuffix = ""); diff --git a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IsolationConditionFormula.h b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IsolationConditionFormula.h index a1dedff574e1c136c50da1bf6367c9ac170ecf59..c14e274484234231f406779943dd451df85ac069 100644 --- a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IsolationConditionFormula.h +++ b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IsolationConditionFormula.h @@ -1,7 +1,5 @@ -// Dear emacs, this is -*- c++ -*- - /* - Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration */ #ifndef ISOLATIONSELECTION_ISOLATIONCONDITIONFORMULA_H diff --git a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/Root/IsoVariableHelper.cxx b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/Root/IsoVariableHelper.cxx index 1ccbde079f8555d6cc74010e354da923df659086..62de8dec9269c4abaf0bdf686297db3606d43754 100644 --- a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/Root/IsoVariableHelper.cxx +++ b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/Root/IsoVariableHelper.cxx @@ -11,6 +11,7 @@ namespace CP { // IsoVariableHelper //###################################################################################################### IsoVariableHelper::IsoVariableHelper(xAOD::Iso::IsolationType type, const std::string& backupPreFix, const std::string& isoDecSuffix) : + asg::AsgMessaging{"IsoVariableHelper_ "+ std::string(xAOD::Iso::toString(type))}, m_isoType(type), m_BackupIso(!backupPreFix.empty()), m_dec_IsoIsBackup("IsBackup_" + std::string(xAOD::Iso::toString(type)) + (backupPreFix.empty() ? "" : "_") + backupPreFix), @@ -22,16 +23,17 @@ namespace CP { CorrectionCode IsoVariableHelper::getOriginalIsolation(const xAOD::IParticle* particle, float& value) const { if (!particle) { - Error("IsoVariableHelper::getOriginalIsolation()", "No particle given"); + ATH_MSG_ERROR(__func__<<"() -- "<<__LINE__<<": no particle given"); return CorrectionCode::Error; } if (!m_BackupIso) { return getIsolationFromOriginal(particle, value); } else { if (!m_acc_IsoIsBackup.isAvailable(*particle) || !m_acc_IsoIsBackup(*particle)) { - Warning("IsoVariableHelper::getOriginalIsolation()", - "No isolation value was backuped thus far. Did you call the BackupIsolation before for %s?", - SG::AuxTypeRegistry::instance().getName(m_acc_IsoIsBackup.auxid()).c_str()); + ATH_MSG_WARNING(__func__<<"() -- "<<__LINE__<<":" + <<" No isolation value was backuped thus far. " + <<"Did you call the BackupIsolation before for " + <<SG::AuxTypeRegistry::instance().getName(m_acc_IsoIsBackup.auxid())); return CorrectionCode::Error; } else { value = m_acc_iso_backup(*particle); @@ -44,15 +46,15 @@ namespace CP { if (originalParticle && getIsolation(originalParticle, value) == CorrectionCode::Error) return CorrectionCode::Error; else if (!originalParticle) { - // Suppress warning as the CloseBy tool is no longer working on a shallow copy - // Warning("IsoVariableHelper::getOriginalIsolation()", "No original object was found"); + ATH_MSG_DEBUG(__func__<<"() -- "<<__LINE__<<": No orignal object was found"); return getIsolation(particle, value); } return CorrectionCode::Ok; } CorrectionCode IsoVariableHelper::getIsolation(const xAOD::IParticle* particle, float& value) const { if (!particle || !m_acc_iso_variable.isAvailable(*particle)) { - Error("IsoVariableHelper::GetIsolation()", "Failed to retrieve isolation %s", xAOD::Iso::toCString(isotype())); + ATH_MSG_ERROR(__func__<<"() -- "<<__LINE__<<": Failed to retrieve isolation "<< + SG::AuxTypeRegistry::instance().getName(m_acc_iso_variable.auxid())); return CorrectionCode::Error; } value = m_acc_iso_variable(*particle); @@ -60,12 +62,14 @@ namespace CP { } CorrectionCode IsoVariableHelper::backupIsolation(const xAOD::IParticle* particle) const { if (!particle) { - Error("IsoVariableHelper::GetIsolation()", "No particle given"); + ATH_MSG_ERROR(__func__<<"() -- "<<__LINE__<<": no particle given"); return CorrectionCode::Error; } if (m_BackupIso && (!m_acc_IsoIsBackup.isAvailable(*particle) || !m_acc_IsoIsBackup(*particle))) { float Isovalue = 0; - if (getIsolationFromOriginal(particle, Isovalue) == CorrectionCode::Error) { return CorrectionCode::Error; } + if (getIsolation(particle, Isovalue) == CorrectionCode::Error) { + return CorrectionCode::Error; + } m_dec_IsoIsBackup(*particle) = true; m_dec_iso_backup(*particle) = Isovalue; } @@ -73,11 +77,11 @@ namespace CP { } CorrectionCode IsoVariableHelper::setIsolation(const xAOD::IParticle* particle, float value) const { if (!particle) { - Error("IsoVariableHelper::SetIsolation()", "No particle given"); + ATH_MSG_ERROR(__func__<<"() -- "<<__LINE__<<": no particle given"); return CorrectionCode::Error; } if (std::isnan(value) || std::isinf(value)) { - Error("IsoVariableHelper::SetIsolation()", "The value is not a number"); + ATH_MSG_ERROR(__func__<<"() -- "<<__LINE__<<": the value is not a number"); return CorrectionCode::Error; } m_dec_iso_variable(*particle) = value; diff --git a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/Root/IsolationCloseByCorrectionTool.cxx b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/Root/IsolationCloseByCorrectionTool.cxx index a72593e3413702ea878aaf03acabe50ba4c02c76..41617b7b2d5df521032eabb2d7fbf7e872ef3961 100644 --- a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/Root/IsolationCloseByCorrectionTool.cxx +++ b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/Root/IsolationCloseByCorrectionTool.cxx @@ -266,7 +266,7 @@ namespace CP { if (cache.prim_vtx) { // require a primary vertex for isolation correction - expect that if there is not primary vertex, then we only need to assure that the cache.not_sel_parts are treated correctly below for (const xAOD::IParticle* particle : cache.prim_parts) { - ATH_MSG_DEBUG("Correct the isolation of particle with pt: " << particle->pt() * MeVtoGeV << " GeV" + ATH_MSG_DEBUG("Correct the isolation of particle "<<particleName(particle)<< " with pt: " << particle->pt() * MeVtoGeV << " GeV" << " eta: " << particle->eta() << " phi: " << particle->phi()); @@ -553,7 +553,7 @@ namespace CP { } IsoHelperMap::const_iterator Itr = m_isohelpers.find(type); if (Itr == m_isohelpers.end() || Itr->second->getOriginalIsolation(par, isoValue) == CorrectionCode::Error) { - ATH_MSG_WARNING("Could not retrieve the isolation variable " << toString(type)); + ATH_MSG_WARNING(__func__<<"() -- "<<__LINE__<<" Could not retrieve the isolation variable " << toString(type)); return CorrectionCode::Error; } else if (cache.tracks.empty()) return CorrectionCode::Ok; diff --git a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/Root/IsolationCondition.cxx b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/Root/IsolationCondition.cxx index 33d6a75024d27da4894e145a6eb972e35263c94d..d189d8e5587e865c9966c3142319dc7295cb807d 100644 --- a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/Root/IsolationCondition.cxx +++ b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/Root/IsolationCondition.cxx @@ -8,14 +8,19 @@ #include "xAODPrimitives/IsolationCorrection.h" namespace CP { - IsolationCondition::IsolationCondition(const std::string& name, const std::vector<xAOD::Iso::IsolationType>& isoTypes, const std::string& isoDecSuffix) : + IsolationCondition::IsolationCondition(const std::string& name, + const std::vector<xAOD::Iso::IsolationType>& isoTypes, + const std::string& isoDecSuffix) : + asg::AsgMessaging{"IsolationCondition_"+name}, m_name(name), m_isolationType(isoTypes), m_isoDecSuffix(isoDecSuffix) { for (const xAOD::Iso::IsolationType& iso_type : m_isolationType) { std::string accName = std::string(toCString(iso_type)) + (isoDecSuffix.empty() ? "" : "_") + isoDecSuffix; m_acc.emplace_back(accName); } } - IsolationCondition::IsolationCondition(const std::string& name, const std::vector<std::string>& isoTypes, const std::string& isoDecSuffix) : m_name(name), m_isoDecSuffix(isoDecSuffix) { + IsolationCondition::IsolationCondition(const std::string& name, const std::vector<std::string>& isoTypes, const std::string& isoDecSuffix) : + asg::AsgMessaging{"IsolationCondition_"+name}, + m_name(name), m_isoDecSuffix(isoDecSuffix) { for (const std::string& iso_type : isoTypes) { m_isolationType.push_back(xAOD::Iso::IsolationType(0)); std::string accName = iso_type + (isoDecSuffix.empty() ? "" : "_") + isoDecSuffix; diff --git a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/Root/IsolationConditionCombined.cxx b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/Root/IsolationConditionCombined.cxx index afa9420a389c0e28dcf4c9728adc820c53d289b4..7ab859144947eee0d51501607bfda9c7e5f29706 100644 --- a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/Root/IsolationConditionCombined.cxx +++ b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/Root/IsolationConditionCombined.cxx @@ -26,8 +26,9 @@ namespace CP { const FloatAccessor& acc_ele = accessor(acc); if (!acc_ele.isAvailable(x)) { - Warning("IsolationConditionCombined", "Accessor %s is not available. Expected when using primary AODs, post-p3793 derivations (only for *FixedRad or FixedCutPflow* for electrons), pre-p3517 derivations (only for FC*), or pre-p3830 derivations (for other electron WPs)", - SG::AuxTypeRegistry::instance().getName(acc_ele.auxid()).c_str()); + ATH_MSG_WARNING(__FILE__<<":"<<__LINE__<<"Accessor "<<SG::AuxTypeRegistry::instance().getName(acc_ele.auxid()) + <<" is not available. Expected when using primary AODs, post-p3793 derivations (only for *FixedRad or FixedCutPflow* for electrons), " + <<" pre-p3517 derivations (only for FC*), or pre-p3830 derivations (for other electron WPs)"); if (!m_isoDecSuffix.empty()) throw std::runtime_error ("IsolationConditionCombined: IsolationSelectionTool property 'IsoDecSuffix' is set to " + m_isoDecSuffix + ". Must run on derivation made with IsolationCloseByCorrection to create the isolation variables with this suffix, or remove 'IsoDecSuffix'. "); isoVars[acc] = FLT_MAX; } else diff --git a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/Root/IsolationConditionFormula.cxx b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/Root/IsolationConditionFormula.cxx index 7641d8f1a4ac5ad69f3f11586341af1662b76f0d..734961d11df174dc662611362d95383e2b71f5ad 100644 --- a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/Root/IsolationConditionFormula.cxx +++ b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/Root/IsolationConditionFormula.cxx @@ -30,11 +30,10 @@ namespace CP { const float cutVal = m_cutFunction->Eval(x.pt()); const FloatAccessor& acc = accessor(); if (!acc.isAvailable(x)) { - Warning("IsolationConditionFormula", "Accessor %s is not available. Expected when using primary AODs, post-p3793 " - "derivations (only for *FixedRad or FixedCutPflow* for electrons), pre-p3517 " - "derivations (only for FC*), or pre-p3830 derivations (for other electron WPs)", - SG::AuxTypeRegistry::instance().getName(acc.auxid()).c_str()); - if (!m_isoDecSuffix.empty()) throw std::runtime_error("IsolationConditionFormula: IsolationSelectionTool property 'IsoDecSuffix' is set to " + m_isoDecSuffix + ". Must run on derivation made with IsolationCloseByCorrection to create the isolation variables with this suffix, or remove 'IsoDecSuffix'. "); + ATH_MSG_WARNING(__FILE__<<":"<<__LINE__<<"Accessor "<<SG::AuxTypeRegistry::instance().getName(acc.auxid()) + <<" is not available. Expected when using primary AODs, post-p3793 derivations (only for *FixedRad or FixedCutPflow* for electrons), " + <<" pre-p3517 derivations (only for FC*), or pre-p3830 derivations (for other electron WPs)"); + if (!m_isoDecSuffix.empty()) throw std::runtime_error ("IsolationConditionCombined: IsolationSelectionTool property 'IsoDecSuffix' is set to " + m_isoDecSuffix + ". Must run on derivation made with IsolationCloseByCorrection to create the isolation variables with this suffix, or remove 'IsoDecSuffix'. "); return false; } if (!m_invertCut) return acc(x) <= cutVal; diff --git a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/python/IsolationSelectionConfig.py b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/python/IsolationSelectionConfig.py index 1acae071f8797baf0765de59dd172bec23dd3814..9fcb9f1c409ee312885adcd28c0f4e27873cef08 100644 --- a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/python/IsolationSelectionConfig.py +++ b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/python/IsolationSelectionConfig.py @@ -62,11 +62,11 @@ def IsoCloseByCorrAlgCfg(flags, name="IsoCloseByCorrAlg", suff = "", isPhysLite elIsoWPs = [ "Loose_VarRad", "TightTrackOnly_FixedRad" ] muIsoWPs = [ "PflowLoose_VarRad", "Loose_VarRad" ] phIsoWPs = [ "FixedCutLoose", "TightCaloOnly" ] + isoTool = result.popToolsAndMerge( IsolationSelectionToolCfg( flags, ElectronWPVec = elIsoWPs, MuonWPVec = muIsoWPs, - PhotonWPVec = phIsoWPs - )) + PhotonWPVec = phIsoWPs)) # Set suffix for writing corrected isolation values isoDecSuffix = "CloseByCorr" selectionDecorator = "isoSelIsOK" @@ -74,8 +74,10 @@ def IsoCloseByCorrAlgCfg(flags, name="IsoCloseByCorrAlg", suff = "", isPhysLite result.popToolsAndMerge(IsoCloseByCorrectionToolCfg(flags, IsolationSelectionTool = isoTool, SelectionDecorator = selectionDecorator, - IsoDecSuffix = isoDecSuffix - ))) + IsoDecSuffix = isoDecSuffix, + EleContainers = [ x for x in containerNames if x.find("Ele") != -1], + MuoContainers = [ x for x in containerNames if x.find("Muo") != -1], + PhoContainers = [ x for x in containerNames if x.find("Pho") != -1]))) # Need muon selection tool to apply Loose - no pt cuts from MuonSelectorTools.MuonSelectorToolsConfig import MuonSelectionToolCfg diff --git a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/share/testIsolation_jobOptions.py b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/share/testIsolation_jobOptions.py deleted file mode 100644 index b76ef655919381835125390cd379df60c5b8134e..0000000000000000000000000000000000000000 --- a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/share/testIsolation_jobOptions.py +++ /dev/null @@ -1,25 +0,0 @@ -# Input file -# inputFile = "/data/atlas/19.X.Y/19.1.4.7_AtlasDerivation/mc14_13TeV/DAOD_TOPQ1.04987437._000035.pool.root.1" -#inputFile = "/home/dzhang/links/SAMPLES/R20/MC15/mc15_13TeV.361107.PowhegPythia8EvtGen_AZNLOCTEQ6L1_Zmumu.recon.AOD.e3601_s2576_s2132_r6630_tid05348608_00/AOD.05348608._004042.pool.root.1" -inputFile = "/afs/cern.ch/user/m/morrisj/scratch0/rtt/DAOD_TOPQ1.MC15.pool.root" - -# n events ( use -1 to process all events ) -nEvents = 20 - -import AthenaPoolCnvSvc.ReadAthenaPool -svcMgr.EventSelector.InputCollections= [ inputFile ] -algseq = CfgMgr.AthSequencer("AthAlgSeq") - -## The Tool -isoTool_2 = CfgMgr.CP__IsolationSelectionTool( "IsolationSelectionTool" ) -isoTool_2.CalibFileName = "IsolationSelection/v1/MC15_Z_Jpsi_cutMap.root" -isoTool_2.MuonWP = "Gradient" -isoTool_2.ElectronWP = "Gradient" -isoTool_2.PhotonWP = "Gradient" -svcMgr.ToolSvc += isoTool_2 - -## Test algorithm -from IsolationSelection.IsolationSelectionConf import CP__TestIsolationAthenaAlg -algseq += CfgMgr.CP__TestIsolationAthenaAlg( IsoTool = isoTool_2 ) - -theApp.EvtMax = nEvents