Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 #ifndef HERWIG_UEBase_H
0003 #define HERWIG_UEBase_H
0004 //
0005 // This is the declaration of the UEBase class.
0006 //
0007 
0008 #include "ThePEG/Interface/Interfaced.h"
0009 #include "ThePEG/Handlers/StandardXComb.fh"
0010 #include "UEBase.fh"
0011 
0012 namespace Herwig {
0013 
0014 using namespace ThePEG;
0015 
0016 /**
0017  * Abstract base class used to minimize the dependence between
0018  * MPIHandler and all Shower classes.
0019  *
0020  * \author Manuel B\"ahr
0021  *
0022  * @see \ref UEBaseInterfaces "The interfaces"
0023  * defined for UEBase.
0024  */
0025 class UEBase: public Interfaced {
0026 
0027 public:
0028 
0029   /**
0030    * The standard Init function used to initialize the interfaces.
0031    * Called exactly once for each class by the class description system
0032    * before the main function starts or
0033    * when this class is dynamically loaded.
0034    */
0035   static void Init();
0036 
0037   /** @name Virtual functions used for the generation of additional
0038       interactions . */
0039   //@{
0040   /**
0041    * Some initialization code eventually.
0042    */
0043   virtual void initialize() {}
0044 
0045   /**
0046    * Return true or false depending on the generator setup. 
0047    */
0048   virtual bool beamOK() const = 0;
0049 
0050   /**
0051    * Return true or false depending on whether soft interactions are enabled.
0052    */
0053   virtual bool softInt() const {return false;}
0054 
0055   /**
0056    * Return the value of the pt cutoff.
0057    */
0058   virtual Energy Ptmin() const = 0;
0059 
0060   /**
0061    * Return the slope of the soft pt spectrum. Only necessary when the
0062    * soft part is modelled.
0063    */
0064   virtual InvEnergy2 beta() const {return ZERO;}
0065 
0066   /**
0067    * Some finalize code eventually.
0068    */
0069   virtual void finalize() {}
0070 
0071   /**
0072    * Clean up method called after each event.
0073    */
0074   virtual void clean() {}
0075 
0076   /**
0077    * Return the number of different hard processes. Use 0 as default to
0078    * not require implementation.
0079    */
0080   virtual unsigned int additionalHardProcs() const {return 0;}
0081 
0082   /**
0083    * return the hard multiplicity of process i. Can't be constant in my
0084    * case because drawing from the probability distribution also
0085    * specifies the soft multiplicity that has to be stored....
0086    */
0087   virtual unsigned int multiplicity(unsigned int i=0) = 0;
0088 
0089   /**
0090    * Generate a additional interaction for ProcessHandler sel. Method
0091    * can't be const because it saves the state of the underlying XComb
0092    * object on it's way.
0093    */
0094   virtual tStdXCombPtr generate(unsigned int sel=0) = 0;
0095 
0096   /**
0097    * Return the type of algorithm. 
0098    */
0099   virtual int Algorithm() const = 0;
0100 
0101   /**
0102    * Return the value of the hard Process pt cutoff for vetoing.
0103    */
0104   virtual Energy PtForVeto() const = 0;
0105 
0106   /**
0107    * Return the fraction of colour disrupted subprocesses. Use default 0
0108    * so that it is not required to implement.
0109    */
0110   virtual double colourDisrupt() const {return 0.0;}
0111 
0112   /**
0113    * Return the soft multiplicity. Use 0 as default to not require
0114    * implementation.
0115    */
0116   virtual unsigned int softMultiplicity() const {return 0;} 
0117   //@}
0118 
0119   /**
0120    * Return the inelastic cross section ( sigmaND + sigmaDiff )
0121    */
0122   virtual CrossSection  inelasticXSec() const =0;
0123   
0124   /**
0125    * Return the diffractiv cross section (sigmaDiff) assumed by the model.
0126    */
0127   virtual CrossSection diffractiveXSec() const =0;
0128   
0129   /**
0130    * Return the non-diffractiv cross section (sigmaND) assumed by the model.
0131    */
0132   virtual CrossSection nonDiffractiveXSec() const =0;
0133 
0134 private:
0135 
0136   /**
0137    * The assignment operator is private and must never be called.
0138    * In fact, it should not even be implemented.
0139    */
0140   UEBase & operator=(const UEBase &) = delete;
0141 
0142 };
0143 
0144 }
0145 
0146 #endif /* HERWIG_UEBase_H */