Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-08-06 09:38:28

0001 // -*- C++ -*-
0002 //
0003 // GRVBase.h is a part of ThePEG - Toolkit for HEP Event Generation
0004 // Copyright (C) 1999-2019 Leif Lonnblad
0005 //
0006 // ThePEG 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 ThePEG_GRVBase_H
0010 #define ThePEG_GRVBase_H
0011 // This is the declaration of the GRVBase class.
0012 
0013 #include "ThePEG/PDF/PDFBase.h"
0014 
0015 namespace ThePEG {
0016 
0017 /**
0018  * GRVBase inherits from PDFBase and is used as a base class for all
0019  * GRV parton densities.
0020  *
0021  * @see \ref GRVBaseInterfaces "The interfaces"
0022  * defined for GRVBase.
0023  */
0024 class GRVBase: public PDFBase {
0025 
0026 public:
0027 
0028   /** @name Standard constructors and destructors. */
0029   //@{
0030   /**
0031    * Default constructor.
0032    */
0033   GRVBase();
0034 
0035   /**
0036    * Destructor.
0037    */
0038   virtual ~GRVBase();
0039   //@}
0040 
0041 public:
0042 
0043   /** @name Virtual functions required by the PDFBase class. */
0044   //@{
0045   /**
0046    * Return true if this PDF can handle the extraction of parton from the
0047    * given particle, ie. if the particle is a proton or neutron.
0048    */
0049   virtual bool canHandleParticle(tcPDPtr particle) const;
0050 
0051   /**
0052    * Return the parton types which are described by these parton
0053    * densities.
0054    */
0055   virtual cPDVector partons(tcPDPtr p) const;
0056 
0057   /**
0058    * Return the value of the density of parton at the given a scale
0059    * and log fractional momentum l (the optional virtuality of the
0060    * incoming particle is not used).
0061    */
0062   virtual double xfl(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale,
0063              double l, Energy2 particleScale) const;
0064 
0065   /**
0066    * Return the valaens partof the density of parton at the given a
0067    * scale and log fractional momentum l (the optional virtuality of
0068    * the incoming particle is not used).
0069    */
0070   virtual double xfvl(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale,
0071              double l, Energy2 particleScale) const;
0072   //@}
0073 
0074 public:
0075 
0076   /** @name Access derived kinematical quantities. */
0077   //@{
0078   /**
0079    * Return last selected
0080    * \f$S\f$. \f$S=\log(\log(Q^2/\mu^2)/\log(Q^2/\Lambda_{QCD}^2))\f$
0081    */
0082   double S() const { return theS; }
0083 
0084   /**
0085    * Return last selected
0086    * \f$S^2\f$. \f$S=\log(\log(Q^2/\mu^2)/\log(Q^2/\Lambda_{QCD}^2))\f$
0087    */
0088   double S2() const { return theS2; }
0089 
0090   /**
0091    * Return last selected
0092    * \f$S^3\f$. \f$S=\log(\log(Q^2/\mu^2)/\log(Q^2/\Lambda_{QCD}^2))\f$
0093    */
0094   double S3() const { return theS3; }
0095 
0096   /**
0097    * Return last selected
0098    * \f$\sqrt{S}\f$. \f$S=\log(\log(Q^2/\mu^2)/\log(Q^2/\Lambda_{QCD}^2))\f$
0099    */
0100   double rootS() const { return theRootS; }
0101 
0102   /**
0103    * Return last selected momentum fraction, \f$x\f$.
0104    */
0105   double x() const { return thex; }
0106 
0107   /**
0108    * Return last selected logarithmic momentum fraction
0109    * \f$l=\log(1/x)\f$.
0110    */
0111   double lx() const { return theLx; }
0112 
0113   /**
0114    * Return one minus the last selected momentum fraction, eps\f$=1-x\f$.
0115    */
0116   double eps() const { return theEps; }
0117 
0118   /**
0119    * Return the square root of the last selected momentum fraction,
0120    * \f$x\f$.
0121    */
0122   double rootx() const { return theRootx; }
0123 
0124   //@}
0125 
0126 protected:
0127 
0128   /**
0129    * Setup the \a l\f$=\log{1/x}\f$ and \a scale \f$Q^2\f$ to be used
0130    * in the following call to uv(), dv)=, etc.
0131    */
0132   virtual void setup(double l, Energy2 scale) const = 0;
0133 
0134   /**
0135    * Setup the \a l\f$=\log{1/x}\f$ and \a scale \f$Q^2\f$ to be used
0136    * in the following call to uv(), dv)=, etc.
0137    */
0138   void setup(double l, Energy2 scale, Energy2 mu2, Energy2 lam2) const;
0139 
0140   /**
0141    * The form of the valens density functions.
0142    */
0143   double valens(double N, double ak, double bk,
0144         double a, double b, double c, double d) const;
0145 
0146   /**
0147    * The form of the light sea and gluon density
0148    * functions.
0149    */
0150   double lightsea(double al, double be, double ak, double bk, double a,
0151           double b, double c, double d, double e, double es) const;
0152 
0153   /**
0154    * The form of the heavy sea density functions.
0155    */
0156   double heavysea(double sth, double al, double be, double ak, double ag,
0157           double b, double d, double e, double es) const;
0158 
0159   /**
0160    * Return the value of the u valens density for the values previously given
0161    * by setup().
0162    */
0163   virtual double uv() const = 0;
0164 
0165   /**
0166    * Return the value of the d valens density for the values previously given
0167    * by setup().
0168    */
0169   virtual double dv() const = 0;
0170 
0171   /**
0172    * Return the value of the difference between the u and d sea
0173    * densities for the values previously given by setup().
0174    */
0175   virtual double del() const = 0;
0176 
0177   /**
0178    * Return the value of the average u and d sea densities for the
0179    * values previously given by setup().
0180    */
0181   virtual double udb() const = 0;
0182 
0183   /**
0184    * Return the value of the s density for the values previously given by
0185    * setup().
0186    */
0187   virtual double sb() const = 0;
0188 
0189   /**
0190    * Return the value of the c density for the values previously given by
0191    * setup().
0192    */
0193   virtual double cb() const = 0;
0194 
0195   /**
0196    * Return the value of the b density for the values previously given by
0197    * setup().
0198    */
0199   virtual double bb() const = 0;
0200 
0201   /**
0202    * Return the value of the gluon densities for the values previously
0203    * given by setup().
0204    */
0205   virtual double gl() const = 0;
0206 
0207   /**
0208    * fuv() returns the saved values from the quv() functions if
0209    * present. Otherwise uv() is called, saved and returned.
0210    */
0211   double fuv() const { return uvSave >= 0.0? uvSave: ( uvSave = uv() ); }
0212 
0213   /**
0214    * fdv() returns the saved values from the dv() functions if
0215    * present. Otherwise dv() is called, saved and returned.
0216    */
0217   double fdv() const { return dvSave >= 0.0? dvSave: ( dvSave = dv() ); }
0218 
0219   /**
0220    * fdel() returns the saved values from the del() functions if
0221    * present. Otherwise del() is called, saved and returned.
0222    */
0223   double fdel() const { return delSave >= 0.0? delSave: ( delSave = del() ); }
0224 
0225   /**
0226    * fudb() returns the saved values from the udb() functions if
0227    * present. Otherwise udb() is called, saved and returned.
0228    */
0229   double fudb() const { return udbSave >= 0.0? udbSave: ( udbSave = udb() ); }
0230 
0231   /**
0232    * fsb() returns the saved values from the sb() functions if
0233    * present. Otherwise sb() is called, saved and returned.
0234    */
0235   double fsb() const { return sbSave >= 0.0? sbSave: ( sbSave = sb() ); }
0236 
0237   /**
0238    * fcb() returns the saved values from the cb() functions if
0239    * present. Otherwise cb() is called, saved and returned.
0240    */
0241   double fcb() const { return cbSave >= 0.0? cbSave: ( cbSave = cb() ); }
0242 
0243   /**
0244    * fbb() returns the saved values from the bb() functions if
0245    * present. Otherwise bb() is called, saved and returned.
0246    */
0247   double fbb() const { return bbSave >= 0.0? bbSave: ( bbSave = bb() ); }
0248 
0249   /**
0250    * fgl() returns the saved values from the gl() functions if
0251    * present. Otherwise gl() is called, saved and returned.
0252    */
0253   double fgl() const { return glSave >= 0.0? glSave: ( glSave = gl() ); }
0254 
0255 public:
0256 
0257   /**
0258    * Standard Init function used to initialize the interface.
0259    */
0260   static void Init();
0261 
0262 private:
0263 
0264   /**
0265    * The last selected logarithmic momentum fraction
0266    * \f$l=\log(1/x)\f$.
0267    */
0268   mutable double theLx;
0269 
0270   /**
0271    * THe last selected momentum fraction, \f$x\f$.
0272    */
0273   mutable double thex;
0274 
0275   /**
0276    * One minus the last selected momentum fraction, eps\f$=1-x\f$.
0277    */
0278   mutable double theEps;
0279 
0280   /**
0281    * The square root of the last selected momentum fraction, \f$x\f$.
0282    */
0283   mutable double theRootx;
0284 
0285   /**
0286    * The last selected scale.
0287    */
0288   mutable Energy2 Q2;
0289 
0290   /**
0291    * The last used \f$\Lambda_{QCD}^2\f$.
0292    */
0293   mutable Energy2 theLam2;
0294 
0295   /**
0296    * The last used \f$\mu^2\f$.
0297    */
0298   mutable Energy2 theMu2;
0299 
0300   /**
0301    * The last selected
0302    * \f$S\f$. \f$S=\log(\log(Q^2/\mu^2)/\log(Q^2/\Lambda_{QCD}^2))\f$
0303    */
0304   mutable double theS;
0305 
0306   /**
0307    * Return last selected \f$S^2\f$.
0308    */
0309   mutable double theS2;
0310 
0311   /**
0312    * Return last selected \f$S^3\f$.
0313    */
0314   mutable double theS3;
0315 
0316   /**
0317    * Return last selected \f$\sqrt{S}\f$.
0318    */
0319   mutable double theRootS;
0320 
0321   /**
0322    * Saved values from the different functions.
0323    */
0324   mutable double uvSave;
0325 
0326   /**
0327    * Saved values from the different functions.
0328    */
0329   mutable double dvSave;
0330 
0331   /**
0332    * Saved values from the different functions.
0333    */
0334   mutable double delSave;
0335 
0336   /**
0337    * Saved values from the different functions.
0338    */
0339   mutable double udbSave;
0340 
0341   /**
0342    * Saved values from the different functions.
0343    */
0344   mutable double sbSave;
0345 
0346   /**
0347    * Saved values from the different functions.
0348    */
0349   mutable double cbSave;
0350 
0351   /**
0352    * Saved values from the different functions.
0353    */
0354   mutable double bbSave;
0355 
0356   /**
0357    * Saved values from the different functions.
0358    */
0359   mutable double glSave;
0360 
0361 private:
0362 
0363   /**
0364    *  Private and non-existent assignment operator.
0365    */
0366   GRVBase & operator=(const GRVBase &) = delete;
0367 
0368 };
0369 
0370 }
0371 
0372 #endif /* ThePEG_GRVBase_H */