### Description

This repository contains the electronic density of states (DOS) computed using `VASP` for ternary Heusler alloys reported in [this paper](https://www.sciencedirect.com/science/article/pii/S1359645425005981). The number of entries is 51,373. The DOS data is stored in a JSON format and can be easily loaded and processed using Python as detailed below.

The data is organized by compound type (full, inverse, half) and crystal structure (cubic, tetragonal).

- PDOS_json_full_cubic_241229.tar.xz: Full Heusler compounds in cubic structure
- PDOS_json_full_tetra_241229.tar.xz: Full Heusler compounds in tetragonal structure
- PDOS_json_inverse_cubic_241229.tar.xz: Inverse Heusler compounds in cubic structure
- PDOS_json_inverse_tetra_241229.tar.xz: Inverse Heusler compounds in tetragonal structure
- PDOS_json_half_cubic_241229.tar.xz: Half Heusler compounds in cubic structure
- PDOS_json_half_tetra_241229.tar.xz: Half Heusler compounds in tetragonal structure

#### Computational Details
- PREC = A; ENCUT = 520; ADDGRID = .True.; LASPH = .True.
- ISMEAR = 2; SIGMA = 0.05 for structural opt., ISMEAR = -5 for DOS.
- Used `pymatgen.io.vasp.Kpoints.automatic_density_by_vol` with a density of 1000 per Å<sup>-3</sup>.
- GGA-PBE functional is used for all calculations.
- No Spin-orbit coupling and no Hubbard U correction are considered.
- Pseudopotentials: default set of PBE_54 by pymatgen. For the complete list of the used pseudopotentials, please refer to pseudolist_Heuslerdb.txt.

#### Data Structure and Loading

The JSON files are created using `pymatgen` CompleteDos objects and serialized with `monty.serialization`. Each file is named as X2YZ_UUID.json where X2YZ represents the compound formula and UUID is a unique identifier. For the UUID, please refer to the [HeuslerDB webpage](https://www.nims.go.jp/group/spintheory/database/).

#### Decompression
The files are compressed using `tar` and `xz`. You can decompress them using the following
command in a Unix-like terminal:

```bash
tar xvJf PDOS_json_full_cubic_241229.tar.xz
```

#### Required Dependencies
To work with these files, you need to install the following Python packages:

```bash
pip install pymatgen monty
```

#### Loading DOS

To load and analyze the DOS data, you can use the following Python code:

```python
import monty.serialization as ms
from pymatgen.electronic_structure.core import Spin, OrbitalType

# Load the DOS data (returns a pymatgen CompleteDos object)
dos = ms.loadfn('X2YZ_UUID.json')

# Get total DOS
total_dos = dos.get_densities()  # total DOS
# For spin-polarized systems:
# total_dos = (dos.get_densities(Spin.up), dos.get_densities(Spin.down))

# Get energy grid relative to the Fermi level
energies = dos.energies - dos.efermi

# Get spd-decomposed DOS
spd_dos = dos.get_spd_dos()
dos_s = spd_dos[OrbitalType.s]
projected_dos_s = dos_s.get_densities()

# Similarly for p and d orbitals:
dos_p = spd_dos[OrbitalType.p]
dos_d = spd_dos[OrbitalType.d]
projected_dos_p = dos_p.get_densities()
projected_dos_d = dos_d.get_densities()
```


#### Data Organization

The CompleteDos object contains:

- Total DOS: Overall density of states for the compound
- Projected DOS: DOS projected onto atomic orbitals (s, p, d, f)
- Site-specific DOS: DOS for individual atomic sites
- Energy grid: Energy values (typically referenced to the Fermi level)
- Fermi energy: The Fermi level of the system

#### Example Analysis
Here's a complete example to plot the total DOS:

```python
import matplotlib.pyplot as plt
import monty.serialization as ms

# Load DOS data
dos = ms.loadfn('X2YZ_UUID.json')

# Get energies relative to Fermi level
energies = dos.energies - dos.efermi

# Get total DOS
total_dos = dos.get_densities()

# Plot
plt.figure(figsize=(8, 6))
plt.plot(energies, total_dos)
plt.xlabel('Energy (eV)')
plt.ylabel('DOS (states/eV)')
plt.title('Total Density of States')
plt.axvline(x=0, color='r', linestyle='--', label='Fermi Level')
plt.legend()
plt.grid(True, alpha=0.3)
plt.show()
```
