14 double M_mu = 0.10566;
23 double a = M_W * M_W - M_mu * M_mu + 2.0 * pxmu * pxnu + 2.0 * pymu * pynu;
24 double A = 4.0 * (emu * emu - pzmu * pzmu);
25 double B = -4.0 *
a * pzmu;
26 double C = 4.0 * emu * emu * (pxnu * pxnu + pynu * pynu) -
a *
a;
28 double tmproot =
B *
B - 4.0 *
A *
C;
37 double tmpsol1 = (-
B + TMath::Sqrt(tmproot)) / (2.0 *
A);
38 double tmpsol2 = (-
B - TMath::Sqrt(tmproot)) / (2.0 *
A);
73 p3w.SetXYZ(pxmu + pxnu, pymu + pynu, pzmu + tmpsol1);
74 p3mu.SetXYZ(pxmu, pymu, pzmu);
76 double sinthcm1 = 2. * (p3mu.Perp(p3w)) / M_W;
77 p3w.SetXYZ(pxmu + pxnu, pymu + pynu, pzmu + tmpsol2);
78 double sinthcm2 = 2. * (p3mu.Perp(p3w)) / M_W;
80 double costhcm1 = TMath::Sqrt(1. - sinthcm1 * sinthcm1);
81 double costhcm2 = TMath::Sqrt(1. - sinthcm2 * sinthcm2);
83 if (costhcm1 > costhcm2)