Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 #ifndef HERWIG_IFMqx2qgxDipoleKernel_H
0003 #define HERWIG_IFMqx2qgxDipoleKernel_H
0004 //
0005 // This is the declaration of the IFqx2qgxDipoleKernel 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 IFMqx2qgxDipoleKernel implements the q -> qg
0019  * splitting off an initial-final dipole
0020  *
0021  */
0022 class IFMqx2qgxDipoleKernel: public DipoleSplittingKernel {
0023 
0024 public:
0025 
0026   /**
0027    * The default constructor.
0028    */
0029   IFMqx2qgxDipoleKernel();
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<IFMqx2qgxDipoleKernel> initIFMqx2qgxDipoleKernel;
0138 
0139   /**
0140    * The assignment operator is private and must never be called.
0141    * In fact, it should not even be implemented.
0142    */
0143   IFMqx2qgxDipoleKernel & operator=(const IFMqx2qgxDipoleKernel &) = 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 IFMqx2qgxDipoleKernel. */
0157 template <>
0158 struct BaseClassTrait<Herwig::IFMqx2qgxDipoleKernel,1> {
0159   /** Typedef of the first base class of IFMqx2qgxDipoleKernel. */
0160   typedef Herwig::DipoleSplittingKernel NthBase;
0161 };
0162 
0163 /** This template specialization informs ThePEG about the name of
0164  *  the IFMqx2qgxDipoleKernel class and the shared object where it is defined. */
0165 template <>
0166 struct ClassTraits<Herwig::IFMqx2qgxDipoleKernel>
0167   : public ClassTraitsBase<Herwig::IFMqx2qgxDipoleKernel> {
0168   /** Return a platform-independent class name */
0169   static string className() { return "Herwig::IFMqx2qgxDipoleKernel"; }
0170   /**
0171    * The name of a file containing the dynamic library where the class
0172    * IFMqx2qgxDipoleKernel is implemented. It may also include several, space-separated,
0173    * libraries if the class IFMqx2qgxDipoleKernel 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_IFMqx2qgxDipoleKernel_H */