ATLAS Offline Software
Loading...
Searching...
No Matches
BsJpsiPhiAngles.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
3*/
4
5#ifndef BsJpsiPhiAngles_H
6#define BsJpsiPhiAngles_H
7
8#include "CLHEP/Vector/LorentzVector.h"
10
11
12private:
13
14 // Member data
15 double m_theta1;
16 double m_theta2;
17 double m_chi;
18 double m_thetatr;
19 double m_phitr;
20
21public:
22 double thetaK() const { return m_theta1; }
23 double thetaL() const { return m_theta2; }
24 double chi() const { return m_chi; }
25 double thetatr() const { return m_thetatr; }
26 double phitr() const { return m_phitr; }
27
28 double thetaKfix() const { return cos(m_theta1); }
29 double thetaLfix() const { return cos(m_theta2); }
30 double chifix() const { return -(m_chi - M_PI) ; }
31 double thetatrfix() const { return -cos(m_thetatr); }
32 double phitrfix() const { return -(m_phitr - M_PI); }
33
34// Input:
35// For J/Psi(l+l-) K*(K pi):
36// o cand1 = K (K from K* decay)
37// o cand2 = l+ (positive lepton from psi decay)
38// o aBcand = B (the B from which the decay originates)
39
40 BsJpsiPhiAngles(const CLHEP::HepLorentzVector &Kplus,
41 const CLHEP::HepLorentzVector &Muplus,
42 const CLHEP::HepLorentzVector &Phi,
43 const CLHEP::HepLorentzVector &Jpsi,
44 const CLHEP::HepLorentzVector &Bs)
45 {
46 using CLHEP::HepLorentzVector;
47 using CLHEP::Hep3Vector;
48
49 m_theta1 = 0.;
50 m_theta2 = 0.;
51 m_chi = 0.;
52 m_thetatr = 0.;
53 m_phitr = 0.;
54
55
56 // 0.1 Get the Mummy1 & Mummy2 4-vectors in lab
57 HepLorentzVector Mum1QV ( Phi ) ; // this should be phi
58 HepLorentzVector Mum2QV ( Jpsi ) ; // this should be jpsi
59 // 0.2 Boost the Mummy1 & Mummy2 to the B(aBcand) rest frame
60 HepLorentzVector BQV(Bs); // this should be Bs Meson
61
62 Hep3Vector Bboost ( BQV.boostVector() );
63 Mum1QV.boost ( -( Bboost ) );
64 Mum2QV.boost ( -( Bboost ) );
65 // 1. Compute helicity angle theta1
66 // 1.1 Boost cand1 to the B rest frame (grandMa)
67 HepLorentzVector cand1QV ( Kplus );
68 cand1QV.boost ( - (Bboost) );
69 // 1.2 Boost now cand1 in his mother rest frame
70 cand1QV.boost ( - (Mum1QV.boostVector() ) );
71 // 1.3 compute the theta1 angle
72 Hep3Vector Mum1TV = Mum1QV.boostVector();
73 Hep3Vector cand1TV = cand1QV.boostVector();
74 Hep3Vector ucand1TV = cand1TV.unit();
75 m_theta1 = cand1TV.angle(Mum1TV);
76
77
78
79 // 2. Compute helicity angle theta2
80 // 2.1 Boost cand2 to the B rest frame (grandMa)
81 HepLorentzVector cand2QV ( Muplus );
82 cand2QV.boost ( - (Bboost) );
83 // 2.2 Boost now cand2 in his mother rest frame
84 cand2QV.boost ( - (Mum2QV.boostVector() ) );
85 // 2.3 compute the theta2 angle
86 Hep3Vector Mum2TV = Mum2QV.boostVector();
87 Hep3Vector cand2TV = cand2QV.boostVector();
88 Hep3Vector ucand2TV = cand2TV.unit();
89 m_theta2 = cand2TV.angle(Mum2TV);
90
91 // 3. Compute the chi angle
92 // 3.1 Define the c and d vectors (see Physbook)
93 Hep3Vector c;
94 Hep3Vector d;
95 Hep3Vector uMum1TV = Mum1TV.unit();
96 Hep3Vector uMum2TV = Mum2TV.unit();
97
98 // 3.2 Calculate these vectors
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 // 3.3 Now get chi = angle between the 2 decay planes
104 m_chi = std::atan2(sinphi,cosphi);
105 // 3.4 Put chi in [0;2pi]
106 if ( m_chi < 0 )
107 {
108 m_chi = 2.*M_PI + m_chi;
109 }
110
111 // 4. Transversity angles
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 ) ;
117 if (m_phitr < 0)
118 {
119 m_phitr = 2.*M_PI + m_phitr;
120 }
121 m_thetatr = std::acos(cosThetaTr) ;
122
123
124
125 }
126
127
128};
129#endif
#define M_PI
double thetatrfix() const
double chifix() const
double thetaL() const
double chi() const
double phitrfix() const
double phitr() const
double thetaLfix() const
BsJpsiPhiAngles(const CLHEP::HepLorentzVector &Kplus, const CLHEP::HepLorentzVector &Muplus, const CLHEP::HepLorentzVector &Phi, const CLHEP::HepLorentzVector &Jpsi, const CLHEP::HepLorentzVector &Bs)
double thetaK() const
double thetaKfix() const
double thetatr() const