File indexing completed on 2024-09-07 04:34:43
0001 #ifndef TopObjects_TopGenEvent_h
0002 #define TopObjects_TopGenEvent_h
0003
0004 #include "DataFormats/Candidate/interface/Candidate.h"
0005 #include "DataFormats/HepMCCandidate/interface/GenParticle.h"
0006
0007 namespace TopDecayID {
0008
0009
0010 static const int stable = 2;
0011 static const int unfrag = 3;
0012 static const int tID = 6;
0013 static const int bID = 5;
0014 static const int glueID = 21;
0015 static const int photID = 22;
0016 static const int ZID = 23;
0017 static const int WID = 24;
0018 static const int elecID = 11;
0019 static const int muonID = 13;
0020 static const int tauID = 15;
0021 }
0022
0023 namespace WDecay {
0024
0025
0026
0027 enum LeptonType { kNone, kElec, kMuon, kTau };
0028 }
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040 class TopGenEvent {
0041 public:
0042
0043 TopGenEvent() {}
0044
0045 TopGenEvent(reco::GenParticleRefProd& decaySubset, reco::GenParticleRefProd& iniSubset);
0046
0047 virtual ~TopGenEvent() {}
0048
0049
0050 const reco::GenParticleCollection& particles() const { return *parts_; }
0051
0052 const reco::GenParticleCollection& initialPartons() const { return *initPartons_; }
0053
0054 std::vector<const reco::GenParticle*> radiatedGluons(int pdgId) const;
0055
0056 std::vector<const reco::GenParticle*> lightQuarks(bool includingBQuarks = false) const;
0057
0058 int numberOfLeptons(bool fromWBoson = true) const;
0059
0060 int numberOfLeptons(WDecay::LeptonType type, bool fromWBoson = true) const;
0061
0062 int numberOfBQuarks(bool fromTopQuark = true) const;
0063
0064 std::vector<const reco::GenParticle*> topSisters() const;
0065
0066 const reco::GenParticle* daughterQuarkOfTop(bool invertCharge = false) const;
0067
0068 const reco::GenParticle* daughterQuarkOfTopBar() const { return daughterQuarkOfTop(true); };
0069
0070 const reco::GenParticle* daughterQuarkOfWPlus(bool invertQuarkCharge = false, bool invertBosonCharge = false) const;
0071
0072 const reco::GenParticle* daughterQuarkOfWMinus() const { return daughterQuarkOfWPlus(false, true); };
0073
0074 const reco::GenParticle* daughterQuarkBarOfWPlus() const { return daughterQuarkOfWPlus(true, false); };
0075
0076 const reco::GenParticle* daughterQuarkBarOfWMinus() const { return daughterQuarkOfWPlus(true, true); };
0077
0078
0079 const reco::GenParticle* candidate(int id, unsigned int parentId = 0) const;
0080
0081 const reco::GenParticle* eMinus() const { return candidate(TopDecayID::elecID, TopDecayID::WID); }
0082
0083 const reco::GenParticle* ePlus() const { return candidate(-TopDecayID::elecID, TopDecayID::WID); }
0084
0085 const reco::GenParticle* muMinus() const { return candidate(TopDecayID::muonID, TopDecayID::WID); }
0086
0087 const reco::GenParticle* muPlus() const { return candidate(-TopDecayID::muonID, TopDecayID::WID); }
0088
0089 const reco::GenParticle* tauMinus() const { return candidate(TopDecayID::tauID, TopDecayID::WID); }
0090
0091 const reco::GenParticle* tauPlus() const { return candidate(-TopDecayID::tauID, TopDecayID::WID); }
0092
0093 const reco::GenParticle* wMinus() const { return candidate(-TopDecayID::WID, TopDecayID::tID); }
0094
0095 const reco::GenParticle* wPlus() const { return candidate(TopDecayID::WID, TopDecayID::tID); }
0096
0097 const reco::GenParticle* b() const { return candidate(TopDecayID::bID, TopDecayID::tID); }
0098
0099 const reco::GenParticle* bBar() const { return candidate(-TopDecayID::bID, TopDecayID::tID); }
0100
0101 const reco::GenParticle* top() const { return candidate(TopDecayID::tID); }
0102
0103 const reco::GenParticle* topBar() const { return candidate(-TopDecayID::tID); }
0104
0105
0106
0107 void print() const;
0108
0109 protected:
0110
0111 reco::GenParticleRefProd parts_;
0112
0113 reco::GenParticleRefProd initPartons_;
0114 };
0115
0116 #endif