Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 //
0003 // ClusterDecayer.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_ClusterDecayer_H
0010 #define HERWIG_ClusterDecayer_H
0011 
0012 #include <ThePEG/Interface/Interfaced.h>
0013 #include <ThePEG/EventRecord/Step.h>
0014 #include "CluHadConfig.h"
0015 #include "HadronSelector.h"
0016 #include "ClusterDecayer.fh"
0017 
0018 namespace Herwig {
0019 using namespace ThePEG;
0020 
0021 /** \ingroup Hadronization
0022  *  \class ClusterDecayer
0023  *  \brief This class decays the "normal" clusters
0024  *  \author Philip Stephens
0025  *  \author Alberto Ribon
0026  *
0027  *  This class decays the "normal" clusters, e.g. ones that are not heavy
0028  *  enough for fission, and not too light to decay into one hadron.
0029  *
0030  *  This class is directs the production of hadrons via 2-body cluster decays.
0031  *  The selection of the hadron flavours is given by Herwig::HadronSelector.
0032  *
0033  *  @see HadronSelector
0034  * @see \ref ClusterDecayerInterfaces "The interfaces"
0035  * defined for ClusterDecayer.
0036  */
0037 class ClusterDecayer: public Interfaced {
0038 
0039 public:
0040 
0041   /** @name Standard constructors and destructors. */
0042   //@{
0043   /**
0044    * Default constructor.
0045    */
0046   ClusterDecayer();
0047   //@}
0048 
0049   /** Decays all remaining clusters into hadrons.
0050    * This routine decays the clusters that are left after
0051    * Herwig::ClusterFissioner::fission and
0052    * Herwig::LightClusterDecayer::decay have been called. These are all
0053    * the "normal" clusters which are not forced into hadrons by
0054    * the other functions.
0055    */
0056   void decay(const ClusterVector & clusters, tPVector & finalhadrons)
0057    ;
0058 
0059 public:
0060 
0061   /**
0062    * Standard ThePEG function for writing a persistent stream.
0063    */
0064   void persistentOutput(PersistentOStream &) const;
0065 
0066   /**
0067    * Standard ThePEG function for reading from a persistent stream.
0068    */
0069   void persistentInput(PersistentIStream &, int);
0070 
0071   /**
0072    * Standard Init function used to initialize the interfaces.
0073    */
0074   static void Init();
0075 
0076 protected:
0077 
0078   /** @name Clone Methods. */
0079   //@{
0080   /**
0081    * Make a simple clone of this object.
0082    * @return a pointer to the new object.
0083    */
0084   virtual IBPtr clone() const;
0085 
0086   /** Make a clone of this object, possibly modifying the cloned object
0087    * to make it sane.
0088    * @return a pointer to the new object.
0089    */
0090   virtual IBPtr fullclone() const;
0091   //@}
0092 
0093 private:
0094 
0095   /**
0096    * Private and non-existent assignment operator.
0097    */
0098   ClusterDecayer & operator=(const ClusterDecayer &) = delete;
0099 
0100 public:
0101 
0102   /** Decays the cluster into two hadrons.
0103    *
0104    *  This routine is used to take a given cluster and decay it into
0105    *  two hadrons which are returned. If one of the constituents is from
0106    *  the perturbative regime then the direction of the perturbative parton
0107    *  is remembered and the decay is preferentially in that direction. The
0108    *  direction of the decay is given by
0109    *  \f[ \cos \theta = 1 + S \log r_1 \f]
0110    *  where \f$ S \f$ is a parameter of the model and \f$ r_1 \f$ is a random
0111    *  number [0,1].
0112    */
0113   pair<PPtr,PPtr> decayIntoTwoHadrons(tClusterPtr ptr);
0114 
0115 private:
0116 
0117   /** Compute the positions of the new hadrons based on the clusters position.
0118    *
0119    *  This method calculates the positions of the children hadrons by a
0120    *  call to ThePEG::RandomGenerator::rndGaussTwoNumbers with width inversely
0121    *  proportional to the cluster mass, around the parent cluster position.
0122    */
0123   void calculatePositions( const Lorentz5Momentum &, const LorentzPoint &,
0124                const Lorentz5Momentum &, const Lorentz5Momentum &,
0125                LorentzPoint &, LorentzPoint &) const;
0126 
0127   /**
0128    * Pointer to a Herwig::HadronSelector for choosing decay types
0129    */
0130   Ptr<HadronSelector>::pointer _hadronsSelector;
0131 
0132   //@{
0133   /**
0134    * Whether a cluster decays along the perturbative parton direction.
0135    */
0136   bool _clDirLight;
0137   bool _clDirBottom;
0138   bool _clDirCharm;
0139   bool _clDirExotic;
0140 
0141    /**
0142    * The S parameter from decayIntoTwoHadrons
0143    */
0144   double _clSmrLight;
0145   double _clSmrBottom;
0146   double _clSmrCharm;
0147   double _clSmrExotic;
0148   //@}
0149 
0150   /**
0151    * Whether or not the hadrons produced should be on-shell
0152    * or generated used the MassGenerator
0153    */
0154   bool _onshell;
0155 
0156   /**
0157    * Number of tries to generate the masses of the decay products
0158    */
0159   unsigned int _masstry;
0160 
0161 
0162 };
0163 
0164 
0165 }
0166 
0167 #endif /* HERWIG_ClusterDecayer_H */