|
|
|||
File indexing completed on 2026-08-06 09:24:08
0001 // -*- C++ -*- 0002 // 0003 // MEvv2vv.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_MEvv2vv_H 0010 #define HERWIG_MEvv2vv_H 0011 // 0012 // This is the declaration of the MEvv2vv class. 0013 // 0014 0015 #include "GeneralHardME.h" 0016 #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" 0017 #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h" 0018 #include "ThePEG/Helicity/Vertex/AbstractVVTVertex.h" 0019 #include "ThePEG/Helicity/Vertex/AbstractVVSVertex.h" 0020 #include "ThePEG/Helicity/Vertex/AbstractVVVVVertex.h" 0021 #include "Herwig/MatrixElement/ProductionMatrixElement.h" 0022 0023 namespace Herwig { 0024 using namespace ThePEG; 0025 using Helicity::VectorWaveFunction; 0026 0027 /** 0028 * This is the implementation of the matrix element for 0029 * \f$2\to 2\f$ massless vector-boson pair to vector-boson pair. It inherits from 0030 * GeneralHardME and implements the appropriate virtual member functions. 0031 * 0032 * @see \ref MEvv2vvInterfaces "The interfaces" 0033 * defined for MEvv2vv. 0034 */ 0035 class MEvv2vv: public GeneralHardME { 0036 0037 public: 0038 0039 /** 0040 * Typedef for VectorWaveFunction 0041 */ 0042 typedef vector<VectorWaveFunction> VBVector; 0043 0044 public: 0045 0046 /** @name Virtual functions required by the GeneralHardME class. */ 0047 //@{ 0048 /** 0049 * The matrix element for the kinematical configuration 0050 * previously provided by the last call to setKinematics(), suitably 0051 * scaled by sHat() to give a dimension-less number. 0052 * @return the matrix element scaled with sHat() to give a 0053 * dimensionless number. 0054 */ 0055 virtual double me2() const; 0056 //@} 0057 0058 /** 0059 * Construct the vertex information for the spin correlations 0060 * @param sub Pointer to the relevent SubProcess 0061 */ 0062 virtual void constructVertex(tSubProPtr sub); 0063 0064 private: 0065 0066 /** 0067 * Compute the matrix element for \f$V\, V\to V\, V\f$ 0068 * @param vin1 VectorWaveFunctions for first incoming particle 0069 * @param vin2 VectorWaveFunctions for second incoming particle 0070 * @param vout1 VectorWaveFunctions for first outgoing particle 0071 * @param mc Whether vout1 is massless or not 0072 * @param vout2 VectorWaveFunctions for outgoing particle 0073 * @param md Whether vout2 is massless or not 0074 * @param me2 colour averaged, spin summed ME 0075 * @param first Whether or not first call to decide if colour decomposition etc 0076 * should be calculated 0077 * @return ProductionMatrixElement containing results of 0078 * helicity calculations 0079 */ 0080 ProductionMatrixElement 0081 vv2vvHeME(VBVector & vin1, VBVector & vin2, 0082 VBVector & vout1, bool mc, VBVector & vout2, bool md, 0083 double & me2, bool first ) const; 0084 0085 protected: 0086 0087 /** 0088 * A debugging function to test the value of me2 against an 0089 * analytic function. 0090 * @param me2 The value of the \f$ |\bar{\mathcal{M}}|^2 \f$ 0091 */ 0092 virtual void debug(double me2) const; 0093 0094 public: 0095 0096 /** @name Functions used by the persistent I/O system. */ 0097 //@{ 0098 /** 0099 * Function used to write out object persistently. 0100 * @param os the persistent output stream written to. 0101 */ 0102 void persistentOutput(PersistentOStream & os) const; 0103 0104 /** 0105 * Function used to read in object persistently. 0106 * @param is the persistent input stream read from. 0107 * @param version the version number of the object when written. 0108 */ 0109 void persistentInput(PersistentIStream & is, int version); 0110 //@} 0111 0112 /** 0113 * The standard Init function used to initialize the interfaces. 0114 * Called exactly once for each class by the class description system 0115 * before the main function starts or 0116 * when this class is dynamically loaded. 0117 */ 0118 static void Init(); 0119 0120 protected: 0121 0122 /** @name Clone Methods. */ 0123 //@{ 0124 /** 0125 * Make a simple clone of this object. 0126 * @return a pointer to the new object. 0127 */ 0128 virtual IBPtr clone() const {return new_ptr(*this);} 0129 0130 /** Make a clone of this object, possibly modifying the cloned object 0131 * to make it sane. 0132 * @return a pointer to the new object. 0133 */ 0134 virtual IBPtr fullclone() const {return new_ptr(*this);} 0135 //@} 0136 0137 protected: 0138 0139 /** @name Standard Interfaced functions. */ 0140 //@{ 0141 /** 0142 * Initialize this object after the setup phase before saving an 0143 * EventGenerator to disk. 0144 * @throws InitException if object could not be initialized properly. 0145 */ 0146 virtual void doinit(); 0147 //@} 0148 0149 private: 0150 0151 /** 0152 * The assignment operator is private and must never be called. 0153 * In fact, it should not even be implemented. 0154 */ 0155 MEvv2vv & operator=(const MEvv2vv &) = delete; 0156 0157 private: 0158 0159 /** 0160 * Store the dynamically casted VVSVertex pointers 0161 */ 0162 vector<pair<AbstractVVSVertexPtr, AbstractVVSVertexPtr> > scalar_; 0163 0164 /** 0165 * Store the dynamically casted VVVVertex pointers 0166 */ 0167 vector<pair<AbstractVVVVertexPtr, AbstractVVVVertexPtr> > vector_; 0168 0169 /** 0170 * Store the dynamically casted VVTVertex pointers 0171 */ 0172 vector<pair<AbstractVVTVertexPtr, AbstractVVTVertexPtr> > tensor_; 0173 0174 /** 0175 * Store the dynamically casted VVVVVertex pointer 0176 */ 0177 vector<AbstractVVVVVertexPtr> four_; 0178 0179 /** 0180 * Four points for colour flows 0181 */ 0182 map<unsigned int,vector<pair<unsigned int,double> > > fourFlow_; 0183 0184 }; 0185 0186 } 0187 0188 #endif /* HERWIG_MEvv2vv_H */
| [ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
|
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
|