herwig
is hosted by
Hepforge
,
IPPP Durham
Herwig
7.3.0
Decay
WeakCurrents
FivePionCurrent.h
1
// -*- C++ -*-
2
//
3
// FivePionCurrent.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_FivePionCurrent_H
10
#define HERWIG_FivePionCurrent_H
11
//
12
// This is the declaration of the FivePionCurrent class.
13
//
14
15
#include "WeakCurrent.h"
16
#include "ThePEG/Helicity/epsilon.h"
17
18
namespace
Herwig
{
19
20
using namespace
ThePEG
;
21
28
class
FivePionCurrent
:
public
WeakCurrent
{
29
30
public
:
31
35
FivePionCurrent
();
36
57
virtual
bool
createMode
(
int
icharge,
tcPDPtr
resonance,
58
FlavourInfo
flavour,
59
unsigned
int
imode,PhaseSpaceModePtr mode,
60
unsigned
int
iloc,
int
ires,
61
PhaseSpaceChannel
phase, Energy upp );
62
71
virtual
tPDVector
particles
(
int
icharge,
unsigned
int
imode,
int
iq,
int
ia);
73
87
virtual
vector<LorentzPolarizationVectorE>
88
current
(
tcPDPtr
resonance,
89
FlavourInfo
flavour,
90
const
int
imode,
const
int
ichan,Energy & scale,
91
const
tPDVector
&
outgoing
,
92
const
vector<Lorentz5Momentum> & momenta,
93
DecayIntegrator::MEOption
meopt)
const
;
94
100
virtual
bool
accept
(vector<int>
id
);
101
107
virtual
unsigned
int
decayMode
(vector<int>
id
);
108
115
virtual
void
dataBaseOutput
(ofstream & os,
bool
header,
bool
create)
const
;
116
117
public
:
118
125
void
persistentOutput
(
PersistentOStream
& os)
const
;
126
132
void
persistentInput
(
PersistentIStream
& is,
int
version);
134
141
static
void
Init
();
142
143
protected
:
144
154
Complex
rhoBreitWigner
(Energy2 scale)
const
{
155
Energy2 m2=
sqr
(
_rhomass
);
156
return
m2/(m2-scale-
Complex
(0.,1.)*
_rhomass
*
_rhowidth
);
157
}
158
163
Complex
a1BreitWigner
(Energy2 scale)
const
{
164
Energy2 m2=
sqr
(
_a1mass
);
165
return
m2/(m2-scale-
Complex
(0.,1.)*
_a1mass
*
_a1width
);
166
}
167
172
Complex
omegaBreitWigner
(Energy2 scale)
const
{
173
Energy2 m2=
sqr
(
_omegamass
);
174
return
m2/(m2-scale-
Complex
(0.,1.)*
_omegamass
*
_omegawidth
);
175
}
176
181
Complex
sigmaBreitWigner
(Energy2 scale)
const
{
182
Energy2 m2=
sqr
(
_sigmamass
);
183
return
m2/(m2-scale-
Complex
(0.,1.)*
_sigmamass
*
_sigmawidth
);
184
}
186
202
LorentzVector<complex<InvEnergy2>
>
203
rhoOmegaCurrent
(
unsigned
int
iopt,
204
const
Lorentz5Momentum & Q,
205
const
Lorentz5Momentum & q1,
206
const
Lorentz5Momentum & q2,
207
const
Lorentz5Momentum & q3,
208
const
Lorentz5Momentum & q4,
209
const
Lorentz5Momentum & q5)
const
{
210
// prefactor
211
complex<InvEnergy7> pre(
_preomega
*
a1BreitWigner
(Q.m2())*
212
omegaBreitWigner
((q1+q2+q3).m2())*
213
rhoBreitWigner
((q4+q5).m2()));
214
// omega piece
215
Complex
omega(-1.);
216
if
(
_rhoomega
) {
217
if
(iopt==1) omega=
rhoBreitWigner
((q2+q3).m2());
218
else
if
(iopt==2) omega=
rhoBreitWigner
((q1+q3).m2());
219
else
if
(iopt==3) omega=
rhoBreitWigner
((q1+q2).m2());
220
else
221
omega=
rhoBreitWigner
((q2+q3).m2())+
rhoBreitWigner
((q1+q3).m2())+
222
rhoBreitWigner
((q1+q2).m2());
223
}
224
LorentzVector<complex<Energy3>
> omegacurrent(
Helicity::epsilon
(q1,q2,q3));
225
LorentzVector<complex<InvEnergy2>
> output =
226
pre * omega *
Helicity::epsilon
(q4-q5,omegacurrent,Q);
227
return
output;
228
}
229
241
LorentzVector<complex<InvEnergy2>
>
242
a1SigmaCurrent
(
unsigned
int
iopt,
243
const
Lorentz5Momentum & Q,
244
const
Lorentz5Momentum & q1,
245
const
Lorentz5Momentum & q2,
246
const
Lorentz5Momentum & q3,
247
const
Lorentz5Momentum & q4,
248
const
Lorentz5Momentum & q5)
const
{
249
Lorentz5Momentum pa1(q1+q2+q3);pa1.rescaleMass();
250
Energy2 ma12(pa1.m2());
251
complex<InvEnergy3> pre(
_presigma
*
a1BreitWigner
(Q.m2())*
a1BreitWigner
(ma12)*
252
sigmaBreitWigner
((q4+q5).m2()));
253
Energy2 pdot[2]={q2*(q1-q3),q1*(q2-q3)};
254
LorentzPolarizationVectorE
rho[2] =
255
{(pdot[0]/ma12*pa1-q1+q3)*
rhoBreitWigner
((q1+q3).m2()),
256
(pdot[1]/ma12*pa1-q2+q3)*
rhoBreitWigner
((q2+q3).m2())};
257
LorentzPolarizationVectorE
total;
258
if
(iopt==1) total = rho[0];
259
else
if
(iopt==2) total = rho[1];
260
else
total = rho[0]+rho[1];
261
Complex
qdot = total * Q / Q.
m2
();
262
LorentzPolarizationVectorE
cq(Q);
263
cq = cq * qdot;
264
cq -= total;
265
return
pre * cq;
266
}
268
269
protected
:
270
277
virtual
IBPtr
clone
()
const
{
return
new_ptr(*
this
);}
278
283
virtual
IBPtr
fullclone
()
const
{
return
new_ptr(*
this
);}
285
286
protected
:
287
295
virtual
void
doinit
();
297
298
private
:
299
304
FivePionCurrent
&
operator=
(
const
FivePionCurrent
&) =
delete
;
305
306
private
:
307
315
Energy
_rhomass
;
316
320
Energy
_a1mass
;
321
325
Energy
_omegamass
;
326
330
Energy
_sigmamass
;
331
335
Energy
_rhowidth
;
336
340
Energy
_a1width
;
341
345
Energy
_omegawidth
;
346
350
Energy
_sigmawidth
;
352
356
bool
_localparameters
;
357
361
bool
_rhoomega
;
362
370
Energy2
_c
;
371
375
double
_c0
;
376
380
InvEnergy
_fomegarhopi
;
381
385
double
_grhopipi
;
386
390
Energy
_garhopi
;
391
395
Energy
_faaf
;
396
400
Energy
_ffpipi
;
402
410
InvEnergy7
_preomega
;
411
415
InvEnergy3
_presigma
;
417
};
418
419
}
420
421
#endif
/* HERWIG_FivePionCurrent_H */
Herwig::DecayIntegrator::MEOption
MEOption
Enum for the matrix element option.
Definition:
DecayIntegrator.h:72
Herwig::FivePionCurrent
Here is the documentation of the FivePionCurrent class.
Definition:
FivePionCurrent.h:28
Herwig::FivePionCurrent::_faaf
Energy _faaf
The parameter.
Definition:
FivePionCurrent.h:395
Herwig::FivePionCurrent::operator=
FivePionCurrent & operator=(const FivePionCurrent &)=delete
The assignment operator is private and must never be called.
Herwig::FivePionCurrent::fullclone
virtual IBPtr fullclone() const
Make a clone of this object, possibly modifying the cloned object to make it sane.
Definition:
FivePionCurrent.h:283
Herwig::FivePionCurrent::_rhowidth
Energy _rhowidth
The width for the .
Definition:
FivePionCurrent.h:335
Herwig::FivePionCurrent::clone
virtual IBPtr clone() const
Make a simple clone of this object.
Definition:
FivePionCurrent.h:277
Herwig::FivePionCurrent::doinit
virtual void doinit()
Initialize this object after the setup phase before saving an EventGenerator to disk.
Herwig::FivePionCurrent::_c0
double _c0
The parameter.
Definition:
FivePionCurrent.h:375
Herwig::FivePionCurrent::accept
virtual bool accept(vector< int > id)
Accept the decay.
Herwig::FivePionCurrent::createMode
virtual bool createMode(int icharge, tcPDPtr resonance, FlavourInfo flavour, unsigned int imode, PhaseSpaceModePtr mode, unsigned int iloc, int ires, PhaseSpaceChannel phase, Energy upp)
Complete the construction of the decay mode for integration.classes inheriting from this one.
Herwig::FivePionCurrent::_c
Energy2 _c
Normalisation parameters for the different currents.
Definition:
FivePionCurrent.h:370
Herwig::FivePionCurrent::rhoOmegaCurrent
LorentzVector< complex< InvEnergy2 > > rhoOmegaCurrent(unsigned int iopt, const Lorentz5Momentum &Q, const Lorentz5Momentum &q1, const Lorentz5Momentum &q2, const Lorentz5Momentum &q3, const Lorentz5Momentum &q4, const Lorentz5Momentum &q5) const
Currents for the different channels.
Definition:
FivePionCurrent.h:203
Herwig::FivePionCurrent::_garhopi
Energy _garhopi
The parameter.
Definition:
FivePionCurrent.h:390
Herwig::FivePionCurrent::FivePionCurrent
FivePionCurrent()
The default constructor.
Herwig::FivePionCurrent::_a1mass
Energy _a1mass
The mass of the for the current.
Definition:
FivePionCurrent.h:320
Herwig::FivePionCurrent::omegaBreitWigner
Complex omegaBreitWigner(Energy2 scale) const
Breit-Wigner for the .
Definition:
FivePionCurrent.h:172
Herwig::FivePionCurrent::a1BreitWigner
Complex a1BreitWigner(Energy2 scale) const
Breit-Wigner for the .
Definition:
FivePionCurrent.h:163
Herwig::FivePionCurrent::_rhomass
Energy _rhomass
The masses and widths of the intermediate particles.
Definition:
FivePionCurrent.h:315
Herwig::FivePionCurrent::_grhopipi
double _grhopipi
The parameter.
Definition:
FivePionCurrent.h:385
Herwig::FivePionCurrent::_a1width
Energy _a1width
The width.
Definition:
FivePionCurrent.h:340
Herwig::FivePionCurrent::dataBaseOutput
virtual void dataBaseOutput(ofstream &os, bool header, bool create) const
Output the setup information for the particle database.
Herwig::FivePionCurrent::persistentInput
void persistentInput(PersistentIStream &is, int version)
Function used to read in object persistently.
Herwig::FivePionCurrent::decayMode
virtual unsigned int decayMode(vector< int > id)
Return the decay mode number for a given set of particles in the current.
Herwig::FivePionCurrent::_fomegarhopi
InvEnergy _fomegarhopi
The parameter.
Definition:
FivePionCurrent.h:380
Herwig::FivePionCurrent::_omegamass
Energy _omegamass
The mass of the for the current.
Definition:
FivePionCurrent.h:325
Herwig::FivePionCurrent::persistentOutput
void persistentOutput(PersistentOStream &os) const
Function used to write out object persistently.
Herwig::FivePionCurrent::_ffpipi
Energy _ffpipi
The parameter.
Definition:
FivePionCurrent.h:400
Herwig::FivePionCurrent::sigmaBreitWigner
Complex sigmaBreitWigner(Energy2 scale) const
Breit-Wigner for the .
Definition:
FivePionCurrent.h:181
Herwig::FivePionCurrent::_sigmamass
Energy _sigmamass
The mass of the for the current.
Definition:
FivePionCurrent.h:330
Herwig::FivePionCurrent::a1SigmaCurrent
LorentzVector< complex< InvEnergy2 > > a1SigmaCurrent(unsigned int iopt, const Lorentz5Momentum &Q, const Lorentz5Momentum &q1, const Lorentz5Momentum &q2, const Lorentz5Momentum &q3, const Lorentz5Momentum &q4, const Lorentz5Momentum &q5) const
The current.
Definition:
FivePionCurrent.h:242
Herwig::FivePionCurrent::rhoBreitWigner
Complex rhoBreitWigner(Energy2 scale) const
Methods to calculate the Breit-Wigner distributions for the various mesons.
Definition:
FivePionCurrent.h:154
Herwig::FivePionCurrent::_sigmawidth
Energy _sigmawidth
The width.
Definition:
FivePionCurrent.h:350
Herwig::FivePionCurrent::_preomega
InvEnergy7 _preomega
Values cached to avoid unnessacary calculations.
Definition:
FivePionCurrent.h:410
Herwig::FivePionCurrent::particles
virtual tPDVector particles(int icharge, unsigned int imode, int iq, int ia)
The particles produced by the current.
Herwig::FivePionCurrent::Init
static void Init()
The standard Init function used to initialize the interfaces.
Herwig::FivePionCurrent::current
virtual vector< LorentzPolarizationVectorE > current(tcPDPtr resonance, FlavourInfo flavour, const int imode, const int ichan, Energy &scale, const tPDVector &outgoing, const vector< Lorentz5Momentum > &momenta, DecayIntegrator::MEOption meopt) const
Hadronic current.
Herwig::FivePionCurrent::_omegawidth
Energy _omegawidth
The width.
Definition:
FivePionCurrent.h:345
Herwig::FivePionCurrent::_rhoomega
bool _rhoomega
Option for the treatment of Breit-Wigners in decay.
Definition:
FivePionCurrent.h:361
Herwig::FivePionCurrent::_localparameters
bool _localparameters
use local values of the particle masses
Definition:
FivePionCurrent.h:356
Herwig::FivePionCurrent::_presigma
InvEnergy3 _presigma
Prefactor for the current.
Definition:
FivePionCurrent.h:415
Herwig::PhaseSpaceChannel
This class is designed to store the information needed for a given phase-space channel for use by the...
Definition:
PhaseSpaceChannel.h:52
Herwig::WeakCurrent
The WeakCurrent class is the base class for the hadronic currents produced in weak decays.
Definition:
WeakCurrent.h:59
ThePEG::LorentzVector
ThePEG::LorentzVector::m2
Value2 m2() const
ThePEG::PersistentIStream
ThePEG::PersistentOStream
Herwig
-*- C++ -*-
Definition:
BasicConsistency.h:17
ThePEG::Helicity::outgoing
outgoing
ThePEG::Helicity::epsilon
auto epsilon(const LorentzVector< A > &a, const LorentzVector< B > &b, const LorentzVector< C > &c, const LorentzVector< D > &d) -> decltype(a.x() *b.y() *c.z() *d.t())
ThePEG
ThePEG::Complex
std::complex< double > Complex
ThePEG::IBPtr
ThePEG::Ptr< InterfacedBase >::pointer IBPtr
ThePEG::tPDVector
vector< tPDPtr > tPDVector
ThePEG::tcPDPtr
ThePEG::Ptr< ParticleData >::transient_const_pointer tcPDPtr
ThePEG::sqr
constexpr auto sqr(const T &x) -> decltype(x *x)
Herwig::FlavourInfo
Definition:
IsoSpin.h:46
Generated on Thu Jun 20 2024 17:50:52 for Herwig by
1.9.6