OpenLoops is hosted by Hepforge, IPPP Durham

Stability System and Parameters

OpenLoops offers a powerful and flexible system to asses the numerical stability of one-loop amplitudes and to avoid potential instabilities at exceptional phase-space points:

  1. Double precision scaling test (DP-scaling): OpenLoops can estimates the numerical stability using a so-called scaling test: at a given phase space point one-loop matrix elements are computed a second time by rescaling all dimensionful input parameters by a factor ξ. The degree of stability is quantified by checking that the amplitude fullfils the scaling behaviour M(ξ)=ξdM(1) expected from its mass dimension d.

    For the scaling test several options are available:
    1. Either the full matrix-element is calculated a second time (scaling_mode=2) or only the reduction to scalar integrals (scaling_mode=1).
    2. One-loop matrix elements are classified as unstable if their estimated error exceeds a certain threshold (stability_unstable). For deviation_mode=1 this threshold is set by normalising the estimated error of the the one-loop amplitude to the corresponding Born amplitude, and for deviation_mode=1 by normalising to the one-loop amplitude itself.
  2. Quadruple precision rescue system (QP-rescue): matrix elements which turn out to be unstable under the first scaling test can either be discarded (the value zero is returned for the matrix element) if their estimated error exceeds a certain threshold (stability_kill for loop amplitudes and stability_kill2 for loop-squared amplitudes) or recalculated using higher (quadruple) numerical precision as a rescue system, possibly obtained with a different library (redlib_qp). Also the stability_kill threshold is interpreted as described in (iii) depending on the deviation_mode switcher, while stability_kill2 is always referred to the relative error of the loop-squared amplitude.
  3. Quadruple precision scaling test (QP-scaling): at the level of the higher precision rescue system a new scaling test can be performed. Phase-space points which again turn out to be unstable, i.e., if their estimated error exceeds a certain threshold (stability_kill for loop amplitudes and stability_kill2 for loop-squared amplitudes), are then discarded (by setting the matrix element to zero).

Alternatively, if different independent reduction libraries are linked with OpenLoops instead of a scaling test the result of the two alternative libraries can be compared. For differing results again a reevaluation with higher numerical precision and possibly a scaling at this higher precision can be performed.

OpenLoops automatically logs the stability of all evaluated phase-space points. Resuts are written to disk either at the end of a run (by calling the finish() routine), adaptive with a logarithmically increasing number of evaluated phase-space points, or for every phase-space point.

The relative deviation between the scaled and the unscaled result can be returned and used as an estimate of the numerical accuracy for each phase-space point.


Parameter Decription Options
redlib1 primary reduction library 1: Collier-COLI
5: CutTools (default)
7: Collier-DD
redlib2 secondary reduction library 1: Collier-COLI
5: CutTools (default, not used)
7: Collier-DD
redlib_qp quad-precision reduction library 5: CutTools (default)
stability_mode select stability mode 11: only DP: no scaling, no rescue

12: DP-scaling, no rescue

13: DP-scaling and QP-rescue, no QP scaling

14: DP-scaling, QP-rescue and QP-scaling (default)

21: DP with primary library and possible DP reevaluation with secondary library (redlib2)

22: same as 21 and QP-rescue with quad-precision library (redlib_qp)

23: same as 22 and QP-scaling

31: only QP: no scaling

32: QP and QP-scaling
scaling_mode select what should be reevaluated for the scaling test 1: only reduction (default)
2: everything
deviation_mode select deviation mode for scaling test 1: based on K-factor (default)
2: based on relative deviation
stability_triggerratio target efficiency of K-factor based stability trigger (should not be << 0.1) double (default=0.2)
stability_unstable threshold above which a point is considered "unstable" double (default=0.01)
stability_kill threshold above which an unstable point is discarded double (default=1.)
stability_kill2 threshold obove which an unstable point is discarded in loop induced amplitudes double (default=10.)
stability_log select when stability logs should be written 0: never (default)
1: on finish() call
2: adaptive
3: always
stability_logdir set the (relative) path for the stability log files string (default="stability_log")