Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 //
0003 // WeakPartonicDecayer.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_WeakPartonicDecayer_H
0010 #define HERWIG_WeakPartonicDecayer_H
0011 //
0012 // This is the declaration of the WeakPartonicDecayer class.
0013 //
0014 
0015 #include "PartonicDecayerBase.h"
0016 
0017 namespace Herwig {
0018 
0019 using namespace ThePEG;
0020 
0021 /**
0022  * The WeakPartonicDecayer class is designed to replace the HeavyDecayer
0023  * class which implements the partonic decays of hadrons containing a 
0024  * heavy quark in the same way as in FORTRAN Herwig. 
0025  *
0026  * There are a number of major changes
0027  *
0028  * - The helicity formalism is used for the decays so that the \f$\tau\f$ lepton
0029  *   gets the correct correlations.
0030  *
0031  * - The particles produced directly by the hadronisation, i.e. the primary hadrons
0032  *   produced in cluster decay are checked to ensure that none of the exclusive
0033  *   modes are reproduced.
0034  *
0035  * - Two body modes are allowed to try and force baryon production etc. In this case
0036  *   the colours of the partons are connected.
0037  * 
0038  * - Three body modes of the form \f$q g \bar{q}\f$ are supported for penguin mediated
0039  *   weak decays.
0040  *
0041  *  Two types of matrix element are supported for this decay
0042  *
0043  *  - MECode=0   flat-phase space.
0044  *  - MECode=100 V-A matrix element for the heavy quark decay in the spectator model.
0045  *
0046  *  In addition for the two-body decays and the three-bopdy spectator decays 
0047  *  using the weka V-A matrix element the option of adding an extra gluon to increase
0048  *  the multiplicity of hadrons is included
0049  * 
0050  * @see HeavyDecayer
0051  */
0052 class WeakPartonicDecayer: public PartonicDecayerBase {
0053 
0054 public:
0055 
0056   /**
0057    * The default constructor.
0058    */
0059   WeakPartonicDecayer();
0060 
0061   /**
0062    * Check if this decayer can perfom the decay for a particular mode
0063    * @param parent The decaying particle
0064    * @param children The decay products
0065    * @return true If this decayer can handle the given mode, otherwise false.
0066    */
0067   virtual bool accept(tcPDPtr parent, const tPDVector & children) const;
0068 
0069   
0070   /**
0071    *  Perform the decay of the particle to the specified decay products
0072    * @param parent The decaying particle
0073    * @param children The decay products
0074    * @return a ParticleVector containing the decay products.
0075    */
0076   virtual ParticleVector decay(const Particle & parent,
0077                    const tPDVector & children) const;
0078 
0079   /**
0080    * Output the setup information for the particle database
0081    * @param os The stream to output the information to
0082    * @param header Whether or not to output the information for MySQL
0083    */
0084   virtual void dataBaseOutput(ofstream & os,bool header) const;
0085 
0086 public:
0087 
0088   /** @name Functions used by the persistent I/O system. */
0089   //@{
0090   /**
0091    * Function used to write out object persistently.
0092    * @param os the persistent output stream written to.
0093    */
0094   void persistentOutput(PersistentOStream & os) const;
0095 
0096   /**
0097    * Function used to read in object persistently.
0098    * @param is the persistent input stream read from.
0099    * @param version the version number of the object when written.
0100    */
0101   void persistentInput(PersistentIStream & is, int version);
0102   //@}
0103 
0104   /**
0105    * The standard Init function used to initialize the interfaces.
0106    * Called exactly once for each class by the class description system
0107    * before the main function starts or
0108    * when this class is dynamically loaded.
0109    */
0110   static void Init();
0111 
0112 public:
0113 
0114   /**
0115    * Weighting of phase space for V-A matrix elements
0116    */
0117   static double VAWt(Energy2, Energy2, Energy2, InvEnergy4);
0118 
0119 protected:
0120 
0121   /** @name Clone Methods. */
0122   //@{
0123   /**
0124    * Make a simple clone of this object.
0125    * @return a pointer to the new object.
0126    */
0127   virtual IBPtr clone() const;
0128 
0129   /** Make a clone of this object, possibly modifying the cloned object
0130    * to make it sane.
0131    * @return a pointer to the new object.
0132    */
0133   virtual IBPtr fullclone() const;
0134   //@}
0135 
0136   /**
0137    *  Compute \f$\rho\f$ matrix for tau decay in three body case
0138    * @param dec ParticleData object of decaying quark
0139    * @param rhoin Spin density matrix for the decaying quark
0140    * @param pdec The momentum of the decaying particle
0141    * @param partons The partons produced
0142    */
0143   double threeBodyMatrixElement(tcPDPtr dec,const RhoDMatrix & rhoin,
0144                 Lorentz5Momentum & pdec,
0145                 ParticleVector& partons) const;
0146 
0147   /**
0148    *  Four body matrix element for weak decay including an extra gluon
0149    * @param p0 Momentum of decaying quark
0150    * @param p1 Momentum of connected decay product
0151    * @param p2 Momentum of first parton from W decay
0152    * @param p3 Momentum of second parton from W decay
0153    * @param pg Momentum of gluon from W decay
0154    * @param Wcol Whether or not W products are coloured
0155    * @param initial Whether the radiation is from the decaying quark/first decay product
0156    * or W decay products
0157    */
0158   double fourBodyMatrixElement(Lorentz5Momentum & p0,Lorentz5Momentum & p1,
0159                    Lorentz5Momentum & p2,Lorentz5Momentum & p3,
0160                    Lorentz5Momentum & pg,bool Wcol, bool & initial) const;
0161 
0162 private:
0163 
0164   /**
0165    * The assignment operator is private and must never be called.
0166    * In fact, it should not even be implemented.
0167    */
0168   WeakPartonicDecayer & operator=(const WeakPartonicDecayer &) = delete;
0169 
0170 private:
0171 
0172   /**
0173    *  The code for the matrix element being used.
0174    */
0175   int MECode;
0176 
0177   /**
0178    *  Probablilty of radiation giving an extra quark-antiquark pair
0179    */
0180   double _radprob;
0181 
0182   /**
0183    *  Maximum number of tries to generate the kinematics
0184    */
0185   unsigned int _maxtry;
0186 
0187   /**
0188    *  Maximum weight for three-body decays
0189    */
0190   double _threemax;
0191 
0192   /**
0193    *  Maximum weight for four-body decays
0194    */
0195   double _fourmax;
0196 };
0197 
0198 }
0199 
0200 #endif /* HERWIG_WeakPartonicDecayer_H */