ORNLSpiceLoader
ORNLSpiceLoader loads ORNL SPICE scan files (.dat) into TAVI scan models.
It parses:
scan values from the tabular section,
scan metadata from file headers,
TAVI-specific metadata used by the application layer,
optional UB configuration data from sibling
UBConffiles.
Overview
Source module:
tavi.library.storage.loader.ornl_spice_loader
Primary class:
- class tavi.library.storage.loader.ornl_spice_loader.ORNLSpiceLoader(filestore: FileStoreInterface)[source]
Loader for ORNL Spice format scan files.
- adapt_scan_data(uuid: UUID, values: ScanData, meta: ScanMetadata, tavi_meta: TaviMetadata, prov: Provenance) RawScan[source]
Adapt scan data.
Expected Data Layout
The loader expects a structure similar to:
exp815/
Datafiles/
HB1_exp0815_scan0003.dat
UBConf/
UB13Jun2019_41635PM.ini
The ubconf entry in the .dat header is used to resolve the UB file under
the sibling UBConf directory.
Typical Loading Flow
ORNLSpiceLoader.load(path) performs these steps:
Parse numeric scan arrays via
parse_scan_values.Parse header metadata via
parse_metadata.Parse TAVI metadata via
parse_tavi_metadata.Build provenance via
create_provenance.Resolve and parse external UB metadata via
parse_external_metadata.Merge external UB data into metadata and return a
RawScan.
Method Notes
parse_scan_values
Converts SPICE column names into valid attribute-like keys.
Handles empty/invalid measurement sections by returning empty arrays.
parse_metadata
Collects key/value header fields before
# col_headers =.Captures terminal status entries (for example scan completed/stopped).
parse_external_metadata
Supports INI-like UB files and legacy XML UB content.
Returns a plain dictionary that can be merged into scan metadata.
Minimal Example
from tavi.library.storage.loader.ornl_spice_loader import ORNLSpiceLoader
from tavi.library.storage.local_file_store import LocalFileStore
loader = ORNLSpiceLoader(LocalFileStore())
scan = loader.load("test_data/exp815/Datafiles/HB1_exp0815_scan0003.dat")
print(scan.uuid)
print(scan.metadata.ubconf)
print(scan.data.h[:3])