Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 //
0003 // LeptonLeptonPDF.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_LeptonLeptonPDF_H
0010 #define ThePEG_LeptonLeptonPDF_H
0011 // This is the declaration of the LeptonLeptonPDF class.
0012 
0013 #include "ThePEG/PDF/PDFBase.h"
0014 
0015 namespace ThePEG {
0016 
0017 /**
0018  * LeptonLeptonPDF inherits from PDFBase and encodes the distribution
0019  * of leptons within leptons, ie. the energy loss of leptons due to
0020  * radiation of soft photons.
0021  *
0022  * @see \ref LeptonLeptonPDFInterfaces "The interfaces"
0023  * defined for LeptonLeptonPDF.
0024  */
0025 class LeptonLeptonPDF: public PDFBase {
0026 
0027 public:
0028 
0029   /** @name Virtual functions required by the PDFBase class. */
0030   //@{
0031   /**
0032    * Return true if this PDF can handle the extraction of parton from the
0033    * given particle ie. if the particle is a lepton.
0034    */
0035   virtual bool canHandleParticle(tcPDPtr particle) const;
0036 
0037   /**
0038    * Return true if this PDF has a pole at $x=1$ for the given \a
0039    * particle and \a parton. Returns true if \a parton and \a particle
0040    * are the same.
0041    */
0042   virtual bool hasPoleIn1(tcPDPtr particle, tcPDPtr parton) const;
0043 
0044   /**
0045    * Return a vector of partons handled by this PDF (always the same
0046    * lepton as the incoming particle).
0047    */
0048   virtual cPDVector partons(tcPDPtr p) const;
0049 
0050   /**
0051    * Return the value of the density function at a given
0052    * l\f$=\log(1/x)\f$ and scale for the given parton.
0053    */
0054   virtual double xfl(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale,
0055              double l, Energy2 particleScale = ZERO) const;
0056 
0057   /**
0058    * Return the the valens part of the true pdf for the given
0059    * parameters, with the momentum fraction given as
0060    * l\f$=\log(1/x)\f$. This version simply returns the full pdf.
0061    */
0062   virtual double xfvl(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale,
0063              double l, Energy2 particleScale = ZERO) const;
0064 
0065   /**
0066    * Return the the valens part of the true pdf for the given
0067    * parameters, with the momentum fraction given as x. This version
0068    * simply returns the full pdf.
0069    */
0070   virtual double xfvx(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale,
0071               double x, double eps, Energy2 particleScale) const;
0072 
0073   /**
0074    * If the PDF contains strange peaks which can be difficult to
0075    * handle, this function may be overwritten to return an appropriate
0076    * l\f$=\log(1/x)\f$ for a z given by a flat distribution in
0077    * ]0,1[. Also the jacobobian of the l(z) function must be
0078    * returned. The default version will simly use the function l(z) =
0079    * lmin + z*(lmax-lmin).
0080    */
0081   virtual double flattenL(tcPDPtr particle, tcPDPtr parton, const PDFCuts &,
0082               double z, double & jacobian) const;
0083   //@}
0084 
0085 public:
0086 
0087   /**
0088    * Standard Init function used to initialize the interface.
0089    */
0090   static void Init();
0091 
0092 protected:
0093 
0094   /** @name Clone Methods. */
0095   //@{
0096   /**
0097    * Make a simple clone of this object.
0098    * @return a pointer to the new object.
0099    */
0100   virtual IBPtr clone() const;
0101 
0102   /** Make a clone of this object, possibly modifying the cloned object
0103    * to make it sane.
0104    * @return a pointer to the new object.
0105    */
0106   virtual IBPtr fullclone() const;
0107   //@}
0108 
0109 private:
0110 
0111   /**
0112    * Describe a concrete class without persistent data.
0113    */
0114   static NoPIOClassDescription<LeptonLeptonPDF> initLeptonLeptonPDF;
0115 
0116   /**
0117    *  Private and non-existent assignment operator.
0118    */
0119   LeptonLeptonPDF & operator=(const LeptonLeptonPDF &) = delete;
0120 
0121 };
0122 
0123 /** @cond TRAITSPECIALIZATIONS */
0124 
0125 /** This template specialization informs ThePEG about the base classes
0126  *  of LeptonLeptonPDF. */
0127 template <>
0128 struct BaseClassTrait<LeptonLeptonPDF,1>: public ClassTraitsType {
0129   /** Typedef of the first base class of LeptonLeptonPDF. */
0130   typedef PDFBase NthBase;
0131 };
0132 
0133 /** This template specialization informs ThePEG about the name of the
0134  *  LeptonLeptonPDF class and the shared object where it is
0135  *  defined. */
0136 template <>
0137 struct ClassTraits<LeptonLeptonPDF>: public ClassTraitsBase<LeptonLeptonPDF> {
0138   /** Return a platform-independent class name */
0139   static string className() { return "ThePEG::LeptonLeptonPDF"; }
0140   /** Return the name of the shared library be loaded to get access to
0141    *  the LeptonLeptonPDF class and every other class it uses (except
0142    *  the base class). */
0143   static string library() { return "LeptonLeptonPDF.so"; }
0144 };
0145 
0146 /** @endcond */
0147 
0148 }
0149 
0150 #endif /* ThePEG_LeptonLeptonPDF_H */