{
"cells": [
{
"cell_type": "markdown",
"id": "5a2746c5",
"metadata": {},
"source": [
"# Using the NOMAD API"
]
},
{
"cell_type": "markdown",
"id": "de95a2a5",
"metadata": {},
"source": [
"In this tutorial you are going to learn how to:\n",
"\n",
"
\n",
" \n",
"**[Writing a NOMAD query](#Writing-a-NOMAD-query)** \n",
"**[Querying the NOMAD API](#Querying-the-NOMAD-API)** \n",
"**[Analyzing the data](#Analyzing-the-data)** \n",
"**[Automatic processing](#Automatic-processing)**\n",
"\n",
"
\n",
"\n",
"Let's get started!"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "64d9fb34",
"metadata": {},
"outputs": [],
"source": [
"# imports\n",
"from madas.apis.NOMAD_web_API import get_atoms\n",
"from madas.utils import resolve_nested_dict\n",
"\n",
"import matplotlib.pyplot as plt\n",
"from scipy.constants import electron_volt"
]
},
{
"cell_type": "markdown",
"id": "32f0dad0",
"metadata": {},
"source": [
"## Writing a NOMAD query\n",
"\n",
"To download data, we have to query the [NOMAD service](https://nomad-lab.eu). To do so, you can use the [NOMAD documentation](https://nomad-lab.eu/prod/v1/staging/docs/tutorial/access_api.html), or the GUI copy the query over. In this example, we query for bulk GaP structures calculated with DFT using a hybrid functional."
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "eaf78bbf",
"metadata": {},
"outputs": [],
"source": [
"query = {\n",
" \"results.material.structural_type:any\": [\n",
" \"bulk\"\n",
" ],\n",
" \"results.method.simulation.dft.xc_functional_type:any\": [\n",
" \"hybrid\"\n",
" ],\n",
" \"datasets.dataset_name:any\": [\n",
" \"reproducibility_of_HSE\"\n",
" ],\n",
" \"results.material.elements:all\": [\n",
" \"Ga\",\n",
" \"P\"\n",
" ],\n",
" \"results.properties.available_properties:all\": [\n",
" \"dos_electronic\"\n",
" ]\n",
"}"
]
},
{
"cell_type": "markdown",
"id": "d38e3c96",
"metadata": {},
"source": [
"The NOMAD API requires that we specify which data is requested. For our initial query, we want all data, therefore we define:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "12761e9f",
"metadata": {},
"outputs": [],
"source": [
"required = {\"required\" : \"*\"}"
]
},
{
"cell_type": "markdown",
"id": "1b370303",
"metadata": {},
"source": [
"## Querying the NOMAD API"
]
},
{
"cell_type": "markdown",
"id": "32beaa33",
"metadata": {},
"source": [
"To start quering NOMAD, we first import and initialize an API object:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "81038fb8",
"metadata": {},
"outputs": [],
"source": [
"from madas.apis.NOMAD_web_API import API\n",
"api = API()"
]
},
{
"cell_type": "markdown",
"id": "d9357627",
"metadata": {},
"source": [
"In order to reduce traffic, we just download a single entry:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "28c303ee",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Found 5 entries\n",
"Possibly not all entries discovered due to max_entries limit\n",
"Downloading 1 entries\n",
"Finished download.\n"
]
}
],
"source": [
"full_archives = api.get_calculations_by_search(query, # defined above \n",
" required=required, # defined above \n",
" max_entries=1) # one entry only"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "65377ea8",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(full_archives)"
]
},
{
"cell_type": "markdown",
"id": "7a214edf",
"metadata": {},
"source": [
"## Analyzing the data"
]
},
{
"cell_type": "markdown",
"id": "a8748bcf",
"metadata": {},
"source": [
"We can inspect some properties of the `Material` object that we just created: "
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "66ef3c51",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Material(mid = MDy6puRcMwjin26GFGaIoWuyTZw5, formula = GaP, data = {'archive'}, properties = set())\n"
]
}
],
"source": [
"example_material = full_archives[0]\n",
"print(example_material)"
]
},
{
"cell_type": "markdown",
"id": "fcbc508e",
"metadata": {},
"source": [
"In the `data` attribute of the material we now find the full NOMAD archive entry. We can explore its contents to automatically extract the data we need. The atomic structure has been parsed already by default and can be visualized:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "87cf8552",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from madas.plotting import plot_material\n",
"\n",
"plot_material(example_material, repeat=[1,1,1], show_unit_cell=2)"
]
},
{
"cell_type": "markdown",
"id": "df7deaef",
"metadata": {},
"source": [
"To build the automatic parsers of the NOMAD Archive entries, we can inspect the contents of the Archive. For this example, we want to obtain the total energy of the material. To do so, we need to parse the `workflow` section of the Archive:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "fceb7542",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"dict_keys(['processing_logs', 'run', 'workflow', 'metadata', 'results', 'm_ref_archives'])"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"example_material.data['archive'].keys()"
]
},
{
"cell_type": "markdown",
"id": "2b7f0485",
"metadata": {},
"source": [
"We can use a `MADAS` tool to find the path to the required quantity in this dictionary:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "0b5f0411",
"metadata": {},
"outputs": [],
"source": [
"from madas.utils import print_key_paths"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "ace935ab",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"/workflow/0/calculation_result_ref\n"
]
}
],
"source": [
"print_key_paths(\"calculation_result_ref\", example_material.data[\"archive\"])"
]
},
{
"cell_type": "markdown",
"id": "fdd0fb26",
"metadata": {},
"source": [
"This calculation contains one reference to result, i.e. the final calculation of a workflow that is used to obtain physical properties. We can investigate which calculation this is:"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "d4121c11",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'/run/0/calculation/0'"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"resolve_nested_dict(example_material.data[\"archive\"], \"workflow/0/calculation_result_ref\")"
]
},
{
"cell_type": "markdown",
"id": "339366d9",
"metadata": {},
"source": [
"Next we figure out which how to parse the total energy that was computed in this calculation. "
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "d0096dbc",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"/run/0/calculation/0/energy\n",
"/run/0/calculation/0/scf_iteration/0/energy\n",
"/run/0/calculation/0/scf_iteration/1/energy\n",
"/run/0/calculation/0/scf_iteration/2/energy\n",
"/run/0/calculation/0/scf_iteration/3/energy\n",
"/run/0/calculation/0/scf_iteration/4/energy\n",
"/run/0/calculation/0/scf_iteration/5/energy\n",
"/run/0/calculation/0/scf_iteration/6/energy\n",
"/run/0/calculation/0/scf_iteration/7/energy\n",
"/run/0/calculation/0/scf_iteration/8/energy\n",
"/run/0/calculation/0/scf_iteration/9/energy\n",
"/run/0/calculation/0/scf_iteration/10/energy\n",
"/run/0/calculation/0/scf_iteration/11/energy\n",
"/run/0/calculation/0/scf_iteration/12/energy\n",
"/run/0/calculation/0/scf_iteration/13/energy\n",
"/run/0/calculation/0/scf_iteration/14/energy\n",
"/run/0/calculation/0/scf_iteration/15/energy\n",
"/run/0/calculation/0/scf_iteration/16/energy\n",
"/run/0/calculation/0/scf_iteration/17/energy\n",
"/run/0/calculation/0/scf_iteration/18/energy\n",
"/run/0/calculation/0/scf_iteration/19/energy\n",
"/run/0/calculation/0/scf_iteration/20/energy\n",
"/run/0/calculation/0/scf_iteration/21/energy\n",
"/run/0/calculation/0/scf_iteration/22/energy\n",
"/run/0/calculation/0/scf_iteration/23/energy\n",
"/run/0/calculation/0/scf_iteration/24/energy\n"
]
}
],
"source": [
"print_key_paths(\"energy\", example_material.data[\"archive\"])"
]
},
{
"cell_type": "markdown",
"id": "916b0f4b",
"metadata": {},
"source": [
"The first entry corresponds to the result, the others show the energies at the respective scf iterations of the DFT calculation. Here we are only interested in the results. We print the respective values:"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "0ad053d8",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'fermi': 5.958600693569143e-19,\n",
" 'highest_occupied': 5.7130414415172e-19,\n",
" 'lowest_unoccupied': 9.2939062185072e-19,\n",
" 'total': {'value': -1.926006612597703e-18},\n",
" 'free': {'value': -1.926006612597703e-18},\n",
" 'total_t0': {'value': -0.0}}"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"resolve_nested_dict(example_material.data['archive'], \"run/0/calculation/0/energy\")"
]
},
{
"cell_type": "markdown",
"id": "c8b1748c",
"metadata": {},
"source": [
"From this, we can resolve the total energy value (in Joule):"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "a56f424c",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"-1.926006612597703e-18"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"resolve_nested_dict(example_material.data['archive'], \"run/0/calculation/0/energy/total/value\")"
]
},
{
"cell_type": "markdown",
"id": "d5a50cca",
"metadata": {},
"source": [
"We can automatize this process by writing a small function:"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "5721468c",
"metadata": {},
"outputs": [],
"source": [
"def get_total_energy(archive: dict) -> float:\n",
" energy_ref = resolve_nested_dict(archive, 'archive/workflow/0/calculation_result_ref')\n",
" energy_ref = f'archive/{energy_ref.strip(\"/\")}/energy/total/value'\n",
" energy = resolve_nested_dict(archive, energy_ref)\n",
" return energy / electron_volt"
]
},
{
"cell_type": "markdown",
"id": "e40cd227",
"metadata": {},
"source": [
"Using this function, we can directly access the total energy (in eV)."
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "64508477",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"-12.02118775"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"get_total_energy(full_archives[0].data)"
]
},
{
"cell_type": "markdown",
"id": "4523620d",
"metadata": {},
"source": [
"## Automatic processing"
]
},
{
"cell_type": "markdown",
"id": "304f05d5",
"metadata": {},
"source": [
"We can now automatize what we did before. To do so, we define a dictionary `processing`, which contains as keys the name of the quantity we want to obtain, and the function to extract them from the NOMAD data as values:"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "58395cc5",
"metadata": {},
"outputs": [],
"source": [
"processing = {\n",
" 'atoms' : get_atoms, # 'atoms' is predefined here and is expected to return an ase Atoms object\n",
" 'energy_total' : get_total_energy,\n",
"}"
]
},
{
"cell_type": "markdown",
"id": "52b237a1",
"metadata": {},
"source": [
"Since we don't need all parts of the NOMAD data anymore, we can adapt the `required` dictionary:"
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "f15fefd3",
"metadata": {},
"outputs": [],
"source": [
"required_processed = {\n",
" \"required\" : {\n",
" \"workflow\" : \"*\", # contains which calculation has the optimized total energy \n",
" \"run\" : \"*\", # contains the total energy value\n",
" \"results\" : \"*\" # contails the atomic structure\n",
" }\n",
"}"
]
},
{
"cell_type": "markdown",
"id": "eb30a2f6",
"metadata": {},
"source": [
"Then we create a new `API` object, to download and process only the data we need:"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "ba20f261",
"metadata": {},
"outputs": [],
"source": [
"api_modified = API(processing=processing)"
]
},
{
"cell_type": "markdown",
"id": "7a04aee4",
"metadata": {},
"source": [
"We can run the query:"
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "e3a289b9",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Found 5 entries\n",
"Finished download.\n",
"Material(mid = MDy6puRcMwjin26GFGaIoWuyTZw5, formula = GaP, data = {'energy_total'}, properties = set())\n",
"Material(mid = MawJNfJFAVzVaZkOfsTJnWws0wmp, formula = GaP, data = {'energy_total'}, properties = set())\n",
"Material(mid = FIUqPOMua13ySJrnOynrNDnT5Xge, formula = GaP, data = {'energy_total'}, properties = set())\n",
"Material(mid = 3WER3GH6byHNIUQTOWxNf_vhlA28, formula = GaP, data = {'energy_total'}, properties = set())\n",
"Material(mid = l4YBhD_KzKalkX8cvDJ9oTIHSgZg, formula = GaP, data = {'energy_total'}, properties = set())\n"
]
}
],
"source": [
"materials = api_modified.get_calculations_by_search(query, required=required_processed)\n",
"for material in materials:\n",
" print(material)"
]
},
{
"cell_type": "markdown",
"id": "e464e92c",
"metadata": {},
"source": [
"From the available data, we can plot the equation of state (EOS) as a function of the unit cell volume: "
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "d9a5c68b",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"volumes = []\n",
"total_energies = []\n",
"for mat in materials:\n",
" volumes.append(mat.atoms.get_volume())\n",
" total_energies.append(mat.data['energy_total'])\n",
"volumes, total_energies = zip(*sorted(zip(volumes, total_energies), key=lambda x: x[0]))\n",
"plt.plot(volumes, total_energies, \"o-\")\n",
"plt.xlabel(\"Volume [Å$^3$]\", fontsize=15)\n",
"plt.ylabel(\"Energy [eV]\", fontsize=15)\n",
"plt.title(\"Equation of state of GaP\")\n",
"plt.show()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.8"
}
},
"nbformat": 4,
"nbformat_minor": 5
}