|
|
|||
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 */
| [ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
|
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
|