Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

FHMRUVV N3LO fits #1911

Merged
merged 5 commits into from
Feb 27, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions n3fit/src/n3fit/scripts/evolven3fit_new.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,11 @@ def main():
default=None,
help="ev_op_iterations for the EXA theory",
)
parser.add_argument(
"--use-fhmruvv",
action="store_true",
help="Use the FHMRUVV N3LO splitting splitting functions",
)
subparsers = parser.add_subparsers(title="actions", dest="actions")
construct_eko_parser(subparsers)
construct_eko_photon_parser(subparsers)
Expand All @@ -112,7 +117,11 @@ def main():
op_card_info = {
"configs": {"n_integration_cores": args.n_cores, "ev_op_iterations": args.ev_op_iterations}
}

theory_card_info = {}
if args.use_fhmruvv:
theory_card_info["use_fhmruvv"] = args.use_fhmruvv

if args.actions == "evolve":
cli.cli_evolven3fit_new(
args.configuration_folder,
Expand Down
Binary file modified validphys2/src/validphys/datafiles/theory.db
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
'n3lo 3pt hadronic': ['(0, 0, 0, 0)','(1, 0, 0, 0)','(2, 0, 0, 0)','(3, 0, 0, 0)','(4, 0, 0, 0)','(5, 0, 0, 0)','(6, 0, 0, 0)','(7, 0, 0, 0)','(8, 0, 0, 0)','(9, 0, 0, 0)','(10, 0, 0, 0)','(11, 0, 0, 0)','(12, 0, 0, 0)','(13, 0, 0, 0)','(14, 0, 0, 0)','(15, 0, 0, 0)','(16, 0, 0, 0)','(17, 0, 0, 0)','(18, 0, 0, 0)','(19, 0, 0, 0)','(0, 1, 0, 0)','(0, 2, 0, 0)','(0, 3, 0, 0)','(0, 4, 0, 0)','(0, 5, 0, 0)','(0, 6, 0, 0)','(0, 7, 0, 0)','(0, 8, 0, 0)','(0, 9, 0, 0)','(0, 10, 0, 0)','(0, 11, 0, 0)','(0, 12, 0, 0)','(0, 13, 0, 0)','(0, 14, 0, 0)','(0, 15, 0, 0)','(0, 16, 0, 0)','(0, 17, 0, 0)','(0, 18, 0, 0)','(0, 19, 0, 0)','(0, 20, 0, 0)','(0, 21, 0, 0)','(0, 0, 1, 0)','(0, 0, 2, 0)','(0, 0, 3, 0)','(0, 0, 4, 0)','(0, 0, 5, 0)','(0, 0, 6, 0)','(0, 0, 7, 0)','(0, 0, 8, 0)','(0, 0, 9, 0)','(0, 0, 10, 0)','(0, 0, 11, 0)','(0, 0, 12, 0)','(0, 0, 13, 0)','(0, 0, 14, 0)','(0, 0, 15, 0)','(0, 0, 0, 1)','(0, 0, 0, 2)','(0, 0, 0, 3)','(0, 0, 0, 4)','(0, 0, 0, 5)','(0, 0, 0, 6)', '(1, 0.5 hadronic)', '(1, 2 hadronic)','(-1, -1)','(1, 1)']
# N3LO 7 point scale variations
'n3lo 7 point': ['(0, 0, 0, 0)', '(2, 1)', '(0.5, 1)', '(1, 2)', '(1, 0.5)', '(2, 2)', '(0.5, 0.5)']
# N3LO 3 point hadronic renormalization scale variations
'n3lo 3r point hadronic': ['(0, 0, 0, 0)', '(1, 0.5 hadronic)', '(1, 2 hadronic)']
# N3LO 3 point missing renormalization scale variations
'n3lo 3r point missing': ['(0, 0, 0, 0)', '(1, 0.5 missing)', '(1, 2 missing)']
# N3LO full IHOU + 7 point scale variations with FHMV splittings
'n3lo fhmv full thcovmat': ['(0, 0, 0, 0, 0, 0, 0)','(1, 0, 0, 0, 0, 0, 0)','(2, 0, 0, 0, 0, 0, 0)','(0, 1, 0, 0, 0, 0, 0)','(0, 2, 0, 0, 0, 0, 0)', '(0, 0, 1, 0, 0, 0, 0)','(0, 0, 2, 0, 0, 0, 0)','(0, 0, 0, 1, 0, 0, 0)','(0, 0, 0, 2, 0, 0, 0)','(0, 0, 0, 0, 1, 0, 0)','(0, 0, 0, 0, 2, 0, 0)','(0, 0, 0, 0, 0, 1, 0)','(0, 0, 0, 0, 0, 2, 0)','(0, 0, 0, 0, 0, 0, 1)','(0, 0, 0, 0, 0, 0, 2)','(2, 1)', '(0.5, 1)', '(1, 2)', '(1, 0.5)', '(2, 2)', '(0.5, 0.5)','(-1, -1)','(1, 1)']
# N3LO full IHOU + 3 point scale variations for hadronic dasasets with FHMV splittings
'n3lo fhmv 3pt hadronic': ['(0, 0, 0, 0, 0, 0, 0)','(1, 0, 0, 0, 0, 0, 0)','(2, 0, 0, 0, 0, 0, 0)','(0, 1, 0, 0, 0, 0, 0)','(0, 2, 0, 0, 0, 0, 0)', '(0, 0, 1, 0, 0, 0, 0)','(0, 0, 2, 0, 0, 0, 0)','(0, 0, 0, 1, 0, 0, 0)','(0, 0, 0, 2, 0, 0, 0)','(0, 0, 0, 0, 1, 0, 0)','(0, 0, 0, 0, 2, 0, 0)','(0, 0, 0, 0, 0, 1, 0)','(0, 0, 0, 0, 0, 2, 0)','(0, 0, 0, 0, 0, 0, 1)','(0, 0, 0, 0, 0, 0, 2)','(1, 0.5 hadronic)', '(1, 2 hadronic)','(-1, -1)','(1, 1)']
Original file line number Diff line number Diff line change
Expand Up @@ -229,3 +229,35 @@ scale_variations_for:
(2, 0.5): 607
(2, 1): 608
(2, 2): 609

# N3LO: MHOU + IHOU
- theoryid: 1000
variations:
(0, 0, 0, 0, 0, 0, 0): 1000 # central th
(1, 0, 0, 0, 0, 0, 0): 1001 # anomalous dimensions variations
(2, 0, 0, 0, 0, 0, 0): 1002
(0, 1, 0, 0, 0, 0, 0): 1003
(0, 2, 0, 0, 0, 0, 0): 1004
(0, 0, 1, 0, 0, 0, 0): 1005
(0, 0, 2, 0, 0, 0, 0): 1006
(0, 0, 0, 1, 0, 0, 0): 1007
(0, 0, 0, 2, 0, 0, 0): 1008
(0, 0, 0, 0, 1, 0, 0): 1009
(0, 0, 0, 0, 2, 0, 0): 1010
(0, 0, 0, 0, 0, 1, 0): 1011
(0, 0, 0, 0, 0, 2, 0): 1012
(0, 0, 0, 0, 0, 0, 1): 1013
(0, 0, 0, 0, 0, 0, 2): 1014
(0.5, 1): 1015 # scale variations
(2, 1): 1016
(0.5, 0.5): 1017
(1, 0.5): 1018
(2, 0.5): 1019
(0.5, 2): 1020
(1, 2): 1021
(2, 2): 1022
(-1, -1): 1023 # DIS coeff functions fact variations
(1, 1): 1024
# IHOU + MHOU missing prescription
(1, 0.5 hadronic): 1025 # As 1018 but DIS from 1000
(1, 2 hadronic): 1026 # As 1021 but DIS from 1000
27 changes: 27 additions & 0 deletions validphys2/src/validphys/theorycovariance/construction.py
Original file line number Diff line number Diff line change
Expand Up @@ -213,6 +213,18 @@ def covmat_n3lo_singlet(name1, name2, deltas1, deltas2):
cnt += n_var
return s_singlet_ad

def covmat_n3lo_fhmv(name1, name2, deltas1, deltas2):
"""Returns theory covariance sub-matrix for all the
FHMV splitting function variations.
"""
s_ad = 0
n_var = 2
# loop on the 7 splitting functions variations
for cnt in range(0,14,2):
s_ad += covmat_n3lo_ad(
name1, name2, deltas1[cnt : cnt + n_var], deltas2[cnt : cnt + n_var]
)
return s_ad

def covmat_n3lo_ad(name1, name2, deltas1, deltas2):
"""Returns theory covariance sub-matrix for each of the
Expand Down Expand Up @@ -336,6 +348,21 @@ def compute_covs_pt_prescrip(
# massive coefficient function variations
s_cf = covmat_3pt(name1, name2, deltas1[-2:], deltas2[-2:])
s = s_ad + s_cf + s_mhou
elif l == 19:
s_ad = covmat_n3lo_fhmv(name1, name2, deltas1[:-4], deltas2[:-4])
s_mhou = covmat_3pt(name1, name2, deltas1[-4:-2], deltas2[-4:-2])
s_cf = covmat_3pt(name1, name2, deltas1[-2:], deltas2[-2:])
s = s_ad + s_cf + s_mhou
# n3lo full covmat prescriprion
elif l == 23:
# spit deltas and compose thcovmat
# splitting functions variatons
s_ad = covmat_n3lo_fhmv(name1, name2, deltas1[:-8], deltas2[:-8])
# scale variations
s_mhou = covmat_7pt(name1, name2, deltas1[-8:-2], deltas2[-8:-2])
# massive coefficient function variations
s_cf = covmat_3pt(name1, name2, deltas1[-2:], deltas2[-2:])
s = s_ad + s_cf + s_mhou
return s


Expand Down
33 changes: 29 additions & 4 deletions validphys2/src/validphys/theorycovariance/theorycovarianceutils.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,7 @@ def check_correct_theory_combination_internal(
"""Checks that a valid theory combination corresponding to an existing
prescription has been inputted"""
l = len(theoryids)
check(
l in {3, 5, 7, 9, 62, 64, 66, 70},
f"Expecting exactly 3, 5, 7, 9, 62, 64, 66 or 70 theories, but got {l}.",
)
check(l in {3, 5, 7, 9, 62, 64, 66, 70, 19, 23}, f"Expecting exactly 3, 5, 7, 9, 62, 64, 66, 23, 19 or 70 theories, but got {l}.")
opts = {"bar", "nobar"}
xifs = [theoryid.get_description()["XIF"] for theoryid in theoryids]
xirs = [theoryid.get_description()["XIR"] for theoryid in theoryids]
Expand Down Expand Up @@ -109,6 +106,34 @@ def check_correct_theory_combination_internal(
"prescription for theory covariance matrix calculation",
)
return
elif l in [19, 23]:
if l == 23:
# check Scale variations
varied_xifs = [xifs[0]]
varied_xirs = [xirs[0]]
varied_xifs.extend(xifs[-8:-2])
varied_xirs.extend(xirs[-8:-2])
correct_xifs = [1.0, 2.0, 0.5, 1.0, 1.0, 2.0, 0.5]
correct_xirs = [1.0, 1.0, 1.0, 2.0, 0.5, 2.0, 0.5]
check(
varied_xifs == correct_xifs and varied_xirs == correct_xirs,
"Choice of input theories does not correspond to a valid "
"prescription for theory covariance matrix calculation",
)
elif l == 19:
# check Scale variations
varied_xifs = [xifs[0]]
varied_xirs = [xirs[0]]
varied_xifs.extend(xifs[-4:-2])
varied_xirs.extend(xirs[-4:-2])
correct_xifs = [1.0, 1.0, 1.0]
correct_xirs = [1.0, 0.5, 2.0]
check(
varied_xifs == correct_xifs and varied_xirs == correct_xirs,
"Choice of input theories does not correspond to a valid "
"prescription for theory covariance matrix calculation",
)
return
else:
correct_xifs = [1.0, 2.0, 0.5, 1.0, 1.0, 2.0, 0.5, 2.0, 0.5]
correct_xirs = [1.0, 1.0, 1.0, 2.0, 0.5, 2.0, 0.5, 0.5, 2.0]
Expand Down