File indexing completed on 2025-12-15 10:30:35
0001 #ifndef AMEGIC_Amplitude_Zfunc_Generator_H
0002 #define AMEGIC_Amplitude_Zfunc_Generator_H
0003
0004 #include "AMEGIC++/Main/Point.H"
0005 #include <vector>
0006 #include "AMEGIC++/Amplitude/Zfunc.H"
0007
0008 namespace AMEGIC {
0009 class Zfunc_Calc;
0010 struct SpinorDirection;
0011 class Basic_Sfuncs;
0012 class Virtual_String_Generator;
0013
0014 typedef std::vector<std::shared_ptr<Zfunc_Calc>> ZF_Vector;
0015
0016 class Zfunc_Generator {
0017 bool cutvecprop;
0018 Zfunc_List zlist;
0019 static ZF_Vector zcalc;
0020 Basic_Sfuncs* BS;
0021 void IsGaugeV(Point*,int&,int&);
0022
0023 int TryArgs(int,std::vector<MODEL::Lorentz_Function*> &,int,std::vector<MODEL::Lorentz_Function*> &);
0024 void LFFill_Zfunc(Zfunc*,std::vector<MODEL::Lorentz_Function*> &,Point*,Point*,Point*);
0025
0026 int LFDetermine_Zfunc(Zfunc*,Point*,Point*,Point*);
0027
0028 void Lorentz_Sequence(Point*,std::vector<MODEL::Lorentz_Function*> &lflist);
0029 void LFPrint(const std::vector<MODEL::Lorentz_Function*>&);
0030 std::string LFEff(const std::string &);
0031
0032 int Compare(int,const std::vector<MODEL::Lorentz_Function*> &,int*,
0033 const std::vector<MODEL::Lorentz_Function*> &,int*);
0034 void CopyOrder(std::vector<MODEL::Lorentz_Function*> &,std::vector<MODEL::Lorentz_Function*> &);
0035 void SearchNextProp(int,const std::vector<MODEL::Lorentz_Function*> &,int*,
0036 const std::vector<MODEL::Lorentz_Function*> &,int*,
0037 int,int);
0038 void SetPropDirection(int,int,const std::vector<MODEL::Lorentz_Function*> &,int*,
0039 const std::vector<MODEL::Lorentz_Function*> &,int*);
0040 public:
0041 Zfunc_Generator(bool cvp, Basic_Sfuncs* _BS) : cutvecprop(cvp), BS(_BS) {}
0042 ~Zfunc_Generator();
0043
0044 void Set_In(Zfunc*,int,Point*,Point*,Point*);
0045 void Set_Out(Zfunc*,int,Point*,Point*);
0046 void Set_Tensor(Zfunc*,Point*);
0047 void Set_FermionProp(Zfunc*,Point*,Point*);
0048
0049 void SetArgs(Zfunc*,int*,int*,Point*,Point*,int&);
0050 void SetScalarArgs(Zfunc*,int&,Point*);
0051
0052 void BuildZlist(Virtual_String_Generator*,Basic_Sfuncs*,int);
0053 void LorentzConvert(Point*);
0054 void MarkCut(Point*,int notcut,bool fromfermion=false,bool cutvectors=false);
0055 void Convert(Point*);
0056
0057 void SetDirection(int,SpinorDirection*);
0058 void Get(Zfunc_List& _zlist) {
0059 for (Zfunc_Iterator zit=zlist.begin();zit!=zlist.end();++zit)
0060 _zlist.push_back(*zit);
0061 }
0062 };
0063 }
0064 #endif
0065
0066
0067
0068
0069
0070
0071
0072