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.
EvtLASSAmp.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 
21 #include "EvtGenBase/EvtLASSAmp.hh"
22 
23 #include "EvtGenBase/EvtComplex.hh"
24 #include "EvtGenBase/EvtCyclic3.hh"
27 
28 #include <assert.h>
29 #include <iostream>
30 #include <math.h>
31 using EvtCyclic3::Index;
32 using EvtCyclic3::Pair;
33 using std::endl;
34 
36  double g0, double a, double r, double cutoff,
37  std::string subtype ) :
39  _pair( pair ),
40  _m0( m0 ),
41  _g0( g0 ),
42  _r( r ),
43  _a( a ),
44  _cutoff( cutoff ),
45  _subtype( subtype )
46 {
47  _dalitzSpace = dp;
48  double ma = dp->m( first( pair ) );
49  double mb = dp->m( second( pair ) );
50  double E0a = 0.5 * ( _m0 * _m0 + ma * ma - mb * mb ) / _m0;
51  _q0 = E0a * E0a - ma * ma;
52  assert( _q0 > 0 );
53  _q0 = sqrt( _q0 );
54 }
55 
56 EvtComplex EvtLASSAmp::amplitude( const EvtDalitzPoint& dalitzPoint ) const
57 {
58  /*
59 
60  Parameterization of Kpi S-wave using LASS scattering data.
61  - Nucl.Phys.B296, 493 (1988)
62  - W.Dunwoodie,http://www.slac.stanford.edu/~wmd/kpi_swave/kpi_swave_fit.note
63 
64  m m0^2*Gamma0/q0
65  ----------------- + exp(2*i*delta) * --------------------------------
66  q*cot(delta)-i*q m0^2-m^2 - i*m0*Gamma0*q/m*m0/q0
67 
68 
69  where q = momentum of K or pi in Kpi system
70 
71  q*cot(delta) = 1/ a + 1/2 * [ r * q**2 ]
72 
73  a = scattering length
74 
75  r = effective range
76 
77  */
78 
79  double s = dalitzPoint.q( _pair );
80  double m = sqrt( s );
81  double q = dalitzPoint.p( first( _pair ), _pair );
82 
83  // elastic scattering
84  double qcotd = 1. / _a + 0.5 * _r * q * q;
85  EvtComplex lass_elastic = m < _cutoff ? m / ( qcotd - EvtComplex( 0, q ) )
86  : 0;
87 
88  // relative phase
89  double cosd = 1;
90  double sind = 0;
91  if ( q > 0 ) {
92  cosd = qcotd * qcotd / ( q * q );
93  cosd = sqrt( cosd / ( 1 + cosd ) );
94  sind = sqrt( 1 - cosd * cosd );
95  }
96  EvtComplex lass_phase( cosd, sind );
97  lass_phase *= lass_phase;
98 
99  // K*(1430)
100  double gamma = _g0 * q / m * _m0 / _q0;
101  EvtComplex lass_Kstar = ( _m0 * _m0 ) * ( _g0 / _q0 ) /
102  ( _m0 * _m0 - m * m - EvtComplex( 0., _m0 * gamma ) );
103 
104  EvtComplex theAmplitude( 0.0, 0.0 );
105 
106  if ( _subtype == "LASS_ELASTIC" ) {
107  theAmplitude = lass_elastic;
108 
109  } else if ( _subtype == "LASS_RESONANT" ) {
110  theAmplitude = lass_phase * lass_Kstar;
111 
112  } else {
113  theAmplitude = lass_phase * lass_Kstar + lass_elastic;
114  }
115 
116  return theAmplitude;
117 }
double _g0
Definition: EvtLASSAmp.hh:51
double _cutoff
Definition: EvtLASSAmp.hh:55
EvtComplex amplitude(const EvtDalitzPoint &p) const override
Definition: EvtLASSAmp.cpp:56
EvtDalitzPlot * _dalitzSpace
Definition: EvtLASSAmp.hh:46
double m(EvtCyclic3::Index i) const
double _a
Definition: EvtLASSAmp.hh:54
double _q0
Definition: EvtLASSAmp.hh:52
double _r
Definition: EvtLASSAmp.hh:53
EvtCyclic3::Pair _pair
Definition: EvtLASSAmp.hh:48
Index second(Pair i)
Definition: EvtCyclic3.cpp:264
std::string _subtype
Definition: EvtLASSAmp.hh:56
double q(EvtCyclic3::Pair) const
double p(EvtCyclic3::Index i, EvtCyclic3::Pair j) const
static int first
Definition: EvtPDL.cpp:38
EvtLASSAmp(EvtDalitzPlot *dp, EvtCyclic3::Pair pair, double m0, double g0, double a, double r, double cutoff, std::string subtype="LASS")
Definition: EvtLASSAmp.cpp:35
double _m0
Definition: EvtLASSAmp.hh:50