Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-08-06 09:24:24

0001 // -*- C++ -*-
0002 #ifndef HERWIG_FFMgx2ggxDipoleKernel_H
0003 #define HERWIG_FFMgx2ggxDipoleKernel_H
0004 //
0005 // This is the declaration of the FFMgx2ggxDipoleKernel 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, Stephen Webster
0017  *
0018  * \brief FFMgx2ggxDipoleKernel implements the g -> gg
0019  * splitting off a final-final dipole
0020  *
0021  */
0022 class FFMgx2ggxDipoleKernel: public DipoleSplittingKernel {
0023 
0024 public:
0025 
0026   /**
0027    * The default constructor.
0028    */
0029   FFMgx2ggxDipoleKernel();
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    * Asymmetry option for final state gluon splittings.
0135    */ 
0136   
0137   int theAsymmetryOption=1;
0138 
0139   /**
0140    * The static object used to initialize the description of this class.
0141    * Indicates that this is a concrete class with persistent data.
0142    */
0143   static ClassDescription<FFMgx2ggxDipoleKernel> initFFMgx2ggxDipoleKernel;
0144 
0145   /**
0146    * The assignment operator is private and must never be called.
0147    * In fact, it should not even be implemented.
0148    */
0149   FFMgx2ggxDipoleKernel & operator=(const FFMgx2ggxDipoleKernel &) = delete;
0150 
0151 };
0152 
0153 }
0154 
0155 #include "ThePEG/Utilities/ClassTraits.h"
0156 
0157 namespace ThePEG {
0158 
0159 /** @cond TRAITSPECIALIZATIONS */
0160 
0161 /** This template specialization informs ThePEG about the
0162  *  base classes of FFMgx2ggxDipoleKernel. */
0163 template <>
0164 struct BaseClassTrait<Herwig::FFMgx2ggxDipoleKernel,1> {
0165   /** Typedef of the first base class of FFMgx2ggxDipoleKernel. */
0166   typedef Herwig::DipoleSplittingKernel NthBase;
0167 };
0168 
0169 /** This template specialization informs ThePEG about the name of
0170  *  the FFMgx2ggxDipoleKernel class and the shared object where it is defined. */
0171 template <>
0172 struct ClassTraits<Herwig::FFMgx2ggxDipoleKernel>
0173   : public ClassTraitsBase<Herwig::FFMgx2ggxDipoleKernel> {
0174   /** Return a platform-independent class name */
0175   static string className() { return "Herwig::FFMgx2ggxDipoleKernel"; }
0176   /**
0177    * The name of a file containing the dynamic library where the class
0178    * FFMgx2ggxDipoleKernel is implemented. It may also include several, space-separated,
0179    * libraries if the class FFMgx2ggxDipoleKernel depends on other classes (base classes
0180    * excepted). In this case the listed libraries will be dynamically
0181    * linked in the order they are specified.
0182    */
0183   static string library() { return "HwDipoleShower.so"; }
0184 };
0185 
0186 /** @endcond */
0187 
0188 }
0189 
0190 #endif /* HERWIG_FFMgx2ggxDipoleKernel_H */