Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 //
0003 // NoRemnants.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_NoRemnants_H
0010 #define ThePEG_NoRemnants_H
0011 // This is the declaration of the NoRemnants class.
0012 
0013 #include "ThePEG/PDF/RemnantHandler.h"
0014 // #include "NoRemnants.fh"
0015 // #include "NoRemnants.xh"
0016 
0017 namespace ThePEG {
0018 
0019 /**
0020  * NoRemnants inherits from RemnantHandler but can only handle
0021  * particles without sub-structure with the parton density given by a
0022  * NoPDF object and will never give any remnants.
0023  *
0024  *
0025  * @see RemnantHandler
0026  * @see NoPDF
0027  * 
0028  */
0029 class NoRemnants: public RemnantHandler {
0030 
0031 public:
0032 
0033   /** @name Virtual functions mandated by the RemnantHandler base class. */
0034   //@{
0035   /**
0036    * Return true if this remnant handler can handle extracting all
0037    * specified partons. The NoRemnants will return false if any
0038    * partons are given.
0039    */
0040   virtual bool canHandle(tcPDPtr, const cPDVector & partons) const {
0041     return partons.empty();
0042   }
0043 
0044   /**
0045    * Generate Remnants. Will not generate remnants and will throw a
0046    * RemnantHandlerException if the extracted parton is not the
0047    * incomining particle with x=1.
0048    */
0049   virtual Lorentz5Momentum generate(PartonBinInstance & pb, const double * r,
0050                     Energy2 scale,
0051                     const LorentzMomentum & p,
0052                     bool fixedPartonMomentum = false) const;
0053 
0054   /**
0055    * Generate the momentum of the extracted parton with the \a parent
0056    * momentum given by the last argument. If the \a scale is negative,
0057    * it means that the doScale in the previous call to nDim() was
0058    * true, otherwise the given \a scale should be the virtuality of
0059    * the extracted parton. \a shat is the total invariant mass squared
0060    * of the hard sub-system produced by the extracted parton and the
0061    * primary parton entering from the other side. Generated quantities
0062    * which are not returned in the momentum may be saved in the
0063    * PartonBinInstance, \a pb, for later use. In particular, if the
0064    * nDim() random numbers, \a r, are not enough to generate with
0065    * weight one, the resulting weight should be stored with the
0066    * remnantWeight() method of the parton bin.
0067    */
0068   virtual Lorentz5Momentum generate(PartonBinInstance & pb, const double * r,
0069                     Energy2 scale, Energy2 shat,
0070                     const LorentzMomentum & parent,
0071                     bool fixedPartonMomentum = false) const;
0072   //@}
0073 
0074 public:
0075 
0076   /**
0077    * Standard Init function used to initialize the interface.
0078    */
0079   static void Init();
0080 
0081 protected:
0082 
0083   /** @name Clone Methods. */
0084   //@{
0085   /**
0086    * Make a simple clone of this object.
0087    * @return a pointer to the new object.
0088    */
0089   virtual IBPtr clone() const;
0090 
0091   /** Make a clone of this object, possibly modifying the cloned object
0092    * to make it sane.
0093    * @return a pointer to the new object.
0094    */
0095   virtual IBPtr fullclone() const;
0096   //@}
0097 
0098 private:
0099 
0100   /**
0101    * Describe a concrete class without persistent data.
0102    */
0103   static NoPIOClassDescription<NoRemnants> initNoRemnants;
0104 
0105   /**
0106    *  Private and non-existent assignment operator.
0107    */
0108   NoRemnants & operator=(const NoRemnants &) = delete;
0109 
0110 };
0111 
0112 /** @cond TRAITSPECIALIZATIONS */
0113 
0114 /** This template specialization informs ThePEG about the
0115  *  base classes of NoRemnants. */
0116 template <>
0117 struct BaseClassTrait<NoRemnants,1>: public ClassTraitsType {
0118   /** Typedef of the first base class of NoRemnants. */
0119   typedef RemnantHandler NthBase;
0120 };
0121 
0122 /** This template specialization informs ThePEG about the name of the
0123  *  NoRemnants class. */
0124 template <>
0125 struct ClassTraits<NoRemnants>: public ClassTraitsBase<NoRemnants> {
0126   /** Return a platform-independent class name */
0127   static string className() { return "ThePEG::NoRemnants"; }
0128 };
0129 
0130 /** @endcond */
0131 
0132 }
0133 
0134 #endif /* ThePEG_NoRemnants_H */