Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 //
0003 // ZeroZeroOneSplitFn.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_ZeroZeroOneSplitFn_H
0010 #define HERWIG_ZeroZeroOneSplitFn_H
0011 //
0012 // This is the declaration of the ZeroZeroOneSplitFn class.
0013 //
0014 
0015 #include "Herwig/Shower/QTilde/SplittingFunctions/SplittingFunction.h"
0016 
0017 namespace Herwig {
0018 
0019 using namespace ThePEG;
0020 
0021 /** \ingroup Shower
0022  * This class provides the concrete implementation of the exact leading-order
0023  * splitting function for \f$\phi\to \phi g\f$.
0024  *
0025  * In this case the splitting function is given by
0026  * \f[P(z,t) = 2C\left(\frac{z}{1-z}-\frac{m^2_\phi}{t}\right),\f]
0027  * where \f$C\f$ is the corresponding colour factor.
0028  * Our choice for the overestimate is 
0029  * \f[P_{\rm over}(z) = \frac{2C}{1-z},\f]
0030  * therefore the integral is
0031  * \f[\int P_{\rm over}(z) {\rm d}z = -2C\ln(1-z),\f]
0032  * and its inverse is
0033  * \f[1-\exp\left(\frac{r}{2C}\right).\f]
0034  *
0035  * @see \ref ZeroZeroOneSplitFnInterfaces "The interfaces"
0036  * defined for ZeroZeroOneSplitFn.
0037  */
0038 class ZeroZeroOneSplitFn: public SplittingFunction {
0039 
0040 public:
0041 
0042   /**
0043    *  Concrete implementation of the method to determine whether this splitting
0044    *  function can be used for a given set of particles.
0045    *  @param ids The PDG codes for the particles in the splitting.
0046    */
0047   virtual bool accept(const IdList & ids) const;
0048 
0049   /**
0050    *   Methods to return the splitting function.
0051    */
0052   //@{
0053   /**
0054    * The concrete implementation of the splitting function, \f$P\f$.
0055    * @param z   The energy fraction.
0056    * @param t   The scale.
0057    * @param ids The PDG codes for the particles in the splitting.
0058    * @param mass Whether or not to include the mass dependent terms
0059    * @param rho The spin density matrix
0060    */
0061   virtual double P(const double z, const Energy2 t, const IdList & ids,
0062            bool mass, const RhoDMatrix & rho) const;
0063 
0064   /**
0065    * The concrete implementation of the overestimate of the splitting function,
0066    * \f$P_{\rm over}\f$.
0067    * @param z   The energy fraction.
0068    * @param ids The PDG codes for the particles in the splitting.
0069    */
0070   virtual double overestimateP(const double z, const IdList & ids) const; 
0071 
0072   /**
0073    * The concrete implementation of the
0074    * the ratio of the splitting function to the overestimate, i.e.
0075    * \f$P(z,\tilde{q}^2)/P_{\rm over}(z)\f$.
0076    * @param z   The energy fraction.
0077    * @param t   The scale.
0078    * @param ids The PDG codes for the particles in the splitting.
0079    * @param mass Whether or not to include the mass dependent terms
0080    * @param rho The spin density matrix
0081    */
0082   virtual double ratioP(const double z, const Energy2 t, const IdList & ids,
0083             bool mass, const RhoDMatrix & rho) const;
0084 
0085   /**
0086    * The concrete implementation of the indefinite integral of the 
0087    * overestimated splitting function, \f$P_{\rm over}\f$.
0088    * @param z   The energy fraction.
0089    * @param ids The PDG codes for the particles in the splitting.
0090    * @param PDFfactor Which additional factor to include for the PDF
0091    *                  0 is no additional factor,
0092    *                  1 is \f$1/z\f$, 2 is \f$1/(1-z)\f$ and 3 is \f$1/z/(1-z)\f$
0093    */
0094   virtual double integOverP(const double z, const IdList & ids, 
0095                 unsigned int PDFfactor=0) const;
0096 
0097   /**
0098    * The concrete implementation of the inverse of the indefinite integral.
0099    * @param r Value of the splitting function to be inverted
0100    * @param ids The PDG codes for the particles in the splitting.
0101    * @param PDFfactor Which additional factor to include for the PDF
0102    *                  0 is no additional factor,
0103    *                  1 is \f$1/z\f$, 2 is \f$1/(1-z)\f$ and 3 is \f$1/z/(1-z)\f$
0104    */ 
0105   virtual double invIntegOverP(const double r, const IdList & ids, 
0106                    unsigned int PDFfactor=0) const;
0107   //@}
0108 
0109   /**
0110    * Method to calculate the azimuthal angle for forward evolution
0111    * @param particle The particle which is branching
0112    * @param showerkin The ShowerKinematics object
0113    * @param z The energy fraction
0114    * @param t The scale \f$t=2p_j\cdot p_k\f$.
0115    * @param ids The PDG codes for the particles in the splitting.
0116    * @param The azimuthal angle, \f$\phi\f$.
0117    * @return The weight
0118    */
0119   virtual vector<pair<int,Complex> >
0120   generatePhiForward(const double z, const Energy2 t, const IdList & ids,
0121           const RhoDMatrix &);
0122   /**
0123    * Method to calculate the azimuthal angle for backward
0124    * Shouldn't be needed and NOT IMPLEMENTED
0125    * @param particle The particle which is branching
0126    * @param showerkin The ShowerKinematics object
0127    * @param z The energy fraction
0128    * @param t The scale \f$t=2p_j\cdot p_k\f$.
0129    * @param ids The PDG codes for the particles in the splitting.
0130    * @param The azimuthal angle, \f$\phi\f$.
0131    * @return The weight
0132    */
0133   virtual vector<pair<int,Complex> >
0134   generatePhiBackward(const double z, const Energy2 t, const IdList & ids,
0135               const RhoDMatrix &);
0136   
0137   /**
0138    * Calculate the matrix element for the splitting
0139    * @param particle The particle which is branching
0140    * @param showerkin The ShowerKinematics object
0141    * @param z The energy fraction
0142    * @param t The scale \f$t=2p_j\cdot p_k\f$.
0143    * @param ids The PDG codes for the particles in the splitting.
0144    * @param The azimuthal angle, \f$\phi\f$.
0145    */
0146   virtual DecayMEPtr matrixElement(const double z, const Energy2 t, 
0147                    const IdList & ids, const double phi, bool timeLike);
0148 
0149 public:
0150 
0151   /**
0152    * The standard Init function used to initialize the interfaces.
0153    * Called exactly once for each class by the class description system
0154    * before the main function starts or
0155    * when this class is dynamically loaded.
0156    */
0157   static void Init();
0158 
0159 protected:
0160 
0161   /** @name Clone Methods. */
0162   //@{
0163   /**
0164    * Make a simple clone of this object.
0165    * @return a pointer to the new object.
0166    */
0167   virtual IBPtr clone() const {return new_ptr(*this);}
0168 
0169   /** Make a clone of this object, possibly modifying the cloned object
0170    * to make it sane.
0171    * @return a pointer to the new object.
0172    */
0173   virtual IBPtr fullclone() const {return new_ptr(*this);}
0174   //@}
0175 
0176 private:
0177 
0178   /**
0179    * The assignment operator is private and must never be called.
0180    * In fact, it should not even be implemented.
0181    */
0182   ZeroZeroOneSplitFn & operator=(const ZeroZeroOneSplitFn &) = delete;
0183 
0184 };
0185 
0186 }
0187 
0188 #endif /* HERWIG_ZeroZeroOneSplitFn_H */