Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 //
0003 // JetCuts.h is a part of ThePEG - Toolkit for HEP Event Generation
0004 // Copyright (C) 1999-2019 Leif Lonnblad
0005 // Copyright (C) 2009-2019 Simon Platzer
0006 //
0007 // ThePEG is licenced under version 3 of the GPL, see COPYING for details.
0008 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
0009 //
0010 #ifndef THEPEG_JetCuts_H
0011 #define THEPEG_JetCuts_H
0012 //
0013 // This is the declaration of the JetCuts class.
0014 //
0015 
0016 #include "ThePEG/Cuts/MultiCutBase.h"
0017 #include "ThePEG/PDT/MatcherBase.h"
0018 #include "ThePEG/Cuts/JetRegion.h"
0019 #include "ThePEG/Cuts/JetPairRegion.h"
0020 #include "ThePEG/Cuts/MultiJetRegion.h"
0021 
0022 namespace ThePEG {
0023 
0024 /**
0025  * JetCuts combines various JetRegion and JetPairRegion objects into a
0026  * cut object.
0027  *
0028  * @see JetRegion
0029  * @see JetPairRegion
0030  *
0031  * @see \ref JetCutsInterfaces "The interfaces"
0032  * defined for JetCuts.
0033  */
0034 class JetCuts: public MultiCutBase {
0035 
0036 public:
0037 
0038   /**
0039    * The default constructor.
0040    */
0041   JetCuts();
0042 
0043 public:
0044 
0045   /** @name Overridden virtual functions defined in the base class. */
0046   //@{
0047   /**
0048    * Return true if a set of outgoing particles with typea \a ptype
0049    * and corresponding momenta \a p passes the cuts.
0050    */
0051   virtual bool passCuts(tcCutsPtr parent, const tcPDVector & ptype,
0052             const vector<LorentzMomentum> & p) const;
0053   //@}
0054 
0055   /**
0056    * Describe the currently active cuts in the log file.
0057    */
0058   virtual void describe() const;
0059 
0060 public:
0061 
0062   /**
0063    * Return the matcher for unresolved partons.
0064    */
0065   Ptr<MatcherBase>::tptr unresolvedMatcher() const { return theUnresolvedMatcher; }
0066 
0067   /**
0068    * Return the jet regions to match.
0069    */
0070   const vector<Ptr<JetRegion>::ptr>& jetRegions() const { return theJetRegions; }
0071 
0072   /**
0073    * Return the jet veto regions to check.
0074    */
0075   const vector<Ptr<JetRegion>::ptr>& jetVetoRegions() const { return theJetVetoRegions; }
0076 
0077   /**
0078    * Return the jet pair regions to match.
0079    */
0080   const vector<Ptr<JetPairRegion>::ptr>& jetPairRegions() const { return theJetPairRegions; }
0081 
0082   /**
0083    * Return the multi jet regions to match.
0084    */
0085   const vector<Ptr<MultiJetRegion>::ptr>& multiJetRegions() const { return theMultiJetRegions; }
0086 
0087   /**
0088    * Enumerate the ordering to apply on jets
0089    */
0090   enum Orderings {
0091     orderPt = 1,
0092     orderY = 2
0093   };
0094 
0095   /**
0096    * Return the ordering
0097    */
0098   int ordering() const { return theOrdering; }
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    * A matcher for unresolved partons.
0147    */
0148   Ptr<MatcherBase>::ptr theUnresolvedMatcher;
0149 
0150   /**
0151    * The jet regions to match.
0152    */
0153   vector<Ptr<JetRegion>::ptr> theJetRegions;
0154 
0155   /**
0156    * The jet veto regions to check
0157    */
0158   vector<Ptr<JetRegion>::ptr> theJetVetoRegions;
0159 
0160   /**
0161    * The jet pair regions to match.
0162    */
0163   vector<Ptr<JetPairRegion>::ptr> theJetPairRegions;
0164 
0165   /**
0166    * The multi jet regions to match.
0167    */
0168   vector<Ptr<MultiJetRegion>::ptr> theMultiJetRegions;
0169 
0170   /**
0171    * Types of the ordering to apply on jets
0172    */
0173   int theOrdering;
0174 
0175 private:
0176 
0177   /**
0178    * The static object used to initialize the description of this class.
0179    * Indicates that this is a concrete class with persistent data.
0180    */
0181   static ClassDescription<JetCuts> initJetCuts;
0182 
0183   /**
0184    * The assignment operator is private and must never be called.
0185    * In fact, it should not even be implemented.
0186    */
0187   JetCuts & operator=(const JetCuts &) = delete;
0188 
0189 };
0190 
0191 }
0192 
0193 #include "ThePEG/Utilities/ClassTraits.h"
0194 
0195 namespace ThePEG {
0196 
0197 /** @cond TRAITSPECIALIZATIONS */
0198 
0199 /** This template specialization informs ThePEG about the
0200  *  base classes of JetCuts. */
0201 template <>
0202 struct BaseClassTrait<JetCuts,1> {
0203   /** Typedef of the first base class of JetCuts. */
0204   typedef MultiCutBase NthBase;
0205 };
0206 
0207 /** This template specialization informs ThePEG about the name of
0208  *  the JetCuts class and the shared object where it is defined. */
0209 template <>
0210 struct ClassTraits<JetCuts>
0211   : public ClassTraitsBase<JetCuts> {
0212   /** Return a platform-independent class name */
0213   static string className() { return "ThePEG::JetCuts"; }
0214   /** Return the name of the shared library be loaded to get
0215    *  access to the JetCuts class and every other class it uses
0216    *  (except the base class). */
0217   static string library() { return "JetCuts.so"; }
0218 };
0219 
0220 /** @endcond */
0221 
0222 }
0223 
0224 #endif /* THEPEG_JetCuts_H */