00001 #ifndef QUICK_ANA__TOPMUON_TOOL_H 00002 #define QUICK_ANA__TOPMUON_TOOL_H 00003 00004 00005 // This module still needs to be documented. The interface provided 00006 // in this module is intended for experts only. The module is 00007 // considered to be in the pre-alpha stage. 00008 00009 // It is flexible enough to provide: 00010 // Defintions corresponding to the default top group object selection(s) 00011 // (as implemented in the AnalysisTop packages) 00012 // Definitions for some other analyses that use slightly modified object selections 00013 // (e.g., Top/Exotics SS+bjets) 00014 00015 00016 00017 #include <QuickAna/Global.h> 00018 00019 #include <AsgTools/AnaToolHandle.h> 00020 #include <QuickAna/AnaToolCorrect.h> 00021 #include <QuickAna/AnaToolSelect.h> 00022 #include <QuickAna/SelectionCut.h> 00023 00024 // #include <QuickAna/IsolationTools.h> 00025 00026 namespace CP 00027 { 00028 class IMuonSelectionTool; 00029 } 00030 00031 namespace ana 00032 { 00034 class TopMuonToolPreCorrect : public AnaToolCorrect<xAOD::MuonContainer> 00035 { 00036 // 00037 // public interface 00038 // 00039 00040 ASG_TOOL_CLASS (TopMuonToolPreCorrect, ana::IAnaTool) 00041 00042 00043 00044 00045 00046 public: 00047 TopMuonToolPreCorrect (const std::string& name); 00048 00049 00051 public: 00052 virtual AnalysisStep step () const override; 00053 00054 00058 public: 00059 StatusCode initialize() override; 00060 00061 00066 public: 00067 virtual StatusCode 00068 correctObject (xAOD::Muon& muon) override; 00069 00070 00071 private: 00072 bool trackSelector(const xAOD::TrackParticle &trk); 00073 }; 00074 00075 00076 00077 class TopMuonToolSelect : public AnaToolSelect<xAOD::MuonContainer> 00078 { 00079 // 00080 // public interface 00081 // 00082 00083 ASG_TOOL_CLASS (TopMuonToolSelect, ana::IAnaTool) 00084 00085 00086 00087 00088 00089 public: 00090 TopMuonToolSelect (const std::string& name); 00091 00092 00096 public: 00097 StatusCode initialize() override; 00098 00099 00103 public: 00104 virtual StatusCode 00105 selectObject (xAOD::Muon& muon) override; 00106 00107 00109 public: 00110 xAOD::Muon::Quality m_quality; 00111 00113 public: 00114 xAOD::Muon::Author m_author; 00115 00117 public: 00118 std::unique_ptr<IsolationBase> m_isolation; 00119 00121 public: 00122 double m_z0cut; 00123 00125 public: 00126 double m_sd0cut; 00127 00129 public: 00130 asg::AnaToolHandle<CP::IMuonSelectionTool> m_selection; 00131 00132 private: 00133 SelectionCut cut_selection; 00134 SelectionCut cut_author; 00135 SelectionCut cut_minPt; 00136 SelectionCut cut_maxEta; 00137 SelectionCut cut_z0; 00138 SelectionCut cut_sd0; 00139 SelectionCut cut_isolation; 00140 }; 00141 00142 StatusCode makeTopMuonTool (DefinitionArgs& args, 00143 xAOD::Muon::Quality quality = xAOD::Muon::Tight, 00144 xAOD::Muon::Author author = xAOD::Muon::MuidCo, 00145 IsolationBase* isolation = nullptr, 00146 double z0cut = -1., 00147 double sd0cut = -1.); 00148 } 00149 00150 #endif