herwig is hosted by Hepforge, IPPP Durham
Herwig++  2.7.0
PVectorMesonVectorPScalarDecayer.h
00001 // -*- C++ -*-
00002 //
00003 // PVectorMesonVectorPScalarDecayer.h is a part of Herwig++ - A multi-purpose Monte Carlo event generator
00004 // Copyright (C) 2002-2011 The Herwig Collaboration
00005 //
00006 // Herwig++ is licenced under version 2 of the GPL, see COPYING for details.
00007 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
00008 //
00009 #ifndef HERWIG_PVectorMesonVectorPScalarDecayer_H
00010 #define HERWIG_PVectorMesonVectorPScalarDecayer_H
00011 //
00012 // This is the declaration of the PVectorMesonVectorPScalarDecayer class.
00013 //
00014 #include "Herwig++/Decay/DecayIntegrator.h"
00015 #include "Herwig++/Decay/DecayPhaseSpaceMode.h"
00016 #include "ThePEG/Helicity/LorentzPolarizationVector.h"
00017 
00018 namespace Herwig {
00019 using namespace ThePEG;
00020 
00041 class PVectorMesonVectorPScalarDecayer: public DecayIntegrator {
00042 
00043 public:
00044 
00048   PVectorMesonVectorPScalarDecayer();
00049 
00056   virtual int modeNumber(bool & cc, tcPDPtr parent, 
00057                          const tPDVector & children) const;
00058 
00067   double me2(const int ichan,const Particle & part,
00068              const ParticleVector & decay, MEOption meopt) const;
00069 
00075   virtual void dataBaseOutput(ofstream & os,bool header) const;
00076 
00077 public:
00078 
00085   void persistentOutput(PersistentOStream & os) const;
00086 
00092   void persistentInput(PersistentIStream & is, int version);
00094 
00098   static void Init();
00099 
00108   bool twoBodyMEcode(const DecayMode & dm, int & mecode, double & coupling) const;
00109 
00110 protected:
00111 
00118   virtual IBPtr clone() const {return new_ptr(*this);}
00119 
00124   virtual IBPtr fullclone() const {return new_ptr(*this);}
00126 
00127 protected:
00128 
00136   virtual void doinit();
00137 
00141   virtual void doinitrun();
00143 
00144 private:
00145 
00149   static ClassDescription<PVectorMesonVectorPScalarDecayer> initPVectorMesonVectorPScalarDecayer;
00150 
00154   PVectorMesonVectorPScalarDecayer & operator=(const PVectorMesonVectorPScalarDecayer &);
00155 
00156 private:
00157 
00161   vector<InvEnergy> _coupling;
00162 
00166   vector<int> _incoming;
00167 
00171   vector<int> _outgoingV;
00172 
00176   vector<int> _outgoingP;
00177 
00181   vector<double> _maxweight;
00182 
00186   unsigned int _initsize;
00187 
00191   mutable RhoDMatrix _rho;
00192 
00196   mutable vector<Helicity::LorentzPolarizationVector> _vectors[2];
00197 
00198 };
00199 
00200 }
00201 
00202 
00203 #include "ThePEG/Utilities/ClassTraits.h"
00204 
00205 namespace ThePEG {
00206 
00213 template <>
00214 struct BaseClassTrait<Herwig::PVectorMesonVectorPScalarDecayer,1> {
00216   typedef Herwig::DecayIntegrator NthBase;
00217 };
00218 
00223 template <>
00224 struct ClassTraits<Herwig::PVectorMesonVectorPScalarDecayer>
00225   : public ClassTraitsBase<Herwig::PVectorMesonVectorPScalarDecayer> {
00227   static string className() { return "Herwig::PVectorMesonVectorPScalarDecayer"; }
00233   static string library() { return "HwVMDecay.so"; }
00234 
00235 };
00236 
00239 }
00240 
00241 #endif /* HERWIG_PVectorMesonVectorPScalarDecayer_H */