Skip to content

Commit 6f48867

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

File tree

1 file changed

+72
-52
lines changed

1 file changed

+72
-52
lines changed

RATapi/utils/orso.py

Lines changed: 72 additions & 52 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,47 @@ 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.resolutions.append(
75+
Resolution(
76+
name=f"{sample.name} Resolution",
77+
type="constant",
78+
source="Resolution Param 1",
79+
)
5680
)
57-
)
5881

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",
65-
)
66-
)
67-
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],
82+
project.contrasts.append(
83+
Contrast(
84+
name=dataset.info.data_source.experiment.title,
85+
data=sample.name,
86+
background="Background 1",
87+
bulk_in=model_info.bulk_in.name,
88+
bulk_out=model_info.bulk_out.name,
89+
scalefactor="Scalefactor 1",
90+
resolution=f"{sample.name} Resolution",
91+
model=model_info.model,
92+
)
8093
)
81-
)
8294

8395
return project
8496

@@ -90,17 +102,20 @@ class ORSOSample:
90102
bulk_in: Parameter
91103
bulk_out: Parameter
92104
parameters: ClassList[Parameter]
93-
layers: ClassList[Layer]
105+
layers: ClassList[Layer] | ClassList[AbsorptionLayer]
106+
model: list[str]
94107

95108

96-
def orso_model_to_rat(model: orsopy.fileio.model_language.SampleModel | str) -> ORSOSample:
109+
def orso_model_to_rat(model: orsopy.fileio.model_language.SampleModel | str, absorption: bool = False) -> ORSOSample:
97110
"""Get information from an ORSO SampleModel object.
98111
99112
Parameters
100113
----------
101114
model : orsopy.fileio.model_language.SampleModel or str
102115
The sample model to turn into a RAT data. If given as a string,
103116
the string is interpreted as a layer stack in ORSO model language.
117+
absorption : bool, default False
118+
Whether to account for absorption in the model.
104119
105120
Returns
106121
-------
@@ -148,11 +163,16 @@ def orso_model_to_rat(model: orsopy.fileio.model_language.SampleModel | str) ->
148163
layers = ClassList()
149164

150165
for orso_layer in stack[1:-1]:
151-
layer_params, layer = orso_layer_to_rat_layer(orso_layer)
166+
layer_params, layer = orso_layer_to_rat_layer(orso_layer, absorption)
152167
parameters.union(layer_params)
153-
layers.append(layer)
168+
layers.union(layer)
169+
154170

155-
return ORSOSample(bulk_in=bulk_in, bulk_out=bulk_out, parameters=parameters, layers=layers)
171+
return ORSOSample(bulk_in=bulk_in,
172+
bulk_out=bulk_out,
173+
parameters=parameters,
174+
layers=layers,
175+
model=[layer.material.formula for layer in stack[1:-1]])
156176

157177

158178
def orso_layer_to_rat_layer(
@@ -195,7 +215,7 @@ def orso_layer_to_rat_layer(
195215
thickness=f"{name} Thickness",
196216
roughness=f"{name} Roughness",
197217
SLD_real=f"{name} SLD",
198-
SLD_imag=f"{name} SLD imaginary",
218+
SLD_imaginary=f"{name} SLD imaginary",
199219
)
200220
else:
201221
layer = Layer(

0 commit comments

Comments
 (0)