herwig is hosted by Hepforge, IPPP Durham
Herwig  7.1.5
VectorMeson2MesonDecayer.h
1 // -*- C++ -*-
2 //
3 // VectorMeson2MesonDecayer.h is a part of Herwig - A multi-purpose Monte Carlo event generator
4 // Copyright (C) 2002-2017 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_VectorMeson2MesonDecayer_H
10 #define HERWIG_VectorMeson2MesonDecayer_H
11 //
12 // This is the declaration of the VectorMeson2MesonDecayer class.
13 //
14 #include "Herwig/Decay/DecayIntegrator.h"
15 #include "Herwig/Decay/DecayPhaseSpaceMode.h"
16 #include "ThePEG/Helicity/LorentzPolarizationVector.h"
17 
18 namespace Herwig {
19 
20 using namespace ThePEG;
21 
52 
53 public:
54 
59 
66  virtual int modeNumber(bool & cc, tcPDPtr parent,
67  const tPDVector & children) const;
68 
77  double me2(const int ichan,const Particle & part,
78  const ParticleVector & decay, MEOption meopt) const;
79 
88  bool twoBodyMEcode(const DecayMode & dm, int & mecode, double & coupling) const;
89 
95  virtual void dataBaseOutput(ofstream & os,bool header) const;
96 
97 public:
98 
105  void persistentOutput(PersistentOStream & os) const;
106 
112  void persistentInput(PersistentIStream & is, int version);
114 
118  static void Init();
119 
120 protected:
121 
128  virtual IBPtr clone() const { return new_ptr(*this);}
129 
134  virtual IBPtr fullclone() const { return new_ptr(*this);}
136 
137 protected:
138 
146  virtual void doinit();
147 
151  virtual void doinitrun();
153 
154 private:
155 
160 
164  VectorMeson2MesonDecayer & operator=(const VectorMeson2MesonDecayer &) = delete;
165 
166 private:
167 
168 
172  vector<int> _incoming;
173 
177  vector<int> _outgoing1;
178 
182  vector<int> _outgoing2;
183 
187  vector<double> _maxweight;
188 
192  vector<double> _coupling;
193 
197  unsigned int _initsize;
198 
203  mutable vector<Helicity::LorentzPolarizationVector> _vectors;
204 
208  mutable RhoDMatrix _rho;
209 };
210 
211 }
212 
213 
214 namespace ThePEG {
215 
222 template <>
223 struct BaseClassTrait<Herwig::VectorMeson2MesonDecayer,1> {
225  typedef Herwig::DecayIntegrator NthBase;
226 };
227 
232 template <>
234  : public ClassTraitsBase<Herwig::VectorMeson2MesonDecayer> {
236  static string className() { return "Herwig::VectorMeson2MesonDecayer"; }
242  static string library() { return "HwVMDecay.so"; }
243 
244 };
245 
248 }
249 
250 #endif /* HERWIG_VectorMeson2MesonDecayer_H */
RhoDMatrix _rho
Storage of the matrix.
vector< int > _outgoing1
the PDG codes for the first outgoing meson
ThePEG::Ptr< InterfacedBase >::pointer IBPtr
vector< int > _outgoing2
the PDG codes for the second outgoing meson
virtual IBPtr clone() const
Make a simple clone of this object.
MEOption
Enum for the matrix element option.
vector< double > _coupling
the coupling for the decay
virtual IBPtr fullclone() const
Make a clone of this object, possibly modifying the cloned object to make it sane.
vector< tPDPtr > tPDVector
vector< Helicity::LorentzPolarizationVector > _vectors
Storage of polarization tensors to try and increase speed.
Main class for Decayers implementing multi-channel phase space integration.
ThePEG::Ptr< ParticleData >::transient_const_pointer tcPDPtr
vector< int > _incoming
the PDG codes for the incoming particles
vector< double > _maxweight
the maximum weight for the integration
static ClassDescription< VectorMeson2MesonDecayer > initVectorMeson2MesonDecayer
Describe a concrete class with persistent data.
This class is the implementation for the decay of a vector meson to two scalar mesons, the classic example is , via a current which is the difference of the momenta of the mesons.
unsigned int _initsize
Initial size of the vectors.
-*- C++ -*-
vector< PPtr > ParticleVector