Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 #ifndef Herwig_OneOneZeroEWSplitFn_H
0003 #define Herwig_OneOneZeroEWSplitFn_H
0004 //
0005 // This is the declaration of the OneOneZeroEWSplitFn class.
0006 //
0007 
0008 #include "SplittingFunction.h"
0009 #include "Herwig/Models/StandardModel/StandardModel.h"
0010 
0011 namespace Herwig {
0012 
0013 using namespace ThePEG;
0014 
0015 /**
0016  * The OneOneZeroEWSplitFn class implements the splitting function for
0017  * \f$\1\to q\1 0\f$ where the spin-1 particles are the W / Z massive
0018  * electroweak gauge bosons and the spin-0 particle is the massive Higgs
0019  * boson.
0020  *
0021  * @see \ref OneOneZeroEWSplitFnInterfaces "The interfaces"
0022  * defined for OneOneZeroEWSplitFn.
0023  */
0024 class OneOneZeroEWSplitFn: public SplittingFunction {
0025 
0026 public:
0027 
0028   /**
0029    *  Concrete implementation of the method to determine whether this splitting
0030    *  function can be used for a given set of particles.
0031    *  @param ids The PDG codes for the particles in the splitting.
0032    */
0033   virtual bool accept(const IdList & ids) const;
0034 
0035   /**
0036    *   Methods to return the splitting function.
0037    */
0038   //@{
0039   /**
0040    * The concrete implementation of the splitting function, \f$P(z,t)\f$.
0041    * @param z   The energy fraction.
0042    * @param t   The scale.
0043    * @param ids The PDG codes for the particles in the splitting.
0044    * @param mass Whether or not to include the mass dependent terms
0045    * @param rho The spin density matrix
0046    */
0047   virtual double P(const double z, const Energy2 t, const IdList & ids,
0048            const bool mass, const RhoDMatrix & rho) const;
0049 
0050   /**
0051    * The concrete implementation of the overestimate of the splitting function,
0052    * \f$P_{\rm over}\f$.
0053    * @param z   The energy fraction.
0054    * @param ids The PDG codes for the particles in the splitting.
0055    */
0056   virtual double overestimateP(const double z, const IdList & ids) const;
0057 
0058   /**
0059    * The concrete implementation of the
0060    * the ratio of the splitting function to the overestimate, i.e.
0061    * \f$P(z,t)/P_{\rm over}(z)\f$.
0062    * @param z   The energy fraction.
0063    * @param t   The scale.
0064    * @param ids The PDG codes for the particles in the splitting.
0065    * @param mass Whether or not to include the mass dependent terms
0066    * @param rho The spin density matrix
0067    */
0068   virtual double ratioP(const double z, const Energy2 t, const IdList & ids,
0069             const bool mass, const RhoDMatrix & rho) const;
0070 
0071   /**
0072    * The concrete implementation of the indefinite integral of the
0073    * overestimated splitting function, \f$P_{\rm over}\f$.
0074    * @param z   The energy fraction.
0075    * @param ids The PDG codes for the particles in the splitting.
0076    * @param PDFfactor Which additional factor to include for the PDF
0077    *                  0 is no additional factor,
0078    *                  1 is \f$1/z\f$, 2 is \f$1/(1-z)\f$ and 3 is \f$1/z/(1-z)\f$
0079    */
0080   virtual double integOverP(const double z, const IdList & ids,
0081                 unsigned int PDFfactor=0) const;
0082 
0083   /**
0084    * The concrete implementation of the inverse of the indefinite integral.
0085    * @param r Value of the splitting function to be inverted
0086    * @param ids The PDG codes for the particles in the splitting.
0087    * @param PDFfactor Which additional factor to include for the PDF
0088    *                  0 is no additional factor,
0089    *                  1 is \f$1/z\f$, 2 is \f$1/(1-z)\f$ and 3 is \f$1/z/(1-z)\f$
0090    */
0091   virtual double invIntegOverP(const double r, const IdList & ids,
0092                    unsigned int PDFfactor=0) const;
0093   //@}
0094 
0095   /**
0096    * Method to calculate the azimuthal angle
0097    * @param z The energy fraction
0098    * @param t The scale \f$t=2p_j\cdot p_k\f$.
0099    * @param ids The PDG codes for the particles in the splitting.
0100    * @param The azimuthal angle, \f$\phi\f$.
0101    * @return The weight
0102    */
0103   virtual vector<pair<int,Complex> >
0104   generatePhiForward(const double z, const Energy2 t, const IdList & ids,
0105           const RhoDMatrix &);
0106 
0107   /**
0108    * Method to calculate the azimuthal angle for backward evolution
0109    * @param z The energy fraction
0110    * @param t The scale \f$t=2p_j\cdot p_k\f$.
0111    * @param ids The PDG codes for the particles in the splitting.
0112    * @param The azimuthal angle, \f$\phi\f$.
0113    * @return The weight
0114    */
0115   virtual vector<pair<int,Complex> >
0116   generatePhiBackward(const double z, const Energy2 t, const IdList & ids,
0117               const RhoDMatrix &);
0118 
0119   /**
0120    * Calculate the matrix element for the splitting
0121    * @param z The energy fraction
0122    * @param t The scale \f$t=2p_j\cdot p_k\f$.
0123    * @param ids The PDG codes for the particles in the splitting.
0124    * @param The azimuthal angle, \f$\phi\f$.
0125    */
0126   virtual DecayMEPtr matrixElement(const double z, const Energy2 t,
0127                    const IdList & ids, const double phi, bool timeLike);
0128 
0129 protected:
0130 
0131   /**
0132    *   Get the couplings
0133    */
0134   void getCouplings(double & g, const IdList & ids) const;
0135 
0136 public:
0137 
0138   /** @name Functions used by the persistent I/O system. */
0139   //@{
0140   /**
0141    * Function used to write out object persistently.
0142    * @param os the persistent output stream written to.
0143    */
0144   void persistentOutput(PersistentOStream & os) const;
0145 
0146   /**
0147    * Function used to read in object persistently.
0148    * @param is the persistent input stream read from.
0149    * @param version the version number of the object when written.
0150    */
0151   void persistentInput(PersistentIStream & is, int version);
0152   //@}
0153 
0154   /**
0155    * The standard Init function used to initialize the interfaces.
0156    * Called exactly once for each class by the class description system
0157    * before the main function starts or
0158    * when this class is dynamically loaded.
0159    */
0160   static void Init();
0161 
0162 protected:
0163 
0164   /** @name Clone Methods. */
0165   //@{
0166   /**
0167    * Make a simple clone of this object.
0168    * @return a pointer to the new object.
0169    */
0170   virtual IBPtr clone() const;
0171 
0172   /** Make a clone of this object, possibly modifying the cloned object
0173    * to make it sane.
0174    * @return a pointer to the new object.
0175    */
0176   virtual IBPtr fullclone() const;
0177   //@}
0178 
0179 protected:
0180 
0181   /** @name Standard Interfaced functions. */
0182   //@{
0183   /**
0184    * Initialize this object after the setup phase before saving an
0185    * EventGenerator to disk.
0186    * @throws InitException if object could not be initialized properly.
0187    */
0188   virtual void doinit();
0189   //@}
0190 
0191 private:
0192 
0193   /**
0194    * The assignment operator is private and must never be called.
0195    * In fact, it should not even be implemented.
0196    */
0197   OneOneZeroEWSplitFn & operator=(const OneOneZeroEWSplitFn &) = delete;
0198 
0199 private:
0200 
0201   /**
0202    *  W -> W H couplings
0203    */
0204   double gWWH_;
0205 
0206   /**
0207    *  Z0 -> Z0 H couplings
0208    */
0209   double gZZH_;
0210 
0211   /**
0212    * Pointer to the SM object.
0213    */
0214   tcHwSMPtr _theSM;
0215 };
0216 
0217 }
0218 
0219 #endif /* Herwig_OneOneZeroEWSplitFn_H */