Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 //
0003 // HeavyDecayer.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_HeavyDecayer_H
0010 #define HERWIG_HeavyDecayer_H
0011 // This is the declaration of the HeavyDecayer class.
0012 
0013 #include "PartonicDecayerBase.h"
0014 
0015 namespace Herwig {
0016 
0017 using namespace ThePEG;
0018 
0019 /** \ingroup Decay
0020  *
0021  *  This class is designed for the partonic decay of a bottom or charm mesons
0022  *  and baryons and is intended to be the same as that in HERWIG6.4. 
0023  *  Only four body partonic decays are supported.
0024  *
0025  *  Two types of matrix element are supported for this decay
0026  *
0027  *  - MECode=0   flat phase space
0028  *  - MECode=100 V-A matrix element for the heavy quark decay in the spectator model.
0029  *
0030  * The class decays a particle based on the DecayMode given.
0031  * The basic idea is that the heavy parton in the heavy meson will decay
0032  * weakly while the other parton will be more or less unchanged. This produces
0033  * 4 partons, the spectator plus the result of the weak decay. The W then
0034  * decays again into two more partons,
0035  * e.g. a decay of \f$B^0\to d,\bar{c},\bar{d}, u \f$.
0036  *
0037  *    \f$\bar{b}\to\bar{c}\f$ (colour connected to spectator)
0038  *   and \f$W^+\to\bar{d}u\f$  (the W decay products are colour connected)
0039  *
0040  * The resulting partons then need to be hadronized and decayed again.
0041  *
0042  * @see QuarkoniumDecayer
0043  * @see Hw64Decayer
0044  * @see Decayer
0045  * 
0046  */
0047 class HeavyDecayer: public PartonicDecayerBase {
0048 
0049 public:
0050 
0051   /**
0052    * Default constructor
0053    */
0054   HeavyDecayer();
0055 
0056   /**
0057    * Check if this decayer can perfom the decay for a particular mode
0058    * @param parent The decaying particle
0059    * @param children The decay products
0060    * @return true If this decayer can handle the given mode, otherwise false.
0061    */
0062   virtual bool accept(tcPDPtr parent, const tPDVector & children) const;
0063   
0064   /**
0065    *  Perform the decay of the particle to the specified decay products
0066    * @param parent The decaying particle
0067    * @param children The decay products
0068    * @return a ParticleVector containing the decay products.
0069    */
0070   virtual ParticleVector decay(const Particle & parent,
0071                    const tPDVector & children) const;
0072 
0073   /**
0074    * Output the setup information for the particle database
0075    * @param os The stream to output the information to
0076    * @param header Whether or not to output the information for MySQL
0077    */
0078   virtual void dataBaseOutput(ofstream & os,bool header) const;
0079 
0080 public:
0081 
0082   /**
0083    * Standard Init function used to initialize the interface.
0084    */
0085   static void Init();
0086 
0087   /** @name Functions used by the persistent I/O system. */
0088   //@{
0089   /**
0090    * Function used to write out object persistently.
0091    * @param os the persistent output stream written to.
0092    */
0093   void persistentOutput(PersistentOStream & os) const;
0094 
0095   /**   * Function used to read in object persistently.
0096    * @param is the persistent input stream read from.
0097    * @param version the version number of the object when written.
0098    */
0099   void persistentInput(PersistentIStream & is, int version);
0100   //@}
0101 
0102   /** @name Clone Methods. */
0103   //@{
0104   /**
0105    * Make a simple clone of this object.
0106    * @return a pointer to the new object.
0107    */
0108   virtual IBPtr clone() const;
0109 
0110   /** Make a clone of this object, possibly modifying the cloned object
0111    * to make it sane.
0112    * @return a pointer to the new object.
0113    */
0114   virtual IBPtr fullclone() const;
0115   //@}
0116 
0117 private:
0118 
0119   /**
0120    * Weighting of phase space for V-A matrix elements
0121    */
0122   static double VAWt(Energy2, Energy2, Energy2, InvEnergy4);
0123 
0124 private:
0125 
0126   /**
0127    *  Private and non-existent assignment operator.
0128    */
0129   const HeavyDecayer & operator=(const HeavyDecayer &) = delete;
0130 
0131 private:
0132 
0133   /**
0134    *  The code for the matrix element being used.
0135    */
0136   int MECode;
0137 };
0138 
0139 }
0140 
0141 #endif /* HERWIG_HeavyDecayer_H */