Commit 45e0f6c8 by Tanju Gleisberg

### enable AMEGIC for Feynman rules with totally antisymmetric Tensor and...

`enable AMEGIC for Feynman rules with totally antisymmetric Tensor and completed Lagrangian for WWZ/gamma triple AGC`
parent a6a6f4d4
 ... ... @@ -181,16 +181,17 @@ void Amplitude_Generator::Print_P(Point* p) } } int Amplitude_Generator::MatchVertex(Single_Vertex* v,Flavour* flav,Complex* cpl) int Amplitude_Generator::MatchVertex(Single_Vertex* v,Flavour* flav,vector& cpl) { if (flav[0] == v->in[0]) { short int hit = 1; int hit = 1; if (flav[1] != Flavour(kf::none)) {if (flav[1] != v->in[1]) hit = 0;} else {flav[1] = v->in[1];} if (flav[2] != Flavour(kf::none)) {if (flav[2] != v->in[2]) hit = 0;} else {flav[2] = v->in[2];} if (hit==1) { for (short int j=0;j<4;j++) cpl[j] = v->cpl[j]; cpl.clear(); for (size_t j=0;jcpl.size();j++) cpl.push_back(v->cpl[j]); return 1; } } ... ... @@ -204,8 +205,8 @@ int Amplitude_Generator::CheckEnd(Point* p,Flavour infl) if (((p->left->fl)!=Flavour(kf::none)) && ((p->right->fl)!=Flavour(kf::none))) { Flavour flav[3]; Flavour s_flav[3]; Complex cpl[4]; for (int j=0;j<4;j++) cpl[j] = Complex(0.,0.); vector cpl; cpl.clear(); flav[0] = infl; flav[1] = p->left->fl; ... ... @@ -247,7 +248,8 @@ int Amplitude_Generator::CheckEnd(Point* p,Flavour infl) for (size_t j=0;jcpl[k] = cpl[k]; p->cpl.clear(); for (size_t k=0;kcpl.push_back(cpl[k]); p->v = vl[j]; *(p->Color) = *(vl[j]->Color); *(p->Lorentz) = *(vl[j]->Lorentz); ... ... @@ -279,7 +281,7 @@ void Amplitude_Generator::SetProps(Point* pl,int dep,Single_Amplitude* &first,in int sw1; Flavour flav[3]; Flavour s_flav[3]; Complex cpl[4]; vector cpl; int first_try = 1; ... ... @@ -374,7 +376,8 @@ void Amplitude_Generator::SetProps(Point* pl,int dep,Single_Amplitude* &first,in *(p->Lorentz) = *(vl[i]->Lorentz); p->t = vl[i]->t; for (int k=0;k<4;k++) p->cpl[k] = cpl[k]; p->cpl.clear(); for (size_t k=0;kcpl.push_back(cpl[k]); ll = 0;top->Copy(prea[ap].p,prea[lanz].p,ll); ll = 0;top->Copy(preah,prea[ap].p,ll); prea[lanz].on = 1; ... ... @@ -737,13 +740,11 @@ void Amplitude_Generator::Unite(Point* p,Point* pdel) psave = p[i]; if (p[i].nextra>0) delete[] p[i].extrafl; delete[] p[i].cpl; p[i].cpl.clear(); int nfl = 1+pdel[i].nextra+p[i].nextra; int ncpl = pdel[i].ncpl+p[i].ncpl; p[i].extrafl = new Flavour[nfl]; p[i].cpl = new Complex[ncpl]; //Flavour int count = 0; ... ... @@ -759,12 +760,10 @@ void Amplitude_Generator::Unite(Point* p,Point* pdel) //Couplings count = 0; for (short int j=0;jv = (*v)(i); for (short int k=0;k<4;k++) pcopy->cpl[k] = (*v)(i)->cpl[k]; pcopy->cpl.clear(); for (size_t k=0;k<(*v)(i)->cpl.size();k++) pcopy->cpl.push_back((*v)(i)->cpl[k]); //set pcopy legs if (p->left->number==pnext->number) { ... ...
 ... ... @@ -77,7 +77,7 @@ namespace AMEGIC { void Set_End(Point*,int* &,int&); void Next_P(Point*,Point* &); void Print_P(Point*); int MatchVertex(Single_Vertex*,ATOOLS::Flavour*,Complex*); int MatchVertex(Single_Vertex*,ATOOLS::Flavour*,std::vector&); int CheckEnd(Point*,ATOOLS::Flavour); void SetProps(Point*,int,Single_Amplitude* &,int*, int, int); int Kill_Off(Single_Amplitude* &); ... ...
 ... ... @@ -97,7 +97,7 @@ void Zfunc_Generator::MarkCut(Point* p,int notcut,bool fromfermion) if(fromfermion && p->left->fl.IsFermion()){ p->m=0; } if(ATOOLS::IsZero(p->fl.Mass())){ if(ATOOLS::IsZero(p->fl.Mass())&&rpa.gen.Model()!=ATOOLS::Model_Type::SM_AGC){ p->m=0; } } ... ... @@ -560,11 +560,16 @@ void Zfunc_Generator::LFFill_Zfunc(Zfunc* Zh,vector &lflist, Zh->p_couplings[icoupl] = pb->cpl[0];icoupl++; case zl::AV3: if (Zh->m_type==zl::AV3) { pb->cpl.resize(8); Zh->p_couplings[icoupl] = pb->cpl[0];icoupl++; Zh->p_couplings[icoupl] = pb->cpl[1];icoupl++; Zh->p_couplings[icoupl] = pb->cpl[2];icoupl++; Zh->p_couplings[icoupl] = pb->cpl[3];icoupl++; } Zh->p_couplings[icoupl] = pb->cpl[4];icoupl++; Zh->p_couplings[icoupl] = pb->cpl[5];icoupl++; Zh->p_couplings[icoupl] = pb->cpl[6];icoupl++; Zh->p_couplings[icoupl] = pb->cpl[7];icoupl++; } default: if (Zh->m_type!=zl::AV3) Zh->p_couplings[icoupl] = pb->cpl[1];icoupl++; SetArgs(Zh,lfnumb,canumb,pb->left,p,icoupl); ... ...
 ... ... @@ -10,10 +10,11 @@ AnomalousV3_Calc::AnomalousV3_Calc(Virtual_String_Generator* _sgen,Basic_Sfuncs* Basic_Zfunc(_sgen,_BS), Basic_Xfunc(_sgen,_BS), Basic_Mfunc(_sgen,_BS), Basic_Vfunc(_sgen,_BS) Basic_Vfunc(_sgen,_BS), Basic_Epsilonfunc(_sgen,_BS) { type = zl::AV3; ncoupl=10;narg=6;pn=3; ncoupl=14;narg=6;pn=3; lorentzlist.push_back(Lorentz_Function(lf::Gamma)); lorentzlist.push_back(Lorentz_Function(lf::Gamma)); lorentzlist.push_back(Lorentz_Function(lf::Gamma)); ... ... @@ -24,17 +25,20 @@ AnomalousV3_Calc::AnomalousV3_Calc(Virtual_String_Generator* _sgen,Basic_Sfuncs* Kabbala AnomalousV3_Calc::Do() { if (!IsZero(X(0,0)*M(0)) || !IsZero(X(1,1)*M(1)) || !IsZero(X(2,2)*M(2))) { std::cerr<<"Error in AnomalousV3_Calc::Do(): not cutted massive vertex!"<GetEnumber(coupl[6]); Kabbala f2 = -sgen->GetEnumber(coupl[7]); Kabbala f3 = -sgen->GetEnumber(coupl[8]); Kabbala f4 = -sgen->GetEnumber(coupl[9]); Kabbala f1 = sgen->GetEnumber(coupl[6]); Kabbala f2 = sgen->GetEnumber(coupl[7]); Kabbala f3 = sgen->GetEnumber(coupl[8]); Kabbala f4 = sgen->GetEnumber(coupl[9]); Kabbala f5 = sgen->GetEnumber(coupl[10]); Kabbala f6 = sgen->GetEnumber(coupl[11]); Kabbala f7 = sgen->GetEnumber(coupl[12]); Kabbala t1 = Z(2,1)*(X(0,1)-X(0,2))+Z(2,0)*X(1,2)-Z(0,1)*X(2,1); Kabbala t2 = Z(0,1)*X(2,0)-Z(2,0)*X(1,0); ... ... @@ -44,6 +48,26 @@ Kabbala AnomalousV3_Calc::Do() +Z(1,2)*(X(0,1)*V(0,2)-X(0,2)*V(0,1)); Kabbala t4 = Z(0,1)*X(2,0)+Z(2,0)*X(1,0); return f1*t1+f2*t2+f3*t3+f4*t4; int sarg[6]; sarg[0]=ps[0].numb; sarg[1]=ps[1].numb; sarg[2]=ps[2].numb; sarg[3]=BS->GetPolNumber(arg[0],arg[1],GetPMass(arg[0],arg[1])); sarg[4]=BS->GetPolNumber(arg[4],arg[5],GetPMass(arg[4],arg[5])); sarg[5]=BS->GetPolNumber(arg[8],arg[9],GetPMass(arg[8],arg[9])); // std::cout<
 #include "Basic_Func.H" #include "Basic_Sfuncs.H" #include "String_Generator.H" using namespace AMEGIC; using namespace ATOOLS; Kabbala Basic_Epsilonfunc::Epsilon(const int a,const int b,const int c,const int d,int s) { int arg[4]; arg[0]=a; arg[1]=b; arg[2]=c; arg[3]=d; int rd=0; for (;rd==0;) { rd=1; for (size_t i=0;i<3;i++) { if (BS->IsComplex(arg[i])IsComplex(arg[i+1])) { rd=arg[i];arg[i]=arg[i+1];arg[i+1]=rd; rd=0; s=-s; } } } rd=4; for (size_t i=0;i<4;i++) { if (!BS->IsComplex(arg[i])) { rd=i; break; } } Complex res=EpsCalc(arg[0],arg[1],arg[2],arg[3],rd); return (s>0) ? sgen->GetEpsnumber(arg,rd,res) : -sgen->GetEpsnumber(arg,rd,res); } double Basic_Epsilonfunc::EC(const Vec4D* va,const Vec4D* vb,const Vec4D* vc,const Vec4D* vd) { return (*va)[0]*( (*vb)[1]*((*vc)[2]*(*vd)[3]-(*vc)[3]*(*vd)[2]) +(*vb)[2]*((*vc)[3]*(*vd)[1]-(*vc)[1]*(*vd)[3]) +(*vb)[3]*((*vc)[1]*(*vd)[2]-(*vc)[2]*(*vd)[1])) +(*va)[1]*( (*vb)[0]*((*vc)[3]*(*vd)[2]-(*vc)[2]*(*vd)[3]) +(*vb)[2]*((*vc)[0]*(*vd)[3]-(*vc)[3]*(*vd)[0]) +(*vb)[3]*((*vc)[2]*(*vd)[0]-(*vc)[0]*(*vd)[2])) +(*va)[2]*( (*vb)[0]*((*vc)[1]*(*vd)[3]-(*vc)[3]*(*vd)[1]) +(*vb)[1]*((*vc)[3]*(*vd)[0]-(*vc)[0]*(*vd)[3]) +(*vb)[3]*((*vc)[0]*(*vd)[1]-(*vc)[1]*(*vd)[0])) +(*va)[3]*( (*vb)[0]*((*vc)[2]*(*vd)[1]-(*vc)[1]*(*vd)[2]) +(*vb)[1]*((*vc)[0]*(*vd)[2]-(*vc)[2]*(*vd)[0]) +(*vb)[2]*((*vc)[1]*(*vd)[0]-(*vc)[0]*(*vd)[1])); } Complex Basic_Epsilonfunc::EpsCalc(const int a,const int b,const int c,const int d,const int nc) { switch (nc) { case 0: return EpsCalc<0>(a,b,c,d); case 1: return EpsCalc<1>(a,b,c,d); case 2: return EpsCalc<2>(a,b,c,d); case 3: return EpsCalc<3>(a,b,c,d); case 4: return EpsCalc<4>(a,b,c,d); } return Complex(0.,0.); } template <> Complex Basic_Epsilonfunc::EpsCalc<0>(const int a,const int b,const int c,const int d) { Vec4D* va = &(BS->Momentum(a)); Vec4D* vb = &(BS->Momentum(b)); Vec4D* vc = &(BS->Momentum(c)); Vec4D* vd = &(BS->Momentum(d)); return Complex(EC(va,vb,vc,vd),0.); } template <> Complex Basic_Epsilonfunc::EpsCalc<1>(const int a,const int b,const int c,const int d) { Vec4D* va = &(BS->Momentum(a)); Vec4D* vai = &(BS->MomentumImg(a)); Vec4D* vb = &(BS->Momentum(b)); Vec4D* vc = &(BS->Momentum(c)); Vec4D* vd = &(BS->Momentum(d)); return Complex(EC(va,vb,vc,vd),EC(vai,vb,vc,vd)); } template <> Complex Basic_Epsilonfunc::EpsCalc<2>(const int a,const int b,const int c,const int d) { Vec4D* va = &(BS->Momentum(a)); Vec4D* vai = &(BS->MomentumImg(a)); Vec4D* vb = &(BS->Momentum(b)); Vec4D* vbi = &(BS->MomentumImg(b)); Vec4D* vc = &(BS->Momentum(c)); Vec4D* vd = &(BS->Momentum(d)); return Complex(EC(va,vb,vc,vd)-EC(vai,vbi,vc,vd),EC(vai,vb,vc,vd)+EC(va,vbi,vc,vd)); } template <> Complex Basic_Epsilonfunc::EpsCalc<3>(const int a,const int b,const int c,const int d) { Vec4D* va = &(BS->Momentum(a)); Vec4D* vai = &(BS->MomentumImg(a)); Vec4D* vb = &(BS->Momentum(b)); Vec4D* vbi = &(BS->MomentumImg(b)); Vec4D* vc = &(BS->Momentum(c)); Vec4D* vci = &(BS->MomentumImg(c)); Vec4D* vd = &(BS->Momentum(d)); return Complex(EC(va,vb,vc,vd)-EC(vai,vbi,vc,vd)-EC(vai,vb,vci,vd)-EC(va,vbi,vci,vd), EC(vai,vb,vc,vd)+EC(va,vbi,vc,vd)+EC(va,vb,vci,vd)-EC(vai,vbi,vci,vd)); } template <> Complex Basic_Epsilonfunc::EpsCalc<4>(const int a,const int b,const int c,const int d) { Vec4D* va = &(BS->Momentum(a)); Vec4D* vai = &(BS->MomentumImg(a)); Vec4D* vb = &(BS->Momentum(b)); Vec4D* vbi = &(BS->MomentumImg(b)); Vec4D* vc = &(BS->Momentum(c)); Vec4D* vci = &(BS->MomentumImg(c)); Vec4D* vd = &(BS->Momentum(d)); Vec4D* vdi = &(BS->MomentumImg(d)); return Complex(EC(va,vb,vc,vd)+EC(vai,vbi,vci,vdi) -EC(vai,vbi,vc,vd)-EC(vai,vb,vci,vd)-EC(va,vbi,vci,vd) -EC(va,vbi,vci,vd)-EC(va,vbi,vc,vdi)-EC(va,vb,vci,vdi), EC(vai,vb,vc,vd)+EC(va,vbi,vc,vd)+EC(va,vb,vci,vd)+EC(va,vb,vc,vdi) -EC(va,vbi,vci,vdi)-EC(vai,vb,vci,vdi) -EC(vai,vbi,vc,vdi)-EC(vai,vbi,vci,vd)); }
 ... ... @@ -163,6 +163,21 @@ namespace AMEGIC { Kabbala P(Pfunc*); }; class Basic_Epsilonfunc : public virtual Basic_Func { double EC(const ATOOLS::Vec4D*,const ATOOLS::Vec4D*,const ATOOLS::Vec4D*,const ATOOLS::Vec4D*); public: Basic_Epsilonfunc(Virtual_String_Generator* _sgen,Basic_Sfuncs* _BS) : Basic_Func(_sgen,_BS) {} Kabbala Epsilon(const int,const int,const int,const int,int=1); Complex EpsCalc(const int,const int,const int,const int,const int); template Complex EpsCalc(const int,const int,const int,const int); }; template <> Complex Basic_Epsilonfunc::EpsCalc<0>(const int,const int,const int,const int); template <> Complex Basic_Epsilonfunc::EpsCalc<1>(const int,const int,const int,const int); template <> Complex Basic_Epsilonfunc::EpsCalc<2>(const int,const int,const int,const int); template <> Complex Basic_Epsilonfunc::EpsCalc<3>(const int,const int,const int,const int); template <> Complex Basic_Epsilonfunc::EpsCalc<4>(const int,const int,const int,const int); /*! \class Basic_Func The mother class of all basic functions and calculator funtions. ... ...
 ... ... @@ -133,8 +133,8 @@ namespace AMEGIC { inline int MomlistSize() { return Momlist.size(); } inline int Sign(int i) { return b[ATOOLS::iabs(i)]; } inline ATOOLS::Flavour GetFlavour(int i) { return fl[ATOOLS::iabs(i)]; } inline ATOOLS::Vec4D Momentum(int i) { return Momlist[i].mom; } inline ATOOLS::Vec4D MomentumImg(int i) { return Momlist[i].mom_img; } inline ATOOLS::Vec4D& Momentum(int i) { return Momlist[i].mom; } inline ATOOLS::Vec4D& MomentumImg(int i) { return Momlist[i].mom_img; } inline bool IsComplex(const int i) { return ( Momlist[i].type==mt::p_p || Momlist[i].type==mt::p_m || Momlist[i].type==mt::p_l || Momlist[i].type==mt::p_s || Momlist[i].type==mt::p_si); ... ...
 ... ... @@ -188,7 +188,8 @@ class VVSS4_Calc : public Zfunc_Calc, public Basic_Zfunc, public Basic_Xfunc, public Basic_Mfunc, public Basic_Vfunc { public Basic_Vfunc, public Basic_Epsilonfunc { public: AnomalousV3_Calc(Virtual_String_Generator* _sgen,Basic_Sfuncs* _BS); ~AnomalousV3_Calc() {} ... ...
 ... ... @@ -4,6 +4,7 @@ libZfunctions_la_SOURCES = Basic_Func.C Basic_Sfuncs.C Basic_Pfunc.C \ Basic_Mfunc.C Basic_MassTermfunc.C \ Basic_Vfunc.C Basic_Xfunc.C Basic_Yfunc.C \ Basic_Zfunc.C \ Basic_Epsilonfunc.C \ G4_Calc.C V4_Calc.C \ AnomalousV3_Calc.C AnomalousV4_Calc.C \ VVV_Calc.C ZLED_Calc.C Loops_Calc.C\ ... ...
 ... ... @@ -8,8 +8,7 @@ Point::Point(const Point& copy) { Color = new Color_Function; Lorentz = new Lorentz_Function; middle = 0; ncpl = 4; cpl = new Complex[4]; cpl.clear(); nextra = 0; *this = copy; ... ... @@ -21,8 +20,7 @@ Point::Point(int extra) : nextra(extra) { Color = new Color_Function; Lorentz = new Lorentz_Function; middle = 0; ncpl = 4; cpl = new Complex[4]; cpl.clear(); if (nextra>0) extrafl = new ATOOLS::Flavour[nextra]; } ... ... @@ -41,7 +39,7 @@ Point& Point::operator=(const Point& p) { nextra = p.nextra; if (nextra>0) { extrafl = new ATOOLS::Flavour[nextra]; for(short int i=0;i
 ... ... @@ -21,8 +21,7 @@ public: Point * middle; Point * prev; Single_Vertex * v; Complex * cpl; int ncpl; std::vector cpl; Color_Function * Color; Lorentz_Function * Lorentz; ... ... @@ -33,7 +32,6 @@ public: ~Point() { if (nextra>0) delete[] extrafl; delete[] cpl; delete Color; delete Lorentz; } ... ... @@ -42,6 +40,7 @@ public: void ResetProps(); void ResetFlag(); Point* CopyList(Point* p); size_t Ncpl() const {return cpl.size();} }; // Format of a Point to transport via MPI: ... ...
 ... ... @@ -35,10 +35,16 @@ Interaction_Model_AEW::Interaction_Model_AEW(MODEL::Model_Base * _model, kappa_p = Kabbala(string("\\kappa^{gamma}"),ScalarConstant(std::string("kappa_gamma"))); lambda_p = Kabbala(string("\\lambda^{gamma}"),ScalarConstant(std::string("lambda_gamma"))); g4_p = Kabbala(string("g_4^{gamma}"),ScalarConstant(std::string("g4_gamma"))); g5_p = Kabbala(string("g_5^{gamma}"),ScalarConstant(std::string("g5_gamma"))); kappat_p = Kabbala(string("\\kappat^{gamma}"),ScalarConstant(std::string("kappat_gamma"))); lambdat_p= Kabbala(string("\\lambdat^{gamma}"),ScalarConstant(std::string("lambdat_gamma"))); g1_Z = Kabbala(string("g_1^{Z}"),ScalarConstant(std::string("g1_Z"))); kappa_Z = Kabbala(string("\\kappa^{Z}"),ScalarConstant(std::string("kappa_Z"))); lambda_Z = Kabbala(string("\\lambda^{Z}"),ScalarConstant(std::string("lambda_Z"))); g4_Z = Kabbala(string("g_4^{Z}"),ScalarConstant(std::string("g4_Z"))); g5_Z = Kabbala(string("g_5^{Z}"),ScalarConstant(std::string("g4_Z"))); kappat_Z = Kabbala(string("\\kappat^{Z}"),ScalarConstant(std::string("kappat_Z"))); lambdat_Z= Kabbala(string("\\lambdat^{Z}"),ScalarConstant(std::string("lambdat_Z"))); } void Interaction_Model_AEW::c_FFV(std::vector& vertex,int & vanz) ... ... @@ -215,13 +221,21 @@ void Interaction_Model_AEW::c_VVV(std::vector& vertex,int& vanz) vertex[vanz].cpl[1] = kcpl1.Value(); //kappa vertex[vanz].cpl[2] = kcpl2.Value(); //lambda/m_W^2 vertex[vanz].cpl[3] = kcpl3.Value(); //i*g4 kcpl1 = kcpl*kappat_p; kcpl2 = kcpl*lambdat_p/(Wyuk*Wyuk); kcpl3 = kcpl*M_I*g5_p; vertex[vanz].cpl.push_back(kcpl3.Value()); //g1 vertex[vanz].cpl.push_back(kcpl1.Value()); //kappa vertex[vanz].cpl.push_back(kcpl2.Value()); //lambda/m_W^2 vertex[vanz].cpl.push_back(kcpl0.Value()); //lambda/m_W^2 vertex[vanz].ncf = 1; vertex[vanz].Color = new Color_Function(cf::None); vertex[vanz].nlf = 1; vertex[vanz].Lorentz = new Lorentz_Function(lf::AGauge3); vertex[vanz].Lorentz->SetParticleArg(1,0,2); vertex[vanz].Lorentz->SetParticleArg(1,2,0); vertex[vanz].on = 1; vertex.push_back(Single_Vertex());vanz++; ... ... @@ -238,18 +252,25 @@ void Interaction_Model_AEW::c_VVV(std::vector& vertex,int& vanz) kcpl1 = kcpl*kappa_Z; kcpl2 = kcpl*lambda_Z/(Wyuk*Wyuk); kcpl3 = kcpl*M_I*g4_Z; vertex[vanz].cpl[0] = kcpl0.Value(); //g1 vertex[vanz].cpl[1] = kcpl1.Value(); //kappa vertex[vanz].cpl[2] = kcpl2.Value(); //lambda/m_W^2 vertex[vanz].cpl[3] = kcpl3.Value(); //i*g4 kcpl1 = kcpl*kappat_Z; kcpl2 = kcpl*lambdat_Z/(Wyuk*Wyuk); kcpl3 = kcpl*M_I*g5_Z; vertex[vanz].cpl.push_back(kcpl3.Value()); //g1 vertex[vanz].cpl.push_back(kcpl1.Value()); //kappa vertex[vanz].cpl.push_back(kcpl2.Value()); //lambda/m_W^2 vertex[vanz].cpl.push_back(kcpl0.Value()); //lambda/m_W^2 vertex[vanz].ncf = 1;