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
EvtGenBase
EvtResonance2.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/EvtResonance2.hh
"
22
23
#include "
EvtGenBase/EvtComplex.hh
"
24
#include "
EvtGenBase/EvtConst.hh
"
25
#include "
EvtGenBase/EvtReport.hh
"
26
27
#include <cmath>
28
29
EvtResonance2
&
EvtResonance2::operator=
(
const
EvtResonance2
& n )
30
{
31
if
( &n ==
this
)
32
return
*
this
;
33
m_p4_p
= n.
m_p4_p
;
34
m_p4_d1
= n.
m_p4_d1
;
35
m_p4_d2
= n.
m_p4_d2
;
36
m_ampl
= n.
m_ampl
;
37
m_theta
= n.
m_theta
;
38
m_gamma
= n.
m_gamma
;
39
m_spin
= n.
m_spin
;
40
m_bwm
= n.
m_bwm
;
41
m_invmass_angdenom
= n.
m_invmass_angdenom
;
42
m_barrier1
= n.
m_barrier1
;
43
m_barrier2
= n.
m_barrier2
;
44
return
*
this
;
45
}
46
47
EvtResonance2::EvtResonance2
(
const
EvtVector4R
&
p4_p
,
const
EvtVector4R
&
p4_d1
,
48
const
EvtVector4R
&
p4_d2
,
double
ampl,
49
double
theta
,
double
gamma
,
double
bwm
,
int
spin
,
50
bool
invmass_angdenom,
double
barrier1,
51
double
barrier2 ) :
52
m_p4_p
(
p4_p
),
53
m_p4_d1
(
p4_d1
),
54
m_p4_d2
(
p4_d2
),
55
m_ampl
( ampl ),
56
m_theta
(
theta
),
57
m_gamma
(
gamma
),
58
m_bwm
(
bwm
),
59
m_barrier1
( barrier1 ),
60
m_barrier2
( barrier2 ),
61
m_spin
(
spin
),
62
m_invmass_angdenom
( invmass_angdenom )
63
{
64
}
65
66
EvtComplex
EvtResonance2::resAmpl
()
const
67
{
68
double
pi180inv = 1.0 /
EvtConst::radToDegrees
;
69
70
EvtComplex
ampl;
71
EvtVector4R
p4_d3 =
m_p4_p
-
m_p4_d1
-
m_p4_d2
;
72
73
//get cos of the angle between the daughters from their 4-momenta
74
//and the 4-momentum of the parent
75
76
//in general, EvtDecayAngle(parent, part1+part2, part1) gives the angle
77
//the missing particle (not listed in the arguments) makes
78
//with part2 in the rest frame of both
79
//listed particles (12)
80
81
//angle 3 makes with 2 in rest frame of 12 (CS3)
82
//double cos_phi_0 = EvtDecayAngle(m_p4_p, m_p4_d1+m_p4_d2, m_p4_d1);
83
//angle 3 makes with 1 in 12 is, of course, -cos_phi_0
84
85
//first compute several quantities...follow CLEO preprint 00-23
86
87
double
mAB = (
m_p4_d1
+
m_p4_d2
).mass();
88
double
mBC = (
m_p4_d2
+ p4_d3 ).mass();
89
double
mAC = (
m_p4_d1
+ p4_d3 ).mass();
90
double
mA =
m_p4_d1
.mass();
91
double
mB =
m_p4_d2
.mass();
92
double
mD =
m_p4_p
.mass();
93
double
mC = p4_d3.
mass
();
94
95
double
mR =
m_bwm
;
96
double
gammaR =
m_gamma
;
97
double
mdenom =
m_invmass_angdenom
? mAB : mR;
98
double
pAB = sqrt( ( ( ( mAB * mAB - mA * mA - mB * mB ) *
99
( mAB * mAB - mA * mA - mB * mB ) / 4.0 ) -
100
mA * mA * mB * mB ) /
101
( mAB * mAB ) );
102
double
pR = sqrt( ( ( ( mR * mR - mA * mA - mB * mB ) *
103
( mR * mR - mA * mA - mB * mB ) / 4.0 ) -
104
mA * mA * mB * mB ) /
105
( mR * mR ) );
106
107
double
pD = ( ( ( mD * mD - mR * mR - mC * mC ) *
108
( mD * mD - mR * mR - mC * mC ) / 4.0 ) -
109
mR * mR * mC * mC ) /
110
( mD * mD );
111
if
( pD > 0 ) {
112
pD = sqrt( pD );
113
}
else
{
114
pD = 0;
115
}
116
double
pDAB = sqrt( ( ( ( mD * mD - mAB * mAB - mC * mC ) *
117
( mD * mD - mAB * mAB - mC * mC ) / 4.0 ) -
118
mAB * mAB * mC * mC ) /
119
( mD * mD ) );
120
121
double
fR = 1;
122
double
fD = 1;
123
int
power = 0;
124
switch
(
m_spin
) {
125
case
0:
126
fR = 1.0;
127
fD = 1.0;
128
power = 1;
129
break
;
130
case
1:
131
fR = sqrt( 1.0 +
m_barrier1
*
m_barrier1
* pR * pR ) /
132
sqrt( 1.0 +
m_barrier1
*
m_barrier1
* pAB * pAB );
133
fD = sqrt( 1.0 +
m_barrier2
*
m_barrier2
* pD * pD ) /
134
sqrt( 1.0 +
m_barrier2
*
m_barrier2
* pDAB * pDAB );
135
power = 3;
136
break
;
137
case
2:
138
fR = sqrt( ( 9 + 3 * pow( (
m_barrier1
* pR ), 2 ) +
139
pow( (
m_barrier1
* pR ), 4 ) ) /
140
( 9 + 3 * pow( (
m_barrier1
* pAB ), 2 ) +
141
pow( (
m_barrier1
* pAB ), 4 ) ) );
142
fD = sqrt( ( 9 + 3 * pow( (
m_barrier2
* pD ), 2 ) +
143
pow( (
m_barrier2
* pD ), 4 ) ) /
144
( 9 + 3 * pow( (
m_barrier2
* pDAB ), 2 ) +
145
pow( (
m_barrier2
* pDAB ), 4 ) ) );
146
power = 5;
147
break
;
148
default
:
149
EvtGenReport
(
EVTGEN_INFO
,
"EvtGen"
)
150
<<
"Incorrect spin in EvtResonance2.cc\n"
;
151
}
152
153
double
gammaAB = gammaR * pow( pAB / pR, power ) * ( mR / mAB ) * fR * fR;
154
switch
(
m_spin
) {
155
case
0:
156
ampl =
m_ampl
*
157
EvtComplex
( cos(
m_theta
* pi180inv ),
158
sin(
m_theta
* pi180inv ) ) *
159
fR * fD /
160
( mR * mR - mAB * mAB -
EvtComplex
( 0.0, mR * gammaAB ) );
161
break
;
162
case
1:
163
ampl =
m_ampl
*
164
EvtComplex
( cos(
m_theta
* pi180inv ),
165
sin(
m_theta
* pi180inv ) ) *
166
( fR * fD *
167
( mAC * mAC - mBC * mBC +
168
( ( mD * mD - mC * mC ) * ( mB * mB - mA * mA ) /
169
( mdenom * mdenom ) ) ) /
170
( mR * mR - mAB * mAB -
EvtComplex
( 0.0, mR * gammaAB ) ) );
171
break
;
172
case
2:
173
ampl =
m_ampl
*
174
EvtComplex
( cos(
m_theta
* pi180inv ),
175
sin(
m_theta
* pi180inv ) ) *
176
fR * fD /
177
( mR * mR - mAB * mAB -
EvtComplex
( 0.0, mR * gammaAB ) ) *
178
( pow( ( mBC * mBC - mAC * mAC +
179
( mD * mD - mC * mC ) * ( mA * mA - mB * mB ) /
180
( mdenom * mdenom ) ),
181
2 ) -
182
( 1.0 / 3.0 ) *
183
( mAB * mAB - 2 * mD * mD - 2 * mC * mC +
184
pow( ( mD * mD - mC * mC ) / mdenom, 2 ) ) *
185
( mAB * mAB - 2 * mA * mA - 2 * mB * mB +
186
pow( ( mA * mA - mB * mB ) / mdenom, 2 ) ) );
187
break
;
188
189
default
:
190
EvtGenReport
(
EVTGEN_INFO
,
"EvtGen"
)
191
<<
"Incorrect spin in EvtResonance2.cc\n"
;
192
}
193
194
return
ampl;
195
}
EvtComplex.hh
EvtConst.hh
EvtReport.hh
EvtGenReport
std::ostream & EvtGenReport(EvtGenSeverity severity, const char *facility=nullptr)
Definition
EvtReport.cpp:32
EVTGEN_INFO
@ EVTGEN_INFO
Definition
EvtReport.hh:52
EvtResonance2.hh
EvtComplex
Definition
EvtComplex.hh:29
EvtConst::radToDegrees
static const double radToDegrees
Definition
EvtConst.hh:28
EvtResonance2::m_ampl
double m_ampl
Definition
EvtResonance2.hh:66
EvtResonance2::EvtResonance2
EvtResonance2(const EvtVector4R &p4_p, const EvtVector4R &p4_d1, const EvtVector4R &p4_d2, double ampl=1.0, double theta=0.0, double gamma=0.0, double bwm=0.0, int spin=0, bool invmass_angdenom=false, double barrier1=1.5, double barrier2=5.0)
Definition
EvtResonance2.cpp:47
EvtResonance2::operator=
EvtResonance2 & operator=(const EvtResonance2 &)
Definition
EvtResonance2.cpp:29
EvtResonance2::m_p4_d1
EvtVector4R m_p4_d1
Definition
EvtResonance2.hh:65
EvtResonance2::spin
int spin() const
Definition
EvtResonance2.hh:59
EvtResonance2::m_barrier1
double m_barrier1
Definition
EvtResonance2.hh:66
EvtResonance2::m_bwm
double m_bwm
Definition
EvtResonance2.hh:66
EvtResonance2::theta
double theta() const
Definition
EvtResonance2.hh:50
EvtResonance2::m_p4_p
EvtVector4R m_p4_p
Definition
EvtResonance2.hh:65
EvtResonance2::m_theta
double m_theta
Definition
EvtResonance2.hh:66
EvtResonance2::m_barrier2
double m_barrier2
Definition
EvtResonance2.hh:66
EvtResonance2::p4_d1
const EvtVector4R & p4_d1() const
Definition
EvtResonance2.hh:43
EvtResonance2::p4_p
const EvtVector4R & p4_p() const
Definition
EvtResonance2.hh:42
EvtResonance2::resAmpl
EvtComplex resAmpl() const
Definition
EvtResonance2.cpp:66
EvtResonance2::m_gamma
double m_gamma
Definition
EvtResonance2.hh:66
EvtResonance2::m_invmass_angdenom
bool m_invmass_angdenom
Definition
EvtResonance2.hh:68
EvtResonance2::gamma
double gamma() const
Definition
EvtResonance2.hh:53
EvtResonance2::m_p4_d2
EvtVector4R m_p4_d2
Definition
EvtResonance2.hh:65
EvtResonance2::m_spin
int m_spin
Definition
EvtResonance2.hh:67
EvtResonance2::bwm
double bwm() const
Definition
EvtResonance2.hh:56
EvtResonance2::p4_d2
const EvtVector4R & p4_d2() const
Definition
EvtResonance2.hh:44
EvtVector4R
Definition
EvtVector4R.hh:29
EvtVector4R::mass
double mass() const
Definition
EvtVector4R.cpp:48
Generated by
1.17.0