"""
Module for obtaining webpage data.
All the webpages are formatted in XML format.
They are converted into python dict from which
appropriate keys and values can be obtained.
Use 'list_keys' functions to find types
of data stored in each XML document.
"""
import numpy as np
import os
import requests
import tempfile
from jarvis.core.utils import xml_to_dict
[docs]class Webpage(object):
"""Get content of JARVIS-DFT and JARVIS-FF webpages."""
def __init__(self, data=[], jid=""):
"""Initialize the class."""
# JVASP- for JARVIS-DFT IDs
# JLMP- for JARVIS-FF IDs
self.jid = jid
if "JVASP-" in jid:
url = (
"https://www.ctcms.nist.gov/~knc6/static/JARVIS-DFT/"
+ jid
+ ".xml"
)
if "JLMP-" in jid:
url = (
"https://www.ctcms.nist.gov/~knc6/static/JARVIS-FF/"
+ jid
+ ".xml"
)
self.url = url
self.data = data
if self.data == []:
data = self.to_dict()
self.data = data
[docs] def to_dict(self):
"""Get dictionary for webpages."""
dat = requests.get(self.url).text
fd, path = tempfile.mkstemp()
with os.fdopen(fd, "w") as tmp:
tmp.write(dat)
data = xml_to_dict(path)
return data
[docs] def list_keys(self):
"""Get all main keys from webpages."""
print("keys=", self.data["basic_info"].keys())
return self.data["basic_info"].keys()
[docs] def get_dft_electron_dos(self):
"""Get JARVIS-DFT MAIN-RELAX DOS."""
return self.data["basic_info"]["main_relax_info"]["main_relax_dos"]
[docs] def get_dft_phonon_dos(self):
"""Get JARVIS-DFT MAIN-ELAST finite-diff DOS."""
return self.data["basic_info"]["main_elastic"]["main_elastic_info"]
[docs] def get_dft_mbj_dielectric_function(self):
"""Get JARVIS-DFT TBmBJ dielectric function."""
info = {}
energies = np.array(
self.data["basic_info"]["main_optics_mbj"]["main_optics_mbj_info"][
"energies"
]
.strip("'")
.split(","),
dtype="float",
)
real_part_xx = np.array(
self.data["basic_info"]["main_optics_mbj"]["main_optics_mbj_info"][
"real_1"
]
.strip("'")
.split(","),
dtype="float",
)
real_part_yy = np.array(
self.data["basic_info"]["main_optics_mbj"]["main_optics_mbj_info"][
"real_2"
]
.strip("'")
.split(","),
dtype="float",
)
real_part_zz = np.array(
self.data["basic_info"]["main_optics_mbj"]["main_optics_mbj_info"][
"real_3"
]
.strip("'")
.split(","),
dtype="float",
)
real_part_xy = np.array(
self.data["basic_info"]["main_optics_mbj"]["main_optics_mbj_info"][
"real_4"
]
.strip("'")
.split(","),
dtype="float",
)
real_part_yz = np.array(
self.data["basic_info"]["main_optics_mbj"]["main_optics_mbj_info"][
"real_5"
]
.strip("'")
.split(","),
dtype="float",
)
real_part_zx = np.array(
self.data["basic_info"]["main_optics_mbj"]["main_optics_mbj_info"][
"real_6"
]
.strip("'")
.split(","),
dtype="float",
)
imag_part_xx = np.array(
self.data["basic_info"]["main_optics_mbj"]["main_optics_mbj_info"][
"imag_1"
]
.strip("'")
.split(","),
dtype="float",
)
imag_part_yy = np.array(
self.data["basic_info"]["main_optics_mbj"]["main_optics_mbj_info"][
"imag_2"
]
.strip("'")
.split(","),
dtype="float",
)
imag_part_zz = np.array(
self.data["basic_info"]["main_optics_mbj"]["main_optics_mbj_info"][
"imag_3"
]
.strip("'")
.split(","),
dtype="float",
)
imag_part_xy = np.array(
self.data["basic_info"]["main_optics_mbj"]["main_optics_mbj_info"][
"imag_4"
]
.strip("'")
.split(","),
dtype="float",
)
imag_part_yz = np.array(
self.data["basic_info"]["main_optics_mbj"]["main_optics_mbj_info"][
"imag_5"
]
.strip("'")
.split(","),
dtype="float",
)
imag_part_zx = np.array(
self.data["basic_info"]["main_optics_mbj"]["main_optics_mbj_info"][
"imag_6"
]
.strip("'")
.split(","),
dtype="float",
)
info["energies"] = energies
info["real_xx"] = real_part_xx
info["real_yy"] = real_part_yy
info["real_zz"] = real_part_zz
info["real_xy"] = real_part_xy
info["real_yz"] = real_part_yz
info["real_zx"] = real_part_zx
info["imag_xx"] = imag_part_xx
info["imag_yy"] = imag_part_yy
info["imag_zz"] = imag_part_zz
info["imag_xy"] = imag_part_xy
info["imag_yz"] = imag_part_yz
info["imag_zx"] = imag_part_zx
return info
[docs] def get_dft_semilocal_dielectric_function(self):
"""Get JARVIS-DFT semilocal dielectric function."""
# OptB88vdW/LDA/PBE
info = {}
energies = np.array(
self.data["basic_info"]["main_optics_semilocal"][
"main_optics_info"
]["energies"]
.strip("'")
.split(","),
dtype="float",
)
real_part_xx = np.array(
self.data["basic_info"]["main_optics_semilocal"][
"main_optics_info"
]["real_1"]
.strip("'")
.split(","),
dtype="float",
)
real_part_yy = np.array(
self.data["basic_info"]["main_optics_semilocal"][
"main_optics_info"
]["real_2"]
.strip("'")
.split(","),
dtype="float",
)
real_part_zz = np.array(
self.data["basic_info"]["main_optics_semilocal"][
"main_optics_info"
]["real_3"]
.strip("'")
.split(","),
dtype="float",
)
real_part_xy = np.array(
self.data["basic_info"]["main_optics_semilocal"][
"main_optics_info"
]["real_4"]
.strip("'")
.split(","),
dtype="float",
)
real_part_yz = np.array(
self.data["basic_info"]["main_optics_semilocal"][
"main_optics_info"
]["real_5"]
.strip("'")
.split(","),
dtype="float",
)
real_part_zx = np.array(
self.data["basic_info"]["main_optics_semilocal"][
"main_optics_info"
]["real_6"]
.strip("'")
.split(","),
dtype="float",
)
imag_part_xx = np.array(
self.data["basic_info"]["main_optics_semilocal"][
"main_optics_info"
]["imag_1"]
.strip("'")
.split(","),
dtype="float",
)
imag_part_yy = np.array(
self.data["basic_info"]["main_optics_semilocal"][
"main_optics_info"
]["imag_2"]
.strip("'")
.split(","),
dtype="float",
)
imag_part_zz = np.array(
self.data["basic_info"]["main_optics_semilocal"][
"main_optics_info"
]["imag_3"]
.strip("'")
.split(","),
dtype="float",
)
imag_part_xy = np.array(
self.data["basic_info"]["main_optics_semilocal"][
"main_optics_info"
]["imag_4"]
.strip("'")
.split(","),
dtype="float",
)
imag_part_yz = np.array(
self.data["basic_info"]["main_optics_semilocal"][
"main_optics_info"
]["imag_5"]
.strip("'")
.split(","),
dtype="float",
)
imag_part_zx = np.array(
self.data["basic_info"]["main_optics_semilocal"][
"main_optics_info"
]["imag_6"]
.strip("'")
.split(","),
dtype="float",
)
info["energies"] = energies
info["real_xx"] = real_part_xx
info["real_yy"] = real_part_yy
info["real_zz"] = real_part_zz
info["real_xy"] = real_part_xy
info["real_yz"] = real_part_yz
info["real_zx"] = real_part_zx
info["imag_xx"] = imag_part_xx
info["imag_yy"] = imag_part_yy
info["imag_zz"] = imag_part_zz
info["imag_xy"] = imag_part_xy
info["imag_yz"] = imag_part_yz
info["imag_zx"] = imag_part_zx
return info
"""
if __name__ == "__main__":
w = Webpage(jid="JVASP-1002")
info_mbj = w.get_dft_mbj_dielectric_function()
# print(info_mbj)
w.list_keys()
"""