#include "ATOOLS/Math/Random.H" #include "ATOOLS/Org/Run_Parameter.H" #include "ATOOLS/Phys/Flow.H" #include "MODEL/Main/Running_AlphaS.H" #include "MODEL/Main/Running_AlphaQED.H" #include "MODEL/Main/Model_Base.H" #include "PHASIC++/Process/External_ME_Args.H" #include "PHASIC++/Process/Process_Base.H" #include "MODEL/UFO/UFO_Model.H" #include "EXTRA_XS/Main/ME2_Base.H" #define PropID(i,j) ((1<:: operator()(const External_ME_Args &args) const { if (dynamic_cast(MODEL::s_model)) return NULL; const Flavour_Vector fl = args.Flavours(); if (fl.size()!=4) return NULL; if (fl[0].IsQuark() && fl[1].IsQuark() && fl[0]!=fl[1] && ((fl[2]==fl[0] && fl[3]==fl[1]) || (fl[3]==fl[0] && fl[2]==fl[1]))) { if (args.m_orders[0]==2 && args.m_orders[1]==0) { return new XS_q1q2_q1q2(args); } } return NULL; } XS_q1q2_q1q2::XS_q1q2_q1q2(const External_ME_Args& args): ME2_Base(args) { const ATOOLS::Flavour_Vector& fl = args.Flavours(); for (short int i=0;i<4;i++) m_colours[i][0] = m_colours[i][1] = 0; m_r=!(fl[0] == fl[2]); m_a=fl[0].IsAnti(); m_p=fl[1].IsAnti(); m_g=sqrt(4.*M_PI*MODEL::s_model->ScalarConstant("alpha_S")); m_m12=sqr(m_flavs[0].Mass()); m_m22=sqr(m_flavs[1].Mass()); m_oew=0; m_oqcd=2; if (!m_r) { m_cfls[PropID(0,2)].push_back(kf_gluon); m_cfls[PropID(1,3)].push_back(kf_gluon); } else { m_cfls[PropID(1,2)].push_back(kf_gluon); m_cfls[PropID(0,3)].push_back(kf_gluon); } } double XS_q1q2_q1q2::operator()(const Vec4D_Vector& mom) { double s=(mom[0]+mom[1]).Abs2(); double t=(mom[0]-mom[2+m_r]).Abs2(); double u=(mom[0]-mom[3-m_r]).Abs2(); //if (sqq', set scale u "<qqb', set scale s "<:: operator()(const External_ME_Args& args) const { if (dynamic_cast(MODEL::s_model)) return NULL; Flavour_Vector fl=args.Flavours(); if (fl.size()!=4) return NULL; if (fl[0].IsQuark() && fl[1]==fl[0].Bar() && fl[2].IsQuark() && fl[3]==fl[2].Bar() && fl[0]!=fl[2] && fl[0]!=fl[3]) { if (args.m_orders[0]==2 && args.m_orders[1]==0) { return new XS_q1qbar1_q2qbar2(args); } } return NULL; } XS_q1qbar1_q2qbar2::XS_q1qbar1_q2qbar2(const External_ME_Args& args): ME2_Base(args) { const ATOOLS::Flavour_Vector fl = args.Flavours(); for (short int i=0;i<4;i++) m_colours[i][0] = m_colours[i][1] = 0; m_r=!(fl[0].IsAnti()==fl[2].IsAnti()); m_a=fl[0].IsAnti(); m_p=1-m_a; m_g=sqrt(4.*M_PI*MODEL::s_model->ScalarConstant("alpha_S")); m_m12=sqr(m_flavs[0].Mass()); m_m32=sqr(m_flavs[2].Mass()); m_oew=0; m_oqcd=2; m_cfls[PropID(0,1)].push_back(kf_gluon); m_cfls[PropID(2,3)].push_back(kf_gluon); } double XS_q1qbar1_q2qbar2::operator()(const Vec4D_Vector& mom) { double s=(mom[0]+mom[1]).Abs2(); double t=(mom[0]-mom[2]).Abs2(); double u=(mom[0]-mom[3]).Abs2(); //if (sq'qb', set scale t "<:: operator()(const External_ME_Args &args) const { if (dynamic_cast(MODEL::s_model)) return NULL; const Flavour_Vector& fl=args.Flavours(); if (fl.size()!=4) return NULL; if (fl[0].IsQuark() && fl[1]==fl[0] && fl[2]==fl[0] && fl[3]==fl[0]) { if (args.m_orders[0]==2 && args.m_orders[1]==0) { return new XS_q1q1_q1q1(args); } } return NULL; } XS_q1q1_q1q1::XS_q1q1_q1q1(const External_ME_Args& args): ME2_Base(args) { const Flavour_Vector& fl=args.Flavours(); for (short int i=0;i<4;i++) m_colours[i][0] = m_colours[i][1] = 0; m_a=fl[0].IsAnti(); m_g=sqrt(4.*M_PI*MODEL::s_model->ScalarConstant("alpha_S")); m_m12=sqr(m_flavs[0].Mass()); m_oew=0; m_oqcd=2; m_cfls[PropID(0,2)].push_back(kf_gluon); m_cfls[PropID(0,3)].push_back(kf_gluon); m_cfls[PropID(1,2)].push_back(kf_gluon); m_cfls[PropID(1,3)].push_back(kf_gluon); } double XS_q1q1_q1q1::operator()(const Vec4D_Vector& mom) { double s=(mom[0]+mom[1]).Abs2(); double t=(mom[0]-mom[2]).Abs2(); double u=(mom[0]-mom[3]).Abs2(); //if (s (Mt+Mu) * ran->Get()) { msg_Debugging()<<"xs: qq->qq, set scale u "<qq, set scale t "<:: operator()(const External_ME_Args &args) const { if (dynamic_cast(MODEL::s_model)) return NULL; const Flavour_Vector& fl=args.Flavours(); if (fl.size()!=4) return NULL; if (fl[0].IsQuark() && fl[1]==fl[0].Bar() && ((fl[2]==fl[0] && fl[3]==fl[1]) || (fl[3]==fl[0] && fl[2]==fl[1]))) { if (args.m_orders[0]==2 && args.m_orders[1]==0) { return new XS_q1qbar1_q1qbar1(args); } } return NULL; } XS_q1qbar1_q1qbar1::XS_q1qbar1_q1qbar1(const External_ME_Args& args): ME2_Base(args) { const Flavour_Vector& fl=args.Flavours(); for (short int i=0;i<4;i++) m_colours[i][0] = m_colours[i][1] = 0; m_a=fl[0].IsAnti(); m_p=1-m_a; m_r=(fl[0]!=fl[2]); m_g=sqrt(4.*M_PI*MODEL::s_model->ScalarConstant("alpha_S")); m_m12=sqr(m_flavs[0].Mass()); m_oew=0; m_oqcd=2; m_cfls[PropID(0,1)].push_back(kf_gluon); m_cfls[PropID(2,3)].push_back(kf_gluon); if (!m_r) { m_cfls[PropID(0,2)].push_back(kf_gluon); m_cfls[PropID(1,3)].push_back(kf_gluon); } else { m_cfls[PropID(1,2)].push_back(kf_gluon); m_cfls[PropID(0,3)].push_back(kf_gluon); } } double XS_q1qbar1_q1qbar1::operator()(const Vec4D_Vector& mom) { double s=(mom[0]+mom[1]).Abs2(); double t=(mom[0]-mom[2+m_r]).Abs2(); double u=(mom[0]-mom[3-m_r]).Abs2(); //if (s (Mt+Ms) * ran->Get()) { msg_Debugging()<<"xs: qqb->qqb, set scale t "<qqb, set scale s "<:: operator()(const External_ME_Args &args) const { if (dynamic_cast(MODEL::s_model)) return NULL; const Flavour_Vector fl=args.Flavours(); if (fl.size()!=4) return NULL; if (fl[0].IsQuark() && fl[1]==fl[0].Bar() && fl[2].IsGluon() && fl[3].IsGluon()) { if (args.m_orders[0]==2 && args.m_orders[1]==0) { return new XS_q1qbar1_gg(args); } } return NULL; } XS_q1qbar1_gg::XS_q1qbar1_gg(const External_ME_Args& args): ME2_Base(args) { const Flavour_Vector fl=args.Flavours(); for (short int i=0;i<4;i++) m_colours[i][0] = m_colours[i][1] = 0; m_a=fl[0].IsAnti(); m_p=1-m_a; m_m12=sqr(m_flavs[0].Mass()); m_g=sqrt(4.*M_PI*MODEL::s_model->ScalarConstant("alpha_S")); m_oew=0; m_oqcd=2; m_cfls[PropID(0,1)].push_back(kf_gluon); m_cfls[PropID(2,3)].push_back(kf_gluon); m_cfls[PropID(0,2)].push_back(fl[0].Bar()); m_cfls[PropID(0,3)].push_back(fl[0].Bar()); m_cfls[PropID(1,2)].push_back(fl[1].Bar()); m_cfls[PropID(1,3)].push_back(fl[1].Bar()); } double XS_q1qbar1_gg::operator()(const Vec4D_Vector& mom) { double s=(mom[0]+mom[1]).Abs2(); double t=(mom[0]-mom[2]).Abs2(); double u=(mom[0]-mom[3]).Abs2(); //if (s (Mt+Mu) * ran->Get()) { msg_Debugging()<<"xs: qqb->gg, set scale s/t "<gg, set scale s/u "<:: operator()(const External_ME_Args &args) const { if (dynamic_cast(MODEL::s_model)) return NULL; const Flavour_Vector fl=args.Flavours(); if (fl.size()!=4) return NULL; if (fl[0].IsGluon() && fl[1].IsGluon() && fl[2].IsQuark() && fl[3]==fl[2].Bar()) { if (args.m_orders[0]==2 && args.m_orders[1]==0) { return new XS_gg_q1qbar1(args); } } return NULL; } XS_gg_q1qbar1::XS_gg_q1qbar1(const External_ME_Args& args): ME2_Base(args) { const Flavour_Vector fl = args.Flavours(); for (short int i=0;i<4;i++) m_colours[i][0] = m_colours[i][1] = 0; m_r=fl[2].IsAnti(); m_g=sqrt(4.*M_PI*MODEL::s_model->ScalarConstant("alpha_S")); m_m32=sqr(m_flavs[2].Mass()); m_oew=0; m_oqcd=2; m_cfls[PropID(0,1)].push_back(kf_gluon); m_cfls[PropID(2,3)].push_back(kf_gluon); m_cfls[PropID(0,2)].push_back(fl[2]); m_cfls[PropID(1,2)].push_back(fl[2]); m_cfls[PropID(0,3)].push_back(fl[3]); m_cfls[PropID(1,3)].push_back(fl[3]); } double XS_gg_q1qbar1::operator()(const Vec4D_Vector& mom) { double s=(mom[0]+mom[1]).Abs2(); double t=(mom[0]-mom[2]).Abs2(); double u=(mom[0]-mom[3]).Abs2(); //if (s (Mt+Mu) * ran->Get()) { msg_Debugging()<<"xs: gg->qqb, set scale t/s "<qqb, set scale u/s "<:: operator()(const External_ME_Args &args) const { if (dynamic_cast(MODEL::s_model)) return NULL; const Flavour_Vector fl = args.Flavours(); if (fl.size()!=4) return NULL; if (((fl[0].IsQuark() && fl[1].IsGluon()) && ((fl[2]==fl[0] && fl[3].IsGluon()) || (fl[3]==fl[0] && fl[2].IsGluon()))) || ((fl[1].IsQuark() && fl[0].IsGluon()) && ((fl[2]==fl[1] && fl[3].IsGluon()) || (fl[3]==fl[1] && fl[2].IsGluon())))) { if (args.m_orders[0]==2 && args.m_orders[1]==0) { return new XS_q1g_q1g(args); } } return NULL; } XS_q1g_q1g::XS_q1g_q1g(const External_ME_Args& args): ME2_Base(args) { const Flavour_Vector fl = args.Flavours(); for (short int i=0;i<4;i++) m_colours[i][0] = m_colours[i][1] = 0; m_iniq=0; m_swaput=0; if (fl[1].IsQuark()){ m_iniq=1; m_swaput=1; } m_finq=2; if (fl[3].IsQuark()) { m_finq=3; if (m_swaput) m_swaput=0; else m_swaput=1; } m_a=fl[m_iniq].IsAnti(); m_p=1-m_a; m_mq2=sqr(m_flavs[m_iniq].Mass()); m_g=sqrt(4.*M_PI*MODEL::s_model->ScalarConstant("alpha_S")); m_oew=0; m_oqcd=2; m_cfls[PropID(0,1)].push_back(fl[m_iniq].Bar()); m_cfls[PropID(2,3)].push_back(fl[m_finq]); m_cfls[PropID((1-m_iniq),m_finq)].push_back(fl[m_finq]); m_cfls[PropID((5-m_finq),m_finq)].push_back(fl[m_finq]); m_cfls[PropID(m_iniq,(5-m_finq))].push_back(fl[m_iniq].Bar()); m_cfls[PropID(m_iniq,(1-m_iniq))].push_back(fl[m_iniq].Bar()); } double XS_q1g_q1g::operator()(const Vec4D_Vector& mom) { double s=(mom[0]+mom[1]).Abs2(); double t=(mom[0]-mom[2]).Abs2(); double u=(mom[0]-mom[3]).Abs2(); //if (s(t,u); double sp(s-m_mq2), up(u-m_mq2); double Ms(4.0/9.0*(sp*up-m_mq2*(4.0*(m_mq2+sp)+m_mq2*sp/t))/(sp*sp)); double Mu(4.0/9.0*(up*sp-m_mq2*(4.0*(m_mq2+up)+m_mq2*up/t))/(up*up)); double Mt(-(sp*sp+up*up+4.0*m_mq2*t)/(t*t)); return -sqr(m_g*m_g)*CouplingFactor(2,0)*(Ms+Mu+Mt); } bool XS_q1g_q1g::SetColours(const Vec4D_Vector& mom) { double s=(mom[0]+mom[1]).Abs2(); double t=(mom[0]-mom[2]).Abs2(); double u=(mom[0]-mom[3]).Abs2(); if (m_swaput) std::swap(t,u); double sp(s-m_mq2), up(u-m_mq2); double Ms(4.0/9.0*(sp*up-m_mq2*(4.0*(m_mq2+sp)+m_mq2*sp/t))/(sp*sp)); double Mu(4.0/9.0*(up*sp-m_mq2*(4.0*(m_mq2+up)+m_mq2*up/t))/(up*up)); m_colours[m_iniq][m_a] = Flow::Counter(); m_colours[m_finq][m_a] = Flow::Counter(); if (Mu > (Ms+Mu) * ran->Get()) { /* 1====+----2, if fl[2].IsQuark() | | u | 0----+====3, if fl[0].IsQuark() */ m_colours[5-m_finq][m_a] = m_colours[m_iniq][m_a]; m_colours[5-m_finq][m_p] = m_colours[1-m_iniq][m_p] = Flow::Counter(); m_colours[1-m_iniq][m_a] = m_colours[m_finq][m_a]; if (dabs(t)>dabs(u)) { msg_Debugging()<<"xs: qg->qg, set scale t "<qg, set scale u "<s) { msg_Debugging()<<"xs: qg->qg, set scale t "<qg, set scale s "<:: operator()(const External_ME_Args &args) const { if (dynamic_cast(MODEL::s_model)) return NULL; const Flavour_Vector fl = args.Flavours(); if (fl.size()!=4) return NULL; if (fl[0].IsGluon() && fl[1].IsGluon() && fl[2].IsGluon() && fl[3].IsGluon()) { if (args.m_orders[0]==2 && args.m_orders[1]==0) { return new XS_gg_gg(args); } } return NULL; } XS_gg_gg::XS_gg_gg(const External_ME_Args& args): ME2_Base(args) { for (short int i=0;i<4;i++) m_colours[i][0] = m_colours[i][1] = 0; m_g=sqrt(4.*M_PI*MODEL::s_model->ScalarConstant("alpha_S")); m_oew=0; m_oqcd=2; m_cfls[PropID(0,1)].push_back(kf_gluon); m_cfls[PropID(0,2)].push_back(kf_gluon); m_cfls[PropID(0,3)].push_back(kf_gluon); m_cfls[PropID(1,2)].push_back(kf_gluon); m_cfls[PropID(1,3)].push_back(kf_gluon); m_cfls[PropID(2,3)].push_back(kf_gluon); } double XS_gg_gg::operator()(const Vec4D_Vector& mom) { double s=(mom[0]+mom[1]).Abs2(); double t=(mom[0]-mom[2]).Abs2(); double u=(mom[0]-mom[3]).Abs2(); //if (sGet() * (Ms+Mt+Mu); if (rr-Mt < 0.) { /* 0====++====2 || || t || 1====++====3 */ m_colours[2][0] = m_colours[0][0]; m_colours[3][1] = m_colours[1][1]; m_colours[0][1] = m_colours[1][0] = Flow::Counter(); m_colours[2][1] = m_colours[3][0] = Flow::Counter(); } else { if (rr-Mu-Mt < 0.) { /* 0====+\---==3 ||\ / || X u ||/ \ 1====+/---==2 */ m_colours[3][0] = m_colours[0][0]; m_colours[2][1] = m_colours[1][1]; m_colours[0][1] = m_colours[1][0] = Flow::Counter(); m_colours[3][1] = m_colours[2][0] = Flow::Counter(); } else { /* 0\\ //3 \\ s // | ===== | // \\ 1// \\2 */ m_colours[2][0] = m_colours[0][0]; m_colours[3][1] = m_colours[0][1] = Flow::Counter(); m_colours[2][1] = m_colours[1][1]; m_colours[3][0] = m_colours[1][0] = Flow::Counter(); } } return true; }