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.
EvtPropFlatte.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 <iostream>
26 #include <math.h>
27 using std::cout;
28 using std::endl;
29 
30 EvtPropFlatte::EvtPropFlatte( double m0, double g0, double m0a, double m0b,
31  double g1, double m1a, double m1b ) :
32  EvtPropagator( m0, g0 ),
33  _m0a( m0a ),
34  _m0b( m0b ),
35  _g1( g1 ),
36  _m1a( m1a ),
37  _m1b( m1b )
38 {
39 }
40 
42 {
43  return new EvtPropFlatte( *this );
44 }
45 
47 {
48  /*
49 
50  Use BES parameterization:
51 
52  1.
53  -----------------------------------------
54  m0^2 - m^2 - i*m0*( g1*rho1 + g2*rho2 )
55 
56 
57  Resonance mass: m0
58  Channel1: m0a, m0b, g0
59  Channel2: m1a, m1b, g1
60 
61  where breakup momenta q's are:
62 
63  E0a = (m^2 + m0a^2 - m0b^2) / 2m
64  q0 = sqrt( E0a^2 - m0a^2 )
65 
66  E1a = (m^2 + m1a^2 - m1b^2) / 2m
67  q1 = sqrt( E1a^2 - m1a^2 )
68 
69 
70  */
71 
72  double s = x.value() * x.value();
73  double m = x.value();
74 
75  double E0a = 0.5 * ( s + _m0a * _m0a - _m0b * _m0b ) / m;
76  double qSq0 = E0a * E0a - _m0a * _m0a;
77 
78  double E1a = 0.5 * ( s + _m1a * _m1a - _m1b * _m1b ) / m;
79  double qSq1 = E1a * E1a - _m1a * _m1a;
80 
81  EvtComplex gamma0 = qSq0 >= 0 ? EvtComplex( _g0 * sqrt( qSq0 ), 0 )
82  : EvtComplex( 0, _g0 * sqrt( -qSq0 ) );
83  EvtComplex gamma1 = qSq1 >= 0 ? EvtComplex( _g1 * sqrt( qSq1 ), 0 )
84  : EvtComplex( 0, _g1 * sqrt( -qSq1 ) );
85 
86  EvtComplex gamma = gamma0 + gamma1;
87 
88  EvtComplex a = 1.0 /
89  ( _m0 * _m0 - s - EvtComplex( 0.0, 2 * _m0 / m ) * gamma );
90 
91  return a;
92 }
double value() const
Definition: EvtPoint1D.hh:35
EvtAmplitude< EvtPoint1D > * clone() const override
EvtPropFlatte(double m0, double g0, double m0a, double m0b, double g1, double m1a, double m1b)
EvtComplex amplitude(const EvtPoint1D &x) const override