|
|
|||
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 */
| [ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
|
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
|