herwig is hosted by Hepforge, IPPP Durham
Herwig 7.3.0
GeneralThreeBodyDecayer.h
1// -*- C++ -*-
2#ifndef HERWIG_GeneralThreeBodyDecayer_H
3#define HERWIG_GeneralThreeBodyDecayer_H
4//
5// This is the declaration of the GeneralThreeBodyDecayer class.
6//
7
8#include "Herwig/Decay/DecayIntegrator.h"
9#include "Herwig/Models/General/TBDiagram.h"
10#include "GeneralThreeBodyDecayer.fh"
11
12namespace Herwig {
13using namespace ThePEG;
14
22
23public:
24
26 typedef pair<tcPDPtr, Energy> PMPair;
27
28
29public:
30
35 refTag_(), refTagCC_(), iflow_(999),
36 intOpt_(0), relerr_(1e-2)
37 {}
38
47 virtual ParticleVector decay(const Particle & parent,
48 const tPDVector & children) const;
49
56 virtual int modeNumber(bool & cc, tcPDPtr parent,const tPDVector & children) const;
57
71 virtual double threeBodyMatrixElement(const int imode, const Energy2 q2,
72 const Energy2 s3, const Energy2 s2,
73 const Energy2 s1, const Energy m1,
74 const Energy m2, const Energy m3) const;
75
83 virtual Energy partialWidth(PMPair inpart, PMPair outa,
84 PMPair outb, PMPair outc) const;
85
93 virtual double brat(const DecayMode & dm, const Particle & p,
94 double oldbrat) const;
95
97
102 const vector<TBDiagram> & process,
103 double symfac);
104
105public:
106
114
120 void persistentInput(PersistentIStream & is, int version);
122
129 static void Init();
130
131protected:
132
140 virtual void doinit();
141
146 virtual void doinitrun();
148
152 virtual void setupDiagrams(bool checkKinematics);
153
154protected:
155
160 const vector<TBDiagram> & getProcessInfo() const {
161 return diagrams_;
162 }
163
167 PDPtr incoming() const { return incoming_; }
168
172 const vector<tPDPtr> & outgoing() const { return outgoing_; }
173
177 unsigned int numberOfFlows() const { return nflow_; }
178
182 bool setColourFactors(double symfac);
183
187 const vector<DVector> & getColourFactors() const { return colour_; }
188
192 const vector<DVector> & getLargeNcColourFactors() const {
193 return colourLargeNC_;
194 }
195
199 const vector<unsigned int> & diagramMap() const {
200 return diagmap_;
201 }
202
206 unsigned int widthOption() const { return widthOpt_; }
207
214 void colourConnections(const Particle & parent,
215 const ParticleVector & out) const;
216
225 void constructIntegratorChannels(vector<int> & intype, vector<Energy> & inmass,
226 vector<Energy> & inwidth, vector<double> & inpow,
227 vector<double> & inweights) const;
228
233 void colourFlow(unsigned int flow) const { iflow_ = flow; }
234
238 unsigned int const & colourFlow() const { return iflow_; }
239
243 double relativeError() const {return relerr_;}
244
245private:
246
252
253private:
254
259
263 vector<tPDPtr> outgoing_;
264
268 vector<TBDiagram> diagrams_;
269
273 vector<unsigned int> diagmap_;
274
278 vector<DVector> colour_;
279
283 vector<DVector> colourLargeNC_;
284
288 unsigned int nflow_;
289
293 mutable WidthCalculatorBasePtr widthCalc_;
294
298 unsigned int widthOpt_;
299
305 string refTag_;
306
312 string refTagCC_;
313
317 mutable unsigned int iflow_;
318
322 unsigned int intOpt_;
323
327 double relerr_;
328};
329
330}
331
332#endif /* HERWIG_GeneralThreeBodyDecayer_H */
Main class for Decayers implementing multi-channel phase space integration.
int imode() const
The mode being used for this decay.
Here is the documentation of the GeneralThreeBodyDecayer class.
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...
const vector< DVector > & getColourFactors() const
Return the matrix of colour factors.
vector< unsigned int > diagmap_
Map between the diagrams and the phase-space channels.
unsigned int const & colourFlow() const
Set the colour flow.
static void Init()
The standard Init function used to initialize the interfaces.
string refTagCC_
Store a decay tag for the cc-mode that can be tested when trying to determine whether it can be gener...
bool setDecayInfo(PDPtr incoming, vector< PDPtr > outgoing, const vector< TBDiagram > &process, double symfac)
Set the diagrams.
GeneralThreeBodyDecayer()
The default constructor.
const vector< TBDiagram > & getProcessInfo() const
Access the TBDiagrams that store the required information to create the diagrams.
unsigned int widthOption() const
Option for the handling of the widths of the intermediate particles.
void constructIntegratorChannels(vector< int > &intype, vector< Energy > &inmass, vector< Energy > &inwidth, vector< double > &inpow, vector< double > &inweights) const
Method to construct the channels for the integrator to give the partial width.
unsigned int numberOfFlows() const
Number of colour flows.
unsigned int widthOpt_
Option for the treatment of the widths.
virtual void setupDiagrams(bool checkKinematics)
Set up the diagrams etc.
bool setColourFactors(double symfac)
Set up the colour factors.
vector< DVector > colourLargeNC_
Store cololur factors for ME calc at large N_c.
double relerr_
Relative error for GQ integration of partial width.
void colourConnections(const Particle &parent, const ParticleVector &out) const
Set colour connections.
unsigned int nflow_
The number of colourflows.
vector< DVector > colour_
Store colour factors for ME calc.
const vector< DVector > & getLargeNcColourFactors() const
Return the matrix of colour factors.
void persistentInput(PersistentIStream &is, int version)
Function used to read in object persistently.
unsigned int intOpt_
Option for the construction of the gaussian integrator.
double relativeError() const
Relative error for GQ integration.
PDPtr incoming() const
Incoming particle.
void persistentOutput(PersistentOStream &os) const
Function used to write out object persistently.
virtual Energy partialWidth(PMPair inpart, PMPair outa, PMPair outb, PMPair outc) const
Function to return partial Width.
virtual void doinit()
Initialize this object after the setup phase before saving an EventGenerator to disk.
PDPtr incoming_
Store the incoming particle.
virtual double brat(const DecayMode &dm, const Particle &p, double oldbrat) const
An overidden member to calculate a branching ratio for a certain particle instance.
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...
vector< TBDiagram > diagrams_
Store the diagrams for the decay.
const vector< unsigned int > & diagramMap() const
Get the mapping between the phase-space channel and the diagram.
string refTag_
Store a decay tag for this mode that can be tested when trying to determine whether it can be generat...
WidthCalculatorBasePtr widthCalc_
Reference to object to calculate the partial width.
vector< tPDPtr > outgoing_
Outgoing particles.
virtual int modeNumber(bool &cc, tcPDPtr parent, const tPDVector &children) const
Which of the possible decays is required.
const vector< tPDPtr > & outgoing() const
Outgoing particles.
void colourFlow(unsigned int flow) const
Set the colour flow.
virtual void doinitrun()
Initialize this object.
unsigned int iflow_
The colour flow.
GeneralThreeBodyDecayer & operator=(const GeneralThreeBodyDecayer &)=delete
The assignment operator is private and must never be called.
pair< tcPDPtr, Energy > PMPair
A ParticleData ptr and (possible) mass pair.
-*- C++ -*-
vector< tPDPtr > tPDVector
vector< PPtr > ParticleVector
ThePEG::Ptr< ParticleData >::transient_const_pointer tcPDPtr
ThePEG::Ptr< ParticleData >::pointer PDPtr