Back to home page

EIC code displayed by LXR

 
 

    


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

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