45 {
46 using CLHEP::HepLorentzVector;
47 using CLHEP::Hep3Vector;
48
54
55
56
57 HepLorentzVector Mum1QV (
Phi ) ;
58 HepLorentzVector Mum2QV ( Jpsi ) ;
59
60 HepLorentzVector BQV(Bs);
61
62 Hep3Vector Bboost ( BQV.boostVector() );
63 Mum1QV.boost ( -( Bboost ) );
64 Mum2QV.boost ( -( Bboost ) );
65
66
67 HepLorentzVector cand1QV ( Kplus );
68 cand1QV.boost ( - (Bboost) );
69
70 cand1QV.boost ( - (Mum1QV.boostVector() ) );
71
72 Hep3Vector Mum1TV = Mum1QV.boostVector();
73 Hep3Vector cand1TV = cand1QV.boostVector();
74 Hep3Vector ucand1TV = cand1TV.unit();
76
77
78
79
80
81 HepLorentzVector cand2QV ( Muplus );
82 cand2QV.boost ( - (Bboost) );
83
84 cand2QV.boost ( - (Mum2QV.boostVector() ) );
85
86 Hep3Vector Mum2TV = Mum2QV.boostVector();
87 Hep3Vector cand2TV = cand2QV.boostVector();
88 Hep3Vector ucand2TV = cand2TV.unit();
90
91
92
95 Hep3Vector uMum1TV = Mum1TV.unit();
96 Hep3Vector uMum2TV = Mum2TV.unit();
97
98
99 c = (uMum1TV.cross(ucand1TV)).cross(uMum1TV);
100 d = (uMum2TV.cross(ucand2TV)).cross(uMum2TV);
101 double sinphi = (
c.cross(uMum1TV)).dot(d);
102 double cosphi =
c.dot(d);
103
104 m_chi = std::atan2(sinphi,cosphi);
105
107 {
109 }
110
111
112 double cosThetaTr = std::sin (
m_theta2 ) * std::sin (
m_chi ) ;
113 double sinThetaTr = std::sqrt ( 1. - cosThetaTr * cosThetaTr ) ;
114 double cosPhiTr = std::cos(
m_theta2) / sinThetaTr ;
115 double sinPhiTr = std::sin(
m_theta2) * std::cos(
m_chi ) / sinThetaTr ;
116 m_phitr = std::atan2 ( sinPhiTr, cosPhiTr ) ;
118 {
120 }
122
123
124
125 }