Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-04-19 09:09:45

0001 #ifndef MODEL_Interaction_Models_Vertex_H
0002 #define MODEL_Interaction_Models_Vertex_H
0003 
0004 #include "ATOOLS/Math/MyComplex.H"
0005 #include "ATOOLS/Phys/Flavour.H"
0006 #include "MODEL/Main/Color_Function.H"
0007 #include "MODEL/Main/Model_Base.H"
0008 #include "AMEGIC++/Amplitude/Lorentz_Function.H"
0009 #include "AMEGIC++/Amplitude/Single_Vertex.H"
0010 #include <map>
0011 #include <vector>
0012 
0013 
0014 namespace AMEGIC {
0015 
0016   typedef  std::map<std::string,Complex> tscmap;
0017 
0018   typedef std::vector<Single_Vertex *> Vertex_List;
0019   typedef std::map<ATOOLS::Flavour, Vertex_List> Vertex_Table;
0020 
0021   class Vertex {
0022     int m_nvertex, m_n4vertex;       // number of single vertices included
0023     std::vector<Single_Vertex> m_v;  // list of 3-vertices 
0024     std::vector<Single_Vertex> m_v4; // list of 4-vertices 
0025     tscmap      m_cplmap;   
0026     
0027     void        CheckEqual(ATOOLS::Flavour**,short int&);
0028     void        GenerateVertex();
0029     int         CheckExistence(Single_Vertex&);  
0030     int         FermionRule(Single_Vertex& probe);
0031     int         SetVertex(Single_Vertex&,Single_Vertex&,int,int,int,int a=99,int mode=0);
0032 
0033     void        ColorExchange(MODEL::Color_Function*,int,int,int,int);
0034     void        LorentzExchange(MODEL::Lorentz_Function*,int,int,int,int);
0035 
0036   public:
0037     int on;
0038     Vertex(MODEL::Model_Base *);
0039     ~Vertex();
0040 
0041     void Print();
0042     
0043 
0044     inline Single_Vertex* operator[] (int n) {return &m_v[n];}  
0045     inline const Single_Vertex* operator[] (int n) const {return &m_v[n];}
0046 
0047     inline Single_Vertex* operator() (int n) {return &m_v4[n];}  
0048     inline const Single_Vertex* operator() (int n) const {return &m_v4[n];}
0049 
0050     inline int MaxNumber() const {return m_nvertex;}
0051 
0052     inline int MaxNumber4() const {return m_n4vertex;}
0053     
0054     inline tscmap* GetCouplings() { return &m_cplmap; }
0055 
0056     void TexOutput();
0057 
0058     int  FindVertex(Single_Vertex*);
0059 
0060     inline std::vector<Single_Vertex> &Vertices(int set)
0061     { return set?m_v4:m_v; }
0062   };
0063   
0064   std::ostream& operator<<(std::ostream&, const Vertex&);
0065 
0066   struct Amegic_Model {
0067   public:
0068 
0069     MODEL::Model_Base *p_model;
0070     Vertex *p_vertex;
0071 
0072     Amegic_Model(MODEL::Model_Base *model):
0073       p_model(model), p_vertex(new Vertex(model)) {}
0074 
0075     ~Amegic_Model() { delete p_vertex; }
0076 
0077   };
0078 
0079 
0080   /*! 
0081     \file
0082     \brief this file contains the class MODEL::Vertex   
0083   */
0084 
0085   /*! 
0086     \class Vertex 
0087     \brief This class generates all the interaction vertices present in a
0088     specific Model. 
0089   */
0090   
0091   /*!
0092     \fn Vertex::Vertex(MODEL::Model_Base*)
0093     
0094     \brief Builds the list of vertices and can produce a LaTeX output file.
0095     
0096     First of all , the lists m_v and m_v4 are initially filled via the Model routines of the model that's passed as the parameter: 
0097     
0098     - c_FFV, 
0099     - c_FFS, 
0100     - c_FFS, 
0101     - c_VVV, 
0102     - c_VVS, 
0103     - c_SSS, 
0104     - c_VVVV, 
0105     - c_SSVV, 
0106     - c_SSSS, 
0107     - c_FFT, 
0108     - c_VVT, 
0109     - c_SST, 
0110     - c_VVVT, 
0111     - c_FFVT, 
0112     - c_FFVT.
0113     
0114 
0115     Since during the matching of the vertices onto the raw topologies (Amplitude_Generator) 
0116     not only the standard form of a vertex is needed, but also all its permutations of external
0117     flavours, taking into account possible changes in the coupling constants. This task is 
0118     fulfilled by a call of the method GenerateVertex(). After all we are left with the complete
0119     lists of vertices contributing, m_v and m_v4.
0120     
0121   */
0122    
0123   /*!
0124 
0125   \fn void Vertex::GenerateVertex()
0126   
0127   \brief Generates the physically meaningfull permutations of the vertices created by the models.
0128 
0129   */
0130  /*!
0131 
0132   \fn int Vertex::SetVertex()
0133   
0134   
0135   */
0136  /*!
0137 
0138   \fn int Vertex::CheckExistence(Single_Vertex& probe)
0139   
0140   \brief Checks if the Single_Vertex probe already exists in the lists of
0141   vertices m_v or m_v4. 
0142 
0143   As a note here: In constrast to intuition this class returns true, if the vertex is not in the list.
0144   */
0145  
0146 }
0147 #endif