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