Skip to content

Commit 74046d4

Browse files
committed
Fixes lint failing on runner and adds example for user guide
1 parent fa74529 commit 74046d4

File tree

4 files changed

+224
-8
lines changed

4 files changed

+224
-8
lines changed

RATapi/events.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import os
2-
from typing import Callable, List, Union
2+
from typing import Callable, Union
33

44
from RATapi.rat_core import EventBridge, EventTypes, PlotEventData, ProgressEventData
55

@@ -21,7 +21,7 @@ def notify(event_type: EventTypes, data: Union[str, PlotEventData, ProgressEvent
2121
callback(data)
2222

2323

24-
def get_event_callback(event_type: EventTypes) -> List[Callable[[Union[str, PlotEventData, ProgressEventData]], None]]:
24+
def get_event_callback(event_type: EventTypes) -> list[Callable[[Union[str, PlotEventData, ProgressEventData]], None]]:
2525
"""Returns all callbacks registered for the given event type.
2626
2727
Parameters
Lines changed: 215 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,215 @@
1+
import numpy as np
2+
3+
import RATapi as RAT
4+
5+
6+
def two_contrast_example():
7+
# Two contrast example for the user guide
8+
problem = RAT.Project(name="DSPC monolayers")
9+
parameters = [
10+
RAT.models.Parameter(name="Tails Thickness", min=10, value=20, max=30, fit=True),
11+
RAT.models.Parameter(name="Heads Thickness", min=3, value=11, max=16, fit=True),
12+
RAT.models.Parameter(name="Tails Roughness", min=2, value=5, max=9, fit=True),
13+
RAT.models.Parameter(name="Heads Roughness", min=2, value=5, max=9, fit=True),
14+
RAT.models.Parameter(name="Deuterated Tails SLD", min=4e-6, value=6e-6, max=2e-5, fit=True),
15+
RAT.models.Parameter(name="Hydrogenated Tails SLD", min=-0.6e-6, value=-0.4e-6, max=0, fit=True),
16+
RAT.models.Parameter(name="Deuterated Heads SLD", min=1e-6, value=3e-6, max=8e-6, fit=True),
17+
RAT.models.Parameter(name="Hydrogenated Heads SLD", min=0.1e-6, value=1.4e-6, max=3e-6, fit=True),
18+
RAT.models.Parameter(name="Heads Hydration", min=0, value=0.3, max=0.5, fit=True),
19+
]
20+
21+
problem.parameters.extend(parameters)
22+
H_Heads = RAT.models.Layer(
23+
name="Hydrogenated Heads",
24+
thickness="Heads Thickness",
25+
SLD="Hydrogenated Heads SLD",
26+
roughness="Heads Roughness",
27+
hydration="Heads Hydration",
28+
hydrate_with="bulk out",
29+
)
30+
31+
D_Heads = RAT.models.Layer(
32+
name="Deuterated Heads",
33+
thickness="Heads Thickness",
34+
SLD="Deuterated Heads SLD",
35+
roughness="Heads Roughness",
36+
hydration="Heads Hydration",
37+
hydrate_with="bulk out",
38+
)
39+
40+
D_Tails = RAT.models.Layer(
41+
name="Deuterated Tails", thickness="Tails Thickness", SLD="Deuterated Tails SLD", roughness="Tails Roughness"
42+
)
43+
44+
H_Tails = RAT.models.Layer(
45+
name="Hydrogenated Tails",
46+
thickness="Tails Thickness",
47+
SLD="Hydrogenated Tails SLD",
48+
roughness="Tails Roughness",
49+
)
50+
51+
problem.layers.extend([H_Heads, D_Heads, H_Tails, D_Tails])
52+
53+
problem.background_parameters.set_fields(0, name="Backs Value ACMW")
54+
problem.background_parameters.set_fields(0, value=5.5e-6)
55+
problem.background_parameters.append(name="Backs Value D2O", min=1e-8, value=2.8e-6, max=1e-5)
56+
57+
problem.backgrounds.append(name="Background D2O", type="constant", value_1="Backs Value D2O")
58+
problem.backgrounds.set_fields(0, name="Background ACMW", value_1="Backs Value ACMW")
59+
60+
problem.bulk_out.append(name="SLD ACMW", min=-0.6e-6, value=-0.56e-6, max=-0.3e-6, fit=True)
61+
62+
d13acmw20 = np.array(
63+
[
64+
[5.1793e-02, 1.8087e-05, 7.9683e-07],
65+
[5.4383e-02, 1.4582e-05, 6.3691e-07],
66+
[5.7102e-02, 1.3621e-05, 5.5407e-07],
67+
[5.9957e-02, 1.2409e-05, 4.8014e-07],
68+
[6.2955e-02, 1.0992e-05, 4.1824e-07],
69+
[6.6103e-02, 1.0619e-05, 3.7541e-07],
70+
[6.9408e-02, 1.0162e-05, 3.4945e-07],
71+
[7.2878e-02, 1.0716e-05, 3.3763e-07],
72+
[7.6522e-02, 8.3468e-06, 2.8040e-07],
73+
[8.0348e-02, 7.5250e-06, 2.5702e-07],
74+
[8.4365e-02, 6.4395e-06, 2.2528e-07],
75+
[8.8584e-02, 6.0544e-06, 2.0545e-07],
76+
[9.3013e-02, 5.9517e-06, 1.9417e-07],
77+
[9.7664e-02, 5.6433e-06, 1.8108e-07],
78+
[1.0255e-01, 4.8172e-06, 1.6076e-07],
79+
[1.0767e-01, 4.8066e-06, 1.5520e-07],
80+
[1.1306e-01, 4.1559e-06, 1.4115e-07],
81+
[1.1871e-01, 4.1418e-06, 1.3926e-07],
82+
[1.2465e-01, 3.4580e-06, 1.2273e-07],
83+
[1.3088e-01, 3.2376e-06, 1.1791e-07],
84+
[1.3742e-01, 3.0976e-06, 1.1948e-07],
85+
[1.4429e-01, 2.7478e-06, 1.1518e-07],
86+
[1.5151e-01, 2.5492e-06, 1.1573e-07],
87+
[1.5908e-01, 2.7500e-06, 1.2812e-07],
88+
[1.6704e-01, 2.1813e-06, 2.0450e-07],
89+
[1.7539e-01, 1.8609e-06, 5.4900e-07],
90+
[1.8416e-01, 1.9405e-06, 1.5660e-07],
91+
[1.9337e-01, 1.7421e-06, 2.3280e-07],
92+
[2.0304e-01, 1.8050e-06, 3.9820e-07],
93+
[2.1319e-01, 1.5801e-06, 1.4110e-07],
94+
[2.2385e-01, 1.6724e-06, 7.7900e-08],
95+
[2.3504e-01, 1.4150e-06, 4.0820e-07],
96+
[2.4679e-01, 1.4340e-06, 5.3180e-07],
97+
[2.5913e-01, 1.3102e-06, 2.6000e-07],
98+
[2.7209e-01, 1.3702e-06, 2.8540e-07],
99+
[2.8569e-01, 1.2468e-06, 2.3230e-07],
100+
[2.9998e-01, 1.2956e-06, 5.3240e-07],
101+
[3.1497e-01, 1.2947e-06, 3.9940e-07],
102+
[3.3072e-01, 1.2488e-06, 2.1390e-07],
103+
[3.4726e-01, 1.4620e-06, 3.3640e-07],
104+
[3.6462e-01, 1.3056e-06, 2.1600e-07],
105+
[3.8285e-01, 1.4553e-06, 2.3170e-07],
106+
[4.0200e-01, 1.1579e-06, 2.6740e-07],
107+
[4.2210e-01, 1.1753e-06, 3.0940e-07],
108+
[4.4320e-01, 1.0066e-06, 5.2040e-07],
109+
[4.6536e-01, 1.1043e-06, 3.1870e-07],
110+
[4.8863e-01, 1.2969e-06, 4.1670e-07],
111+
[5.1306e-01, 1.2495e-06, 2.0890e-07],
112+
[5.3871e-01, 1.3898e-06, 4.7560e-07],
113+
[5.6565e-01, 1.1225e-06, 3.0470e-07],
114+
[5.8877e-01, 8.3346e-07, 3.8944e-07],
115+
]
116+
)
117+
118+
d70d2o20 = np.array(
119+
[
120+
[5.1793e-02, 1.4943e-04, 3.2517e-06],
121+
[5.4383e-02, 1.1882e-04, 2.5846e-06],
122+
[5.7102e-02, 9.2164e-05, 2.0507e-06],
123+
[5.9957e-02, 7.7813e-05, 1.7070e-06],
124+
[6.2955e-02, 6.1143e-05, 1.3983e-06],
125+
[6.6103e-02, 4.8033e-05, 1.1343e-06],
126+
[6.9408e-02, 4.1379e-05, 1.0006e-06],
127+
[7.2878e-02, 3.5090e-05, 8.6919e-07],
128+
[7.6522e-02, 3.0350e-05, 7.5890e-07],
129+
[8.0348e-02, 2.4115e-05, 6.5226e-07],
130+
[8.4365e-02, 2.0755e-05, 5.7445e-07],
131+
[8.8584e-02, 1.7500e-05, 4.9617e-07],
132+
[9.3013e-02, 1.5011e-05, 4.3754e-07],
133+
[9.7664e-02, 1.3632e-05, 3.9907e-07],
134+
[1.0255e-01, 1.2997e-05, 3.7469e-07],
135+
[1.0767e-01, 1.1656e-05, 3.4282e-07],
136+
[1.1306e-01, 1.0820e-05, 3.2299e-07],
137+
[1.1871e-01, 9.5831e-06, 3.0088e-07],
138+
[1.2465e-01, 8.9996e-06, 2.8102e-07],
139+
[1.3088e-01, 8.6498e-06, 2.7363e-07],
140+
[1.3742e-01, 7.9412e-06, 2.7158e-07],
141+
[1.4429e-01, 7.4042e-06, 2.6829e-07],
142+
[1.5151e-01, 6.8321e-06, 2.6877e-07],
143+
[1.5908e-01, 5.6809e-06, 2.6232e-07],
144+
[1.6704e-01, 5.6646e-06, 2.8607e-07],
145+
[1.7539e-01, 4.7762e-06, 2.7767e-07],
146+
[1.8416e-01, 4.1971e-06, 2.7353e-07],
147+
[1.9337e-01, 4.1815e-06, 2.9140e-07],
148+
[2.0304e-01, 3.2725e-06, 2.3160e-07],
149+
[2.1319e-01, 2.3244e-06, 4.2270e-07],
150+
[2.2385e-01, 2.2892e-06, 1.4970e-07],
151+
[2.3504e-01, 1.9198e-06, 8.1460e-07],
152+
[2.4679e-01, 1.4828e-06, 1.0840e-07],
153+
[2.5913e-01, 1.1450e-06, 4.7440e-07],
154+
[2.7209e-01, 1.3047e-06, 1.8840e-07],
155+
[2.8569e-01, 9.6081e-07, 3.9385e-07],
156+
[2.9998e-01, 8.2280e-07, 2.3955e-07],
157+
[3.1497e-01, 6.3219e-07, 3.5324e-07],
158+
[3.3072e-01, 6.1254e-07, 5.0846e-07],
159+
[3.4726e-01, 7.4092e-07, 2.2312e-07],
160+
[3.6462e-01, 6.3584e-07, 4.2866e-07],
161+
[3.8285e-01, 7.7287e-07, 2.9493e-07],
162+
[4.0200e-01, 9.4637e-07, 2.3347e-07],
163+
[4.2210e-01, 7.0576e-07, 3.3494e-07],
164+
[4.4320e-01, 7.8969e-07, 2.3371e-07],
165+
[4.6536e-01, 5.8374e-07, 3.2624e-07],
166+
[4.8863e-01, 5.6711e-07, 6.0419e-07],
167+
[5.1306e-01, 4.7782e-07, 3.4822e-07],
168+
[5.3871e-01, 6.3813e-07, 4.3279e-07],
169+
[5.6565e-01, 4.6186e-07, 1.8863e-07],
170+
[5.8877e-01, 5.6129e-07, 4.3960e-07],
171+
]
172+
)
173+
174+
# d13ACM = np.loadtxt(d13acmw20, delimiter=',')
175+
# d70d2O = np.loadtxt(data_path / 'd70d2o20.dat', delimiter=',')
176+
problem.data.append(name="H-tail / D-head / ACMW", data=d13acmw20)
177+
problem.data.append(name="D-tail / H-head / D2O", data=d70d2o20)
178+
179+
problem.contrasts.append(
180+
name="D-tail/H-Head/D2O",
181+
background="Background D2O",
182+
resolution="Resolution 1",
183+
scalefactor="Scalefactor 1",
184+
bulk_out="SLD D2O",
185+
bulk_in="SLD Air",
186+
data="D-tail / H-head / D2O",
187+
)
188+
189+
problem.contrasts.append(
190+
name="H-tail/D-Head/ACMW",
191+
background="Background ACMW",
192+
resolution="Resolution 1",
193+
scalefactor="Scalefactor 1",
194+
bulk_out="SLD ACMW",
195+
bulk_in="SLD Air",
196+
data="D-tail / H-head / D2O",
197+
)
198+
199+
problem.contrasts.set_fields(0, model=["Deuterated Tails", "Hydrogenated Heads"])
200+
problem.contrasts.set_fields(1, model=["Hydrogenated Tails", "Deuterated Heads"])
201+
202+
problem.background_parameters.set_fields(0, fit=True)
203+
problem.background_parameters.set_fields(1, fit=True)
204+
problem.scalefactors.set_fields(0, fit=True)
205+
problem.bulk_out.set_fields(0, fit=True)
206+
207+
return problem
208+
209+
210+
if __name__ == "__main__":
211+
problem = two_contrast_example()
212+
controls = RAT.Controls()
213+
problem, results = RAT.run(problem, controls)
214+
215+
RAT.plotting.plot_ref_sld(problem, results, True)

RATapi/utils/convert.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
"""Utilities for converting input files to Python `Project`s."""
22

33
import json
4+
from collections.abc import Iterable
45
from pathlib import Path
5-
from typing import Iterable, Union
6+
from typing import Union
67

78
from numpy import array, empty
89
from scipy.io.matlab import MatlabOpaque, loadmat

RATapi/wrappers.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import pathlib
22
from contextlib import suppress
3-
from typing import Callable, Tuple
3+
from typing import Callable
44

55
import numpy as np
66
from numpy.typing import ArrayLike
@@ -47,12 +47,12 @@ def __init__(self, filename: str) -> None:
4747
self.engine.cd(str(path.parent), nargout=0)
4848
self.function_name = path.stem
4949

50-
def getHandle(self) -> Callable[[ArrayLike, ArrayLike, ArrayLike, int, int], Tuple[ArrayLike, float]]:
50+
def getHandle(self) -> Callable[[ArrayLike, ArrayLike, ArrayLike, int, int], tuple[ArrayLike, float]]:
5151
"""Returns a wrapper for the custom MATLAB function
5252
5353
Returns
5454
-------
55-
wrapper : Callable[[ArrayLike, ArrayLike, ArrayLike, int, int], Tuple[ArrayLike, float]]
55+
wrapper : Callable[[ArrayLike, ArrayLike, ArrayLike, int, int], tuple[ArrayLike, float]]
5656
The wrapper function for the MATLAB callback
5757
5858
"""
@@ -95,12 +95,12 @@ class DylibWrapper:
9595
def __init__(self, filename, function_name) -> None:
9696
self.engine = RATapi.rat_core.DylibEngine(filename, function_name)
9797

98-
def getHandle(self) -> Callable[[ArrayLike, ArrayLike, ArrayLike, int, int], Tuple[ArrayLike, float]]:
98+
def getHandle(self) -> Callable[[ArrayLike, ArrayLike, ArrayLike, int, int], tuple[ArrayLike, float]]:
9999
"""Returns a wrapper for the custom dynamic library function
100100
101101
Returns
102102
-------
103-
wrapper : Callable[[ArrayLike, ArrayLike, ArrayLike, int, int], Tuple[ArrayLike, float]]
103+
wrapper : Callable[[ArrayLike, ArrayLike, ArrayLike, int, int], tuple[ArrayLike, float]]
104104
The wrapper function for the dynamic library callback
105105
106106
"""

0 commit comments

Comments
 (0)