Back to home page

EIC code displayed by LXR

 
 

    


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

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