Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 //
0003 // ColourPairDecayer.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_ColourPairDecayer_H
0010 #define THEPEG_ColourPairDecayer_H
0011 // This is the declaration of the ColourPairDecayer class.
0012 
0013 #include "ThePEG/PDT/FlatDecayer.h"
0014 
0015 namespace ThePEG {
0016 
0017 /**
0018  * ColourPairDecayer inherits from the FlatDecayer class and performs
0019  * decays according to phase space into two or more particles, some of
0020  * which may be coloured. The coloured particles must come in pairs
0021  * and will be colour connected pair-wise.
0022  *
0023  * @see \ref ColourPairDecayerInterfaces "The interfaces"
0024  * defined for ColourPairDecayer.
0025  */
0026 class ColourPairDecayer: public FlatDecayer {
0027 
0028 public:
0029 
0030   /** @name Standard constructors and destructors. */
0031   //@{
0032   /**
0033    * Default constructor.
0034    */
0035   ColourPairDecayer() : doShower(true) {}
0036   //@}
0037 
0038 public:
0039 
0040   /** @name Virtual functions required by the Decayer and FlatDecayer classes.
0041    */
0042   //@{
0043   /**
0044    * Check if this decayer can perfom the decay specified by the
0045    * given decay mode.
0046    * @param dm the DecayMode describing the decay.
0047    * @return true if this decayer can handle the given mode, otherwise false.
0048    */
0049   virtual bool accept(const DecayMode & dm) const;
0050 
0051   /**
0052    * Produce children. Used by the FlatDecayer::decay() to produce
0053    * instances of the children given a DecayMode \a dm and the
0054    * decaying particle \a parent..
0055    */
0056   virtual ParticleVector getChildren(const DecayMode & dm,
0057                      const Particle & parent) const;
0058   //@}
0059 
0060   /**
0061    * Return true if the produced gluons and quarks should be
0062    * showered. The corresponding flag is set though the interface.
0063    */
0064   bool shower() const { return doShower; }
0065 
0066 public:
0067 
0068   /** @name Functions used by the persistent I/O system. */
0069   //@{
0070   /**
0071    * Function used to write out object persistently.
0072    * @param os the persistent output stream written to.
0073    */
0074   void persistentOutput(PersistentOStream & os) const;
0075 
0076   /**
0077    * Function used to read in object persistently.
0078    * @param is the persistent input stream read from.
0079    * @param version the version number of the object when written.
0080    */
0081   void persistentInput(PersistentIStream & is, int version);
0082   //@}
0083 
0084   /**
0085    * Standard Init function used to initialize the interfaces.
0086    */
0087   static void Init();
0088 
0089 protected:
0090 
0091   /** @name Clone Methods. */
0092   //@{
0093   /**
0094    * Make a simple clone of this object.
0095    * @return a pointer to the new object.
0096    */
0097   virtual IBPtr clone() const;
0098 
0099   /** Make a clone of this object, possibly modifying the cloned object
0100    * to make it sane.
0101    * @return a pointer to the new object.
0102    */
0103   virtual IBPtr fullclone() const;
0104   //@}
0105 
0106 private:
0107 
0108   /**
0109    * If true the produced gluons and quarks should be showered.
0110    */
0111   bool doShower;
0112 
0113 private:
0114 
0115   /**
0116    * Describe a concrete class with persistent data.
0117    */
0118   static ClassDescription<ColourPairDecayer> initColourPairDecayer;
0119 
0120   /**
0121    * Private and non-existent assignment operator.
0122    */
0123   ColourPairDecayer & operator=(const ColourPairDecayer &) = delete;
0124 
0125 };
0126 
0127 }
0128 
0129 
0130 namespace ThePEG {
0131 
0132 /** @cond TRAITSPECIALIZATIONS */
0133 
0134 /** This template specialization informs ThePEG about the base classes
0135  *  of ColourPairDecayer. */
0136 template <>
0137 struct BaseClassTrait<ColourPairDecayer,1>: public ClassTraitsType {
0138   /** Typedef of the first base class of ColourPairDecayer. */
0139   typedef FlatDecayer NthBase;
0140 };
0141 
0142 /** This template specialization informs ThePEG about the name of the
0143  *  ColourPairDecayer class and the shared object where it is
0144  *  defined. */
0145 template <>
0146 struct ClassTraits<ColourPairDecayer>
0147   : public ClassTraitsBase<ColourPairDecayer> {
0148   /** Return a platform-independent class name */
0149   static string className() { return "ThePEG::ColourPairDecayer"; }
0150   /** Return the name of the shared library be loaded to get access to
0151    *  the ColourPairDecayer class and every other class it uses
0152    *  (except the base class). */
0153   static string library() { return "ColourPairDecayer.so"; }
0154 
0155 };
0156 
0157 /** @endcond */
0158 
0159 }
0160 
0161 #endif /* THEPEG_ColourPairDecayer_H */