-
Notifications
You must be signed in to change notification settings - Fork 3
/
create_material.py
115 lines (84 loc) · 3.93 KB
/
create_material.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#!/usr/bin/env python
# coding: utf-8
# <a href="https://colab.research.google.com/github/Exabyte-io/api-examples/blob/dev/examples/material/create_material.ipynb" target="_parent">
# <img alt="Open in Google Colab" src="https://user-images.githubusercontent.com/20477508/128780728-491fea90-9b23-495f-a091-11681150db37.jpeg" width="150" border="0">
# </a>
# # Overview
#
# In this example we create a material from a JSON config with [tags](https://docs.mat3ra.com/entities-general/data/#tags) to identify the material.
# # Complete Authorization Form and Initialize Settings
#
# This will also determine environment and set all environment variables. We determine if we are using Jupyter Notebooks or Google Colab to run this tutorial.
#
# If you are running this notebook from Google Colab, Colab takes ~1 min to execute the following cell.
#
# ACCOUNT_ID and AUTH_TOKEN - Authentication parameters needed for when making requests to [Mat3ra.com's API Endpoints](https://docs.mat3ra.com/rest-api/endpoints/).
#
# MATERIALS_PROJECT_API_KEY - Authentication parameter needed for when making requests to [Material Project's API](https://materialsproject.org/open)
#
# ORGANIZATION_ID - Authentication parameter needed for when working with collaborative accounts https://docs.mat3ra.com/collaboration/organizations/overview/
#
# > <span style="color: orange">**NOTE**</span>: If you are running this notebook from Jupyter, the variables ACCOUNT_ID, AUTH_TOKEN, MATERIALS_PROJECT_API_KEY, and ORGANIZATION_ID should be set in the file [settings.json](../../utils/settings.json) if you need to use these variables. To obtain API token parameters, please see the following link to the documentation explaining how to get them: https://docs.mat3ra.com/accounts/ui/preferences/api/
# In[ ]:
# @title Authorization Form
ACCOUNT_ID = "ACCOUNT_ID" # @param {type:"string"}
AUTH_TOKEN = "AUTH_TOKEN" # @param {type:"string"}
MATERIALS_PROJECT_API_KEY = "MATERIALS_PROJECT_API_KEY" # @param {type:"string"}
ORGANIZATION_ID = "ORGANIZATION_ID" # @param {type:"string"}
import os
if "COLAB_JUPYTER_IP" in os.environ:
os.environ.update(
dict(
ACCOUNT_ID=ACCOUNT_ID,
AUTH_TOKEN=AUTH_TOKEN,
MATERIALS_PROJECT_API_KEY=MATERIALS_PROJECT_API_KEY,
ORGANIZATION_ID=ORGANIZATION_ID,
)
)
get_ipython().system('GIT_BRANCH="dev"; export GIT_BRANCH; curl -s "https://raw.githubusercontent.com/Exabyte-io/api-examples/${GIT_BRANCH}/scripts/env.sh" | bash')
# # Imports
# In[ ]:
from utils.settings import ENDPOINT_ARGS
from utils.generic import display_JSON
from exabyte_api_client.endpoints.materials import MaterialEndpoints
# ## Create material config
#
# Create material config in JSON format. See [Material](https://docs.mat3ra.com/api/Material/put_materials_create) endpoint for more information about material config format.
# In[ ]:
CONFIG = {
"name": "TEST MATERIAL",
"basis": {
"elements": [{"id": 1, "value": "Si"}, {"id": 2, "value": "Si"}],
"coordinates": [{"id": 1, "value": [0, 0, 0]}, {"id": 2, "value": [0.25, 0.25, 0.25]}],
"units": "crystal",
"name": "basis",
},
"lattice": {
"type": "FCC",
"a": 3.867,
"b": 3.867,
"c": 3.867,
"alpha": 60,
"beta": 60,
"gamma": 60,
"units": {"length": "angstrom", "angle": "degree"},
"vectors": {
"a": [3.867, 0, 0],
"b": [1.9335000000000004, 3.348920236434424, 0],
"c": [1.9335000000000004, 1.1163067454781415, 3.1573922784475164],
"name": "lattice vectors",
"alat": 1,
"units": "angstrom",
},
},
"tags": ["REST API"],
}
# ## Create material
#
# Initialize `MaterialEndpoints` class and call `create` function to create material.
# In[ ]:
endpoint = MaterialEndpoints(*ENDPOINT_ARGS)
material = endpoint.create(CONFIG)
# ## Print new material
# In[ ]:
display_JSON(material)