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
EvtBsquark.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/EvtBsquark.hh
"
22
23
#include "
EvtGenBase/EvtDiracParticle.hh
"
24
#include "
EvtGenBase/EvtDiracSpinor.hh
"
25
#include "
EvtGenBase/EvtGammaMatrix.hh
"
26
#include "
EvtGenBase/EvtGenKine.hh
"
27
#include "
EvtGenBase/EvtIdSet.hh
"
28
#include "
EvtGenBase/EvtPDL.hh
"
29
#include "
EvtGenBase/EvtParticle.hh
"
30
#include "
EvtGenBase/EvtReport.hh
"
31
32
#include <iostream>
33
#include <string>
34
35
std::string
EvtBsquark::getName
()
const
36
{
37
return
"BSQUARK"
;
38
}
39
40
EvtDecayBase
*
EvtBsquark::clone
()
const
41
{
42
return
new
EvtBsquark
;
43
}
44
45
void
EvtBsquark::init
()
46
{
47
// check that there are 5 arguments
48
checkNArg
( 5 );
49
}
50
51
void
EvtBsquark::initProbMax
()
52
{
53
setProbMax
( 1e-6 );
54
}
55
56
void
EvtBsquark::decay
(
EvtParticle
* p )
57
{
58
static
const
EvtId
cquark =
EvtPDL::getId
(
"c"
);
59
static
const
EvtId
anticquark =
EvtPDL::getId
(
"anti-c"
);
60
61
static
const
EvtIdSet
leptons{
"e-"
,
"mu-"
,
"tau-"
};
62
63
p->
initializePhaseSpace
(
getNDaug
(),
getDaugs
() );
64
65
int
charge = 1;
66
67
EvtParticle
* lepton;
68
lepton = p->
getDaug
( 1 );
69
if
( leptons.
contains
( lepton->
getId
() ) ) {
70
charge = -1;
71
}
72
73
EvtDiracParticle
charmquark;
74
75
//this is a very crude approximation...
76
if
( charge == -1 ) {
77
charmquark.
init
( cquark, p->
getDaug
( 0 )->
getP4
() );
78
}
else
{
79
charmquark.
init
( anticquark, p->
getDaug
( 0 )->
getP4
() );
80
}
81
82
EvtVector4R
p4c = p->
getDaug
( 0 )->
getP4
();
83
84
EvtVector4R
p4sn = p->
getDaug
( 2 )->
getP4
();
85
86
EvtVector4R
p4b( p->
mass
(), 0.0, 0.0, 0.0 );
87
88
EvtComplex
M[2][2];
89
90
int
il, ic;
91
92
//project out the right handed current
93
EvtGammaMatrix
PR = 0.5 * (
EvtGammaMatrix::id
() +
EvtGammaMatrix::g5
() );
94
95
double
tanbeta =
getArg
( 1 );
96
double
cosbeta = cos( atan( tanbeta ) );
97
double
sinbeta = sin( atan( tanbeta ) );
98
99
double
mb = 4.9;
100
double
mc = 1.3;
101
double
mw = 80.4;
102
103
double
Mass =
getArg
( 2 );
104
double
mu =
getArg
( 3 );
105
double
mchargino =
getArg
( 4 );
106
107
double
tan2phim = 2 * sqrt( 2.0 ) * mw * ( mu * cosbeta + Mass * sinbeta ) /
108
( Mass * Mass - mu * mu +
109
2 * mw * mw * cos( 2 * atan( tanbeta ) ) );
110
111
double
phim = 0.5 * atan( tan2phim );
112
113
EvtComplex
U11 = cos( phim );
114
EvtComplex
U12 = sin( phim );
115
EvtComplex
U21 = -sin( phim );
116
EvtComplex
U22 = cos( phim );
117
118
double
tan2phip = 2 * sqrt( 2.0 ) * mw * ( mu * cosbeta + Mass * sinbeta ) /
119
( Mass * Mass - mu * mu -
120
2 * mw * mw * cos( 2 * atan( tanbeta ) ) );
121
122
double
phip = 0.5 * atan( tan2phip );
123
124
EvtComplex
V11 = cos( phip );
125
EvtComplex
V12 = sin( phip );
126
EvtComplex
V21 = -sin( phip );
127
EvtComplex
V22 = cos( phip );
128
129
double
theta =
getArg
( 0 );
130
double
ctheta = cos( theta );
131
double
stheta = sin( theta );
132
133
double
vcsb = 0.08;
134
double
mchi1 = mchargino;
135
double
mchi2 = mchargino;
136
137
//overall scale factor
138
double
g = 1.0;
139
140
EvtComplex
a1
= mchi1 * ( U11 * ctheta - mb * U12 * stheta /
141
( sqrt( 2.0 ) * mw * cosbeta ) );
142
EvtComplex
a2
= mchi2 * ( U21 * ctheta - mb * U22 * stheta /
143
( sqrt( 2.0 ) * mw * cosbeta ) );
144
145
EvtComplex
b1 = mc *
conj
( V12 ) * ctheta / ( sqrt( 2.0 ) * mw * sinbeta );
146
EvtComplex
b2 = mc *
conj
( V22 ) * ctheta / ( sqrt( 2.0 ) * mw * sinbeta );
147
148
EvtComplex
f1 = -( g * g * V11 * vcsb ) /
149
( ( p4b - p4c ).mass2() - mchi1 * mchi1 );
150
EvtComplex
f2 = -( g * g * V21 * vcsb ) /
151
( ( p4b - p4c ).mass2() - mchi1 * mchi2 );
152
153
//EvtGenReport(EVTGEN_INFO,"EvtGen") <<g<<" "<<V11<<" "<<FL<<" "<<vcsb<<" "<<mchi1<<endl;
154
//EvtGenReport(EVTGEN_INFO,"EvtGen") << "f1:"<<f1<<" "<<(p4b-p4c).mass2()<<endl;
155
//EvtGenReport(EVTGEN_INFO,"EvtGen") << "f2:"<<f2<<" "<<(p4b-p4c).mass2()<<endl;
156
157
//EvtGenReport(EVTGEN_INFO,"EvtGen") << "p4sn:"<<p4sn<<endl;
158
159
EvtGammaMatrix
pslash = p4sn.
get
( 0 ) *
EvtGammaMatrix::g0
() -
160
p4sn.
get
( 1 ) *
EvtGammaMatrix::g1
() -
161
p4sn.
get
( 2 ) *
EvtGammaMatrix::g2
() -
162
p4sn.
get
( 3 ) *
EvtGammaMatrix::g3
();
163
164
//EvtGenReport(EVTGEN_INFO,"EvtGen") << "pslash:"<<pslash<<endl;
165
166
for
( il = 0; il < 2; il++ ) {
167
for
( ic = 0; ic < 2; ic++ ) {
168
EvtComplex
a = 0.0;
169
EvtComplex
b = 0.0;
170
171
if
( charge == -1 ) {
172
a = charmquark.
spParent
( ic ) * ( PR * lepton->
spParent
( il ) );
173
b = charmquark.
spParent
( ic ) *
174
( ( pslash * PR ) * lepton->
spParent
( il ) );
175
}
else
{
176
a = lepton->
spParent
( il ) * ( PR * charmquark.
spParent
( ic ) );
177
b = lepton->
spParent
( il ) *
178
( ( pslash * PR ) * charmquark.
spParent
( ic ) );
179
}
180
181
//EvtGenReport(EVTGEN_INFO,"EvtGen") <<"pslash*PR:"<<pslash*PR<<endl;
182
//EvtGenReport(EVTGEN_INFO,"EvtGen") <<"sp charm:"<<charmquark.spParent(ic)<<endl;
183
//EvtGenReport(EVTGEN_INFO,"EvtGen") <<"sp lepton:"<<lepton->spParent(il)<<endl;
184
185
M[ic][il] = f1 * (
a1
* a + b1 * b ) + f2 * (
a2
* a + b2 * b );
186
187
//EvtGenReport(EVTGEN_INFO,"EvtGen") << "Contr1:"<<a1<<" "<<a<<" "<<b1<<" "<<b<<endl;
188
//EvtGenReport(EVTGEN_INFO,"EvtGen") << "Contr2:"<<a2<<" "<<a<<" "<<b2<<" "<<b<<endl;
189
190
//EvtGenReport(EVTGEN_INFO,"EvtGen") <<"case1:"<<f1<<" "<<a1<<" "<<b1<<" "<<a<<" "<<b<<endl;
191
//EvtGenReport(EVTGEN_INFO,"EvtGen") <<"case2:"<<f2<<" "<<a2<<" "<<b2<<" "<<a<<" "<<b<<endl;
192
}
193
}
194
195
double
prob =
real
( M[0][0] *
conj
( M[0][0] ) + M[1][0] *
conj
( M[1][0] ) +
196
M[0][1] *
conj
( M[0][1] ) + M[1][1] *
conj
( M[1][1] ) );
197
198
//EvtGenReport(EVTGEN_INFO,"EvtGen") <<"prob:"<<prob<<endl;
199
200
setProb
( prob );
201
202
return
;
203
}
EvtBsquark.hh
conj
EvtComplex conj(const EvtComplex &c)
Definition
EvtComplex.hh:198
real
double real(const EvtComplex &c)
Definition
EvtComplex.hh:232
EvtDiracParticle.hh
EvtDiracSpinor.hh
EvtGammaMatrix.hh
EvtGenKine.hh
EvtIdSet.hh
a2
const double a2
Definition
EvtLi2Spence.cpp:24
a1
const double a1
Definition
EvtLi2Spence.cpp:23
EvtPDL.hh
EvtParticle.hh
EvtReport.hh
EvtBsquark
Definition
EvtBsquark.hh:28
EvtBsquark::getName
std::string getName() const override
Definition
EvtBsquark.cpp:35
EvtBsquark::clone
EvtDecayBase * clone() const override
Definition
EvtBsquark.cpp:40
EvtBsquark::decay
void decay(EvtParticle *p) override
Definition
EvtBsquark.cpp:56
EvtBsquark::initProbMax
void initProbMax() override
Definition
EvtBsquark.cpp:51
EvtBsquark::init
void init() override
Definition
EvtBsquark.cpp:45
EvtComplex
Definition
EvtComplex.hh:29
EvtDecayBase::EvtDecayBase
EvtDecayBase()=default
EvtDecayBase::getNDaug
int getNDaug() const
Definition
EvtDecayBase.hh:64
EvtDecayBase::getArg
double getArg(unsigned int j)
Definition
EvtDecayBase.cpp:578
EvtDecayBase::setProbMax
void setProbMax(double prbmx)
Definition
EvtDecayBase.cpp:295
EvtDecayBase::checkNArg
void checkNArg(int a1, int a2=-1, int a3=-1, int a4=-1)
Definition
EvtDecayBase.cpp:492
EvtDecayBase::getDaugs
const EvtId * getDaugs() const
Definition
EvtDecayBase.hh:65
EvtDecayProb::setProb
void setProb(double prob)
Definition
EvtDecayProb.hh:32
EvtDiracParticle
Definition
EvtDiracParticle.hh:30
EvtDiracParticle::spParent
EvtDiracSpinor spParent(int i) const override
Definition
EvtDiracParticle.hh:37
EvtDiracParticle::init
void init(EvtId part_n, const EvtVector4R &p4) override
Definition
EvtDiracParticle.cpp:35
EvtGammaMatrix
Definition
EvtGammaMatrix.hh:40
EvtGammaMatrix::id
static const EvtGammaMatrix & id()
Definition
EvtGammaMatrix.cpp:468
EvtGammaMatrix::g0
static const EvtGammaMatrix & g0()
Definition
EvtGammaMatrix.cpp:231
EvtGammaMatrix::g2
static const EvtGammaMatrix & g2()
Definition
EvtGammaMatrix.cpp:280
EvtGammaMatrix::g1
static const EvtGammaMatrix & g1()
Definition
EvtGammaMatrix.cpp:256
EvtGammaMatrix::g3
static const EvtGammaMatrix & g3()
Definition
EvtGammaMatrix.cpp:304
EvtGammaMatrix::g5
static const EvtGammaMatrix & g5()
Definition
EvtGammaMatrix.cpp:328
EvtIdSet
Definition
EvtIdSet.hh:30
EvtIdSet::contains
bool contains(const EvtId &id) const
Definition
EvtIdSet.cpp:46
EvtId
Definition
EvtId.hh:27
EvtPDL::getId
static EvtId getId(const std::string &name)
Definition
EvtPDL.cpp:283
EvtParticle
Definition
EvtParticle.hh:45
EvtParticle::initializePhaseSpace
double initializePhaseSpace(size_t numdaughter, const EvtId *daughters, bool forceResetMasses=false, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)
Definition
EvtParticle.cpp:1100
EvtParticle::getId
EvtId getId() const
Definition
EvtParticle.cpp:124
EvtParticle::spParent
virtual EvtDiracSpinor spParent(int) const
Definition
EvtParticle.cpp:660
EvtParticle::getP4
const EvtVector4R & getP4() const
Definition
EvtParticle.cpp:144
EvtParticle::getDaug
EvtParticle * getDaug(const int i)
Definition
EvtParticle.hh:173
EvtParticle::mass
double mass() const
Definition
EvtParticle.cpp:159
EvtVector4R
Definition
EvtVector4R.hh:29
EvtVector4R::get
double get(int i) const
Definition
EvtVector4R.hh:163
Generated by
1.17.0