Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 //
0003 // WeakToHadronsDecayer.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_WeakToHadronsDecayer_H
0010 #define THEPEG_WeakToHadronsDecayer_H
0011 // This is the declaration of the WeakToHadronsDecayer class.
0012 
0013 #include "ThePEG/PDT/QuarksToHadronsDecayer.h"
0014 
0015 namespace ThePEG {
0016 
0017 /**
0018  * The WeakToHadronsDecayer class inherits from QuarksToHadronsDecayer
0019  * and can performs weak decays of taus and charmed and bottom
0020  * hadrons. The intermediate W can either decay leptonically in which
0021  * case standard V-A matrix element is used, or it can decay into
0022  * quarks in which case the conversion into quarks is performed as for
0023  * the QuarkToHadronsDecayer base class. In both cases the W decay
0024  * products should be specified first. The spectator system can either
0025  * be specified in terms of hadrons or in terms of quarks which will
0026  * be collapsed into a single hadron.
0027  *
0028  * @see \ref WeakToHadronsDecayerInterfaces "The interfaces"
0029  * defined for WeakToHadronsDecayer.
0030  */
0031 class WeakToHadronsDecayer: public QuarksToHadronsDecayer {
0032 
0033 public:
0034 
0035   /** @name Virtual functions required by the Decayer and
0036       QuarksToHadronsDecayer classes.
0037    */
0038   //@{
0039   /**
0040    * Check if this decayer can perfom the decay specified by the
0041    * given decay mode.
0042    * @param dm the DecayMode describing the decay.
0043    * @return true if this decayer can handle the given mode, otherwise false.
0044    */
0045   virtual bool accept(const DecayMode & dm) const;
0046 
0047   /**
0048    * Called by QuarksToHadronsDecayer::distribute() to reweight the
0049    * default flat phase spece. Can be overridden by sub-classes and
0050    * should return a number between 0 and 1. This version returns 1.
0051    */
0052   virtual double reweight(const Particle & parent,
0053               const PVector & children) const;
0054 
0055   /**
0056    * Produce \a Nh hadrons from the specified \a quarks. The last
0057    * quark is considered to be a spectator quark.
0058    */
0059   virtual PVector getHadrons(int Nh, tcPDVector quarks) const;
0060   //@}
0061 
0062 public:
0063 
0064 
0065   /** @name Functions used by the persistent I/O system. */
0066   //@{
0067   /**
0068    * Function used to write out object persistently.
0069    * @param os the persistent output stream written to.
0070    */
0071   void persistentOutput(PersistentOStream & os) const;
0072 
0073   /**
0074    * Function used to read in object persistently.
0075    * @param is the persistent input stream read from.
0076    * @param version the version number of the object when written.
0077    */
0078   void persistentInput(PersistentIStream & is, int version);
0079   //@}
0080 
0081   /**
0082    * Standard Init function used to initialize the interfaces.
0083    */
0084   static void Init();
0085 
0086 protected:
0087 
0088   /** @name Clone Methods. */
0089   //@{
0090   /**
0091    * Make a simple clone of this object.
0092    * @return a pointer to the new object.
0093    */
0094   virtual IBPtr clone() const;
0095 
0096   /** Make a clone of this object, possibly modifying the cloned object
0097    * to make it sane.
0098    * @return a pointer to the new object.
0099    */
0100   virtual IBPtr fullclone() const;
0101   //@}
0102 
0103 private:
0104 
0105   /**
0106    * Describe a concrete class with persistent data.
0107    */
0108   static ClassDescription<WeakToHadronsDecayer> initWeakToHadronsDecayer;
0109 
0110   /**
0111    * Private and non-existent assignment operator.
0112    */
0113   WeakToHadronsDecayer & operator=(const WeakToHadronsDecayer &) = delete;
0114 
0115 };
0116 
0117 }
0118 
0119 
0120 namespace ThePEG {
0121 
0122 /** @cond TRAITSPECIALIZATIONS */
0123 
0124 /** This template specialization informs ThePEG about the base classes
0125  *  of WeakToHadronsDecayer. */
0126 template <>
0127 struct BaseClassTrait<WeakToHadronsDecayer,1>: public ClassTraitsType {
0128   /** Typedef of the first base class of WeakToHadronsDecayer. */
0129   typedef QuarksToHadronsDecayer NthBase;
0130 };
0131 
0132 /** This template specialization informs ThePEG about the name of the
0133  *  WeakToHadronsDecayer class and the shared object where it is
0134  *  defined. */
0135 template <>
0136 struct ClassTraits<WeakToHadronsDecayer>
0137   : public ClassTraitsBase<WeakToHadronsDecayer> {
0138   /** Return a platform-independent class name */
0139   static string className() { return "ThePEG::WeakToHadronsDecayer"; }
0140   /** Return the name of the shared library be loaded to get access to
0141    *  the WeakToHadronsDecayer class and every other class it uses
0142    *  (except the base class). */
0143   static string library() { return "WeakToHadronsDecayer.so"; }
0144 };
0145 
0146 /** @endcond */
0147 
0148 }
0149 
0150 #endif /* THEPEG_WeakToHadronsDecayer_H */