|
|
|||
File indexing completed on 2026-08-06 09:24:09
0001 // -*- C++ -*- 0002 #ifndef HERWIG_MEPP2VV_H 0003 #define HERWIG_MEPP2VV_H 0004 // 0005 // This is the declaration of the MEPP2VV class. 0006 // 0007 0008 #include "Herwig/MatrixElement/HwMEBase.h" 0009 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h" 0010 #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h" 0011 #include "Herwig/MatrixElement/ProductionMatrixElement.h" 0012 0013 namespace Herwig { 0014 0015 using namespace ThePEG; 0016 0017 /** 0018 * The MEPP2VV class implements the production of \f$W^+W^-\f$, 0019 * \f$W^\pm Z^0\f$ and \f$Z^0Z^o\f$ in hadron-hadron collisions. 0020 * 0021 * @see \ref MEPP2VVInterfaces "The interfaces" 0022 * defined for MEPP2VV. 0023 */ 0024 class MEPP2VV: public HwMEBase { 0025 0026 public: 0027 0028 /** 0029 * The default constructor. 0030 */ 0031 MEPP2VV(); 0032 0033 public: 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 * Return the process being run (WW/ZZ/WZ). 0065 */ 0066 virtual int process() const { return process_; } 0067 0068 /** 0069 * Add all possible diagrams with the add() function. 0070 */ 0071 virtual void getDiagrams() const; 0072 0073 /** 0074 * Get diagram selector. With the information previously supplied with the 0075 * setKinematics method, a derived class may optionally 0076 * override this method to weight the given diagrams with their 0077 * (although certainly not physical) relative probabilities. 0078 * @param dv the diagrams to be weighted. 0079 * @return a Selector relating the given diagrams to their weights. 0080 */ 0081 virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const; 0082 0083 /** 0084 * Return a Selector with possible colour geometries for the selected 0085 * diagram weighted by their relative probabilities. 0086 * @param diag the diagram chosen. 0087 * @return the possible colour geometries weighted by their 0088 * relative probabilities. 0089 */ 0090 virtual Selector<const ColourLines *> 0091 colourGeometries(tcDiagPtr diag) const; 0092 0093 /** 0094 * Used internally by generateKinematics, after calculating the 0095 * limits on cos(theta). 0096 */ 0097 virtual double getCosTheta(double cthmin, double cthmax, const double r); 0098 0099 /** 0100 * Construct the vertex of spin correlations. 0101 */ 0102 virtual void constructVertex(tSubProPtr); 0103 //@} 0104 0105 public: 0106 0107 /** @name Functions used by the persistent I/O system. */ 0108 //@{ 0109 /** 0110 * Function used to write out object persistently. 0111 * @param os the persistent output stream written to. 0112 */ 0113 void persistentOutput(PersistentOStream & os) const; 0114 0115 /** 0116 * Function used to read in object persistently. 0117 * @param is the persistent input stream read from. 0118 * @param version the version number of the object when written. 0119 */ 0120 void persistentInput(PersistentIStream & is, int version); 0121 //@} 0122 0123 /** 0124 * The standard Init function used to initialize the interfaces. 0125 * Called exactly once for each class by the class description system 0126 * before the main function starts or 0127 * when this class is dynamically loaded. 0128 */ 0129 static void Init(); 0130 0131 protected: 0132 0133 /** 0134 * Matrix element for \f$f\bar{f}\to W^+W^-\f$. 0135 * @param f1 Spinors for the incoming fermion 0136 * @param a1 Spinors for the incoming antifermion 0137 * @param v1 The first outgoing W polarization vectors 0138 * @param v2 The second outgoing W polarization vectors 0139 * @param me Whether or not to calculate the matrix element for spin correlations 0140 */ 0141 double WWME(vector<SpinorWaveFunction> & f1, 0142 vector<SpinorBarWaveFunction> & a1, 0143 vector<VectorWaveFunction> & v1, 0144 vector<VectorWaveFunction> & v2, 0145 bool me) const; 0146 0147 /** 0148 * Matrix element for \f$f\bar{f}\to W^\pm Z^0\f$. 0149 * @param f1 Spinors for the incoming fermion 0150 * @param a1 Spinors for the incoming antifermion 0151 * @param v1 The outgoing W polarization vectors 0152 * @param v2 The outgoing Z polarization vectors 0153 * @param me Whether or not to calculate the matrix element for spin correlations 0154 */ 0155 double WZME(vector<SpinorWaveFunction> & f1, 0156 vector<SpinorBarWaveFunction> & a1, 0157 vector<VectorWaveFunction> & v1, 0158 vector<VectorWaveFunction> & v2, 0159 bool me) const; 0160 0161 /** 0162 * Matrix element for \f$f\bar{f}\to Z^0Z^0\f$. 0163 * @param f1 Spinors for the incoming fermion 0164 * @param a1 Spinors for the incoming antifermion 0165 * @param v1 The first outgoing Z polarization vectors 0166 * @param v2 The second outgoing Z polarization vectors 0167 * @param me Whether or not to calculate the matrix element for spin correlations 0168 */ 0169 double ZZME(vector<SpinorWaveFunction> & f1, 0170 vector<SpinorBarWaveFunction> & a1, 0171 vector<VectorWaveFunction> & v1, 0172 vector<VectorWaveFunction> & v2, 0173 bool me) const; 0174 0175 protected: 0176 0177 /** @name Clone Methods. */ 0178 //@{ 0179 /** 0180 * Make a simple clone of this object. 0181 * @return a pointer to the new object. 0182 */ 0183 virtual IBPtr clone() const; 0184 0185 /** Make a clone of this object, possibly modifying the cloned object 0186 * to make it sane. 0187 * @return a pointer to the new object. 0188 */ 0189 virtual IBPtr fullclone() const; 0190 //@} 0191 0192 protected: 0193 0194 /** @name Standard Interfaced functions. */ 0195 //@{ 0196 /** 0197 * Initialize this object after the setup phase before saving an 0198 * EventGenerator to disk. 0199 * @throws InitException if object could not be initialized properly. 0200 */ 0201 virtual void doinit(); 0202 //@} 0203 0204 private: 0205 0206 /** 0207 * The assignment operator is private and must never be called. 0208 * In fact, it should not even be implemented. 0209 */ 0210 MEPP2VV & operator=(const MEPP2VV &) = delete; 0211 0212 private: 0213 0214 /** 0215 * Vertices 0216 */ 0217 //@{ 0218 /** 0219 * FFPVertex 0220 */ 0221 AbstractFFVVertexPtr FFPvertex_; 0222 0223 /** 0224 * FFWVertex 0225 */ 0226 AbstractFFVVertexPtr FFWvertex_; 0227 0228 /** 0229 * FFZVertex 0230 */ 0231 AbstractFFVVertexPtr FFZvertex_; 0232 0233 /** 0234 * WWW Vertex 0235 */ 0236 AbstractVVVVertexPtr WWWvertex_; 0237 //@} 0238 0239 /** 0240 * Processes 0241 */ 0242 unsigned int process_; 0243 0244 /** 0245 * Allowed flavours of the incoming quarks 0246 */ 0247 int maxflavour_; 0248 0249 /** 0250 * Treatment of the the boson masses 0251 */ 0252 unsigned int massOption_; 0253 0254 /** 0255 * The matrix element 0256 */ 0257 mutable ProductionMatrixElement me_; 0258 }; 0259 0260 } 0261 0262 #endif /* HERWIG_MEPP2VV_H */
| [ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
|
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
|