Back to home page

EIC code displayed by LXR

 
 

    


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

0001 #ifndef AMEGIC_String_String_Generator_H
0002 #define AMEGIC_String_String_Generator_H
0003 
0004 #include "ATOOLS/Math/Kabbala.H"
0005 #include "ATOOLS/Math/MyComplex.H"
0006 #include "AMEGIC++/Amplitude/Pfunc.H"
0007 #include "AMEGIC++/String/String_Tree.H"
0008 #include "AMEGIC++/Amplitude/Zfunctions/Basic_Func.H"
0009 #include <vector>
0010 
0011 namespace AMEGIC {
0012   class Basic_Sfuncs;
0013   class Values;
0014 
0015   class ZXlist {
0016   public:
0017     int       narg, * arg;
0018     ATOOLS::Kabbala   value;
0019     int       zlist;
0020     sknot   * sk;
0021     int       on;
0022 
0023     ZXlist()                    { arg = 0;sk = 0;on = 1;narg = 0;zlist = -1; }
0024     ZXlist(const ZXlist & copy) { arg = 0;*this = copy; }
0025     ~ZXlist()                   { if (arg!=0) delete[] arg; } 
0026 
0027     ZXlist& operator=(const ZXlist& copy);
0028   };
0029 
0030   class Virtual_String_Generator {
0031   public:
0032     virtual ~Virtual_String_Generator() {}
0033     virtual void      Reset(int = 0)    {}
0034     virtual void      ReplaceZXlist(Virtual_String_Generator*) {}   
0035     virtual void      ReStore()         {}
0036     virtual int       GetCnumber(Complex)                          = 0;
0037     virtual ATOOLS::Kabbala   GetCZnumber(Complex,std::string)             = 0;
0038     virtual ATOOLS::Kabbala   GetZnumber(int*,Complex*,Complex)            = 0; 
0039     virtual ATOOLS::Kabbala   GetXnumber(int*,Complex*,Complex)            = 0;
0040     virtual ATOOLS::Kabbala   GetYnumber(int*,Complex*,Complex)            = 0;
0041     virtual ATOOLS::Kabbala   GetPnumber(Pfunc *,int)                      = 0;   
0042     virtual ATOOLS::Kabbala   GetMassnumber(int,ATOOLS::Flavour,Complex)   = 0;
0043     virtual ATOOLS::Kabbala   GetMnumber(ATOOLS::Flavour,Complex)          = 0;
0044     virtual ATOOLS::Kabbala   GetEnumber(Complex)                          = 0;
0045     virtual ATOOLS::Kabbala   GetSnumber(const int,const int,Complex)      = 0;     
0046     virtual ATOOLS::Kabbala   GetScplxnumber(const int,const int,Complex)  = 0;      
0047     virtual ATOOLS::Kabbala   GetEpsnumber(int*,int,Complex)               = 0;     
0048     virtual ATOOLS::Kabbala   GetSFnumber(Complex,int)                     = 0;
0049     virtual void      Calculate(Values*)                           = 0;
0050     virtual int       Massless(int)                                = 0;
0051     virtual ATOOLS::Kabbala * GetKabbala(const std::string&)               = 0;
0052     virtual int       ZXMaxNumber()                                = 0;
0053     virtual std::vector<long int>* GetFlavours()                   = 0;
0054     virtual ZXlist*   GetZXl(const int&)                           = 0;
0055     virtual Complex   GetCoupling(const int&)                      = 0;
0056     virtual std::vector<Complex>* GetCouplList()                   = 0;
0057     virtual std::vector<ZXlist>*  GetZXlist()                      = 0;
0058     virtual void      SetOn(const int&)                            = 0;
0059     virtual void      SetOn(const std::string&)                    = 0;
0060     virtual void      SetOff(const int&)                           = 0;
0061     virtual int       NumberOfCouplings()                          = 0;
0062     virtual int       NumberOfzxl()                                = 0;
0063     virtual int       UsesFunction(size_t i) {return 0;}
0064     virtual void      SetCouplings(std::map<std::string,Complex>*) = 0;
0065     virtual std::map<std::string,Complex>* GetCouplings()          = 0;
0066     virtual void      WriteCouplings(std::ofstream&)               = 0;
0067     virtual int       ReadCouplings(std::ifstream&)                = 0;
0068     virtual void      UpdateCouplings(std::map<std::string,Complex> & cmap) = 0;
0069   };
0070   
0071 
0072 
0073   class String_Generator : public Virtual_String_Generator,
0074                public Basic_Yfunc, 
0075                public Basic_Zfunc,
0076                public Basic_Xfunc,
0077                public Basic_Mfunc,
0078                public Basic_Vfunc,
0079                public Basic_Pfunc,
0080                public Basic_MassTermfunc,
0081                public Basic_Epsilonfunc,
0082                public Unitarityfunc {
0083     std::vector<ZXlist>  * p_zxl,       * p_zxlsave;
0084     std::vector<Complex> * p_couplings, * p_couplingssave;
0085     std::vector<long int>* p_flavours,  * p_flavourssave;
0086     std::vector<int>       m_zuse;
0087     String_Tree            m_stree,m_sthelp;
0088     bool                   m_copied;
0089     std::map<std::string,Complex>* p_couplmap;
0090     int  ZXCount(); 
0091     int  ZNumber(int *,int *);
0092     int  XNumber(int *,int *);
0093     int  YNumber(int *,int *);
0094     int  HNumber(int *,int *);
0095     int  ZXYNumber(int,int,int *,int,int *);
0096     int  GetNumber(int,Complex);
0097     void Print();
0098   public:
0099     String_Generator(Basic_Sfuncs *);
0100     ~String_Generator();
0101     void Reset(int = 0);
0102     void ReplaceZXlist(Virtual_String_Generator*);
0103     void ReStore();
0104     int ZCount(); 
0105     int XCount(); 
0106     int ECount(); 
0107     
0108     int GetCnumber(Complex);
0109     int GetFnumber(long int);
0110     
0111     ATOOLS::Kabbala     Number(int,Complex);
0112     ATOOLS::Kabbala     GetCZnumber(Complex,std::string);
0113     ATOOLS::Kabbala     GetZnumber(int *,Complex *,Complex);
0114     ATOOLS::Kabbala     GetXnumber(int *,Complex *,Complex); 
0115     ATOOLS::Kabbala     GetYnumber(int *,Complex *,Complex); 
0116     ATOOLS::Kabbala     GetPnumber(Pfunc *,int);
0117     ATOOLS::Kabbala     GetMassnumber(int,ATOOLS::Flavour,Complex);
0118     ATOOLS::Kabbala     GetMnumber(ATOOLS::Flavour,Complex);
0119     ATOOLS::Kabbala     GetEnumber(Complex); 
0120     ATOOLS::Kabbala     GetSnumber(int,int,Complex); 
0121     ATOOLS::Kabbala     GetScplxnumber(const int,const int,Complex); 
0122     ATOOLS::Kabbala     GetEpsnumber(int*,int,Complex);
0123     ATOOLS::Kabbala     GetSFnumber(Complex,int);
0124     void        Calculate(Values*); 
0125     int         Massless(int); 
0126     ATOOLS::Kabbala   * GetKabbala(const std::string&);
0127     int         ZXMaxNumber()               { return p_zxl->size(); }
0128     std::vector<long int>* GetFlavours()    { return p_flavours;}
0129     ZXlist    * GetZXl(const int & i)       { return &(*p_zxl)[i]; }
0130     Complex     GetCoupling(const int & i)  { return (*p_couplings)[i]; }
0131     std::vector<Complex>* GetCouplList()    { return p_couplings; }
0132     std::vector<ZXlist>*  GetZXlist()       { return p_zxl; }
0133     void        SetOff(const int & i)       { (*p_zxl)[i].on = 0; }
0134     void        SetOn(const int & i)        { (*p_zxl)[i].on = 1; }
0135     void        SetOn(const std::string &);
0136 
0137     int         NumberOfzxl()               { return p_zxl->size(); }
0138     ZXlist      zxlist(int i)               { return (*p_zxl)[i]; }
0139     int         NumberOfCouplings()         { return p_couplings->size(); }
0140     Complex     cplist(int i)               { return (*p_couplings)[i]; } 
0141     int         NumberOfFlavours()          { return p_flavours->size(); }
0142     int         GetFlavour(int i)           { return (*p_flavours)[i]; }  
0143     String_Tree GetStree()                  { return m_stree; }
0144     int         UsesFunction(size_t i)      { return m_zuse[i]; }
0145     void        SetCouplings(std::map<std::string,Complex>* cplm) { p_couplmap=cplm; }
0146     std::map<std::string,Complex>* GetCouplings()                 { return p_couplmap; }
0147     void        WriteCouplings(std::ofstream&);
0148     int         ReadCouplings(std::ifstream&);
0149     void        UpdateCouplings(std::map<std::string,Complex> & cmap);
0150   };
0151   
0152   class No_String_Generator : public Virtual_String_Generator {
0153   public:
0154     void Reset()                                                {};
0155     int       GetCnumber(Complex)                               { return 0;}
0156     ATOOLS::Kabbala   GetCZnumber(Complex value,std::string)            { return ATOOLS::Kabbala(std::string(""),value);}
0157     ATOOLS::Kabbala   GetZnumber(int*,Complex*,Complex value)           { return ATOOLS::Kabbala(std::string(""),value);}
0158     ATOOLS::Kabbala   GetXnumber(int*,Complex*,Complex value)           { return ATOOLS::Kabbala(std::string(""),value);} 
0159     ATOOLS::Kabbala   GetYnumber(int*,Complex*,Complex value)           { return ATOOLS::Kabbala(std::string(""),value);} 
0160     ATOOLS::Kabbala   GetPnumber(Pfunc * pl,int)                        { return ATOOLS::Kabbala(std::string(""),pl->value);} 
0161     ATOOLS::Kabbala   GetMassnumber(int,ATOOLS::Flavour,Complex value)  { return ATOOLS::Kabbala(std::string(""),value);}
0162     ATOOLS::Kabbala   GetMnumber(ATOOLS::Flavour,Complex value)         { return ATOOLS::Kabbala(std::string(""),value);}
0163     ATOOLS::Kabbala   GetEnumber(Complex value)                         { return ATOOLS::Kabbala(std::string(""),value);}
0164     ATOOLS::Kabbala   GetSnumber(int,int,Complex value)                 { return ATOOLS::Kabbala(std::string(""),value);}
0165     ATOOLS::Kabbala   GetScplxnumber(const int,const int,Complex value) { return ATOOLS::Kabbala(std::string(""),value);}
0166     ATOOLS::Kabbala   GetEpsnumber(int*,int,Complex value)              { return ATOOLS::Kabbala(std::string(""),value);}
0167     ATOOLS::Kabbala   GetSFnumber(Complex value ,int)                   { return ATOOLS::Kabbala(std::string(""),value);}
0168     int       Massless(int)                                     { return 0; }  
0169     ATOOLS::Kabbala * GetKabbala(const std::string&)                    { return 0;}
0170     int       NumberOfzxl()                                     { return 0; }
0171     int       NumberOfCouplings()                               { return 0; }
0172     int       ZXMaxNumber()                                     { return 0; }   
0173     std::vector<long int>* GetFlavours()                        { return NULL; }
0174     ZXlist*   GetZXl(const int&)                                { return NULL; }
0175     Complex   GetCoupling(const int&)                           { return Complex(0.,0.); }
0176     std::vector<Complex>* GetCouplList()                        { return NULL; }
0177     std::vector<ZXlist>*  GetZXlist()                           { return NULL; }
0178     void      Calculate(Values*)                                {}  
0179     void      SetOn(const int&)                                 {}  
0180     void      SetOn(const std::string&)                         {}  
0181     void      SetOff(const int&)                                {}  
0182     void      SetCouplings(std::map<std::string,Complex>*)      {}
0183     std::map<std::string,Complex>* GetCouplings()               { return NULL; }
0184     void      WriteCouplings(std::ofstream&)                    {}
0185     int       ReadCouplings(std::ifstream&)                     { return 0; }
0186     void      UpdateCouplings(std::map<std::string,Complex> & cmap) {}
0187   };
0188 
0189 }
0190 #include "AMEGIC++/String/Values.H"
0191 
0192 #endif
0193 
0194 
0195 
0196 
0197 
0198 
0199 
0200 
0201