API: Layout¶
Helpers for building filenames from info/metadata specs.
Module: brkraw.core.layout
render_layout¶
from brkraw.core import layout as layout_core
name = layout_core.render_layout(
loader,
scan_id=3,
layout_entries=[
{"key": "Study.ID", "entry": "study", "sep": "/"},
{"key": "Subject.ID", "entry": "sub", "sep": "/"},
{"key": "Protocol", "hide": True},
],
context_map="maps.yaml",
)
Fixed keys¶
These placeholders are always available, regardless of mapped metadata:
{ScanID}/{scan_id}/{scanid}{RecoID}/{reco_id}/{recoid}(may beNone){Counter}/{counter}(optional; use for de-duplication)
You can override specs for testing via API-only kwargs:
name = layout_core.render_layout(
loader,
scan_id=3,
layout_entries=[{"key": "Protocol", "hide": True}],
override_info_spec="info_override.yaml",
override_metadata_spec="metadata_override.yaml",
)
Fields:
-
key: dotted key resolved from the layout info (for exampleSubject.ID). -
entry: prefix label used to emitentry-value(optional whenhideis true). -
hide: when true, only the value is appended. -
use_entry: reuse a previously definedentryvalue. -
sep: separator to insert after this field (default_, use/for folders). -
value_pattern: regex that defines allowed characters (default[A-Za-z0-9._-]). -
value_replace: replacement for disallowed characters (default""). -
max_length: truncate values longer than this length.
Notes:
-
Values come from merged
info_spec+metadata_specresults. -
Missing values are skipped.
-
When no parts remain, the fallback is
scan-<ScanID>. -
context_mapapplies runtime mapping rules to the spec output. - Metadata still wins on conflicts when keys overlap.
- When
context_map.__meta__defineslayout_entriesorlayout_template, those can be passed explicitly torender_layoutto override config defaults.
Layout info parts¶
info, metadata = layout_core.load_layout_info_parts(
loader,
scan_id=3,
context_map="maps.yaml",
)
Notes:
infois the mappedinfo_specoutput.metadatais the mappedmetadata_specoutput.
Slice pack suffixes¶
info = layout_core.load_layout_info(
loader,
scan_id=3,
)
suffixes = layout_core.render_slicepack_suffixes(
info,
count=3,
template="_{SliceOrient}",
)
Notes:
-
{index}is always 1-based. -
{SliceOrient}resolves from the default info spec when present.