Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 //
0003 // MinBiasPDF.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_MinBiasPDF_H
0010 #define HERWIG_MinBiasPDF_H
0011 //
0012 // This is the declaration of the MinBiasPDF class.
0013 //
0014 
0015 #include "ThePEG/PDF/PDFBase.h"
0016 #include "MinBiasPDF.fh"
0017 
0018 namespace Herwig {
0019 using namespace ThePEG;
0020 /**
0021  * The MinBiasPDF class defines
0022  * a modified pdf which uses an existing pdf object to add
0023  * modifications like removing the valence part of it, which
0024  * is needed in the backward evolution of secondary scatters.
0025  *
0026  * \author Manuel B\"ahr
0027  *
0028  * @see \ref MinBiasPDFInterfaces "The interfaces"
0029  * defined for MinBiasPDF.
0030  */
0031 class MinBiasPDF: public PDFBase {
0032 
0033 public:
0034 
0035   /**
0036    * The default constructor.
0037    */
0038   MinBiasPDF() : thePDF(PDFPtr()) {}
0039 
0040 public:
0041 
0042   /** @name Virtual functions to be overridden by sub-classes. */
0043   //@{
0044   /**
0045    * Return true if this PDF can handle the extraction of partons from
0046    * the given \a particle.
0047    */
0048   virtual bool canHandleParticle(tcPDPtr particle) const;
0049 
0050   /**
0051    * Return the partons which this PDF may extract from the given
0052    * \a particle.
0053    */
0054   virtual cPDVector partons(tcPDPtr particle) const;
0055 
0056   /**
0057    * The density. Return the pdf for the given \a parton inside the
0058    * given \a particle for the virtuality \a partonScale and momentum
0059    * fraction \a x. The \a particle is assumed to have a virtuality \a
0060    * particleScale.
0061    */
0062   virtual double xfx(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale,
0063              double x, double eps=0.0, Energy2 particleScale = ZERO) const;
0064 
0065   /**
0066    * The valence density. Return the pdf for the given cvalence \a
0067    * parton inside the given \a particle for the virtuality \a
0068    * partonScale and momentum fraction \a x. The \a particle is
0069    * assumed to have a virtuality \a particleScale. If not overidden
0070    * by a sub class this implementation will assume that the
0071    * difference between a quark and anti-quark distribution is due do
0072    * valense quarks, but return zero for anything else.
0073    */
0074   virtual double xfvx(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale,
0075              double x, double eps=0.0, Energy2 particleScale = ZERO) const;
0076   //@}
0077 
0078   /** return the underlying PDFBase pointer*/
0079   tcPDFPtr originalPDF() const {return thePDF;}
0080 
0081 public:
0082 
0083   /** @name Functions used by the persistent I/O system. */
0084   //@{
0085   /**
0086    * Function used to write out object persistently.
0087    * @param os the persistent output stream written to.
0088    */
0089   void persistentOutput(PersistentOStream & os) const;
0090 
0091   /**
0092    * Function used to read in object persistently.
0093    * @param is the persistent input stream read from.
0094    * @param version the version number of the object when written.
0095    */
0096   void persistentInput(PersistentIStream & is, int version);
0097   //@}
0098 
0099   /**
0100    * The standard Init function used to initialize the interfaces.
0101    * Called exactly once for each class by the class description system
0102    * before the main function starts or
0103    * when this class is dynamically loaded.
0104    */
0105   static void Init();
0106 
0107 protected:
0108 
0109   /** @name Clone Methods. */
0110   //@{
0111   /**
0112    * Make a simple clone of this object.
0113    * @return a pointer to the new object.
0114    */
0115   virtual IBPtr clone() const { return new_ptr(*this); }
0116 
0117   /** Make a clone of this object, possibly modifying the cloned object
0118    * to make it sane.
0119    * @return a pointer to the new object.
0120    */
0121   virtual IBPtr fullclone() const { return new_ptr(*this); }
0122   //@}
0123 
0124 
0125 // If needed, insert declarations of virtual function defined in the
0126 // InterfacedBase class here (using ThePEG-interfaced-decl in Emacs).
0127 
0128 
0129 private:
0130 
0131   /**
0132    * The assignment operator is private and must never be called.
0133    * In fact, it should not even be implemented.
0134    */
0135   MinBiasPDF & operator=(const MinBiasPDF &) = delete;
0136 
0137   /**
0138    * pointer to the underlying ThePEG::PDFBase object, we are modifying.
0139    */
0140   PDFPtr thePDF;
0141 
0142 };
0143 
0144 }
0145 
0146 #endif /* HERWIG_MinBiasPDF_H */