13
13
import numpy .typing as npt
14
14
15
15
from .. import basis_rotation as br
16
- from .. import interpolation
16
+ from .. import interpolation , msbar_masses
17
17
from .. import version as vmod
18
- from ..quantities .heavy_quarks import HeavyQuarkMasses , MatchingScales , QuarkMassScheme
18
+ from ..couplings import couplings_mod_ev
19
+ from ..quantities .heavy_quarks import (
20
+ HeavyQuarkMasses ,
21
+ MatchingRatios ,
22
+ MatchingScales ,
23
+ QuarkMassScheme ,
24
+ )
19
25
from .dictlike import DictLike
20
26
from .types import (
21
27
CouplingsRef ,
@@ -52,11 +58,35 @@ class TheoryCard(DictLike):
52
58
"""List of heavy quark masses."""
53
59
quark_masses_scheme : QuarkMassScheme
54
60
"""Scheme used to specify heavy quark masses."""
55
- matching : MatchingScales
61
+ matching : MatchingRatios
56
62
"""Matching scale of heavy quark masses"""
57
63
xif : float
58
64
"""Ratio between factorization scale and process scale."""
59
65
66
+ @property
67
+ def matching_scales (self ) -> MatchingScales :
68
+ """Compute matching scales."""
69
+ return np .power (list (iter (self .matching )), 2.0 ) * np .power (
70
+ list (iter (self .quark_masses )), 2.0
71
+ )
72
+
73
+
74
+ def masses (theory : TheoryCard , evmeth : EvolutionMethod ):
75
+ """Compute masses in the chosen scheme."""
76
+ if theory .quark_masses_scheme is QuarkMassScheme .MSBAR :
77
+ return msbar_masses .compute (
78
+ theory .quark_masses ,
79
+ theory .couplings ,
80
+ theory .order ,
81
+ couplings_mod_ev (evmeth ),
82
+ np .power (list (iter (theory .matching )), 2.0 ),
83
+ xif2 = theory .xif ** 2 ,
84
+ ).tolist ()
85
+ if theory .quark_masses_scheme is QuarkMassScheme .POLE :
86
+ return [mq .value ** 2 for mq in theory .quark_masses ]
87
+
88
+ raise ValueError (f"Unknown mass scheme '{ theory .quark_masses_scheme } '" )
89
+
60
90
61
91
@dataclass
62
92
class Debug (DictLike ):
@@ -80,6 +110,10 @@ class Configs(DictLike):
80
110
"""
81
111
ev_op_iterations : int
82
112
"""Number of intervals in which to break the global path."""
113
+ scvar_method : Optional [ScaleVariationsMethod ]
114
+ """"""
115
+ inversion_method : Optional [InversionMethod ]
116
+ """Which method to use for backward matching conditions."""
83
117
interpolation_polynomial_degree : int
84
118
"""Degree of elements of the intepolation polynomial basis."""
85
119
interpolation_is_log : bool
@@ -90,10 +124,6 @@ class Configs(DictLike):
90
124
"""If `true` do polarized evolution."""
91
125
time_like : bool
92
126
"""If `true` do time-like evolution."""
93
- scvar_method : Optional [ScaleVariationsMethod ]
94
- """"""
95
- inversion_method : Optional [InversionMethod ]
96
- """Which method to use for backward matching conditions."""
97
127
n_integration_cores : int = 1
98
128
"""Number of cores used to parallelize integration."""
99
129
0 commit comments