SusyNtuple
|
00001 #ifndef SusyNtuple_SusyNtTools_h 00002 #define SusyNtuple_SusyNtTools_h 00003 00004 // std 00005 #include <iostream> 00006 00007 // SusyNtuple 00008 #include "SusyNtuple/SusyDefs.h" 00009 #include "SusyNtuple/AnalysisType.h" 00010 #include "SusyNtuple/SusyNt.h" 00011 #include "SusyNtuple/SusyNtObject.h" 00012 #include "SusyNtuple/MCWeighter.h" 00013 #include "SusyNtuple/JetSelector.h" 00014 #include "SusyNtuple/MuonSelector.h" 00015 #include "SusyNtuple/ElectronSelector.h" 00016 #include "SusyNtuple/OverlapTools.h" 00017 #include "SusyNtuple/TauSelector.h" 00018 #include "SusyNtuple/TauId.h" 00019 #include "SusyNtuple/TriggerTools.h" 00020 00021 // SUSYTools 00022 #include "SUSYTools/SUSYCrossSection.h" 00023 00024 using namespace Susy; 00025 using namespace NtSys; 00026 00028 class SusyNtTools { 00029 public: 00030 00032 SusyNtTools(); 00033 virtual ~SusyNtTools(); 00034 00035 void setSFOSRemoval(AnalysisType A); 00036 bool doSFOSRemoval() { return m_doSFOS; } 00037 void removeSFOSPairs(ElectronVector& baseElectrons, MuonVector& baseMuons); 00038 00043 void setAnaType(AnalysisType A, bool verbose = false); 00044 AnalysisType getAnaType() { return m_anaType; } 00045 00047 00053 bool initTriggerTool(const std::string &anyInputFilename); 00054 00055 // 00056 // Methods to return the tools 00057 // 00058 ElectronSelector& electronSelector() { return *m_electronSelector; } 00059 MuonSelector& muonSelector() { return *m_muonSelector; } 00060 TauSelector& tauSelector() { return *m_tauSelector; } 00061 JetSelector& jetSelector() { return *m_jetSelector; } 00062 OverlapTools& overlapTool() { return *m_overlapTool; } 00063 TriggerTools& triggerTool() { return m_triggerTool; } 00064 00065 // 00066 // Methods to perform event selection 00067 // 00068 bool passGRL(int flags); 00069 bool passLarErr(int flags); 00070 bool passTileErr(int flags); 00071 bool passTTC(int flags); 00072 bool passGoodVtx(int flags); 00073 bool passBadMuon(const MuonVector* preMuons) { return SusyNtTools::passBadMuon(*preMuons); } 00074 bool passBadMuon(const MuonVector& preMuons); 00075 bool passCosmicMuon(const MuonVector* baseMuons) { return SusyNtTools::passCosmicMuon(*baseMuons); } 00076 bool passCosmicMuon(const MuonVector& baseMuons); 00077 bool passJetCleaning(const JetVector* preJets) { return SusyNtTools::passJetCleaning(*preJets); } 00078 bool passJetCleaning(const JetVector& preJets); 00079 00080 // 00081 // Methods to grab objects based on systematic shift desired 00082 // 00083 00086 ElectronVector getPreElectrons(Susy::SusyNtObject* susyNt, SusyNtSys sys); 00087 MuonVector getPreMuons(Susy::SusyNtObject* susyNt, SusyNtSys sys); 00088 TauVector getPreTaus(Susy::SusyNtObject* susyNt, SusyNtSys sys); 00089 JetVector getPreJets(Susy::SusyNtObject* susyNt, SusyNtSys sys); 00090 00092 ElectronVector getBaselineElectrons(const ElectronVector& preElectrons); 00093 MuonVector getBaselineMuons(const MuonVector& preMuons); 00094 TauVector getBaselineTaus(const TauVector& preTaus); 00095 JetVector getBaselineJets(const JetVector& preJets); 00096 00100 void getPreObjects(Susy::SusyNtObject* susyNt, SusyNtSys sys, 00101 ElectronVector& preElectrons, 00102 MuonVector& preMuons, 00103 JetVector& preJets, 00104 TauVector& preTaus); 00105 00107 void getBaselineObjects(const ElectronVector& preElectrons, const MuonVector& preMuons, const JetVector& preJets, const TauVector& preTaus, 00108 ElectronVector& baseElectrons, MuonVector& baseMuons, JetVector& baseJets, TauVector& baseTaus); 00110 void getSignalObjects(const ElectronVector& baseElectrons, const MuonVector& baseMuons, const JetVector& baseJets, const TauVector& baseTaus, 00111 ElectronVector& signalElectrons, MuonVector& signalMuons, JetVector& signalJets, TauVector& signalTaus, TauId& sigTauId); 00112 00113 00115 ElectronVector getSignalElectrons(const ElectronVector& baseElecs); 00116 MuonVector getSignalMuons(const MuonVector& baseMuons); 00117 PhotonVector getSignalPhotons(Susy::SusyNtObject* susyNt); 00118 TauVector getSignalTaus(const TauVector& baseTaus); 00119 JetVector getSignalJets(const JetVector& baseJets); 00120 00122 bool isSignal(const Susy::Lepton* l); 00123 bool isSignal(const Susy::Electron* e); 00124 bool isSignal(const Susy::Muon* m); 00125 bool isSignal(const Susy::Tau* tau); 00126 00128 void buildLeptons(LeptonVector &lep, const ElectronVector& ele, const MuonVector& muo); 00129 00131 Susy::Met* getMet(Susy::SusyNtObject* susyNt, SusyNtSys sys); 00132 Susy::TrackMet* getTrackMet(Susy::SusyNtObject* susyNt, SusyNtSys sys); 00133 00134 // 00135 // Methods to get useful quantities for event, leptons, or jets 00136 // 00137 00138 // B jets 00139 int numBJets(const JetVector& jets); 00140 bool hasBJet(const JetVector& jets); 00141 JetVector getBJets(const JetVector& jets); 00142 00143 00144 int numberOfCLJets(const JetVector& jets); 00145 int numberOfCBJets(const JetVector& jets); 00146 int numberOfFJets(const JetVector& jets); 00147 00149 // Methods to grab obect SF 00151 00153 float bTagSF(const JetVector& jets); 00154 00156 float leptonEffSF(const LeptonVector& leps); 00157 00159 float leptonEffSF(const Lepton* lep) { return leptonEffSF(*lep); } 00160 float leptonEffSF(const Lepton& lep); 00161 00163 float leptonEffSFError(const Lepton* lep, const NtSys::SusyNtSys sys) { return leptonEffSFError(*lep, sys); } 00164 float leptonEffSFError(const Lepton& lep, const NtSys::SusyNtSys sys); 00165 00166 // 00167 // Object printing 00168 // 00169 00171 template<class T> void dumpObjects(const std::vector<T>& objects) 00172 { 00173 for (unsigned int i = 0; i < objects.size(); i++) { 00174 std::cout << i << " "; 00175 objects[i].print(); 00176 } 00177 } 00178 template<class T> void dumpObjects(const std::vector<T*>& objects) 00179 { 00180 for (unsigned int i = 0; i < objects.size(); i++) { 00181 std::cout << i << " "; 00182 objects[i]->print(); 00183 } 00184 } 00185 00186 // \todo make these datamembers protected 00187 // Object Selectors and Tools 00188 ElectronSelector* m_electronSelector; 00189 MuonSelector* m_muonSelector; 00190 TauSelector* m_tauSelector; 00191 JetSelector* m_jetSelector; 00192 OverlapTools* m_overlapTool; 00193 TriggerTools m_triggerTool; 00194 00195 protected: 00196 00197 AnalysisType m_anaType; 00198 bool m_doSFOS; 00199 }; 00200 00201 #endif