Hello, I’m trying to get the total transverse momentum of a lepton pair and I have two methods giving slightly different answers.
The two methods are:
- Create vectors for each lepton, combine them and use .Pt()
- Directly sum the pt values
The leptons can be electrons or muons, e.g. for muons:
//Find pt, eta, phi, energy for muon 1 and 2 (u1 and u2)
pT_u1 = childl1 -> pt(); pT_u2 = childl2 -> pt();
eta_u1 = childl1 -> eta(); eta_u2 = childl2 -> eta();
phi_u1 = childl1 -> phi(); phi_u2 = childl2 -> phi();
e_u1 = childl1 -> e(); e_u2 = childl2 -> e();
//Define vectors
vec_u1 = get_PtEtaPhiEVector(pT_u1, eta_u1, phi_u1, e_u1);
vec_u2 = get_PtEtaPhiEVector(pT_u2, eta_u2, phi_u2, e_u2);
vec_l1l2 = vec_u1 + vec_u2;
//Two methods for the total pt
pT_l1l2_m1 = vec_l1l2.Pt(); //method 1
pT_l1l2_m2 = pT_u1 + pT_u2; //method 2
The difference between values from the two methods is usually small (<1%) but can be up to 10%, which seems larger than just a difference in rounding.
Which method is correct?
Perhaps I am misunderstanding how two transverse momenta should be added, or maybe .Pt() does not do what I expect?
Any help is appreciated!
All variables are initialized earlier in the code and get_PtEtaPhiEVector refers to the function:
// Create PtEtaPhiEVector from doubles
ROOT::Math::PtEtaPhiEVector get_PtEtaPhiEVector(double pT, double eta, double phi, double e){
ROOT::Math::PtEtaPhiEVector particle_vector(pT, eta, phi, e);
return particle_vector;
}
The documentation for LorentzVector
explains .Pt() as “return the transverse spatial component sqrt ( X^2 + Y^2 )”, which seems like it refers to (Px, Py, Pz, E) vectors (apologies if this is something clear from a conversion a different coordinate system)
Cheers,
Matt
ROOT Version: 6.28/10
Platform: lxplus
Compiler: g++ (GCC) 13.1.0