herwig is hosted by Hepforge, IPPP Durham
Herwig++  2.7.0
KaonThreeMesonCurrent.h
00001 // -*- C++ -*-
00002 //
00003 // KaonThreeMesonCurrent.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_KaonThreeMesonCurrent_H
00010 #define HERWIG_KaonThreeMesonCurrent_H
00011 //
00012 // This is the declaration of the KaonThreeMesonCurrent class.
00013 //
00014 
00015 #include "ThreeMesonCurrentBase.h"
00016 
00017 namespace Herwig {
00018 
00019 using namespace ThePEG;
00020 
00030 class KaonThreeMesonCurrent: public ThreeMesonCurrentBase {
00031 
00032 public:
00033 
00037   KaonThreeMesonCurrent();
00038 
00055   virtual bool createMode(int icharge,unsigned int imode,DecayPhaseSpaceModePtr mode,
00056                           unsigned int iloc,unsigned int ires,
00057                           DecayPhaseSpaceChannelPtr phase,Energy upp);
00059 
00066   virtual void dataBaseOutput(ofstream & os,bool header,bool create) const;
00067   
00080   double threeBodyMatrixElement(const int imode,  const Energy2 q2,
00081                                 const Energy2 s3, const Energy2 s2, 
00082                                 const Energy2 s1, const Energy  m1, 
00083                                 const Energy  m2, const Energy  m3) const;
00084 
00085 protected:
00086 
00091   virtual bool acceptMode(int) const;
00092 
00103   virtual FormFactors calculateFormFactors(const int ichan,const int imode,
00104                                            Energy2 q2,Energy2 s1,Energy2 s2,Energy2 s3) const;
00105 
00106 public:
00107 
00114   void persistentOutput(PersistentOStream & os) const;
00115 
00121   void persistentInput(PersistentIStream & is, int version);
00123 
00130   static void Init();
00131 
00132 protected:
00133 
00140   virtual IBPtr clone() const;
00141 
00146   virtual IBPtr fullclone() const;
00148 
00149 protected:
00150 
00158   virtual void doinit();
00159 
00163   virtual void doinitrun();
00164 
00168   virtual void doupdate();
00170 
00171 private:
00172 
00177   KaonThreeMesonCurrent & operator=(const KaonThreeMesonCurrent &);
00178 
00179 private:
00180 
00186   Complex Trho1(Energy2 q2,int ires) const;
00187 
00193   Complex Trho2(Energy2 q2,int ires) const;
00194 
00200   Complex TKstar1(Energy2 q2,int ires) const;
00201 
00207   Complex TKstar2(Energy2 q2,int ires) const;
00208 
00214   Complex BWrho1(Energy2 q2, unsigned int ires) const;
00215 
00221   Complex BWrho2(Energy2 q2, unsigned int ires) const;
00222 
00228   Complex BWKstar1(Energy2 q2, unsigned int ires) const;
00229 
00235   Complex BWKstar2(Energy2 q2, unsigned int ires) const;
00236 
00242   Complex a1BreitWigner(Energy2 q2) const;
00243 
00250   Complex TK1(Energy2 q2,unsigned int iopt,int ires) const;
00251 
00258   Complex K1BreitWigner(Energy2 q2,unsigned int ires) const;
00259 
00265   Energy a1Width(Energy2 q2) const;
00266 
00270   double g(Energy2 q2) const;
00271 
00276   void inita1Width(int iopt);
00277 
00283   Complex Tomega(Energy2 q2, int ires) const;
00284 
00290   Complex OmegaPhiBreitWigner(Energy2 q2, unsigned int ires) const;
00291 
00299   Complex TOmegaKStar(Energy2 s1,Energy2 s2,int ires) const;
00300 
00301 private:
00302 
00310   vector<double> _rho1wgts;
00311 
00315   vector<Energy> _rho1mass;
00316 
00320   vector<Energy> _rho1width;
00322 
00330   vector<double> _rho2wgts;
00331 
00335   vector<Energy> _rho2mass;
00336 
00340   vector<Energy> _rho2width;
00342 
00350   vector<double> _kstar1wgts;
00351 
00355   vector<Energy> _kstar1mass;
00356 
00360   vector<Energy> _kstar1width;
00362 
00370   vector<double> _kstar2wgts;
00371 
00375   vector<Energy> _kstar2mass;
00376 
00380   vector<Energy> _kstar2width;
00382 
00390   Energy _a1mass;
00391   
00395   Energy _a1width;
00396 
00400   vector<Energy> _k1mass;
00401 
00405   vector<Energy> _k1width;
00406 
00410   vector<double> _k1wgta;
00411 
00415   vector<double> _k1wgtb;
00416 
00420   vector<Energy>  _a1runwidth;
00421 
00425   vector<Energy2> _a1runq2;
00426 
00430   Interpolator<Energy,Energy2>::Ptr _a1runinter;
00432 
00440   double _epsomega;
00441 
00445   Energy _omegamass;
00446 
00450   Energy _omegawidth;
00451 
00455   Energy _phimass;
00456 
00460   Energy _phiwidth;
00462 
00466   double _omegaKstarwgt;
00467 
00471   Energy _fpi;
00472 
00476   Energy _mpi;
00477 
00481   Energy _mK;
00482 
00490   bool _initializea1;
00491   
00495   bool _rhoparameters;
00496 
00500   bool _kstarparameters;
00501 
00505   bool _a1parameters;
00506 
00510   bool _k1parameters;
00511 
00515   bool _a1opt;
00516 
00520   bool _omegaopt;
00522 
00526   Energy _maxmass;
00527 
00531   Energy _maxcalc;
00532 };
00533 
00534 }
00535 
00536 #endif /* HERWIG_KaonThreeMesonCurrent_H */