Commit 45e0f6c8 authored by Tanju Gleisberg's avatar Tanju Gleisberg
Browse files

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<Complex>& 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;j<v->cpl.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 <Complex> 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;j<vl.size();j++) {
if (MatchVertex(vl[j],flav,cpl)) {
for (int k=0;k<4;k++) p->cpl[k] = cpl[k];
p->cpl.clear();
for (size_t k=0;k<cpl.size();k++) p->cpl.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<Complex> 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;k<cpl.size();k++) p->cpl.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;j<psave.ncpl;j++)
p[i].cpl[j] = psave.cpl[j];
count += psave.ncpl;
for (short int j=0;j<pdel[i].ncpl;j++)
p[i].cpl[count+j] = pdel[i].cpl[j];
p[i].ncpl = ncpl;
p[i].cpl.clear();
for (size_t j=0;j<psave.Ncpl();j++) p[i].cpl.push_back(psave.cpl[j]);
count += psave.Ncpl();
for (size_t j=0;j<pdel[i].Ncpl();j++) p[i].cpl.push_back(pdel[i].cpl[j]);
//previous couplings too
int hit = -1;
......@@ -776,18 +775,13 @@ void Amplitude_Generator::Unite(Point* p,Point* pdel)
}
if (hit!=-1) {
psave = p[hit];
int ncpl = pdel[hit].ncpl+p[hit].ncpl;
delete[] p[hit].cpl;
p[hit].cpl = new Complex[ncpl];
p[hit].cpl.clear();
//Couplings
count = 0;
for (short int j=0;j<psave.ncpl;j++)
p[hit].cpl[j] = psave.cpl[j];
count += psave.ncpl;
for (short int j=0;j<pdel[hit].ncpl;j++)
p[hit].cpl[count+j] = pdel[hit].cpl[j];
p[hit].ncpl = ncpl;
for (size_t j=0;j<psave.Ncpl();j++) p[hit].cpl.push_back(psave.cpl[j]);
count += psave.Ncpl();
for (size_t j=0;j<pdel[hit].Ncpl();j++) p[hit].cpl.push_back(pdel[hit].cpl[j]);
}
else
ATOOLS::msg.Error()<<"ERROR in Amplitude_Generator"<<endl
......@@ -1325,7 +1319,8 @@ int Amplitude_Generator::ShrinkProps(Point*& p,Point*& pnext, Point*& pcopy, Poi
hit = 1;
pcopy->v = (*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<Complex>&);
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<Lorentz_Function> &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!"<<std::endl;
if (!IsZero(X(0,0)) ||
!IsZero(X(1,1)) ||
!IsZero(X(2,2))) {
std::cerr<<"Error in AnomalousV3_Calc::Do(): not cutted vertex!"<<std::endl;
abort();
}
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 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<<sarg[0]<<" "<<sarg[1]<<" "<<sarg[2]<<" "<<sarg[3]<<" "<<sarg[4]<<" "<<sarg[5]<<std::endl;
Kabbala t5 = Epsilon(sarg[5],sarg[4],sarg[1],sarg[3],1)-
Epsilon(sarg[5],sarg[4],sarg[2],sarg[3],1);
Kabbala t6 = Epsilon(sarg[5],sarg[4],sarg[0],sarg[3],1);
Kabbala t7 =
Epsilon(sarg[4],sarg[2],sarg[0],sarg[3],1)*X(2,1)+
Epsilon(sarg[1],sarg[5],sarg[0],sarg[3],1)*X(1,2)-
Epsilon(sarg[4],sarg[5],sarg[0],sarg[3],1)*V(1,2)-
Epsilon(sarg[1],sarg[2],sarg[0],sarg[3],1)*Z(1,2);
// std::cout<<t5.Value()<<" "<<t6.Value()<<" "<<t7.Value()<<std::endl;
return f1*t1+f2*t2+f3*t3+f4*t4+t5*f5+t6*f6+t7*f7;
}
#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])<BS->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 <int> 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<nextra;i++) extrafl[i] = p.extrafl[i];
for(int i=0;i<nextra;i++) extrafl[i] = p.extrafl[i];
}
left = p.left;
right = p.right;
......@@ -49,13 +47,9 @@ Point& Point::operator=(const Point& p) {
prev = p.prev;
v = p.v;
//cpl's
if (ncpl!=p.ncpl) {
delete[] cpl;
ncpl = p.ncpl;
cpl = new Complex[ncpl];
}
cpl.clear();
for(short int i=0;i<ncpl;i++) cpl[i] = p.cpl[i];
for(size_t i=0;i<p.Ncpl();i++) cpl.push_back(p.cpl[i]);
}
return *this;
}
......
......@@ -21,8 +21,7 @@ public:
Point * middle;
Point * prev;
Single_Vertex * v;
Complex * cpl;
int ncpl;
std::vector<Complex> 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<Single_Vertex>& vertex,int & vanz)
......@@ -215,13 +221,21 @@ void Interaction_Model_AEW::c_VVV(std::vector<Single_Vertex>& 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<Single_Vertex>& 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;