|
|
|||
File indexing completed on 2026-08-06 09:24:09
0001 // -*- C++ -*- 0002 #ifndef HERWIG_MEPP2QQHiggs_H 0003 #define HERWIG_MEPP2QQHiggs_H 0004 // 0005 // This is the declaration of the MEPP2QQHiggs class. 0006 // 0007 0008 #include "Herwig/MatrixElement/HwMEBase.h" 0009 #include "Herwig/MatrixElement/ProductionMatrixElement.h" 0010 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h" 0011 #include "ThePEG/Helicity/Vertex/AbstractFFSVertex.h" 0012 #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h" 0013 #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h" 0014 #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" 0015 #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" 0016 #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" 0017 #include "Herwig/PDT/GenericMassGenerator.h" 0018 0019 namespace Herwig { 0020 0021 using namespace ThePEG; 0022 0023 /** 0024 * The MEPP2QQHiggs class implements the matrix elements for 0025 * \f$gg\to Q \bar Q h^0\f$ and \f$q\bar q\to Q \bar Q h^0\f$. 0026 * 0027 * @see \ref MEPP2QQHiggsInterfaces "The interfaces" 0028 * defined for MEPP2QQHiggs. 0029 */ 0030 class MEPP2QQHiggs: public HwMEBase { 0031 0032 public: 0033 0034 /** @name Standard constructors and destructors. */ 0035 //@{ 0036 /** 0037 * The default constructor. 0038 */ 0039 MEPP2QQHiggs(); 0040 //@} 0041 0042 public: 0043 0044 /** @name Virtual functions required by the MEBase class. */ 0045 //@{ 0046 /** 0047 * Return the order in \f$\alpha_S\f$ in which this matrix 0048 * element is given. 0049 */ 0050 virtual unsigned int orderInAlphaS() const; 0051 0052 /** 0053 * Return the order in \f$\alpha_{EW}\f$ in which this matrix 0054 * element is given. 0055 */ 0056 virtual unsigned int orderInAlphaEW() const; 0057 0058 /** 0059 * The matrix element for the kinematical configuration 0060 * previously provided by the last call to setKinematics(), suitably 0061 * scaled by sHat() to give a dimension-less number. 0062 * @return the matrix element scaled with sHat() to give a 0063 * dimensionless number. 0064 */ 0065 virtual double me2() const; 0066 0067 /** 0068 * Return the scale associated with the last set phase space point. 0069 */ 0070 virtual Energy2 scale() const; 0071 0072 /** 0073 * Set the typed and momenta of the incoming and outgoing partons to 0074 * be used in subsequent calls to me() and colourGeometries() 0075 * according to the associated XComb object. If the function is 0076 * overridden in a sub class the new function must call the base 0077 * class one first. 0078 */ 0079 virtual void setKinematics(); 0080 0081 /** 0082 * The number of internal degrees of freedom used in the matrix 0083 * element. 0084 */ 0085 virtual int nDim() const; 0086 0087 /** 0088 * Generate internal degrees of freedom given nDim() uniform 0089 * random numbers in the interval \f$ ]0,1[ \f$. To help the phase space 0090 * generator, the dSigHatDR should be a smooth function of these 0091 * numbers, although this is not strictly necessary. 0092 * @param r a pointer to the first of nDim() consecutive random numbers. 0093 * @return true if the generation succeeded, otherwise false. 0094 */ 0095 virtual bool generateKinematics(const double * r); 0096 0097 /** 0098 * Return the matrix element squared differential in the variables 0099 * given by the last call to generateKinematics(). 0100 */ 0101 virtual CrossSection dSigHatDR() const; 0102 0103 /** 0104 * Add all possible diagrams with the add() function. 0105 */ 0106 virtual void getDiagrams() const; 0107 0108 /** 0109 * Get diagram selector. With the information previously supplied with the 0110 * setKinematics method, a derived class may optionally 0111 * override this method to weight the given diagrams with their 0112 * (although certainly not physical) relative probabilities. 0113 * @param dv the diagrams to be weighted. 0114 * @return a Selector relating the given diagrams to their weights. 0115 */ 0116 virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const; 0117 0118 /** 0119 * Return a Selector with possible colour geometries for the selected 0120 * diagram weighted by their relative probabilities. 0121 * @param diag the diagram chosen. 0122 * @return the possible colour geometries weighted by their 0123 * relative probabilities. 0124 */ 0125 virtual Selector<const ColourLines *> 0126 colourGeometries(tcDiagPtr diag) const; 0127 0128 /** 0129 * Construct the vertex of spin correlations. 0130 */ 0131 virtual void constructVertex(tSubProPtr); 0132 //@} 0133 0134 protected: 0135 0136 /** 0137 * Members to calculate the matrix elements 0138 */ 0139 //@{ 0140 /** 0141 * Matrix element for \f$gg\to Q\bar{Q}h^0\f$ 0142 * @param g1 The wavefunctions for the first incoming gluon 0143 * @param g2 The wavefunctions for the second incoming gluon 0144 * @param q The wavefunction for the outgoing quark 0145 * @param qbar The wavefunction for the outgoing antiquark 0146 * @param h The wavefunction for the outgoing Higgs boson 0147 * @param flow The colour flow 0148 */ 0149 double ggME(vector<VectorWaveFunction> &g1,vector<VectorWaveFunction> &g2, 0150 vector<SpinorBarWaveFunction> & q,vector<SpinorWaveFunction> & qbar, 0151 ScalarWaveFunction & h, 0152 unsigned int flow) const; 0153 0154 /** 0155 * Matrix element for \f$q\bar{q}\to Q\bar{Q}h^0\f$ 0156 * @param q1 The wavefunction for the incoming quark 0157 * @param q2 The wavefunction for the incoming antiquark 0158 * @param q3 The wavefunction for the outgoing quark 0159 * @param q4 The wavefunction for the outgoing antiquark 0160 * @param h The wavefunction for the outgoing Higgs boson 0161 * @param flow The colour flow 0162 */ 0163 double qqME(vector<SpinorWaveFunction> & q1, 0164 vector<SpinorBarWaveFunction> & q2, 0165 vector<SpinorBarWaveFunction> & q3, 0166 vector<SpinorWaveFunction> & q4, 0167 ScalarWaveFunction & h, 0168 unsigned int flow) const; 0169 //@} 0170 0171 public: 0172 0173 /** @name Functions used by the persistent I/O system. */ 0174 //@{ 0175 /** 0176 * Function used to write out object persistently. 0177 * @param os the persistent output stream written to. 0178 */ 0179 void persistentOutput(PersistentOStream & os) const; 0180 0181 /** 0182 * Function used to read in object persistently. 0183 * @param is the persistent input stream read from. 0184 * @param version the version number of the object when written. 0185 */ 0186 void persistentInput(PersistentIStream & is, int version); 0187 //@} 0188 0189 /** 0190 * The standard Init function used to initialize the interfaces. 0191 * Called exactly once for each class by the class description system 0192 * before the main function starts or 0193 * when this class is dynamically loaded. 0194 */ 0195 static void Init(); 0196 0197 protected: 0198 0199 /** @name Clone Methods. */ 0200 //@{ 0201 /** 0202 * Make a simple clone of this object. 0203 * @return a pointer to the new object. 0204 */ 0205 virtual IBPtr clone() const; 0206 0207 /** Make a clone of this object, possibly modifying the cloned object 0208 * to make it sane. 0209 * @return a pointer to the new object. 0210 */ 0211 virtual IBPtr fullclone() const; 0212 //@} 0213 0214 protected: 0215 0216 /** @name Standard Interfaced functions. */ 0217 //@{ 0218 /** 0219 * Initialize this object after the setup phase before saving an 0220 * EventGenerator to disk. 0221 * @throws InitException if object could not be initialized properly. 0222 */ 0223 virtual void doinit(); 0224 //@} 0225 0226 private: 0227 0228 /** 0229 * The assignment operator is private and must never be called. 0230 * In fact, it should not even be implemented. 0231 */ 0232 MEPP2QQHiggs & operator=(const MEPP2QQHiggs &) = delete; 0233 0234 private: 0235 0236 /** 0237 * Switches to control the subprocess 0238 */ 0239 //@{ 0240 /** 0241 * Quark Flavour 0242 */ 0243 unsigned int quarkFlavour_; 0244 0245 /** 0246 * Processes to include 0247 */ 0248 unsigned int process_; 0249 //@} 0250 0251 /** 0252 * Switches etc for the Higgs mass generation 0253 */ 0254 //@{ 0255 /** 0256 * Defines the Higgs resonance shape 0257 */ 0258 unsigned int shapeOpt_; 0259 0260 /** 0261 * On-shell mass for the higgs 0262 */ 0263 Energy mh_; 0264 0265 /** 0266 * On-shell width for the higgs 0267 */ 0268 Energy wh_; 0269 0270 /** 0271 * The mass generator for the Higgs 0272 */ 0273 GenericMassGeneratorPtr hmass_; 0274 //@} 0275 0276 /** 0277 * Vertices needed to compute the diagrams 0278 */ 0279 //@{ 0280 /** 0281 * \f$ggg\f$ vertex 0282 */ 0283 AbstractVVVVertexPtr GGGVertex_; 0284 0285 /** 0286 * \f$q\bar{q}g\f$ vertex 0287 */ 0288 AbstractFFVVertexPtr QQGVertex_; 0289 0290 /** 0291 * \f$q\bar q h^0\f$ vertex 0292 */ 0293 AbstractFFSVertexPtr QQHVertex_; 0294 //@} 0295 0296 0297 /** 0298 * ParticleData objects of the particles 0299 */ 0300 //@{ 0301 /** 0302 * The gluon 0303 */ 0304 PDPtr gluon_; 0305 0306 /** 0307 * The Higgs boson 0308 */ 0309 PDPtr higgs_; 0310 0311 /** 0312 * the quarks 0313 */ 0314 vector<PDPtr> quark_; 0315 0316 /** 0317 * the antiquarks 0318 */ 0319 vector<PDPtr> antiquark_; 0320 //@} 0321 0322 /** 0323 * Parameters for the phase-space generation 0324 */ 0325 //@{ 0326 /** 0327 * Power for the phase-space mapping 0328 */ 0329 double alpha_; 0330 //@} 0331 0332 /** 0333 * Colour flow 0334 */ 0335 mutable unsigned int flow_; 0336 0337 /** 0338 * Diagram 0339 */ 0340 mutable unsigned int diagram_; 0341 0342 /** 0343 * Matrix element 0344 */ 0345 mutable ProductionMatrixElement me_; 0346 }; 0347 0348 } 0349 0350 #endif /* HERWIG_MEPP2QQHiggs_H */
| [ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
|
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
|