00001 #ifndef ISOLATIONCORRECTION_IISOLATIONCORRECTIONTOOL_H 00002 #define ISOLATIONCORRECTION_IISOLATIONCORRECTIONTOOL_H 00003 00004 #include "AsgTools/IAsgTool.h" 00005 //xAOD 00006 #include "xAODEgamma/Egamma.h" 00007 00008 #include "PATInterfaces/CorrectionCode.h" 00009 #include "PATInterfaces/ISystematicsTool.h" 00010 00011 // PAT includes 00012 #include "PATCore/PATCoreEnums.h" 00013 00014 #include "xAODPrimitives/IsolationType.h" 00015 00016 namespace CP { 00017 00018 class IIsolationCorrectionTool : virtual public asg::IAsgTool, virtual public CP::ISystematicsTool { 00019 // Declare the interface that the class provides 00020 ASG_TOOL_INTERFACE(IIsolationCorrectionTool) 00021 00022 public: 00023 00024 virtual ~IIsolationCorrectionTool() {}; 00025 00026 virtual StatusCode initialize() = 0; 00027 00028 //Apply the correction on a modifyable egamma object (xAOD::Electron or xAOD::Photon) 00029 virtual CP::CorrectionCode applyCorrection(xAOD::Egamma &) = 0; 00030 00031 //Create a corrected copy from a constant egamma object 00032 virtual CP::CorrectionCode correctedCopy(const xAOD::Egamma&, xAOD::Egamma*&) = 0; 00033 00034 // This helps to correct for the (wrong) leakage at the analysis level 00035 virtual CP::CorrectionCode CorrectLeakage(xAOD::Egamma &) = 0; 00036 00037 //systematics 00038 // Which systematics have an effect on the tool's behaviour? 00039 virtual CP::SystematicSet affectingSystematics() const = 0; 00040 // Is the tool affected by a specific systematic? 00041 virtual bool isAffectedBySystematic( const CP::SystematicVariation& systematic ) const = 0; 00042 //Systematics to be used for physics analysis 00043 virtual CP::SystematicSet recommendedSystematics() const = 0; 00044 //Use specific systematic 00045 virtual CP::SystematicCode applySystematicVariation ( const CP::SystematicSet& systConfig ) = 0; 00046 00047 virtual float GetPtCorrectedIsolation(const xAOD::Egamma&, xAOD::Iso::IsolationType) = 0; 00048 virtual float GetPtCorrection(const xAOD::Egamma&, xAOD::Iso::IsolationType) const = 0; 00049 virtual float GetDDCorrection(const xAOD::Egamma&, xAOD::Iso::IsolationType) = 0; 00050 00051 }; 00052 00053 } 00054 00055 #endif //ISOLATIONCORRECTION_IISOLATIONCORRECTIONTOOL_H