13void Kinematics::GetCSFAngles(
const TLorentzVector &lep1,
const int &charge1,
const TLorentzVector &lep2,
double ebeam,
double &costh,
double &phi)
16 TLorentzVector boson = lep1 + lep2;
17 double Lplus = (charge1 < 0) ? lep1.E() + lep1.Pz() : lep2.E() + lep2.Pz();
18 double Lminus = (charge1 < 0) ? lep1.E() - lep1.Pz() : lep2.E() - lep2.Pz();
19 double Pplus = (charge1 < 0) ? lep2.E() + lep2.Pz() : lep1.E() + lep1.Pz();
20 double Pminus = (charge1 < 0) ? lep2.E() - lep2.Pz() : lep1.E() - lep1.Pz();
22 costh = (Lplus * Pminus - Lminus * Pplus);
23 costh *= TMath::Abs(boson.Pz());
24 costh /= (boson.Mag() * boson.Pz());
25 costh /= TMath::Sqrt(boson.Mag2() + boson.Pt() * boson.Pt());
27 TVector3 boostV = -boson.BoostVector();
28 TLorentzVector lep1_boosted = (charge1 < 0) ? lep1 : lep2;
29 lep1_boosted.Boost(boostV);
31 TVector3 CSAxis, xAxis, yAxis;
32 TLorentzVector p1, p2;
36 p1.SetXYZM(0., 0., sign * ebeam, 0.938);
37 p2.SetXYZM(0., 0., -sign * ebeam, 0.938);
41 CSAxis = (p1.Vect().Unit() - p2.Vect().Unit()).Unit();
42 yAxis = (p1.Vect().Unit()).Cross(p2.Vect().Unit());
44 xAxis = yAxis.Cross(CSAxis);
47 phi = TMath::ATan2(lep1_boosted.Vect() * yAxis, lep1_boosted.Vect() * xAxis);
56void Kinematics::GetBDFAngles(
const TLorentzVector &lep1,
const int &charge1,
const TLorentzVector &lep2,
double &costh,
double &phi)
58 const TLorentzVector dilep = lep1 + lep2;
60 double cosThetap = (charge1 > 0) ? TMath::TanH((lep2.Eta() - lep1.Eta()) / 2.) : TMath::TanH((lep1.Eta() - lep2.Eta()) / 2.);
61 costh = (dilep.Rapidity() < 0) ? -cosThetap : cosThetap;
63 double sintheta = TMath::Sqrt(1. - costh * costh);
64 double phiacop = TMath::Pi() - TVector2::Phi_mpi_pi(lep1.Phi() - lep2.Phi());
65 phi = TMath::Tan(phiacop / 2) * sintheta;
74void Kinematics::GetVHFAngles(
const TLorentzVector &lep1,
const int &charge1,
const TLorentzVector &lep2,
double &costh,
double &phi)
77 TLorentzVector boson = lep1 + lep2;
78 TVector3 boostV = boson.BoostVector();
79 TLorentzVector lep1_boosted = (charge1 > 0) ? lep2 : lep1;
80 lep1_boosted.Boost(-boostV);
81 phi = TVector2::Phi_mpi_pi(lep1_boosted.Phi() - boson.Phi());
82 double theta = lep1_boosted.Angle(boson.Vect());
84 costh = TMath::Cos(theta);
96 double theta = TMath::ACos(costh);
97 double sintheta = TMath::Sin(theta);
98 double sin2theta = TMath::Sin(2.0 * theta);
100 double cosphi = TMath::Cos(phi);
101 double cos2phi = TMath::Cos(2.0 * phi);
102 double sinphi = TMath::Sin(phi);
103 double sin2phi = TMath::Sin(2.0 * phi);
105 aipols[0] = 0.5 - 1.5 * costh * costh;
106 aipols[1] = sin2theta * cosphi;
107 aipols[2] = sintheta * sintheta * cos2phi;
108 aipols[3] = sintheta * cosphi;
110 aipols[5] = sintheta * sintheta * sin2phi;
111 aipols[6] = sin2theta * sinphi;
112 aipols[7] = sintheta * sinphi;
121 std::vector<double> aipols(8, 0);
123 double theta = TMath::ACos(costh);
124 double sintheta = TMath::Sin(theta);
125 double sin2theta = TMath::Sin(2.0 * theta);
127 double cosphi = TMath::Cos(phi);
128 double cos2phi = TMath::Cos(2.0 * phi);
129 double sinphi = TMath::Sin(phi);
130 double sin2phi = TMath::Sin(2.0 * phi);
132 aipols[0] = 0.5 - 1.5 * costh * costh;
133 aipols[1] = sin2theta * cosphi;
134 aipols[2] = sintheta * sintheta * cos2phi;
135 aipols[3] = sintheta * cosphi;
137 aipols[5] = sintheta * sintheta * sin2phi;
138 aipols[6] = sin2theta * sinphi;
139 aipols[7] = sintheta * sinphi;
static void GetCSFAngles(const TLorentzVector &lep1, const int &charge1, const TLorentzVector &lep2, double ebeam, double &costh, double &phi)
Calculate the decay angles in the Collins-Soper Frame.
static void GetVHFAngles(const TLorentzVector &lep1, const int &charge1, const TLorentzVector &lep2, double &costh, double &phi)
Calculate the decay angles in the Vector Boson Helicity Frame.
static void GetBDFAngles(const TLorentzVector &tlv1, const int &charge1, const TLorentzVector &tlv2, double &costh, double &phi)
Calculate the decay angles in the Beam Direction Frame.