SusyNtuple
SusyNtuple/SusyNtTools.h
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
 All Classes Functions Variables Typedefs Enumerations Enumerator