1 #include <TLorentzVector.h>
8 const double M_P = 0.938;
9 const double E_BEAM = 120.0;
10 const TLorentzVector
p_beam (0, 0, sqrt(E_BEAM*E_BEAM - M_P*M_P), E_BEAM);
11 const TLorentzVector
p_target(0, 0, 0, M_P);
14 x1 = (p_target*p_sum)/(p_target*p_cms);
15 x2 = (p_beam *p_sum)/(p_beam *p_cms);
55 mass, pT, x1, x2, xF, costh, phi);
59 void UtilDimuon::CalcVar(
const TLorentzVector& p_pos,
const TLorentzVector& p_neg,
double& mass,
double& pT,
double& x1,
double& x2,
double& xF,
double& costh,
double& phi)
61 const Double_t
mp = 0.938;
62 const Double_t
ebeam = 120.;
63 const TLorentzVector
p_beam (0., 0., sqrt(ebeam*ebeam - mp*mp), ebeam);
64 const TLorentzVector
p_target(0., 0., 0., mp);
67 TLorentzVector p_sum = p_pos + p_neg;
70 x1 = (p_target*p_sum)/(p_target*p_cms);
71 x2 = (p_beam *p_sum)/(p_beam *p_cms);
73 Double_t
s = p_cms.M2();
74 Double_t
sqrts = p_cms.M();
75 TVector3
bv_cms = p_cms.BoostVector();
78 xF = 2 * p_sum.Pz() / sqrts / (1 - pow(mass,2) /
s);
79 costh = 2 * (p_neg.E() * p_pos.Pz() - p_pos.E() * p_neg.Pz()) / mass / TMath::Sqrt(pow(mass,2) + pow(pT,2));
80 phi = TMath::ATan(2*TMath::Sqrt(pow(mass,2) + pow(pT,2)) / mass * (p_neg.Px()*p_pos.Py() - p_pos.Px()*p_neg.Py()) / (p_pos.Px()*p_pos.Px() - p_neg.Px()*p_neg.Px() + p_pos.Py()*p_pos.Py() - p_neg.Py()*p_neg.Py()));
void GetX1X2(const SQDimuon *dim, double &x1, double &x2)
void CalcVar(const SQDimuon *dim, double &mass, double &pT, double &x1, double &x2, double &xF, double &costh, double &phi)
Calculate the key kinematic variables of dimuon.
virtual TLorentzVector get_mom_neg() const =0
Return the momentum of the negative track at vertex.
double GetX1(const SQDimuon *dim)
const TLorentzVector p_beam(0., 0., TMath::Sqrt(ebeam *ebeam-mp *mp), ebeam)
virtual TLorentzVector get_mom_pos() const =0
Return the momentum of the positive track at vertex.
double GetX2(const SQDimuon *dim)
const TLorentzVector p_cms
const TLorentzVector p_target(0., 0., 0., mp)
An SQ interface class to hold one true or reconstructed dimuon.