Back to home page

EIC code displayed by LXR

 
 

    


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

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