Back to home page

EIC code displayed by LXR

 
 

    


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