Back to home page

EIC code displayed by LXR

 
 

    


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

0001   // -*- C++ -*-
0002   //
0003   // CMWHalfHalfOneSplitFn.h is a part of Herwig - A multi-purpose Monte Carlo event generator
0004   // Copyright (C) 2002-2019 The Herwig Collaboration
0005   //
0006   // Herwig is licenced under version 3 of the GPL, see COPYING for details.
0007   // Please respect the MCnet academic guidelines, see GUIDELINES for details.
0008   //
0009 #ifndef HERWIG_CMWHalfHalfOneSplitFn_H
0010 #define HERWIG_CMWHalfHalfOneSplitFn_H
0011   //
0012   // This is the declaration of the CMWHalfHalfOneSplitFn class.
0013   //
0014 
0015 #include "HalfHalfOneSplitFn.h"
0016 #include "Herwig/Shower/ShowerAlpha.h"
0017 
0018 
0019 namespace Herwig {
0020   
0021   using namespace ThePEG;
0022   
0023   /** \ingroup Shower
0024    *
0025    * This class provides the concrete implementation
0026    * of the CMW enhanced expressions for the
0027    * splitting function for \f$\frac12\to q\frac12 1\f$.
0028    *
0029    * The kernel uses the same overestimate as the
0030    * corresponding HalfHalfOneSplitFn and thus only needs to
0031    * implement the spitting function and ratio to the overestimate.
0032    *
0033    * TODO: For a more efficient sampling one needs can rewrite the
0034    *       overestimation to contain the alpha_max*Kgmax factors.
0035    *
0036    * @see \ref CMWHalfHalfOneSplitFnInterfaces "The interfaces"
0037    * defined for CMWHalfHalfOneSplitFn.
0038    */
0039   class CMWHalfHalfOneSplitFn: public HalfHalfOneSplitFn {
0040     
0041   public:
0042     
0043     /**
0044      *   Methods to return the splitting function.
0045      */
0046       //@{
0047     /**
0048      *  Very similar to HalfHalfOneSplitFn.
0049      *  Here the kernel only contains the soft part multiplied by the 
0050      *  alphas/2pi * Kg from 
0051      *  Nucl.Phys. B349 (1991) 635-654
0052      *
0053      */
0054     virtual double P(const double z, const Energy2 t, const IdList & ids,
0055                      const bool mass, const RhoDMatrix & rho) const;
0056     
0057     /**
0058      *  Very similar to HalfHalfOneSplitFn.
0059      *  Since we use only the 1/1-z part for overestimating the kernel 
0060      *  in the first place we can keep the same overestimation related functions
0061      *  for the CMW kernels.
0062      */
0063     virtual double ratioP(const double z, const Energy2 t, const IdList & ids,
0064                           const bool mass, const RhoDMatrix & rho) const;
0065     
0066     /**
0067      * Return the correction term from:
0068      * Nucl.Phys. B349 (1991) 635-654
0069      */
0070     double Kg(Energy2 )const{
0071         //TODO: Should be t-dependent
0072       int Nf=5;//alpha_->Nf(t)
0073       return (3.*(67./18.-1./6.*sqr(Constants::pi))-5./9.*Nf);
0074     }
0075     
0076     //@}
0077     
0078     
0079   public:
0080     
0081     /** @name Functions used by the persistent I/O system. */
0082       //@{
0083     /**
0084      * Function used to write out object persistently.
0085      * @param os the persistent output stream written to.
0086      */
0087     void persistentOutput(PersistentOStream & os) const;
0088     
0089     /**
0090      * Function used to read in object persistently.
0091      * @param is the persistent input stream read from.
0092      * @param version the version number of the object when written.
0093      */
0094     void persistentInput(PersistentIStream & is, int version);
0095       //@}
0096     
0097     /**
0098      * The standard Init function used to initialize the interfaces.
0099      * Called exactly once for each class by the class description system
0100      * before the main function starts or
0101      * when this class is dynamically loaded.
0102      */
0103     static void Init();
0104     
0105   protected:
0106     
0107     /** @name Standard Interfaced functions. */
0108       //@{
0109     /**
0110      * Initialize this object after the setup phase before saving an
0111      * EventGenerator to disk.
0112      * @throws InitException if object could not be initialized properly.
0113      */
0114     virtual void doinit(){
0115       HalfHalfOneSplitFn::doinit();
0116     };
0117       //@}
0118     
0119     
0120   private:
0121     
0122       // Pointer to the alpha_s object in use.
0123     ShowerAlphaPtr alpha_;
0124       // Provide information if the kernel is used for initial state.
0125       // as the pt definition contains an additional factor of z.
0126     bool isIS_=false;
0127     
0128   protected:
0129     
0130     /** @name Clone Methods. */
0131       //@{
0132     /**
0133      * Make a simple clone of this object.
0134      * @return a pointer to the new object.
0135      */
0136     virtual IBPtr clone() const {return new_ptr(*this);}
0137     
0138     /** Make a clone of this object, possibly modifying the cloned object
0139      * to make it sane.
0140      * @return a pointer to the new object.
0141      */
0142     virtual IBPtr fullclone() const {return new_ptr(*this);}
0143       //@}
0144     
0145   private:
0146     
0147     /**
0148      * The assignment operator is private and must never be called.
0149      * In fact, it should not even be implemented.
0150      */
0151     CMWHalfHalfOneSplitFn & operator=(const CMWHalfHalfOneSplitFn &) = delete;
0152     
0153     
0154   };
0155   
0156 }
0157 
0158 #endif /* HERWIG_CMWHalfHalfOneSplitFn_H */