herwig is hosted by Hepforge, IPPP Durham
Herwig++  2.7.0
VectorMesonPVectorPScalarDecayer.h
00001 // -*- C++ -*-
00002 //
00003 // VectorMesonPVectorPScalarDecayer.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_VectorMesonPVectorPScalarDecayer_H
00010 #define HERWIG_VectorMesonPVectorPScalarDecayer_H
00011 // This is the declaration of the VectorMesonPVectorPScalarDecayer class.
00012 
00013 #include "Herwig++/Decay/DecayIntegrator.h"
00014 #include "Herwig++/Decay/DecayPhaseSpaceMode.h"
00015 #include "ThePEG/Helicity/LorentzPolarizationVector.h"
00016 
00017 namespace Herwig {
00018 using namespace ThePEG;
00019 
00035 class VectorMesonPVectorPScalarDecayer: public DecayIntegrator {
00036 
00037 public:
00038 
00042   VectorMesonPVectorPScalarDecayer();
00043 
00050   virtual int modeNumber(bool & cc, tcPDPtr parent, 
00051                          const tPDVector & children) const;
00052   
00061   double me2(const int ichan,const Particle & part,
00062              const ParticleVector & decay, MEOption meopt) const;
00063 
00069   virtual void dataBaseOutput(ofstream & os,bool header) const;
00070 
00071 public:
00072 
00079   void persistentOutput(PersistentOStream & os) const;
00080 
00086   void persistentInput(PersistentIStream & is, int version);
00088 
00092   static void Init();
00093 
00102   bool twoBodyMEcode(const DecayMode & dm, int & mecode, double & coupling) const;
00103 
00104 protected:
00105 
00112   virtual IBPtr clone() const {return new_ptr(*this);}
00113 
00118   virtual IBPtr fullclone() const {return new_ptr(*this);}
00120 
00121 protected:
00122 
00130   virtual void doinit();
00131 
00135   virtual void doinitrun();
00137 
00138 private:
00139 
00143   static ClassDescription<VectorMesonPVectorPScalarDecayer> initVectorMesonPVectorPScalarDecayer;
00144 
00148   VectorMesonPVectorPScalarDecayer & operator=(const VectorMesonPVectorPScalarDecayer &);
00149 
00150 private:
00151 
00155   vector<InvEnergy> _coupling;
00156 
00160   vector<int> _incoming;
00161 
00165   vector<int> _outgoingA;
00166 
00170   vector<int> _outgoingP;
00171 
00175   vector<double> _maxweight;
00176 
00180   unsigned int _initsize;
00181 
00185   mutable RhoDMatrix _rho;
00186 
00190   mutable vector<Helicity::LorentzPolarizationVector> _vectors[2];
00191 
00192 };
00193 
00194 }
00195 
00196 
00197 #include "ThePEG/Utilities/ClassTraits.h"
00198 
00199 namespace ThePEG {
00200 
00207 template <>
00208 struct BaseClassTrait<Herwig::VectorMesonPVectorPScalarDecayer,1> {
00210   typedef Herwig::DecayIntegrator NthBase;
00211 };
00212 
00217 template <>
00218 struct ClassTraits<Herwig::VectorMesonPVectorPScalarDecayer>
00219   : public ClassTraitsBase<Herwig::VectorMesonPVectorPScalarDecayer> {
00221   static string className() { return "Herwig::VectorMesonPVectorPScalarDecayer"; }
00227   static string library() { return "HwVMDecay.so"; }
00228 
00229 };
00230 
00233 }
00234 
00235 #endif /* HERWIG_VectorMesonPVectorPScalarDecayer_H */