Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-08-06 09:24:21

0001 // -*- C++ -*-
0002 //
0003 // ReggeonPDF.h is a part of Herwig - A multi-purpose Monte Carlo event generator
0004 // Copyright (C) 2002-2019 The Herwig Collaboration
0005 //
0006 // Herwig 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 HERWIG_ReggeonPDF_H
0010 #define HERWIG_ReggeonPDF_H
0011 
0012 #include <ThePEG/PDF/PDFBase.h>
0013 #include <iostream>
0014 #include <fstream>
0015 #include <string>
0016 #include <cmath>
0017 
0018 namespace Herwig {
0019 
0020 using namespace ThePEG;
0021 
0022 /** \ingroup PDF
0023  *
0024  *  Implementation of the ReggeonPDF PDFs
0025  *
0026  * @see \ref ReggeonPDFInterfaces "The interfaces"
0027  * defined for ReggeonPDF
0028  * This class is wrapper of Reggeon structure function. Which is most likely 
0029  * simulated by pion structure function.
0030  */
0031 class ReggeonPDF : public PDFBase {
0032 
0033 public:
0034 
0035   /**
0036    *  Default constructor
0037    */
0038   ReggeonPDF() : particleID_(111) {}
0039 
0040   /** @name Virtual functions from PDFBase */
0041   //@{
0042   /**
0043    * Return true if this PDF can handle the extraction of parton from the
0044    * given particle ie. if the particle is a proton or neutron.
0045    * @param particle The particle
0046    */
0047   virtual bool canHandleParticle(tcPDPtr particle) const;
0048 
0049   /**
0050    * Return the parton types which are described by these parton
0051    * densities.
0052    * @param p The particle
0053    */
0054   virtual cPDVector partons(tcPDPtr p) const;
0055 
0056   /**
0057    * Return x times the pdf for the given parameters
0058    * @param particle The beam particle
0059    * @param parton The parton for which to return the PDF.
0060    * @param partonScale The scale at which to evaluate the PDF.
0061    * @param x The momentum fraction
0062    * @param eps ??? an unknown parameter from ThePEG.
0063    * @param particleScale The scale for the particle
0064    */
0065   virtual double xfx(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale,
0066                      double x, double eps = 0.0,
0067                      Energy2 particleScale = ZERO) const;
0068 
0069   /**
0070    * Return x times the valence pdf for the given parameters
0071    * @param particle The beam particle
0072    * @param parton The parton for which to return the PDF.
0073    * @param partonScale The scale at which to evaluate the PDF.
0074    * @param x The momentum fraction
0075    * @param eps ??? an unknown parameter from ThePEG.
0076    * @param particleScale The scale for the particle
0077    */
0078   virtual double xfvx(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale,
0079                       double x, double eps = 0.0,
0080                       Energy2 particleScale = ZERO) const;
0081   //@}
0082 
0083 public:
0084 
0085   /** @name Functions used by the persistent I/O system. */
0086   //@{
0087   /**
0088    * Function used to write out object persistently.
0089    * @param os the persistent output stream written to.
0090    */
0091   void persistentOutput(PersistentOStream & os) const;
0092 
0093   /**
0094    * Function used to read in object persistently.
0095    * @param is the persistent input stream read from.
0096    * @param version the version number of the object when written.
0097    */
0098    void persistentInput(PersistentIStream & is, int version);
0099   //@}
0100 
0101   /**
0102    * The standard Init function used to initialize the interfaces.
0103    * Called exactly once for each class by the class description system
0104    * before the main function starts or
0105    * when this class is dynamically loaded.
0106    */
0107   static void Init();
0108 
0109 
0110 protected:
0111 
0112   /** @name Standard Interfaced functions. */
0113   //@{
0114   /**
0115    * Initialize this object after the setup phase before saving an
0116    * EventGenerator to disk.
0117    * @throws InitException if object could not be initialized properly.
0118    */
0119   virtual void doinit();
0120   //@}
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;
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;
0137   //@}
0138 
0139  
0140 private:
0141 
0142   /**
0143    * The assignment operator is private and must never be called.
0144    * In fact, it should not even be implemented.
0145    */
0146   ReggeonPDF & operator=(const ReggeonPDF &) = delete;
0147 
0148   /**
0149    * Pointer to the concrete PDF reggeon structure function. 
0150    */
0151   PDFPtr ptrPDF_;
0152 
0153   /**
0154    *  PDG code for the particle
0155    */
0156   long particleID_;
0157 
0158   /**
0159    *  Pointer to the particle
0160    */
0161   PDPtr particle_;
0162 
0163 };
0164 
0165 }
0166 
0167 #endif