Skip to content

Commit 69a4068

Browse files
authored
Merge pull request #145 from Exabyte-io/update/SOF-7461
update/SOF 7461
2 parents 2dde34d + 8fa789e commit 69a4068

8 files changed

+226
-112
lines changed

other/materials_designer/create_adatom_defect.ipynb

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,8 @@
9595
{
9696
"cell_type": "markdown",
9797
"source": [
98-
"### 1.3. Get input material and \n",
99-
"Materials are loaded with `get_data()`. The first material is assigned as substrate and the second as film."
98+
"### 1.3. Get input material\n",
99+
"Materials are loaded with `get_materials()`."
100100
],
101101
"metadata": {
102102
"collapsed": false
@@ -107,12 +107,8 @@
107107
"cell_type": "code",
108108
"outputs": [],
109109
"source": [
110-
"from mat3ra.made.material import Material\n",
111-
"from utils.jupyterlite import get_data\n",
112-
"\n",
113-
"# Get the list of input materials and load them into `materials_in` variable\n",
114-
"get_data(\"materials_in\", globals())\n",
115-
"materials = list(map(Material, globals()[\"materials_in\"]))"
110+
"from utils.jupyterlite import get_materials\n",
111+
"materials = get_materials(globals())"
116112
],
117113
"metadata": {
118114
"collapsed": false
@@ -258,9 +254,9 @@
258254
"cell_type": "code",
259255
"outputs": [],
260256
"source": [
261-
"from utils.jupyterlite import set_data\n",
257+
"from utils.jupyterlite import set_materials\n",
262258
"\n",
263-
"set_data(\"materials\", [slab_with_adatom_at_equidistant_position.to_json(), slab_with_adatom_at_crystal_site.to_json()])"
259+
"set_materials([slab_with_adatom_at_equidistant_position, slab_with_adatom_at_crystal_site])"
264260
],
265261
"metadata": {
266262
"collapsed": false

other/materials_designer/create_interface_with_min_strain_zsl.ipynb

Lines changed: 45 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,27 @@
5050
"source": [
5151
"# Enable interactive selection of terminations via UI prompt\n",
5252
"IS_TERMINATIONS_SELECTION_INTERACTIVE = False \n",
53+
"\n",
54+
"FILM_INDEX = 1 # Index in the list of materials, to access as materials[FILM_INDEX]\n",
55+
"FILM_MILLER_INDICES = (0, 0, 1)\n",
56+
"FILM_THICKNESS = 1 # in atomic layers\n",
57+
"FILM_VACUUM = 0.0 # in angstroms\n",
58+
"FILM_XY_SUPERCELL_MATRIX = [[1, 0], [0, 1]]\n",
59+
"FILM_USE_ORTHOGONAL_Z = True\n",
60+
"\n",
61+
"SUBSTRATE_INDEX = 0\n",
62+
"SUBSTRATE_MILLER_INDICES = (1, 1, 1)\n",
63+
"SUBSTRATE_THICKNESS = 3 # in atomic layers\n",
64+
"SUBSTRATE_VACUUM = 3.0 # in angstroms\n",
65+
"SUBSTRATE_XY_SUPERCELL_MATRIX = [[1, 0], [0, 1]]\n",
66+
"SUBSTRATE_USE_ORTHOGONAL_Z = True\n",
67+
"\n",
5368
"# Maximum area for the superlattice search algorithm\n",
54-
"MAX_AREA = 50"
69+
"MAX_AREA = 50 # in Angstrom^2\n",
70+
"# Set the termination pair indices\n",
71+
"TERMINATION_PAIR_INDEX = 0 # Will be overridden in interactive selection is used\n",
72+
"INTERFACE_DISTANCE = 3.0 # in Angstrom\n",
73+
"INTERFACE_VACUUM = 20.0 # in Angstrom"
5574
],
5675
"metadata": {
5776
"collapsed": false
@@ -76,6 +95,7 @@
7695
"\n",
7796
"if sys.platform == \"emscripten\":\n",
7897
" import micropip\n",
98+
" \n",
7999
" await micropip.install('mat3ra-api-examples', deps=False)\n",
80100
" from utils.jupyterlite import install_packages\n",
81101
" await install_packages(\"create_interface_with_min_strain_zsl.ipynb\", \"../../config.yml\")"
@@ -97,14 +117,15 @@
97117
"cell_type": "code",
98118
"outputs": [],
99119
"source": [
100-
"from mat3ra.made.material import Material\n",
101-
"from utils.jupyterlite import get_data\n",
120+
"from utils.jupyterlite import get_materials\n",
102121
"\n",
103-
"# Get the list of input materials and load them into `materials_in` variable\n",
104-
"get_data(\"materials_in\", globals())\n",
105-
"materials = list(map(Material, globals()[\"materials_in\"]))\n",
106-
"substrate = materials[0]\n",
107-
"film = materials[1]"
122+
"materials = get_materials(globals())\n",
123+
"substrate = materials[SUBSTRATE_INDEX]\n",
124+
"try: \n",
125+
" film = materials[FILM_INDEX]\n",
126+
"except IndexError:\n",
127+
" print(\"Film material not found. Re-using substrate material as film.\")\n",
128+
" film = substrate"
108129
],
109130
"metadata": {
110131
"collapsed": false
@@ -151,20 +172,20 @@
151172
"\n",
152173
"film_slab_configuration = SlabConfiguration(\n",
153174
" bulk=film,\n",
154-
" miller_indices=(0, 0, 1),\n",
155-
" thickness=1, # in atomic layers\n",
156-
" vacuum=0, # in atomic layers\n",
157-
" xy_supercell_matrix=[[1, 0], [0, 1]],\n",
158-
" use_orthogonal_z=True\n",
175+
" miller_indices=FILM_MILLER_INDICES,\n",
176+
" thickness=FILM_THICKNESS, # in atomic layers\n",
177+
" vacuum=FILM_VACUUM, # in angstroms\n",
178+
" xy_supercell_matrix=FILM_XY_SUPERCELL_MATRIX,\n",
179+
" use_orthogonal_z=FILM_USE_ORTHOGONAL_Z\n",
159180
")\n",
160181
"\n",
161182
"substrate_slab_configuration = SlabConfiguration(\n",
162183
" bulk=substrate,\n",
163-
" miller_indices=(1,1,1),\n",
164-
" thickness=3, # in atomic layers\n",
165-
" vacuum=3, # in atomic layers\n",
166-
" xy_supercell_matrix=[[1, 0], [0, 1]],\n",
167-
" use_orthogonal_z=True\n",
184+
" miller_indices=SUBSTRATE_MILLER_INDICES,\n",
185+
" thickness=SUBSTRATE_THICKNESS, # in atomic layers\n",
186+
" vacuum=SUBSTRATE_VACUUM, # in angstroms\n",
187+
" xy_supercell_matrix=SUBSTRATE_XY_SUPERCELL_MATRIX,\n",
188+
" use_orthogonal_z=SUBSTRATE_USE_ORTHOGONAL_Z\n",
168189
")"
169190
],
170191
"metadata": {},
@@ -255,10 +276,9 @@
255276
"source": [
256277
"from utils.io import ui_prompt_select_array_element_by_index, ui_prompt_select_array_element_by_index_pyodide\n",
257278
"\n",
258-
"# Set the termination pair indices\n",
259-
"TERMINATION_PAIR_INDEX = 0\n",
279+
"termination_pair_index = TERMINATION_PAIR_INDEX\n",
260280
"\n",
261-
"termination_pair = termination_pairs[TERMINATION_PAIR_INDEX]\n",
281+
"termination_pair = termination_pairs[termination_pair_index]\n",
262282
"if IS_TERMINATIONS_SELECTION_INTERACTIVE:\n",
263283
" if sys.platform == \"emscripten\":\n",
264284
" termination_pair = await ui_prompt_select_array_element_by_index_pyodide(termination_pairs, element_name=\"film/substrate termination pair\")\n",
@@ -293,8 +313,8 @@
293313
" substrate_configuration=substrate_slab_configuration,\n",
294314
" film_termination=film_termination,\n",
295315
" substrate_termination=substrate_termination,\n",
296-
" distance=3.0, # in Angstrom\n",
297-
" vacuum=20.0 # in Angstrom\n",
316+
" distance=INTERFACE_DISTANCE,\n",
317+
" vacuum= INTERFACE_VACUUM\n",
298318
")"
299319
],
300320
"metadata": {
@@ -437,10 +457,8 @@
437457
"metadata": {},
438458
"outputs": [],
439459
"source": [
440-
"from utils.jupyterlite import set_data\n",
441-
"\n",
442-
"materials_as_json = [selected_interface.to_json() for selected_interface in selected_interfaces]\n",
443-
"set_data(\"materials\", materials_as_json)"
460+
"from utils.jupyterlite import set_materials\n",
461+
"set_materials(selected_interfaces)"
444462
]
445463
}
446464
],

other/materials_designer/create_interface_with_no_strain_matching.ipynb

Lines changed: 46 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,26 @@
4343
"# Enable interactive selection of terminations via UI prompt\n",
4444
"IS_TERMINATIONS_SELECTION_INTERACTIVE = False \n",
4545
"# Enable scaling of the film slab atomic coordinates to match the substrate lattice (preserve coordinates in crystal units).\n",
46-
"ENABLE_FILM_SCALING = True"
46+
"ENABLE_FILM_SCALING = True\n",
47+
"\n",
48+
"FILM_INDEX = 1\n",
49+
"FILM_MILLER_INDICES = (0, 0, 1)\n",
50+
"FILM_THICKNESS = 1 # in atomic layers\n",
51+
"FILM_VACUUM = 0.0 # in angstroms\n",
52+
"FILM_XY_SUPERCELL_MATRIX = [[1, 0], [0, 1]]\n",
53+
"FILM_USE_ORTHOGONAL_Z = True\n",
54+
"\n",
55+
"SUBSTRATE_INDEX = 0\n",
56+
"SUBSTRATE_MILLER_INDICES = (1, 1, 1)\n",
57+
"SUBSTRATE_THICKNESS = 3 # in atomic layers\n",
58+
"SUBSTRATE_VACUUM = 3.0 # in angstroms\n",
59+
"SUBSTRATE_XY_SUPERCELL_MATRIX = [[1, 0], [0, 1]]\n",
60+
"SUBSTRATE_USE_ORTHOGONAL_Z = True\n",
61+
"\n",
62+
"# Set the termination pair indices\n",
63+
"TERMINATION_PAIR_INDEX = 0 # Will be overridden in interactive selection is used\n",
64+
"INTERFACE_DISTANCE = 3.0 # in Angstrom\n",
65+
"INTERFACE_VACUUM = 20.0 # in Angstrom"
4766
],
4867
"metadata": {
4968
"collapsed": false
@@ -92,14 +111,15 @@
92111
"cell_type": "code",
93112
"outputs": [],
94113
"source": [
95-
"from mat3ra.made.material import Material\n",
96-
"from utils.jupyterlite import get_data\n",
114+
"from utils.jupyterlite import get_materials\n",
97115
"\n",
98-
"# Get the list of input materials and load them into `materials_in` variable\n",
99-
"get_data(\"materials_in\", globals())\n",
100-
"materials = list(map(Material, globals()[\"materials_in\"]))\n",
101-
"substrate = materials[0]\n",
102-
"film = materials[1]"
116+
"materials = get_materials(globals())\n",
117+
"substrate = materials[SUBSTRATE_INDEX]\n",
118+
"try: \n",
119+
" film = materials[FILM_INDEX]\n",
120+
"except IndexError:\n",
121+
" print(\"Please select a film material. Film is set to substrate.\")\n",
122+
" film = substrate"
103123
],
104124
"metadata": {
105125
"collapsed": false
@@ -148,20 +168,20 @@
148168
"\n",
149169
"film_slab_configuration = SlabConfiguration(\n",
150170
" bulk=film,\n",
151-
" miller_indices=(0, 0, 1),\n",
152-
" thickness=1, # in atomic layers\n",
153-
" vacuum=0, # in atomic layers\n",
154-
" xy_supercell_matrix=[[1, 0], [0, 1]],\n",
155-
" use_orthogonal_z=True\n",
171+
" miller_indices=FILM_MILLER_INDICES,\n",
172+
" thickness=FILM_THICKNESS, # in atomic layers\n",
173+
" vacuum=FILM_VACUUM, # in angstroms\n",
174+
" xy_supercell_matrix=FILM_XY_SUPERCELL_MATRIX,\n",
175+
" use_orthogonal_z=FILM_USE_ORTHOGONAL_Z\n",
156176
")\n",
157177
"\n",
158178
"substrate_slab_configuration = SlabConfiguration(\n",
159179
" bulk=substrate,\n",
160-
" miller_indices=(1,1,1),\n",
161-
" thickness=3, # in atomic layers\n",
162-
" vacuum=3, # in atomic layers\n",
163-
" xy_supercell_matrix=[[1, 0], [0, 1]],\n",
164-
" use_orthogonal_z=True\n",
180+
" miller_indices=SUBSTRATE_MILLER_INDICES,\n",
181+
" thickness=SUBSTRATE_THICKNESS, # in atomic layers\n",
182+
" vacuum=SUBSTRATE_VACUUM, # in angstroms\n",
183+
" xy_supercell_matrix=SUBSTRATE_XY_SUPERCELL_MATRIX,\n",
184+
" use_orthogonal_z=SUBSTRATE_USE_ORTHOGONAL_Z\n",
165185
")"
166186
],
167187
"metadata": {
@@ -206,8 +226,8 @@
206226
"film_slabs = [create_slab(film_slab_configuration, termination) for termination in film_slab_terminations]\n",
207227
"substrate_slabs = [create_slab(substrate_slab_configuration, termination) for termination in substrate_slab_terminations]\n",
208228
"\n",
209-
"visualize([{\"material\":slab, \"title\": slab.metadata[\"termination\"]} for slab in film_slabs ], repetitions=[3, 3, 1], rotation=\"-90x\")\n",
210-
"visualize([{\"material\":slab, \"title\": slab.metadata[\"termination\"]} for slab in substrate_slabs ], repetitions=[3, 3, 1], rotation=\"-90x\") "
229+
"visualize([{\"material\":slab, \"title\": slab.metadata[\"build\"][\"termination\"]} for slab in film_slabs ], repetitions=[3, 3, 1], rotation=\"-90x\")\n",
230+
"visualize([{\"material\":slab, \"title\": slab.metadata[\"build\"][\"termination\"]} for slab in substrate_slabs ], repetitions=[3, 3, 1], rotation=\"-90x\") "
211231
],
212232
"metadata": {
213233
"collapsed": false
@@ -255,10 +275,9 @@
255275
"source": [
256276
"from utils.io import ui_prompt_select_array_element_by_index, ui_prompt_select_array_element_by_index_pyodide\n",
257277
"\n",
258-
"# Set the termination pair indices\n",
259-
"TERMINATION_PAIR_INDEX = 0\n",
278+
"termination_pair_index = TERMINATION_PAIR_INDEX\n",
260279
"\n",
261-
"termination_pair = termination_pairs[TERMINATION_PAIR_INDEX]\n",
280+
"termination_pair = termination_pairs[termination_pair_index]\n",
262281
"if IS_TERMINATIONS_SELECTION_INTERACTIVE:\n",
263282
" if sys.platform == \"emscripten\":\n",
264283
" termination_pair = await ui_prompt_select_array_element_by_index_pyodide(termination_pairs, element_name=\"film/substrate termination pair\")\n",
@@ -293,6 +312,8 @@
293312
" substrate_configuration=substrate_slab_configuration,\n",
294313
" film_termination=film_termination,\n",
295314
" substrate_termination=substrate_termination,\n",
315+
" interface_distance=INTERFACE_DISTANCE, # in Angstrom\n",
316+
" interface_vacuum=INTERFACE_VACUUM # in Angstrom\n",
296317
")\n",
297318
"\n",
298319
"interface = create_interface(interface_configuration)"
@@ -355,9 +376,8 @@
355376
"metadata": {},
356377
"outputs": [],
357378
"source": [
358-
"from utils.jupyterlite import set_data\n",
359-
"\n",
360-
"set_data(\"materials\", [interface.to_json()])"
379+
"from utils.jupyterlite import set_materials\n",
380+
"set_materials(interface)"
361381
]
362382
}
363383
],

other/materials_designer/create_interface_with_relaxation_ase_emt.ipynb

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -93,13 +93,10 @@
9393
"metadata": {},
9494
"outputs": [],
9595
"source": [
96-
"from mat3ra.made.material import Material\n",
97-
"from utils.jupyterlite import get_data\n",
96+
"from utils.jupyterlite import get_materials\n",
9897
"\n",
99-
"# Get the list of input materials and load them into `materials_in` variable\n",
100-
"get_data(\"materials_in\", globals())\n",
101-
"materials = list(map(Material, globals()[\"materials_in\"]))\n",
102-
"interface = materials[2]"
98+
"materials = get_materials(globals())\n",
99+
"interface = materials[0]"
103100
]
104101
},
105102
{
@@ -165,6 +162,7 @@
165162
"source": [
166163
"from utils.plot import create_realtime_plot, plot_update_callback\n",
167164
"from mat3ra.made.tools.convert import from_ase\n",
165+
"from mat3ra.made.material import Material\n",
168166
"\n",
169167
"# Add calculator to the interface for relaxation\n",
170168
"ase_interface = to_ase(interface)\n",
@@ -243,9 +241,9 @@
243241
"cell_type": "code",
244242
"outputs": [],
245243
"source": [
246-
"from utils.jupyterlite import set_data\n",
244+
"from utils.jupyterlite import set_materials\n",
247245
"final_interface.name = f\"{interface.name}, Relaxed with EMT\" if \"Relaxed\" not in interface.name else interface.name\n",
248-
"set_data(\"materials\", [final_interface.to_json()])"
246+
"set_materials(final_interface)"
249247
],
250248
"metadata": {
251249
"collapsed": false

other/materials_designer/create_nanoribbon.ipynb

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@
8989
"cell_type": "markdown",
9090
"source": [
9191
"### 1.3. Get input materials\n",
92-
"Materials are loaded with `get_data()`. The first material is assigned as substrate and the second as film."
92+
"Materials are loaded with `get_materials()`."
9393
],
9494
"metadata": {
9595
"collapsed": false
@@ -100,12 +100,8 @@
100100
"cell_type": "code",
101101
"outputs": [],
102102
"source": [
103-
"from mat3ra.made.material import Material\n",
104-
"from utils.jupyterlite import get_data\n",
105-
"\n",
106-
"# Get the list of input materials and load them into `materials_in` variable\n",
107-
"get_data(\"materials_in\", globals())\n",
108-
"materials = list(map(Material, globals()[\"materials_in\"]))"
103+
"from utils.jupyterlite import get_materials\n",
104+
"materials = get_materials(globals())"
109105
],
110106
"metadata": {
111107
"collapsed": false
@@ -129,7 +125,7 @@
129125
"source": [
130126
"from utils.visualize import visualize_materials as visualize\n",
131127
"\n",
132-
"material = materials[2]\n",
128+
"material = materials[0]\n",
133129
"visualize(material, repetitions=[3, 3, 1], rotation=\"0x\")"
134130
],
135131
"metadata": {
@@ -232,9 +228,8 @@
232228
"cell_type": "code",
233229
"outputs": [],
234230
"source": [
235-
"from utils.jupyterlite import set_data\n",
236-
"\n",
237-
"set_data(\"materials\", [nanoribbon.to_json()])"
231+
"from utils.jupyterlite import set_materials\n",
232+
"set_materials(nanoribbon)"
238233
],
239234
"metadata": {
240235
"collapsed": false

0 commit comments

Comments
 (0)