|
|
|||
File indexing completed on 2026-08-06 09:38:28
0001 // -*- C++ -*- 0002 #ifndef ThePEG_NuclearPhotonPDF_H 0003 #define ThePEG_NuclearPhotonPDF_H 0004 // 0005 // This is the declaration of the NuclearPhotonPDF class. 0006 // 0007 0008 #include "ThePEG/PDF/PDFBase.h" 0009 #include "ThePEG/Utilities/Maths.h" 0010 0011 namespace ThePEG { 0012 0013 /** 0014 * The NuclearPhotonPDF class implements the PDF for the radiation of a photon from a heavy ion. 0015 * 0016 * @see \ref NuclearPhotonPDFInterfaces "The interfaces" 0017 * defined for NuclearPhotonPDF. 0018 */ 0019 class NuclearPhotonPDF: public PDFBase { 0020 0021 public: 0022 0023 /** 0024 * The default constructor. 0025 */ 0026 NuclearPhotonPDF(); 0027 0028 public: 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 = 0.0*GeV2) 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 = 0.0*GeV2) 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 0097 public: 0098 0099 /** @name Functions used by the persistent I/O system. */ 0100 //@{ 0101 /** 0102 * Function used to write out object persistently. 0103 * @param os the persistent output stream written to. 0104 */ 0105 void persistentOutput(PersistentOStream & os) const; 0106 0107 /** 0108 * Function used to read in object persistently. 0109 * @param is the persistent input stream read from. 0110 * @param version the version number of the object when written. 0111 */ 0112 void persistentInput(PersistentIStream & is, int version); 0113 //@} 0114 0115 /** 0116 * The standard Init function used to initialize the interfaces. 0117 * Called exactly once for each class by the class description system 0118 * before the main function starts or 0119 * when this class is dynamically loaded. 0120 */ 0121 static void Init(); 0122 0123 protected: 0124 0125 /** 0126 * Extract the mass and atomic number for the nuclear PDG code 0127 */ 0128 pair<int,int> massAndZ(long pid) const { 0129 pair<int,int> output; 0130 output.first = (abs(pid)%10000)/10; 0131 output.second = (abs(pid)%10000000)/10000; 0132 return output; 0133 } 0134 0135 /** 0136 * Dipole form factor 0137 */ 0138 double dipoleFormFactor(Energy2 q2) const { 0139 return Math::powi((1 + q2/q02_),-2); 0140 } 0141 0142 /** 0143 * Convolution of hard sphere and Yukaw for heavy nuclei 0144 */ 0145 double heavyFormFactor(Energy2 q2, Length R) const { 0146 double Rq = sqrt(q2)*R/hbarc; 0147 return 3./pow(Rq,3)*(sin(Rq)-Rq*cos(Rq))/(1.+sqr(yukawaRange_/hbarc)*q2); 0148 } 0149 0150 protected: 0151 0152 /** @name Clone Methods. */ 0153 //@{ 0154 /** 0155 * Make a simple clone of this object. 0156 * @return a pointer to the new object. 0157 */ 0158 virtual IBPtr clone() const; 0159 0160 /** Make a clone of this object, possibly modifying the cloned object 0161 * to make it sane. 0162 * @return a pointer to the new object. 0163 */ 0164 virtual IBPtr fullclone() const; 0165 //@} 0166 0167 private: 0168 0169 /** 0170 * The assignment operator is private and must never be called. 0171 * In fact, it should not even be implemented. 0172 */ 0173 NuclearPhotonPDF & operator=(const NuclearPhotonPDF &) = delete; 0174 0175 private: 0176 0177 /** 0178 * Minimum \f$Q^2\f$ for the photon 0179 */ 0180 Energy2 q2Min_; 0181 0182 /** 0183 * Maximum \f$Q^2\f$ for the photon 0184 */ 0185 Energy2 q2Max_; 0186 0187 /** 0188 * Range of the Yukawa potential 0189 */ 0190 Length yukawaRange_; 0191 0192 /** 0193 * Prefactor for the nucleur radius \f$R_A=aA^{\frac13}\f$ 0194 */ 0195 Length aFact_; 0196 0197 /** 0198 * Fitted scale \f$Q{_0}{^2}=0.71GeV^2\f$ for the dipole form factor 0199 */ 0200 Energy2 q02_; 0201 0202 }; 0203 0204 } 0205 0206 #endif /* ThePEG_NuclearPhotonPDF_H */
| [ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
|
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
|