Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-08-06 09:24:02

0001 // -*- C++ -*-
0002 //
0003 // SMTopDecayer.h is a part of Herwig - A multi-purpose Monte Carlo event generator
0004 // Copyright (C) 2002-2019 The Herwig Collaboration
0005 //
0006 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
0007 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
0008 //
0009 #ifndef HERWIG_SMTopDecayer_H
0010 #define HERWIG_SMTopDecayer_H
0011 //
0012 // This is the declaration of the SMTopDecayer class.
0013 //
0014 
0015 #include "Herwig/Decay/PerturbativeDecayer.h"
0016 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h"
0017 #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h"
0018 #include "Herwig/Decay/PhaseSpaceMode.h"
0019 #include "Herwig/Models/StandardModel/StandardModel.h"
0020 #include "Herwig/Shower/ShowerAlpha.fh"
0021 
0022 namespace Herwig {
0023   using namespace ThePEG;
0024   using namespace ThePEG::Helicity;
0025   
0026 /**
0027  * \ingroup Decay
0028  *
0029  * The SMTopDecayer performs decays of the top quark into
0030  * the bottom quark and qqbar pairs or to the bottom quark and lepton 
0031  * neutrino pairs via W boson exchange.
0032  */
0033 class SMTopDecayer: public PerturbativeDecayer {
0034 
0035 public:
0036 
0037   /**
0038    * The default constructor.
0039    */
0040   SMTopDecayer();
0041 
0042 public:
0043 
0044   /**
0045    *  Virtual members to be overridden by inheriting classes
0046    *  which implement hard corrections 
0047    */
0048   //@{
0049   /**
0050    *  Has an old fashioned ME correction
0051    */
0052   virtual bool hasMECorrection() {return true;}
0053 
0054   /**
0055    *  Initialize the ME correction
0056    */
0057   virtual void initializeMECorrection(RealEmissionProcessPtr , double & ,
0058                       double & );
0059   
0060   /**
0061    * Apply the soft matrix element correction
0062    * @param parent The initial particle in the current branching
0063    * @param progenitor The progenitor particle of the jet
0064    * @param fs Whether the emission is initial or final-state
0065    * @param highestpT The highest pT so far in the shower
0066    * @param ids ids of the particles produced in the branching
0067    * @param z The momentum fraction of the branching
0068    * @param scale the evolution scale of the branching
0069    * @param pT The transverse momentum of the branching
0070    * @return If true the emission should be vetoed
0071    */
0072   virtual bool softMatrixElementVeto(PPtr parent,
0073                      PPtr progenitor,
0074                      const bool & fs,
0075                      const Energy & highestpT,
0076                      const vector<tcPDPtr> & ids,
0077                      const double & z,
0078                      const Energy & scale,
0079                      const Energy & pT);
0080 
0081   /**
0082    *  Has a POWHEG style correction
0083    */
0084   virtual POWHEGType hasPOWHEGCorrection() {return FSR;}
0085   //@}
0086 
0087 public:
0088 
0089   /**
0090    * Which of the possible decays is required
0091    */
0092   virtual int modeNumber(bool & , tcPDPtr , const tPDVector & ) const {return -1;}
0093 
0094   /**
0095    * Check if this decayer can perfom the decay for a particular mode.
0096    * Uses the modeNumber member but can be overridden
0097    * @param parent The decaying particle
0098    * @param children The decay products
0099    */
0100   virtual bool accept(tcPDPtr parent, const tPDVector & children) const;
0101 
0102   /**
0103    * For a given decay mode and a given particle instance, perform the
0104    * decay and return the decay products. As this is the base class this
0105    * is not implemented.
0106    * @return The vector of particles produced in the decay.
0107    */
0108   virtual ParticleVector decay(const Particle & parent,
0109                    const tPDVector & children) const;
0110 
0111   /**
0112    * Return the matrix element squared for a given mode and phase-space channel.
0113    * @param ichan The channel we are calculating the matrix element for. 
0114    * @param part The decaying Particle.
0115    * @param outgoing The particles produced in the decay
0116    * @param momenta  The momenta of the particles produced in the decay
0117    * @param meopt Option for the calculation of the matrix element
0118    * @return The matrix element squared for the phase-space configuration.
0119    */
0120   double me2(const int ichan,const Particle & part,
0121          const tPDVector & outgoing,
0122          const vector<Lorentz5Momentum> & momenta,
0123          MEOption meopt) const;
0124 
0125   /**
0126    *   Construct the SpinInfos for the particles produced in the decay
0127    */
0128   virtual void constructSpinInfo(const Particle & part,
0129                  ParticleVector outgoing) const;
0130 
0131   /**
0132    * Method to return an object to calculate the 3 (or higher body) partial width
0133    * @param dm The DecayMode
0134    * @return A pointer to a WidthCalculatorBase object capable of calculating the width
0135    */
0136   virtual WidthCalculatorBasePtr threeBodyMEIntegrator(const DecayMode & dm) const;
0137   
0138   /**
0139    * The differential three body decay rate with one integral performed.
0140    * @param imode The mode for which the matrix element is needed.
0141    * @param q2 The scale, \e i.e. the mass squared of the decaying particle.
0142    * @param s  The invariant mass which still needs to be integrate over.
0143    * @param m1 The mass of the first  outgoing particle.
0144    * @param m2 The mass of the second outgoing particle.
0145    * @param m3 The mass of the third  outgoing particle.
0146    * @return The differential rate \f$\frac{d\Gamma}{ds}\f$
0147    */
0148   virtual InvEnergy threeBodydGammads(const int imode, const Energy2 q2,
0149                       const Energy2 s, const Energy m1,
0150                       const Energy m2, const Energy m3) const;
0151 
0152   /**
0153    * Output the setup information for the particle database
0154    * @param os The stream to output the information to
0155    * @param header Whether or not to output the information for MySQL
0156    */
0157   virtual void dataBaseOutput(ofstream & os,bool header) const;
0158 
0159 public:
0160 
0161   /** @name Functions used by the persistent I/O system. */
0162   //@{
0163   /**
0164    * Function used to write out object persistently.
0165    * @param os the persistent output stream written to.
0166    */
0167   void persistentOutput(PersistentOStream & os) const;
0168 
0169   /**
0170    * Function used to read in object persistently.
0171    * @param is the persistent input stream read from.
0172    * @param version the version number of the object when written.
0173    */
0174   void persistentInput(PersistentIStream & is, int version);
0175   //@}
0176 
0177   /**
0178    * The standard Init function used to initialize the interfaces.
0179    * Called exactly once for each class by the class description system
0180    * before the main function starts or
0181    * when this class is dynamically loaded.
0182    */
0183   static void Init();
0184 
0185 protected:
0186 
0187   /**
0188    *  The integrand for the integrate partial width
0189    */
0190   Energy6 dGammaIntegrand(Energy2 mffb2, Energy2 mbf2, Energy mt, Energy mb, 
0191               Energy mf, Energy mfb, Energy mw) const;
0192 
0193 protected:
0194 
0195   /** @name Clone Methods. */
0196   //@{
0197   /**
0198    * Make a simple clone of this object.
0199    * @return a pointer to the new object.
0200    */
0201   virtual IBPtr clone() const {return new_ptr(*this);}
0202 
0203   /** Make a clone of this object, possibly modifying the cloned object
0204    * to make it sane.
0205    * @return a pointer to the new object.
0206    */
0207   virtual IBPtr fullclone() const {return new_ptr(*this);}
0208   //@}
0209 
0210 protected:
0211 
0212   /** @name Standard Interfaced functions. */
0213   //@{
0214   /**
0215    * Initialize this object after the setup phase before saving and
0216    * EventGenerator to disk.
0217    * @throws InitException if object could not be initialized properly.
0218    */
0219   virtual void doinit();
0220 
0221   /**
0222    * Initialize this object. Called in the run phase just before
0223    * a run begins.
0224    */
0225   virtual void doinitrun();
0226   //@}
0227 
0228 protected:
0229 
0230   /**
0231    *  This function determines the point (\f$x_{g}\f$) where the condition that 
0232    *  \f$x_{a}\f$ be real supersedes that due to the external input 
0233    *  \f$\tilde{\kappa}\f$ where, again, \f$\kappa\f$ pertains to emissions from the 
0234    *  b.
0235    */
0236   double xgbcut(double);
0237 
0238   /**
0239    *  Full matrix element with a factor of \f$\frac{\alpha_SC_F}{x_g^2\pi}\f$ removed.
0240    * @param xw The momentum fraction of the W boson
0241    * @param xg The momentum fraction of the gluon.
0242    */
0243   double me(double xw, double xg);
0244 
0245 protected:
0246 
0247   /**
0248    *  Calculate matrix element ratio R/B
0249    */
0250   virtual double matrixElementRatio(const Particle & inpart, const ParticleVector & decay2,
0251                     const ParticleVector & decay3, MEOption meopt,
0252                     ShowerInteraction inter);
0253 
0254   /**
0255    *  LO matrix element for \f$t\to b W^\pm\f$
0256    */
0257   double loME(const Particle & inpart, const ParticleVector & decay);
0258 
0259   /**
0260    *  LO matrix element for \f$t\to b W^\pm\f$
0261    */
0262   double realME(const Particle & inpart, const ParticleVector & decay,
0263         ShowerInteraction inter);
0264   
0265 private:
0266 
0267   /**
0268    * The assignment operator is private and must never be called.
0269    * In fact, it should not even be implemented.
0270    */
0271   SMTopDecayer & operator=(const SMTopDecayer &) = delete;
0272   
0273   /**
0274    * Pointer to the W vertex
0275    */
0276   AbstractFFVVertexPtr FFWVertex_;
0277   
0278   /**
0279    * Pointer to the gluon vertex
0280    */
0281   AbstractFFVVertexPtr FFGVertex_;
0282   
0283   /**
0284    * Pointer to the photon vertex
0285    */
0286   AbstractFFVVertexPtr FFPVertex_;
0287   
0288   /**
0289    * Pointer to the photon vertex
0290    */
0291   AbstractVVVVertexPtr WWWVertex_;
0292   
0293   /**
0294    * Max weight for integration
0295    */
0296   //@{   
0297   /**
0298    * Weight \f$W\to q\bar{q}'\f$
0299    */
0300   vector<double> _wquarkwgt;
0301   
0302   /**
0303    * Weight \f$W\to \ell \nu\f$
0304    */
0305   vector<double> _wleptonwgt;
0306   //@}
0307 
0308   /**
0309    *  Pointer to the \f$W^\pm\f$
0310    */
0311   PDPtr _wplus;
0312 
0313   /**
0314    *  Spin density matrix for the decay
0315    */
0316   mutable RhoDMatrix _rho;
0317 
0318   /**
0319    *  1st spinor for the decay
0320    */
0321   mutable vector<SpinorWaveFunction   >   _inHalf;
0322 
0323   /**
0324    *  2nd spinor for the decay
0325    */
0326   mutable vector<SpinorWaveFunction   >   _outHalf;
0327 
0328   /**
0329    *  1st barred spinor for the decay
0330    */
0331   mutable vector<SpinorBarWaveFunction>   _inHalfBar;
0332 
0333   /**
0334    *  2nd barred spinor for the decay
0335    */
0336   mutable vector<SpinorBarWaveFunction>   _outHalfBar;
0337 
0338   /**
0339    *  The mass of the W boson
0340    */
0341   Energy _ma;
0342 
0343   /**
0344    *  The mass of the bottom quark
0345    */
0346   Energy _mc;
0347 
0348   /**
0349    *  The top mass
0350    */
0351   Energy _mt;
0352 
0353   /**
0354    *  The gluon mass.
0355    */
0356   Energy _mg;
0357 
0358   /**
0359    *  The mass ratio for the W.
0360    */
0361   double _a;
0362 
0363   /**
0364    *  The mass ratio for the bottom.
0365    */
0366   double _c;
0367 
0368   /**
0369    *  The mass ratio for the gluon.
0370    */
0371   double _g;
0372 
0373   /**
0374    *  Two times the energy fraction of a.
0375    */
0376   double _ktb;
0377 
0378   /**
0379    *  Two times the energy fraction of the gluon.
0380    */
0381   double _ktc;
0382 
0383 
0384   /**
0385    *  This determines the hard matrix element importance 
0386    *  sampling in _xg. _xg_sampling=2.0 samples as 1/xg^2.
0387    */
0388   double _xg_sampling;
0389 
0390   /**
0391    *  The enhancement factor for initial-state radiation
0392    */
0393   double _initialenhance;
0394 
0395   /**
0396    *  The enhancement factor for final-state radiation
0397    */
0398   double _finalenhance;
0399 };
0400 
0401 }
0402 
0403 #endif /* HERWIG_SMTopDecayer_H */