Raw Scan Load Sequence Diagram

Main Flow

        sequenceDiagram
    participant EventBroker
    participant ProjectModel
    participant RawScanLoadController
    participant FileStore
    participant RawScanClassifier
    participant LoaderRegistry
    participant ORNLSpiceLoader
    LoaderRegistry ->> LoaderRegistry: init(FileStore)
    ORNLSpiceLoader -->> LoaderRegistry: is registered via main
    LoaderRegistry ->> LoaderRegistry: init loader instance with appropriate FileStore
    ProjectModel ->>+RawScanLoadController: load raw scans (path)
    RawScanLoadController ->>FileStore: get files(s) at (path)
    FileStore ->>FileStore: validate file on disk
    FileStore -->> RawScanLoadController: Absolute File Paths(s)
    loop foreach File
        RawScanLoadController ->> RawScanClassifier: classify input schema
        RawScanClassifier ->> LoaderRegistry: getLoaders
        loop foreach Loader:
            RawScanClassifier ->> ORNLSpiceLoader: getScore(str path)
            RawScanClassifier ->> RawScanClassifier: update best score
        end
        RawScanClassifier -->> RawScanLoadController: (ORNL SPICE) stubbed

        RawScanLoadController ->> LoaderRegistry: buildLoader(classification, DataService)
        LoaderRegistry -->> RawScanLoadController: ORNLSpiceLoader
        RawScanLoadController ->> ORNLSpiceLoader: load(raw scan file (handler?))

        ORNLSpiceLoader ->> ORNLSpiceLoader: setup
        ORNLSpiceLoader ->> ORNLSpiceLoader: parse metadata
        ORNLSpiceLoader ->> ORNLSpiceLoader: parse ub
        ORNLSpiceLoader ->> ORNLSpiceLoader: parse scan values
        ORNLSpiceLoader ->> FileStore: fetch external metadata files
        FileStore -->> ORNLSpiceLoader: return external metadata or None
        ORNLSpiceLoader ->> ORNLSpiceLoader: parse external metadata
        ORNLSpiceLoader ->> ORNLSpiceLoader: adapt parsed data into RawScan
        ORNLSpiceLoader -->> RawScanLoadController: RawScan
        RawScanLoadController ->>RawScanLoadController: append to result List
    end
    RawScanLoadController -->>ProjectModel: List[RawScan]
    ProjectModel ->> ProjectModel : update TaviData.scans
    ProjectModel ->> EventBroker : emit RawScanListUpdateEvent
    

Classification Flow

        sequenceDiagram
    participant RawScanLoadController
    participant RawScanClassifier
    participant LoaderRegistry
    participant Loader
    participant ORNLSpiceLoader
    participant RuleBasedClassifier
    participant RuleSet
    participant Rule
    ORNLSpiceLoader ->> LoaderRegistry: Register with Registry via main
    LoaderRegistry ->> LoaderRegistry: Init loaders with appropriate FileStore
    loop foreach File
        RawScanLoadController ->> RawScanClassifier: classify input schema
        RawScanClassifier ->> LoaderRegistry : get loaders
        loop foreach Loader
        RawScanClassifier ->> Loader: generate classification score
        Loader ->> ORNLSpiceLoader: get score
        ORNLSpiceLoader ->> RuleBasedClassifier : get score
            loop foreach Rule in RuleSet
                RuleBasedClassifier ->> Rule: does this match?
                Rule -->> RuleBasedClassifier: result
                RuleBasedClassifier ->> RuleBasedClassifier: append to results List
            end
            RuleBasedClassifier ->> RuleBasedClassifier: Calculate score
            RuleBasedClassifier -->> ORNLSpiceLoader: score
            ORNLSpiceLoader -->> RawScanClassifier: score
        end
        RawScanClassifier ->> RawScanClassifier:return best match
        RawScanClassifier -->> RawScanLoadController: (ORNL SPICE) stubbed
        RawScanLoadController ->>RawScanLoadController: ...
        RawScanLoadController ->>RawScanLoadController: append to result List
    RawScanLoadController ->>RawScanLoadController: append to result List
    end
    

Disk Access Flow

        sequenceDiagram
    participant RawScanLoadController
    participant DiskServiceInterface
    participant LocalDiskService
    RawScanLoadController ->>LocalDiskService: get scan(s) at (path)
    LocalDiskService ->>pathlib: get list of ALL files @ path from disk
    loop foreach filepath
        LocalDiskService ->> LocalDiskService: get file size(path)
        LocalDiskService ->> pathlib:.stat()
        pathlib -->> LocalDiskService : filesize
            alt 0 < filesize < threshold
                LocalDiskService ->>LocalDiskService: skip
            else
                LocalDiskService ->>LocalDiskService: append to result list
            end
    end
    LocalDiskService -->> RawScanLoadController: List[str]