Back to home page

EIC code displayed by LXR

 
 

    


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