Back to home page

EIC code displayed by LXR

 
 

    


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

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