From 81df2f5e88e8c02f20b0cd720ce92d53774c2cb0 Mon Sep 17 00:00:00 2001 From: juacrumar Date: Thu, 23 May 2024 17:23:49 +0200 Subject: [PATCH] add a evolven3fit check action to look for the eko at setupfit time --- n3fit/src/n3fit/checks.py | 12 ++++++++++++ n3fit/src/n3fit/n3fit_checks_provider.py | 5 +++++ n3fit/src/n3fit/scripts/vp_setupfit.py | 9 ++++++++- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/n3fit/src/n3fit/checks.py b/n3fit/src/n3fit/checks.py index 607d838e55..3ff404ffe5 100644 --- a/n3fit/src/n3fit/checks.py +++ b/n3fit/src/n3fit/checks.py @@ -9,6 +9,7 @@ from n3fit.hyper_optimization import penalties as penalties_module from n3fit.hyper_optimization.rewards import IMPLEMENTED_LOSSES, IMPLEMENTED_STATS from reportengine.checks import CheckError, make_argcheck +from validphys.loader import FallbackLoader from validphys.pdfbases import check_basis log = logging.getLogger(__name__) @@ -485,3 +486,14 @@ def check_polarized_configs(fitting, fitbasis, positivity_bound): ) if fitting.get("sum_rules", True) and fitting.get("sum_rules") != "TSR": raise CheckError("The 'sum_rules' key needs to be 'TSR' for polarised PDF fits.") + + +@make_argcheck +def check_eko_exists(theoryid): + """Check that an eko for this theory exists. + Since there might still be theories without an associated eko, + this function raises a logger' error instead of an Exception.""" + try: + _ = FallbackLoader().check_eko(theoryid.id) + except FileNotFoundError: + log.error(f"No eko found for {theoryid}") diff --git a/n3fit/src/n3fit/n3fit_checks_provider.py b/n3fit/src/n3fit/n3fit_checks_provider.py index 79a19bdb05..a06b3f0efd 100644 --- a/n3fit/src/n3fit/n3fit_checks_provider.py +++ b/n3fit/src/n3fit/n3fit_checks_provider.py @@ -32,3 +32,8 @@ def n3fit_checks_action( double_precision=False, ): return + + +@n3fit.checks.check_eko_exists +def evolven3fit_checks_action(theoryid): + return diff --git a/n3fit/src/n3fit/scripts/vp_setupfit.py b/n3fit/src/n3fit/scripts/vp_setupfit.py index 3fe9ae8b47..c56b716fce 100644 --- a/n3fit/src/n3fit/scripts/vp_setupfit.py +++ b/n3fit/src/n3fit/scripts/vp_setupfit.py @@ -38,7 +38,13 @@ from validphys.app import App from validphys.config import Config, ConfigError, Environment, EnvironmentError_ -SETUPFIT_FIXED_CONFIG = dict(actions_=['datacuts check_t0pdfset', 'theory check_positivity']) +SETUPFIT_FIXED_CONFIG = dict( + actions_=[ + 'datacuts check_t0pdfset', + 'theory check_positivity', + 'theory evolven3fit_checks_action', + ] +) SETUPFIT_PROVIDERS = [ 'n3fit.n3fit_checks_provider', @@ -159,6 +165,7 @@ def from_yaml(cls, o, *args, **kwargs): SETUPFIT_FIXED_CONFIG['actions_'].append('positivity_bound check_unpolarized_bc') for k, v in SETUPFIT_DEFAULTS.items(): file_content.setdefault(k, v) + file_content.update(SETUPFIT_FIXED_CONFIG) return cls(file_content, *args, **kwargs)