Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 //
0003 // SimpleDISCut.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_SimpleDISCut_H
0010 #define THEPEG_SimpleDISCut_H
0011 //
0012 // This is the declaration of the SimpleDISCut class.
0013 //
0014 
0015 #include "ThePEG/Cuts/TwoCutBase.h"
0016 
0017 namespace ThePEG {
0018 
0019 /**
0020  * SimpleDISCut inherits from TwoCutBase and omplements a simple
0021  * \f$Q^2\f$ cut on the a scattered lepton, either neutral or charged
0022  * current.
0023  *
0024  * @see \ref SimpleDISCutInterfaces "The interfaces"
0025  * defined for SimpleDISCut.
0026  */
0027 class SimpleDISCut: public TwoCutBase {
0028 
0029 public:
0030 
0031   /**
0032    * The default constructor.
0033    */
0034   SimpleDISCut()
0035     : theMinQ2(1.0*GeV2), theMaxQ2(100.0*GeV2),theMiny(0.0), theMaxy(1.0),
0036       theMinW2(100.0*GeV2), theMaxW2(1000000.0*GeV2), chargedCurrent(false) {}
0037 
0038 public:
0039 
0040   /** @name Overridden virtual functions defined in the base class. */
0041   //@{
0042   /**
0043    * Return the minimum allowed squared invariant mass of two outgoing
0044    * partons of type \a pi and \a pj. Returns zero.
0045    */
0046   virtual Energy2 minSij(tcPDPtr pi, tcPDPtr pj) const;
0047 
0048   /**
0049    * Return the minimum allowed value of the negative of the squared
0050    * invariant mass of an incoming parton of type \a pi and an
0051    * outgoing parton of type \a po. Return the minimum \f$Q^2\f$ if
0052    * the incoming and outgoing particles are matching leptons.
0053    */
0054   virtual Energy2 minTij(tcPDPtr pi, tcPDPtr po) const;
0055 
0056   /**
0057    * Return the minimum allowed value of \f$\Delta
0058    * R_{ij}=\sqrt{\Delta\eta_{ij}^2+\Delta\phi_{ij}^2}\f$ of two
0059    * outgoing partons of type \a pi and \a pj. Returns zero.
0060    */
0061   virtual double minDeltaR(tcPDPtr pi, tcPDPtr pj) const;
0062 
0063   /**
0064    * Return the minimum allowed value of the longitudinally invariant
0065    * \f$k_\perp\f$-algorithms distance measure. This is defined as
0066    * \f$\min(p_{\perp i}, p_{\perp
0067    * j})\sqrt{\Delta\eta_{ij}^2+\Delta\phi_{ij}^2}\f$ for two outgoing
0068    * partons, or simply \f$p_{\perp i}\f$ or \f$p_{\perp j}\f$ for a
0069    * single outgoing parton. Returns 0 if both partons are incoming. A
0070    * null pointer indicates an incoming parton, hence the type of the
0071    * incoming parton is irrelevant. Returns zero.
0072    */
0073   virtual Energy minKTClus(tcPDPtr pi, tcPDPtr pj) const;
0074 
0075   /**
0076    * Return the minimum allowed value of the Durham
0077    * \f$k_\perp\f$-algorithms distance measure. This is defined as
0078    * \f$2\min(E_j^2, E_j^2)(1-\cos\theta_{ij})/\hat{s}\f$ for two
0079    * outgoing partons. Returns zero.
0080    */
0081   virtual double minDurham(tcPDPtr pi, tcPDPtr pj) const;
0082 
0083   /**
0084    * Return true if a pair of particles with type \a pitype and \a
0085    * pjtype and momenta \a pi and \a pj respectively passes the
0086    * cuts. \a inci and \a inj indicates if the corresponding particles
0087    * are incoming.
0088    */
0089   virtual bool passCuts(tcCutsPtr parent, tcPDPtr pitype, tcPDPtr pjtype,
0090             LorentzMomentum pi, LorentzMomentum pj,
0091             bool inci = false, bool incj = false) const;
0092   //@}
0093 
0094   /**
0095    * Describe the currently active cuts in the log file.
0096    */
0097   virtual void describe() const;
0098 
0099 protected:
0100 
0101   /**
0102    * Check that the types of the incoming and outgoing particle types
0103    * matches a DIS event.
0104    */
0105   bool check(long idi, long ido) const;
0106 
0107 public:
0108 
0109   /** @name Functions used by the persistent I/O system. */
0110   //@{
0111   /**
0112    * Function used to write out object persistently.
0113    * @param os the persistent output stream written to.
0114    */
0115   void persistentOutput(PersistentOStream & os) const;
0116 
0117   /**
0118    * Function used to read in object persistently.
0119    * @param is the persistent input stream read from.
0120    * @param version the version number of the object when written.
0121    */
0122   void persistentInput(PersistentIStream & is, int version);
0123   //@}
0124 
0125   /**
0126    * The standard Init function used to initialize the interfaces.
0127    * Called exactly once for each class by the class description system
0128    * before the main function starts or
0129    * when this class is dynamically loaded.
0130    */
0131   static void Init();
0132 
0133 protected:
0134 
0135   /** @name Clone Methods. */
0136   //@{
0137   /**
0138    * Make a simple clone of this object.
0139    * @return a pointer to the new object.
0140    */
0141   virtual IBPtr clone() const;
0142 
0143   /** Make a clone of this object, possibly modifying the cloned object
0144    * to make it sane.
0145    * @return a pointer to the new object.
0146    */
0147   virtual IBPtr fullclone() const;
0148   //@}
0149 
0150 private:
0151 
0152   /**
0153    * Helper function used by the interface.
0154    */
0155   double maxMiny() const;
0156 
0157   /**
0158    * Helper function used by the interface.
0159    */
0160   double minMaxy() const;
0161 
0162   /**
0163    * Helper function used by the interface.
0164    */
0165   Energy2 maxMinQ2() const;
0166 
0167   /**
0168    * Helper function used by the interface.
0169    */
0170   Energy2 minMaxQ2() const;
0171 
0172   /**
0173    * Helper function used by the interface.
0174    */
0175   Energy2 maxMinW2() const;
0176 
0177   /**
0178    * Helper function used by the interface.
0179    */
0180   Energy2 minMaxW2() const;
0181 
0182 private:
0183 
0184   /**
0185    * The minimum \f$Q^2\f$.
0186    */
0187   Energy2 theMinQ2;
0188 
0189   /**
0190    * The maximum \f$Q^2\f$. This is only applied as a post-cut.
0191    */
0192   Energy2 theMaxQ2;
0193 
0194   /**
0195    * The minimum \f$y\f$.
0196    */
0197   double theMiny;
0198 
0199   /**
0200    * The maximum \f$y\f$. This is only applied as a post-cut.
0201    */
0202   double theMaxy;
0203 
0204 
0205 
0206   /**
0207    * The minimum \f$W^2\f$. This is only applied as a post-cut.
0208    */
0209   Energy2 theMinW2;
0210 
0211   /**
0212    * The maximum \f$W^2\f$. This is only applied as a post-cut.
0213    */
0214   Energy2 theMaxW2;
0215 
0216   /**
0217    * If true the cut is applied to charged current events, otherwise
0218    * it is applied to neutral current events.
0219    */
0220   bool chargedCurrent;
0221 
0222 private:
0223 
0224   /**
0225    * The static object used to initialize the description of this class.
0226    * Indicates that this is a concrete class with persistent data.
0227    */
0228   static ClassDescription<SimpleDISCut> initSimpleDISCut;
0229 
0230   /**
0231    * The assignment operator is private and must never be called.
0232    * In fact, it should not even be implemented.
0233    */
0234   SimpleDISCut & operator=(const SimpleDISCut &) = delete;
0235 
0236 };
0237 
0238 }
0239 
0240 #include "ThePEG/Utilities/ClassTraits.h"
0241 
0242 namespace ThePEG {
0243 
0244 /** @cond TRAITSPECIALIZATIONS */
0245 
0246 /** This template specialization informs ThePEG about the
0247  *  base classes of SimpleDISCut. */
0248 template <>
0249 struct BaseClassTrait<SimpleDISCut,1> {
0250   /** Typedef of the first base class of SimpleDISCut. */
0251   typedef TwoCutBase NthBase;
0252 };
0253 
0254 /** This template specialization informs ThePEG about the name of
0255  *  the SimpleDISCut class and the shared object where it is defined. */
0256 template <>
0257 struct ClassTraits<SimpleDISCut>
0258   : public ClassTraitsBase<SimpleDISCut> {
0259   /** Return a platform-independent class name */
0260   static string className() { return "ThePEG::SimpleDISCut"; }
0261   /** Return the name of the shared library be loaded to get
0262    *  access to the SimpleDISCut class and every other class it uses
0263    *  (except the base class). */
0264   static string library() { return "SimpleDISCut.so"; }
0265 };
0266 
0267 /** @endcond */
0268 
0269 }
0270 
0271 #endif /* THEPEG_SimpleDISCut_H */