herwig is hosted by Hepforge, IPPP Durham
Herwig++  2.7.0
DtoKPiPiE691.h
00001 // -*- C++ -*-
00002 //
00003 // DtoKPiPiE691.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_DtoKPiPiE691_H
00010 #define HERWIG_DtoKPiPiE691_H
00011 //
00012 // This is the declaration of the DtoKPiPiE691 class.
00013 //
00014 
00015 #include "Herwig++/Decay/DecayIntegrator.h"
00016 #include "Herwig++/Decay/DecayPhaseSpaceMode.h"
00017 
00018 namespace Herwig {
00019 
00020 using namespace ThePEG;
00021 
00028 class DtoKPiPiE691: public DecayIntegrator {
00029 
00030 public:
00034   DtoKPiPiE691();
00035   
00042   virtual int modeNumber(bool & cc, tcPDPtr parent, 
00043                          const tPDVector & children) const;
00044 
00053   double me2( const int ichan,const Particle & part,
00054              const ParticleVector & decay, MEOption meopt) const;
00055 
00061   virtual void dataBaseOutput(ofstream & os,bool header) const;
00062 
00063 public:
00064 
00071   void persistentOutput(PersistentOStream & os) const;
00072 
00078   void persistentInput(PersistentIStream & is, int version);
00080 
00087   static void Init();
00088 
00089 protected:
00090 
00103   double decayAngle(const Lorentz5Momentum & pparent,
00104                     const Lorentz5Momentum & pres,
00105                     const Lorentz5Momentum & p1) const {
00106     Energy2 dot   = pparent*p1,   mREp  = pres*pparent;
00107     Energy2 mRE1  = pres*p1,      mp2   = pparent.mass2();
00108     Energy2 mres2 = pres.mass2(), m12   = p1.mass2();
00109     return (dot*mres2-mREp*mRE1)/
00110       sqrt((mREp*mREp-mres2*mp2)*(mRE1*mRE1-mres2*m12));
00111   }
00112 
00121   Complex amplitude(int ispin, double costheta,Energy mAB,
00122                     Energy wres, Energy mres) const {
00123     double s = 0.;
00124     switch(ispin) {
00125     case 0: s = 1.;                    break;
00126     case 1: s = costheta;              break;
00127     case 2: s = 1.5*sqr(costheta)-0.5; break;
00128     default: assert(false);
00129     }
00130     Complex bw = sqrt(0.5*wres/GeV/Constants::pi)*GeV/
00131       (mAB-mres-complex<Energy>(ZERO,0.5*wres));
00132     return s*bw;
00133   }
00135 
00136 protected:
00137 
00144   virtual IBPtr clone() const {return new_ptr(*this);}
00145 
00150   virtual IBPtr fullclone() const {return new_ptr(*this);}
00152 
00153 protected:
00154 
00162   virtual void doinit();
00163 
00168   virtual void doinitrun();
00170 
00171 private:
00172 
00177   static ClassDescription<DtoKPiPiE691> initDtoKPiPiE691;
00178 
00183   DtoKPiPiE691 & operator=(const DtoKPiPiE691 &);
00184 
00185 private:
00186 
00194   double _a1NR;
00195 
00199   double _phi1NR;
00200 
00204   double _a1K892;
00205 
00209   double _phi1K892;
00210 
00214   double _a1K1430;
00215 
00219   double _phi1K1430;
00220 
00224   double _a1K1680;
00225 
00229   double _phi1K1680;
00230 
00234   double _a2NR;
00235 
00239   double _phi2NR;
00240 
00244   double _a2K8920;
00245 
00249   double _phi2K8920;
00250 
00254   double _a2K892m;
00255 
00259   double _phi2K892m;
00260 
00264   double _a2rho;
00265 
00269   double _phi2rho;
00270 
00274   double _a3NR;
00275 
00279   double _phi3NR;
00280 
00284   double _a3K892;
00285 
00289   double _phi3K892;
00290 
00294   double _a3rho;
00295 
00299   double _phi3rho;
00301 
00309   Complex _c1NR;
00310 
00314   Complex _c1K892;
00315 
00319   Complex _c1K1430;
00320 
00324   Complex _c1K1680;
00325 
00329   Complex _c2NR;
00330 
00334   Complex _c2K8920;
00335 
00339   Complex _c2K892m;
00340 
00344   Complex _c2rho;
00345 
00349   Complex _c3NR;
00350 
00354   Complex _c3K892;
00355 
00359   Complex _c3rho;
00361 
00369   bool _localparameters;
00370 
00374   Energy _mK8920;
00375 
00379   Energy _wK8920;
00380 
00384   Energy _mK892m;
00385 
00389   Energy _wK892m;
00390 
00394   Energy _mK1680;
00395 
00399   Energy _wK1680;
00400 
00404   Energy _mK1430;
00405 
00409   Energy _wK1430;
00410 
00414   Energy _mrho0;
00415 
00419   Energy _wrho0;
00420 
00424   Energy _mrhop;
00425 
00429   Energy _wrhop;
00431 
00439   vector<double> _maxwgt;
00440 
00444   vector<double> _weights;
00446 
00450   mutable RhoDMatrix _rho;
00451 };
00452 
00453 }
00454 
00455 #include "ThePEG/Utilities/ClassTraits.h"
00456 
00457 namespace ThePEG {
00458 
00463 template <>
00464 struct BaseClassTrait<Herwig::DtoKPiPiE691,1> {
00466   typedef Herwig::DecayIntegrator NthBase;
00467 };
00468 
00471 template <>
00472 struct ClassTraits<Herwig::DtoKPiPiE691>
00473   : public ClassTraitsBase<Herwig::DtoKPiPiE691> {
00475   static string className() { return "Herwig::DtoKPiPiE691"; }
00483   static string library() { return "HwSMDecay.so"; }
00484 };
00485 
00488 }
00489 
00490 #endif /* HERWIG_DtoKPiPiE691_H */