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 UBConf files.

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.

create_provenance(file_path: str) Provenance[source]

Create provenance of the scan file.

get_scan_type() RawScanType[source]

Get scan type (ORNLSpice).

get_score(file_path: str) float[source]

Get score for scan.

load(file_path: str) Scan[source]

Load scan data.

parse_external_metadata(file_path: str, ub_name: str) dict[str, Any][source]

Parse corresponding file in ubconf as external metadata.

parse_metadata(file_path: str) ScanMetadata[source]

Parse metadata.

parse_scan_values(file_path: str) ScanData[source]

Parse scan values.

parse_tavi_metadata(file_path: str) TaviMetadata[source]

Parse metadata.

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:

  1. Parse numeric scan arrays via parse_scan_values.

  2. Parse header metadata via parse_metadata.

  3. Parse TAVI metadata via parse_tavi_metadata.

  4. Build provenance via create_provenance.

  5. Resolve and parse external UB metadata via parse_external_metadata.

  6. 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])