Skip to content

Commit d98f4a8

Browse files
committed
made model parsing only if the model is there
1 parent 04fcf01 commit d98f4a8

File tree

1 file changed

+68
-44
lines changed

1 file changed

+68
-44
lines changed

RATapi/utils/orso.py

Lines changed: 68 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
"""Readers from file formats."""
22

33
from dataclasses import dataclass
4+
from typing import Union
45

56
import orsopy
67
from orsopy.fileio import load_orso
@@ -9,7 +10,29 @@
910
from 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

Comments
 (0)