diff --git a/n3fit/src/n3fit/scripts/evolven3fit_new.py b/n3fit/src/n3fit/scripts/evolven3fit_new.py index 5bc6e14cb8..004f6fa52c 100644 --- a/n3fit/src/n3fit/scripts/evolven3fit_new.py +++ b/n3fit/src/n3fit/scripts/evolven3fit_new.py @@ -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) @@ -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, diff --git a/validphys2/src/validphys/datafiles/theory.db b/validphys2/src/validphys/datafiles/theory.db index 1d2e71a9c0..9e8c595136 100644 Binary files a/validphys2/src/validphys/datafiles/theory.db and b/validphys2/src/validphys/datafiles/theory.db differ diff --git a/validphys2/src/validphys/scalevariations/pointprescriptions.yaml b/validphys2/src/validphys/scalevariations/pointprescriptions.yaml index 859eea5d38..d76d2ca400 100644 --- a/validphys2/src/validphys/scalevariations/pointprescriptions.yaml +++ b/validphys2/src/validphys/scalevariations/pointprescriptions.yaml @@ -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)'] diff --git a/validphys2/src/validphys/scalevariations/scalevariationtheoryids.yaml b/validphys2/src/validphys/scalevariations/scalevariationtheoryids.yaml index 6d1af1cff6..98031c3498 100644 --- a/validphys2/src/validphys/scalevariations/scalevariationtheoryids.yaml +++ b/validphys2/src/validphys/scalevariations/scalevariationtheoryids.yaml @@ -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 \ No newline at end of file diff --git a/validphys2/src/validphys/theorycovariance/construction.py b/validphys2/src/validphys/theorycovariance/construction.py index bf6a676148..4e6513f4ba 100644 --- a/validphys2/src/validphys/theorycovariance/construction.py +++ b/validphys2/src/validphys/theorycovariance/construction.py @@ -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 @@ -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 diff --git a/validphys2/src/validphys/theorycovariance/theorycovarianceutils.py b/validphys2/src/validphys/theorycovariance/theorycovarianceutils.py index 38566397eb..33d0f230a9 100644 --- a/validphys2/src/validphys/theorycovariance/theorycovarianceutils.py +++ b/validphys2/src/validphys/theorycovariance/theorycovarianceutils.py @@ -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] @@ -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]