From c8bd3e9c271535cad30de943e391ca6f9e3e59d9 Mon Sep 17 00:00:00 2001 From: karnem <mikhail.karnevskiy@desy.de> Date: Tue, 11 Jun 2019 12:52:28 +0200 Subject: [PATCH] Add summary job option --- cal_tools/cal_tools/tools.py | 9 ++++++-- xfel_calibrate/calibrate.py | 42 ++++++++++++++++++++++++++++++++++-- 2 files changed, 47 insertions(+), 4 deletions(-) diff --git a/cal_tools/cal_tools/tools.py b/cal_tools/cal_tools/tools.py index 904140d10..476a170f7 100644 --- a/cal_tools/cal_tools/tools.py +++ b/cal_tools/cal_tools/tools.py @@ -31,9 +31,14 @@ def combine_report(run_path, calibration): group, name_param, conc_param = "_".join(comps[:-2]), comps[-2], comps[-1] else: group, name_param, conc_param = comps[0], "None", "None" - + with open("{}/{}.rst".format(sphinx_path, group), "a") as gfile: - if conc_param != "None": + if conc_param == "summary": + title = "{}. {}".format(calibration, "Summary.") + gfile.write(title + "\n") + gfile.write( "=" *len (title) + "\n") + gfile.write("\n") + elif conc_param != "None": title = "{}. {} = {}".format(calibration, name_param, conc_param) gfile.write(title + "\n") gfile.write( "=" *len (title) + "\n") diff --git a/xfel_calibrate/calibrate.py b/xfel_calibrate/calibrate.py index a7655aa7b..fff5d3bbf 100755 --- a/xfel_calibrate/calibrate.py +++ b/xfel_calibrate/calibrate.py @@ -358,9 +358,19 @@ def flatten_list(l): return "_".join([str(flatten_list(v)) for v in l]) if isinstance(l, list) else l +def clean_nonfinal_cells(nb): + first_cell = False + for cell in nb.cells: + if not first_cell and cell.cell_type == 'code': + first_cell = True + continue + if '!!!FINAL!!!' not in cell.source: + cell.source = '' + + def concurrent_run(temp_path, nb, nbname, args, cparm=None, cval=None, final_job=False, job_list=[], fmtcmd="", cluster_cores=8, - sequential=False, priority=2): + sequential=False, priority=2, dependent=False): """ Launch a concurrent job on the cluster via SLURM """ @@ -376,6 +386,10 @@ def concurrent_run(temp_path, nb, nbname, args, cparm=None, cval=None, parms = extract_parameters(nb) params = parameter_values(parms, **args) new_nb = replace_definitions(nb, params, execute=False) + if dependent: + suffix = "summary" + clean_nonfinal_cells(new_nb) + base_name = nbname.replace(".ipynb", "") new_name = "{}__{}__{}.ipynb".format( os.path.basename(base_name), cparm, suffix) @@ -416,6 +430,12 @@ def concurrent_run(temp_path, nb, nbname, args, cparm=None, cval=None, else: srun_base = [] + if dependent: + srun_dep = "--dependency=afterok" + for jobid in job_list: + srun_dep += ":{}".format(jobid) + srun_base += [srun_dep] + srun_base += [os.path.abspath("{}/bin/slurm_calibrate.sh".format(os.path.dirname(__file__))), # path to helper sh os.path.abspath(nbpath), # path to notebook python_path, # path to python @@ -634,15 +654,33 @@ def run(): cvtype = p.type break + run_overall = False + for p in parms: + if p.name == 'run_overall': + run_overall = p.value + break + for cnum, cval in enumerate(cvals): jobid = concurrent_run(run_tmp_path, nb, notebook, args, cvar, [cval, ] if not isinstance( cval, list) and cvtype is list else cval, cnum == len(list(cvals)) - - 1, joblist, fmtcmd, + 1 and not run_overall, + joblist, fmtcmd, cluster_cores=cluster_cores, sequential=sequential, priority=priority) joblist.append(jobid) + + # Run summary job here if needed + if run_overall: + jobid = concurrent_run(run_tmp_path, nb, os.path.basename(notebook), + args, + final_job=True, job_list=joblist, fmtcmd=fmtcmd, + cluster_cores=cluster_cores, + sequential=sequential, priority=priority, + dependent=True) + joblist.append(jobid) + if not all([j is None for j in joblist]): print("Submitted the following SLURM jobs: {}".format(",".join(joblist))) -- GitLab