Skip to content

Disagreement with sector decomposition #36

@lgoetzfried

Description

@lgoetzfried

I recently computed some triangle and box integrals with QCDLoop and compared them to sector decomposition results from pysecdec. This was actually intended to compute some subtopologies of a pentagon, thus the variables are adapted to that. At a certain point in phase-space, I find disagreement for several triangles and boxes.
For example, if I run the following C++ program:

#include <iostream>
#include <iomanip>
#include <complex>
#include <qcdloop/qcdloop.h>
#include <qcdloop/cache.h>

using namespace std::numbers;
using std::vector;
using std::complex;
using std::cout;
using std::endl;
using std::setprecision;
using std::scientific;
using std::rand;

int main()
{  
  double mu2 = ql::Pow(1.0,2.0);
  
  complex<double> m12 = complex<double>(1.0,-0.1); // internal mass square
  double m22 = 5./2.; // off-shellness of one of the five particles
  double s12 = 7.; // five-particle Mandelstam invariants
  double s23 = -(7./2.);
  double s34 = 23./2.;
  double s45 = -(5./2.);
  double s15 = 6.;
  
  vector<complex<double>> res(3);
  
  // pysecdec results
  complex<double> pysecValue0 = 0;
  complex<double> pysecValue1 = 0;
  complex<double> pysecValue2 = complex<double>(0.3313048590525264,-0.33478605007189316);
  
  // QCDloop results
  
  /**
   * Triangle
   */
  vector<complex<double>> m = {m12, 0.0, 0.0};
  vector<double> p = {s12, s34, 0.0};
  cout << ql::red << "\n====== Triangle 6 ======" << ql::def << endl;
  ql::Triangle<complex<double>,complex<double>,double> tr;
  tr.integral(res, mu2, m, p);
  cout << "QCDLoop - pysecdec:" << endl;
  // pysecdec (as I set it up) uses a different normalization than QCDLoop. Hence the "-pow(pi,2)/12. * res[2]".
  cout << "eps^(" << 0 << ")\t\t" << (res[0]-pow(pi,2)/12. * res[2] - pysecValue2) << endl;
  cout << "eps^(" << -1 << ")\t" << (res[1] - pysecValue1) << endl;
  cout << "eps^(" << -2 << ")\t" << (res[2] - pysecValue0) << endl; 
  cout << "pysecdec:" << endl;
  cout << "\teps^(" << 0 << ")\t\t" << (pysecValue2) << endl;
  cout << "\teps^(" << -1 << ")\t" << (pysecValue1) << endl;
  cout << "\teps^(" << -2 << ")\t" << (pysecValue0) << endl; 

  return 0;
}

I obtain a deviation of 2.37609 + 0.859857*I - which appears quite huge for me. Moreover, this is just an example, for other diagrams I obtain similar deviations.

My PySecDec setup is

#!/usr/bin/env python3
import pySecDec as psd

if __name__ == "__main__":

    li = psd.LoopIntegralFromGraph(
        internal_lines = [['m1',[5,1]], ['m1',[1,2]], ['0',[2,3]], ['0',[3,4]], ['0',[4,5]]],
        external_lines = [['p1',1], ['p2',2], ['p3',3], ['p4',4], ['p5',5]],
        replacement_rules = [
            ('p1', '-p2-p3-p4-p5'),
            ('p2*p2', '0'),
            ('p3*p3', '0'),
            ('p4*p4', '0'),
            ('p5*p5', '0'),
            ('p2*p3', 's23/2'),
            ('p2*p4', 's15/2-s23/2-s34/2'),
            ('p2*p5', 'm22/2-s12/2-s15/2+s34/2'),
            ('p3*p4', 's34/2'),
            ('p3*p5', 's12/2-s34/2-s45/2'),
            ('p4*p5', 's45/2'),
            ('m1**2', 'm12')
        ],
        powerlist = [1, 0, 1, 0, 1]
    )

    Mandelstam_symbols = ['m22','s12','s23','s34','s45','s15']
    mass_symbols = ['m12']

    psd.loop_package(
        name = 'triangle6',

        loop_integral = li,

        real_parameters = Mandelstam_symbols,
        complex_parameters = mass_symbols,

        requested_orders = [2],
        additional_prefactor = 'exp(eps*EulerGamma)'
    )

(and an integration script which I did not want to attach here because it bloats up the post). To the best of my knowledge, this should define the same diagram. Indeed, if I instead run the very same test with the imaginary part of m12 set to zero, I find agreement.

I have tested also for my relevant configuration several other triangles and boxes. For some of them, I found agreement, for some not; I can share the list with you if you want. Moreover, I have myself written a library to compute these diagrams analytically, which agrees with pysecdec but disagrees with QCDLoop in these cases.

If there is anything more on information that I can provide you, please let me know.

Best regards,
Linus Götzfried

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions