From 750b63cfa7302ae3584bfdc464933da6e9d972c5 Mon Sep 17 00:00:00 2001 From: Thomas Kluyver <thomas.kluyver@xfel.eu> Date: Fri, 7 Feb 2025 17:55:34 +0000 Subject: [PATCH] Rough sketch of injecting new constants after report creation --- src/xfel_calibrate/calibrate.py | 12 +++++++++++- src/xfel_calibrate/finalize.py | 19 ++++++++++++++++++- src/xfel_calibrate/nb_args.py | 4 ++++ 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/xfel_calibrate/calibrate.py b/src/xfel_calibrate/calibrate.py index 61f35e0a8..0b4b1173f 100755 --- a/src/xfel_calibrate/calibrate.py +++ b/src/xfel_calibrate/calibrate.py @@ -208,7 +208,9 @@ def create_finalize_script(fmt_args, cal_work_dir, job_list) -> str: report_to='{{report_to}}', data_path='{{in_folder}}', request_time='{{request_time}}', - submission_time='{{submission_time}}') + submission_time='{{submission_time}}', + inject={{inject}}, + ) """) @@ -851,6 +853,13 @@ def run(argv=None): )) errors = False + # If the notebook has a db_output parameter, assume it will do the injection + # itself. + inject = args['db_output'] and 'db_output' not in default_params_by_name + if inject and nb_details.caltype == 'CORRECT': + print("Ignoring --db-output for CORRECT task (this is for characterisation") + inject = False + fmt_args = {'cal_work_dir': cal_work_dir, 'out_path': out_path, 'version': version, @@ -860,6 +869,7 @@ def run(argv=None): 'in_folder': folder, 'request_time': request_time.isoformat(), 'submission_time': submission_time.isoformat(), + 'inject': inject, } joblist.append(run_finalize( diff --git a/src/xfel_calibrate/finalize.py b/src/xfel_calibrate/finalize.py index c2c46b513..d5e6ef07f 100644 --- a/src/xfel_calibrate/finalize.py +++ b/src/xfel_calibrate/finalize.py @@ -10,10 +10,13 @@ from tempfile import TemporaryDirectory from textwrap import dedent from typing import Dict, List +import h5py import tabulate from jinja2 import Template import cal_tools.tools +from cal_tools.constants import inject_ccv +from cal_tools.restful_config import extra_calibration_client from .settings import logo_path @@ -387,7 +390,7 @@ def tex_escape(text): def finalize(joblist, finaljob, cal_work_dir, out_path, version, title, author, report_to, data_path='Unknown', - request_time='', submission_time=''): + request_time='', submission_time='', inject=False): cal_work_dir = Path(cal_work_dir) out_path = Path(out_path) @@ -458,3 +461,17 @@ def finalize(joblist, finaljob, cal_work_dir, out_path, version, title, author, tmp_path = Path(td, f"calibration_metadata.yml") copy(md_path, tmp_path) tmp_path.replace(out_path / "calibration_metadata.yml") + + if inject: + client = extra_calibration_client(inject=True) + consts = list(out_path.glob("*.h5")) + print(f"Injecting constants from {len(consts)} files") + for p in consts: + print(f" {p.name}") + with h5py.File(p, "r") as hf: + for pdu_name, grp in hf.items(): + for calibration in grp.keys(): + print(f" {calibration}: {pdu_name} ...", end="", flush=True) + group_path = f"{pdu_name}/{calibration}/0" + inject_ccv(p, group_path, report_to, client=client) + print("done") diff --git a/src/xfel_calibrate/nb_args.py b/src/xfel_calibrate/nb_args.py index f63265ca7..2f4d6dd7c 100644 --- a/src/xfel_calibrate/nb_args.py +++ b/src/xfel_calibrate/nb_args.py @@ -79,6 +79,10 @@ def make_initial_parser(**kwargs): parser.add_argument('--vector-figs', action="store_true", default=False, help="Use vector graphics for figures in the report.") + parser.add_argument('--db-output', action="store_true", + help="Inject produced constants to CalCat after " + "characterisation") + parser.add_argument('--slurm-mincpus', type=int, default=1, help='Requested minimum number of ' 'logical cpus/processors per node') -- GitLab