|
|
|||
File indexing completed on 2026-08-06 09:24:24
0001 // -*- C++ -*- 0002 #ifndef HERWIG_IFMqx2gqxDipoleKernel_H 0003 #define HERWIG_IFMqx2gqxDipoleKernel_H 0004 // 0005 // This is the declaration of the IFqx2gqxDipoleKernel class. 0006 // 0007 0008 #include "DipoleSplittingKernel.h" 0009 0010 namespace Herwig { 0011 0012 using namespace ThePEG; 0013 0014 /** 0015 * \ingroup DipoleShower 0016 * \author Simon Platzer, Martin Stoll 0017 * 0018 * \brief IFMqx2gqxDipoleKernel implements the q -> gqbar 0019 * splitting off an initial-final dipole 0020 * 0021 */ 0022 class IFMqx2gqxDipoleKernel: public DipoleSplittingKernel { 0023 0024 public: 0025 0026 /** 0027 * The default constructor. 0028 */ 0029 IFMqx2gqxDipoleKernel(); 0030 0031 public: 0032 0033 /** 0034 * Return true, if this splitting kernel 0035 * applies to the given dipole index. 0036 */ 0037 virtual bool canHandle(const DipoleIndex&) const; 0038 0039 /** 0040 * Return true, if this splitting kernel is 0041 * the same for the given index a, as the given 0042 * splitting kernel for index b. 0043 */ 0044 virtual bool canHandleEquivalent(const DipoleIndex& a, 0045 const DipoleSplittingKernel& sk, 0046 const DipoleIndex& b) const; 0047 0048 /** 0049 * Return the emitter data after splitting, given 0050 * a dipole index. 0051 */ 0052 virtual tcPDPtr emitter(const DipoleIndex&) const; 0053 0054 /** 0055 * Return the emission data after splitting, given 0056 * a dipole index. 0057 */ 0058 virtual tcPDPtr emission(const DipoleIndex&) const; 0059 0060 /** 0061 * Return the spectator data after splitting, given 0062 * a dipole index. 0063 */ 0064 virtual tcPDPtr spectator(const DipoleIndex&) const; 0065 0066 /** 0067 * Evaluate this splitting kernel for the given 0068 * dipole splitting. 0069 */ 0070 virtual double evaluate(const DipoleSplittingInfo&) const; 0071 0072 /** 0073 * Evaluate rho_ii' V_ijk V*_i'jk / equivalent for initial-state splitting, 0074 * required for generating spin-correlated azimuthal angles. 0075 **/ 0076 virtual vector< pair<int, Complex> > generatePhi( const DipoleSplittingInfo& dInfo, const RhoDMatrix& rho) const; 0077 0078 /** 0079 * Return the completely spin-unaveraged (i.e. spin-indexed) splitting kernel. 0080 **/ 0081 virtual DecayMEPtr matrixElement(const DipoleSplittingInfo& dInfo) const; 0082 0083 public: 0084 0085 /** @name Functions used by the persistent I/O system. */ 0086 //@{ 0087 /** 0088 * Function used to write out object persistently. 0089 * @param os the persistent output stream written to. 0090 */ 0091 void persistentOutput(PersistentOStream & os) const; 0092 0093 /** 0094 * Function used to read in object persistently. 0095 * @param is the persistent input stream read from. 0096 * @param version the version number of the object when written. 0097 */ 0098 void persistentInput(PersistentIStream & is, int version); 0099 //@} 0100 0101 /** 0102 * The standard Init function used to initialize the interfaces. 0103 * Called exactly once for each class by the class description system 0104 * before the main function starts or 0105 * when this class is dynamically loaded. 0106 */ 0107 static void Init(); 0108 0109 protected: 0110 0111 /** @name Clone Methods. */ 0112 //@{ 0113 /** 0114 * Make a simple clone of this object. 0115 * @return a pointer to the new object. 0116 */ 0117 virtual IBPtr clone() const; 0118 0119 /** Make a clone of this object, possibly modifying the cloned object 0120 * to make it sane. 0121 * @return a pointer to the new object. 0122 */ 0123 virtual IBPtr fullclone() const; 0124 //@} 0125 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 a concrete class with persistent data. 0136 */ 0137 static ClassDescription<IFMqx2gqxDipoleKernel> initIFMqx2gqxDipoleKernel; 0138 0139 /** 0140 * The assignment operator is private and must never be called. 0141 * In fact, it should not even be implemented. 0142 */ 0143 IFMqx2gqxDipoleKernel & operator=(const IFMqx2gqxDipoleKernel &) = 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 IFMqx2gqxDipoleKernel. */ 0157 template <> 0158 struct BaseClassTrait<Herwig::IFMqx2gqxDipoleKernel,1> { 0159 /** Typedef of the first base class of IFMqx2gqxDipoleKernel. */ 0160 typedef Herwig::DipoleSplittingKernel NthBase; 0161 }; 0162 0163 /** This template specialization informs ThePEG about the name of 0164 * the IFMqx2gqxDipoleKernel class and the shared object where it is defined. */ 0165 template <> 0166 struct ClassTraits<Herwig::IFMqx2gqxDipoleKernel> 0167 : public ClassTraitsBase<Herwig::IFMqx2gqxDipoleKernel> { 0168 /** Return a platform-independent class name */ 0169 static string className() { return "Herwig::IFMqx2gqxDipoleKernel"; } 0170 /** 0171 * The name of a file containing the dynamic library where the class 0172 * IFMqx2gqxDipoleKernel is implemented. It may also include several, space-separated, 0173 * libraries if the class IFMqx2gqxDipoleKernel 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_IFMqx2gqxDipoleKernel_H */
| [ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
|
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
|