herwig is hosted by Hepforge, IPPP Durham
Herwig  7.2.1
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 
12 namespace Herwig {
13 using namespace ThePEG;
14 
22 
23 public:
24 
26  typedef pair<tcPDPtr, Energy> PMPair;
27 
28 
29 public:
30 
34  GeneralThreeBodyDecayer() : nflow_(999), widthOpt_(1),
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 
101  bool setDecayInfo(PDPtr incoming,vector<PDPtr> outgoing,
102  const vector<TBDiagram> & process,
103  double symfac);
104 
105 public:
106 
113  void persistentOutput(PersistentOStream & os) const;
114 
120  void persistentInput(PersistentIStream & is, int version);
122 
129  static void Init();
130 
131 protected:
132 
140  virtual void doinit();
141 
146  virtual void doinitrun();
148 
152  virtual void setupDiagrams(bool checkKinematics);
153 
154 protected:
155 
160  const vector<TBDiagram> & getProcessInfo() const {
161  return diagrams_;
162  }
163 
167  PDPtr incoming() const { return incoming_; }
168 
172  const vector<PDPtr> & 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 
245 private:
246 
251  GeneralThreeBodyDecayer & operator=(const GeneralThreeBodyDecayer &) = delete;
252 
253 private:
254 
259 
263  vector<PDPtr> 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 */
void colourFlow(unsigned int flow) const
Set the colour flow.
unsigned int intOpt_
Option for the construction of the gaussian integrator.
const vector< TBDiagram > & getProcessInfo() const
Access the TBDiagrams that store the required information to create the diagrams. ...
double relativeError() const
Relative error for GQ integration.
unsigned int numberOfFlows() const
Number of colour flows.
const vector< DVector > & getLargeNcColourFactors() const
Return the matrix of colour factors.
pair< tcPDPtr, Energy > PMPair
A ParticleData ptr and (possible) mass pair.
PDPtr incoming() const
Incoming particle.
vector< TBDiagram > diagrams_
Store the diagrams for the decay.
const vector< DVector > & getColourFactors() const
Return the matrix of colour factors.
unsigned int widthOpt_
Option for the treatment of the widths.
const vector< unsigned int > & diagramMap() const
Get the mapping between the phase-space channel and the diagram.
unsigned int nflow_
The number of colourflows.
Here is the documentation of the GeneralThreeBodyDecayer class.
vector< tPDPtr > tPDVector
WidthCalculatorBasePtr widthCalc_
Reference to object to calculate the partial width.
Main class for Decayers implementing multi-channel phase space integration.
ThePEG::Ptr< ParticleData >::transient_const_pointer tcPDPtr
ThePEG::Ptr< ParticleData >::pointer PDPtr
const vector< PDPtr > & outgoing() const
Outgoing particles.
string refTag_
Store a decay tag for this mode that can be tested when trying to determine whether it can be generat...
double relerr_
Relative error for GQ integration of partial width.
unsigned int widthOption() const
Option for the handling of the widths of the intermediate particles.
vector< DVector > colourLargeNC_
Store cololur factors for ME calc at large N_c.
-*- C++ -*-
GeneralThreeBodyDecayer()
The default constructor.
vector< PPtr > ParticleVector
PDPtr incoming_
Store the incoming particle.
vector< PDPtr > outgoing_
Outgoing particles.
string refTagCC_
Store a decay tag for the cc-mode that can be tested when trying to determine whether it can be gener...
unsigned int const & colourFlow() const
Set the colour flow.
unsigned int iflow_
The colour flow.
vector< DVector > colour_
Store colour factors for ME calc.
vector< unsigned int > diagmap_
Map between the diagrams and the phase-space channels.