示例#1
0
void OpenLoops_Virtual::Calc(const Vec4D_Vector& momenta) {
  Vec4D_Vector m_moms(momenta);

  s_interface->SetParameter("alpha", AlphaQED());
  s_interface->SetParameter("alphas", AlphaQCD());
  s_interface->SetParameter("mu", sqrt(m_mur2));
  s_interface->FlushParameters();
  
  double M2L0;
  vector<double> M2L1(3), M2L2(5), IRL1(3), IRL2(5);

  MyTiming* timing;
  if (msg_LevelIsDebugging()) {
    timing = new MyTiming();
    timing->Start();
  }
  m_permutationfunc(&m_permutation[0]);
  m_amp2(&m_moms[0][0], &M2L0, &M2L1[0], &IRL1[0], &M2L2[0], &IRL2[0]);
  if (msg_LevelIsDebugging()) {
    timing->Stop();
    PRINT_INFO(momenta[2][0]<<" "<<m_flavs<<" user="******" real="<<timing->RealTime()<<" sys="<<timing->SystemTime());
  }

  double B(M2L0), V_finite(M2L1[0]), V_eps(M2L1[1]), V_eps2(M2L1[2]);

  // factor which by Sherpa convention has to be divided out at this stage
  double factor=B*AlphaQCD()/2.0/M_PI;

  m_born=B;
  m_res.Finite()=(V_finite/factor);
  m_res.IR()=(V_eps/factor);
  m_res.IR2()=(V_eps2/factor);
}
示例#2
0
double OpenLoops_Born::Calc(const Vec4D_Vector& momenta)
{
  Vec4D_Vector m_moms(momenta);

  s_interface->SetParameter("alpha", AlphaQED());
  s_interface->SetParameter("alphas", AlphaQCD());
  s_interface->FlushParameters();

  double M2L0;
  std::vector<double> M2L1(3), M2L2(5), IRL1(3), IRL2(5);

  m_permutationfunc(&m_permutation[0]);
  m_amp2(&m_moms[0][0], &M2L0, &M2L1[0], &IRL1[0], &M2L2[0], &IRL2[0]);

  if (IsZero(M2L1[1]) && IsZero(M2L1[2]) &&
      IsZero(IRL1[1]) && IsZero(IRL1[2]) &&
      IsZero(M2L2[1]) && IsZero(M2L2[2]) && IsZero(M2L2[3]) && IsZero(M2L2[4]) &&
      IsZero(IRL2[1]) && IsZero(IRL2[2]) && IsZero(IRL2[3]) && IsZero(IRL2[4])) {
    // OL returns ME2 including 1/symfac, but Calc is supposed to return it
    // without 1/symfac, thus multiplying with symfac here
    if (IsZero(M2L0)) return m_symfac*M2L2[0];
    else return m_symfac*M2L0;
  }
  else {
    PRINT_INFO("Poles non-zero. Returning 0.");
    return 0.0;
  }
}
示例#3
0
double OpenLoops_Born::Calc(const Vec4D_Vector& momenta)
{
  OpenLoops_Interface::SetParameter("alpha", AlphaQED());
  OpenLoops_Interface::SetParameter("alphas", AlphaQCD());
  
  double result;
  if (m_amptype==1) OpenLoops_Interface::EvaluateTree(m_ol_id, momenta, result);
  if (m_amptype==12) OpenLoops_Interface::EvaluateLoop2(m_ol_id, momenta, result);

  // OL returns ME2 including 1/symfac, but Calc is supposed to return it
  // without 1/symfac, thus multiplying with symfac here
  return m_symfac*result;
}