herwig
is hosted by
Hepforge
,
IPPP Durham
Herwig
7.3.0
Decay
DecayIntegrator.h
1
// -*- C++ -*-
2
//
3
// DecayIntegrator.h is a part of Herwig - A multi-purpose Monte Carlo event generator
4
// Copyright (C) 2002-2019 The Herwig Collaboration
5
//
6
// Herwig is licenced under version 3 of the GPL, see COPYING for details.
7
// Please respect the MCnet academic guidelines, see GUIDELINES for details.
8
//
9
#ifndef Herwig_DecayIntegrator_H
10
#define Herwig_DecayIntegrator_H
11
//
12
// This is the declaration of the DecayIntegrator class.
13
//
14
15
#include "DecayIntegrator.fh"
16
#include "HwDecayerBase.h"
17
#include "PhaseSpaceMode.fh"
18
#include "Herwig/PDT/WidthCalculatorBase.fh"
19
#include "Radiation/DecayRadiationGenerator.h"
20
#include <Herwig/Decay/DecayVertex.h>
21
22
namespace
Herwig
{
23
24
using namespace
ThePEG
;
25
60
class
DecayIntegrator
:
public
HwDecayerBase
{
61
62
public
:
63
67
friend
class
PhaseSpaceMode
;
68
72
enum
MEOption
{Initialize,Calculate,Terminate};
73
74
public
:
75
79
DecayIntegrator
() :
nIter_
(10),
nPoint_
(10000),
nTry_
(500),
80
generateInter_
(false),
iMode_
(-1),
81
realME_
(false),
virtualME_
(false),
eps_
(
ZERO
),
warnings_
(false)
82
{}
83
84
public
:
85
92
virtual
bool
accept
(
tcPDPtr
parent,
const
tPDVector
& children)
const
{
93
bool
cc;
94
return
modeNumber
(cc,parent,children)>=0;
95
}
96
103
virtual
ParticleVector
decay
(
const
Particle
& parent,
104
const
tPDVector
& children)
const
;
105
112
virtual
int
modeNumber
(
bool
& cc,
tcPDPtr
parent,
113
const
tPDVector
& children)
const
= 0;
114
118
int
imode
()
const
{
return
iMode_
;}
119
124
void
addMode
(PhaseSpaceModePtr
mode
)
const
;
125
135
virtual
double
me2
(
const
int
ichan,
const
Particle
& part,
136
const
tPDVector
&
outgoing
,
137
const
vector<Lorentz5Momentum> & momenta,
138
MEOption
meopt)
const
= 0;
139
143
virtual
void
constructSpinInfo
(
const
Particle
& part,
144
ParticleVector
outgoing
)
const
= 0;
145
151
virtual
void
dataBaseOutput
(ofstream & os,
bool
header)
const
;
152
159
void
setPartialWidth
(
const
DecayMode
& dm,
int
imode
);
167
virtual
bool
twoBodyMEcode
(
const
DecayMode
&,
int
& mecode,
168
double
& coupling)
const
{
169
coupling = 1.;
170
mecode = -1;
171
return
false
;
172
}
173
179
virtual
WidthCalculatorBasePtr
threeBodyMEIntegrator
(
const
DecayMode
& dm)
const
;
180
194
virtual
double
threeBodyMatrixElement
(
const
int
imode
,
const
Energy2 q2,
195
const
Energy2 s3,
const
Energy2 s2,
196
const
Energy2 s1,
const
Energy m1,
197
const
Energy m2,
const
Energy m3)
const
;
198
209
virtual
InvEnergy
threeBodydGammads
(
const
int
imode
,
const
Energy2 q2,
210
const
Energy2 s,
211
const
Energy m1,
const
Energy m2,
212
const
Energy m3)
const
;
213
218
int
findMode
(
const
DecayMode
& dm);
219
220
public
:
221
233
ParticleVector
generatePhotons
(
const
Particle
& p,
ParticleVector
children) {
234
return
photonGen_
->generatePhotons(p,children,
this
);
235
}
236
240
bool
canGeneratePhotons
() {
return
photonGen_
;}
241
249
virtual
double
oneLoopVirtualME
(
unsigned
int
imode
,
250
const
Particle
& part,
251
const
ParticleVector
& products);
252
256
bool
hasOneLoopME
() {
return
virtualME_
;}
257
271
virtual
InvEnergy2
realEmissionME
(
unsigned
int
imode
,
272
const
Particle
& part,
273
ParticleVector
& products,
274
unsigned
int
iemitter,
275
double
ctheta,
double
stheta,
276
const
LorentzRotation
& rot1,
277
const
LorentzRotation
& rot2);
278
282
bool
hasRealEmissionME
() {
return
realME_
;}
284
285
public
:
286
290
friend
ostream &
operator<<
(ostream & os,
const
DecayIntegrator
&
decay
);
291
292
293
public
:
294
301
void
persistentOutput
(
PersistentOStream
& os)
const
;
302
308
void
persistentInput
(
PersistentIStream
& is,
int
version);
310
317
static
void
Init
();
318
319
320
protected
:
321
328
virtual
void
doinitrun
();
330
331
protected
:
332
342
ParticleVector
generate
(
bool
inter,
bool
cc,
const
unsigned
int
&
imode
,
343
const
Particle
& inpart)
const
;
344
348
void
imode
(
int
in) {
iMode_
= in;}
349
353
void
ME
(DecayMEPtr in)
const
{
matrixElement_
= in;}
354
358
DecayMEPtr
ME
()
const
{
return
matrixElement_
;}
359
366
void
resetIntermediate
(
tcPDPtr
part, Energy mass, Energy width);
367
373
Energy
initializePhaseSpaceMode
(
unsigned
int
imode
,
bool
init
,
bool
onShell=
false
)
const
;
374
375
protected
:
376
384
void
generateIntermediates
(
bool
in) {
generateInter_
=in;}
385
389
bool
generateIntermediates
()
const
{
return
generateInter_
;}
390
394
void
hasOneLoopME
(
bool
in) {
virtualME_
=in;}
395
399
void
hasRealEmissionME
(
bool
in) {
realME_
=in;}
400
404
void
epsilonPS
(Energy in) {
eps_
=in;}
405
409
void
clearModes
() {
modes_
.clear();}
410
411
protected
:
412
416
unsigned
int
numberModes
()
const
{
return
modes_
.size();}
417
421
tPhaseSpaceModePtr
mode
(
unsigned
int
ix) {
422
return
modes_
[ix];
423
}
427
tcPhaseSpaceModePtr
mode
(
unsigned
int
ix)
const
{
428
return
modes_
[ix];
429
}
430
431
public
:
432
433
bool
warnings()
const
{
434
return
warnings_
;
435
}
436
437
private
:
438
442
DecayIntegrator
&
operator=
(
const
DecayIntegrator
&) =
delete
;
443
451
unsigned
int
nIter_
;
452
456
unsigned
int
nPoint_
;
457
461
unsigned
int
nTry_
;
462
466
mutable
vector<PhaseSpaceModePtr>
modes_
;
467
469
473
bool
generateInter_
;
474
478
DecayRadiationGeneratorPtr
photonGen_
;
479
483
mutable
int
iMode_
;
484
488
mutable
DecayMEPtr
matrixElement_
;
489
493
bool
realME_
;
494
498
bool
virtualME_
;
499
503
Energy
eps_
;
504
508
bool
warnings_
;
509
510
protected
:
511
515
class
DecayIntegratorError
:
public
Exception
{};
516
517
};
518
522
ostream &
operator<<
(ostream &,
const
DecayIntegrator
&);
523
524
}
525
526
#endif
/* Herwig_DecayIntegrator_H */
Herwig::DecayIntegrator::DecayIntegratorError
Exception for this class and those inheriting from it.
Definition:
DecayIntegrator.h:515
Herwig::DecayIntegrator
Main class for Decayers implementing multi-channel phase space integration.
Definition:
DecayIntegrator.h:60
Herwig::DecayIntegrator::warnings_
bool warnings_
option for turinh on/off log warnings in Phase class
Definition:
DecayIntegrator.h:508
Herwig::DecayIntegrator::imode
int imode() const
The mode being used for this decay.
Definition:
DecayIntegrator.h:118
Herwig::DecayIntegrator::nTry_
unsigned int nTry_
number of attempts to generate the decay
Definition:
DecayIntegrator.h:461
Herwig::DecayIntegrator::clearModes
void clearModes()
Clear the models.
Definition:
DecayIntegrator.h:409
Herwig::DecayIntegrator::epsilonPS
void epsilonPS(Energy in)
Set the epsilon parameter.
Definition:
DecayIntegrator.h:404
Herwig::DecayIntegrator::mode
tcPhaseSpaceModePtr mode(unsigned int ix) const
Pointer to a mode.
Definition:
DecayIntegrator.h:427
Herwig::DecayIntegrator::me2
virtual double me2(const int ichan, const Particle &part, const tPDVector &outgoing, const vector< Lorentz5Momentum > &momenta, MEOption meopt) const =0
Return the matrix element squared for a given mode and phase-space channel.
Herwig::DecayIntegrator::operator<<
friend ostream & operator<<(ostream &os, const DecayIntegrator &decay)
The output operator is a friend, this is mainly for debugging.
Herwig::DecayIntegrator::DecayIntegrator
DecayIntegrator()
The default constructor.
Definition:
DecayIntegrator.h:79
Herwig::DecayIntegrator::resetIntermediate
void resetIntermediate(tcPDPtr part, Energy mass, Energy width)
Reset the properities of all intermediates.
Herwig::DecayIntegrator::hasRealEmissionME
void hasRealEmissionME(bool in)
Whether or not the real emission matrix element is implemented.
Definition:
DecayIntegrator.h:399
Herwig::DecayIntegrator::realEmissionME
virtual InvEnergy2 realEmissionME(unsigned int imode, const Particle &part, ParticleVector &products, unsigned int iemitter, double ctheta, double stheta, const LorentzRotation &rot1, const LorentzRotation &rot2)
The real emission matrix element.
Herwig::DecayIntegrator::iMode_
int iMode_
mode currently being generated
Definition:
DecayIntegrator.h:483
Herwig::DecayIntegrator::doinitrun
virtual void doinitrun()
Initialize this object.
Herwig::DecayIntegrator::addMode
void addMode(PhaseSpaceModePtr mode) const
Add a phase-space mode to the list.
Herwig::DecayIntegrator::threeBodydGammads
virtual InvEnergy threeBodydGammads(const int imode, const Energy2 q2, const Energy2 s, const Energy m1, const Energy m2, const Energy m3) const
The differential three body decay rate with one integral performed.
Herwig::DecayIntegrator::oneLoopVirtualME
virtual double oneLoopVirtualME(unsigned int imode, const Particle &part, const ParticleVector &products)
The one-loop virtual correction.
Herwig::DecayIntegrator::modes_
vector< PhaseSpaceModePtr > modes_
List of the decay modes.
Definition:
DecayIntegrator.h:466
Herwig::DecayIntegrator::persistentOutput
void persistentOutput(PersistentOStream &os) const
Function used to write out object persistently.
Herwig::DecayIntegrator::setPartialWidth
void setPartialWidth(const DecayMode &dm, int imode)
Set the code for the partial width.
Herwig::DecayIntegrator::hasRealEmissionME
bool hasRealEmissionME()
Whether or not the real emission matrix element is implemented.
Definition:
DecayIntegrator.h:282
Herwig::DecayIntegrator::initializePhaseSpaceMode
Energy initializePhaseSpaceMode(unsigned int imode, bool init, bool onShell=false) const
Initialize the phase-space mode.
Herwig::DecayIntegrator::photonGen_
DecayRadiationGeneratorPtr photonGen_
Pointer to the object generating the QED radiation in the decay.
Definition:
DecayIntegrator.h:478
Herwig::DecayIntegrator::generate
ParticleVector generate(bool inter, bool cc, const unsigned int &imode, const Particle &inpart) const
Generate the momenta for the decay.
Herwig::DecayIntegrator::matrixElement_
DecayMEPtr matrixElement_
The helicity matrix element for the current decay.
Definition:
DecayIntegrator.h:488
Herwig::DecayIntegrator::canGeneratePhotons
bool canGeneratePhotons()
check if photons can be generated in the decay
Definition:
DecayIntegrator.h:240
Herwig::DecayIntegrator::hasOneLoopME
bool hasOneLoopME()
Whether or not the one loop matrix element is implemented.
Definition:
DecayIntegrator.h:256
Herwig::DecayIntegrator::imode
void imode(int in)
Set the mode being use for this decay.
Definition:
DecayIntegrator.h:348
Herwig::DecayIntegrator::threeBodyMatrixElement
virtual double threeBodyMatrixElement(const int imode, const Energy2 q2, const Energy2 s3, const Energy2 s2, const Energy2 s1, const Energy m1, const Energy m2, const Energy m3) const
The matrix element to be integrated for the three-body decays as a function of the invariant masses o...
Herwig::DecayIntegrator::modeNumber
virtual int modeNumber(bool &cc, tcPDPtr parent, const tPDVector &children) const =0
Which of the possible decays is required.
Herwig::DecayIntegrator::findMode
int findMode(const DecayMode &dm)
Finds the phase-space mode corresponding to a given decay mode.
Herwig::DecayIntegrator::threeBodyMEIntegrator
virtual WidthCalculatorBasePtr threeBodyMEIntegrator(const DecayMode &dm) const
Method to return an object to calculate the 3 (or higher body) partial width.
Herwig::DecayIntegrator::hasOneLoopME
void hasOneLoopME(bool in)
Whether or not the one loop matrix element is implemented.
Definition:
DecayIntegrator.h:394
Herwig::DecayIntegrator::nPoint_
unsigned int nPoint_
Number of points for initialisation.
Definition:
DecayIntegrator.h:456
Herwig::DecayIntegrator::twoBodyMEcode
virtual bool twoBodyMEcode(const DecayMode &, int &mecode, double &coupling) const
Specify the matrix element to be used in the running width calculation.
Definition:
DecayIntegrator.h:167
Herwig::DecayIntegrator::operator=
DecayIntegrator & operator=(const DecayIntegrator &)=delete
Private and non-existent assignment operator.
Herwig::DecayIntegrator::virtualME_
bool virtualME_
Whether or not the one-loop matrix element exists.
Definition:
DecayIntegrator.h:498
Herwig::DecayIntegrator::generateInter_
bool generateInter_
Whether to include the intermediates whne outputing the results.
Definition:
DecayIntegrator.h:473
Herwig::DecayIntegrator::ME
void ME(DecayMEPtr in) const
Set the helicity matrix element for the decay.
Definition:
DecayIntegrator.h:353
Herwig::DecayIntegrator::eps_
Energy eps_
Epsilon parameter for phase-space integration.
Definition:
DecayIntegrator.h:503
Herwig::DecayIntegrator::generateIntermediates
bool generateIntermediates() const
Set whether or not the intermediates are included.
Definition:
DecayIntegrator.h:389
Herwig::DecayIntegrator::nIter_
unsigned int nIter_
Parameters for the integration.
Definition:
DecayIntegrator.h:451
Herwig::DecayIntegrator::Init
static void Init()
The standard Init function used to initialize the interfaces.
Herwig::DecayIntegrator::dataBaseOutput
virtual void dataBaseOutput(ofstream &os, bool header) const
Output the setup information for the particle database.
Herwig::DecayIntegrator::numberModes
unsigned int numberModes() const
Number of decay modes.
Definition:
DecayIntegrator.h:416
Herwig::DecayIntegrator::ME
DecayMEPtr ME() const
The helicity amplitude matrix element for spin correlations.
Definition:
DecayIntegrator.h:358
Herwig::DecayIntegrator::persistentInput
void persistentInput(PersistentIStream &is, int version)
Function used to read in object persistently.
Herwig::DecayIntegrator::accept
virtual bool accept(tcPDPtr parent, const tPDVector &children) const
Check if this decayer can perfom the decay for a particular mode.
Definition:
DecayIntegrator.h:92
Herwig::DecayIntegrator::decay
virtual ParticleVector decay(const Particle &parent, const tPDVector &children) const
For a given decay mode and a given particle instance, perform the decay and return the decay products...
Herwig::DecayIntegrator::constructSpinInfo
virtual void constructSpinInfo(const Particle &part, ParticleVector outgoing) const =0
Construct the SpinInfos for the particles produced in the decay.
Herwig::DecayIntegrator::MEOption
MEOption
Enum for the matrix element option.
Definition:
DecayIntegrator.h:72
Herwig::DecayIntegrator::generateIntermediates
void generateIntermediates(bool in)
Methods to set variables in inheriting classes.
Definition:
DecayIntegrator.h:384
Herwig::DecayIntegrator::mode
tPhaseSpaceModePtr mode(unsigned int ix)
Pointer to a mode.
Definition:
DecayIntegrator.h:421
Herwig::DecayIntegrator::realME_
bool realME_
Whether or not the real photon emission matrix element exists.
Definition:
DecayIntegrator.h:493
Herwig::DecayIntegrator::generatePhotons
ParticleVector generatePhotons(const Particle &p, ParticleVector children)
Members for the generation of QED radiation in the decays.
Definition:
DecayIntegrator.h:233
Herwig::HwDecayerBase
The HwDecayerBase class is the base class for Decayers in Herwig.
Definition:
HwDecayerBase.h:37
Herwig::PhaseSpaceMode
The PhaseSpaceMode class is designed to store a group of phase-space channels for use by the DecayInt...
Definition:
PhaseSpaceMode.h:42
ThePEG::DecayMode
ThePEG::Exception
ThePEG::InterfacedBase::init
void init()
ThePEG::LorentzRotation
ThePEG::Particle
ThePEG::PersistentIStream
ThePEG::PersistentOStream
Herwig
-*- C++ -*-
Definition:
BasicConsistency.h:17
ThePEG::Helicity::outgoing
outgoing
ThePEG
ThePEG::tPDVector
vector< tPDPtr > tPDVector
ThePEG::ParticleVector
vector< PPtr > ParticleVector
ThePEG::ZERO
constexpr ZeroUnit ZERO
ThePEG::tcPDPtr
ThePEG::Ptr< ParticleData >::transient_const_pointer tcPDPtr
ThePEG::operator<<
ostream & operator<<(ostream &, const Collision &)
Generated on Thu Jun 20 2024 17:50:52 for Herwig by
1.9.6