File indexing completed on 2025-04-19 09:09:44
0001 #ifndef AMEGIC_Amplitude_Zfunctions_Mom_H
0002 #define AMEGIC_Amplitude_Zfunctions_Mom_H
0003 #include "AMEGIC++/Amplitude/Zfunctions/MHVCalculator.H"
0004
0005 #ifndef Basic_Sfuncs_In_MHV
0006 #include <vector>
0007 #include "ATOOLS/Math/Vector.H"
0008 #include "ATOOLS/Math/MyComplex.H"
0009 #include "AMEGIC++/Amplitude/Pfunc.H"
0010 #include "ATOOLS/Math/PermStore.H"
0011 #include "ATOOLS/Math/Permutation.H"
0012 #include "ATOOLS/Phys/Flavour.H"
0013
0014 using namespace ATOOLS;
0015
0016
0017 namespace AMEGIC {
0018
0019 class MHVCalculator;
0020
0021
0022
0023 class Mom: public Vec4D {
0024 private:
0025
0026 int hel, part;
0027 Complex l0[2], l1[2];
0028 double *etha;
0029
0030 void Compute_l();
0031
0032
0033 public:
0034
0035
0036 Mom(Vec4D&,int,int);
0037 Mom(Vec4D&,double *et=0);
0038
0039
0040 void Print();
0041
0042 friend class MomentumList;
0043
0044
0045 };
0046
0047
0048
0049
0050 class MomentumList: public std::vector<Mom*> {
0051 private:
0052
0053 int *hlist, *plist;
0054 size_t m_size, m_in, m_out;
0055 size_t m_propsize;
0056 double etha[2];
0057 Complex **s0, **s1;
0058
0059 bool Get(const char* file);
0060 void MakeHlist();
0061 void MakePlist();
0062 void BuildMomList();
0063 void Compute_s();
0064
0065 public:
0066
0067
0068 MomentumList(const char* file);
0069 MomentumList(size_t in, size_t out);
0070
0071
0072 ~MomentumList();
0073
0074
0075 void PutMomenta(const ATOOLS::Vec4D*);
0076
0077 Vec4D Momentum(int);
0078 int GetMomNumber(Pfunc*);
0079 int * GetHList();
0080 int * GetPList();
0081
0082 void Print();
0083
0084 inline Complex S0(int i,int j) { if (i>j) return s0[i][j]; else return -s0[j][i]; }
0085 inline Complex S1(int i,int j) { if (i>j) return s1[i][j]; else return -s1[j][i]; }
0086 inline size_t Size() {return m_size;}
0087
0088 };
0089
0090
0091
0092 class Fullamplitude_MHV_test {
0093 private:
0094
0095 MomentumList* momentumlist;
0096 int *hlist, *plist, *perm;
0097 Complex amp;
0098 MHVCalculator* calc;
0099 size_t* ma;
0100 void Permutation_pureg(int,int**);
0101 void Permutation_quark(int,int**);
0102
0103
0104 public:
0105
0106
0107 Fullamplitude_MHV_test(MomentumList*,int* hl,int* pl);
0108
0109
0110
0111
0112
0113 Complex Calculate();
0114
0115 };
0116
0117
0118
0119
0120 class Fullamplitude_MHV_old {
0121 private:
0122
0123 PermStore* permstore;
0124 MHVCalculator* calc;
0125
0126 int n_part;
0127 Complex ampnc;
0128 Complex ampsq;
0129 double m_cpl, p_norm;
0130
0131 const int *qlist;
0132 int *plist, *p_hlist;
0133 int *perm, *permconj, *permgl, *permconjgl;
0134 std::vector<int> *permtb;
0135
0136 bool colorstore;
0137 int m_qpos, m_qposconj;
0138
0139 size_t *mact1, *mact2;
0140 size_t qindex[2];
0141
0142 void PermutationStoreColor_pureg(int,int**);
0143 void PermutationStoreAmp_pureg(int,int**);
0144 void Permutation_pureg(int,int**,bool);
0145
0146 void PermutationStoreColor_quark2(int,std::vector<int>**);
0147 void PermutationStoreAmp_quark2(int,std::vector<int>**);
0148 void Permutation_quark2(int,int**,bool);
0149
0150
0151
0152 void Permutation_quark4(int,int**,bool);
0153
0154
0155 public:
0156
0157
0158 Fullamplitude_MHV_old(int n_part,int* plist);
0159
0160
0161 ~Fullamplitude_MHV_old();
0162
0163
0164 double MSquare(MomentumList*,int* hlist);
0165 Complex MSquareHel(MomentumList*);
0166
0167 inline double ParticlesNorm() {return p_norm;}
0168
0169 };
0170
0171
0172
0173 }
0174
0175 #endif
0176 #endif