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