Skip to content

Commit fc67011

Browse files
authored
Makes examples importable (#51)
* Makes examples importable * Adds examples to init for ease of importing * Adds examples to top-level __init__ file
1 parent 927baaf commit fc67011

File tree

10 files changed

+954
-882
lines changed

10 files changed

+954
-882
lines changed

RATapi/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1+
import RATapi.examples as examples
12
from RATapi import events, models
23
from RATapi.classlist import ClassList
34
from RATapi.controls import Controls
45
from RATapi.project import Project
56
from RATapi.run import run
67
from RATapi.utils import plotting
78

8-
__all__ = ["models", "events", "ClassList", "Controls", "Project", "run", "plotting"]
9+
__all__ = ["examples", "models", "events", "ClassList", "Controls", "Project", "run", "plotting"]

RATapi/examples/__init__.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
from RATapi.examples.absorption.absorption import absorption
2+
from RATapi.examples.domains.domains_custom_layers import domains_custom_layers
3+
from RATapi.examples.domains.domains_custom_XY import domains_custom_XY
4+
from RATapi.examples.domains.domains_standard_layers import domains_standard_layers
5+
from RATapi.examples.non_polarised.DSPC_custom_layers import DSPC_custom_layers
6+
from RATapi.examples.non_polarised.DSPC_custom_XY import DSPC_custom_XY
7+
from RATapi.examples.non_polarised.DSPC_standard_layers import DSPC_standard_layers
8+
9+
__all__ = [
10+
"absorption",
11+
"domains_custom_layers",
12+
"domains_custom_XY",
13+
"domains_standard_layers",
14+
"DSPC_custom_layers",
15+
"DSPC_custom_XY",
16+
"DSPC_standard_layers",
17+
]
Lines changed: 154 additions & 141 deletions
Original file line numberDiff line numberDiff line change
@@ -1,148 +1,161 @@
1-
"""Custom layers model including absorption"""
2-
31
import os
42
import pathlib
53

64
import numpy as np
75

86
import RATapi as RAT
97

10-
problem = RAT.Project(
11-
name="Absorption example",
12-
calculation="non polarised",
13-
model="custom layers",
14-
geometry="substrate/liquid",
15-
absorption=True,
16-
)
17-
18-
# Add the required parameters (substrate roughness is already there by default)
19-
problem.parameters.append(name="Alloy Thickness", min=100.0, value=135.6, max=200.0, fit=True)
20-
problem.parameters.append(name="Alloy SLD up", min=6.0e-6, value=9.87e-6, max=1.2e-5, fit=True)
21-
problem.parameters.append(name="Alloy SLD imaginary up", min=1.0e-9, value=4.87e-8, max=1.0e-7, fit=True)
22-
problem.parameters.append(name="Alloy SLD down", min=6.0e-6, value=7.05e-6, max=1.3e-5, fit=True)
23-
problem.parameters.append(name="Alloy SLD imaginary down", min=1.0e-9, value=4.87e-8, max=1.0e-7, fit=True)
24-
problem.parameters.append(name="Alloy Roughness", min=2.0, value=5.71, max=10.0, fit=True)
25-
problem.parameters.append(name="Gold Thickness", min=100.0, value=154.7, max=200.0, fit=True)
26-
problem.parameters.append(name="Gold Roughness", min=0.1, value=5.42, max=10.0, fit=True)
27-
problem.parameters.append(name="Gold SLD", min=4.0e-6, value=4.49e-6, max=5.0e-6, fit=True)
28-
problem.parameters.append(name="Gold SLD imaginary", min=1.0e-9, value=4.20e-8, max=1.0e-7, fit=True)
29-
30-
problem.parameters.append(name="Thiol APM", min=40.0, value=56.27, max=100.0, fit=True)
31-
problem.parameters.append(name="Thiol Head Hydration", min=20.0, value=30.0, max=50.0, fit=True)
32-
problem.parameters.append(name="Thiol Coverage", min=0.5, value=0.9, max=1.0, fit=True)
33-
34-
problem.parameters.append(name="CW Thickness", min=1.0, value=12.87, max=25.0, fit=True)
35-
problem.parameters.append(name="Bilayer APM", min=48.0, value=65.86, max=90.0, fit=True)
36-
problem.parameters.append(name="Bilayer Head Hydration", min=20.0, value=30.0, max=50.0, fit=True)
37-
problem.parameters.append(name="Bilayer Roughness", min=1.0, value=3.87, max=10.0, fit=True)
38-
problem.parameters.append(name="Bilayer Coverage", min=0.5, value=0.94, max=1.0, fit=True)
39-
40-
# Change the existing Bulk In parameter to be Silicon
41-
problem.bulk_in.set_fields(0, name="Silicon", min=2.0e-6, value=2.073e-6, max=2.1e-6)
42-
43-
# We need 2 bulk outs - D2O and H2O
44-
problem.bulk_out.set_fields(0, name="D2O", min=5.8e-06, value=6.21e-06, max=6.35e-06, fit=True)
45-
problem.bulk_out.append(name="H2O", min=-5.6e-07, value=-3.15e-07, max=0.0, fit=True)
46-
47-
# Use a different scalefactor for each dataset
48-
del problem.scalefactors[0]
49-
problem.scalefactors.append(name="Scalefactor 1", min=0.5, value=1, max=1.5, fit=True)
50-
problem.scalefactors.append(name="Scalefactor 2", min=0.5, value=1, max=1.5, fit=True)
51-
problem.scalefactors.append(name="Scalefactor 3", min=0.5, value=1, max=1.5, fit=True)
52-
problem.scalefactors.append(name="Scalefactor 4", min=0.5, value=1, max=1.5, fit=True)
53-
54-
# Similarly, use an individual background for each dataset
55-
del problem.backgrounds[0]
56-
del problem.background_parameters[0]
57-
58-
problem.background_parameters.append(name="Background parameter 1", min=5.0e-08, value=7.88e-06, max=9.0e-05, fit=True)
59-
problem.background_parameters.append(name="Background parameter 2", min=1.0e-08, value=5.46e-06, max=9.0e-05, fit=True)
60-
problem.background_parameters.append(name="Background parameter 3", min=1.0e-06, value=9.01e-06, max=9.0e-05, fit=True)
61-
problem.background_parameters.append(name="Background parameter 4", min=1.0e-06, value=5.61e-06, max=9.0e-05, fit=True)
62-
63-
problem.backgrounds.append(name="Background 1", type="constant", value_1="Background parameter 1")
64-
problem.backgrounds.append(name="Background 2", type="constant", value_1="Background parameter 2")
65-
problem.backgrounds.append(name="Background 3", type="constant", value_1="Background parameter 3")
66-
problem.backgrounds.append(name="Background 4", type="constant", value_1="Background parameter 4")
67-
68-
# Make the resolution fittable
69-
problem.resolution_parameters.set_fields(0, fit=True)
70-
71-
# Now add the data we need
72-
data_path = os.path.join(pathlib.Path(__file__).parents[1].resolve(), "data")
73-
74-
data_1 = np.loadtxt(os.path.join(data_path, "D2O_spin_down.dat"))
75-
problem.data.append(name="D2O_dn", data=data_1)
76-
77-
data_2 = np.loadtxt(os.path.join(data_path, "D2O_spin_up.dat"))
78-
problem.data.append(name="D2O_up", data=data_2)
79-
80-
data_3 = np.loadtxt(os.path.join(data_path, "H2O_spin_down.dat"))
81-
problem.data.append(name="H2O_dn", data=data_3)
82-
83-
data_4 = np.loadtxt(os.path.join(data_path, "H2O_spin_up.dat"))
84-
problem.data.append(name="H2O_up", data=data_4)
85-
86-
# Add the custom file
87-
problem.custom_files.append(
88-
name="DPPC absorption",
89-
filename="volume_thiol_bilayer.py",
90-
language="python",
91-
path=pathlib.Path(__file__).parent.resolve(),
92-
)
93-
94-
# Finally add the contrasts
95-
problem.contrasts.append(
96-
name="D2O Down",
97-
data="D2O_dn",
98-
background="Background 1",
99-
bulk_in="Silicon",
100-
bulk_out="D2O",
101-
scalefactor="Scalefactor 1",
102-
resolution="Resolution 1",
103-
resample=True,
104-
model=["DPPC absorption"],
105-
)
106-
107-
problem.contrasts.append(
108-
name="D2O Up",
109-
data="D2O_up",
110-
background="Background 2",
111-
bulk_in="Silicon",
112-
bulk_out="D2O",
113-
scalefactor="Scalefactor 2",
114-
resolution="Resolution 1",
115-
resample=True,
116-
model=["DPPC absorption"],
117-
)
118-
119-
problem.contrasts.append(
120-
name="H2O Down",
121-
data="H2O_dn",
122-
background="Background 3",
123-
bulk_in="Silicon",
124-
bulk_out="H2O",
125-
scalefactor="Scalefactor 3",
126-
resolution="Resolution 1",
127-
resample=True,
128-
model=["DPPC absorption"],
129-
)
130-
131-
problem.contrasts.append(
132-
name="H2O Up",
133-
data="H2O_up",
134-
background="Background 4",
135-
bulk_in="Silicon",
136-
bulk_out="H2O",
137-
scalefactor="Scalefactor 4",
138-
resolution="Resolution 1",
139-
resample=True,
140-
model=["DPPC absorption"],
141-
)
142-
143-
# Now make a controls block
144-
controls = RAT.Controls(parallel="contrasts", resampleParams=[0.9, 150.0])
145-
146-
# Run the code and plot the results
147-
problem, results = RAT.run(problem, controls)
148-
RAT.plotting.plot_ref_sld(problem, results, True)
8+
9+
def absorption():
10+
"""Custom layers model including absorption"""
11+
problem = RAT.Project(
12+
name="Absorption example",
13+
calculation="non polarised",
14+
model="custom layers",
15+
geometry="substrate/liquid",
16+
absorption=True,
17+
)
18+
19+
# Add the required parameters (substrate roughness is already there by default)
20+
problem.parameters.append(name="Alloy Thickness", min=100.0, value=135.6, max=200.0, fit=True)
21+
problem.parameters.append(name="Alloy SLD up", min=6.0e-6, value=9.87e-6, max=1.2e-5, fit=True)
22+
problem.parameters.append(name="Alloy SLD imaginary up", min=1.0e-9, value=4.87e-8, max=1.0e-7, fit=True)
23+
problem.parameters.append(name="Alloy SLD down", min=6.0e-6, value=7.05e-6, max=1.3e-5, fit=True)
24+
problem.parameters.append(name="Alloy SLD imaginary down", min=1.0e-9, value=4.87e-8, max=1.0e-7, fit=True)
25+
problem.parameters.append(name="Alloy Roughness", min=2.0, value=5.71, max=10.0, fit=True)
26+
problem.parameters.append(name="Gold Thickness", min=100.0, value=154.7, max=200.0, fit=True)
27+
problem.parameters.append(name="Gold Roughness", min=0.1, value=5.42, max=10.0, fit=True)
28+
problem.parameters.append(name="Gold SLD", min=4.0e-6, value=4.49e-6, max=5.0e-6, fit=True)
29+
problem.parameters.append(name="Gold SLD imaginary", min=1.0e-9, value=4.20e-8, max=1.0e-7, fit=True)
30+
31+
problem.parameters.append(name="Thiol APM", min=40.0, value=56.27, max=100.0, fit=True)
32+
problem.parameters.append(name="Thiol Head Hydration", min=20.0, value=30.0, max=50.0, fit=True)
33+
problem.parameters.append(name="Thiol Coverage", min=0.5, value=0.9, max=1.0, fit=True)
34+
35+
problem.parameters.append(name="CW Thickness", min=1.0, value=12.87, max=25.0, fit=True)
36+
problem.parameters.append(name="Bilayer APM", min=48.0, value=65.86, max=90.0, fit=True)
37+
problem.parameters.append(name="Bilayer Head Hydration", min=20.0, value=30.0, max=50.0, fit=True)
38+
problem.parameters.append(name="Bilayer Roughness", min=1.0, value=3.87, max=10.0, fit=True)
39+
problem.parameters.append(name="Bilayer Coverage", min=0.5, value=0.94, max=1.0, fit=True)
40+
41+
# Change the existing Bulk In parameter to be Silicon
42+
problem.bulk_in.set_fields(0, name="Silicon", min=2.0e-6, value=2.073e-6, max=2.1e-6)
43+
44+
# We need 2 bulk outs - D2O and H2O
45+
problem.bulk_out.set_fields(0, name="D2O", min=5.8e-06, value=6.21e-06, max=6.35e-06, fit=True)
46+
problem.bulk_out.append(name="H2O", min=-5.6e-07, value=-3.15e-07, max=0.0, fit=True)
47+
48+
# Use a different scalefactor for each dataset
49+
del problem.scalefactors[0]
50+
problem.scalefactors.append(name="Scalefactor 1", min=0.5, value=1, max=1.5, fit=True)
51+
problem.scalefactors.append(name="Scalefactor 2", min=0.5, value=1, max=1.5, fit=True)
52+
problem.scalefactors.append(name="Scalefactor 3", min=0.5, value=1, max=1.5, fit=True)
53+
problem.scalefactors.append(name="Scalefactor 4", min=0.5, value=1, max=1.5, fit=True)
54+
55+
# Similarly, use an individual background for each dataset
56+
del problem.backgrounds[0]
57+
del problem.background_parameters[0]
58+
59+
problem.background_parameters.append(
60+
name="Background parameter 1", min=5.0e-08, value=7.88e-06, max=9.0e-05, fit=True
61+
)
62+
problem.background_parameters.append(
63+
name="Background parameter 2", min=1.0e-08, value=5.46e-06, max=9.0e-05, fit=True
64+
)
65+
problem.background_parameters.append(
66+
name="Background parameter 3", min=1.0e-06, value=9.01e-06, max=9.0e-05, fit=True
67+
)
68+
problem.background_parameters.append(
69+
name="Background parameter 4", min=1.0e-06, value=5.61e-06, max=9.0e-05, fit=True
70+
)
71+
72+
problem.backgrounds.append(name="Background 1", type="constant", value_1="Background parameter 1")
73+
problem.backgrounds.append(name="Background 2", type="constant", value_1="Background parameter 2")
74+
problem.backgrounds.append(name="Background 3", type="constant", value_1="Background parameter 3")
75+
problem.backgrounds.append(name="Background 4", type="constant", value_1="Background parameter 4")
76+
77+
# Make the resolution fittable
78+
problem.resolution_parameters.set_fields(0, fit=True)
79+
80+
# Now add the data we need
81+
data_path = os.path.join(pathlib.Path(__file__).parents[1].resolve(), "data")
82+
83+
data_1 = np.loadtxt(os.path.join(data_path, "D2O_spin_down.dat"))
84+
problem.data.append(name="D2O_dn", data=data_1)
85+
86+
data_2 = np.loadtxt(os.path.join(data_path, "D2O_spin_up.dat"))
87+
problem.data.append(name="D2O_up", data=data_2)
88+
89+
data_3 = np.loadtxt(os.path.join(data_path, "H2O_spin_down.dat"))
90+
problem.data.append(name="H2O_dn", data=data_3)
91+
92+
data_4 = np.loadtxt(os.path.join(data_path, "H2O_spin_up.dat"))
93+
problem.data.append(name="H2O_up", data=data_4)
94+
95+
# Add the custom file
96+
problem.custom_files.append(
97+
name="DPPC absorption",
98+
filename="volume_thiol_bilayer.py",
99+
language="python",
100+
path=pathlib.Path(__file__).parent.resolve(),
101+
)
102+
103+
# Finally add the contrasts
104+
problem.contrasts.append(
105+
name="D2O Down",
106+
data="D2O_dn",
107+
background="Background 1",
108+
bulk_in="Silicon",
109+
bulk_out="D2O",
110+
scalefactor="Scalefactor 1",
111+
resolution="Resolution 1",
112+
resample=True,
113+
model=["DPPC absorption"],
114+
)
115+
116+
problem.contrasts.append(
117+
name="D2O Up",
118+
data="D2O_up",
119+
background="Background 2",
120+
bulk_in="Silicon",
121+
bulk_out="D2O",
122+
scalefactor="Scalefactor 2",
123+
resolution="Resolution 1",
124+
resample=True,
125+
model=["DPPC absorption"],
126+
)
127+
128+
problem.contrasts.append(
129+
name="H2O Down",
130+
data="H2O_dn",
131+
background="Background 3",
132+
bulk_in="Silicon",
133+
bulk_out="H2O",
134+
scalefactor="Scalefactor 3",
135+
resolution="Resolution 1",
136+
resample=True,
137+
model=["DPPC absorption"],
138+
)
139+
140+
problem.contrasts.append(
141+
name="H2O Up",
142+
data="H2O_up",
143+
background="Background 4",
144+
bulk_in="Silicon",
145+
bulk_out="H2O",
146+
scalefactor="Scalefactor 4",
147+
resolution="Resolution 1",
148+
resample=True,
149+
model=["DPPC absorption"],
150+
)
151+
152+
# Now make a controls block and run the code
153+
controls = RAT.Controls(parallel="contrasts", resampleParams=[0.9, 150.0])
154+
problem, results = RAT.run(problem, controls)
155+
156+
return problem, results
157+
158+
159+
if __name__ == "__main__":
160+
problem, results = absorption()
161+
RAT.plotting.plot_ref_sld(problem, results, True)

0 commit comments

Comments
 (0)