|
|
|||
File indexing completed on 2026-08-06 09:24:09
0001 // -*- C++ -*- 0002 // 0003 // MEqq2gZ2ff.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_MEqq2gZ2ff_H 0010 #define HERWIG_MEqq2gZ2ff_H 0011 // 0012 // This is the declaration of the MEqq2gZ2ff class. 0013 // 0014 0015 #include "Herwig/MatrixElement/DrellYanBase.h" 0016 #include "Herwig/MatrixElement/ProductionMatrixElement.h" 0017 #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" 0018 #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" 0019 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.fh" 0020 0021 namespace Herwig { 0022 0023 using namespace ThePEG; 0024 using namespace ThePEG::Helicity; 0025 0026 /** 0027 * The MEqq2gZ2ff class implements the products of Standard Model 0028 * fermion antifermion pairs via the \f$Z^0\f$ resonance including 0029 * photon interference terms. 0030 * 0031 * @see \ref MEqq2gZ2ffInterfaces "The interfaces" 0032 * defined for MEqq2gZ2ff. 0033 */ 0034 class MEqq2gZ2ff: public DrellYanBase { 0035 0036 public: 0037 0038 /** 0039 * The default constructor. 0040 */ 0041 MEqq2gZ2ff(); 0042 0043 /** @name Virtual functions required by the MEBase class. */ 0044 //@{ 0045 /** 0046 * Return the order in \f$\alpha_S\f$ in which this matrix 0047 * element is given. 0048 */ 0049 virtual unsigned int orderInAlphaS() const; 0050 0051 /** 0052 * Return the order in \f$\alpha_{EW}\f$ in which this matrix 0053 * element is given. 0054 */ 0055 virtual unsigned int orderInAlphaEW() const; 0056 0057 /** 0058 * The matrix element for the kinematical configuration 0059 * previously provided by the last call to setKinematics(), suitably 0060 * scaled by sHat() to give a dimension-less number. 0061 * @return the matrix element scaled with sHat() to give a 0062 * dimensionless number. 0063 */ 0064 virtual double me2() const; 0065 0066 /** 0067 * Return the scale associated with the last set phase space point. 0068 */ 0069 virtual Energy2 scale() const; 0070 0071 /** 0072 * Add all possible diagrams with the add() function. 0073 */ 0074 virtual void getDiagrams() const; 0075 0076 /** 0077 * Get diagram selector. With the information previously supplied with the 0078 * setKinematics method, a derived class may optionally 0079 * override this method to weight the given diagrams with their 0080 * (although certainly not physical) relative probabilities. 0081 * @param dv the diagrams to be weighted. 0082 * @return a Selector relating the given diagrams to their weights. 0083 */ 0084 virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const; 0085 0086 /** 0087 * Return a Selector with possible colour geometries for the selected 0088 * diagram weighted by their relative probabilities. 0089 * @param diag the diagram chosen. 0090 * @return the possible colour geometries weighted by their 0091 * relative probabilities. 0092 */ 0093 virtual Selector<const ColourLines *> 0094 colourGeometries(tcDiagPtr diag) const; 0095 0096 /** 0097 * Construct the vertex of spin correlations. 0098 */ 0099 virtual void constructVertex(tSubProPtr); 0100 //@} 0101 0102 0103 public: 0104 0105 /** @name Functions used by the persistent I/O system. */ 0106 //@{ 0107 /** 0108 * Function used to write out object persistently. 0109 * @param os the persistent output stream written to. 0110 */ 0111 void persistentOutput(PersistentOStream & os) const; 0112 0113 /** 0114 * Function used to read in object persistently. 0115 * @param is the persistent input stream read from. 0116 * @param version the version number of the object when written. 0117 */ 0118 void persistentInput(PersistentIStream & is, int version); 0119 //@} 0120 0121 /** 0122 * The standard Init function used to initialize the interfaces. 0123 * Called exactly once for each class by the class description system 0124 * before the main function starts or 0125 * when this class is dynamically loaded. 0126 */ 0127 static void Init(); 0128 0129 protected: 0130 0131 /** 0132 * Matrix element for \f$q\bar{q}\to \gamma/Z \to f\bar{f}\f$. 0133 * @param fin Spinors for incoming quark 0134 * @param ain Spinors for incoming antiquark 0135 * @param fout Spinors for incoming quark 0136 * @param aout Spinors for incoming antiquark 0137 * @param me Whether or not to calculate the matrix element for spin correlations 0138 */ 0139 double qqbarME(vector<SpinorWaveFunction> & fin , 0140 vector<SpinorBarWaveFunction> & ain , 0141 vector<SpinorBarWaveFunction> & fout, 0142 vector<SpinorWaveFunction> & aout, 0143 bool me) const; 0144 0145 protected: 0146 0147 /** @name Clone Methods. */ 0148 //@{ 0149 /** 0150 * Make a simple clone of this object. 0151 * @return a pointer to the new object. 0152 */ 0153 virtual IBPtr clone() const { return new_ptr(*this); } 0154 0155 /** Make a clone of this object, possibly modifying the cloned object 0156 * to make it sane. 0157 * @return a pointer to the new object. 0158 */ 0159 virtual IBPtr fullclone() const { return new_ptr(*this); } 0160 //@} 0161 0162 protected: 0163 0164 /** @name Standard Interfaced functions. */ 0165 //@{ 0166 /** 0167 * Initialize this object after the setup phase before saving an 0168 * EventGenerator to disk. 0169 * @throws InitException if object could not be initialized properly. 0170 */ 0171 virtual void doinit(); 0172 //@} 0173 0174 private: 0175 0176 /** 0177 * The assignment operator is private and must never be called. 0178 * In fact, it should not even be implemented. 0179 */ 0180 MEqq2gZ2ff & operator=(const MEqq2gZ2ff &) = delete; 0181 0182 private: 0183 0184 /** 0185 * Pointer to the vertices for the helicity calculations 0186 */ 0187 //@{ 0188 /** 0189 * Pointer to the Z vertex 0190 */ 0191 AbstractFFVVertexPtr _theFFZVertex; 0192 0193 /** 0194 * Pointer to the photon vertex 0195 */ 0196 AbstractFFVVertexPtr _theFFPVertex; 0197 //@} 0198 0199 /** 0200 * Pointers to the intermediate resonances 0201 */ 0202 //@{ 0203 /** 0204 * Pointer to the Z ParticleData object 0205 */ 0206 tcPDPtr _z0; 0207 0208 /** 0209 * Pointer to the photon ParticleData object 0210 */ 0211 tcPDPtr _gamma; 0212 //@} 0213 0214 /** 0215 * Switches to control the particles in the hard process 0216 */ 0217 //@{ 0218 /** 0219 * Minimum allowed flavour for the incoming quarks 0220 */ 0221 int _minflavour; 0222 0223 /** 0224 * Maximum allowed flavour for the incoming quarks 0225 */ 0226 int _maxflavour; 0227 0228 /** 0229 * Whether to include both \f$Z^0\f$ and \f$\gamma\f$ or only one 0230 */ 0231 unsigned int _gammaZ; 0232 0233 /** 0234 * Which processes to include 0235 */ 0236 int _process; 0237 //@} 0238 0239 /** 0240 * Matrix element for spin correlations 0241 */ 0242 ProductionMatrixElement _me; 0243 0244 /** 0245 * Whether of not to construct the vertex for spin correlations 0246 */ 0247 bool spinCorrelations_; 0248 }; 0249 0250 } 0251 0252 #endif /* HERWIG_MEqq2gZ2ff_H */
| [ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
|
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
|