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