#ifndef HEP_Hep2BodyDecay
#include <Hep2BodyDecay.h>
#endif
#ifndef HEP_HepVtxTrackHelix
#include <HepVtxTrackHelix.h>
#endif
#include <HepVertex.h>
#ifndef __CINT__
ClassImp(Hep2BodyDecay);
#endif
Hep2BodyDecay::Hep2BodyDecay() {
fDaughter1 = new TRef;
fDaughter2 = new TRef;
fVtx = new TRef;
}
Hep2BodyDecay::Hep2BodyDecay(Int_t Id, Float_t Px, Float_t Py, Float_t Pz,
Float_t E, TObject *Daughter1, TObject *Daughter2,
HepVertex *DecayVtx, HepVertex *PrimaryVtx,
HepParticle ReFitDaughter1, HepParticle ReFitDaughter2) :
HepDecayParticle(Id, Px, Py, Pz, E, 0) {
fDaughter1 = new TRef; *fDaughter1 = Daughter1;
fDaughter2 = new TRef; *fDaughter2 = Daughter2;
fVtx = new TRef; *fVtx = (TObject*)DecayVtx;
fReFitDaughter1 = ReFitDaughter1;
fReFitDaughter2 = ReFitDaughter2;
fHasSharedTracks = kFALSE;
TVector3 d = PrimaryVtx->GetPos() - DecayVtx->GetPos();
fDecayLength = d.Mag();
fTransvDecayLength = d.Perp();
TLorentzVector p = ReFitDaughter1.P() + ReFitDaughter2.P();
TVector3 o = DecayVtx->GetPos() - PrimaryVtx->GetPos();
fAngleToPrim = p.Angle(o);
fOpeningAngle = ReFitDaughter1.P().Angle(ReFitDaughter2.P().Vect());
TLorentzVector PDaughter1 = ReFitDaughter1.P();
PDaughter1.Boost(-P().BoostVector());
fDecayAngle = P().Angle(PDaughter1.Vect());
}
Hep2BodyDecay::~Hep2BodyDecay() {
delete fDaughter1;
delete fDaughter2;
delete fVtx;
}
void Hep2BodyDecay::Clear(Option_t *option) {
HepDecayParticle::Clear(option);
delete fDaughter1; fDaughter1 = 0;
delete fDaughter2; fDaughter2 = 0;
delete fVtx; fVtx = 0;
fDecayLength = 0.;
fTransvDecayLength = 0;
fReFitDaughter1.Clear();
fReFitDaughter2.Clear();
}
Float_t Hep2BodyDecay::GetLifeTime() {
Double_t BetaGamma = Pmag()/M("pdg");
return GetDecayLength()/(BetaGamma*TMath::Ccgs())*1.e12;
}