Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 //
0003 // DipoleEvolutionOrdering.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_DipoleEvolutionOrdering_H
0010 #define HERWIG_DipoleEvolutionOrdering_H
0011 //
0012 // This is the declaration of the DipoleEvolutionOrdering class.
0013 //
0014 
0015 #include "ThePEG/Handlers/HandlerBase.h"
0016 
0017 #include "Herwig/Shower/Dipole/Base/Dipole.h"
0018 #include "Herwig/Shower/Dipole/Base/DipoleChain.h"
0019 #include "Herwig/Shower/Dipole/Kernels/DipoleSplittingKernel.h"
0020 
0021 namespace Herwig {
0022 
0023 using namespace ThePEG;
0024 
0025 /**
0026  * \ingroup DipoleShower
0027  * \author Simon Platzer
0028  *
0029  * \brief DipoleEvolutionOrdering defines a particular evolution
0030  * algortihm for the dipole shower.
0031  *
0032  */
0033 class DipoleEvolutionOrdering: public HandlerBase {
0034 
0035 public:
0036 
0037   /** @name Standard constructors and destructors. */
0038   //@{
0039   /**
0040    * The default constructor.
0041    */
0042   DipoleEvolutionOrdering();
0043 
0044   /**
0045    * The destructor.
0046    */
0047   virtual ~DipoleEvolutionOrdering();
0048   //@}
0049 
0050 public:
0051 
0052   /**
0053    * Return true, if this ordering requests
0054    * an independent dipole evolution.
0055    */
0056   virtual bool independentDipoles() const { return false; }
0057 
0058   /**
0059    * For the given dipole and splitting kernel return
0060    * the hard scale.
0061    */
0062   virtual Energy hardScale(tPPtr emitter, tPPtr spectator,
0063                double emitterX, double spectatorX,
0064                const DipoleSplittingKernel&,
0065                const DipoleIndex&) const = 0;
0066 
0067   /**
0068    * For the given performed splitting, dipole chain
0069    * and dipoles originating from the splitting, set the next
0070    * scale.
0071    */
0072   virtual void setEvolutionScale(Energy scale,
0073                  const DipoleSplittingInfo&,
0074                  DipoleChain&,
0075                  pair<list<Dipole>::iterator,list<Dipole>::iterator>) const = 0;
0076 
0077   /**
0078    * For the given performed splitting, dipole chain
0079    * and dipole taking a recoil, set the next
0080    * scale.
0081    */
0082   virtual void setEvolutionScale(Energy scale,
0083                  const DipoleSplittingInfo&,
0084                  DipoleChain&,
0085                  list<Dipole>::iterator) const = 0;
0086 
0087   /**
0088    * For the given selected splitting return the evolution scale.
0089    */
0090   virtual Energy evolutionScale(const DipoleSplittingInfo&,
0091                 const DipoleSplittingKernel&) const = 0;
0092 
0093   /**
0094    * Return the maximum pt corresponding to the given
0095    * evolution scale.
0096    */
0097   virtual Energy maxPt(Energy scale,
0098                const DipoleSplittingInfo&,
0099                const DipoleSplittingKernel&) const = 0;
0100 
0101 public:
0102 
0103   /** @name Functions used by the persistent I/O system. */
0104   //@{
0105   /**
0106    * Function used to write out object persistently.
0107    * @param os the persistent output stream written to.
0108    */
0109   void persistentOutput(PersistentOStream & os) const;
0110 
0111   /**
0112    * Function used to read in object persistently.
0113    * @param is the persistent input stream read from.
0114    * @param version the version number of the object when written.
0115    */
0116   void persistentInput(PersistentIStream & is, int version);
0117   //@}
0118 
0119   /**
0120    * The standard Init function used to initialize the interfaces.
0121    * Called exactly once for each class by the class description system
0122    * before the main function starts or
0123    * when this class is dynamically loaded.
0124    */
0125   static void Init();
0126 
0127 // If needed, insert declarations of virtual function defined in the
0128 // InterfacedBase class here (using ThePEG-interfaced-decl in Emacs).
0129 
0130 
0131 private:
0132 
0133   /**
0134    * The static object used to initialize the description of this class.
0135    * Indicates that this is an abstract class with persistent data.
0136    */
0137   static AbstractClassDescription<DipoleEvolutionOrdering> initDipoleEvolutionOrdering;
0138 
0139   /**
0140    * The assignment operator is private and must never be called.
0141    * In fact, it should not even be implemented.
0142    */
0143   DipoleEvolutionOrdering & operator=(const DipoleEvolutionOrdering &) = delete;
0144 
0145 };
0146 
0147 }
0148 
0149 #include "ThePEG/Utilities/ClassTraits.h"
0150 
0151 namespace ThePEG {
0152 
0153 /** @cond TRAITSPECIALIZATIONS */
0154 
0155 /** This template specialization informs ThePEG about the
0156  *  base classes of DipoleEvolutionOrdering. */
0157 template <>
0158 struct BaseClassTrait<Herwig::DipoleEvolutionOrdering,1> {
0159   /** Typedef of the first base class of DipoleEvolutionOrdering. */
0160   typedef HandlerBase NthBase;
0161 };
0162 
0163 /** This template specialization informs ThePEG about the name of
0164  *  the DipoleEvolutionOrdering class and the shared object where it is defined. */
0165 template <>
0166 struct ClassTraits<Herwig::DipoleEvolutionOrdering>
0167   : public ClassTraitsBase<Herwig::DipoleEvolutionOrdering> {
0168   /** Return a platform-independent class name */
0169   static string className() { return "Herwig::DipoleEvolutionOrdering"; }
0170   /**
0171    * The name of a file containing the dynamic library where the class
0172    * DipoleEvolutionOrdering is implemented. It may also include several, space-separated,
0173    * libraries if the class DipoleEvolutionOrdering depends on other classes (base classes
0174    * excepted). In this case the listed libraries will be dynamically
0175    * linked in the order they are specified.
0176    */
0177   static string library() { return "HwDipoleShower.so"; }
0178 };
0179 
0180 /** @endcond */
0181 
0182 }
0183 
0184 #endif /* HERWIG_DipoleEvolutionOrdering_H */