Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions biosim_extractor/helpers/metadata_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,3 +31,22 @@ def round_floats(obj, decimals=3, preserve_below=1e-3):
return {k: round_floats(v, decimals, preserve_below) for k, v in obj.items()}

return obj


def merge_metadata(existing, incoming):
if not existing:
return incoming
if not incoming:
return existing

for key, value in incoming.items():
if (
key in existing
and isinstance(existing[key], dict)
and isinstance(value, dict)
):
merge_metadata(existing[key], value)
else:
existing[key] = value

return existing
8 changes: 5 additions & 3 deletions biosim_extractor/metadata/populatemetadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

from biosim_extractor.amber.amberlog import AmberLogParser
from biosim_extractor.gromacs.gromacslog import GromacsLogParser
from biosim_extractor.helpers.metadata_utils import round_floats
from biosim_extractor.helpers.metadata_utils import merge_metadata, round_floats
from biosim_extractor.mdanalysis.toptraj import TopTrajParser
from biosim_extractor.metadata.fetchschema import get_schema, update_schema
from biosim_extractor.metadata.filemetadata import files_metadata, group_files
Expand Down Expand Up @@ -257,7 +257,9 @@ def populate(self):
self.data = self.apply_mapping()

if self.top_file and self.traj_file:
self.data = self.populate_toptraj()
toptraj_data = self.populate_toptraj()
if toptraj_data is not None:
self.data = merge_metadata(self.data, toptraj_data)

# self.data["SimulationMetadata"]["@type"] = "SimulationMetadata"
result = self.data["SimulationMetadata"]
Expand Down Expand Up @@ -526,7 +528,6 @@ def resolve_schema_inputs(args):
mapping_path = args.mappingschema
biosim_path = args.biosimschema

# If either path is missing, fetch a schema bundle and fill defaults.
if not mapping_path or not biosim_path:
bundle = (
update_schema(
Expand All @@ -539,6 +540,7 @@ def resolve_schema_inputs(args):
cache_dir=args.schema_cache_dir,
)
)

mapping_path = mapping_path or str(bundle.mapping_json)
biosim_path = biosim_path or str(bundle.schema_yaml)

Expand Down
Loading