MINT2
GounarisSakurai.cpp
Go to the documentation of this file.
1 // author: Jonas Rademacker (Jonas.Rademacker@bristol.ac.uk)
2 // status: Mon 9 Feb 2009 19:18:04 GMT
3 
4 // copied from Jim's DcyGSAmplitude.
5 // See also: Gounaris and Sakurai, Rev. Lett. 21, 244
6 // http://link.aps.org/doi/10.1103/PhysRevLett.21.244
7 //
8 
9 #include "Mint/GounarisSakurai.h"
10 //#include "Mint/CLHEPPhysicalConstants.h"
11 #include "TMath.h"
12 
13 #include <cmath>
14 #include <complex>
15 
16 using namespace std;
17 
18 Double_t GounarisSakurai::d()
19 {
20  double m = mumsMass();
21  double mpi = daughterRecoMass(0);
22 
23  Double_t mpipi = pow(m,2);
24  Double_t logfactor = log((m+2*k(mpipi))/(2.0*mpi));
25  Double_t term1 = (3.0/TMath::Pi())*pow(mpi/k(mpipi),2)*logfactor;
26  Double_t term2 = m/(2.0*TMath::Pi()*k(mpipi));
27  Double_t term3 = pow(mpi,2)*m/(TMath::Pi()*pow(k(mpipi),3));
28 
29  return term1+term2-term3;
30 
31 }
32 
33 double GounarisSakurai::k(const double& mpipi) const
34 {
35  const double mpi = daughterRecoMass(0);
36  if (0.25*mpipi-pow(mpi,2)<=0.0) return 0.0;
37  return sqrt(0.25*mpipi-pow(mpi,2));
38 }
39 
40 
41 double GounarisSakurai::h(const double& mpipi) const
42 {
43  const double mpi = daughterRecoMass(0);
44  const double logterm = log((sqrt(mpipi)+2.0*k(mpipi))/(2.0*mpi));
45  return (2.0*k(mpipi)*logterm)/(TMath::Pi()*sqrt(mpipi));
46 }
47 double GounarisSakurai::hprime(const double& mpipi) const
48 {
49  return h(mpipi)*(0.125/pow(k(mpipi),2)-0.5/mpipi)+0.5/(TMath::Pi()*mpipi);
50 }
51 
52 
54  double G = mumsWidth();
55  double m = mumsMass();
56  return m*m*(1.0+d()*G/m);
57 }
58 
59 double GounarisSakurai::ReGSDen() const {
60  const double m = mumsMass();
61  const double m2 = m*m;
62  const double km = k(m2);
63  const double km2 = km*km;
64  const double km3 = km*km*km;
65 
66  const double s = mumsRecoMass2();
67  const double ks = k(s);
68  const double ks2 = ks*ks;
69 
70  const double G = mumsWidth();
71 
72  const double rterm2 =
73  G*( m2/km3 ) *
74  (ks2 *( h(s)-h(m2) )+ km2 * hprime(m2)*(m2-s));
75 
76  return m2 - s+rterm2;
77 }
78 
79 double GounarisSakurai::ImGSDen() const {
80  const double m = mumsMass();
81  const double s = mumsRecoMass2();
82  const double G = mumsWidth();
83 
84  //also do we really need a barrier factor in here? None in paper
85  const double returnVal = -m*G*pow(k(s)/k(pow(m,2)),3)*(m/sqrt(s)); //*Fr()*Fr(); ?
86 
87  return returnVal;
88 }
89 
90 std::complex<double> GounarisSakurai::InvGSDen() const {
91  return 1.0/std::complex<double>(ReGSDen(), ImGSDen());
92 }
93 
94 std::complex<double> GounarisSakurai::getVal(IDalitzEvent& evt){
95  bool dbThis=false;
96  setEventPtr(evt);
97  resetInternals();
98 
99  double formFactor= 1.;
100  if( _normBF == 1 ) formFactor = Fr();
101  else if( _normBF == 0 ) formFactor = Fr_PDG_BL();
102  else if(_normBF == 2 ) formFactor = Fr_BELLE(0.);
103 
104  if(startOfDecayChain()){
105  return formFactor;
106  }
107 
108  std::complex<double> returnVal = formFactor*sJ()*InvGSDen();
109 
110  if(dbThis) cout << " GounarisSakurai for "
111  << _theDecay.oneLiner() << endl; // dbg
112  if(dbThis) cout << "\n > nominalMass " << mumsMass()
113  << "\n > nominalWidth " << mumsWidth()
114  << "\n > Fr() " << formFactor
115  << "\n > a part from sJ() " << sJ()
116  << "\n > d() " << d()
117  << "\n > BW " << InvGSDen()
118  << "\n > recoMass " << mumsRecoMass()
119  << endl;
120 
121  return returnVal;
122 }
123 
124 
125 
126 //
virtual std::complex< double > getVal(IDalitzEvent &evt)
double ReGSDen() const
static const double s
double k(const double &mpipi) const
static const double km3
static const double m2
static const double m
double h(const double &mpipi) const
std::complex< double > InvGSDen() const
static const double km
static const double km2
double hprime(const double &mpipi) const
double ImGSDen() const