Dear all,
actually I'm working on a problem but I either can not the error in my code or I don't understand the documentation of this. I have actually a particle m which decays into two particles p1 and p2. I assume momentum conservation and want to boost p1 back into the decay frame of m. Therefore I assign m, p1 and p2 as TLorentzVector and try to use the p1.Boost(b) routine, where b is the spacial part of the TLorentzVector of m. I use the following code (assuming that p1 and p2 are correctly assigned and non-zero filled TLorentzVectors)
// assuming momentum conservation:
TLorentzVector m = p1 + p2;
// getting the spacial components:
TVector3 b;
b.SetXYZ(m.X(),m.Y(),m.Z());
// now boost p1 back into decay frame of m
p1.Boost(b);
The result is that my p1-vector has entries with NAN, thus I don't
understand what is actually wrong. I also tried to use (instead of
explicitly assigning of b) the following:
// assign b as Boostvector of m
TVector3 b;
b = m.BoostVector();
// boost
p1.Boost(b);
After this all my previous tests didn't worked at all, therefore I have written down a routine with the informations of the ROOT-documentation of that method:
TLorentzVector VecBoost(TLorentzVector vboost, TLorentzVector vdecay){
TLorentzVector vresult;
// assign the boost-vector;
TVector3 bprim = vboost.BoostVector();
// back boost into decay frame
TVector3 b = -bprim;
TVector3 x,xprim;
double gamma, beta2, t,tprim;
beta2 = b.X()*b.X()+b.Y()*b.Y()+b.Z()*b.Z();
gamma = pow(1-beta2,-0.5);
xprim.SetXYZ(vdecay.X(),vdecay.Y(),vdecay.Z());
tprim = vdecay.T();
t = gamma*(tprim+b*xprim);
x = xprim+ (gamma-1)/beta2 * (b*xprim)*b + gamma*tprim*b;
vresult.SetXYZT(x.X(),x.Y(),x.Z(),t);
return vresult;
}
What am I doing wrong? Why it allways return for the explicite elements: nan? Thanks a lot for helping, btw. my current ROOT-Version is: "ROOT 5.20/00 (trunk_at_24524, Oct 08 2008, 00:11:00 on linux)" under Scientific Linux
Best Regards,
Stephan Zimmer
This archive was generated by hypermail 2.2.0 : Tue Oct 28 2008 - 11:50:02 CET