|
|
|||
File indexing completed on 2026-08-06 09:24:26
0001 // -*- C++ -*- 0002 // 0003 // HalfOneHalfSplitFn.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_HalfOneHalfSplitFn_H 0010 #define HERWIG_HalfOneHalfSplitFn_H 0011 // 0012 // This is the declaration of the HalfOneHalfSplitFn 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 classs provides the concrete implementation of the exact leading-order 0024 * splitting function for \f$\frac12\to 1\frac12\f$. 0025 * 0026 * In this case the splitting function is given by 0027 * \f[P(z,t) = C\left(\frac{2(1-z)+z^2}{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) = 2C\frac1z,\f] 0031 * therefore the integral is 0032 * \f[\int P_{\rm over}(z) {\rm d}z = 2C\ln z,\f] 0033 * and its inverse is 0034 * \f[\exp\left(\frac{r}{2C}\right).\f] 0035 * 0036 * @see SplittingFunction 0037 */ 0038 class HalfOneHalfSplitFn: 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(z,t)\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 const bool mass, const RhoDMatrix & rho) const; 0063 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 for forward evolution 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 HalfOneHalfSplitFn & operator=(const HalfOneHalfSplitFn &) = delete; 0178 0179 }; 0180 0181 } 0182 0183 #endif /* HERWIG_HalfOneHalfSplitFn_H */
| [ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
|
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
|