|
|
|||
File indexing completed on 2026-08-06 09:24:24
0001 // -*- C++ -*- 0002 #ifndef HERWIG_FIMDecaygx2ggxDipoleKernel_H 0003 #define HERWIG_FIMDecaygx2ggxDipoleKernel_H 0004 // 0005 // This is the declaration of the FIMDecaygx2ggxDipoleKernel class. 0006 // 0007 0008 #include "DipoleSplittingKernel.h" 0009 0010 namespace Herwig { 0011 0012 using namespace ThePEG; 0013 0014 /** 0015 * \ingroup DipoleShower 0016 * \author Stephen Webster 0017 * 0018 * \brief FIMDecaygx2ggxDipoleKernel implements the g -> gg 0019 * splitting off a final-initial decay dipole and includes the 0020 * contribution from the splitting of the intial / decay particle 0021 * 0022 */ 0023 class FIMDecaygx2ggxDipoleKernel: public DipoleSplittingKernel { 0024 0025 public: 0026 0027 /** 0028 * The default constructor. 0029 */ 0030 FIMDecaygx2ggxDipoleKernel(); 0031 0032 public: 0033 0034 /** 0035 * Return true, if this splitting kernel 0036 * applies to the given dipole index. 0037 */ 0038 virtual bool canHandle(const DipoleIndex&) const; 0039 0040 /** 0041 * Return true, if this splitting kernel is 0042 * the same for the given index a, as the given 0043 * splitting kernel for index b. 0044 */ 0045 virtual bool canHandleEquivalent(const DipoleIndex& a, 0046 const DipoleSplittingKernel& sk, 0047 const DipoleIndex& b) const; 0048 0049 /** 0050 * Return the emitter data after splitting, given 0051 * a dipole index. 0052 */ 0053 virtual tcPDPtr emitter(const DipoleIndex&) const; 0054 0055 /** 0056 * Return the emission data after splitting, given 0057 * a dipole index. 0058 */ 0059 virtual tcPDPtr emission(const DipoleIndex&) const; 0060 0061 /** 0062 * Return the spectator data after splitting, given 0063 * a dipole index. 0064 */ 0065 virtual tcPDPtr spectator(const DipoleIndex&) const; 0066 0067 /** 0068 * Evaluate this splitting kernel for the given 0069 * dipole splitting. 0070 */ 0071 virtual double evaluate(const DipoleSplittingInfo&) const; 0072 0073 /** 0074 * Evaluate rho_ii' V_ijk V*_i'jk / equivalent for initial-state splitting, 0075 * required for generating spin-correlated azimuthal angles. 0076 **/ 0077 virtual vector< pair<int, Complex> > generatePhi( const DipoleSplittingInfo& dInfo, const RhoDMatrix& rho) const; 0078 0079 /** 0080 * Return the completely spin-unaveraged (i.e. spin-indexed) splitting kernel. 0081 **/ 0082 virtual DecayMEPtr matrixElement(const DipoleSplittingInfo& dInfo) const; 0083 0084 public: 0085 0086 /** @name Functions used by the persistent I/O system. */ 0087 //@{ 0088 /** 0089 * Function used to write out object persistently. 0090 * @param os the persistent output stream written to. 0091 */ 0092 void persistentOutput(PersistentOStream & os) const; 0093 0094 /** 0095 * Function used to read in object persistently. 0096 * @param is the persistent input stream read from. 0097 * @param version the version number of the object when written. 0098 */ 0099 void persistentInput(PersistentIStream & is, int version); 0100 //@} 0101 0102 /** 0103 * The standard Init function used to initialize the interfaces. 0104 * Called exactly once for each class by the class description system 0105 * before the main function starts or 0106 * when this class is dynamically loaded. 0107 */ 0108 static void Init(); 0109 0110 protected: 0111 0112 /** @name Clone Methods. */ 0113 //@{ 0114 /** 0115 * Make a simple clone of this object. 0116 * @return a pointer to the new object. 0117 */ 0118 virtual IBPtr clone() const; 0119 0120 /** Make a clone of this object, possibly modifying the cloned object 0121 * to make it sane. 0122 * @return a pointer to the new object. 0123 */ 0124 virtual IBPtr fullclone() const; 0125 //@} 0126 0127 0128 // If needed, insert declarations of virtual function defined in the 0129 // InterfacedBase class here (using ThePEG-interfaced-decl in Emacs). 0130 0131 0132 private: 0133 0134 /** 0135 * The static object used to initialize the description of this class. 0136 * Indicates that this is a concrete class with persistent data. 0137 */ 0138 static ClassDescription<FIMDecaygx2ggxDipoleKernel> initFIMDecaygx2ggxDipoleKernel; 0139 0140 /** 0141 * The assignment operator is private and must never be called. 0142 * In fact, it should not even be implemented. 0143 */ 0144 FIMDecaygx2ggxDipoleKernel & operator=(const FIMDecaygx2ggxDipoleKernel &) = delete; 0145 0146 /** 0147 * Asymmetry option for final state gluon splittings. 0148 */ 0149 int theAsymmetryOption=0; 0150 }; 0151 0152 } 0153 0154 #include "ThePEG/Utilities/ClassTraits.h" 0155 0156 namespace ThePEG { 0157 0158 /** @cond TRAITSPECIALIZATIONS */ 0159 0160 /** This template specialization informs ThePEG about the 0161 * base classes of FIMDecaygx2ggxDipoleKernel. */ 0162 template <> 0163 struct BaseClassTrait<Herwig::FIMDecaygx2ggxDipoleKernel,1> { 0164 /** Typedef of the first base class of FIMDecaygx2ggxDipoleKernel. */ 0165 typedef Herwig::DipoleSplittingKernel NthBase; 0166 }; 0167 0168 /** This template specialization informs ThePEG about the name of 0169 * the FIMDecaygx2ggxDipoleKernel class and the shared object where it is defined. */ 0170 template <> 0171 struct ClassTraits<Herwig::FIMDecaygx2ggxDipoleKernel> 0172 : public ClassTraitsBase<Herwig::FIMDecaygx2ggxDipoleKernel> { 0173 /** Return a platform-independent class name */ 0174 static string className() { return "Herwig::FIMDecaygx2ggxDipoleKernel"; } 0175 /** 0176 * The name of a file containing the dynamic library where the class 0177 * FIMDecaygx2ggxDipoleKernel is implemented. It may also include several, space-separated, 0178 * libraries if the class FIMDecaygx2ggxDipoleKernel depends on other classes (base classes 0179 * excepted). In this case the listed libraries will be dynamically 0180 * linked in the order they are specified. 0181 */ 0182 static string library() { return "HwDipoleShower.so"; } 0183 }; 0184 0185 /** @endcond */ 0186 0187 } 0188 0189 #endif /* HERWIG_FIMDecaygx2ggxDipoleKernel_H */
| [ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
|
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
|