|
|
|||
File indexing completed on 2026-08-06 09:38:28
0001 // -*- C++ -*- 0002 #ifndef THEPEG_WeizsackerWilliamsPDF_H 0003 #define THEPEG_WeizsackerWilliamsPDF_H 0004 // 0005 // This is the declaration of the WeizsackerWilliamsPDF class. 0006 // 0007 0008 #include "ThePEG/PDF/PDFBase.h" 0009 0010 namespace ThePEG { 0011 0012 using namespace ThePEG; 0013 0014 /** 0015 * Here is the documentation of the WeizsackerWilliamsPDF class. 0016 * 0017 * @see \ref WeizsackerWilliamsPDFInterfaces "The interfaces" 0018 * defined for WeizsackerWilliamsPDF. 0019 */ 0020 class WeizsackerWilliamsPDF: public PDFBase { 0021 0022 public: 0023 0024 /** 0025 * Default constructor 0026 */ 0027 WeizsackerWilliamsPDF(); 0028 0029 /** @name Virtual functions to be overridden by sub-classes. */ 0030 //@{ 0031 /** 0032 * Return true if this PDF can handle the extraction of partons from 0033 * the given \a particle. 0034 */ 0035 virtual bool canHandleParticle(tcPDPtr particle) const; 0036 0037 /** 0038 * Return the partons which this PDF may extract from the given 0039 * \a particle. 0040 */ 0041 virtual cPDVector partons(tcPDPtr particle) const; 0042 0043 /** 0044 * The density. Return the pdf for the given \a parton inside the 0045 * given \a particle for the virtuality \a partonScale and 0046 * logarithmic momentum fraction \a l \f$(l=\log(1/x)\f$. The \a 0047 * particle is assumed to have a virtuality \a particleScale. 0048 */ 0049 virtual double xfl(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale, 0050 double l, Energy2 particleScale = ZERO) const; 0051 0052 /** 0053 * The valence density. Return the pdf for the given cvalence \a 0054 * parton inside the given \a particle for the virtuality \a 0055 * partonScale and logarithmic momentum fraction \a l 0056 * \f$(l=\log(1/x)\f$. The \a particle is assumed to have a 0057 * virtuality \a particleScale. If not overidden by a sub class this 0058 * will return zero. 0059 */ 0060 virtual double xfvl(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale, 0061 double l, Energy2 particleScale = ZERO) const; 0062 0063 /** 0064 * Generate scale (as a fraction of the maximum scale). If the PDF 0065 * contains strange peaks which can be difficult to handle, this 0066 * function may be overwritten to return an appropriate scale 0067 * \f$Q^2/Q^2_{\max}\f$ for a \a z uniformly distributed in 0068 * ]0,1[. Also the jacobobian of the \f$Q^2/Q^2_{\max}\rightarrow 0069 * z\f$ variable transformation must multiply the \a jacobian 0070 * argument. The default version will simply use the function 0071 * \f$Q^2/Q^2_{\max} = (Q^2_{\max}/Q^2_{\min})^(z-1)\f$ or, if 0072 * \f$Q^2_{\min}\f$ is zero, \f$Q^2/Q^2_{\max} = z\f$ (where the 0073 * limits are set by \a cut). 0074 */ 0075 virtual double flattenScale(tcPDPtr particle, tcPDPtr parton, 0076 const PDFCuts & cut, double l, double z, 0077 double & jacobian) const; 0078 0079 /** 0080 * Generate a momentum fraction. If the PDF contains strange peaks 0081 * which can be difficult to handle, this function may be 0082 * overwritten to return an appropriate \f$l=\log(1/x)\f$ for a \a z 0083 * uniformly distributed in ]0,1[. Also the jacobobian of the 0084 * \f$l\rightarrow z\f$ variable transformation must in the function 0085 * multiply the \a jacobian argument. The default version will 0086 * simply use the function \f$l(z) = l_{\min} + 0087 * z*(l_{\max}-l_{\min})\f$ (where the limits are set by \a cut). 0088 */ 0089 virtual double flattenL(tcPDPtr particle, tcPDPtr parton, const PDFCuts &cut, 0090 double z, double & jacobian) const; 0091 //@} 0092 0093 public: 0094 0095 /** @name Functions used by the persistent I/O system. */ 0096 //@{ 0097 /** 0098 * Function used to write out object persistently. 0099 * @param os the persistent output stream written to. 0100 */ 0101 void persistentOutput(PersistentOStream & os) const; 0102 0103 /** 0104 * Function used to read in object persistently. 0105 * @param is the persistent input stream read from. 0106 * @param version the version number of the object when written. 0107 */ 0108 void persistentInput(PersistentIStream & is, int version); 0109 //@} 0110 0111 /** 0112 * The standard Init function used to initialize the interfaces. 0113 * Called exactly once for each class by the class description system 0114 * before the main function starts or 0115 * when this class is dynamically loaded. 0116 */ 0117 static void Init(); 0118 0119 protected: 0120 0121 /** @name Clone Methods. */ 0122 //@{ 0123 /** 0124 * Make a simple clone of this object. 0125 * @return a pointer to the new object. 0126 */ 0127 virtual IBPtr clone() const {return new_ptr(*this);} 0128 0129 /** Make a clone of this object, possibly modifying the cloned object 0130 * to make it sane. 0131 * @return a pointer to the new object. 0132 */ 0133 virtual IBPtr fullclone() const {return new_ptr(*this);} 0134 //@} 0135 0136 private: 0137 0138 /** 0139 * The static object used to initialize the description of this class. 0140 * Indicates that this is an concrete class without persistent data. 0141 */ 0142 static ClassDescription<WeizsackerWilliamsPDF> initWeizsackerWilliamsPDF; 0143 0144 /** 0145 * The assignment operator is private and must never be called. 0146 * In fact, it should not even be implemented. 0147 */ 0148 WeizsackerWilliamsPDF & operator=(const WeizsackerWilliamsPDF &) = delete; 0149 0150 private: 0151 0152 /** 0153 * Minimum \f$Q^2\f$ for the photon 0154 */ 0155 Energy2 _q2min; 0156 0157 /** 0158 * Maximum \f$Q^2\f$ for the photon 0159 */ 0160 Energy2 _q2max; 0161 0162 /** 0163 * Parameter for the jacobian mapping of \f$z\f$ 0164 */ 0165 double _a; 0166 }; 0167 0168 } 0169 0170 #include "ThePEG/Utilities/ClassTraits.h" 0171 0172 namespace ThePEG { 0173 0174 /** @cond TRAITSPECIALIZATIONS */ 0175 0176 /** This template specialization informs ThePEG about the 0177 * base classes of WeizsackerWilliamsPDF. */ 0178 template <> 0179 struct BaseClassTrait<WeizsackerWilliamsPDF,1> { 0180 /** Typedef of the first base class of WeizsackerWilliamsPDF. */ 0181 typedef PDFBase NthBase; 0182 }; 0183 0184 /** This template specialization informs ThePEG about the name of 0185 * the WeizsackerWilliamsPDF class and the shared object where it is defined. */ 0186 template <> 0187 struct ClassTraits<WeizsackerWilliamsPDF> 0188 : public ClassTraitsBase<WeizsackerWilliamsPDF> { 0189 /** Return a platform-independent class name */ 0190 static string className() { return "ThePEG::WeizsackerWilliamsPDF"; } 0191 /** 0192 * The name of a file containing the dynamic library where the class 0193 * WeizsackerWilliamsPDF is implemented. It may also include several, space-separated, 0194 * libraries if the class WeizsackerWilliamsPDF depends on other classes (base classes 0195 * excepted). In this case the listed libraries will be dynamically 0196 * linked in the order they are specified. 0197 */ 0198 static string library() { return "WeizsackerWilliamsPDF.so"; } 0199 }; 0200 0201 /** @endcond */ 0202 0203 } 0204 0205 #endif /* THEPEG_WeizsackerWilliamsPDF_H */
| [ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
|
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
|