Back to home page

EIC code displayed by LXR

 
 

    


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 */