41 const CLHEP::HepLorentzVector &Muplus,
42 const CLHEP::HepLorentzVector &Phi,
43 const CLHEP::HepLorentzVector &Jpsi,
44 const CLHEP::HepLorentzVector &Bs)
46 using CLHEP::HepLorentzVector;
47 using CLHEP::Hep3Vector;
57 HepLorentzVector Mum1QV ( Phi ) ;
58 HepLorentzVector Mum2QV ( Jpsi ) ;
60 HepLorentzVector BQV(Bs);
62 Hep3Vector Bboost ( BQV.boostVector() );
63 Mum1QV.boost ( -( Bboost ) );
64 Mum2QV.boost ( -( Bboost ) );
67 HepLorentzVector cand1QV ( Kplus );
68 cand1QV.boost ( - (Bboost) );
70 cand1QV.boost ( - (Mum1QV.boostVector() ) );
72 Hep3Vector Mum1TV = Mum1QV.boostVector();
73 Hep3Vector cand1TV = cand1QV.boostVector();
74 Hep3Vector ucand1TV = cand1TV.unit();
81 HepLorentzVector cand2QV ( Muplus );
82 cand2QV.boost ( - (Bboost) );
84 cand2QV.boost ( - (Mum2QV.boostVector() ) );
86 Hep3Vector Mum2TV = Mum2QV.boostVector();
87 Hep3Vector cand2TV = cand2QV.boostVector();
88 Hep3Vector ucand2TV = cand2TV.unit();
95 Hep3Vector uMum1TV = Mum1TV.unit();
96 Hep3Vector uMum2TV = Mum2TV.unit();
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);
104 m_chi = std::atan2(sinphi,cosphi);
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 ) ;