Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 //
0003 // MissingPtCut.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_MissingPtCut_H
0010 #define Herwig_MissingPtCut_H
0011 //
0012 // This is the declaration of the MissingPtCut class.
0013 //
0014 
0015 #include "ThePEG/Cuts/MultiCutBase.h"
0016 #include "ThePEG/PDT/MatcherBase.h"
0017 
0018 namespace Herwig {
0019 
0020 using namespace ThePEG;
0021 
0022 /**
0023  * \ingroup Matchbox
0024  * \author Christian Reuschle
0025  *
0026  * \brief MissingPtCut implements a cut on the total missing transverse momentum of a set of outgoing particles, i.e. for now the total transverse momentum of all outgoing neutrinos in an event.
0027  *
0028  * @see \ref MissingPtCutInterfaces "The interfaces"
0029  * defined for MissingPtCut.
0030  */
0031 class MissingPtCut: public MultiCutBase {
0032 
0033 public:
0034 
0035   /**
0036    * The default constructor.
0037    */
0038   MissingPtCut();
0039 
0040 public:
0041 
0042   /** @name Virtual functions to be overridden by sub-classes. */
0043   //@{
0044   /**
0045    * Return the minimum allowed value of the squared invariant mass of
0046    * a set of outgoing partons of the given types. Typically used to
0047    * cut off the tails of the mass of a resonance for efficiency.
0048    */
0049   virtual Energy2 minS(const tcPDVector) const { return ZERO; }
0050 
0051   /**
0052    * Return the maximum allowed value of the squared invariant mass of
0053    * a set of outgoing partons of the given types. Typically used to
0054    * cut off the tails of the mass of a resonance for efficiency.
0055    */
0056   virtual Energy2 maxS(const tcPDVector) const { return Constants::MaxEnergy2; }
0057 
0058   /**
0059    * Return true if a set of outgoing particles with type \a ptype
0060    * and corresponding momenta \a p passes the cuts.
0061    */
0062   virtual bool passCuts(tcCutsPtr parent, const tcPDVector & ptype,
0063             const vector<LorentzMomentum> & p) const;
0064 
0065   /**
0066    * Describe the currently active cuts in the log file.
0067    */
0068   virtual void describe() const;
0069 
0070   /**
0071    * Return the matcher for particles to cut on.
0072    */
0073   Ptr<MatcherBase>::tptr matcher() const { return theMatcher; }
0074   //@}
0075 
0076 public:
0077 
0078   /**
0079    * Return the PDG codes of those particles that cannot be detected
0080    */
0081   const vector<int>& invisibleParticles() const { return theInvisibleParticles; }
0082 
0083   /**
0084    * Command to insert the PDG code of a particle that cannot be detected
0085    */
0086   string doInvisibleParticles(string);
0087 
0088   /**
0089    * Return the minimum missing pt.
0090    */
0091   Energy ptMissMin() const { return thePtMissMin; }
0092 
0093   /**
0094    * Return the maximum missing pt.
0095    */
0096   Energy ptMissMax() const { return thePtMissMax; }
0097 
0098 public:
0099 
0100   /** @name Functions used by the persistent I/O system. */
0101   //@{
0102   /**
0103    * Function used to write out object persistently.
0104    * @param os the persistent output stream written to.
0105    */
0106   void persistentOutput(PersistentOStream & os) const;
0107 
0108   /**
0109    * Function used to read in object persistently.
0110    * @param is the persistent input stream read from.
0111    * @param version the version number of the object when written.
0112    */
0113   void persistentInput(PersistentIStream & is, int version);
0114   //@}
0115 
0116   /**
0117    * The standard Init function used to initialize the interfaces.
0118    * Called exactly once for each class by the class description system
0119    * before the main function starts or
0120    * when this class is dynamically loaded.
0121    */
0122   static void Init();
0123 
0124 protected:
0125 
0126   /** @name Clone Methods. */
0127   //@{
0128   /**
0129    * Make a simple clone of this object.
0130    * @return a pointer to the new object.
0131    */
0132   virtual IBPtr clone() const;
0133 
0134   /** Make a clone of this object, possibly modifying the cloned object
0135    * to make it sane.
0136    * @return a pointer to the new object.
0137    */
0138   virtual IBPtr fullclone() const;
0139   //@}
0140 
0141 
0142 // If needed, insert declarations of virtual function defined in the
0143 // InterfacedBase class here (using ThePEG-interfaced-decl in Emacs).
0144 
0145 
0146 private:
0147 
0148   /**
0149    * The PDG codes of those particles that cannot be detected
0150    */
0151   vector<int> theInvisibleParticles;
0152 
0153   /**
0154    * The minimum missing pt.
0155    */
0156   Energy thePtMissMin;
0157 
0158   /**
0159    * The maximum missing pt.
0160    */
0161   Energy thePtMissMax;
0162 
0163   /**
0164    * A matcher for particles to cut on.
0165    */
0166   Ptr<MatcherBase>::ptr theMatcher;
0167 
0168 private:
0169 
0170   /**
0171    * The assignment operator is private and must never be called.
0172    * In fact, it should not even be implemented.
0173    */
0174   MissingPtCut & operator=(const MissingPtCut &) = delete;
0175 
0176 };
0177 
0178 }
0179 
0180 #endif /* Herwig_MissingPtCut_H */