11"""Readers from file formats."""
22
33from dataclasses import dataclass
4+ from typing import Union
45
56import orsopy
67from orsopy .fileio import load_orso
910from RATapi .models import AbsorptionLayer , Background , Contrast , Data , Layer , Parameter , Resolution
1011
1112
12- def read_ort (filepath : str ) -> Project :
13+ def load_ort_data (filepath : str ) -> Union [Data , list [Data ]]:
14+ """Read data from an .ort file.
15+
16+ Parameters
17+ ----------
18+ filepath : str
19+ The path to the .ort file.
20+
21+ Returns
22+ -------
23+ Data | list[Data]
24+ If the .ort file contains one dataset, just the data model.
25+ If it contains multiple datasets, returns a list of data models.
26+
27+ """
28+ ort_data = load_orso (filepath )
29+ datasets = [Data (name = dataset .info .data_source .sample .name , data = dataset .data ) for dataset in ort_data ]
30+ if len (datasets ) == 1 :
31+ return datasets [0 ]
32+ return datasets
33+
34+
35+ def ort_to_project (filepath : str ) -> Project :
1336 """Create a project from an .ort file.
1437
1538 Parameters
@@ -27,58 +50,59 @@ def read_ort(filepath: str) -> Project:
2750 ort_data = load_orso (filepath )
2851
2952 for dataset in ort_data :
30- metadata = dataset .info
31- sample = metadata .data_source .sample
32- model_info = orso_model_to_rat (sample .model )
33-
34- # Add all parameters that aren't already defined
35- project .parameters .union (model_info .parameters )
36- project .layers .extend (model_info .layers )
37- project .bulk_in .append (model_info .bulk_in )
38- project .bulk_out .append (model_info .bulk_out )
53+ sample = dataset .info .data_source .sample
3954
4055 project .data .append (Data (name = sample .name , data = dataset .data ))
4156
42- if dataset .data .shape [1 ] == 4 :
43- project .resolutions .append (
44- Resolution (
45- name = f"{ sample .name } Resolution" ,
46- type = "data" ,
57+ if sample .model is not None :
58+ model_info = orso_model_to_rat (sample .model )
59+
60+ # Add all parameters that aren't already defined
61+ project .parameters .union (model_info .parameters )
62+ project .layers .extend (model_info .layers )
63+ project .bulk_in .append (model_info .bulk_in )
64+ project .bulk_out .append (model_info .bulk_out )
65+
66+ if dataset .data .shape [1 ] == 4 :
67+ project .resolutions .append (
68+ Resolution (
69+ name = f"{ sample .name } Resolution" ,
70+ type = "data" ,
71+ )
4772 )
48- )
49- else :
50- project .resolution_parameters .append (Parameter ( name = f" { sample . name } Resolution Parameter" ))
51- project . resolutions . append (
52- Resolution (
53- name = f" { sample . name } Resolution " ,
54- type = "constant " ,
55- source = f" { sample . name } Resolution Parameter" ,
73+ else :
74+ project . resolution_parameters . append ( Parameter ( name = f" { sample . name } Resolution Parameter" ))
75+ project .resolutions .append (
76+ Resolution (
77+ name = f" { sample . name } Resolution" ,
78+ type = "constant " ,
79+ source = f" { sample . name } Resolution Parameter " ,
80+ )
5681 )
57- )
5882
59- project .background_parameters .append (Parameter (name = f"{ sample .name } Background Parameter" ))
60- project .backgrounds .append (
61- Background (
62- name = f"{ sample .name } Background" ,
63- type = "constant" ,
64- source = f"{ sample .name } Background Parameter" ,
83+ project .background_parameters .append (Parameter (name = f"{ sample .name } Background Parameter" ))
84+ project .backgrounds .append (
85+ Background (
86+ name = f"{ sample .name } Background" ,
87+ type = "constant" ,
88+ source = f"{ sample .name } Background Parameter" ,
89+ )
6590 )
66- )
6791
68- project .scalefactors .append (Parameter (name = f"{ sample .name } Scalefactor" ))
69-
70- project .contrasts .append (
71- Contrast (
72- name = metadata .data_source .experiment .title ,
73- data = sample .name ,
74- background = f"{ sample .name } Background" ,
75- bulk_in = model_info .bulk_in .name ,
76- bulk_out = model_info .bulk_out .name ,
77- scalefactor = f"{ sample .name } Scalefactor" ,
78- resolution = f"{ sample .name } Resolution" ,
79- model = [layer .name for layer in model_info .layers ],
92+ project .scalefactors .append (Parameter (name = f"{ sample .name } Scalefactor" ))
93+
94+ project .contrasts .append (
95+ Contrast (
96+ name = dataset .info .data_source .experiment .title ,
97+ data = sample .name ,
98+ background = f"{ sample .name } Background" ,
99+ bulk_in = model_info .bulk_in .name ,
100+ bulk_out = model_info .bulk_out .name ,
101+ scalefactor = f"{ sample .name } Scalefactor" ,
102+ resolution = f"{ sample .name } Resolution" ,
103+ model = [layer .name for layer in model_info .layers ],
104+ )
80105 )
81- )
82106
83107 return project
84108
0 commit comments