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
src
EvtGenModels
EvtSSSCPpng.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/EvtSSSCPpng.hh
"
22
23
#include "
EvtGenBase/EvtCPUtil.hh
"
24
#include "
EvtGenBase/EvtConst.hh
"
25
#include "
EvtGenBase/EvtGenKine.hh
"
26
#include "
EvtGenBase/EvtId.hh
"
27
#include "
EvtGenBase/EvtPDL.hh
"
28
#include "
EvtGenBase/EvtParticle.hh
"
29
#include "
EvtGenBase/EvtRandom.hh
"
30
#include "
EvtGenBase/EvtReport.hh
"
31
32
#include <stdlib.h>
33
#include <string>
34
35
std::string
EvtSSSCPpng::getName
()
const
36
{
37
return
"SSS_CP_PNG"
;
38
}
39
40
EvtDecayBase
*
EvtSSSCPpng::clone
()
const
41
{
42
return
new
EvtSSSCPpng
;
43
}
44
45
void
EvtSSSCPpng::init
()
46
{
47
// check that there are 7 arguments
48
checkNArg
( 7 );
49
checkNDaug
( 2 );
50
51
checkSpinParent
(
EvtSpinType::SCALAR
);
52
53
checkSpinDaughter
( 0,
EvtSpinType::SCALAR
);
54
checkSpinDaughter
( 1,
EvtSpinType::SCALAR
);
55
}
56
57
void
EvtSSSCPpng::initProbMax
()
58
{
59
const
double
ASq =
getArg
( 5 ) *
getArg
( 5 ) +
getArg
( 6 ) *
getArg
( 6 );
60
const
double
max = ASq * ( 1.0 +
getArg
( 4 ) *
getArg
( 4 ) );
61
setProbMax
( max );
62
}
63
64
void
EvtSSSCPpng::decay
(
EvtParticle
* p )
65
{
66
//added by Lange Jan4,2000
67
static
const
EvtId
B0 =
EvtPDL::getId
(
"B0"
);
68
static
const
EvtId
B0B =
EvtPDL::getId
(
"anti-B0"
);
69
70
double
t;
71
EvtId
other_b;
72
73
p->
initializePhaseSpace
(
getNDaug
(),
getDaugs
() );
74
75
EvtComplex
amp;
76
77
EvtComplex
A, Abar;
78
//EvtComplex ACC, AbarCC;
79
80
// assume single (top) quark dominance for the penguin.
81
82
// old: a0=alpha, a1=dm, a2=1, a3=1, a4=0, a5=1, a6=0
83
// new: a0=beta, a1=gamma, a2=delta, a3=dm, a4=1, a5=1=A_{T}, a6=A_{P}/A_{T}
84
85
// e.g., for B -> pi pi
86
// A_{T} = |V_{ub} V_{ud}| T
87
// A_{P} = |V_{tb} V_{td}| P
88
// P and T are purely hadronic matrix elements
89
// P/T = 0.055, A_{P}/A_{T} = 0.2 (see Marrocchesi and Paver, hep-ph/9702353)
90
91
// A = A_{T}( exp(i(beta+gamma)) + (A_{P}/A_{T}) exp(i(delta))
92
// A_bar = same, except for the sign of the weak phases
93
// here, delta = delta_{p}-delta_{t} (rel. strong phase)
94
95
A =
getArg
( 5 ) *
96
(
EvtComplex
( cos( -
getArg
( 0 ) -
getArg
( 1 ) ),
97
sin( -
getArg
( 0 ) -
getArg
( 1 ) ) ) +
98
getArg
( 6 ) *
EvtComplex
( cos(
getArg
( 2 ) ), sin(
getArg
( 2 ) ) ) );
99
100
Abar =
getArg
( 5 ) * (
EvtComplex
( cos(
getArg
( 0 ) +
getArg
( 1 ) ),
101
sin(
getArg
( 0 ) +
getArg
( 1 ) ) ) +
102
getArg
( 6 ) *
EvtComplex
( cos(
getArg
( 2 ) ),
103
sin(
getArg
( 2 ) ) ) );
104
105
// get fraction of B0 tags with these amplitudes
106
107
//double xd = 0.65;
108
const
double
ratio = 1 / ( 1 + 0.65 * 0.65 );
109
110
EvtComplex
rf, rbarf;
111
112
rf =
EvtComplex
( cos( 2.0 *
getArg
( 0 ) ), sin( 2.0 *
getArg
( 0 ) ) ) *
113
Abar / A;
114
rbarf =
EvtComplex
( 1.0 ) / rf;
115
116
const
double
A2 =
real
( A ) *
real
( A ) +
imag
( A ) *
imag
( A );
117
const
double
Abar2 =
real
( Abar ) *
real
( Abar ) +
118
imag
( Abar ) *
imag
( Abar );
119
120
const
double
rf2 =
real
( rf ) *
real
( rf ) +
imag
( rf ) *
imag
( rf );
121
const
double
rbarf2 =
real
( rbarf ) *
real
( rbarf ) +
122
imag
( rbarf ) *
imag
( rbarf );
123
124
//fraction of B0 _tags_
125
const
double
fract = ( Abar2 * ( 1 + rbarf2 + ( 1 - rbarf2 ) * ratio ) ) /
126
( Abar2 * ( 1 + rbarf2 + ( 1 - rbarf2 ) * ratio ) +
127
A2 * ( 1 + rf2 + ( 1 - rf2 ) * ratio ) );
128
129
EvtCPUtil::getInstance
()->
OtherB
( p, t, other_b, fract );
130
131
//this method works just as well -- NK
132
//randomly generate the tag (B0 or B0B)
133
134
// double tag = EvtRandom::Flat(0.0,1.0);
135
// if (tag < 0.5) {
136
//
137
// EvtCPUtil::OtherB(p,t,other_b,1.0);
138
// other_b = B0;
139
// }
140
// else {
141
//
142
// EvtCPUtil::OtherB(p,t,other_b,0.0);
143
// other_b = B0B;
144
// }
145
146
//mixing angle = -beta
147
148
if
( other_b == B0B ) {
149
amp = A * cos(
getArg
( 3 ) * t / ( 2 *
EvtConst::c
) ) +
150
EvtComplex
( cos( 2.0 *
getArg
( 0 ) ), sin( 2.0 *
getArg
( 0 ) ) ) *
151
getArg
( 4 ) *
EvtComplex
( 0.0, 1.0 ) * Abar *
152
sin(
getArg
( 3 ) * t / ( 2 *
EvtConst::c
) );
153
}
154
if
( other_b == B0 ) {
155
amp = A *
156
EvtComplex
( cos( -2.0 *
getArg
( 0 ) ),
157
sin( -2.0 *
getArg
( 0 ) ) ) *
158
EvtComplex
( 0.0, 1.0 ) *
159
sin(
getArg
( 3 ) * t / ( 2 *
EvtConst::c
) ) +
160
getArg
( 4 ) * Abar * cos(
getArg
( 3 ) * t / ( 2 *
EvtConst::c
) );
161
}
162
163
vertex
( amp );
164
165
return
;
166
}
EvtCPUtil.hh
imag
double imag(const EvtComplex &c)
Definition
EvtComplex.hh:237
real
double real(const EvtComplex &c)
Definition
EvtComplex.hh:232
EvtConst.hh
EvtGenKine.hh
EvtId.hh
EvtPDL.hh
EvtParticle.hh
EvtRandom.hh
EvtReport.hh
EvtSSSCPpng.hh
EvtCPUtil::getInstance
static EvtCPUtil * getInstance()
Definition
EvtCPUtil.cpp:42
EvtCPUtil::OtherB
void OtherB(EvtParticle *p, double &t, EvtId &otherb)
Definition
EvtCPUtil.cpp:372
EvtComplex
Definition
EvtComplex.hh:29
EvtConst::c
static const double c
Definition
EvtConst.hh:30
EvtDecayAmp::vertex
void vertex(const EvtComplex &)
Definition
EvtDecayAmp.hh:37
EvtDecayBase::checkSpinDaughter
void checkSpinDaughter(int d1, EvtSpinType::spintype sp)
Definition
EvtDecayBase.cpp:547
EvtDecayBase::EvtDecayBase
EvtDecayBase()=default
EvtDecayBase::getNDaug
int getNDaug() const
Definition
EvtDecayBase.hh:64
EvtDecayBase::checkSpinParent
void checkSpinParent(EvtSpinType::spintype sp)
Definition
EvtDecayBase.cpp:534
EvtDecayBase::getArg
double getArg(unsigned int j)
Definition
EvtDecayBase.cpp:578
EvtDecayBase::setProbMax
void setProbMax(double prbmx)
Definition
EvtDecayBase.cpp:295
EvtDecayBase::checkNDaug
void checkNDaug(int d1, int d2=-1)
Definition
EvtDecayBase.cpp:516
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
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
EvtSSSCPpng
Definition
EvtSSSCPpng.hh:31
EvtSSSCPpng::clone
EvtDecayBase * clone() const override
Definition
EvtSSSCPpng.cpp:40
EvtSSSCPpng::getName
std::string getName() const override
Definition
EvtSSSCPpng.cpp:35
EvtSSSCPpng::initProbMax
void initProbMax() override
Definition
EvtSSSCPpng.cpp:57
EvtSSSCPpng::decay
void decay(EvtParticle *p) override
Definition
EvtSSSCPpng.cpp:64
EvtSSSCPpng::init
void init() override
Definition
EvtSSSCPpng.cpp:45
EvtSpinType::SCALAR
@ SCALAR
Definition
EvtSpinType.hh:30
Generated by
1.16.1