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