|
|
|||
File indexing completed on 2026-08-06 09:24:26
0001 // -*- C++ -*- 0002 // 0003 // OneHalfHalfSplitFn.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_OneHalfHalfSplitFn_H 0010 #define HERWIG_OneHalfHalfSplitFn_H 0011 // 0012 // This is the declaration of the OneHalfHalfSplitFn 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 \frac12\frac12\f$. 0025 * 0026 * In this case the splitting function is given by 0027 * \f[P(z,t) =C\left(1-2z(1-z)+2\frac{m_q^2}{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) = C,\f] 0031 * therefore the integral is 0032 * \f[\int P_{\rm over}(z) {\rm d}z =Cz,\f] 0033 * and its inverse is 0034 * \f[\frac{r}{C}\f] 0035 * 0036 * @see \ref OneHalfHalfSplitFnInterfaces "The interfaces" 0037 * defined for OneHalfHalfSplitFn. 0038 */ 0039 class OneHalfHalfSplitFn: 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\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 /** 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,\tilde{q}^2)/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 0113 * @param particle The particle which is branching 0114 * @param showerkin The ShowerKinematics object 0115 * @param z The energy fraction 0116 * @param t The scale \f$t=2p_j\cdot p_k\f$. 0117 * @param ids The PDG codes for the particles in the splitting. 0118 * @param The azimuthal angle, \f$\phi\f$. 0119 * @return The weight 0120 */ 0121 virtual vector<pair<int,Complex> > 0122 generatePhiForward(const double z, const Energy2 t, const IdList & ids, 0123 const RhoDMatrix &); 0124 0125 /** 0126 * Method to calculate the azimuthal angle 0127 * @param particle The particle which is branching 0128 * @param showerkin The ShowerKinematics object 0129 * @param z The energy fraction 0130 * @param t The scale \f$t=2p_j\cdot p_k\f$. 0131 * @param ids The PDG codes for the particles in the splitting. 0132 * @param The azimuthal angle, \f$\phi\f$. 0133 * @return The weight 0134 */ 0135 virtual vector<pair<int,Complex> > 0136 generatePhiBackward(const double z, const Energy2 t, const IdList & ids, 0137 const RhoDMatrix &); 0138 0139 /** 0140 * Calculate the matrix element for the splitting 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 OneHalfHalfSplitFn & operator=(const OneHalfHalfSplitFn &) = delete; 0183 0184 }; 0185 0186 } 0187 0188 #endif /* HERWIG_OneHalfHalfSplitFn_H */
| [ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
|
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
|