evtgen is hosted by Hepforge, IPPP Durham
EvtGen  2.0.0
Monte Carlo generator of particle decays, in particular the weak decays of heavy flavour particles such as B mesons.
EvtPropGounarisSakurai.cpp
Go to the documentation of this file.
1 
2 /***********************************************************************
3 * Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
4 * *
5 * This file is part of EvtGen. *
6 * *
7 * EvtGen is free software: you can redistribute it and/or modify *
8 * it under the terms of the GNU General Public License as published by *
9 * the Free Software Foundation, either version 3 of the License, or *
10 * (at your option) any later version. *
11 * *
12 * EvtGen is distributed in the hope that it will be useful, *
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
15 * GNU General Public License for more details. *
16 * *
17 * You should have received a copy of the GNU General Public License *
18 * along with EvtGen. If not, see <https://www.gnu.org/licenses/>. *
19 ***********************************************************************/
20 
22 
23 #include "EvtGenBase/EvtPatches.hh"
24 
25 #include <math.h>
26 
28  EvtCyclic3::Pair pair,
29  double m0, double g0 ) :
30  EvtPropagator( m0, g0 ), _pair( pair ), _gbase( g0 )
31 {
32  _dalitzSpace = dp;
33  _m1 = dp->m( EvtCyclic3::first( _pair ) );
34  _m2 = dp->m( EvtCyclic3::second( _pair ) );
35 }
36 
38 {
39  return new EvtPropGounarisSakurai( *this );
40 }
41 
43 {
44  double m = x.value();
45  double s = m * m;
46  double m2 = _m0 * _m0;
47  double _width = _gbase;
48  double _mass = _m0;
49 
50  double A = ( 1 + dFun( m2 ) * _width / _mass );
51  double B = s - m2 - fsFun( s );
52  // double C = sqrt(s)*_g0;//wrong!
53  double C = sqrt( m2 ) * _g0; //correct!
54  double D = B * B + C * C;
55 
56  EvtComplex rpt( A * B / D, -A * C / D );
57  return rpt;
58 }
59 
60 // adapted from RhoPiTools
61 double EvtPropGounarisSakurai::fsFun( double s ) const
62 {
63  double m2 = _m0 * _m0;
64 
65  EvtTwoBodyKine vd( _m1, _m2, sqrt( s ) );
66  EvtTwoBodyKine vR( _m1, _m2, _m0 );
67  double k_s = vd.p();
68  double k_Am2 = vR.p();
69  //
70  double f = _gbase * m2 / pow( k_Am2, 3 ) *
71  ( pow( k_s, 2 ) * ( hFun( s ) - hFun( m2 ) ) +
72  ( m2 - s ) * pow( k_Am2, 2 ) * dh_dsFun( m2 ) );
73 
74  return f;
75 }
76 
77 double EvtPropGounarisSakurai::hFun( double s ) const
78 {
79  double sm = _m1 + _m2;
80  double SQRTs = sqrt( s );
81  EvtTwoBodyKine vd( _m1, _m2, sqrt( s ) );
82  double k_s = vd.p();
83 
84  return 2 / EvtConst::pi * ( k_s / SQRTs ) *
85  log( ( SQRTs + 2 * k_s ) / ( sm ) );
86 }
87 
88 double EvtPropGounarisSakurai::dh_dsFun( double s ) const
89 {
90  EvtTwoBodyKine vd( _m1, _m2, sqrt( s ) );
91  double k_s = vd.p();
92 
93  return hFun( s ) * ( 1 / ( 8 * pow( k_s, 2 ) ) - 1 / ( 2 * s ) ) +
94  1 / ( 2 * EvtConst::pi * s );
95 }
96 
97 double EvtPropGounarisSakurai::dFun( double s ) const
98 {
99  double sm = _m1 + _m2;
100  double sm24 = sm * sm / 4;
101  double m = sqrt( s );
102  EvtTwoBodyKine vd( _m1, _m2, sqrt( s ) );
103  double k_m2 = vd.p();
104  double _pi = EvtConst::pi;
105 
106  return 3.0 / _pi * sm24 / pow( k_m2, 2 ) * log( ( m + 2 * k_m2 ) / sm ) +
107  m / ( 2 * _pi * k_m2 ) - sm24 * m / ( _pi * pow( k_m2, 3 ) );
108 }
double dFun(double s) const
double value() const
Definition: EvtPoint1D.hh:35
EvtPropGounarisSakurai(EvtDalitzPlot *dp, EvtCyclic3::Pair pair, double m0, double g0)
double m(EvtCyclic3::Index i) const
EvtComplex amplitude(const EvtPoint1D &x) const override
double fsFun(double s) const
double dh_dsFun(double s) const
static const double pi
Definition: EvtConst.hh:26
EvtAmplitude< EvtPoint1D > * clone() const override
Index second(Pair i)
Definition: EvtCyclic3.cpp:264
Index first(Pair i)
Definition: EvtCyclic3.cpp:250
double p(Index i=AB) const
double hFun(double s) const