Back to home page

EIC code displayed by LXR

 
 

    


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

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