MINT2
Rho0Omega.cpp
Go to the documentation of this file.
1 // author: Nunya Business (ya.mum@bristol.ac.uk)
2 // status: Mon 04 Feb 2014 19:17:59 GMT
3 #include <iostream>
4 
8 
9 #include "Mint/Rho0Omega.h"
10 
11 using namespace std;
12 using namespace MINT;
13 
14 Rho0Omega::Rho0Omega( const AssociatedDecayTree& tree, const std::string& namePrefix)
15  : BW_BW(tree, namePrefix)
16  , _pr("Rho0Omega::pr", 0.1973)
17  , _aRatioSq("Rho0Omega::aRatioSq", 3.9)
18  , _eps_coh("Rho0Omega::eps_coh", 1.14)
19  , _beta("Rho0Omega::beta", -4.3*pi/180.0)
20  , _delta("Rho0Omega::delta", 2.5/GeV)
21  , _mRho0(-9999), _mOmega(-9999), _GRho0(-9999), _GOmega(-9999)
22  , _mPip(ParticlePropertiesList::mass(211)/GeV)
23 {
24 }
25 
26 std::complex<double> Rho0Omega::getVal(IDalitzEvent& evt) {
27  setEventPtr(evt);
29 
30  const double mpipi = (BW_BW::daughterP4(0)+BW_BW::daughterP4(1)).M()/GeV;
31 
32  const double rho0_mass = GetRho0Mass();
33  const double rho0_width = GetRho0Width();
34  const double omega_mass = GetOmegaMass();
35  const double omega_width = GetOmegaWidth();
36 
37  const double p = Getp(mpipi);
38  const double q = Getq(mpipi);
39 
40  // Rho0 BW
41  const double q0_rho0 = Getq(rho0_mass);
42  const std::complex<double> bw_rho0 =
43  BW( mpipi, rho0_mass, rho0_width, q, q0_rho0);
44 
45  // Omega BW
46  const double q0_omega = Getq(omega_mass);
47  const std::complex<double> bw_omega =
48  BW( mpipi, omega_mass, omega_width, q, q0_omega);
49 
50  //Off-diagonal term
51  const double tanphi =
52  ((omega_mass*omega_width)-
53  (rho0_mass*GetGammas(omega_mass,rho0_mass,rho0_width)))/
54  ((omega_mass*omega_mass)-(rho0_mass*rho0_mass));
55  const double phi = atan(tanphi);
56 
57  const double Gammas_rho0 = GetGammas(mpipi, rho0_mass, rho0_width);
58 
59  const std::complex<double> off_diag =
60  std::polar(1.0, phi) * GetDelta() * (rho0_mass+omega_mass) /
61  std::complex<double>((omega_mass*omega_mass)-(rho0_mass*rho0_mass),
62  -((omega_mass*omega_width) - (rho0_mass*Gammas_rho0)));
63 
64  //Rho0-Omega function
65  const std::complex<double> rho0_omega =
66  Fr_PDG_BL()*sqrt(p*q) *
67  (bw_rho0 +
68  (GetAOmegatoRho0()*bw_omega*GetEpsCoh()*GetExpiBeta()*off_diag));
69 
70  return rho0_omega;
71 }
72 
73 void Rho0Omega::print( std::ostream& out ) const {
74  out << name();
75 }
76 
77 void Rho0Omega::print(IDalitzEvent& evt, std::ostream& out ) {
78  setEventPtr(evt);
80  out << name()
81  << "\n\t> co-ordinate: " << getDalitzCoordinate()
82  << "\n\t> This is the decay I'm looking at:"
83  << "\n" << _theDecay
84  << "\n\t> These are a few values: "
85  << " startOfDecayChain? " << startOfDecayChain()
86  << ", BreitWigner = "
87  << BreitWigner()
88  << ", Blatt-Weisskopf penetration factor: "
89  << Fr()
90  << ", total BW_BW: "
91  << getVal(evt);
92 }
93 
95  return sqrt(_aRatioSq);
96 }
97 
98 double Rho0Omega::GetEpsCoh() const {
99  return _eps_coh;
100 }
101 
102 std::complex<double> Rho0Omega::GetExpiBeta() const {
103  const double beta = _beta;
104 
105  return std::polar(1.0, beta);
106 }
107 
108 double Rho0Omega::GetDelta() const {
109  return _delta;
110 }
111 
112 double Rho0Omega::GetRho0Mass() const {
114  return _mRho0;
115 }
116 
117 double Rho0Omega::GetOmegaMass() const {
119  return _mOmega;
120 }
121 
122 double Rho0Omega::GetRho0Width() const {
124  return _GRho0;
125 }
126 
127 double Rho0Omega::GetOmegaWidth() const {
129  return _GOmega;
130 }
131 
132 double Rho0Omega::GetPipMass() const {
133  return _mPip;
134 }
135 
136 double Rho0Omega::Getp( const double& mpipi ) const {
137  const TLorentzVector p4pipi =
139  const TLorentzVector p4init =
140  _theDecay.getParent()->getVal().p(getEvent())*(1.0/GeV);
141  const TLorentzVector p4rec = p4init-p4pipi;
142 
143  const double minit = p4init.M();
144  const double mrec = p4rec.M();
145 
146  const double m2init = minit*minit;
147  const double mpipi_p2_mrec = (mpipi + mrec)*(mpipi + mrec);
148  const double mpipi_m2_mrec = (mpipi - mrec)*(mpipi - mrec);
149 
150  const double p =
151  sqrt((m2init-mpipi_p2_mrec)*(m2init-mpipi_m2_mrec))/
152  (2.0*minit);
153 
154  if( (m2init-mpipi_p2_mrec)*(m2init-mpipi_m2_mrec) < 0.0 ){
155  std::cout << "p is negative. This should never happen." << std::endl;
156  exit(1);
157  }
158 
159  return p;
160 }
161 
162 double Rho0Omega::Getq( const double& mpipi ) const {
163  const double s = mpipi*mpipi;
164  const double m2pi = GetPipMass()*GetPipMass();
165 
166  const double q = sqrt(s-(4.0*m2pi))/2.0;
167 
168  return q;
169 }
170 
171 double Rho0Omega::GetD1( const double& q ) const {
172  const double qoverpr = q/_pr;
173 
174  const double D1 = qoverpr * sqrt(2.0/((qoverpr*qoverpr)+1.0));
175 
176  return D1;
177 }
178 
179 double Rho0Omega::GetB1( const double& q, const double& q0 ) const {
180 
181  return GetD1(q)/GetD1(q0);
182 }
183 
184 double Rho0Omega::Getrhos( const double& mpipi ) const {
185  const double s = mpipi*mpipi;
186  const double m2pi = GetPipMass()*GetPipMass();
187 
188  const double rhos = 1.0/mpipi*sqrt(s - (4.0*m2pi));
189 
190  return rhos;
191 }
192 
193 double Rho0Omega::GetGammas( const double& mpipi,
194  const double& m0, const double& Gamma0 ) const {
195  const double s = mpipi*mpipi;
196  const double s0 = m0*m0;
197  const double m2pi = GetPipMass()*GetPipMass();
198 
199  const double Gamma =
200  Gamma0*pow(((s-(4.0*m2pi))/(s0-(4.0*m2pi))), 1.5)*m0/mpipi;
201 
202  return Gamma;
203 }
204 
205 std::complex<double> Rho0Omega::BW( const double& mpipi,
206  const double& m0, const double& Gamma0,
207  const double& q, const double& q0 ) const {
208  const double s = mpipi*mpipi;
209  const double s0 = m0*m0;
210 
211  const double rhos = Getrhos(mpipi);
212  const double rhos0 = Getrhos(m0);
213  const double B1 = GetB1(q,q0);
214 
215  const double Gamma = Gamma0 * rhos / rhos0 * B1 * B1;
216 
217  const std::complex<double> bw =
218  m0 * Gamma0 / rhos0 * B1 /
219  std::complex<double>(s0 - s,-m0*Gamma);
220 
221  return bw;
222 }
223 
224 std::ostream& operator<<( std::ostream& out, const Rho0Omega& amp ) {
225  amp.print(out);
226 
227  return out;
228 }
virtual void resetInternals()
Definition: BW_BW.cpp:1114
virtual double Fr()
Definition: BW_BW.cpp:710
double GetRho0Width() const
Definition: Rho0Omega.cpp:122
const MINT::NamedParameter< double > _pr
Definition: Rho0Omega.h:155
const MINT::NamedParameter< double > _delta
Definition: Rho0Omega.h:155
double GetPipMass() const
Definition: Rho0Omega.cpp:132
static double width(const std::string &name)
const double _mPip
Definition: Rho0Omega.h:158
const AssociatedDecayTree & _theDecay
Definition: BW_BW.h:69
static const double pi
bool setEventPtr(IDalitzEvent &evt) const
Definition: BW_BW.cpp:141
double GetDelta() const
Definition: Rho0Omega.cpp:108
static const double s
double GetGammas(const double &mpipi, const double &m0, const double &Gamma0) const
Definition: Rho0Omega.cpp:193
double GetRho0Mass() const
Definition: Rho0Omega.cpp:112
const ValueType & getVal() const
Definition: DDTree.h:102
double GetOmegaWidth() const
Definition: Rho0Omega.cpp:127
double GetEpsCoh() const
Definition: Rho0Omega.cpp:98
Definition: BW_BW.h:30
virtual double Fr_PDG_BL()
Definition: BW_BW.cpp:830
std::complex< double > BW(const double &mpipi, const double &m0, const double &Gamma0, const double &q, const double &q0) const
Definition: Rho0Omega.cpp:205
IDalitzEvent * getEvent() const
Definition: BW_BW.cpp:147
const MINT::NamedParameter< double > _beta
Definition: Rho0Omega.h:155
Rho0Omega(const AssociatedDecayTree &tree, const std::string &namePrefix="")
Definition: Rho0Omega.cpp:14
double Getrhos(const double &mpipi) const
Definition: Rho0Omega.cpp:184
double _mOmega
Definition: Rho0Omega.h:157
virtual TLorentzVector daughterP4(int i) const
Definition: BW_BW.cpp:566
virtual void print(std::ostream &out=std::cout) const
Definition: Rho0Omega.cpp:73
double _GRho0
Definition: Rho0Omega.h:157
const MINT::NamedParameter< double > _eps_coh
Definition: Rho0Omega.h:155
double Getq(const double &mpipi) const
Definition: Rho0Omega.cpp:162
static const double GeV
virtual bool startOfDecayChain() const
Definition: BW_BW.cpp:532
std::complex< double > GetExpiBeta() const
Definition: Rho0Omega.cpp:102
double _mRho0
Definition: Rho0Omega.h:157
std::ostream & operator<<(std::ostream &out, const Rho0Omega &amp)
Definition: Rho0Omega.cpp:224
double GetD1(const double &q) const
Definition: Rho0Omega.cpp:171
double GetOmegaMass() const
Definition: Rho0Omega.cpp:117
double GetB1(const double &q, const double &q0) const
Definition: Rho0Omega.cpp:179
double Getp(const double &mpipi) const
Definition: Rho0Omega.cpp:136
static double mass(const std::string &name)
virtual std::string name() const
Definition: Rho0Omega.h:41
const DDTree< ValueType > * getParent() const
Definition: DDTree.h:261
TLorentzVector p(const IDalitzEvent *evt) const
virtual std::complex< double > getVal(IDalitzEvent &evt)
Definition: Rho0Omega.cpp:26
const MINT::NamedParameter< double > _aRatioSq
Definition: Rho0Omega.h:155
double GetAOmegatoRho0() const
Definition: Rho0Omega.cpp:94
virtual std::complex< double > BreitWigner()
Definition: BW_BW.cpp:1093
virtual DalitzCoordinate getDalitzCoordinate(double nSigma=3) const
Definition: BW_BW.cpp:537
double _GOmega
Definition: Rho0Omega.h:157