ATLAS Offline Software
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 
12 private:
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 
21 public:
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
hist_file_dump.d
d
Definition: hist_file_dump.py:137
BsJpsiPhiAngles
Definition: BsJpsiPhiAngles.h:9
M_PI
#define M_PI
Definition: ActiveFraction.h:11
BsJpsiPhiAngles::m_thetatr
double m_thetatr
Definition: BsJpsiPhiAngles.h:18
Phi
@ Phi
Definition: RPCdef.h:8
drawFromPickle.cos
cos
Definition: drawFromPickle.py:36
BsJpsiPhiAngles::phitrfix
double phitrfix() const
Definition: BsJpsiPhiAngles.h:32
BsJpsiPhiAngles::thetatrfix
double thetatrfix() const
Definition: BsJpsiPhiAngles.h:31
BsJpsiPhiAngles::m_phitr
double m_phitr
Definition: BsJpsiPhiAngles.h:19
dot.dot
def dot(G, fn, nodesToHighlight=[])
Definition: dot.py:5
BsJpsiPhiAngles::thetaK
double thetaK() const
Definition: BsJpsiPhiAngles.h:22
BsJpsiPhiAngles::thetatr
double thetatr() const
Definition: BsJpsiPhiAngles.h:25
BsJpsiPhiAngles::m_theta2
double m_theta2
Definition: BsJpsiPhiAngles.h:16
BsJpsiPhiAngles::BsJpsiPhiAngles
BsJpsiPhiAngles(const CLHEP::HepLorentzVector &Kplus, const CLHEP::HepLorentzVector &Muplus, const CLHEP::HepLorentzVector &Phi, const CLHEP::HepLorentzVector &Jpsi, const CLHEP::HepLorentzVector &Bs)
Definition: BsJpsiPhiAngles.h:40
BsJpsiPhiAngles::thetaKfix
double thetaKfix() const
Definition: BsJpsiPhiAngles.h:28
BsJpsiPhiAngles::m_theta1
double m_theta1
Definition: BsJpsiPhiAngles.h:15
BsJpsiPhiAngles::phitr
double phitr() const
Definition: BsJpsiPhiAngles.h:26
BsJpsiPhiAngles::chi
double chi() const
Definition: BsJpsiPhiAngles.h:24
BsJpsiPhiAngles::thetaLfix
double thetaLfix() const
Definition: BsJpsiPhiAngles.h:29
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
BsJpsiPhiAngles::m_chi
double m_chi
Definition: BsJpsiPhiAngles.h:17
python.compressB64.c
def c
Definition: compressB64.py:93
BsJpsiPhiAngles::thetaL
double thetaL() const
Definition: BsJpsiPhiAngles.h:23
BsJpsiPhiAngles::chifix
double chifix() const
Definition: BsJpsiPhiAngles.h:30