Herwig++
2.7.0
|
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 */