diff --git a/Helicity/Vertex/AbstractFFVTVertex.h b/Helicity/Vertex/AbstractFFVTVertex.h --- a/Helicity/Vertex/AbstractFFVTVertex.h +++ b/Helicity/Vertex/AbstractFFVTVertex.h @@ -1,154 +1,78 @@ // -*- C++ -*- #ifndef HELICITY_AbstractFFVTVertex_H #define HELICITY_AbstractFFVTVertex_H // // This is the declaration of the AbstractFFVTVertex class. // #include "VertexBase.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/TensorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" #include "AbstractFFVTVertex.fh" namespace ThePEG { namespace Helicity { /** * The AbstractFFVTVertex class is the base class for all * fermion-fermion-vector-tensor interactions in ThePEG. */ class AbstractFFVTVertex: public VertexBase { public: /** * Default constructor */ AbstractFFVTVertex() : VertexBase(VertexType::FFVT) {} /** * Members to calculate the helicity amplitude expressions for vertices * and off-shell particles. */ //@{ /** * Evalulate the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param sp1 The wavefunction for the ferimon. * @param sbar2 The wavefunction for the antifermion. * @param vec3 The wavefunction for the vector. * @param ten4 The wavefunction for the tensor. */ virtual Complex evaluate(Energy2 q2,const SpinorWaveFunction & sp1, const SpinorBarWaveFunction & sbar2, const VectorWaveFunction & vec3, const TensorWaveFunction & ten4) = 0; - - /** - * Evaluate the off-shell tensor coming from the vertex. - * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. - * @param iopt Option of the shape of the Breit-Wigner for the off-shell tensor. - * @param out The ParticleData pointer for the off-shell tensor. - * @param sp1 The wavefunction for the ferimon. - * @param sbar2 The wavefunction for the antifermion. - * @param vec3 The wavefunction for the vector. - * @param mass The mass of the off-shell particle if not taken from the ParticleData - * object - * @param width The width of the off-shell particle if not taken from the ParticleData - * object - */ - virtual TensorWaveFunction evaluate(Energy2 q2,int iopt, tcPDPtr out, - const SpinorWaveFunction & sp1, - const SpinorBarWaveFunction & sbar2, - const VectorWaveFunction & vec3, - complex mass=-GeV, complex width=-GeV) = 0; - - /** - * Evaluate the off-shell vector coming from the vertex. - * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. - * @param iopt Option of the shape of the Breit-Wigner for the off-shell vector. - * @param out The ParticleData pointer for the off-shell vector. - * @param sp1 The wavefunction for the ferimon. - * @param sbar2 The wavefunction for the antifermion. - * @param ten4 The wavefunction for the tensor. - * @param mass The mass of the off-shell particle if not taken from the ParticleData - * object - * @param width The width of the off-shell particle if not taken from the ParticleData - * object - */ - virtual VectorWaveFunction evaluate(Energy2 q2,int iopt, tcPDPtr out, - const SpinorWaveFunction & sp1, - const SpinorBarWaveFunction & sbar2, - const TensorWaveFunction & ten4, - complex mass=-GeV, complex width=-GeV) = 0; - - /** - * Evaluate the off-shell spinor coming from the vertex. - * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. - * @param iopt Option of the shape of the Breit-Wigner for the off-shell spinor. - * @param out The ParticleData pointer for the off-shell spinor. - * @param sp1 The wavefunction for the ferimon. - * @param vec3 The wavefunction for the vector. - * @param ten4 The wavefunction for the tensor. - * @param mass The mass of the off-shell particle if not taken from the ParticleData - * object - * @param width The width of the off-shell particle if not taken from the ParticleData - * object - */ - virtual SpinorWaveFunction evaluate(Energy2 q2,int iopt, tcPDPtr out, - const SpinorWaveFunction & sp1, - const VectorWaveFunction & vec3, - const TensorWaveFunction & ten4, - complex mass=-GeV, complex width=-GeV) = 0; - - /** - * Evaluate the off-shell barred spinor coming from the vertex. - * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. - * @param iopt Option of the shape of the Breit-Wigner for the off-shell barred spinor. - * @param out The ParticleData pointer for the off-shell barred spinor. - * @param sbar2 The wavefunction for the antifermion. - * @param vec3 The wavefunction for the vector. - * @param ten4 The wavefunction for the tensor. - * @param mass The mass of the off-shell particle if not taken from the ParticleData - * object - * @param width The width of the off-shell particle if not taken from the ParticleData - * object - */ - virtual SpinorBarWaveFunction evaluate(Energy2 q2,int iopt, tcPDPtr out, - const SpinorBarWaveFunction & sbar2, - const VectorWaveFunction & vec3, - const TensorWaveFunction & ten4, - complex mass=-GeV, complex width=-GeV) = 0; //@} public: /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); private: /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ AbstractFFVTVertex & operator=(const AbstractFFVTVertex &); }; } } namespace ThePEG { } #endif /* HELICITY_AbstractFFVTVertex_H */ diff --git a/Helicity/Vertex/Tensor/FFVTVertex.cc b/Helicity/Vertex/Tensor/FFVTVertex.cc --- a/Helicity/Vertex/Tensor/FFVTVertex.cc +++ b/Helicity/Vertex/Tensor/FFVTVertex.cc @@ -1,102 +1,58 @@ // -*- C++ -*- // // FFVTVertex.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2017 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 3 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the FFVTVertex class. // #include "FFVTVertex.h" #include "ThePEG/Utilities/DescribeClass.h" #include "ThePEG/Interface/ClassDocumentation.h" using namespace ThePEG; using namespace Helicity; // The following static variable is needed for the type // description system in ThePEG. DescribeAbstractNoPIOClass describeThePEGFFVTVertex("ThePEG::FFVTVertex", "libThePEG.so"); void FFVTVertex::Init() { static ClassDocumentation documentation ("The FFVTVertex class is the implementation of the" "helicity amplitude calculation of the fermion-antifermion-vector-tensor" "vertex. All such vertices should inherit from it."); } // function to evaluate the vertex Complex FFVTVertex::evaluate(Energy2 q2, const SpinorWaveFunction & sp, const SpinorBarWaveFunction & sbar, const VectorWaveFunction & vec, const TensorWaveFunction & ten) { // set the couplings setCoupling(q2,sp.particle(),sbar.particle(), vec.particle(),ten.particle()); Complex ii(0.,1.); // vector current LorentzPolarizationVector as = left_ *sp.wave(). leftCurrent(sbar.wave()) + right_*sp.wave().rightCurrent(sbar.wave()); // trace of the tensor Complex trace = ten.wave().trace(); // dot product Complex dotav = as.dot(vec.wave()); // product with tensor and current LorentzPolarizationVector preDot = ten.wave(). preDot(as); LorentzPolarizationVector postDot = ten.wave().postDot(as); Complex tenav = preDot.dot(vec.wave())+postDot.dot(vec.wave()); // return the vertex return ii*0.25*norm()*(tenav-2.*trace*dotav); } - -TensorWaveFunction FFVTVertex::evaluate(Energy2,int , tcPDPtr , - const SpinorWaveFunction & , - const SpinorBarWaveFunction & , - const VectorWaveFunction & , - complex, complex) { - throw Exception() << "FFVTVertex::evaluate() only implemented for the " - << "member which returns the amplitude, " - << "not the off-shell wavefunctions" - << Exception::runerror; -} - -VectorWaveFunction FFVTVertex::evaluate(Energy2 ,int , tcPDPtr , - const SpinorWaveFunction & , - const SpinorBarWaveFunction & , - const TensorWaveFunction & , - complex, complex) { - throw Exception() << "FFVTVertex::evaluate() only implemented for the " - << "member which returns the amplitude, " - << "not the off-shell wavefunctions" - << Exception::runerror; -} - -SpinorWaveFunction FFVTVertex::evaluate(Energy2 ,int , tcPDPtr , - const SpinorWaveFunction & , - const VectorWaveFunction & , - const TensorWaveFunction & , - complex, complex) { - throw Exception() << "FFVTVertex::evaluate() only implemented for the " - << "member which returns the amplitude, " - << "not the off-shell wavefunctions" - << Exception::runerror; -} - -SpinorBarWaveFunction FFVTVertex::evaluate(Energy2 ,int , tcPDPtr , - const SpinorBarWaveFunction & , - const VectorWaveFunction & , - const TensorWaveFunction & , - complex, complex) { - throw Exception() << "FFVTVertex::evaluate() only implemented for the " - << "member which returns the amplitude, " - << "not the off-shell wavefunctions" - << Exception::runerror; -} diff --git a/Helicity/Vertex/Tensor/FFVTVertex.h b/Helicity/Vertex/Tensor/FFVTVertex.h --- a/Helicity/Vertex/Tensor/FFVTVertex.h +++ b/Helicity/Vertex/Tensor/FFVTVertex.h @@ -1,226 +1,150 @@ // -*- C++ -*- // // FFVTVertex.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2017 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 3 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_FFVTVertex_H #define ThePEG_FFVTVertex_H // // This is the declaration of the FFVTVertex class. // #include "ThePEG/Helicity/Vertex/AbstractFFVTVertex.h" #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/TensorWaveFunction.h" #include "FFVTVertex.fh" namespace ThePEG { namespace Helicity { /** \ingroup Helicity * * The FFVTVertex class is the implementation of the * fermion-fermion--vector-tensor vertex. * It inherits from the AbstractFFVTVertex class for the storage of the particles * interacting at the vertex and implements the helicity amplitude calculations. * * All implementations of this vertex should inherit from it and implement the * virtual setCoupling member. * * The form of the vertex is * \f[\frac{ig\kappa}4t^a_{nm}\bar{f_2}(C_{\mu\nu,\rho\sigma}-g_{\mu\nu}g_{\rho\sigma}) * \gamma^\sigma f_1\epsilon_{3\rho}\epsilon_4^{\mu\nu}\f] * where * -\f$C_{\mu\nu,\rho\sigma}=g_{\mu\rho}g_{\nu\sigma}+g_{\mu\sigma}g_{\nu\rho} * -g_{\mu\nu}g_{\rho\sigma}\f$. * * @see AbstractFFVTVertex */ class FFVTVertex: public AbstractFFVTVertex { public: /** * Default constructor */ FFVTVertex() : left_(1.), right_(1.) {} /** * Standard Init function used to initialize the interfaces. */ static void Init(); public: /** * Members to calculate the helicity amplitude expressions for vertices * and off-shell particles. */ //@{ /** * Evalulate the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param sp1 The wavefunction for the ferimon. * @param sbar2 The wavefunction for the antifermion. * @param vec3 The wavefunction for the vector. * @param ten4 The wavefunction for the tensor. */ Complex evaluate(Energy2 q2,const SpinorWaveFunction & sp1, const SpinorBarWaveFunction & sbar2, const VectorWaveFunction & vec3, const TensorWaveFunction & ten4); - - /** - * Evaluate the off-shell tensor coming from the vertex. - * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. - * @param iopt Option of the shape of the Breit-Wigner for the off-shell tensor. - * @param out The ParticleData pointer for the off-shell tensor. - * @param sp1 The wavefunction for the ferimon. - * @param sbar2 The wavefunction for the antifermion. - * @param vec3 The wavefunction for the vector. - * @param mass The mass of the off-shell particle if not taken from the ParticleData - * object - * @param width The width of the off-shell particle if not taken from the ParticleData - * object - */ - TensorWaveFunction evaluate(Energy2 q2,int iopt, tcPDPtr out, - const SpinorWaveFunction & sp1, - const SpinorBarWaveFunction & sbar2, - const VectorWaveFunction & vec3, - complex mass=-GeV, complex width=-GeV); - - /** - * Evaluate the off-shell vector coming from the vertex. - * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. - * @param iopt Option of the shape of the Breit-Wigner for the off-shell vector. - * @param out The ParticleData pointer for the off-shell vector. - * @param sp1 The wavefunction for the ferimon. - * @param sbar2 The wavefunction for the antifermion. - * @param ten4 The wavefunction for the tensor. - * @param mass The mass of the off-shell particle if not taken from the ParticleData - * object - * @param width The width of the off-shell particle if not taken from the ParticleData - * object - */ - VectorWaveFunction evaluate(Energy2 q2,int iopt, tcPDPtr out, - const SpinorWaveFunction & sp1, - const SpinorBarWaveFunction & sbar2, - const TensorWaveFunction & ten4, - complex mass=-GeV, complex width=-GeV); - - /** - * Evaluate the off-shell spinor coming from the vertex. - * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. - * @param iopt Option of the shape of the Breit-Wigner for the off-shell spinor. - * @param out The ParticleData pointer for the off-shell spinor. - * @param sp1 The wavefunction for the ferimon. - * @param vec3 The wavefunction for the vector. - * @param ten4 The wavefunction for the tensor. - * @param mass The mass of the off-shell particle if not taken from the ParticleData - * object - * @param width The width of the off-shell particle if not taken from the ParticleData - * object - */ - SpinorWaveFunction evaluate(Energy2 q2,int iopt, tcPDPtr out, - const SpinorWaveFunction & sp1, - const VectorWaveFunction & vec3, - const TensorWaveFunction & ten4, - complex mass=-GeV, complex width=-GeV); - - /** - * Evaluate the off-shell barred spinor coming from the vertex. - * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. - * @param iopt Option of the shape of the Breit-Wigner for the off-shell barred spinor. - * @param out The ParticleData pointer for the off-shell barred spinor. - * @param sbar2 The wavefunction for the antifermion. - * @param vec3 The wavefunction for the vector. - * @param ten4 The wavefunction for the tensor. - * @param mass The mass of the off-shell particle if not taken from the ParticleData - * object - * @param width The width of the off-shell particle if not taken from the ParticleData - * object - */ - SpinorBarWaveFunction evaluate(Energy2 q2,int iopt, tcPDPtr out, - const SpinorBarWaveFunction & sbar2, - const VectorWaveFunction & vec3, - const TensorWaveFunction & ten4, - complex mass=-GeV, complex width=-GeV); //@} /** * Set coupling methods */ //@{ /** * Dummy for a three point interaction. */ virtual void setCoupling(Energy2,tcPDPtr,tcPDPtr,tcPDPtr) { assert(false); } /** * Calculate the couplings for a four point interaction. * This method is virtual and must be implemented in * classes inheriting from this. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. * @param part4 The ParticleData pointer for the fourth particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3, tcPDPtr part4)=0; //@} /** * Left and right couplings */ //@{ /** * Get left */ Complex left() const {return left_;} /** * Set left */ void left(Complex in) {left_ = in;} /** * Get right */ Complex right() const {return right_;} /** * Set right */ void right(Complex in) {right_ = in;} //@} private: /** * Private and non-existent assignment operator. */ FFVTVertex & operator=(const FFVTVertex &); private: /** * Left coupling */ Complex left_; /** * Right coupling */ Complex right_; }; } } #endif /* ThePEG_FFVTVertex_H */