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