#ifndef HEP_HepTopDecay
#define HEP_HepTopDecay
#ifndef ROOT_TClass
#include <TClass.h>
#endif
#ifndef HEP_HepDecayParticle
#include <HepDecayParticle.h>
#endif
#ifndef HEP_HepJet
#include <HepJet.h>
#endif
#ifndef HEP_HepWDecay
#include <HepWDecay.h>
#endif
#ifndef HEP_HepMCParticle
#include <HepMCParticle.h>
#endif
class HepTopDecay : public HepDecayParticle {
public:
enum ProductionMode { kTTBar,
kSgTop_tChannel,
kSgTop_sChannel,
kSgTop_WtChannel,
kOther };
protected:
TRef *fWDecay;
TRef *fBJetOrig;
TRef *fTruthTop;
TLorentzVector fP_BJet;
ProductionMode fMode;
public:
HepTopDecay();
HepTopDecay(Int_t Id, Float_t Px_T, Float_t Py_T, Float_t Pz_T,
Float_t E_T, HepWDecay *WDecay, HepJet *BJetOrig,
Float_t Px_j, Float_t Py_j, Float_t Pz_j, Float_t E_j,
ProductionMode mode);
virtual ~HepTopDecay();
virtual void Clear(Option_t *option = "");
virtual Int_t Compare(const TObject *obj) const;
virtual void Print(Option_t *option = "");
inline virtual Bool_t IsSortable() const { return kTRUE; }
inline Bool_t IsTTBar() {
if ( fMode == kTTBar ) return kTRUE;
return kFALSE;
}
inline Bool_t IsSgTop_tChannel() {
if ( fMode == kSgTop_tChannel ) return kTRUE;
return kFALSE;
}
inline Bool_t IsSgTop_sChannel() {
if ( fMode == kSgTop_sChannel ) return kTRUE;
return kFALSE;
}
inline Bool_t IsSgTop_WtChannel() {
if ( fMode == kSgTop_WtChannel ) return kTRUE;
return kFALSE;
}
inline HepWDecay* GetWDecay() const {
return (HepWDecay*)fWDecay->GetObject();
}
inline HepJet* GetBJetOrig() const {
return (HepJet*)fBJetOrig->GetObject();
}
inline TLorentzVector GetP_BJet() const {
return fP_BJet;
}
inline Bool_t IsHadronicDecay() const {
return GetWDecay()->IsHadronicDecay();
}
inline Bool_t IsSemiLeptonicDecay() const {
return GetWDecay()->IsLeptonicDecay();
}
inline HepMCParticle* GetTruthTop() const {
return (HepMCParticle*)fTruthTop->GetObject();
}
inline void SetTruthTop(HepMCParticle *TruthTop)
{ *fTruthTop = (TObject*)TruthTop;}
inline void SetMode(ProductionMode mode) { fMode = mode; }
ClassDef(HepTopDecay,6)
};
#endif