00001
00002
00003
00004
00005 #ifndef METINTERFACE_IMETSYSTEMATICSTOOL_H
00006 #define METINTERFACE_IMETSYSTEMATICSTOOL_H
00007
00008
00009 #include "AsgTools/IAsgTool.h"
00010 #include "PATInterfaces/ISystematicsTool.h"
00011 #include "PATInterfaces/CorrectionCode.h"
00012
00013
00014 #include "xAODEventInfo/EventInfo.h"
00015 #include "xAODMissingET/MissingET.h"
00016 #include "xAODMissingET/MissingETAssociationMap.h"
00017 #include "xAODJet/JetContainer.h"
00018
00019 namespace met {
00020
00021 namespace softCaloAffSyst {
00022 const static CP::SystematicVariation MET_SoftCalo_ScaleUp ("MET_SoftCalo_ScaleUp" );
00023 const static CP::SystematicVariation MET_SoftCalo_ScaleDown("MET_SoftCalo_ScaleDown");
00024 const static CP::SystematicVariation MET_SoftCalo_Reso ("MET_SoftCalo_Reso");
00025 }
00026
00027 namespace softTrkAffSyst {
00028 const static CP::SystematicVariation MET_SoftTrk_ScaleUp ("MET_SoftTrk_ScaleUp" );
00029 const static CP::SystematicVariation MET_SoftTrk_ScaleDown("MET_SoftTrk_ScaleDown");
00030 const static CP::SystematicVariation MET_SoftTrk_ResoPara ("MET_SoftTrk_ResoPara" );
00031 const static CP::SystematicVariation MET_SoftTrk_ResoPerp ("MET_SoftTrk_ResoPerp" );
00032 const static CP::SystematicVariation MET_SoftTrk_ResoCorr ("MET_SoftTrk_ResoCorr" );
00033 }
00034
00035 namespace jetTrkAffSyst {
00036 const static CP::SystematicVariation MET_JetTrk_ScaleUp ("MET_JetTrk_ScaleUp" );
00037 const static CP::SystematicVariation MET_JetTrk_ScaleDown ("MET_JetTrk_ScaleDown");
00038 }
00039
00040 enum SystType {
00041 INVALID=-1,
00042 SOFTCALO,
00043 SOFTTRK,
00044 JETTRK
00045 };
00046
00047 inline SystType getSystType(const CP::SystematicVariation & systematic)
00048 {
00049 if(systematic == met::softCaloAffSyst::MET_SoftCalo_ScaleUp ||
00050 systematic == met::softCaloAffSyst::MET_SoftCalo_ScaleDown ||
00051 systematic == met::softCaloAffSyst::MET_SoftCalo_Reso ) return SOFTCALO;
00052 if(systematic == met::softTrkAffSyst::MET_SoftTrk_ScaleUp ||
00053 systematic == met::softTrkAffSyst::MET_SoftTrk_ScaleDown ||
00054 systematic == met::softTrkAffSyst::MET_SoftTrk_ResoPara ||
00055 systematic == met::softTrkAffSyst::MET_SoftTrk_ResoPerp ) return SOFTTRK;
00056 if(systematic == met::jetTrkAffSyst::MET_JetTrk_ScaleUp ||
00057 systematic == met::jetTrkAffSyst::MET_JetTrk_ScaleDown ) return JETTRK;
00058 return INVALID;
00059 }
00060
00061 }
00062
00063 class IMETSystematicsTool : virtual public asg::IAsgTool,
00064 virtual public CP::ISystematicsTool
00065 {
00066
00067 ASG_TOOL_INTERFACE( IMETSystematicsTool )
00068
00069 public:
00070 virtual ~IMETSystematicsTool() {}
00071
00072 virtual void setRandomSeed(int seed) const = 0;
00073
00074
00075 virtual CP::CorrectionCode applyCorrection(xAOD::MissingET& met,
00076 const xAOD::MissingETAssociationMap * map=nullptr
00077 ) const = 0;
00078 virtual CP::CorrectionCode correctedCopy(const xAOD::MissingET& met, xAOD::MissingET*& outputmet,
00079 const xAOD::MissingETAssociationMap * map=nullptr
00080 ) const = 0;
00081
00082
00083
00084
00085
00086
00087 };
00088
00089 #endif // METINTERFACE_IMETSYSTEMATICSTOOL_H