00001
00002 #pragma once
00003
00004 #include "InDetTrackSystematicsTools/IInDetTrackTruthFilterTool.h"
00005 #include "AsgTools/AsgTool.h"
00006 #include "AsgTools/ToolHandle.h"
00007 #include "PATInterfaces/SystematicVariation.h"
00008 #include "PATInterfaces/SystematicSet.h"
00009 #include "InDetTrackSystematicsTools/InDetTrackSystematicsTool.h"
00010
00011 #include "xAODTracking/TrackParticle.h"
00012 #include <string>
00013
00014 class TH2;
00015 class TRandom3;
00016 class TFile;
00017
00018 namespace InDet {
00019
00020 class IInDetTrackTruthOriginTool;
00021
00026
00027 class InDetTrackTruthFilterTool
00028 : public virtual IInDetTrackTruthFilterTool
00029 , public virtual InDetTrackSystematicsTool
00030
00031 {
00032
00033
00034 ASG_TOOL_CLASS( InDetTrackTruthFilterTool,
00035 InDet::IInDetTrackTruthFilterTool )
00036
00037 public:
00038
00039 InDetTrackTruthFilterTool( const std::string& name );
00040 virtual ~InDetTrackTruthFilterTool() = default;
00041
00042
00043 virtual StatusCode initialize() override;
00044 virtual void prepare() override {};
00045 virtual StatusCode finalize() override;
00046
00047
00048 virtual bool accept(const xAOD::TrackParticle* track) const override;
00049 virtual bool selectTrack(const xAOD::TrackParticle* track) const override
00050 __attribute__ ((deprecated("Use accept(track) instead to conform with AsgSelectionTool interface")));
00051
00053 virtual bool isAffectedBySystematic( const CP::SystematicVariation& ) const;
00055 virtual CP::SystematicSet affectingSystematics() const;
00057 virtual CP::SystematicSet recommendedSystematics() const;
00059 virtual CP::SystematicCode applySystematicVariation( const CP::SystematicSet& );
00060
00061 private:
00062
00063 StatusCode initTrkEffSystHistogram(float scale, TH2 *&histogram, std::string rootFileName, std::string histogramName) const;
00064 float getFractionDropped(float fDefault, TH2 *histogram, float pt, float eta) const;
00065
00066 int m_seed = 0;
00067 std::unique_ptr<TRandom3> m_rnd;
00068
00069 float m_fPrim = 1.;
00070 float m_fSec = 1.;
00071 float m_fFakeLoose = 0.29;
00072 float m_fFakeTight = 1.61;
00073 float m_fPU = 1.;
00074 float m_fFrag = 1.;
00075 float m_fFromC = 1.;
00076 float m_fFromB = 1.;
00077 float m_trkEffSystScale = 1.;
00078
00079 TH2 *m_fPrimHistogram = nullptr;
00080 TH2 *m_fSecHistogram = nullptr;
00081
00082 TH2 *m_fPUHistogram = nullptr;
00083 TH2 *m_fFragHistogram = nullptr;
00084 TH2 *m_fFromCHistogram = nullptr;
00085 TH2 *m_fFromBHistogram = nullptr;
00086
00087
00088 TH2* m_trkEffHistLooseGlobal = nullptr;
00089 TH2* m_trkEffHistLooseIBL = nullptr;
00090 TH2* m_trkEffHistLoosePP0 = nullptr;
00091 TH2* m_trkEffHistLoosePhysModel = nullptr;
00092 TH2* m_trkEffHistTightGlobal = nullptr;
00093 TH2* m_trkEffHistTightIBL = nullptr;
00094 TH2* m_trkEffHistTightPP0 = nullptr;
00095 TH2* m_trkEffHistTightPhysModel = nullptr;
00096
00097 ToolHandle< IInDetTrackTruthOriginTool > m_trackOriginTool;
00098
00099
00100 };
00101
00102 }