Back to home page

EIC code displayed by LXR

 
 

    


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 */