Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 //
0003 // NoPDF.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_NoPDF_H
0010 #define ThePEG_NoPDF_H
0011 // This is the declaration of the NoPDF class.
0012 
0013 #include "ThePEG/PDF/PDFBase.h"
0014 // #include "NoPDF.fh"
0015 // #include "NoPDF.xh"
0016 
0017 namespace ThePEG {
0018 
0019 /**
0020  * NoPDF inherits from PDFBase and represents particles without
0021  * sub-structure. The only parton which can be extracted is the
0022  * incoming particle itself with a momentum distribution which is a
0023  * delta-function at \f$x=1\f$ (\f$l=0\f$).
0024  *
0025  * @see PDFBase
0026  * @see NoRemnants
0027  * 
0028  */
0029 class NoPDF: public PDFBase {
0030 
0031 public:
0032 
0033   /** @name Virtual functions mandated by the PDFBase base class. */
0034   //@{
0035   /**
0036    * Return true because we can handle any particle.
0037    */
0038   virtual bool canHandleParticle(tcPDPtr particle) const;
0039 
0040   /**
0041    * Return true if canHandleParticle() and if the corresponding
0042    * method for remnantHandler() returns true.
0043    */
0044   virtual bool canHandle(tcPDPtr particle) const;
0045 
0046   /**
0047    * Return true if this PDF has a pole at $x=1$ for the given \a
0048    * particle and \a parton. This default version of the function
0049    * returns true if \a particle and \a parton is the same.
0050    */
0051   virtual bool hasPoleIn1(tcPDPtr particle, tcPDPtr parton) const;
0052 
0053   /**
0054    * Simply return the particle.
0055    */
0056   virtual cPDVector partons(tcPDPtr p) const;
0057 
0058   /**
0059    * The delta function.
0060    */
0061   virtual double xfl(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale,
0062              double l, Energy2 particleScale = ZERO) const;
0063   //@}
0064 
0065 public:
0066 
0067   /**
0068    * Standard Init function used to initialize the interface.
0069    */
0070   static void Init();
0071 
0072 protected:
0073 
0074   /** @name Clone Methods. */
0075   //@{
0076   /**
0077    * Make a simple clone of this object.
0078    * @return a pointer to the new object.
0079    */
0080   virtual IBPtr clone() const;
0081 
0082   /** Make a clone of this object, possibly modifying the cloned object
0083    * to make it sane.
0084    * @return a pointer to the new object.
0085    */
0086   virtual IBPtr fullclone() const;
0087   //@}
0088 
0089 private:
0090 
0091   /**
0092    * Describe a concrete class without persistent data.
0093    */
0094   static NoPIOClassDescription<NoPDF> initNoPDF;
0095 
0096   /**
0097    *  Private and non-existent assignment operator.
0098    */
0099   NoPDF & operator=(const NoPDF &) = delete;
0100 
0101 };
0102 
0103 /** @cond TRAITSPECIALIZATIONS */
0104 
0105 /** This template specialization informs ThePEG about the base classes
0106  *  of NoPDF. */
0107 template <>
0108 struct BaseClassTrait<NoPDF,1>: public ClassTraitsType {
0109   /** Typedef of the first base class of NoPDF. */
0110   typedef PDFBase NthBase;
0111 };
0112 
0113 /** This template specialization informs ThePEG about the name of the
0114  *  NoPDF class. */
0115 template <>
0116 struct ClassTraits<NoPDF>: public ClassTraitsBase<NoPDF> {
0117   /** Return a platform-independent class name */
0118   static string className() { return "ThePEG::NoPDF"; }
0119 };
0120 
0121 /** @endcond */
0122 
0123 }
0124 
0125 #endif /* ThePEG_NoPDF_H */