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