00001 // Dear emacs, this is -*- c++ -*- 00002 // $Id: MuonSmearingToolExample.h 300810 2014-06-06 12:28:18Z krasznaa $ 00003 #ifndef CPANALYSISEXAMPLES_MUONSMEARINGTOOL_H 00004 #define CPANALYSISEXAMPLES_MUONSMEARINGTOOL_H 00005 00006 // Rationale: temporary suppression of 00007 // unused-local-typedef warning in Boost header 00008 #pragma GCC diagnostic push 00009 #pragma GCC diagnostic ignored "-Wunused-local-typedefs" 00010 #include "boost/tuple/tuple.hpp" 00011 #pragma GCC diagnostic pop 00012 00013 // Framework include(s): 00014 #include "AsgTools/AsgTool.h" 00015 #include "PATInterfaces/SystematicsTool.h" 00016 #include "PATInterfaces/CorrectionTool.h" 00017 00018 // EDM include(s): 00019 #include "xAODMuon/MuonContainer.h" 00020 00021 // Local include(s): 00022 #include "CPAnalysisExamples/IMuonSmearingToolExample.h" 00023 00024 namespace CP { 00025 00026 class SystematicSet; 00027 00038 class MuonSmearingToolExample : public virtual IMuonSmearingToolExample, 00039 public virtual CP::SystematicsTool, 00040 public virtual CP::CorrectionTool< xAOD::MuonContainer >, 00041 public asg::AsgTool { 00042 00044 ASG_TOOL_CLASS2( MuonSmearingToolExample, CP::ISystematicsTool, 00045 CP::IMuonSmearingToolExample ) 00046 00047 public: 00049 MuonSmearingToolExample( const std::string& name ); 00050 00053 00055 virtual StatusCode initialize(); 00056 00058 00061 00063 virtual CorrectionCode applyCorrection( xAOD::Muon& mu ); 00064 00066 virtual CorrectionCode correctedCopy( const xAOD::Muon& input, 00067 xAOD::Muon*& output ) { 00068 return CP::CorrectionTool< xAOD::MuonContainer >:: 00069 correctedCopy( input, output ); 00070 } 00071 00073 00074 protected: 00076 virtual SystematicCode sysApplySystematicVariation 00077 ( const SystematicSet & systConfig ); 00078 00079 }; // class MuonSmearingToolExample 00080 00081 } // namespace CP 00082 00083 #endif // CPANALYSISEXAMPLES_MUONSMEARINGTOOL_H