|
|
|||
File indexing completed on 2026-08-06 09:24:21
0001 // -*- C++ -*- 0002 // 0003 // OneOffShellCalculator.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_OneOffShellCalculator_H 0010 #define HERWIG_OneOffShellCalculator_H 0011 // 0012 // This is the declaration of the OneOffShellCalculator class. 0013 // 0014 #include "GenericMassGenerator.h" 0015 #include "WidthCalculatorBase.h" 0016 #include "OneOffShellCalculator.fh" 0017 #include "Herwig/Utilities/GSLIntegrator.h" 0018 0019 0020 namespace Herwig { 0021 using namespace ThePEG; 0022 0023 struct OneOffShellIntegrand; 0024 0025 /** \ingroup PDT 0026 * 0027 * Use another <code>WidthCalculatorBase</code> object to integrate over the 0028 * mass of on of the external particles which can be off-shell for running 0029 * width calculations. 0030 * 0031 * @see WidthCalculatorBase 0032 * @see OneOffShellIntegrand 0033 * 0034 */ 0035 class OneOffShellCalculator: public WidthCalculatorBase { 0036 0037 public: 0038 0039 /** 0040 * The OneOffShellIntegrand is a friend to allow access to the members needed 0041 * for the integration without making the members public. 0042 */ 0043 friend struct OneOffShellIntegrand; 0044 0045 public: 0046 0047 /** 0048 * Constructor which should be used setting all the required members. 0049 * @param inloc The mass which is off-shell and to be integrated over. 0050 * @param inwidth Pointer to the WidthGeneratorBase object which calculates 0051 * the partial width for a given mass of the off-shell particle. 0052 * @param inmass Pointer to the GenericMassGenerator for the off-shell particle. 0053 * @param inmin The minimum mass for the off-shell particle. 0054 */ 0055 OneOffShellCalculator(int inloc,WidthCalculatorBasePtr inwidth, 0056 GenericMassGeneratorPtr inmass, 0057 Energy inmin) 0058 : _themass(inloc), _minmass(inmin),_onshellwidth(inwidth),_massptr(inmass) 0059 {} 0060 0061 /** 0062 * member to calculate the partial width. 0063 * @param scale The mass squared for the decaying particle. 0064 * @return The partial width. 0065 */ 0066 Energy partialWidth(Energy2 scale) const; 0067 0068 /** 0069 * Get the mass of one of the decay products. This must be 0070 * implemented in classes inheriting from this one. 0071 * @param imass The mass required. 0072 * @param mass The new value. 0073 * @return The mass required. 0074 */ 0075 void resetMass(int imass,Energy mass) { 0076 _onshellwidth->resetMass(imass,mass); 0077 } 0078 0079 /** 0080 * Get the mass of one of the decay products. This must be 0081 * implemented in classes inheriting from this one. 0082 * @param imass The mass required. 0083 * @return The mass required. 0084 */ 0085 Energy getMass(const int imass) const { 0086 return _onshellwidth->getMass(imass); 0087 } 0088 0089 /** 0090 * Get the masses of all bar the one specified. Used to get the limits 0091 * for integration. 0092 * @param imass The particle not needed 0093 * @return The sum of the other masses. 0094 */ 0095 Energy otherMass(const int imass) const { 0096 return _onshellwidth->otherMass(imass); 0097 } 0098 0099 protected: 0100 0101 /** 0102 * The integrand. 0103 * @param min The mass of the off-shell particle, 0104 * @return The differential rate. 0105 */ 0106 Energy dGamma(Energy min) const { 0107 _onshellwidth->resetMass(_themass,min); 0108 Energy wgt = (_onshellwidth->partialWidth(_scale)); 0109 wgt*=(_massptr->weight(min)); 0110 return wgt; 0111 } 0112 0113 private: 0114 0115 /** 0116 * Private and non-existent assignment operator. 0117 */ 0118 OneOffShellCalculator & operator=(const OneOffShellCalculator &) = delete; 0119 0120 private: 0121 0122 /** 0123 * which mass is offshell. 0124 */ 0125 int _themass; 0126 0127 /** 0128 * the minimum allowed mass. 0129 */ 0130 Energy _minmass; 0131 0132 /** 0133 * pointer to object calculating the on-shell width. 0134 */ 0135 WidthCalculatorBasePtr _onshellwidth; 0136 0137 /** 0138 * pointer to object calculating the mass of the particle. 0139 */ 0140 GenericMassGeneratorPtr _massptr; 0141 0142 /** 0143 * integrator 0144 */ 0145 GSLIntegrator _integrator; 0146 0147 /** 0148 * the mass squared of the decaying particle 0149 */ 0150 mutable Energy2 _scale; 0151 0152 }; 0153 0154 0155 /** \ingroup PDT 0156 * Class for the integrand of a matrix element where one of the outgoing 0157 * particles is off-shell.This class is used by the OneOffShellCalculator class 0158 * to perform the integral. 0159 * 0160 * @see OneOffShellCalculator 0161 */ 0162 struct OneOffShellIntegrand { 0163 0164 /** 0165 * Constructor. 0166 * @param in Pointer to the OneOffShellCalculator class this is doing the 0167 * integration for. 0168 * @param m2 The mass squared of the off-shell particle for the Jacobian 0169 * transform. 0170 * @param mw The mass times width of the off-shell particle for the Jacobian 0171 * transform. 0172 */ 0173 OneOffShellIntegrand(tcOneOffShellCalculatorPtr in,Energy2 m2,Energy2 mw) 0174 : _integrand(in),_mass2(m2),_mwidth(mw) 0175 {} 0176 0177 /** 0178 * return the value 0179 */ 0180 Energy operator ()(double x) const { 0181 return _integrand->dGamma(sqrt(_mass2+_mwidth*tan(x))); 0182 } 0183 /** Argument type for the GSLIntegrator */ 0184 typedef double ArgType; 0185 /** Return type for the GSLIntegrator */ 0186 typedef Energy ValType; 0187 0188 /** 0189 * pointer to the decay integrator 0190 */ 0191 tcOneOffShellCalculatorPtr _integrand; 0192 0193 /** 0194 * The mass squared for the off-shell particle for the Jacobian transform. 0195 */ 0196 Energy2 _mass2; 0197 0198 /** 0199 * The mass times width for the off-shell particle for the Jacobian transform. 0200 */ 0201 Energy2 _mwidth; 0202 }; 0203 } 0204 0205 #endif /* HERWIG_OneOffShellCalculator_H */
| [ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
|
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
|