EvtGen
2.2.0
Monte Carlo generator of particle decays, in particular the weak decays of heavy flavour particles such as B mesons.
Toggle main menu visibility
Loading...
Searching...
No Matches
src
EvtGenModels
EvtWnPi.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 "
EvtGenModels/EvtWnPi.hh
"
22
23
#include "
EvtGenBase/EvtDiracSpinor.hh
"
24
#include "
EvtGenBase/EvtGenKine.hh
"
25
#include "
EvtGenBase/EvtIdSet.hh
"
26
#include "
EvtGenBase/EvtPDL.hh
"
27
#include "
EvtGenBase/EvtParser.hh
"
28
#include "
EvtGenBase/EvtParticle.hh
"
29
#include "
EvtGenBase/EvtReport.hh
"
30
#include "
EvtGenBase/EvtTensor4C.hh
"
31
#include "
EvtGenBase/EvtVector4C.hh
"
32
33
#include "
EvtGenModels/EvtTauHadnu.hh
"
34
35
#include <ctype.h>
36
#include <fstream>
37
#include <iomanip>
38
#include <iostream>
39
#include <stdlib.h>
40
#include <string.h>
41
42
using namespace
std;
43
44
// W+ -> pi_ current
45
EvtVector4C
EvtWnPi::WCurrent
(
EvtVector4R
q1 )
46
{
47
return
q1;
48
}
49
50
// W+ -> pi+ pi0 current
51
EvtVector4C
EvtWnPi::WCurrent
(
EvtVector4R
q1,
EvtVector4R
q2 )
52
{
53
return
BWr
( q1 + q2 ) * ( q1 - q2 );
54
}
55
56
// W+ -> pi+ pi+ pi- current
57
EvtVector4C
EvtWnPi::WCurrent
(
EvtVector4R
q1,
EvtVector4R
q2,
EvtVector4R
q3 )
58
{
59
EvtVector4R
Q = q1 + q2 + q3;
60
double
Q2 = Q.
mass2
();
61
return
BWa
( Q ) *
62
( ( q1 - q3 ) - ( Q * ( Q * ( q1 - q3 ) ) / Q2 ) *
BWr
( q2 + q3 ) +
63
( q2 - q3 ) - ( Q * ( Q * ( q2 - q3 ) ) / Q2 ) *
BWr
( q1 + q3 ) );
64
}
65
66
// W+ -> pi+ pi+ pi- pi- pi+ current with symmetrization
67
EvtVector4C
EvtWnPi::WCurrent
(
EvtVector4R
q1,
EvtVector4R
q2,
EvtVector4R
q3,
68
EvtVector4R
q4,
EvtVector4R
q5 )
69
{
70
// double Q2 = Qtot*Qtot;
71
// return q1-Qtot*(q1*Qtot)/Q2;
72
EvtVector4C
V =
JB
( q1, q2, q3, q4, q5 ) +
JB
( q5, q2, q3, q4, q1 ) +
73
JB
( q1, q5, q3, q4, q2 ) +
JB
( q1, q2, q4, q3, q5 ) +
74
JB
( q5, q2, q4, q3, q1 ) +
JB
( q1, q5, q4, q3, q2 );
75
// cout<<"BC2: Qtot="<<Qtot<<", V="<<V<<endl;
76
return
V;
77
}
78
79
// a1 -> pi+ pi+ pi- BW
80
EvtComplex
EvtWnPi::BWa
(
EvtVector4R
q )
81
{
82
double
const
_mA1 = 1.26, _GA1 = 0.4;
83
EvtComplex
I
( 0, 1 );
84
double
Q2 = q.
mass2
();
85
double
GA1 = _GA1 *
pi3G
( Q2 ) /
pi3G
( _mA1 * _mA1 );
86
EvtComplex
denBA1( _mA1 * _mA1 - Q2, -1. * _mA1 * GA1 );
87
return
_mA1 * _mA1 / denBA1;
88
}
89
90
EvtComplex
EvtWnPi::BWf
(
EvtVector4R
q )
91
{
92
double
const
mf = 0.8, Gf = 0.6;
93
EvtComplex
I
( 0, 1 );
94
double
Q2 = q.
mass2
();
95
return
mf * mf / ( mf * mf - Q2 -
I
* mf * Gf );
96
}
97
98
EvtComplex
EvtWnPi::BWr
(
EvtVector4R
q )
99
{
100
double
_mRho = 0.775, _gammaRho = 0.149, _mRhopr = 1.364,
101
_gammaRhopr = 0.400, _beta = -0.108;
102
double
m1 =
EvtPDL::getMeanMass
(
EvtPDL::getId
(
"pi+"
) ),
103
m2 =
EvtPDL::getMeanMass
(
EvtPDL::getId
(
"pi+"
) );
104
double
mQ2 = q.
mass2
();
105
106
// momenta in the rho->pipi decay
107
double
dRho = _mRho * _mRho - m1 * m1 - m2 * m2;
108
double
pPiRho = ( 1.0 / _mRho ) *
109
sqrt( ( dRho * dRho ) / 4.0 - m1 * m1 * m2 * m2 );
110
111
double
dRhopr = _mRhopr * _mRhopr - m1 * m1 - m2 * m2;
112
double
pPiRhopr = ( 1.0 / _mRhopr ) *
113
sqrt( ( dRhopr * dRhopr ) / 4.0 - m1 * m1 * m2 * m2 );
114
115
double
dQ = mQ2 - m1 * m1 - m2 * m2;
116
double
pPiQ = ( 1.0 / sqrt( mQ2 ) ) *
117
sqrt( ( dQ * dQ ) / 4.0 - m1 * m1 * m2 * m2 );
118
119
double
gammaRho = _gammaRho * _mRho / sqrt( mQ2 ) *
120
pow( ( pPiQ / pPiRho ), 3 );
121
EvtComplex
BRhoDem( _mRho * _mRho - mQ2, -1.0 * _mRho * gammaRho );
122
EvtComplex
BRho = _mRho * _mRho / BRhoDem;
123
124
double
gammaRhopr = _gammaRhopr * _mRhopr / sqrt( mQ2 ) *
125
pow( ( pPiQ / pPiRhopr ), 3 );
126
EvtComplex
BRhoprDem( _mRhopr * _mRhopr - mQ2, -1.0 * _mRho * gammaRhopr );
127
EvtComplex
BRhopr = _mRhopr * _mRhopr / BRhoprDem;
128
129
return
( BRho + _beta * BRhopr ) / ( 1 + _beta );
130
}
131
132
double
EvtWnPi::pi3G
(
double
m2 )
133
{
134
double
mPi =
EvtPDL::getMeanMass
(
EvtPDL::getId
(
"pi+"
) );
135
double
_mRho = 0.775;
136
if
( m2 > ( _mRho + mPi ) ) {
137
return
m2 * ( 1.623 + 10.38 / m2 - 9.32 / ( m2 * m2 ) +
138
0.65 / ( m2 * m2 * m2 ) );
139
}
else
{
140
double
t1 = m2 - 9.0 * mPi * mPi;
141
return
4.1 * pow( t1, 3.0 ) * ( 1.0 - 3.3 * t1 + 5.8 * t1 * t1 );
142
};
143
}
144
145
EvtVector4C
EvtWnPi::JB
(
EvtVector4R
p1,
EvtVector4R
p2,
EvtVector4R
p3,
146
EvtVector4R
p4,
EvtVector4R
p5 )
147
{
148
EvtVector4R
Qtot = p1 + p2 + p3 + p4 + p5, Qa = p1 + p2 + p3;
149
EvtTensor4C
T = ( 1 / Qtot.
mass2
() ) *
150
EvtGenFunctions::directProd
( Qtot, Qtot ) -
151
EvtTensor4C::g
();
152
EvtVector4R
V13 = Qa * ( p2 * ( p1 - p3 ) ) / Qa.
mass2
() - ( p1 - p3 );
153
EvtVector4R
V23 = Qa * ( p1 * ( p2 - p3 ) ) / Qa.
mass2
() - ( p2 - p3 );
154
return
BWa
( Qtot ) *
BWa
( Qa ) *
BWf
( p4 + p5 ) *
155
( T.
cont1
( V13 ) *
BWr
( p1 + p3 ) + T.
cont1
( V23 ) *
BWr
( p2 + p3 ) );
156
}
I
const EvtComplex I
Definition
EvtBsMuMuKK.cpp:37
EvtDiracSpinor.hh
EvtGenKine.hh
EvtIdSet.hh
EvtPDL.hh
EvtParser.hh
EvtParticle.hh
EvtReport.hh
EvtTauHadnu.hh
EvtTensor4C.hh
EvtVector4C.hh
EvtWnPi.hh
EvtComplex
Definition
EvtComplex.hh:29
EvtPDL::getMeanMass
static double getMeanMass(EvtId i)
Definition
EvtPDL.cpp:306
EvtPDL::getId
static EvtId getId(const std::string &name)
Definition
EvtPDL.cpp:283
EvtTensor4C
Definition
EvtTensor4C.hh:38
EvtTensor4C::cont1
EvtVector4C cont1(const EvtVector4C &v4) const
Definition
EvtTensor4C.cpp:446
EvtTensor4C::g
static const EvtTensor4C & g()
Definition
EvtTensor4C.cpp:43
EvtVector4C
Definition
EvtVector4C.hh:30
EvtVector4R
Definition
EvtVector4R.hh:29
EvtVector4R::mass2
double mass2() const
Definition
EvtVector4R.hh:100
EvtWnPi::BWr
EvtComplex BWr(EvtVector4R q)
Definition
EvtWnPi.cpp:98
EvtWnPi::BWf
EvtComplex BWf(EvtVector4R q)
Definition
EvtWnPi.cpp:90
EvtWnPi::WCurrent
EvtVector4C WCurrent(EvtVector4R q1)
Definition
EvtWnPi.cpp:45
EvtWnPi::JB
EvtVector4C JB(EvtVector4R q1, EvtVector4R q2, EvtVector4R q3, EvtVector4R q4, EvtVector4R q5)
Definition
EvtWnPi.cpp:145
EvtWnPi::pi3G
double pi3G(double Q2)
Definition
EvtWnPi.cpp:132
EvtWnPi::BWa
EvtComplex BWa(EvtVector4R q)
Definition
EvtWnPi.cpp:80
EvtGenFunctions::directProd
EvtTensor3C directProd(const EvtVector3C &c1, const EvtVector3C &c2)
Definition
EvtTensor3C.cpp:153
Generated by
1.17.0