EvtGen 2.2.0
Monte Carlo generator of particle decays, in particular the weak decays of heavy flavour particles such as B mesons.
Loading...
Searching...
No Matches
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 <math.h>
24
27 double m0, double g0 ) :
28 EvtPropagator( m0, g0 ), m_pair( pair ), m_gbase( g0 )
29{
30 m_dalitzSpace = dp;
31 m_m1 = dp->m( EvtCyclic3::first( m_pair ) );
32 m_m2 = dp->m( EvtCyclic3::second( m_pair ) );
33}
34
39
41{
42 double m = x.value();
43 double s = m * m;
44 double m2 = m_m0 * m_m0;
45 double f_width = m_gbase;
46 double f_mass = m_m0;
47
48 double A = ( 1 + dFun( m2 ) * f_width / f_mass );
49 double B = s - m2 - fsFun( s );
50 // double C = sqrt(s)*_g0;//wrong!
51 double C = sqrt( m2 ) * m_g0; //correct!
52 double D = B * B + C * C;
53
54 EvtComplex rpt( A * B / D, -A * C / D );
55 return rpt;
56}
57
58// adapted from RhoPiTools
59double EvtPropGounarisSakurai::fsFun( double s ) const
60{
61 double m2 = m_m0 * m_m0;
62
63 EvtTwoBodyKine vd( m_m1, m_m2, sqrt( s ) );
65 double k_s = vd.p();
66 double k_Am2 = vR.p();
67 //
68 double f = m_gbase * m2 / pow( k_Am2, 3 ) *
69 ( pow( k_s, 2 ) * ( hFun( s ) - hFun( m2 ) ) +
70 ( m2 - s ) * pow( k_Am2, 2 ) * dh_dsFun( m2 ) );
71
72 return f;
73}
74
75double EvtPropGounarisSakurai::hFun( double s ) const
76{
77 double sm = m_m1 + m_m2;
78 double SQRTs = sqrt( s );
79 EvtTwoBodyKine vd( m_m1, m_m2, sqrt( s ) );
80 double k_s = vd.p();
81
82 return 2 / EvtConst::pi * ( k_s / SQRTs ) *
83 log( ( SQRTs + 2 * k_s ) / ( sm ) );
84}
85
86double EvtPropGounarisSakurai::dh_dsFun( double s ) const
87{
88 EvtTwoBodyKine vd( m_m1, m_m2, sqrt( s ) );
89 double k_s = vd.p();
90
91 return hFun( s ) * ( 1 / ( 8 * pow( k_s, 2 ) ) - 1 / ( 2 * s ) ) +
92 1 / ( 2 * EvtConst::pi * s );
93}
94
95double EvtPropGounarisSakurai::dFun( double s ) const
96{
97 double sm = m_m1 + m_m2;
98 double sm24 = sm * sm / 4;
99 double m = sqrt( s );
100 EvtTwoBodyKine vd( m_m1, m_m2, sqrt( s ) );
101 double k_m2 = vd.p();
102 double pi = EvtConst::pi;
103
104 return 3.0 / pi * sm24 / pow( k_m2, 2 ) * log( ( m + 2 * k_m2 ) / sm ) +
105 m / ( 2 * pi * k_m2 ) - sm24 * m / ( pi * pow( k_m2, 3 ) );
106}
const float pi
static const double pi
Definition EvtConst.hh:26
double m(EvtCyclic3::Index i) const
double value() const
Definition EvtPoint1D.hh:35
double hFun(double s) const
double dh_dsFun(double s) const
double dFun(double s) const
EvtAmplitude< EvtPoint1D > * clone() const override
EvtPropGounarisSakurai(EvtDalitzPlot *dp, EvtCyclic3::Pair pair, double m0, double g0)
double fsFun(double s) const
EvtComplex amplitude(const EvtPoint1D &x) const override
double g0() const
double m0() const
EvtPropagator(double m0, double g0)
double p(Index i=AB) const
Index second(Pair i)
Index first(Pair i)