herwig is hosted by Hepforge, IPPP Durham
Herwig++  2.7.0
VectorMeson3PionDecayer.h
00001 // -*- C++ -*-
00002 //
00003 // VectorMeson3PionDecayer.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_VectorMeson3PionDecayer_H
00010 #define HERWIG_VectorMeson3PionDecayer_H
00011 // This is the declaration of the VectorMeson3PionDecayer 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 
00099 class VectorMeson3PionDecayer: public DecayIntegrator {
00100 
00101 public:
00102 
00106   VectorMeson3PionDecayer();
00107 
00116   double me2(const int ichan,const Particle & part,
00117              const ParticleVector & decay, MEOption meopt) const;
00118 
00125   virtual int modeNumber(bool & cc, tcPDPtr parent, 
00126                          const tPDVector & children) const;
00127 
00133   virtual WidthCalculatorBasePtr threeBodyMEIntegrator(const DecayMode & dm) const;
00134 
00148   virtual double threeBodyMatrixElement(const int imode, const Energy2 q2,
00149                                         const  Energy2 s3, const Energy2 s2, const 
00150                                         Energy2 s1, const Energy m1,
00151                                         const Energy m2, const Energy m3) const;
00152   
00158   virtual void dataBaseOutput(ofstream & os,bool header) const;
00159 
00160 public:
00161 
00168   void persistentOutput(PersistentOStream & os) const;
00169 
00175   void persistentInput(PersistentIStream & is, int version);
00177 
00181   static void Init();
00182 
00183 protected:
00184 
00191   virtual IBPtr clone() const {return new_ptr(*this);}
00192 
00197   virtual IBPtr fullclone() const {return new_ptr(*this);}
00199 
00200 protected:
00201 
00209   virtual void doinit();
00210 
00214   virtual void doinitrun();
00216 
00217 private:
00218 
00222   static ClassDescription<VectorMeson3PionDecayer> initVectorMeson3PionDecayer;
00223 
00227   VectorMeson3PionDecayer & operator=(const VectorMeson3PionDecayer &);
00228 
00229 private:
00230 
00234   vector<double> _incoming;
00235 
00239   vector<InvEnergy> _coupling;
00240 
00244   vector<double> _directcoupling;
00245 
00249   vector<double> _directphase;
00250 
00254   vector<double> _rho2coupling;
00255 
00259   vector<double> _rho2phase;
00260 
00264   vector<double> _rho3coupling;
00265 
00269   vector<double> _rho3phase;
00270 
00274   vector<double> _maxwgt;
00275 
00279   vector<double> _rho1wgt;
00280 
00284   vector<double> _rho2wgt;
00285 
00289   vector<double> _rho3wgt;
00290 
00294   vector<Energy> _rho1mass;
00295 
00299   vector<Energy> _rho2mass;
00300 
00304   vector<Energy> _rho3mass;
00305 
00309   vector<Energy> _rho1width;
00310 
00314   vector<Energy> _rho2width;
00315 
00319   vector<Energy> _rho3width;
00320 
00324   vector<bool> _defaultmass;
00325 
00333   vector<vector <double> > _rho0const;
00334 
00338   vector<vector <double> > _rhocconst;
00340 
00344   vector<vector<Energy> > _rhomass;
00345 
00349   vector<vector<Energy2> > _rhomass2;
00350 
00354   vector<vector <complex<InvEnergy2> > > _ccoupling;
00355 
00359   Energy _mpic;
00360 
00364   Energy _mpi0;
00365 
00369   unsigned int _initsize;
00370 
00375   mutable vector<Helicity::LorentzPolarizationVector> _vectors;
00376   
00380   mutable RhoDMatrix _rho;
00381 };
00382 
00383 }
00384 
00385 
00386 #include "ThePEG/Utilities/ClassTraits.h"
00387 
00388 namespace ThePEG {
00389 
00396 template <>
00397 struct BaseClassTrait<Herwig::VectorMeson3PionDecayer,1> {
00399   typedef Herwig::DecayIntegrator NthBase;
00400 };
00401 
00406 template <>
00407 struct ClassTraits<Herwig::VectorMeson3PionDecayer>
00408   : public ClassTraitsBase<Herwig::VectorMeson3PionDecayer> {
00410   static string className() { return "Herwig::VectorMeson3PionDecayer"; }
00416   static string library() { return "HwVMDecay.so"; }
00417 
00418 };
00419 
00422 }
00423 
00424 #endif /* HERWIG_VectorMeson3PionDecayer_H */