From 43222dd0cc8a41e0cc661a258f157b2e6a370e93 Mon Sep 17 00:00:00 2001 From: Alexandre Goettel Date: Tue, 4 Nov 2025 14:21:18 +0000 Subject: [PATCH 1/3] Get generation metadata through ini file parser. --- dingo/pipe/data_generation.py | 34 ++++------------------------- dingo/pipe/nodes/generation_node.py | 13 ----------- dingo/pipe/parser.py | 6 +++++ 3 files changed, 10 insertions(+), 43 deletions(-) diff --git a/dingo/pipe/data_generation.py b/dingo/pipe/data_generation.py index 338c74682..0448488d8 100644 --- a/dingo/pipe/data_generation.py +++ b/dingo/pipe/data_generation.py @@ -1,5 +1,6 @@ import os import sys +import json import dingo.pipe.create_injections # Needed for delta-function time priors. @@ -18,7 +19,6 @@ import lalsimulation as LS import numpy as np -from dingo.core.posterior_models.build_model import build_model_from_kwargs from dingo.gw.data.event_dataset import EventDataset from dingo.gw.domains import UniformFrequencyDomain, build_domain_from_model_metadata from dingo.gw.injection import Injection @@ -31,19 +31,13 @@ class DataGenerationInput(BilbyDataGenerationInput): def __init__(self, args, unknown_args, create_data=True): # if running on the OSG, the network has been transferred to # the local directory, replace osdf string - if args.osg: - self.model = os.path.basename(args.model) - self.model_init = os.path.basename(args.model_init) - else: - self.model = args.model - self.model_init = args.model_init - Input.__init__(self, args, unknown_args) # Generic initialisation self.meta_data = dict( command_line_args=args.__dict__, unknown_command_line_args=unknown_args, injection_parameters=None, + model=args.model_metadata, # bilby_version=bilby.__version__, # bilby_pipe_version=get_version_information(), ) @@ -273,17 +267,7 @@ def interferometers(self, interferometers): def _inject_dingo_signal(self, args): """Generate a GW signal using the dingo.gw.injection class and add it to the interferometer strain data. Also compute SNRs and store them.""" - try: - model = build_model_from_kwargs( - filename=args.model, device="meta", load_training_info=False - ) - except RuntimeError: - # 'meta' is not supported by older version of python / torch - model = build_model_from_kwargs( - filename=args.model, device="cpu", load_training_info=False - ) - - injection = Injection.from_posterior_model_metadata(model.metadata) + injection = Injection.from_posterior_model_metadata(self.meta_data["model"]) injection.use_base_domain = True # Do not generate MFD signals. injection.t_ref = self.trigger_time injection._initialize_transform() @@ -341,17 +325,7 @@ def save_hdf5(self): This method will also save the PSDs as .txt files in the data directory for easy reading by pesummary and Bilby. """ - - try: - model = build_model_from_kwargs( - filename=self.model, device="meta", load_training_info=False - ) - except RuntimeError: - # 'meta' is not supported by older version of python / torch - model = build_model_from_kwargs( - filename=self.model, device="cpu", load_training_info=False - ) - domain = build_domain_from_model_metadata(model.metadata, base=True) + domain = build_domain_from_model_metadata(self.meta_data["model"], base=True) assert isinstance(domain, UniformFrequencyDomain) if self.save_bilby_data_dump: diff --git a/dingo/pipe/nodes/generation_node.py b/dingo/pipe/nodes/generation_node.py index edbd4d9b2..967ddbaf1 100644 --- a/dingo/pipe/nodes/generation_node.py +++ b/dingo/pipe/nodes/generation_node.py @@ -56,19 +56,6 @@ def __init__(self, inputs, trigger_time, idx, dag, parent=None, importance_sampl if (value := getattr(self.inputs, attr)) is not None: input_files_to_transfer.append(os.path.abspath(str(value))) - # modifying the paths for OSDF networks - network_files = [] - for s in [self.inputs.model, self.inputs.model_init]: - if s is None: - continue - if "osdf" in s: - # stripping osdf prefix as it is not needed - network_files.append(f"igwn+osdf://{s.replace('/osdf', '')}") - else: - network_files.append(s) - - input_files_to_transfer.extend(network_files) - if self.transfer_container: input_files_to_transfer.append(self.inputs.container) for value in [ diff --git a/dingo/pipe/parser.py b/dingo/pipe/parser.py index ce22535b8..6d2264c5e 100644 --- a/dingo/pipe/parser.py +++ b/dingo/pipe/parser.py @@ -1522,4 +1522,10 @@ def create_parser(top_level=True, usage=None): ), ) + metadata_parser = parser.add_argument_group( + "Optional model metadata", + description="Machine-written only posterior model metadata.", + ) + metadata_parser.add_argument("--model-metadata", type=str, default="{}") + return parser From 758c46cb4ac8bba20831bee452f926f09bf40974 Mon Sep 17 00:00:00 2001 From: Alexandre Goettel Date: Tue, 4 Nov 2025 16:02:41 +0000 Subject: [PATCH 2/3] Complete previous commit. --- dingo/pipe/main.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/dingo/pipe/main.py b/dingo/pipe/main.py index f014f2216..8fdd44395 100644 --- a/dingo/pipe/main.py +++ b/dingo/pipe/main.py @@ -191,7 +191,8 @@ def fill_in_arguments_from_model(args, perform_arg_checks=True): importance_sampling_updates = { k.replace("-", "_"): v for k, v in importance_sampling_updates.items() } - return {**changed_args, **importance_sampling_updates}, model_args + model_metadata_str = json.dumps(model_metadata, separators=(",", ":")) + return {**changed_args, **importance_sampling_updates}, model_metadata_str class MainInput(BilbyMainInput): @@ -582,7 +583,9 @@ def main(): parser = create_parser(top_level=True) args, unknown_args = parse_args(get_command_line_arguments(), parser) - importance_sampling_updates, model_args = fill_in_arguments_from_model(args) + importance_sampling_updates, model_metadata_str = fill_in_arguments_from_model(args) + args.model_metadata = model_metadata_str + inputs = MainInput(args, unknown_args, importance_sampling_updates) write_complete_config_file(parser, args, inputs) From 7fc386cb9b192dcd97c3d6976e0c9f871532c0a8 Mon Sep 17 00:00:00 2001 From: Alexandre Date: Mon, 17 Nov 2025 04:16:31 -0800 Subject: [PATCH 3/3] Fix str/dict conversions. --- dingo/pipe/data_generation.py | 2 +- dingo/pipe/main.py | 2 +- dingo/pipe/parser.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dingo/pipe/data_generation.py b/dingo/pipe/data_generation.py index 0448488d8..24df7bf12 100644 --- a/dingo/pipe/data_generation.py +++ b/dingo/pipe/data_generation.py @@ -37,7 +37,7 @@ def __init__(self, args, unknown_args, create_data=True): command_line_args=args.__dict__, unknown_command_line_args=unknown_args, injection_parameters=None, - model=args.model_metadata, + model=json.loads(args.model_metadata_str), # bilby_version=bilby.__version__, # bilby_pipe_version=get_version_information(), ) diff --git a/dingo/pipe/main.py b/dingo/pipe/main.py index 8fdd44395..fb2d4d345 100644 --- a/dingo/pipe/main.py +++ b/dingo/pipe/main.py @@ -584,7 +584,7 @@ def main(): args, unknown_args = parse_args(get_command_line_arguments(), parser) importance_sampling_updates, model_metadata_str = fill_in_arguments_from_model(args) - args.model_metadata = model_metadata_str + args.model_metadata_str = model_metadata_str inputs = MainInput(args, unknown_args, importance_sampling_updates) write_complete_config_file(parser, args, inputs) diff --git a/dingo/pipe/parser.py b/dingo/pipe/parser.py index 6d2264c5e..8f8c7364e 100644 --- a/dingo/pipe/parser.py +++ b/dingo/pipe/parser.py @@ -1526,6 +1526,6 @@ def create_parser(top_level=True, usage=None): "Optional model metadata", description="Machine-written only posterior model metadata.", ) - metadata_parser.add_argument("--model-metadata", type=str, default="{}") + metadata_parser.add_argument("--model-metadata-str", type=str, default="{}") return parser