BOSS
8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtSSSCPpng.cc
Go to the documentation of this file.
1
//--------------------------------------------------------------------------
2
//
3
// Environment:
4
// This software is part of the EvtGen package developed jointly
5
// for the BaBar and CLEO collaborations. If you use all or part
6
// of it, please give an appropriate acknowledgement.
7
//
8
// Copyright Information: See EvtGen/COPYRIGHT
9
// Copyright (C) 1998 Caltech, UCSB
10
//
11
// Module: EvtSSSCPpng.cc
12
//
13
// Description: Routine to decay B -> 2 scalars taking into account penguin
14
// contributions (assuming single quark dominance for penguins)
15
//
16
// Modification history:
17
//
18
// RYD/NK December 3, 1997 Module created
19
//
20
//------------------------------------------------------------------------
21
//
22
#include "
EvtSSSCPpng.hh
"
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/EvtPatches.hh
"
30
#include "
../EvtGenBase/EvtRandom.hh
"
31
#include "
../EvtGenBase/EvtReport.hh
"
32
#include <stdlib.h>
33
#include <string>
34
35
EvtSSSCPpng::~EvtSSSCPpng
() {}
36
37
void
EvtSSSCPpng::getName
( std::string& model_name ) { model_name =
"SSS_CP_PNG"
; }
38
39
EvtDecayBase
*
EvtSSSCPpng::clone
() {
return
new
EvtSSSCPpng
; }
40
41
void
EvtSSSCPpng::init
() {
42
43
// check that there are 7 arguments
44
checkNArg
( 7 );
45
checkNDaug
( 2 );
46
47
checkSpinParent
(
EvtSpinType::SCALAR
);
48
49
checkSpinDaughter
( 0,
EvtSpinType::SCALAR
);
50
checkSpinDaughter
( 1,
EvtSpinType::SCALAR
);
51
}
52
53
void
EvtSSSCPpng::initProbMax
() {
54
55
setProbMax
(
getArg
( 5 ) *
getArg
( 5 ) * ( 1 +
getArg
( 6 ) *
getArg
( 6 ) ) );
56
}
57
58
void
EvtSSSCPpng::decay
(
EvtParticle
* p ) {
59
60
// added by Lange Jan4,2000
61
static
EvtId
B0 =
EvtPDL::getId
(
"B0"
);
62
static
EvtId
B0B =
EvtPDL::getId
(
"anti-B0"
);
63
64
double
t
;
65
EvtId
other_b;
66
67
p->
initializePhaseSpace
(
getNDaug
(),
getDaugs
() );
68
69
EvtComplex
amp;
70
71
EvtComplex
A, Abar;
72
// EvtComplex ACC, AbarCC;
73
74
// assume single (top) quark dominance for the penguin.
75
76
// old: a0=alpha, a1=dm, a2=1, a3=1, a4=0, a5=1, a6=0
77
// new: a0=beta, a1=gamma, a2=delta, a3=dm, a4=1, a5=1=A_{T}, a6=A_{P}/A_{T}
78
79
// e.g., for B -> pi pi
80
// A_{T} = |V_{ub} V_{ud}| T
81
// A_{P} = |V_{tb} V_{td}| P
82
// P and T are purely hadronic matrix elements
83
// P/T = 0.055, A_{P}/A_{T} = 0.2 (see Marrocchesi and Paver, hep-ph/9702353)
84
85
// A = A_{T}( exp(i(beta+gamma)) + (A_{P}/A_{T}) exp(i(delta))
86
// A_bar = same, except for the sign of the weak phases
87
// here, delta = delta_{p}-delta_{t} (rel. strong phase)
88
89
A =
getArg
( 5 ) *
90
(
EvtComplex
(
cos
( -
getArg
( 0 ) -
getArg
( 1 ) ),
sin
( -
getArg
( 0 ) -
getArg
( 1 ) ) ) +
91
getArg
( 6 ) *
EvtComplex
(
cos
(
getArg
( 2 ) ),
sin
(
getArg
( 2 ) ) ) );
92
93
Abar =
getArg
( 5 ) *
94
(
EvtComplex
(
cos
(
getArg
( 0 ) +
getArg
( 1 ) ),
sin
(
getArg
( 0 ) +
getArg
( 1 ) ) ) +
95
getArg
( 6 ) *
EvtComplex
(
cos
(
getArg
( 2 ) ),
sin
(
getArg
( 2 ) ) ) );
96
97
// get fraction of B0 tags with these amplitudes
98
99
// double xd = 0.65;
100
double
ratio = 1 / ( 1 + 0.65 * 0.65 );
101
102
EvtComplex
rf, rbarf;
103
104
rf =
EvtComplex
(
cos
( 2.0 *
getArg
( 0 ) ),
sin
( 2.0 *
getArg
( 0 ) ) ) * Abar / A;
105
rbarf =
EvtComplex
( 1.0 ) / rf;
106
107
double
A2 =
real
( A ) *
real
( A ) +
imag
( A ) *
imag
( A );
108
double
Abar2 =
real
( Abar ) *
real
( Abar ) +
imag
( Abar ) *
imag
( Abar );
109
110
double
rf2 =
real
( rf ) *
real
( rf ) +
imag
( rf ) *
imag
( rf );
111
double
rbarf2 =
real
( rbarf ) *
real
( rbarf ) +
imag
( rbarf ) *
imag
( rbarf );
112
113
// fraction of B0 _tags_
114
double
fract = ( Abar2 * ( 1 + rbarf2 + ( 1 - rbarf2 ) * ratio ) ) /
115
( Abar2 * ( 1 + rbarf2 + ( 1 - rbarf2 ) * ratio ) +
116
A2 * ( 1 + rf2 + ( 1 - rf2 ) * ratio ) );
117
118
EvtCPUtil::OtherB
( p,
t
, other_b, fract );
119
120
// this method works just as well -- NK
121
// randomly generate the tag (B0 or B0B)
122
123
// double tag = EvtRandom::Flat(0.0,1.0);
124
// if (tag < 0.5) {
125
//
126
// EvtCPUtil::OtherB(p,t,other_b,1.0);
127
// other_b = B0;
128
// }
129
// else {
130
//
131
// EvtCPUtil::OtherB(p,t,other_b,0.0);
132
// other_b = B0B;
133
// }
134
135
// mixing angle = -beta
136
137
if
( other_b == B0B )
138
{
139
amp = A *
cos
(
getArg
( 3 ) *
t
/ ( 2 *
EvtConst::c
) ) +
140
EvtComplex
(
cos
( 2.0 *
getArg
( 0 ) ),
sin
( 2.0 *
getArg
( 0 ) ) ) *
getArg
( 4 ) *
141
EvtComplex
( 0.0, 1.0 ) * Abar *
sin
(
getArg
( 3 ) *
t
/ ( 2 *
EvtConst::c
) );
142
}
143
if
( other_b == B0 )
144
{
145
amp = A *
EvtComplex
(
cos
( -2.0 *
getArg
( 0 ) ),
sin
( -2.0 *
getArg
( 0 ) ) ) *
146
EvtComplex
( 0.0, 1.0 ) *
sin
(
getArg
( 3 ) *
t
/ ( 2 *
EvtConst::c
) ) +
147
getArg
( 4 ) * Abar *
cos
(
getArg
( 3 ) *
t
/ ( 2 *
EvtConst::c
) );
148
}
149
150
vertex
( amp );
151
152
return
;
153
}
real
float real
Definition
Eepipi/src/ee2eepp/basesv5.1/f2c.h:13
EvtCPUtil.hh
imag
double imag(const EvtComplex &c)
Definition
EvtComplex.hh:207
EvtConst.hh
EvtGenKine.hh
EvtId.hh
EvtPDL.hh
EvtParticle.hh
EvtPatches.hh
EvtRandom.hh
EvtReport.hh
EvtSSSCPpng.hh
sin
double sin(const BesAngle a)
Definition
InstallArea/x86_64-el9-gcc13-dbg/include/MdcGeom/BesAngle.h:185
cos
double cos(const BesAngle a)
Definition
InstallArea/x86_64-el9-gcc13-dbg/include/MdcGeom/BesAngle.h:187
EvtCPUtil::OtherB
static void OtherB(EvtParticle *p, double &t, EvtId &otherb)
Definition
EvtCPUtil.cc:225
EvtComplex
Definition
EvtComplex.hh:28
EvtConst::c
static const double c
Definition
EvtConst.hh:31
EvtDecayAmp::vertex
void vertex(const EvtComplex &)
Definition
EvtDecayAmp.hh:36
EvtDecayBase::checkSpinDaughter
void checkSpinDaughter(int d1, EvtSpinType::spintype sp)
Definition
EvtDecayBase.cc:492
EvtDecayBase::checkSpinParent
void checkSpinParent(EvtSpinType::spintype sp)
Definition
EvtDecayBase.cc:479
EvtDecayBase::getArg
double getArg(int j)
Definition
EvtDecayBase.cc:520
EvtDecayBase::EvtDecayBase
EvtDecayBase()
Definition
EvtDecayBase.cc:205
EvtDecayBase::setProbMax
void setProbMax(double prbmx)
Definition
EvtDecayBase.cc:261
EvtDecayBase::getNDaug
int getNDaug()
Definition
EvtDecayBase.hh:67
EvtDecayBase::checkNDaug
void checkNDaug(int d1, int d2=-1)
Definition
EvtDecayBase.cc:465
EvtDecayBase::getDaugs
EvtId * getDaugs()
Definition
EvtDecayBase.hh:68
EvtDecayBase::checkNArg
void checkNArg(int a1, int a2=-1, int a3=-1, int a4=-1)
Definition
EvtDecayBase.cc:449
EvtId
Definition
EvtId.hh:27
EvtPDL::getId
static EvtId getId(const std::string &name)
Definition
EvtPDL.cc:272
EvtParticle
Definition
EvtParticle.hh:42
EvtParticle::initializePhaseSpace
double initializePhaseSpace(int numdaughter, EvtId *daughters, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)
Definition
EvtParticle.cc:1042
EvtSSSCPpng::decay
void decay(EvtParticle *p)
Definition
EvtSSSCPpng.cc:58
EvtSSSCPpng::~EvtSSSCPpng
virtual ~EvtSSSCPpng()
Definition
EvtSSSCPpng.cc:35
EvtSSSCPpng::init
void init()
Definition
EvtSSSCPpng.cc:41
EvtSSSCPpng::EvtSSSCPpng
EvtSSSCPpng()
Definition
EvtSSSCPpng.hh:31
EvtSSSCPpng::getName
void getName(std::string &name)
Definition
EvtSSSCPpng.cc:37
EvtSSSCPpng::clone
EvtDecayBase * clone()
Definition
EvtSSSCPpng.cc:39
EvtSSSCPpng::initProbMax
void initProbMax()
Definition
EvtSSSCPpng.cc:53
EvtSpinType::SCALAR
@ SCALAR
Definition
EvtSpinType.hh:31
t
int t()
Definition
t.c:1
8.0.0
BOSS_Gen
BesEvtGen
src
EvtGen
EvtGenModels
EvtSSSCPpng.cc
Generated by
1.16.1