00001
00002
00003 #pragma once
00004
00005
00006 #include "AsgTools/AsgTool.h"
00007 #include "PATInterfaces/CorrectionTool.h"
00008 #include "PATInterfaces/SystematicVariation.h"
00009
00010
00011 #include "xAODTracking/TrackParticleContainer.h"
00012
00013
00014 #include "InDetTrackSystematicsTools/IInDetTrackSmearingTool.h"
00015 #include "InDetTrackSystematicsTools/InDetTrackSystematicsTool.h"
00016
00017 #include <TFile.h>
00018 #include <TH2F.h>
00019 #include <TF2.h>
00020 #include <TRandom3.h>
00021
00022 namespace InDet {
00023
00024 class InDetTrackSmearingTool
00025 : public virtual IInDetTrackSmearingTool
00026 , public virtual InDetTrackSystematicsTool
00027 , public virtual CP::CorrectionTool< xAOD::TrackParticleContainer >
00028 {
00029
00031 ASG_TOOL_CLASS( InDetTrackSmearingTool,
00032 InDet::IInDetTrackSmearingTool )
00033 public:
00035 InDetTrackSmearingTool( const std::string& name );
00036 virtual ~InDetTrackSmearingTool() = default;
00037
00039 virtual StatusCode initialize();
00041 virtual StatusCode finalize();
00043 virtual CP::CorrectionCode applyCorrection( xAOD::TrackParticle& ID );
00044
00045
00046
00047
00048
00049 virtual CP::CorrectionCode correctedCopy( const xAOD::TrackParticle& in,
00050 xAOD::TrackParticle*& out );
00051 virtual CP::CorrectionCode applyContainerCorrection( xAOD::TrackParticleContainer& cont );
00052
00054 virtual bool isAffectedBySystematic( const CP::SystematicVariation& ) const;
00056 virtual CP::SystematicSet affectingSystematics() const;
00058 virtual CP::SystematicSet recommendedSystematics() const;
00060 virtual CP::SystematicCode applySystematicVariation( const CP::SystematicSet& );
00061
00062 private:
00064 float GetSmearD0Sigma(const xAOD::TrackParticle&);
00065 float GetSmearZ0Sigma(const xAOD::TrackParticle&);
00066
00067 int m_seed = 0;
00068 std::unique_ptr<TRandom3> m_rnd;
00069
00070
00071
00072 float readHistogram( TH2*, float pt, float eta ) const;
00073
00074
00075
00076
00077 TH1* m_smearD0Dead = nullptr;
00078 TH1* m_smearZ0Dead = nullptr;
00079
00080
00081 TH2* m_smearD0 = nullptr;
00082 TH2* m_smearZ0 = nullptr;
00083 TH2* m_smearD0_sys_up = nullptr;
00084 TH2* m_smearZ0_sys_up = nullptr;
00085 TH2* m_smearD0_sys_dw = nullptr;
00086 TH2* m_smearZ0_sys_dw = nullptr;
00087
00088
00089 };
00090
00091 }