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
EvtBToDiBaryonlnupQCD.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/EvtBToDiBaryonlnupQCD.hh
"
22
23
#include "
EvtGenBase/EvtId.hh
"
24
#include "
EvtGenBase/EvtIdSet.hh
"
25
#include "
EvtGenBase/EvtPDL.hh
"
26
#include "
EvtGenBase/EvtParticle.hh
"
27
#include "
EvtGenBase/EvtReport.hh
"
28
#include "
EvtGenBase/EvtScalarParticle.hh
"
29
#include "
EvtGenBase/EvtSpinType.hh
"
30
#include "
EvtGenBase/EvtVector4R.hh
"
31
32
std::string
EvtBToDiBaryonlnupQCD::getName
()
const
33
{
34
return
"BToDiBaryonlnupQCD"
;
35
}
36
37
EvtDecayBase
*
EvtBToDiBaryonlnupQCD::clone
()
const
38
{
39
return
new
EvtBToDiBaryonlnupQCD
;
40
}
41
42
void
EvtBToDiBaryonlnupQCD::decay
(
EvtParticle
* p )
43
{
44
p->
initializePhaseSpace
(
getNDaug
(),
getDaugs
(),
true
);
45
46
m_calcAmp
->CalcAmp( p,
m_amp2
);
47
}
48
49
void
EvtBToDiBaryonlnupQCD::init
()
50
{
51
if
( !(
getNArg
() == 6 ||
getNArg
() == 7 ) ) {
52
EvtGenReport
(
EVTGEN_ERROR
,
"EvtGen"
)
53
<<
"EvtBToDiBaryonlnupQCD model expected "
54
<<
" 6 or 7 arguments but found:"
<<
getNArg
() << std::endl;
55
EvtGenReport
(
EVTGEN_ERROR
,
"EvtGen"
)
56
<<
"Will terminate execution!"
<< std::endl;
57
::abort();
58
}
59
60
if
(
getNDaug
() != 4 ) {
61
EvtGenReport
(
EVTGEN_ERROR
,
"EvtGen"
)
62
<<
"Wrong number of daughters in EvtBToDiBaryonlnupQCD model: "
63
<<
"4 daughters expected but found: "
<<
getNDaug
() << std::endl;
64
EvtGenReport
(
EVTGEN_ERROR
,
"EvtGen"
)
65
<<
"Will terminate execution!"
<< std::endl;
66
::abort();
67
}
68
69
// We expect B -> baryon baryon lepton neutrino
70
EvtSpinType::spintype
parentType =
EvtPDL::getSpinType
(
getParentId
() );
71
EvtSpinType::spintype
leptonType =
EvtPDL::getSpinType
(
getDaug
( 2 ) );
72
EvtSpinType::spintype
neutrinoType =
EvtPDL::getSpinType
(
getDaug
( 3 ) );
73
74
if
( parentType !=
EvtSpinType::SCALAR
) {
75
EvtGenReport
(
EVTGEN_ERROR
,
"EvtGen"
)
76
<<
"EvtBToDiBaryonlnupQCD model expected "
77
<<
" a SCALAR parent, found:"
<<
EvtPDL::name
(
getParentId
() )
78
<< std::endl;
79
EvtGenReport
(
EVTGEN_ERROR
,
"EvtGen"
)
80
<<
"Will terminate execution!"
<< std::endl;
81
::abort();
82
}
83
84
if
( leptonType !=
EvtSpinType::DIRAC
) {
85
EvtGenReport
(
EVTGEN_ERROR
,
"EvtGen"
)
86
<<
"EvtBToDiBaryonlnupQCD model expected "
87
<<
" a DIRAC 3rd daughter, found:"
<<
EvtPDL::name
(
getDaug
( 2 ) )
88
<< std::endl;
89
EvtGenReport
(
EVTGEN_ERROR
,
"EvtGen"
)
90
<<
"Will terminate execution!"
<< std::endl;
91
::abort();
92
}
93
94
if
( neutrinoType !=
EvtSpinType::NEUTRINO
) {
95
EvtGenReport
(
EVTGEN_ERROR
,
"EvtGen"
)
96
<<
"EvtBToDiBaryonlnupQCD model expected "
97
<<
" a NEUTRINO 4th daughter, found:"
<<
EvtPDL::name
(
getDaug
( 3 ) )
98
<< std::endl;
99
EvtGenReport
(
EVTGEN_ERROR
,
"EvtGen"
)
100
<<
"Will terminate execution!"
<< std::endl;
101
::abort();
102
}
103
104
// Get the 6 form factor D parameters from model arguments in the decay file
105
std::vector<double> DPars( 6 );
106
for
(
int
i = 0; i < 6; i++ ) {
107
DPars[i] =
getArg
( i );
108
}
109
110
// Form factor model
111
m_ffModel
= std::make_unique<EvtBToDiBaryonlnupQCDFF>( DPars );
112
113
// Set amplitude calculation pointer.
114
// Accomodate for spin 1/2 (DIRAC) or 3/2 (RARITASCHWINGER) baryons
115
EvtSpinType::spintype
baryon1Type =
EvtPDL::getSpinType
(
getDaug
( 0 ) );
116
EvtSpinType::spintype
baryon2Type =
EvtPDL::getSpinType
(
getDaug
( 1 ) );
117
118
if
( ( baryon1Type ==
EvtSpinType::DIRAC
&&
119
baryon2Type ==
EvtSpinType::RARITASCHWINGER
) ||
120
( baryon1Type ==
EvtSpinType::RARITASCHWINGER
&&
121
baryon2Type ==
EvtSpinType::DIRAC
) ||
122
( baryon1Type ==
EvtSpinType::DIRAC
&&
123
baryon2Type ==
EvtSpinType::DIRAC
) ) {
124
m_calcAmp
= std::make_unique<EvtSLDiBaryonAmp>( *
m_ffModel
);
125
126
}
else
{
127
EvtGenReport
(
EVTGEN_ERROR
,
"EvtGen"
)
128
<<
"Wrong baryon spin type in EvtBToDiBaryonlnupQCD model. "
129
<<
"Expected spin type "
<<
EvtSpinType::DIRAC
<<
" or "
130
<<
EvtSpinType::RARITASCHWINGER
<<
", found spin types "
131
<< baryon1Type <<
" and "
<< baryon2Type << std::endl;
132
EvtGenReport
(
EVTGEN_ERROR
,
"EvtGen"
)
133
<<
"Will terminate execution!"
<< std::endl;
134
::abort();
135
}
136
}
137
138
void
EvtBToDiBaryonlnupQCD::initProbMax
()
139
{
140
// Set maximum prob using dec file parameter if present
141
if
(
getNArg
() == 7 ) {
142
setProbMax
(
getArg
( 6 ) );
143
144
}
else
{
145
// Default probability for the B -> p p l nu mode, where l = e, mu or tau
146
setProbMax
( 3.0e6 );
147
148
// Specific decay modes, where we have one proton plus a second
149
// baryon that can be any (excited) state. They all have lower
150
// maximum probabilities compared to the default pp mode in order
151
// to improve accept/reject generation efficiency
152
static
const
EvtIdSet
BMesons{
"B-"
,
"B+"
};
153
static
const
EvtIdSet
Delta{
"Delta+"
,
"anti-Delta-"
};
154
static
const
EvtIdSet
LambdaC{
"Lambda_c+"
,
"anti-Lambda_c-"
};
155
static
const
EvtIdSet
LambdaC1{
"Lambda_c(2593)+"
,
156
"anti-Lambda_c(2593)-"
};
157
static
const
EvtIdSet
LambdaC2{
"Lambda_c(2625)+"
,
158
"anti-Lambda_c(2625)-"
};
159
static
const
EvtIdSet
N1440{
"N(1440)+"
,
"anti-N(1440)-"
};
160
static
const
EvtIdSet
N1520{
"N(1520)+"
,
"anti-N(1520)-"
};
161
static
const
EvtIdSet
N1535{
"N(1535)+"
,
"anti-N(1535)-"
};
162
static
const
EvtIdSet
N1650{
"N(1650)+"
,
"anti-N(1650)-"
};
163
static
const
EvtIdSet
N1700{
"N(1700)+"
,
"anti-N(1700)-"
};
164
static
const
EvtIdSet
N1710{
"N(1710)+"
,
"anti-N(1710)-"
};
165
static
const
EvtIdSet
N1720{
"N(1720)+"
,
"anti-N(1720)-"
};
166
167
EvtId
parId =
getParentId
();
168
EvtId
bar1Id =
getDaug
( 0 );
169
EvtId
bar2Id =
getDaug
( 1 );
170
171
// These probabilties are sensitive to the sub-decay modes of the excited baryon states,
172
// which limit the available phase space and allows for events to be generated within the
173
// 10,000 event trial limit. Otherwise the amplitude varies too much (by more than a factor
174
// of a million) and events fail to be generated correctly. In case of problems, specify
175
// the maximum probability by passing an extra 7th model parameter
176
if
( BMesons.
contains
( parId ) ) {
177
if
( Delta.
contains
( bar1Id ) || Delta.
contains
( bar2Id ) ) {
178
// Delta
179
setProbMax
( 1e7 );
180
181
}
else
if
( LambdaC.
contains
( bar1Id ) ||
182
LambdaC.
contains
( bar2Id ) ) {
183
// Lambda_c+
184
setProbMax
( 1000.0 );
185
186
}
else
if
( LambdaC1.
contains
( bar1Id ) ||
187
LambdaC1.
contains
( bar2Id ) ) {
188
// Lambda_c+(2593)
189
setProbMax
( 200.0 );
190
191
}
else
if
( LambdaC2.
contains
( bar1Id ) ||
192
LambdaC2.
contains
( bar2Id ) ) {
193
// Lambda_c+(2625)
194
setProbMax
( 500.0 );
195
196
}
else
if
( N1440.
contains
( bar1Id ) || N1440.
contains
( bar2Id ) ) {
197
// N(1440)
198
setProbMax
( 8e5 );
199
200
}
else
if
( N1520.
contains
( bar1Id ) || N1520.
contains
( bar2Id ) ) {
201
// N(1520)
202
setProbMax
( 8e6 );
203
204
}
else
if
( N1535.
contains
( bar1Id ) || N1535.
contains
( bar2Id ) ) {
205
// N(1535)
206
setProbMax
( 8e5 );
207
208
}
else
if
( N1650.
contains
( bar1Id ) || N1650.
contains
( bar2Id ) ) {
209
// N(1650)
210
setProbMax
( 8e5 );
211
212
}
else
if
( N1700.
contains
( bar1Id ) || N1700.
contains
( bar2Id ) ) {
213
// N(1700)
214
setProbMax
( 4e6 );
215
216
}
else
if
( N1710.
contains
( bar1Id ) || N1710.
contains
( bar2Id ) ) {
217
// N(1710)
218
setProbMax
( 5e5 );
219
220
}
else
if
( N1720.
contains
( bar1Id ) || N1720.
contains
( bar2Id ) ) {
221
// N(1720)
222
setProbMax
( 4e6 );
223
224
}
// Baryon combinations
225
226
}
// B parent
227
228
}
// Specific modes
229
}
EvtBToDiBaryonlnupQCD.hh
EvtIdSet.hh
EvtId.hh
EvtPDL.hh
EvtParticle.hh
EvtReport.hh
EvtGenReport
std::ostream & EvtGenReport(EvtGenSeverity severity, const char *facility=nullptr)
Definition
EvtReport.cpp:32
EVTGEN_ERROR
@ EVTGEN_ERROR
Definition
EvtReport.hh:49
EvtScalarParticle.hh
EvtSpinType.hh
EvtVector4R.hh
EvtBToDiBaryonlnupQCD
Definition
EvtBToDiBaryonlnupQCD.hh:38
EvtBToDiBaryonlnupQCD::m_calcAmp
std::unique_ptr< EvtSLDiBaryonAmp > m_calcAmp
Definition
EvtBToDiBaryonlnupQCD.hh:49
EvtBToDiBaryonlnupQCD::m_ffModel
std::unique_ptr< EvtBToDiBaryonlnupQCDFF > m_ffModel
Definition
EvtBToDiBaryonlnupQCD.hh:48
EvtBToDiBaryonlnupQCD::getName
std::string getName() const override
Definition
EvtBToDiBaryonlnupQCD.cpp:32
EvtBToDiBaryonlnupQCD::decay
void decay(EvtParticle *p) override
Definition
EvtBToDiBaryonlnupQCD.cpp:42
EvtBToDiBaryonlnupQCD::initProbMax
void initProbMax() override
Definition
EvtBToDiBaryonlnupQCD.cpp:138
EvtBToDiBaryonlnupQCD::init
void init() override
Definition
EvtBToDiBaryonlnupQCD.cpp:49
EvtBToDiBaryonlnupQCD::clone
EvtDecayBase * clone() const override
Definition
EvtBToDiBaryonlnupQCD.cpp:37
EvtDecayAmp::m_amp2
EvtAmp m_amp2
Definition
EvtDecayAmp.hh:73
EvtDecayBase::EvtDecayBase
EvtDecayBase()=default
EvtDecayBase::getNDaug
int getNDaug() const
Definition
EvtDecayBase.hh:64
EvtDecayBase::getNArg
int getNArg() const
Definition
EvtDecayBase.hh:67
EvtDecayBase::getArg
double getArg(unsigned int j)
Definition
EvtDecayBase.cpp:578
EvtDecayBase::setProbMax
void setProbMax(double prbmx)
Definition
EvtDecayBase.cpp:295
EvtDecayBase::getParentId
EvtId getParentId() const
Definition
EvtDecayBase.hh:60
EvtDecayBase::getDaug
EvtId getDaug(int i) const
Definition
EvtDecayBase.hh:66
EvtDecayBase::getDaugs
const EvtId * getDaugs() const
Definition
EvtDecayBase.hh:65
EvtIdSet
Definition
EvtIdSet.hh:30
EvtIdSet::contains
bool contains(const EvtId &id) const
Definition
EvtIdSet.cpp:46
EvtId
Definition
EvtId.hh:27
EvtPDL::getSpinType
static EvtSpinType::spintype getSpinType(EvtId i)
Definition
EvtPDL.cpp:371
EvtPDL::name
static std::string name(EvtId i)
Definition
EvtPDL.cpp:376
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
EvtSpinType::spintype
spintype
Definition
EvtSpinType.hh:29
EvtSpinType::NEUTRINO
@ NEUTRINO
Definition
EvtSpinType.hh:35
EvtSpinType::SCALAR
@ SCALAR
Definition
EvtSpinType.hh:30
EvtSpinType::RARITASCHWINGER
@ RARITASCHWINGER
Definition
EvtSpinType.hh:37
EvtSpinType::DIRAC
@ DIRAC
Definition
EvtSpinType.hh:33
Generated by
1.16.1