From acdaa3b4b9ef6ef73abfc7dbab8a55f59a209c17 Mon Sep 17 00:00:00 2001 From: Devin Date: Tue, 14 Jul 2026 19:05:58 +0200 Subject: [PATCH 01/17] Update to use new histTuple_plot_vars and _fullres_vars --- Analysis/HistTupleProducer.py | 5 +---- Analysis/tasks.py | 12 ++++++------ Common/Setup.py | 14 ++++++++++++++ 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/Analysis/HistTupleProducer.py b/Analysis/HistTupleProducer.py index e7c61b2a..b9cd53ce 100644 --- a/Analysis/HistTupleProducer.py +++ b/Analysis/HistTupleProducer.py @@ -81,10 +81,7 @@ def createHistTuple( histTupleDef.analysis_setup(setup) isData = dataset_name == "data" - if type(setup.global_params["variables"]) == list: - variables = setup.global_params["variables"] - elif type(setup.global_params["variables"]) == dict: - variables = setup.global_params["variables"].keys() + variables = setup.histTuple_plot_vars norm_uncertainties = set() if setup.global_params["compute_rel_weights"]: diff --git a/Analysis/tasks.py b/Analysis/tasks.py index a949ebc1..bed8326b 100644 --- a/Analysis/tasks.py +++ b/Analysis/tasks.py @@ -97,7 +97,7 @@ def workflow_requires(self): var_produced_by = self.setup.var_producer_map flatten_vars = set() - for var in self.global_params["variables"]: + for var in self.setup.histTuple_vars: if isinstance(var, dict) and "vars" in var: for v in var["vars"]: flatten_vars.add(v) @@ -286,7 +286,7 @@ def _build_branch_map(self): datasets_to_consider.append("data") flatten_vars = set() - for var in self.global_params["variables"]: + for var in self.setup.histTuple_vars: if isinstance(var, dict) and "vars" in var: for v in var["vars"]: flatten_vars.add(v) @@ -519,7 +519,7 @@ def bundle_flavours(self): @property def active_variables(self): - all_vars = _dedup_variables(self.global_params["variables"]) + all_vars = _dedup_variables(self.setup.histTuple_plot_vars) if not self.variables: return all_vars selected = {v.strip() for v in self.variables.split(",") if v.strip()} @@ -751,7 +751,7 @@ def bundle_flavours(self): @property def active_variables(self): - all_vars = _dedup_variables(self.global_params["variables"]) + all_vars = _dedup_variables(self.setup.histTuple_plot_vars) if not self.variables: return all_vars selected = {v.strip() for v in self.variables.split(",") if v.strip()} @@ -1275,7 +1275,7 @@ def bundle_flavours(self): @property def active_variables(self): - all_vars = _dedup_variables(self.global_params["variables"]) + all_vars = _dedup_variables(self.setup.histTuple_plot_vars) if not self.variables: return all_vars selected = {v.strip() for v in self.variables.split(",") if v.strip()} @@ -1364,7 +1364,7 @@ def create_branch_map(self): customisations=self.customisations, ).create_branch_map() var_dict = {} - for var in self.global_params["variables"]: + for var in self.setup.histTuple_plot_vars: var_name = var if isinstance(var, str) else var["name"] var_dict[var_name] = var for k, (_, (var, _, _)) in enumerate(merge_map.items()): diff --git a/Common/Setup.py b/Common/Setup.py index 8e18a146..6e0dfdc7 100644 --- a/Common/Setup.py +++ b/Common/Setup.py @@ -358,6 +358,20 @@ def __init__( else: processes[key] = item + self.histTuple_flavor = self.global_params["histTuple_flavor"] + print(f"Using histTuple flavor {self.histTuple_flavor}") + self.histTuple_plot_vars = set( + self.global_params["histTuple_flavors"][self.histTuple_flavor]["variables"] + ) + self.histTuple_fullres_vars = set( + self.global_params["histTuple_flavors"][self.histTuple_flavor][ + "fullResolution_variables" + ] + ) + self.histTuple_vars = ( + self.histTuple_plot_vars | self.histTuple_fullres_vars + ) # Keep union for the simple tasks-dependency loading + def collect_base_processes(p_name, parent_name=None): if p_name not in processes: if parent_name is not None: From c279584e1b85fa9f1049f47980cb8ef1d6ad2d9b Mon Sep 17 00:00:00 2001 From: Devin Aebi <45836403+aebid@users.noreply.github.com> Date: Tue, 14 Jul 2026 12:35:50 -0500 Subject: [PATCH 02/17] Refactor histTuple variable assignments for clarity --- Common/Setup.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Common/Setup.py b/Common/Setup.py index 6e0dfdc7..d7d545a7 100644 --- a/Common/Setup.py +++ b/Common/Setup.py @@ -360,13 +360,13 @@ def __init__( self.histTuple_flavor = self.global_params["histTuple_flavor"] print(f"Using histTuple flavor {self.histTuple_flavor}") + histTuple_plot_vars = self.global_params["histTuple_flavors"][self.histTuple_flavor]["variables"] self.histTuple_plot_vars = set( - self.global_params["histTuple_flavors"][self.histTuple_flavor]["variables"] + histTuple_plot_vars if isinstance(histTuple_plot_vars, list) else histTuple_plot_vars.keys() ) + histTuple_fullres_vars = self.global_params["histTuple_flavors"][self.histTuple_flavor]["fullResolution_variables"] self.histTuple_fullres_vars = set( - self.global_params["histTuple_flavors"][self.histTuple_flavor][ - "fullResolution_variables" - ] + histTuple_plot_vars if isinstance(histTuple_fullres_vars, list) else histTuple_fullres_vars.keys() ) self.histTuple_vars = ( self.histTuple_plot_vars | self.histTuple_fullres_vars From f0b2f7824e851600ed8415df640f3dfb4d814dac Mon Sep 17 00:00:00 2001 From: Devin Aebi <45836403+aebid@users.noreply.github.com> Date: Tue, 14 Jul 2026 12:39:16 -0500 Subject: [PATCH 03/17] Refactor histogram tuple variable handling Refactor logic for handling histogram tuple variables to improve readability. --- Common/Setup.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Common/Setup.py b/Common/Setup.py index d7d545a7..95a6807a 100644 --- a/Common/Setup.py +++ b/Common/Setup.py @@ -362,11 +362,15 @@ def __init__( print(f"Using histTuple flavor {self.histTuple_flavor}") histTuple_plot_vars = self.global_params["histTuple_flavors"][self.histTuple_flavor]["variables"] self.histTuple_plot_vars = set( - histTuple_plot_vars if isinstance(histTuple_plot_vars, list) else histTuple_plot_vars.keys() + histTuple_plot_vars + if isinstance(histTuple_plot_vars, list) + else histTuple_plot_vars.keys() ) histTuple_fullres_vars = self.global_params["histTuple_flavors"][self.histTuple_flavor]["fullResolution_variables"] self.histTuple_fullres_vars = set( - histTuple_plot_vars if isinstance(histTuple_fullres_vars, list) else histTuple_fullres_vars.keys() + histTuple_plot_vars + if isinstance(histTuple_fullres_vars, list) + else histTuple_fullres_vars.keys() ) self.histTuple_vars = ( self.histTuple_plot_vars | self.histTuple_fullres_vars From 38c2fec46223313b049422059b4de5f28dcb294e Mon Sep 17 00:00:00 2001 From: Devin Aebi <45836403+aebid@users.noreply.github.com> Date: Tue, 14 Jul 2026 12:43:15 -0500 Subject: [PATCH 04/17] Refactor histTuple flavor variable access Refactor access to histTuple flavor variables for better readability. --- Common/Setup.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Common/Setup.py b/Common/Setup.py index 95a6807a..ea4977c0 100644 --- a/Common/Setup.py +++ b/Common/Setup.py @@ -360,13 +360,17 @@ def __init__( self.histTuple_flavor = self.global_params["histTuple_flavor"] print(f"Using histTuple flavor {self.histTuple_flavor}") - histTuple_plot_vars = self.global_params["histTuple_flavors"][self.histTuple_flavor]["variables"] + histTuple_plot_vars = self.global_params["histTuple_flavors"][ + self.histTuple_flavor + ]["variables"] self.histTuple_plot_vars = set( histTuple_plot_vars if isinstance(histTuple_plot_vars, list) else histTuple_plot_vars.keys() ) - histTuple_fullres_vars = self.global_params["histTuple_flavors"][self.histTuple_flavor]["fullResolution_variables"] + histTuple_fullres_vars = self.global_params["histTuple_flavors"][ + self.histTuple_flavor + ]["fullResolution_variables"] self.histTuple_fullres_vars = set( histTuple_plot_vars if isinstance(histTuple_fullres_vars, list) From da1d20999e076fb60cba2e3a5efa08f65e3f4c9c Mon Sep 17 00:00:00 2001 From: Devin Aebi <45836403+aebid@users.noreply.github.com> Date: Tue, 14 Jul 2026 13:07:09 -0500 Subject: [PATCH 05/17] Refactor histTuple variable extraction logic --- Common/Setup.py | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/Common/Setup.py b/Common/Setup.py index ea4977c0..e803169a 100644 --- a/Common/Setup.py +++ b/Common/Setup.py @@ -363,19 +363,11 @@ def __init__( histTuple_plot_vars = self.global_params["histTuple_flavors"][ self.histTuple_flavor ]["variables"] - self.histTuple_plot_vars = set( - histTuple_plot_vars - if isinstance(histTuple_plot_vars, list) - else histTuple_plot_vars.keys() - ) + self.histTuple_plot_vars = set([ x["name"] for x in histTuple_plot_vars if isinstance(x, dict) else x ]) histTuple_fullres_vars = self.global_params["histTuple_flavors"][ self.histTuple_flavor ]["fullResolution_variables"] - self.histTuple_fullres_vars = set( - histTuple_plot_vars - if isinstance(histTuple_fullres_vars, list) - else histTuple_fullres_vars.keys() - ) + self.histTuple_fullres_vars = set([ x["name"] for x in histTuple_fullres_vars if isinstance(x, dict) else x ]) self.histTuple_vars = ( self.histTuple_plot_vars | self.histTuple_fullres_vars ) # Keep union for the simple tasks-dependency loading From b69d9fb0857ccc80b7b46100a396b29ccdd833ba Mon Sep 17 00:00:00 2001 From: Devin Aebi <45836403+aebid@users.noreply.github.com> Date: Tue, 14 Jul 2026 13:12:48 -0500 Subject: [PATCH 06/17] Refactor histTuple variable extraction logic --- Common/Setup.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Common/Setup.py b/Common/Setup.py index e803169a..8ef09ba5 100644 --- a/Common/Setup.py +++ b/Common/Setup.py @@ -363,11 +363,11 @@ def __init__( histTuple_plot_vars = self.global_params["histTuple_flavors"][ self.histTuple_flavor ]["variables"] - self.histTuple_plot_vars = set([ x["name"] for x in histTuple_plot_vars if isinstance(x, dict) else x ]) + self.histTuple_plot_vars = set([ x["name"] if isinstance(x, dict) else x for x in histTuple_plot_vars ]) histTuple_fullres_vars = self.global_params["histTuple_flavors"][ self.histTuple_flavor ]["fullResolution_variables"] - self.histTuple_fullres_vars = set([ x["name"] for x in histTuple_fullres_vars if isinstance(x, dict) else x ]) + self.histTuple_fullres_vars = set([ x["name"] if isinstance(x, dict) else x for x in histTuple_fullres_vars ]) self.histTuple_vars = ( self.histTuple_plot_vars | self.histTuple_fullres_vars ) # Keep union for the simple tasks-dependency loading From b4b950d241ef4547b952cde988414b981872494e Mon Sep 17 00:00:00 2001 From: Devin Aebi <45836403+aebid@users.noreply.github.com> Date: Tue, 14 Jul 2026 13:25:11 -0500 Subject: [PATCH 07/17] Improve readability of variable assignments Refactor list comprehensions for clarity in Setup.py. --- Common/Setup.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Common/Setup.py b/Common/Setup.py index 8ef09ba5..43c2b229 100644 --- a/Common/Setup.py +++ b/Common/Setup.py @@ -363,11 +363,15 @@ def __init__( histTuple_plot_vars = self.global_params["histTuple_flavors"][ self.histTuple_flavor ]["variables"] - self.histTuple_plot_vars = set([ x["name"] if isinstance(x, dict) else x for x in histTuple_plot_vars ]) + self.histTuple_plot_vars = set( + [ x["name"] if isinstance(x, dict) else x for x in histTuple_plot_vars ] + ) histTuple_fullres_vars = self.global_params["histTuple_flavors"][ self.histTuple_flavor ]["fullResolution_variables"] - self.histTuple_fullres_vars = set([ x["name"] if isinstance(x, dict) else x for x in histTuple_fullres_vars ]) + self.histTuple_fullres_vars = set( + [ x["name"] if isinstance(x, dict) else x for x in histTuple_fullres_vars ] + ) self.histTuple_vars = ( self.histTuple_plot_vars | self.histTuple_fullres_vars ) # Keep union for the simple tasks-dependency loading From 66d9b40ae20ee51b82224593d2216d54e847163f Mon Sep 17 00:00:00 2001 From: Devin Aebi <45836403+aebid@users.noreply.github.com> Date: Tue, 14 Jul 2026 13:28:03 -0500 Subject: [PATCH 08/17] Fix indentation in Setup.py for variable extraction --- Common/Setup.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Common/Setup.py b/Common/Setup.py index 43c2b229..006f62c0 100644 --- a/Common/Setup.py +++ b/Common/Setup.py @@ -364,13 +364,13 @@ def __init__( self.histTuple_flavor ]["variables"] self.histTuple_plot_vars = set( - [ x["name"] if isinstance(x, dict) else x for x in histTuple_plot_vars ] + [x["name"] if isinstance(x, dict) else x for x in histTuple_plot_vars] ) histTuple_fullres_vars = self.global_params["histTuple_flavors"][ self.histTuple_flavor ]["fullResolution_variables"] self.histTuple_fullres_vars = set( - [ x["name"] if isinstance(x, dict) else x for x in histTuple_fullres_vars ] + [x["name"] if isinstance(x, dict) else x for x in histTuple_fullres_vars] ) self.histTuple_vars = ( self.histTuple_plot_vars | self.histTuple_fullres_vars From b14cc19f113fa58e94f1d4766239afbd5c7ca130 Mon Sep 17 00:00:00 2001 From: Devin Aebi <45836403+aebid@users.noreply.github.com> Date: Tue, 14 Jul 2026 13:57:27 -0500 Subject: [PATCH 09/17] Improve uniqueness handling for histTuple variables Refactor variable handling to ensure uniqueness in histTuple variables. --- Common/Setup.py | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/Common/Setup.py b/Common/Setup.py index 006f62c0..eb147dbb 100644 --- a/Common/Setup.py +++ b/Common/Setup.py @@ -360,18 +360,26 @@ def __init__( self.histTuple_flavor = self.global_params["histTuple_flavor"] print(f"Using histTuple flavor {self.histTuple_flavor}") - histTuple_plot_vars = self.global_params["histTuple_flavors"][ + self.histTuple_plot_vars = self.global_params["histTuple_flavors"][ self.histTuple_flavor ]["variables"] - self.histTuple_plot_vars = set( - [x["name"] if isinstance(x, dict) else x for x in histTuple_plot_vars] - ) - histTuple_fullres_vars = self.global_params["histTuple_flavors"][ + self.histTuple_fullres_vars = self.global_params["histTuple_flavors"][ self.histTuple_flavor ]["fullResolution_variables"] - self.histTuple_fullres_vars = set( - [x["name"] if isinstance(x, dict) else x for x in histTuple_fullres_vars] - ) + + unique_list = [ ] + seen_hashable = set() + seen_unhashable = [ ] + for var in self.histTuple_plot_vars + self.histTuple_fullres_vars: + if isinstance(var, dict): + if var not in seen_unhashable: + seen_unhashable.append(var) + unique_list.append(var) + else: + if var not in seen_hashable: + seen_hashable.add(item) + unique_list.append(item) + self.histTuple_vars = ( self.histTuple_plot_vars | self.histTuple_fullres_vars ) # Keep union for the simple tasks-dependency loading From 81774ed5afcc89315df67ab11397cdc8391411d7 Mon Sep 17 00:00:00 2001 From: Devin Aebi <45836403+aebid@users.noreply.github.com> Date: Tue, 14 Jul 2026 13:58:08 -0500 Subject: [PATCH 10/17] Update histTuple_vars to use unique_list Replaced histTuple_vars with unique_list to ensure uniqueness. --- Common/Setup.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Common/Setup.py b/Common/Setup.py index eb147dbb..48bde5a8 100644 --- a/Common/Setup.py +++ b/Common/Setup.py @@ -380,9 +380,7 @@ def __init__( seen_hashable.add(item) unique_list.append(item) - self.histTuple_vars = ( - self.histTuple_plot_vars | self.histTuple_fullres_vars - ) # Keep union for the simple tasks-dependency loading + self.histTuple_vars = unique_list # Keep union for the simple tasks-dependency loading def collect_base_processes(p_name, parent_name=None): if p_name not in processes: From f58a23822459cebf87f4ae15631f86b25fc5ab1c Mon Sep 17 00:00:00 2001 From: Devin Aebi <45836403+aebid@users.noreply.github.com> Date: Tue, 14 Jul 2026 13:59:10 -0500 Subject: [PATCH 11/17] Refactor histTuple_vars assignment for clarity --- Common/Setup.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Common/Setup.py b/Common/Setup.py index 48bde5a8..5527f89e 100644 --- a/Common/Setup.py +++ b/Common/Setup.py @@ -380,7 +380,9 @@ def __init__( seen_hashable.add(item) unique_list.append(item) - self.histTuple_vars = unique_list # Keep union for the simple tasks-dependency loading + self.histTuple_vars = ( + unique_list # Keep union for the simple tasks-dependency loading + ) def collect_base_processes(p_name, parent_name=None): if p_name not in processes: From 1e7869d386db4ab2667348607d6962c39c2a994a Mon Sep 17 00:00:00 2001 From: Devin Aebi <45836403+aebid@users.noreply.github.com> Date: Tue, 14 Jul 2026 14:00:20 -0500 Subject: [PATCH 12/17] Refactor unique_list and seen_unhashable initialization --- Common/Setup.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Common/Setup.py b/Common/Setup.py index 5527f89e..1ed9eb49 100644 --- a/Common/Setup.py +++ b/Common/Setup.py @@ -367,9 +367,9 @@ def __init__( self.histTuple_flavor ]["fullResolution_variables"] - unique_list = [ ] + unique_list = [] seen_hashable = set() - seen_unhashable = [ ] + seen_unhashable = [] for var in self.histTuple_plot_vars + self.histTuple_fullres_vars: if isinstance(var, dict): if var not in seen_unhashable: @@ -379,7 +379,7 @@ def __init__( if var not in seen_hashable: seen_hashable.add(item) unique_list.append(item) - + self.histTuple_vars = ( unique_list # Keep union for the simple tasks-dependency loading ) From fc3b1aca0998f21581405bdfbfcba0d399bbe7b2 Mon Sep 17 00:00:00 2001 From: Devin Aebi <45836403+aebid@users.noreply.github.com> Date: Tue, 14 Jul 2026 14:22:50 -0500 Subject: [PATCH 13/17] Fix variable handling in Setup.py for uniqueness --- Common/Setup.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Common/Setup.py b/Common/Setup.py index 1ed9eb49..c0c35c6b 100644 --- a/Common/Setup.py +++ b/Common/Setup.py @@ -377,8 +377,8 @@ def __init__( unique_list.append(var) else: if var not in seen_hashable: - seen_hashable.add(item) - unique_list.append(item) + seen_hashable.add(var) + unique_list.append(var) self.histTuple_vars = ( unique_list # Keep union for the simple tasks-dependency loading From 88daf0a34a6e50c87bc298eeba143a49ed46991b Mon Sep 17 00:00:00 2001 From: Devin Aebi <45836403+aebid@users.noreply.github.com> Date: Thu, 16 Jul 2026 15:41:24 -0500 Subject: [PATCH 14/17] Refactor variable uniqueness check in Setup.py Refactored variable uniqueness check to use a dictionary for improved efficiency and clarity. --- Common/Setup.py | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/Common/Setup.py b/Common/Setup.py index c0c35c6b..227a38b0 100644 --- a/Common/Setup.py +++ b/Common/Setup.py @@ -367,22 +367,13 @@ def __init__( self.histTuple_flavor ]["fullResolution_variables"] - unique_list = [] - seen_hashable = set() - seen_unhashable = [] + var_dict = {} for var in self.histTuple_plot_vars + self.histTuple_fullres_vars: - if isinstance(var, dict): - if var not in seen_unhashable: - seen_unhashable.append(var) - unique_list.append(var) - else: - if var not in seen_hashable: - seen_hashable.add(var) - unique_list.append(var) - - self.histTuple_vars = ( - unique_list # Keep union for the simple tasks-dependency loading - ) + var_name = var["name"] if isinstance(var, dict) else var + if var_name in var_dict: + raise RuntimeError(f"Duplicated variable name {var_name}") + var_dict[var_name] = var + self.histTuple_vars = list(var_dict.values()) def collect_base_processes(p_name, parent_name=None): if p_name not in processes: From 94907cf80a48b7750de0fe21d0e0675c69a079d3 Mon Sep 17 00:00:00 2001 From: Devin Date: Sat, 18 Jul 2026 03:32:31 +0200 Subject: [PATCH 15/17] Move the fullres vars to FLAF histTupleProducer --- Analysis/HistTupleProducer.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Analysis/HistTupleProducer.py b/Analysis/HistTupleProducer.py index b9cd53ce..be290854 100644 --- a/Analysis/HistTupleProducer.py +++ b/Analysis/HistTupleProducer.py @@ -81,7 +81,8 @@ def createHistTuple( histTupleDef.analysis_setup(setup) isData = dataset_name == "data" - variables = setup.histTuple_plot_vars + binned_variables = setup.histTuple_plot_vars + fullres_variables = setup.histTuple_fullres_vars norm_uncertainties = set() if setup.global_params["compute_rel_weights"]: @@ -94,7 +95,7 @@ def createHistTuple( print("Defining binnings for variables") flatten_vars = set() - for var in variables: + for var in binned_variables: if isinstance(var, dict) and "vars" in var: for v in var["vars"]: flatten_vars.add(v) @@ -140,6 +141,8 @@ def createHistTuple( ) dfw = histTupleDef.GetDfw(df, setup, dataset_name) + for var in fullres_variables: + dfw.colToSave.append(var) selection_tags = setup.global_params.get("histTuple_selectors", []) selection_flags = [] From 1cb71eda0639ee78cc78f9c1a7ab89be805a2f51 Mon Sep 17 00:00:00 2001 From: Devin Date: Sat, 18 Jul 2026 03:59:55 +0200 Subject: [PATCH 16/17] Update duplicate check in setup --- Common/Setup.py | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/Common/Setup.py b/Common/Setup.py index 227a38b0..460af370 100644 --- a/Common/Setup.py +++ b/Common/Setup.py @@ -367,13 +367,29 @@ def __init__( self.histTuple_flavor ]["fullResolution_variables"] - var_dict = {} - for var in self.histTuple_plot_vars + self.histTuple_fullres_vars: + # Safety check that the fullres or the plotvars do not have duplicates + plotvar_dict = {} + for var in self.histTuple_plot_vars: var_name = var["name"] if isinstance(var, dict) else var - if var_name in var_dict: - raise RuntimeError(f"Duplicated variable name {var_name}") - var_dict[var_name] = var - self.histTuple_vars = list(var_dict.values()) + if var_name in plotvar_dict: + raise RuntimeError(f"Duplicated plot variable name {var_name}") + plotvar_dict[var_name] = var + + fullresvar_dict = {} + for var in self.histTuple_plot_vars: + var_name = var["name"] if isinstance(var, dict) else var + if var_name in fullresvar_dict: + raise RuntimeError( + f"Duplicated full resolution variable name {var_name}" + ) + fullresvar_dict[var_name] = var + + # Now a merged list removing the duplicates + var_set = set() + for var in list(plotvar_dict.values()) + list(fullresvar_dict.values()): + var_name = var["name"] if isinstance(var, dict) else var + var_set.add(var) + self.histTuple_vars = list(var_set) def collect_base_processes(p_name, parent_name=None): if p_name not in processes: From bf07d315780dc5f19a0f10a87fb7a65d3a6fda5b Mon Sep 17 00:00:00 2001 From: Devin Date: Sat, 18 Jul 2026 04:43:15 +0200 Subject: [PATCH 17/17] Fixed typo --- Common/Setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Common/Setup.py b/Common/Setup.py index 460af370..8030b00f 100644 --- a/Common/Setup.py +++ b/Common/Setup.py @@ -388,7 +388,7 @@ def __init__( var_set = set() for var in list(plotvar_dict.values()) + list(fullresvar_dict.values()): var_name = var["name"] if isinstance(var, dict) else var - var_set.add(var) + var_set.add(var_name) self.histTuple_vars = list(var_set) def collect_base_processes(p_name, parent_name=None):