|
|
|||
File indexing completed on 2026-08-06 09:24:02
0001 // -*- C++ -*- 0002 // 0003 // SMHiggsFermionsDecayer.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_SMHiggsFermionsDecayer_H 0010 #define HERWIG_SMHiggsFermionsDecayer_H 0011 // 0012 // This is the declaration of the SMHiggsFermionsDecayer class. 0013 // 0014 0015 #include "Herwig/Decay/PerturbativeDecayer.h" 0016 #include "ThePEG/Helicity/Vertex/AbstractFFSVertex.h" 0017 #include "Herwig/Decay/PhaseSpaceMode.h" 0018 0019 namespace Herwig { 0020 using namespace ThePEG; 0021 0022 /** 0023 * The SMHiggsFermionsDecayer class is designed to decay the Standard Model Higgs 0024 * to the Standard Model fermions. 0025 * 0026 * @see PerturbativeDecayer 0027 */ 0028 class SMHiggsFermionsDecayer: public PerturbativeDecayer { 0029 0030 public: 0031 0032 /** 0033 * The default constructor. 0034 */ 0035 SMHiggsFermionsDecayer(); 0036 0037 /** 0038 * Which of the possible decays is required 0039 */ 0040 virtual int modeNumber(bool & , tcPDPtr , const tPDVector & ) const {return -1;} 0041 0042 /** 0043 * Check if this decayer can perfom the decay for a particular mode. 0044 * Uses the modeNumber member but can be overridden 0045 * @param parent The decaying particle 0046 * @param children The decay products 0047 */ 0048 virtual bool accept(tcPDPtr parent, const tPDVector & children) const; 0049 0050 /** 0051 * For a given decay mode and a given particle instance, perform the 0052 * decay and return the decay products. As this is the base class this 0053 * is not implemented. 0054 * @return The vector of particles produced in the decay. 0055 */ 0056 virtual ParticleVector decay(const Particle & parent,const tPDVector & children) const; 0057 0058 /** 0059 * Return the matrix element squared for a given mode and phase-space channel. 0060 * @param ichan The channel we are calculating the matrix element for. 0061 * @param part The decaying Particle. 0062 * @param outgoing The particles produced in the decay 0063 * @param momenta The momenta of the particles produced in the decay 0064 * @param meopt Option for the calculation of the matrix element 0065 * @return The matrix element squared for the phase-space configuration. 0066 */ 0067 double me2(const int ichan,const Particle & part, 0068 const tPDVector & outgoing, 0069 const vector<Lorentz5Momentum> & momenta, 0070 MEOption meopt) const; 0071 0072 /** 0073 * Construct the SpinInfos for the particles produced in the decay 0074 */ 0075 virtual void constructSpinInfo(const Particle & part, 0076 ParticleVector outgoing) const; 0077 0078 /** 0079 * Output the setup information for the particle database 0080 * @param os The stream to output the information to 0081 * @param header Whether or not to output the information for MySQL 0082 */ 0083 virtual void dataBaseOutput(ofstream & os,bool header) const; 0084 /** 0085 * Has a POWHEG style correction 0086 */ 0087 virtual POWHEGType hasPOWHEGCorrection() {return FSR;} 0088 0089 /** 0090 * Calculate matrix element ratio R/B 0091 */ 0092 virtual double matrixElementRatio(const Particle & inpart, const ParticleVector & decay2, 0093 const ParticleVector & decay3, MEOption meopt, 0094 ShowerInteraction inter); 0095 0096 public: 0097 0098 /** @name Functions used by the persistent I/O system. */ 0099 //@{ 0100 /** 0101 * Function used to write out object persistently. 0102 * @param os the persistent output stream written to. 0103 */ 0104 void persistentOutput(PersistentOStream & os) const; 0105 0106 /** 0107 * Function used to read in object persistently. 0108 * @param is the persistent input stream read from. 0109 * @param version the version number of the object when written. 0110 */ 0111 void persistentInput(PersistentIStream & is, int version); 0112 //@} 0113 0114 /** 0115 * The standard Init function used to initialize the interfaces. 0116 * Called exactly once for each class by the class description system 0117 * before the main function starts or 0118 * when this class is dynamically loaded. 0119 */ 0120 static void Init(); 0121 0122 protected: 0123 0124 /** @name Clone Methods. */ 0125 //@{ 0126 /** 0127 * Make a simple clone of this object. 0128 * @return a pointer to the new object. 0129 */ 0130 virtual IBPtr clone() const {return new_ptr(*this);} 0131 0132 /** Make a clone of this object, possibly modifying the cloned object 0133 * to make it sane. 0134 * @return a pointer to the new object. 0135 */ 0136 virtual IBPtr fullclone() const {return new_ptr(*this);} 0137 //@} 0138 0139 protected: 0140 0141 /** 0142 * Calcluate the Kallen function 0143 */ 0144 double calculateLambda(double x, double y, double z) const; 0145 0146 /** 0147 * Dipole subtraction term 0148 */ 0149 InvEnergy2 dipoleSubtractionTerm(double x1, double x2) const; 0150 0151 /** 0152 * Real emission term 0153 */ 0154 InvEnergy2 calculateRealEmission(double x1, double x2) const; 0155 0156 /** 0157 * Virtual term 0158 */ 0159 double calculateVirtualTerm() const; 0160 0161 /** 0162 * Non-singlet term 0163 */ 0164 double calculateNonSingletTerm(double beta, double L) const; 0165 0166 protected: 0167 0168 /** @name Standard Interfaced functions. */ 0169 //@{ 0170 /** 0171 * Initialize this object after the setup phase before saving an 0172 * EventGenerator to disk. 0173 * @throws InitException if object could not be initialized properly. 0174 */ 0175 virtual void doinit(); 0176 0177 /** 0178 * Initialize this object. Called in the run phase just before 0179 * a run begins. 0180 */ 0181 virtual void doinitrun(); 0182 //@} 0183 0184 private: 0185 0186 /** 0187 * The assignment operator is private and must never be called. 0188 * In fact, it should not even be implemented. 0189 */ 0190 SMHiggsFermionsDecayer & operator=(const SMHiggsFermionsDecayer &) = delete; 0191 0192 private: 0193 0194 /** 0195 * Pointer to the Higgs vertex 0196 */ 0197 AbstractFFSVertexPtr _hvertex; 0198 0199 /** 0200 * maximum weights for the different decay modes 0201 */ 0202 vector<double> _maxwgt; 0203 0204 /** 0205 * Spin density matrix 0206 */ 0207 mutable RhoDMatrix _rho; 0208 0209 /** 0210 * Scalar wavefunction 0211 */ 0212 mutable ScalarWaveFunction _swave; 0213 0214 /** 0215 * Spinor wavefunction 0216 */ 0217 mutable vector<SpinorWaveFunction> _wave; 0218 0219 /** 0220 * Barred spinor wavefunction 0221 */ 0222 mutable vector<SpinorBarWaveFunction> _wavebar; 0223 private: 0224 0225 /** 0226 * The colour factor 0227 */ 0228 double CF_; 0229 0230 /** 0231 * The Higgs mass 0232 */ 0233 mutable Energy mHiggs_; 0234 0235 /** 0236 * The reduced mass 0237 */ 0238 mutable double mu_; 0239 0240 /** 0241 * The square of the reduced mass 0242 */ 0243 mutable double mu2_; 0244 0245 /** 0246 * The strong coupling 0247 */ 0248 mutable double aS_; 0249 0250 /** 0251 * Stuff for the POWHEG correction 0252 */ 0253 //@{ 0254 /** 0255 * The ParticleData objects for the fermions 0256 */ 0257 vector<tcPDPtr> partons_; 0258 0259 /** 0260 * The fermion momenta 0261 */ 0262 vector<Lorentz5Momentum> quark_; 0263 0264 /** 0265 * The momentum of the radiated gauge boson 0266 */ 0267 Lorentz5Momentum gauge_; 0268 0269 /** 0270 * The Higgs boson 0271 */ 0272 PPtr higgs_; 0273 0274 /** 0275 * Higgs mass squared 0276 */ 0277 Energy2 mh2_; 0278 //@} 0279 0280 /** 0281 * LO or NLO ? 0282 */ 0283 bool NLO_; 0284 }; 0285 0286 } 0287 0288 #endif /* HERWIG_SMHiggsFermionsDecayer_H */
| [ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
|
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
|