|
|
|||
File indexing completed on 2026-08-06 09:24:25
0001 // -*- C++ -*- 0002 // 0003 // IFLightKinematics.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_IFLightKinematics_H 0010 #define HERWIG_IFLightKinematics_H 0011 // 0012 // This is the declaration of the IFLightKinematics class. 0013 // 0014 0015 #include "DipoleSplittingKinematics.h" 0016 0017 namespace Herwig { 0018 0019 using namespace ThePEG; 0020 0021 /** 0022 * \ingroup DipoleShower 0023 * \author Simon Platzer, Martin Stoll 0024 * 0025 * \brief IFMassiveKinematics implements massless splittings 0026 * off an initial-final dipole. 0027 * 0028 * @see \ref IFMassiveKinematicsInterfaces "The interfaces" 0029 * defined for IFMassiveKinematics. 0030 */ 0031 class IFMassiveKinematics: public DipoleSplittingKinematics { 0032 0033 public: 0034 0035 /** 0036 * The default constructor. 0037 */ 0038 IFMassiveKinematics(); 0039 0040 public: 0041 0042 /** 0043 * Return the boundaries in between the evolution 0044 * variable random number is to be sampled; the lower 0045 * cuoff is assumed to correspond to the infrared cutoff. 0046 */ 0047 virtual pair<double,double> kappaSupport(const DipoleSplittingInfo& dIndex) const; 0048 0049 /** 0050 * Return the boundaries in between the momentum 0051 * fraction random number is to be sampled. 0052 */ 0053 virtual pair<double,double> xiSupport(const DipoleSplittingInfo& dIndex) const; 0054 0055 /** 0056 * Return the boundaries on the momentum fraction 0057 */ 0058 virtual pair<double,double> zBoundaries(Energy, 0059 const DipoleSplittingInfo&, 0060 const DipoleSplittingKernel&) const { 0061 return {0.0,1.0}; 0062 } 0063 0064 /** 0065 * Return the dipole scale associated to the 0066 * given pair of emitter and spectator. This 0067 * should be the invariant mass or absolute value 0068 * final/final or initial/initial and the absolute 0069 * value of the momentum transfer for intial/final or 0070 * final/initial dipoles. 0071 */ 0072 virtual Energy dipoleScale(const Lorentz5Momentum& pEmitter, 0073 const Lorentz5Momentum& pSpectator) const; 0074 0075 /** 0076 * Return the maximum pt for the given dipole scale. 0077 */ 0078 virtual Energy ptMax(Energy dScale, 0079 double emX, double specX, 0080 const DipoleSplittingInfo& dInfo, 0081 const DipoleSplittingKernel& split) const; 0082 0083 /** 0084 * Return the maximum pt for the given dipole scale. 0085 */ 0086 virtual Energy ptMax(Energy dScale, 0087 double, double, 0088 const DipoleIndex& dIndex, 0089 const DipoleSplittingKernel& split, 0090 tPPtr emitter, tPPtr) const; 0091 0092 /** 0093 * Return the maximum pt for the given dipole scale. 0094 */ 0095 virtual Energy ptMax(Energy, 0096 double, double, 0097 const DipoleIndex&, 0098 const DipoleSplittingKernel&) const { 0099 // Only the DipoleSplittingInfo version should be used for massive 0100 // dipoles, for now anyway. 0101 assert(false); 0102 return ZERO; 0103 } 0104 0105 /** 0106 * Return the maximum virtuality for the given dipole scale. 0107 */ 0108 virtual Energy QMax(Energy dScale, 0109 double emX, double specX, 0110 const DipoleSplittingInfo& dInfo, 0111 const DipoleSplittingKernel& split) const; 0112 0113 /** 0114 * Return the maximum virtuality for the given dipole scale. 0115 */ 0116 virtual Energy QMax(Energy, 0117 double, double, 0118 const DipoleIndex&, 0119 const DipoleSplittingKernel&) const { 0120 // Only the DipoleSplittingInfo version should be used for massive 0121 // dipoles, for now anyway. 0122 assert(false); 0123 return ZERO; 0124 } 0125 0126 /** 0127 * Return the pt given a virtuality. 0128 */ 0129 virtual Energy PtFromQ(Energy scale, const DipoleSplittingInfo&) const; 0130 0131 /** 0132 * Return the virtuality given a pt. 0133 */ 0134 virtual Energy QFromPt(Energy scale, const DipoleSplittingInfo&) const; 0135 0136 /** 0137 * Return the random number associated to 0138 * the given pt. 0139 */ 0140 virtual double ptToRandom(Energy pt, Energy dScale, 0141 double emX, double specX, 0142 const DipoleIndex& dIndex, 0143 const DipoleSplittingKernel&) const; 0144 0145 /** 0146 * Generate splitting variables given three random numbers 0147 * and the momentum fractions of the emitter and spectator. 0148 * Return true on success. 0149 */ 0150 virtual bool generateSplitting(double kappa, double xi, double phi, 0151 DipoleSplittingInfo& dIndex, 0152 const DipoleSplittingKernel&); 0153 0154 /** 0155 * Generate the full kinematics given emitter and 0156 * spectator momentum and a previously completeted 0157 * DipoleSplittingInfo object. 0158 */ 0159 virtual void generateKinematics(const Lorentz5Momentum& pEmitter, 0160 const Lorentz5Momentum& pSpectator, 0161 const DipoleSplittingInfo& dInfo); 0162 0163 public: 0164 0165 /** @name Functions used by the persistent I/O system. */ 0166 //@{ 0167 /** 0168 * Function used to write out object persistently. 0169 * @param os the persistent output stream written to. 0170 */ 0171 void persistentOutput(PersistentOStream & os) const; 0172 0173 /** 0174 * Function used to read in object persistently. 0175 * @param is the persistent input stream read from. 0176 * @param version the version number of the object when written. 0177 */ 0178 void persistentInput(PersistentIStream & is, int version); 0179 //@} 0180 0181 /** 0182 * The standard Init function used to initialize the interfaces. 0183 * Called exactly once for each class by the class description system 0184 * before the main function starts or 0185 * when this class is dynamically loaded. 0186 */ 0187 static void Init(); 0188 0189 protected: 0190 0191 /** @name Clone Methods. */ 0192 //@{ 0193 /** 0194 * Make a simple clone of this object. 0195 * @return a pointer to the new object. 0196 */ 0197 virtual IBPtr clone() const; 0198 0199 /** Make a clone of this object, possibly modifying the cloned object 0200 * to make it sane. 0201 * @return a pointer to the new object. 0202 */ 0203 virtual IBPtr fullclone() const; 0204 //@} 0205 0206 0207 // If needed, insert declarations of virtual function defined in the 0208 // InterfacedBase class here (using ThePEG-interfaced-decl in Emacs). 0209 0210 0211 private: 0212 0213 /** 0214 * The static object used to initialize the description of this class. 0215 * Indicates that this is a concrete class with persistent data. 0216 */ 0217 static ClassDescription<IFMassiveKinematics> initIFMassiveKinematics; 0218 0219 /** 0220 * The assignment operator is private and must never be called. 0221 * In fact, it should not even be implemented. 0222 */ 0223 IFMassiveKinematics & operator=(const IFMassiveKinematics &) = delete; 0224 0225 private: 0226 0227 /** 0228 * Wether or not to choose the `collinear' scheme 0229 */ 0230 bool theCollinearScheme; 0231 0232 }; 0233 0234 } 0235 0236 #include "ThePEG/Utilities/ClassTraits.h" 0237 0238 namespace ThePEG { 0239 0240 /** @cond TRAITSPECIALIZATIONS */ 0241 0242 /** This template specialization informs ThePEG about the 0243 * base classes of IFMassiveKinematics. */ 0244 template <> 0245 struct BaseClassTrait<Herwig::IFMassiveKinematics,1> { 0246 /** Typedef of the first base class of IFMassiveKinematics. */ 0247 typedef Herwig::DipoleSplittingKinematics NthBase; 0248 }; 0249 0250 /** This template specialization informs ThePEG about the name of 0251 * the IFMassiveKinematics class and the shared object where it is defined. */ 0252 template <> 0253 struct ClassTraits<Herwig::IFMassiveKinematics> 0254 : public ClassTraitsBase<Herwig::IFMassiveKinematics> { 0255 /** Return a platform-independent class name */ 0256 static string className() { return "Herwig::IFMassiveKinematics"; } 0257 /** 0258 * The name of a file containing the dynamic library where the class 0259 * IFMassiveKinematics is implemented. It may also include several, space-separated, 0260 * libraries if the class IFMassiveKinematics depends on other classes (base classes 0261 * excepted). In this case the listed libraries will be dynamically 0262 * linked in the order they are specified. 0263 */ 0264 static string library() { return "HwDipoleShower.so"; } 0265 }; 0266 0267 /** @endcond */ 0268 0269 } 0270 0271 #endif /* HERWIG_IFMassiveKinematics_H */
| [ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
|
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
|