Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-08-06 09:38:23

0001 // -*- C++ -*-
0002 #ifndef Helicity_GeneralVSSVertex_H
0003 #define Helicity_GeneralVSSVertex_H
0004 //
0005 // This is the declaration of the GeneralVSSVertex class.
0006 //
0007 
0008 #include "ThePEG/Helicity/Vertex/AbstractVSSVertex.h"
0009 #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h"
0010 #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h"
0011 #include "GeneralVSSVertex.fh"
0012 
0013 namespace ThePEG {
0014 namespace Helicity {
0015 
0016 using namespace ThePEG;
0017 
0018 /**
0019  * Here is the documentation of the GeneralVSSVertex class.
0020  *
0021  * @see \ref GeneralVSSVertexInterfaces "The interfaces"
0022  * defined for GeneralVSSVertex.
0023  */
0024 class GeneralVSSVertex: public AbstractVSSVertex {
0025 
0026 public:
0027 
0028   /**
0029    * The default constructor.
0030    */
0031   GeneralVSSVertex() : a_(1.), b_(-1.)
0032   {}
0033 
0034   /**
0035    * The standard Init function used to initialize the interfaces.
0036    * Called exactly once for each class by the class description system
0037    * before the main function starts or
0038    * when this class is dynamically loaded.
0039    */
0040   static void Init();
0041 
0042   /**
0043    * Members to calculate the helicity amplitude expressions for vertices
0044    * and off-shell particles.
0045    */
0046   //@{  
0047   /**
0048    * Evaluate the vertex.
0049    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0050    * @param vec1 The wavefunction for the vector.
0051    * @param sca2 The wavefunction for the first  scalar.
0052    * @param sca3 The wavefunction for the second scalar.
0053    */
0054   Complex evaluate(Energy2 q2,const VectorWaveFunction & vec1,
0055            const ScalarWaveFunction & sca2, const ScalarWaveFunction & sca3);
0056 
0057   /**
0058    * Evaluate the off-shell vector coming from the vertex.
0059    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0060    * @param iopt Option of the shape of the Breit-Wigner for the off-shell vector.
0061    * @param out The ParticleData pointer for the off-shell vector.
0062    * @param sca2 The wavefunction for the first  scalar.
0063    * @param sca3 The wavefunction for the second scalar.
0064    * @param mass The mass of the off-shell particle if not taken from the ParticleData
0065    * object
0066    * @param width The width of the off-shell particle if not taken from the ParticleData
0067    * object
0068    */
0069   VectorWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out,
0070                   const ScalarWaveFunction & sca2,
0071                   const ScalarWaveFunction & sca3,
0072                   complex<Energy> mass=-GeV, complex<Energy> width=-GeV);
0073 
0074   /**
0075    * Evaluate the off-shell scalar coming from the vertex.
0076    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0077    * @param iopt Option of the shape of the Breit-Wigner for the off-shell scalar.
0078    * @param out The ParticleData pointer for the off-shell scalar.
0079    * @param vec1 The wavefunction for the vector.
0080    * @param sca2 The wavefunction for the scalar.
0081    * @param mass The mass of the off-shell particle if not taken from the ParticleData
0082    * object
0083    * @param width The width of the off-shell particle if not taken from the ParticleData
0084    * object
0085    */
0086   ScalarWaveFunction evaluate(Energy2 q2,int iopt, tcPDPtr out,
0087                   const VectorWaveFunction & vec1,
0088                   const ScalarWaveFunction & sca2,
0089                   complex<Energy> mass=-GeV, complex<Energy> width=-GeV);
0090 
0091   /**
0092    *   Set coupling methods
0093    */
0094   //@{
0095   /**
0096    * Calculate the couplings for a three point interaction.
0097    * This method is virtual and must be implemented in 
0098    * classes inheriting from this.
0099    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
0100    * @param part1 The ParticleData pointer for the first  particle.
0101    * @param part2 The ParticleData pointer for the second particle.
0102    * @param part3 The ParticleData pointer for the third  particle.
0103    */
0104   virtual void setCoupling(Energy2 q2,tcPDPtr part1,
0105                tcPDPtr part2,tcPDPtr part3)=0;
0106 
0107   /**
0108    * Dummy setCouplings for a four point interaction 
0109    * This method is virtual and must be implemented in 
0110    * classes inheriting from this.
0111    */
0112   virtual void setCoupling(Energy2,tcPDPtr,tcPDPtr,tcPDPtr,tcPDPtr) {
0113     assert(false);
0114   }
0115   //@}
0116 
0117 protected:
0118 
0119   /**
0120    *  Member functions top set/get the coefficents
0121    */
0122   //@{
0123   /**
0124    * Access coefficient of \f$p_2\f$
0125    */
0126   Complex a() const {return a_;}
0127   
0128   /**
0129    * Access coefficient of \f$p_3\f$
0130    */
0131   Complex b() const {return b_;}
0132   
0133   /**
0134    * Set coefficient of \f$p_2\f$
0135    */
0136   void a(Complex in) {a_=in;}
0137   
0138   /**
0139    * Set coefficient of \f$p_3\f$
0140    */
0141   void b(Complex in) {b_=in;}
0142   //@}
0143   
0144 private:
0145 
0146   /**
0147    * The assignment operator is private and must never be called.
0148    * In fact, it should not even be implemented.
0149    */
0150   GeneralVSSVertex & operator=(const GeneralVSSVertex &) = delete;
0151 
0152 private:
0153 
0154   /**
0155    *  The coefficent of \f$p_2\f$
0156    */
0157   Complex a_;
0158 
0159   /**
0160    *  The coefficent of \f$p_3\f$
0161    */
0162   Complex b_;
0163 
0164 };
0165 
0166 }
0167 }
0168 
0169 #endif /* Helicity_GeneralVSSVertex_H */