Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-08-06 09:38:20

0001 // -*- C++ -*-
0002 //
0003 // KTClus.h is a part of ThePEG - Toolkit for HEP Event Generation
0004 // Copyright (C) 1999-2019 Leif Lonnblad
0005 //
0006 // ThePEG 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 THEPEG_KTClus_H
0010 #define THEPEG_KTClus_H
0011 //
0012 // This is the declaration of the KTClus class.
0013 //
0014 
0015 #include "ThePEG/Cuts/TwoCutBase.h"
0016 
0017 namespace ThePEG {
0018 
0019 /**
0020  * This clas implements the cuts relevant for the \f$\Delta
0021  * R\f$-measure in the longitudinally invariant kt-algorithm. By
0022  * default the cut is only applied to coloured particles, but
0023  * optionally it may be applied to all particle types.
0024  *
0025  * @see \ref KTClusInterfaces "The interfaces"
0026  * defined for KTClus.
0027  */
0028 class KTClus: public TwoCutBase {
0029 
0030 public:
0031 
0032   /** @name Standard constructors and destructors. */
0033   //@{
0034   /**
0035    * The default constructor.
0036    */
0037   KTClus() : theCut(10.0*GeV), onlyJets(true) {}
0038   //@}
0039 
0040 public:
0041 
0042   /** @name Overridden virtual functions defined in the base class. */
0043   //@{
0044   /**
0045    * Return the minimum allowed value of the longitudinally invariant
0046    * \f$k_\perp\f$-algorithms distance measure. This is defined as
0047    * \f$\min(p_{\perp i}, p_{\perp
0048    * j})\sqrt{\Delta\eta_{ij}^2+\Delta\phi_{ij}^2}\f$ for two outgoing
0049    * partons, or simply \f$p_{\perp i}\f$ or \f$p_{\perp j}\f$ for a
0050    * single outgoing parton. Returns 0 if both partons are incoming. A
0051    * null pointer indicates an incoming parton, hence the type of the
0052    * incoming parton is irrelevant.
0053    */
0054   virtual Energy minKTClus(tcPDPtr pi, tcPDPtr pj) const;
0055 
0056   /**
0057    * Return the minimum allowed squared invariant mass of two outgoing
0058    * partons of type \a pi and \a pj. Returns zero.
0059    */
0060   virtual Energy2 minSij(tcPDPtr pi, tcPDPtr pj) const;
0061 
0062   /**
0063    * Return the minimum allowed value of the negative of the squared
0064    * invariant mass of an incoming parton of type \a pi and an
0065    * outgoing parton of type \a po. Returns zero.
0066    */
0067   virtual Energy2 minTij(tcPDPtr pi, tcPDPtr po) const;
0068 
0069   /**
0070    * Return the minimum allowed value of \f$\Delta
0071    * R_{ij}=\sqrt{\Delta\eta_{ij}^2+\Delta\phi_{ij}^2}\f$ of two
0072    * outgoing partons of type \a pi and \a pj. Returns zero.
0073    */
0074   virtual double minDeltaR(tcPDPtr pi, tcPDPtr pj) const;
0075 
0076   /**
0077    * Return the minimum allowed value of the Durham
0078    * \f$k_\perp\f$-algorithms distance measure. This is defined as
0079    * \f$2\min(E_j^2, E_j^2)(1-\cos\theta_{ij})/\hat{s}\f$ for two
0080    * outgoing partons. Returns zero.
0081    */
0082   virtual double minDurham(tcPDPtr pi, tcPDPtr pj) const;
0083 
0084   /**
0085    * Return true if a pair of particles with type \a pitype and \a
0086    * pjtype and momenta \a pi and \a pj respectively passes the
0087    * cuts. \a inci and \a inj indicates if the corresponding particles
0088    * are incoming.
0089    */
0090   virtual bool passCuts(tcCutsPtr parent, tcPDPtr pitype, tcPDPtr pjtype,
0091             LorentzMomentum pi, LorentzMomentum pj,
0092             bool inci = false, bool incj = false) const;
0093   //@}
0094 
0095   /**
0096    * Describe the currently active cuts in the log file.
0097    */
0098   virtual void describe() const;
0099 
0100 public:
0101 
0102   /** @name Functions used by the persistent I/O system. */
0103   //@{
0104   /**
0105    * Function used to write out object persistently.
0106    * @param os the persistent output stream written to.
0107    */
0108   void persistentOutput(PersistentOStream & os) const;
0109 
0110   /**
0111    * Function used to read in object persistently.
0112    * @param is the persistent input stream read from.
0113    * @param version the version number of the object when written.
0114    */
0115   void persistentInput(PersistentIStream & is, int version);
0116   //@}
0117 
0118   /**
0119    * The standard Init function used to initialize the interfaces.
0120    * Called exactly once for each class by the class description system
0121    * before the main function starts or
0122    * when this class is dynamically loaded.
0123    */
0124   static void Init();
0125 
0126 protected:
0127 
0128   /** @name Clone Methods. */
0129   //@{
0130   /**
0131    * Make a simple clone of this object.
0132    * @return a pointer to the new object.
0133    */
0134   virtual IBPtr clone() const;
0135 
0136   /** Make a clone of this object, possibly modifying the cloned object
0137    * to make it sane.
0138    * @return a pointer to the new object.
0139    */
0140   virtual IBPtr fullclone() const;
0141   //@}
0142 
0143 private:
0144 
0145   /**
0146    * The minimum allowed value of the longitudinally invariant
0147    * \f$k_\perp\f$-algorithms distance measure.
0148    */
0149   Energy theCut;
0150 
0151   /**
0152    * If true, only apply the cut to pairs of coloured particles.
0153    */
0154   bool onlyJets;
0155 
0156 private:
0157 
0158   /**
0159    * The static object used to initialize the description of this class.
0160    * Indicates that this is a concrete class with persistent data.
0161    */
0162   static ClassDescription<KTClus> initKTClus;
0163 
0164   /**
0165    * The assignment operator is private and must never be called.
0166    * In fact, it should not even be implemented.
0167    */
0168   KTClus & operator=(const KTClus &) = delete;
0169 
0170 };
0171 
0172 }
0173 
0174 #include "ThePEG/Utilities/ClassTraits.h"
0175 
0176 namespace ThePEG {
0177 
0178 /** @cond TRAITSPECIALIZATIONS */
0179 
0180 /** This template specialization informs ThePEG about the
0181  *  base classes of KTClus. */
0182 template <>
0183 struct BaseClassTrait<KTClus,1> {
0184   /** Typedef of the first base class of KTClus. */
0185   typedef TwoCutBase NthBase;
0186 };
0187 
0188 /** This template specialization informs ThePEG about the name of
0189  *  the KTClus class and the shared object where it is defined. */
0190 template <>
0191 struct ClassTraits<KTClus>
0192   : public ClassTraitsBase<KTClus> {
0193   /** Return a platform-independent class name */
0194   static string className() { return "ThePEG::KTClus"; }
0195   /** Return the name of the shared library be loaded to get
0196    *  access to the KTClus class and every other class it uses
0197    *  (except the base class). */
0198   static string library() { return "KTClus.so"; }
0199 };
0200 
0201 /** @endcond */
0202 
0203 }
0204 
0205 #endif /* THEPEG_KTClus_H */