|
|
|||
File indexing completed on 2026-08-06 09:24:24
0001 // -*- C++ -*- 0002 // 0003 // FILightKinematics.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_FILightKinematics_H 0010 #define HERWIG_FILightKinematics_H 0011 // 0012 // This is the declaration of the FILightKinematics 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 0024 * 0025 * \brief FILightKinematics implements massless splittings 0026 * off a final-initial dipole. 0027 * 0028 */ 0029 class FILightKinematics: public DipoleSplittingKinematics { 0030 0031 public: 0032 0033 /** 0034 * The default constructor. 0035 */ 0036 FILightKinematics(); 0037 0038 public: 0039 0040 /** 0041 * Return the maximum pt for the given dipole scale. 0042 */ 0043 virtual Energy ptMax(Energy dScale, 0044 double emX, double specX, 0045 const DipoleIndex& dIndex, 0046 const DipoleSplittingKernel&) const; 0047 0048 /** 0049 * Return the maximum virtuality for the given dipole scale. 0050 */ 0051 virtual Energy QMax(Energy dScale, 0052 double emX, double specX, 0053 const DipoleIndex& dIndex, 0054 const DipoleSplittingKernel&) const; 0055 0056 /** 0057 * Return the pt given a virtuality. 0058 */ 0059 virtual Energy PtFromQ(Energy scale, const DipoleSplittingInfo&) const; 0060 0061 /** 0062 * Return the virtuality given a pt. 0063 */ 0064 virtual Energy QFromPt(Energy scale, const DipoleSplittingInfo&) const; 0065 0066 /** 0067 * Return the boundaries on the momentum fraction 0068 */ 0069 virtual pair<double,double> zBoundaries(Energy pt, 0070 const DipoleSplittingInfo& dInfo, 0071 const DipoleSplittingKernel& split) const; 0072 0073 /** 0074 * Generate splitting variables given three random numbers 0075 * and the momentum fractions of the emitter and spectator. 0076 * Return true on success. 0077 */ 0078 virtual bool generateSplitting(double kappa, double xi, double phi, 0079 DipoleSplittingInfo& dIndex, 0080 const DipoleSplittingKernel&); 0081 0082 /** 0083 * Generate the full kinematics given emitter and 0084 * spectator momentum and a previously completeted 0085 * DipoleSplittingInfo object. 0086 */ 0087 virtual void generateKinematics(const Lorentz5Momentum& pEmitter, 0088 const Lorentz5Momentum& pSpectator, 0089 const DipoleSplittingInfo& dInfo); 0090 0091 public: 0092 0093 /** @name Functions used by the persistent I/O system. */ 0094 //@{ 0095 /** 0096 * Function used to write out object persistently. 0097 * @param os the persistent output stream written to. 0098 */ 0099 void persistentOutput(PersistentOStream & os) const; 0100 0101 /** 0102 * Function used to read in object persistently. 0103 * @param is the persistent input stream read from. 0104 * @param version the version number of the object when written. 0105 */ 0106 void persistentInput(PersistentIStream & is, int version); 0107 //@} 0108 0109 /** 0110 * The standard Init function used to initialize the interfaces. 0111 * Called exactly once for each class by the class description system 0112 * before the main function starts or 0113 * when this class is dynamically loaded. 0114 */ 0115 static void Init(); 0116 0117 protected: 0118 0119 /** @name Clone Methods. */ 0120 //@{ 0121 /** 0122 * Make a simple clone of this object. 0123 * @return a pointer to the new object. 0124 */ 0125 virtual IBPtr clone() const; 0126 0127 /** Make a clone of this object, possibly modifying the cloned object 0128 * to make it sane. 0129 * @return a pointer to the new object. 0130 */ 0131 virtual IBPtr fullclone() const; 0132 //@} 0133 0134 0135 // If needed, insert declarations of virtual function defined in the 0136 // InterfacedBase class here (using ThePEG-interfaced-decl in Emacs). 0137 0138 0139 private: 0140 0141 /** 0142 * The static object used to initialize the description of this class. 0143 * Indicates that this is a concrete class with persistent data. 0144 */ 0145 static ClassDescription<FILightKinematics> initFILightKinematics; 0146 0147 /** 0148 * The assignment operator is private and must never be called. 0149 * In fact, it should not even be implemented. 0150 */ 0151 FILightKinematics & operator=(const FILightKinematics &) = delete; 0152 0153 }; 0154 0155 } 0156 0157 #include "ThePEG/Utilities/ClassTraits.h" 0158 0159 namespace ThePEG { 0160 0161 /** @cond TRAITSPECIALIZATIONS */ 0162 0163 /** This template specialization informs ThePEG about the 0164 * base classes of FILightKinematics. */ 0165 template <> 0166 struct BaseClassTrait<Herwig::FILightKinematics,1> { 0167 /** Typedef of the first base class of FILightKinematics. */ 0168 typedef Herwig::DipoleSplittingKinematics NthBase; 0169 }; 0170 0171 /** This template specialization informs ThePEG about the name of 0172 * the FILightKinematics class and the shared object where it is defined. */ 0173 template <> 0174 struct ClassTraits<Herwig::FILightKinematics> 0175 : public ClassTraitsBase<Herwig::FILightKinematics> { 0176 /** Return a platform-independent class name */ 0177 static string className() { return "Herwig::FILightKinematics"; } 0178 /** 0179 * The name of a file containing the dynamic library where the class 0180 * FILightKinematics is implemented. It may also include several, space-separated, 0181 * libraries if the class FILightKinematics depends on other classes (base classes 0182 * excepted). In this case the listed libraries will be dynamically 0183 * linked in the order they are specified. 0184 */ 0185 static string library() { return "HwDipoleShower.so"; } 0186 }; 0187 0188 /** @endcond */ 0189 0190 } 0191 0192 #endif /* HERWIG_FILightKinematics_H */
| [ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
|
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
|