latmatcher / backend /db_utils /parse_jarvis.py
AndreiVoicuT's picture
Upload 85 files
1c703f0 verified
raw
history blame
2.42 kB
import pandas as pd
import os
import periodictable
from .vasp_utils import get_band_structure
from .structure_propriety import DBPropriety, Source
def get_atomic_number(element_name):
# Find the element
element = getattr(periodictable, element_name, None)
# Check if the element exists
if element is not None and hasattr(element, 'number'):
return element.number
else:
return "Element not found"
def read_jarvis(file_path):
db = pd.read_json(file_path)
return db
def get_jarvis_instance(jr_data, jr_id):
jarvis_el = jr_data[jr_data['jid'] == jr_id]
return jarvis_el
def from_jarvis_formula(jarvis_el):
return jarvis_el["formula"].values[0]
def from_jarvis_structure(jarvis_el):
structure = {
'cell': jarvis_el["atoms"].values[0]['lattice_mat'],
'atoms': [get_atomic_number(e) for e in jarvis_el["atoms"].values[0]['elements']],
'positions': jarvis_el["atoms"].values[0]['coords'],
'pbc': [True, True, False]
}
return structure
def from_jarvis_energy(jarvis_el):
return None
def from_jarvis_band_gap(jarvis_el):
return None
def from_jarvis_band_structure(jarvis_el):
jid=jarvis_el["jid"].values[0]
vasp_xml_path="DB/Databases/JARVIS/JARVIS2D/OPT-Bandst/{}/vasprun.xml".format(jid)
if os.path.isfile(vasp_xml_path):
try:
band_structure, numerics=get_band_structure(vasp_xml_path)
source = Source(tipe="computation",
author_id="JARVIS",
description={"calculator": "VASP",
"calculator_files": vasp_xml_path, },
cite="https://jarvis.nist.gov")
band_structure = DBPropriety(name="band_structure",
value=numerics,
source=source)
return band_structure
except:
return None
return None
def from_jarvis_density_of_states(jarvis_el):
return None
#
# file_path = "/Users/voicutomut/Documents/GitLab/bespoke-interface/DB_experiments/JARVIS2D/d2-12-12-2022.json"
# jar = read_jarvis(file_path)
# print(jar.head())
# jr = get_jarvis_instance(jar, "JVASP-76515")
#
# print(jr)
# print(jr.head())
# print(from_jarvis_formula(jr))
# print(jr["atoms"].values[0]['cartesian'])
# print(jr["atoms"].values[0].keys())