diff --git a/README.md b/README.md
index bd6420fa..104a05bb 100644
--- a/README.md
+++ b/README.md
@@ -6,7 +6,7 @@
Notice
===========
-- **New Release** We recently updated to a new version 'v6.2.0'.
+- **New Release** We recently updated to a new version 'v6.2.1'.
- **Support for Previous Versions**: For users who prefer to continue with an older version, we have conveniently archived the previous releases on GitHub, and provided a link to the corresponding documentation.
@@ -135,6 +135,7 @@ will bring a help menu.
Changelog
--------------
+v6.2.1 Jul 23rd, 2024 -- New symmetrization method, new fermi surface projection method, ebs and dos refactor,
v6.2.0 Jun 29th, 2024 -- Major bug fixes to 3d plotting and other minor bug fixes
v6.1.10 Jun 09th, 2024 -- Bug fix to dos, qe parser changes, elk parser changes, fermisurface changes
v6.1.9 Mar 28th, 2024 -- Changed default fermi level behavior, updated dos implementation, and doc updates
diff --git a/docs/.buildinfo b/docs/.buildinfo
index 1bff17b8..df9ec01f 100644
--- a/docs/.buildinfo
+++ b/docs/.buildinfo
@@ -1,4 +1,4 @@
# Sphinx build info version 1
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
-config: fb99933e2a4ba6f1f06ab9723e589c63
+config: 2bf8b6c249800b9e5576fdf60f2d3208
tags: 645f666f9bcd5a90fca523b33c5a78b7
diff --git a/docs/_images/sphx_glr_plot_ebs_002.png b/docs/_images/sphx_glr_plot_ebs_002.png
index 177bdaa4..b639d7f8 100644
Binary files a/docs/_images/sphx_glr_plot_ebs_002.png and b/docs/_images/sphx_glr_plot_ebs_002.png differ
diff --git a/docs/_images/sphx_glr_plot_ebs_003.png b/docs/_images/sphx_glr_plot_ebs_003.png
index 45eac6f8..7ae21552 100644
Binary files a/docs/_images/sphx_glr_plot_ebs_003.png and b/docs/_images/sphx_glr_plot_ebs_003.png differ
diff --git a/docs/_modules/index.html b/docs/_modules/index.html
index d733e9fe..7ceb93a3 100644
--- a/docs/_modules/index.html
+++ b/docs/_modules/index.html
@@ -7,7 +7,7 @@
PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
diff --git a/docs/_modules/pyprocar/cfg/band_structure.html b/docs/_modules/pyprocar/cfg/band_structure.html index 4ee24f77..7948506b 100644 --- a/docs/_modules/pyprocar/cfg/band_structure.html +++ b/docs/_modules/pyprocar/cfg/band_structure.html @@ -7,7 +7,7 @@ -PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
diff --git a/docs/_modules/pyprocar/cfg/fermi_surface_3d.html b/docs/_modules/pyprocar/cfg/fermi_surface_3d.html index 41acd4a0..52d95ed3 100644 --- a/docs/_modules/pyprocar/cfg/fermi_surface_3d.html +++ b/docs/_modules/pyprocar/cfg/fermi_surface_3d.html @@ -7,7 +7,7 @@ -PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
diff --git a/docs/_modules/pyprocar/core/brillouin_zone.html b/docs/_modules/pyprocar/core/brillouin_zone.html index e1fb3a37..7e9780bb 100644 --- a/docs/_modules/pyprocar/core/brillouin_zone.html +++ b/docs/_modules/pyprocar/core/brillouin_zone.html @@ -7,7 +7,7 @@ -PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
diff --git a/docs/_modules/pyprocar/core/dos.html b/docs/_modules/pyprocar/core/dos.html index 601caf9f..3c329489 100644 --- a/docs/_modules/pyprocar/core/dos.html +++ b/docs/_modules/pyprocar/core/dos.html @@ -7,7 +7,7 @@ -PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
diff --git a/docs/_modules/pyprocar/core/ebs.html b/docs/_modules/pyprocar/core/ebs.html index 9f365e02..719cce5a 100644 --- a/docs/_modules/pyprocar/core/ebs.html +++ b/docs/_modules/pyprocar/core/ebs.html @@ -7,7 +7,7 @@ -PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
diff --git a/docs/_modules/pyprocar/core/fermisurface.html b/docs/_modules/pyprocar/core/fermisurface.html index c461c456..cacce931 100644 --- a/docs/_modules/pyprocar/core/fermisurface.html +++ b/docs/_modules/pyprocar/core/fermisurface.html @@ -7,7 +7,7 @@ -PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
diff --git a/docs/_modules/pyprocar/core/fermisurface3D.html b/docs/_modules/pyprocar/core/fermisurface3D.html index 768cb39e..15b32513 100644 --- a/docs/_modules/pyprocar/core/fermisurface3D.html +++ b/docs/_modules/pyprocar/core/fermisurface3D.html @@ -7,7 +7,7 @@ -PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
diff --git a/docs/_modules/pyprocar/core/isosurface.html b/docs/_modules/pyprocar/core/isosurface.html index 8920ff3a..689a4b33 100644 --- a/docs/_modules/pyprocar/core/isosurface.html +++ b/docs/_modules/pyprocar/core/isosurface.html @@ -7,7 +7,7 @@ -PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
diff --git a/docs/_modules/pyprocar/core/kpath.html b/docs/_modules/pyprocar/core/kpath.html index 7ab7fa1f..0995da14 100644 --- a/docs/_modules/pyprocar/core/kpath.html +++ b/docs/_modules/pyprocar/core/kpath.html @@ -7,7 +7,7 @@ -PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
diff --git a/docs/_modules/pyprocar/core/structure.html b/docs/_modules/pyprocar/core/structure.html index 67fcf557..b6e10cf7 100644 --- a/docs/_modules/pyprocar/core/structure.html +++ b/docs/_modules/pyprocar/core/structure.html @@ -7,7 +7,7 @@ -PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
diff --git a/docs/_modules/pyprocar/core/surface.html b/docs/_modules/pyprocar/core/surface.html index 6e7a2b00..087cf9f8 100644 --- a/docs/_modules/pyprocar/core/surface.html +++ b/docs/_modules/pyprocar/core/surface.html @@ -7,7 +7,7 @@ -PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
diff --git a/docs/_modules/pyprocar/io/abinit.html b/docs/_modules/pyprocar/io/abinit.html index bdd510ff..7f117a2d 100644 --- a/docs/_modules/pyprocar/io/abinit.html +++ b/docs/_modules/pyprocar/io/abinit.html @@ -7,7 +7,7 @@ -PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
diff --git a/docs/_modules/pyprocar/io/bxsf.html b/docs/_modules/pyprocar/io/bxsf.html index d8fe08ec..be7e2952 100644 --- a/docs/_modules/pyprocar/io/bxsf.html +++ b/docs/_modules/pyprocar/io/bxsf.html @@ -7,7 +7,7 @@ -PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
diff --git a/docs/_modules/pyprocar/io/lobster.html b/docs/_modules/pyprocar/io/lobster.html index 47d8ff71..7abfdf70 100644 --- a/docs/_modules/pyprocar/io/lobster.html +++ b/docs/_modules/pyprocar/io/lobster.html @@ -7,7 +7,7 @@ -PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
diff --git a/docs/_modules/pyprocar/io/qe.html b/docs/_modules/pyprocar/io/qe.html index 2870b50c..1885179b 100644 --- a/docs/_modules/pyprocar/io/qe.html +++ b/docs/_modules/pyprocar/io/qe.html @@ -7,7 +7,7 @@ -PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
@@ -525,12 +525,9 @@
self.isBandsCalc = True
with open(bands_in_filename, "r") as f:
self.bandsIn = f.read()
- self.getKpointLabels()
+ self._get_kpoint_labels()
- # if xml_root.findall(".//input/control_variables/calculation")[0].text == "nscf":
- # self.is_dos_fermi_calc = True
- # if self.kpath is not None:
- # self.bands -= self.efermi
+
self.ebs = ElectronicBandStructure(
kpoints=self.kpoints,
n_kx=self.nkx,
@@ -653,11 +650,10 @@ Source code for pyprocar.io.qe
# Parsing total density of states
energies, total_dos = self._parse_dos_total(dos_total_filename=f"{dirname}{os.sep}{self.pdos_prefix}.pdos_tot")
-
+ self.n_energies=len(energies)
# Finding all the density of states projections files
- # print(self.wfc_filenames)
wfc_filenames = self._parse_available_wfc_filenames(dirname = self.dirname)
- projected_dos, projected_labels = self._parse_dos_projections(wfc_filenames=wfc_filenames, n_energy = len(energies))
+ projected_dos = self._parse_dos_projections(wfc_filenames=wfc_filenames, n_energy = len(energies))
# print(projected_labels)
dos = DensityOfStates(energies=energies,
@@ -706,131 +702,157 @@ Source code for pyprocar.io.qe
energies -= self.efermi
return energies, total_dos
- def _parse_dos_projections(self,wfc_filenames,n_energy):
- """Helper method to parse the dos projection files
+ def _parse_dos_projections(self, wfc_filenames, n_energy):
+ """Parse the dos projection files using efficient array operations."""
+ n_principal_number = 1
- Parameters
- ----------
- wfc_filenames : List[str]
- A List of projection filenames.
- n_energy : int
- The number of energies for which the density of states is calculated at.
+ projected_dos_array = np.zeros((self.n_atoms, n_principal_number, self.n_orbitals, self.n_spin, n_energy))
- Returns
- -------
- _type_
- _description_
+ for filename in wfc_filenames:
+ self._validate_file(filename)
- Raises
- ------
- ValueError
- _description_
- """
- n_principal_number = 1
- projected_dos_array = np.zeros(shape=(self.n_atoms,n_principal_number,self.n_orbitals,self.n_spin,n_energy))
- for filename in wfc_filenames[:]:
- if not os.path.exists(filename):
- raise ValueError('ERROR: pdos file not found')
- with open(filename) as f:
- pdos_text = ''.join(f.readlines()[1:])
-
- # -1 because indexing starts at 0
- atom_num = int(re.findall("#(\d*)",filename)[0]) - 1
- wfc_Name = re.findall("atm#\d*\(([a-zA-Z0-9]*)\)",filename)[0]
- orbital_name = re.findall("wfc#\d*\(([_a-zA-Z0-9.]*)\)",filename)[0]
- n_orbitial = len(self.orbitals)
+ # Some pdos files are not non-colinear.
+ # In the version of the qe code where we get the spin projections.
+ # Non-colinear pdos files should have the word 'j' in the filename.
+ if not self._is_non_colinear_file(filename) and self.is_non_colinear:
+ continue
-
- # For noncolinear caluclations
+ # Determine the parsing method based on calculation type
if self.is_non_colinear:
- # In the noncolinear case there are some files that are not used. They are in the uncoupled basis
- try:
- tot_ang_mom = float(orbital_name.split('j')[-1])
- except:
- continue
-
- # This controls the mapping from raw orbital projection data to structured orbital projection data
- # as defined by the order in self.orbitals
- l_orbital_name = orbital_name.split('_')[0]
- if l_orbital_name == 's':
- if tot_ang_mom == 0.5:
- m_js = np.linspace(-0.5,0.5,2)
- orbital_nums = [0,1]
- elif l_orbital_name == 'p':
- if tot_ang_mom == 0.5:
- m_js = np.linspace(-0.5,0.5,2)
- orbital_nums = [2,3]
- elif tot_ang_mom == 1.5:
- m_js = np.linspace(-1.5,1.5,4)
- orbital_nums = [4,5,6,7]
- elif l_orbital_name == 'd':
- if tot_ang_mom == 0.5:
- m_js = np.linspace(-0.5,0.5,2)
- orbital_nums = [2,3]
- elif tot_ang_mom == 1.5:
- m_js = np.linspace(-1.5,1.5,4)
- orbital_nums = [8,9,10,11]
- elif tot_ang_mom == 2.5:
- m_js = np.linspace(-2.5,2.5,6)
- orbital_nums = [12,13,14,15,16,17]
-
- # Filters unwanted empty character from the regular expression search
- raw_energy_blocks = list(filter(None,re.findall('([\s\S]*?)(?=\n \n)',pdos_text)))
-
- # Loop through the energies
- for i_energy, raw_energy_block in enumerate(raw_energy_blocks[:]):
- #Strippng unwanted space characters before and after the block
- raw_energy_block =raw_energy_block.lstrip().rstrip()
- # Orbital_num is the index in the final array, i_orbital is the index in the raw_data
- for i_orbital,orbital_num in enumerate(orbital_nums):
- # Loop through spins
- for i_spin,spin_comp in enumerate([1,2,3]):
- # Totals
- # if i_spin == 0:
- # projected_dos_array[atom_num,0,orbital_num,i_spin,i_energy] += float(raw_energy_block.split('\n')[0].split()[2+i_orbital])
- # # spin components
- # else:
- # projected_dos_array[atom_num,0,orbital_num,i_spin,i_energy] += float(raw_energy_block.split('\n')[i_spin+1].split()[1+i_orbital])
-
- projected_dos_array[atom_num,0,orbital_num,spin_comp,i_energy] += float(raw_energy_block.split('\n')[i_spin+2].split()[1+i_orbital])
-
- # For colinear calculations
+ self._parse_non_colinear(filename, projected_dos_array)
else:
- current_orbital_name = orbital_name
-
- # This controls the mapping from raw orbital projection data to structured orbital projection data
- # as defined by the order in self.orbitals
- if current_orbital_name == 's':
- m_s = np.linspace(0,0,1)
- orbital_nums = [0]
- elif current_orbital_name == 'p':
- m_s = np.linspace(-1,1,3)
- orbital_nums = [1,2,3]
- elif current_orbital_name == 'd':
- m_s = np.linspace(-2,2,5)
- orbital_nums = [4,5,6,7,8]
-
- # Filters unwanted empty character from the regular expression search
- raw_energy_blocks = pdos_text.rstrip().split('\n')
-
- # Loop through the energies
- for i_energy, raw_energy_block in enumerate(raw_energy_blocks):
- raw_energy_block =raw_energy_block.lstrip().rstrip()
- raw_projections = raw_energy_block.split()[1+self.n_spin:]
-
- # Orbital_num is the index in the final array, i_orbital is the index in the raw_data
- for i_orbital, orbital_num in enumerate(orbital_nums):
-
- # Loop through spins
- for i_spin in range(self.n_spin):
- projected_dos_array[atom_num,0,orbital_num,i_spin,i_energy] += float(raw_projections[i_spin::self.n_spin][i_orbital])
-
+ self._parse_colinear(filename, projected_dos_array)
+ return projected_dos_array
+
+ def _is_non_colinear_file(self, filename):
+ """Determine if the file corresponds to non-colinear calculations."""
+ file_tag = filename.split('_')[-1]
+ return 'j' in file_tag
+
+ def _validate_file(self, filename):
+ if not os.path.exists(filename):
+ raise ValueError(f'ERROR: pdos file not found: {filename}')
+
+ def _read_file_content(self, filename):
+ with open(filename) as f:
+ # Check if spin component projections are present
+ lines=f.readlines()[1:]
+ spin_projections_present = 'lsigma' in lines[1]
+
+ if spin_projections_present:
+ pdos=self._parse_spin_components_lines(lines)
+ elif self.is_non_colinear:
+ pdos=self._parse_noncolinear_pdos(lines)
+ else:
+ pdos=self._parse_colinear_pdos(lines)
+ return pdos
+
+ def _parse_spin_components_lines(self, lines):
+
+ n_orbitals=len(lines[0].split()) - 2
+ pdos=np.zeros(shape=(self.n_energies, n_orbitals, self.n_spin))
+ for i_energy in range(self.n_energies):
+ iblock_start=i_energy*6
+ total_line=lines[iblock_start].split()[2:]
+ x_line=lines[iblock_start+2].split()[1:]
+ y_line=lines[iblock_start+3].split()[1:]
+ z_line=lines[iblock_start+4].split()[1:]
+ pdos[i_energy, : ,0] = [float(tot) for tot in total_line]
+ pdos[i_energy, : ,1] = [float(x) for x in x_line]
+ pdos[i_energy, : ,2] = [float(y) for y in y_line]
+ pdos[i_energy, : ,3] = [float(z) for z in z_line]
+
+ # Move energy to the last axis
+ pdos = np.moveaxis(pdos, 0, -1)
+ return pdos
+
+ def _parse_colinear_pdos(self,lines):
+ # The energy column is first, the sum totals by spin channel
+ n_orbitals=len(lines[0].split()) - self.n_spin - 1
+ n_orbitals //= self.n_spin
+ pdos=np.zeros(shape=(self.n_energies, n_orbitals, self.n_spin))
+ col_start= 1 + self.n_spin
+ for i_energy in range(self.n_energies):
+
+ # Skip energies and sum over projections
+ values=lines[i_energy].split()[col_start:]
+ if self.n_spin == 1:
+ pdos[i_energy, : , 0] = values
+ else:
+ pdos[i_energy, : , 0] = values[::2]
+ pdos[i_energy, : , 1] = values[1::2]
+
+ # Move energy to the last axis
+ pdos = np.moveaxis(pdos, 0, -1)
+ return pdos
+
+ def _parse_noncolinear_pdos(self,lines):
+ # The energy column is first, the sum totals by spin channel
+ n_orbitals=len(lines[0].split()) - 1 - 1
+ n_orbitals //= 1
+ pdos=np.zeros(shape=(self.n_energies, n_orbitals, 4))
+ col_start= 1 + 1
+ for i_energy in range(self.n_energies):
+ # Skip energies and sum over projections
+ values=lines[i_energy].split()[col_start:]
+ pdos[i_energy, : , 0] = values
+ # Move energy to the last axis
+ pdos = np.moveaxis(pdos, 0, -1)
+ return pdos
+
+ def _extract_file_info(self, filename):
+ atom_num = int(re.findall(r"#(\d*)", filename)[0]) - 1
+ wfc_name = re.findall(r"atm#\d*\(([a-zA-Z0-9]*)\)", filename)[0]
+ orbital_name = filename.split('(')[-1][0]
+
+ total_angular_momentum=None
if self.is_non_colinear:
- projected_dos_array[:,:,:,0,:] = (projected_dos_array[:,:,:,1,:]**2 + projected_dos_array[:,:,:,2,:]**2 + projected_dos_array[:,:,:,3,:]**2)**0.5
- return projected_dos_array, self.orbital_names
-
-[docs] def getKpointLabels(self):
+ tmp_str=filename.split('_')[-1]
+ total_angular_momentum=float(tmp_str.strip('j').strip(')'))
+ return atom_num, wfc_name, orbital_name,total_angular_momentum
+
+ def _parse_non_colinear(self, filename, projected_dos_array):
+
+ pdos_data = self._read_file_content(filename)
+ atom_num, wfc_name, orbital_name, total_angular_momentum = self._extract_file_info(filename)
+
+ orbital_nums, _ = self._get_orbital_info_non_colinear(orbital_name, total_angular_momentum)
+ if not orbital_nums:
+ raise ValueError(f'ERROR: orbital_nums is empty for {filename}')
+
+ projected_dos_array[atom_num, 0, orbital_nums, :, :self.n_energies] += pdos_data
+
+ def _parse_colinear(self, filename, projected_dos_array):
+
+ pdos_data = self._read_file_content(filename)
+ atom_num, wfc_name, orbital_name,total_angular_momentum = self._extract_file_info(filename)
+ orbital_nums, _ = self._get_orbital_info_colinear(orbital_name)
+
+ if not orbital_nums:
+ raise ValueError(f'ERROR: orbital_nums is empty for {filename}')
+ projected_dos_array[atom_num, 0, orbital_nums, : , :self.n_energies] += pdos_data
+
+ def _get_orbital_info_non_colinear(self, l_orbital_name, tot_ang_mom):
+ orbital_info = {
+ 's': {0.5: ([0, 1], np.linspace(-0.5, 0.5, 2))},
+ 'p': {0.5: ([2, 3], np.linspace(-0.5, 0.5, 2)),
+ 1.5: ([4, 5, 6, 7], np.linspace(-1.5, 1.5, 4))},
+ 'd': {0.5: ([2, 3], np.linspace(-0.5, 0.5, 2)),
+ 1.5: ([8, 9, 10, 11], np.linspace(-1.5, 1.5, 4)),
+ 2.5: ([12, 13, 14, 15, 16, 17], np.linspace(-2.5, 2.5, 6))}
+ }
+ return orbital_info.get(l_orbital_name, {}).get(tot_ang_mom, ([], []))
+
+ def _get_orbital_info_colinear(self, orbital_name):
+ orbital_info = {
+ 's': ([0], np.linspace(0, 0, 1)),
+ 'p': ([1, 2, 3], np.linspace(-1, 1, 3)),
+ 'd': ([4, 5, 6, 7, 8], np.linspace(-2, 2, 5))
+ }
+ return orbital_info.get(orbital_name, ([], []))
+
+ def _get_kpoint_labels(self):
"""
This method will parse the bands.in file to get the kpath information.
"""
@@ -919,7 +941,7 @@ Source code for pyprocar.io.qe
kticks = self.kticks,
ngrids=self.ngrids,
has_time_reversal=has_time_reversal,
- )
+ )
def _initialize_filenames(self, dirname, scf_in, bands_in_filename, pdos_in_filename):
"""This helper method handles pathing to the to locate files
@@ -947,20 +969,26 @@ Source code for pyprocar.io.qe
dirname = dirname + os.sep
else:
dirname = ""
-
- with open(f"{dirname}{scf_in}", "r") as f:
+
+ scf_in_file_path = os.path.join(dirname,scf_in)
+ with open(scf_in_file_path, "r") as f:
scf_in = f.read()
outdir = re.findall("outdir\s*=\s*'\S*?([A-Za-z]*)'", scf_in)[0]
prefix = re.findall("prefix\s*=\s*'(.*)'", scf_in)[0]
xml_filename = prefix + ".xml"
- if os.path.exists(f"{dirname}{outdir}"):
- atomic_proj_xml = f"{dirname}{os.sep}{outdir}{os.sep}{prefix}.save{os.sep}atomic_proj.xml"
- else:
- atomic_proj_xml = f"{dirname}atomic_proj.xml"
+ atomic_proj_xml = os.path.join(dirname,outdir,prefix + ".save","atomic_proj.xml")
+ if not os.path.exists(atomic_proj_xml):
+ atomic_proj_xml = os.path.join(dirname,"atomic_proj.xml")
+
+ output_xml=os.path.join(dirname,outdir,xml_filename)
+ if not os.path.exists(output_xml):
+ output_xml = os.path.join(dirname,xml_filename)
+
+
+ tree = ET.parse(output_xml)
- tree = ET.parse(f"{dirname}{xml_filename}")
root = tree.getroot()
prefix = root.findall(".//input/control_variables/prefix")[0].text
@@ -1087,9 +1115,13 @@ Source code for pyprocar.io.qe
nbnd = int(root_header.get("NUMBER_OF_BANDS"))
nk = int(root_header.get("NUMBER_OF_K-POINTS"))
nwfc = int(root_header.get("NUMBER_OF_ATOMIC_WFC"))
- norb = len(self.orbitals)
- natm = len(self.species)
-
+ norb = self.n_orbitals
+ natm = self.n_atoms
+ nspin_channels = int(root_header.get("NUMBER_OF_SPIN_COMPONENTS"))
+ nspin_projections = self.n_spin
+ # The indices are to match the format of the from PROCAR format.
+ # In it there is an extra 2 columns for orbitals for the ion index and the total
+ # Also there is and extra row for the totals
self.spd = np.zeros(shape = (self.n_k, self.n_band , self.n_spin ,self.n_atoms+1,self.n_orbitals + 2,))
self.spd_phase = np.zeros(
@@ -1098,70 +1130,107 @@ Source code for pyprocar.io.qe
),
dtype=np.complex_,
)
- # print(self.wfc_mapping)
- ik = -1
- for ieigenstate, eigenstates_element in enumerate(atm_proj_root.findall(".//EIGENSTATES")[0]):
- # print(eigenstates_element.tag)
- if eigenstates_element.tag == 'K-POINT':
-
- # sets ik back to zero for other spin channel
- if ik==nk-1:
- ik=0
- else:
- ik+=1
-
- if eigenstates_element.tag == 'PROJS':
-
- for i, projs_element in enumerate(eigenstates_element):
- iwfc = int(projs_element.get('index'))
- iorb = self.wfc_mapping[f"wfc_{iwfc}"]["orbital"]
- iatm = self.wfc_mapping[f"wfc_{iwfc}"]["atom"]
-
- if self.is_non_colinear:
- # Skips the total projections
- if projs_element.tag == "ATOMIC_WFC":
- ispin = int(projs_element.get('spin'))-1
- continue
- # Parse spin components. -1 to align index with spd array
- if projs_element.tag == "ATOMIC_SIGMA_PHI":
- ispin = int(projs_element.get('ipol'))
- else:
- if projs_element.tag == "ATOMIC_WFC":
- ispin = int(projs_element.get('spin'))-1
-
-
- projections = projs_element.text.split("\n")[1:-1]
- for iband, band_projection in enumerate(projections):
- real = float(band_projection.split()[0])
- imag = float(band_projection.split()[1])
- comp = complex(real , imag)
- comp_squared = np.absolute(comp)**2
-
- self.spd_phase[ik,iband,ispin,iatm - 1,iorb + 1] = complex(real , imag)
+ bands=self._parse_bands_tag(atm_proj_root, nk, nbnd, nspin_channels)
+ kpoints=self._parse_kpoints_tag(atm_proj_root, nk, nspin_channels)
+ projs, projs_phase=self._parse_projections_tag(atm_proj_root, nk, nbnd, natm, norb, nspin_channels, nspin_projections)
- # The spd will depend on of the calculation is a non colinear or colinear. Noncolinear
- if self.is_non_colinear:
-
- self.spd[ik,iband,ispin,iatm - 1,iorb + 1] = real
- else:
- self.spd[ik,iband,ispin,iatm - 1,iorb + 1] = comp_squared
+ # maping the projections to the spd array. The spd array is the output of the PROCAR file
+ self.spd[:,:,:,:-1,1:-1] += projs[:,:,:,:,:]
+ self.spd_phase[:,:,:,:-1,1:-1] += projs_phase[:,:,:,:,:]
- if self.is_non_colinear:
-
- self.spd[:,:,0,:,:] = (self.spd[:,:,1,:,:] ** 2 + self.spd[:,:,2,:,:] ** 2 + self.spd[:,:,3,:,:] ** 2)**0.5
- self.spd_phase[:,:,0,:,:] = (self.spd_phase[:,:,1,:,:] ** 2 + self.spd_phase[:,:,2,:,:] ** 2 + self.spd_phase[:,:,3,:,:] ** 2)**0.5
+ # Adding atom index. This is a vasp output thing
for ions in range(self.ionsCount):
self.spd[:, :, :, ions, 0] = ions + 1
- # The following fills the totals for the spd array
+ # The following fills the totals for the spd array. Again this is a vasp output thing.
self.spd[:, :, :, :, -1] = np.sum(self.spd[:, :, :, :, 1:-1], axis=4)
self.spd[:, :, :, -1, :] = np.sum(self.spd[:, :, :, :-1, :], axis=3)
self.spd[:, :, :, -1, 0] = 0
return None
-
+
+ def _parse_bands_tag(self,atm_proj_root, nk, nbnd, nspins):
+
+ bands=np.zeros(shape=(nk,nbnd,nspins))
+ results=atm_proj_root.findall(".//EIGENSTATES/E")
+ # For spin-polarized calculations, there are two spin channels.
+ # They add them by first adding the spin up and then the spin down
+ # I break this down with the folloiwng indexing
+ spin_reuslts=[results[i*nk : (i+1)*nk ] for i in range(nspins)]
+ for ispin,spin_result in enumerate(spin_reuslts):
+ for ik,result in enumerate(spin_result):
+ bands_per_kpoint=result.text.split()
+ bands[ik,:,ispin]=bands_per_kpoint
+
+ return bands
+
+ def _parse_kpoints_tag(self,atm_proj_root, nk, nspins):
+ kpoints=np.zeros(shape=(nk,3))
+ kpoint_tags=atm_proj_root.findall(".//EIGENSTATES/K-POINT")
+ # For spin-polarized calculations, there are two spin channels.
+ # They add them by first adding the spin up and then the spin down
+ # I break this down with the folloiwng indexing
+ spin_reuslts=[kpoint_tags[i*nk : (i+1)*nk ] for i in range(nspins)]
+ for ispin,spin_result in enumerate(spin_reuslts):
+ for ik,kpoint_tag in enumerate(spin_result):
+ kpoint=kpoint_tag.text.split()
+ kpoints[ik,:]=kpoint
+ return kpoints
+
+ def _parse_projections_tag(self,atm_proj_root, nk, nbnd, natm, norb, nspin_channels, nspin_projections):
+
+ projs=np.zeros(shape=(nk,nbnd,nspin_projections,natm,norb))
+ projs_phase=np.zeros(shape=(nk,nbnd,nspin_projections,natm,norb), dtype=np.complex_)
+ proj_tags=atm_proj_root.findall(".//EIGENSTATES/PROJS")
+ # For spin-polarized calculations, there are two spin channels.
+ # They add them by first adding the spin up and then the spin down
+ # I break this down with the folloiwng indexing
+ spin_reuslts=[proj_tags[i*nk : (i+1)*nk ] for i in range(nspin_channels)]
+ for ispin,spin_result in enumerate(spin_reuslts):
+ for ik,proj_tag in enumerate(spin_result):
+ atm_wfs_tags=proj_tag.findall('ATOMIC_WFC')
+ for atm_wfs_tag in atm_wfs_tags:
+ iwfc = int(atm_wfs_tag.get('index'))
+ iorb = self.wfc_mapping[f"wfc_{iwfc}"]["orbital"]
+ iatm = self.wfc_mapping[f"wfc_{iwfc}"]["atom"] - 1
+ band_projections=atm_wfs_tag.text.strip().split('\n')
+ for iband, band_projection in enumerate(band_projections):
+ real = float(band_projection.split()[0])
+ imag = float(band_projection.split()[1])
+ comp = complex(real , imag)
+ comp_squared = np.absolute(comp)**2
+
+ projs_phase[ik,iband,ispin,iatm,iorb] = complex(real , imag)
+ projs[ik,iband,ispin,iatm,iorb] = comp_squared
+
+ atm_sigma_wfs_tags=proj_tag.findall('ATOMIC_SIGMA_PHI')
+ if atm_sigma_wfs_tags:
+ spin_x_projections = [atm_sigma_wfs_tag for atm_sigma_wfs_tag in atm_sigma_wfs_tags if atm_sigma_wfs_tag.get('ipol') == '1']
+ spin_y_projections = [atm_sigma_wfs_tag for atm_sigma_wfs_tag in atm_sigma_wfs_tags if atm_sigma_wfs_tag.get('ipol') == '2']
+ spin_z_projections = [atm_sigma_wfs_tag for atm_sigma_wfs_tag in atm_sigma_wfs_tags if atm_sigma_wfs_tag.get('ipol') == '3']
+ spin_projections=[spin_x_projections,spin_y_projections,spin_z_projections]
+ for i_spin_component,spin_projection_tags in enumerate(spin_projections):
+ for spin_projection_tag in spin_projection_tags:
+ iwfc = int(spin_projection_tag.get('index'))
+ iorb = self.wfc_mapping[f"wfc_{iwfc}"]["orbital"]
+ iatm = self.wfc_mapping[f"wfc_{iwfc}"]["atom"] - 1
+ band_projections=spin_projection_tag.text.strip().split('\n')
+ for iband, band_projection in enumerate(band_projections):
+ real = float(band_projection.split()[0])
+ imag = float(band_projection.split()[1])
+ comp = complex(real , imag)
+ comp_squared = np.absolute(comp)**2
+
+ # Move spin index by 1 to match the order in the spd array
+ # First index should be total,
+ # second, third, and fourth should be x,y,z, respoectively
+ projs_phase[ik,iband,i_spin_component+1,iatm,iorb] = complex(real , imag)
+ projs[ik,iband,i_spin_component+1,iatm,iorb] = real
+
+ return projs, projs_phase
+
def _parse_structure(self,main_xml_root):
"""A helper method to parse the structure tag of the main xml file
diff --git a/docs/_modules/pyprocar/io/siesta.html b/docs/_modules/pyprocar/io/siesta.html
index 2ec6be79..cbb6545c 100644
--- a/docs/_modules/pyprocar/io/siesta.html
+++ b/docs/_modules/pyprocar/io/siesta.html
@@ -7,7 +7,7 @@
- pyprocar.io.siesta — PyProcar 6.2.0 documentation
+ pyprocar.io.siesta — PyProcar 6.2.1 documentation
@@ -40,7 +40,7 @@
-
+
@@ -122,7 +122,7 @@
- PyProcar 6.2.0 documentation
+ PyProcar 6.2.1 documentation
diff --git a/docs/_modules/pyprocar/io/vasp.html b/docs/_modules/pyprocar/io/vasp.html
index af8c4b78..76cc4b88 100644
--- a/docs/_modules/pyprocar/io/vasp.html
+++ b/docs/_modules/pyprocar/io/vasp.html
@@ -7,7 +7,7 @@
- pyprocar.io.vasp — PyProcar 6.2.0 documentation
+ pyprocar.io.vasp — PyProcar 6.2.1 documentation
@@ -40,7 +40,7 @@
-
+
@@ -122,7 +122,7 @@
- PyProcar 6.2.0 documentation
+ PyProcar 6.2.1 documentation
diff --git a/docs/_modules/pyprocar/plotter/dos_plot.html b/docs/_modules/pyprocar/plotter/dos_plot.html
index e3f3f4bf..60e9e064 100644
--- a/docs/_modules/pyprocar/plotter/dos_plot.html
+++ b/docs/_modules/pyprocar/plotter/dos_plot.html
@@ -7,7 +7,7 @@
- pyprocar.plotter.dos_plot — PyProcar 6.2.0 documentation
+ pyprocar.plotter.dos_plot — PyProcar 6.2.1 documentation
@@ -40,7 +40,7 @@
-
+
@@ -122,7 +122,7 @@
- PyProcar 6.2.0 documentation
+ PyProcar 6.2.1 documentation
@@ -456,9 +456,11 @@ Source code for pyprocar.plotter.dos_plot
import os
import yaml
+import json
from typing import List
import numpy as np
+import pandas as pd
import matplotlib as mpl
import matplotlib.pylab as plt
from matplotlib.collections import LineCollection
@@ -506,6 +508,7 @@ Source code for pyprocar.plotter.dos_plot
self.handles = []
self.labels = []
self.orientation = orientation
+ self.values_dict={}
if ax is None:
@@ -527,14 +530,19 @@ Source code for pyprocar.plotter.dos_plot
energies = self.dos.energies
dos_total = self.dos.total
+
+
self._set_plot_limits(spin_channels)
for ispin, spin_channel in enumerate(spin_channels):
# flip the sign of the total dos if there are 2 spin channels
dos_total_spin = dos_total[spin_channel, :] * (-1 if ispin > 0 else 1)
- values_dict['dos_total_spin-'+str(spin_channel)]=dos_total_spin
-
self._plot_total_dos(energies, dos_total_spin, spin_channel)
+ values_dict['energies']=energies
+ values_dict['dosTotalSpin-'+str(spin_channel)]=dos_total_spin
+
+
+ self.values_dict=values_dict
return values_dict
[docs] def plot_parametric(self,
@@ -549,7 +557,11 @@ Source code for pyprocar.plotter.dos_plot
spin_projections,
principal_q_numbers)
-
+ orbital_string=':'.join([str(orbital) for orbital in orbitals])
+ atom_string=':'.join([str(atom) for atom in atoms])
+ spin_string=':'.join([str(spin_projection) for spin_projection in spin_projections])
+
+
self._setup_colorbar(dos_projected, dos_total_projected)
self._set_plot_limits(spin_channels)
@@ -565,10 +577,15 @@ Source code for pyprocar.plotter.dos_plot
if self.config.plot_total:
self._plot_total_dos(energies, dos_spin_total, spin_channel)
- values_dict['spin-'+str(spin_channel)+'_projections']=normalized_dos_spin_projected
values_dict['energies']=energies
- values_dict['dos_total_spin-'+str(spin_channel)]=dos_spin_total
+ values_dict['dosTotalSpin-'+str(spin_channel)]=dos_spin_total
+ values_dict['spinChannel-'+str(spin_channel) +
+ f'_orbitals-{orbital_string}' +
+ f'_atoms-{atom_string}' +
+ f'_spinProjection-{spin_string}'] =normalized_dos_spin_projected
+
+ self.values_dict=values_dict
return values_dict
[docs] def plot_parametric_line(self,
@@ -583,6 +600,10 @@ Source code for pyprocar.plotter.dos_plot
spin_projections,
principal_q_numbers)
+ orbital_string=':'.join([str(orbital) for orbital in orbitals])
+ atom_string=':'.join([str(atom) for atom in atoms])
+ spin_string=':'.join([str(spin_projection) for spin_projection in spin_projections])
+
self._setup_colorbar(dos_projected, dos_total_projected)
self._set_plot_limits(spin_channels)
@@ -596,10 +617,14 @@ Source code for pyprocar.plotter.dos_plot
self._plot_spin_data_parametric_line(energies, dos_spin_total, normalized_dos_spin_projected, spin_channel)
- values_dict['spin-'+str(spin_channel)+'_projections']=normalized_dos_spin_projected
values_dict['energies']=energies
- values_dict['dos_total_spin-'+str(spin_channel)]=dos_spin_total
+ values_dict['dosTotalSpin-'+str(spin_channel)]=dos_spin_total
+ values_dict['spinChannel-'+str(spin_channel) +
+ f'_orbitals-{orbital_string}' +
+ f'_atoms-{atom_string}' +
+ f'_spinProjection-{spin_string}']=normalized_dos_spin_projected
+ self.values_dict=values_dict
return values_dict
[docs] def plot_stack_species(
@@ -619,6 +644,12 @@ Source code for pyprocar.plotter.dos_plot
for specie in range(len(self.structure.species)):
idx = (np.array(self.structure.atoms) == self.structure.species[specie])
atoms = list(np.where(idx)[0])
+
+ orbital_string=':'.join([str(orbital) for orbital in orbitals])
+ atom_string=':'.join([str(atom) for atom in atoms])
+ spin_string=':'.join([str(spin_projection) for spin_projection in spin_projections])
+
+
dos_total, dos_total_projected, dos_projected = self._calculate_parametric_dos(
atoms,
orbitals,
@@ -626,6 +657,9 @@ Source code for pyprocar.plotter.dos_plot
principal_q_numbers)
color=self.config.colors[specie]
+
+
+
for ispin, spin_channel in enumerate(spin_channels):
energies, dos_spin_total, scaled_dos_spin_projected = self._prepare_parametric_spin_data(spin_channel,
ispin,
@@ -649,8 +683,15 @@ Source code for pyprocar.plotter.dos_plot
bottom_value+=top_value
label=self.structure.species[specie] + orbital_label
- values_dict[label+'_spin-'+str(spin_channel)+'_projections']=scaled_dos_spin_projected
+
values_dict['energies']=energies
+ values_dict['dosTotalSpin-'+str(spin_channel)]=dos_spin_total
+ values_dict['spinChannel-'+str(spin_channel) +
+ f'_orbitals-{orbital_string}' +
+ f'_atoms-{atom_string}' +
+ f'_spinProjection-{spin_string}']=scaled_dos_spin_projected
+
+
self.handles.append(handle)
@@ -658,7 +699,8 @@ Source code for pyprocar.plotter.dos_plot
if self.config.plot_total:
total_values_dict=self.plot_dos(spin_channels)
- values_dict.update(total_values_dict)
+
+ self.values_dict=values_dict
return values_dict
[docs] def plot_stack_orbitals(
@@ -677,6 +719,10 @@ Source code for pyprocar.plotter.dos_plot
bottom_value=0
for iorb in range(len(orb_l)):
+ orbital_string=':'.join([str(orbital) for orbital in orb_l[iorb]])
+ atom_string=':'.join([str(atom) for atom in atoms])
+ spin_string=':'.join([str(spin_projection) for spin_projection in spin_projections])
+
dos_total, dos_total_projected, dos_projected = self._calculate_parametric_dos(
atoms=atoms,
orbitals=orb_l[iorb],
@@ -707,15 +753,21 @@ Source code for pyprocar.plotter.dos_plot
bottom_value+=top_value
label=atom_names + orb_names[iorb]# + self.config.spin_labels[ispin]
- values_dict[label+'_spin-'+str(spin_channel)+'_projections']=scaled_dos_spin_projected
+
values_dict['energies']=energies
+ values_dict['dosTotalSpin-'+str(spin_channel)]=dos_spin_total
+ values_dict['spinChannel-'+str(spin_channel) +
+ f'_orbitals-{orbital_string}' +
+ f'_atoms-{atom_string}' +
+ f'_spinProjection-{spin_string}']=scaled_dos_spin_projected
self.handles.append(handle)
self.labels.append(label)
if self.config.plot_total:
total_values_dict=self.plot_dos(spin_channels)
- values_dict.update(total_values_dict)
+
+ self.values_dict=values_dict
return values_dict
[docs] def plot_stack(
@@ -748,6 +800,10 @@ Source code for pyprocar.plotter.dos_plot
orbitals = items[specie]
orbital_label=self._get_stack_labels(orbitals)
+ orbital_string=':'.join([str(orbital) for orbital in orbitals])
+ atom_string=':'.join([str(atom) for atom in atoms])
+ spin_string=':'.join([str(spin_projection) for spin_projection in spin_projections])
+
dos_total, dos_total_projected, dos_projected = self._calculate_parametric_dos(
atoms=atoms,
orbitals=orbitals,
@@ -778,9 +834,13 @@ Source code for pyprocar.plotter.dos_plot
bottom_value+=top_value
label=specie + orbital_label
-
- values_dict[label+'_spin-'+str(spin_channel)+'_projections']=scaled_dos_spin_projected
values_dict['energies']=energies
+ values_dict['dosTotalSpin-'+str(spin_channel)]=dos_spin_total
+ values_dict['spinChannel-'+str(spin_channel) +
+ f'_orbitals-{orbital_string}' +
+ f'_atoms-{atom_string}' +
+ f'_spinProjection-{spin_string}']=scaled_dos_spin_projected
+
self.handles.append(handle)
@@ -788,7 +848,8 @@ Source code for pyprocar.plotter.dos_plot
if self.config.plot_total:
total_values_dict=self.plot_dos(spin_channels)
- values_dict.update(total_values_dict)
+
+ self.values_dict=values_dict
return values_dict
@@ -1365,9 +1426,68 @@ Source code for pyprocar.plotter.dos_plot
[docs] def update_config(self, config_dict):
for key,value in config_dict.items():
- self.config[key]['value']=value
+ self.config[key]['value']=value
+[docs] def export_data(self,filename):
+ """
+ This method will export the data to a csv file
+
+ Parameters
+ ----------
+ filename : str
+ The file name to export the data to
+
+ Returns
+ -------
+ None
+ None
+ """
+ possible_file_types=['csv','txt','json','dat']
+ file_type=filename.split('.')[-1]
+ if file_type not in possible_file_types:
+ raise ValueError(f"The file type must be {possible_file_types}")
+ if self.values_dict is None:
+ raise ValueError("The data has not been plotted yet")
+
+ column_names=list(self.values_dict.keys())
+ sorted_column_names=[None]*len(column_names)
+ index=0
+ for column_name in column_names:
+ if 'energies' in column_name.split('_')[0]:
+ sorted_column_names[index]=column_name
+ index+=1
+
+ for column_name in column_names:
+ if 'dosTotalSpin' in column_name.split('_')[0]:
+ sorted_column_names[index]=column_name
+ index+=1
+ for ispin in range(2):
+ for column_name in column_names:
+
+ if 'spinChannel-0' in column_name.split('_')[0] and ispin==0:
+ sorted_column_names[index]=column_name
+ index+=1
+ if 'spinChannel-1' in column_name.split('_')[0] and ispin==1:
+ sorted_column_names[index]=column_name
+ index+=1
+
+
+ column_names.sort()
+ if file_type=='csv':
+ df=pd.DataFrame(self.values_dict)
+ df.to_csv(filename, columns=sorted_column_names, index=False)
+ elif file_type=='txt':
+ df=pd.DataFrame(self.values_dict)
+ df.to_csv(filename, columns=sorted_column_names, sep='\t', index=False)
+ elif file_type=='json':
+ with open(filename, 'w') as outfile:
+ for key,value in self.values_dict.items():
+ self.values_dict[key]=value.tolist()
+ json.dump(self.values_dict, outfile)
+ elif file_type=='dat':
+ df=pd.DataFrame(self.values_dict)
+ df.to_csv(filename, columns=sorted_column_names, sep=' ', index=False)
diff --git a/docs/_modules/pyprocar/plotter/ebs_plot.html b/docs/_modules/pyprocar/plotter/ebs_plot.html
index 89fb72aa..682a8761 100644
--- a/docs/_modules/pyprocar/plotter/ebs_plot.html
+++ b/docs/_modules/pyprocar/plotter/ebs_plot.html
@@ -7,7 +7,7 @@
- pyprocar.plotter.ebs_plot — PyProcar 6.2.0 documentation
+ pyprocar.plotter.ebs_plot — PyProcar 6.2.1 documentation
@@ -40,7 +40,7 @@
-
+
@@ -122,7 +122,7 @@
- PyProcar 6.2.0 documentation
+ PyProcar 6.2.1 documentation
diff --git a/docs/_modules/pyprocar/plotter/procarplot.html b/docs/_modules/pyprocar/plotter/procarplot.html
index 617c4973..6ff44e32 100644
--- a/docs/_modules/pyprocar/plotter/procarplot.html
+++ b/docs/_modules/pyprocar/plotter/procarplot.html
@@ -7,7 +7,7 @@
- pyprocar.plotter.procarplot — PyProcar 6.2.0 documentation
+ pyprocar.plotter.procarplot — PyProcar 6.2.1 documentation
@@ -40,7 +40,7 @@
-
+
@@ -122,7 +122,7 @@
- PyProcar 6.2.0 documentation
+ PyProcar 6.2.1 documentation
diff --git a/docs/_modules/pyprocar/pyposcar/poscar.html b/docs/_modules/pyprocar/pyposcar/poscar.html
index 50ffb947..d0b54344 100644
--- a/docs/_modules/pyprocar/pyposcar/poscar.html
+++ b/docs/_modules/pyprocar/pyposcar/poscar.html
@@ -7,7 +7,7 @@
- pyprocar.pyposcar.poscar — PyProcar 6.2.0 documentation
+ pyprocar.pyposcar.poscar — PyProcar 6.2.1 documentation
@@ -40,7 +40,7 @@
-
+
@@ -122,7 +122,7 @@
- PyProcar 6.2.0 documentation
+ PyProcar 6.2.1 documentation
diff --git a/docs/_modules/pyprocar/pyposcar/poscarUtils.html b/docs/_modules/pyprocar/pyposcar/poscarUtils.html
index 8e9bb0f2..9ec9d116 100644
--- a/docs/_modules/pyprocar/pyposcar/poscarUtils.html
+++ b/docs/_modules/pyprocar/pyposcar/poscarUtils.html
@@ -7,7 +7,7 @@
- pyprocar.pyposcar.poscarUtils — PyProcar 6.2.0 documentation
+ pyprocar.pyposcar.poscarUtils — PyProcar 6.2.1 documentation
@@ -40,7 +40,7 @@
-
+
@@ -122,7 +122,7 @@
- PyProcar 6.2.0 documentation
+ PyProcar 6.2.1 documentation
diff --git a/docs/_modules/pyprocar/scripts/scriptBandGap.html b/docs/_modules/pyprocar/scripts/scriptBandGap.html
index e9265831..08c67eca 100644
--- a/docs/_modules/pyprocar/scripts/scriptBandGap.html
+++ b/docs/_modules/pyprocar/scripts/scriptBandGap.html
@@ -7,7 +7,7 @@
- pyprocar.scripts.scriptBandGap — PyProcar 6.2.0 documentation
+ pyprocar.scripts.scriptBandGap — PyProcar 6.2.1 documentation
@@ -40,7 +40,7 @@
-
+
@@ -122,7 +122,7 @@
- PyProcar 6.2.0 documentation
+ PyProcar 6.2.1 documentation
diff --git a/docs/_modules/pyprocar/scripts/scriptBandsDosplot.html b/docs/_modules/pyprocar/scripts/scriptBandsDosplot.html
index 9975968c..7f457940 100644
--- a/docs/_modules/pyprocar/scripts/scriptBandsDosplot.html
+++ b/docs/_modules/pyprocar/scripts/scriptBandsDosplot.html
@@ -7,7 +7,7 @@
- pyprocar.scripts.scriptBandsDosplot — PyProcar 6.2.0 documentation
+ pyprocar.scripts.scriptBandsDosplot — PyProcar 6.2.1 documentation
@@ -40,7 +40,7 @@
-
+
@@ -122,7 +122,7 @@
- PyProcar 6.2.0 documentation
+ PyProcar 6.2.1 documentation
diff --git a/docs/_modules/pyprocar/scripts/scriptBandsplot.html b/docs/_modules/pyprocar/scripts/scriptBandsplot.html
index b3ea0e7a..7f4811c1 100644
--- a/docs/_modules/pyprocar/scripts/scriptBandsplot.html
+++ b/docs/_modules/pyprocar/scripts/scriptBandsplot.html
@@ -7,7 +7,7 @@
- pyprocar.scripts.scriptBandsplot — PyProcar 6.2.0 documentation
+ pyprocar.scripts.scriptBandsplot — PyProcar 6.2.1 documentation
@@ -40,7 +40,7 @@
-
+
@@ -122,7 +122,7 @@
- PyProcar 6.2.0 documentation
+ PyProcar 6.2.1 documentation
diff --git a/docs/_modules/pyprocar/scripts/scriptCat.html b/docs/_modules/pyprocar/scripts/scriptCat.html
index 6488dbbc..ab8c1a77 100644
--- a/docs/_modules/pyprocar/scripts/scriptCat.html
+++ b/docs/_modules/pyprocar/scripts/scriptCat.html
@@ -7,7 +7,7 @@
- pyprocar.scripts.scriptCat — PyProcar 6.2.0 documentation
+ pyprocar.scripts.scriptCat — PyProcar 6.2.1 documentation
@@ -40,7 +40,7 @@
-
+
@@ -122,7 +122,7 @@
- PyProcar 6.2.0 documentation
+ PyProcar 6.2.1 documentation
diff --git a/docs/_modules/pyprocar/scripts/scriptDosplot.html b/docs/_modules/pyprocar/scripts/scriptDosplot.html
index 19af6dcd..9443399b 100644
--- a/docs/_modules/pyprocar/scripts/scriptDosplot.html
+++ b/docs/_modules/pyprocar/scripts/scriptDosplot.html
@@ -7,7 +7,7 @@
- pyprocar.scripts.scriptDosplot — PyProcar 6.2.0 documentation
+ pyprocar.scripts.scriptDosplot — PyProcar 6.2.1 documentation
@@ -40,7 +40,7 @@
-
+
@@ -122,7 +122,7 @@
- PyProcar 6.2.0 documentation
+ PyProcar 6.2.1 documentation
@@ -489,6 +489,8 @@ Source code for pyprocar.scripts.scriptDosplot
ax:plt.Axes=None,
show:bool=True,
print_plot_opts:bool=False,
+ export_data_file:str=None,
+ export_append_mode:bool=True,
**kwargs
):
@@ -681,6 +683,14 @@
Source code for pyprocar.scripts.scriptDosplot
e.g. ``plt_show=True``
+ export_data_file : str, optional
+ The file name to export the data to. If not provided the
+ data will not be exported.
+
+ export_append_mode : bool, optional
+ Boolean to append the mode to the file name. If not provided the
+ data will be overwritten.
+
print_plot_opts: bool, optional
Boolean to print the plotting options
@@ -774,7 +784,7 @@
Source code for pyprocar.scripts.scriptDosplot
if orbitals is None:
orbitals = list(np.arange(len(edos_plot.dos.projected[0][0]), dtype=int))
- values_dict = edos_plot.plot_parametric_line(
+ edos_plot.plot_parametric_line(
atoms=atoms,
principal_q_numbers=[-1],
spins=spins,
@@ -782,35 +792,35 @@
Source code for pyprocar.scripts.scriptDosplot
)
elif mode == "stack_species":
- values_dict = edos_plot.plot_stack_species(
+ edos_plot.plot_stack_species(
spins=spins,
orbitals=orbitals,
)
elif mode == "stack_orbitals":
- values_dict = edos_plot.plot_stack_orbitals(
+ edos_plot.plot_stack_orbitals(
spins=spins,
atoms=atoms,
)
elif mode == "stack":
- values_dict = edos_plot.plot_stack(
+ edos_plot.plot_stack(
spins=spins,
items=items,
)
elif mode == "overlay_species":
- values_dict = edos_plot.plot_stack_species(
+ edos_plot.plot_stack_species(
spins=spins,
orbitals=orbitals,
overlay_mode=True
)
elif mode == "overlay_orbitals":
- values_dict = edos_plot.plot_stack_orbitals(
+ edos_plot.plot_stack_orbitals(
spins=spins,
atoms=atoms,
overlay_mode=True
)
elif mode == "overlay":
- values_dict = edos_plot.plot_stack(
+ edos_plot.plot_stack(
spins=spins,
items=items,
overlay_mode=True
@@ -850,6 +860,16 @@
Source code for pyprocar.scripts.scriptDosplot
edos_plot.save(savefig)
if show:
edos_plot.show()
+
+ if export_data_file is not None:
+ if export_append_mode:
+ file_basename,file_type=export_data_file.split('.')
+ filename=f"{file_basename}_{mode}.{file_type}"
+ else:
+ filename=export_data_file
+ edos_plot.export_data(filename)
+
+
return edos_plot.fig, edos_plot.ax
diff --git a/docs/_modules/pyprocar/scripts/scriptFermi2D.html b/docs/_modules/pyprocar/scripts/scriptFermi2D.html
index 02f21474..b20802d9 100644
--- a/docs/_modules/pyprocar/scripts/scriptFermi2D.html
+++ b/docs/_modules/pyprocar/scripts/scriptFermi2D.html
@@ -7,7 +7,7 @@
- pyprocar.scripts.scriptFermi2D — PyProcar 6.2.0 documentation
+ pyprocar.scripts.scriptFermi2D — PyProcar 6.2.1 documentation
@@ -40,7 +40,7 @@
-
+
@@ -122,7 +122,7 @@
- PyProcar 6.2.0 documentation
+ PyProcar 6.2.1 documentation
diff --git a/docs/_modules/pyprocar/scripts/scriptFermiHandler.html b/docs/_modules/pyprocar/scripts/scriptFermiHandler.html
index af0b40af..a5bb1253 100644
--- a/docs/_modules/pyprocar/scripts/scriptFermiHandler.html
+++ b/docs/_modules/pyprocar/scripts/scriptFermiHandler.html
@@ -7,7 +7,7 @@
- pyprocar.scripts.scriptFermiHandler — PyProcar 6.2.0 documentation
+ pyprocar.scripts.scriptFermiHandler — PyProcar 6.2.1 documentation
@@ -40,7 +40,7 @@
-
+
@@ -122,7 +122,7 @@
- PyProcar 6.2.0 documentation
+ PyProcar 6.2.1 documentation
diff --git a/docs/_modules/pyprocar/scripts/scriptFilter.html b/docs/_modules/pyprocar/scripts/scriptFilter.html
index 01ea28dc..8743561b 100644
--- a/docs/_modules/pyprocar/scripts/scriptFilter.html
+++ b/docs/_modules/pyprocar/scripts/scriptFilter.html
@@ -7,7 +7,7 @@
- pyprocar.scripts.scriptFilter — PyProcar 6.2.0 documentation
+ pyprocar.scripts.scriptFilter — PyProcar 6.2.1 documentation
@@ -40,7 +40,7 @@
-
+
@@ -122,7 +122,7 @@
- PyProcar 6.2.0 documentation
+ PyProcar 6.2.1 documentation
diff --git a/docs/_modules/pyprocar/scripts/scriptKmesh2D.html b/docs/_modules/pyprocar/scripts/scriptKmesh2D.html
index bb9f7965..50c592e1 100644
--- a/docs/_modules/pyprocar/scripts/scriptKmesh2D.html
+++ b/docs/_modules/pyprocar/scripts/scriptKmesh2D.html
@@ -7,7 +7,7 @@
- pyprocar.scripts.scriptKmesh2D — PyProcar 6.2.0 documentation
+ pyprocar.scripts.scriptKmesh2D — PyProcar 6.2.1 documentation
@@ -40,7 +40,7 @@
-
+
@@ -122,7 +122,7 @@
- PyProcar 6.2.0 documentation
+ PyProcar 6.2.1 documentation
diff --git a/docs/_modules/pyprocar/scripts/scriptKpath.html b/docs/_modules/pyprocar/scripts/scriptKpath.html
index 26256f21..8cf0c3dd 100644
--- a/docs/_modules/pyprocar/scripts/scriptKpath.html
+++ b/docs/_modules/pyprocar/scripts/scriptKpath.html
@@ -7,7 +7,7 @@
- pyprocar.scripts.scriptKpath — PyProcar 6.2.0 documentation
+ pyprocar.scripts.scriptKpath — PyProcar 6.2.1 documentation
@@ -40,7 +40,7 @@
-
+
@@ -122,7 +122,7 @@
- PyProcar 6.2.0 documentation
+ PyProcar 6.2.1 documentation
diff --git a/docs/_modules/pyprocar/scripts/scriptRepair.html b/docs/_modules/pyprocar/scripts/scriptRepair.html
index bae87a6e..81a7ba54 100644
--- a/docs/_modules/pyprocar/scripts/scriptRepair.html
+++ b/docs/_modules/pyprocar/scripts/scriptRepair.html
@@ -7,7 +7,7 @@
- pyprocar.scripts.scriptRepair — PyProcar 6.2.0 documentation
+ pyprocar.scripts.scriptRepair — PyProcar 6.2.1 documentation
@@ -40,7 +40,7 @@
-
+
@@ -122,7 +122,7 @@
- PyProcar 6.2.0 documentation
+ PyProcar 6.2.1 documentation
diff --git a/docs/_modules/pyprocar/scripts/scriptUnfold.html b/docs/_modules/pyprocar/scripts/scriptUnfold.html
index 34c259fb..570612bc 100644
--- a/docs/_modules/pyprocar/scripts/scriptUnfold.html
+++ b/docs/_modules/pyprocar/scripts/scriptUnfold.html
@@ -7,7 +7,7 @@
- pyprocar.scripts.scriptUnfold — PyProcar 6.2.0 documentation
+ pyprocar.scripts.scriptUnfold — PyProcar 6.2.1 documentation
@@ -40,7 +40,7 @@
-
+
@@ -122,7 +122,7 @@
- PyProcar 6.2.0 documentation
+ PyProcar 6.2.1 documentation
diff --git a/docs/_sources/api/io/_autosummary/pyprocar.io.qe.QEParser.rst.txt b/docs/_sources/api/io/_autosummary/pyprocar.io.qe.QEParser.rst.txt
index ad40b1b3..efe9a760 100644
--- a/docs/_sources/api/io/_autosummary/pyprocar.io.qe.QEParser.rst.txt
+++ b/docs/_sources/api/io/_autosummary/pyprocar.io.qe.QEParser.rst.txt
@@ -20,11 +20,6 @@
- QEParser.getKpointLabels
-
-
-
-
QEParser.kpoints_cart
diff --git a/docs/_sources/api/plotter/_autosummary/pyprocar.plotter.DOSPlot.export_data.rst.txt b/docs/_sources/api/plotter/_autosummary/pyprocar.plotter.DOSPlot.export_data.rst.txt
new file mode 100644
index 00000000..71d55322
--- /dev/null
+++ b/docs/_sources/api/plotter/_autosummary/pyprocar.plotter.DOSPlot.export_data.rst.txt
@@ -0,0 +1,6 @@
+export\_data
+============
+
+.. currentmodule:: pyprocar.plotter
+
+.. automethod:: DOSPlot.export_data
\ No newline at end of file
diff --git a/docs/_sources/api/plotter/_autosummary/pyprocar.plotter.DOSPlot.rst.txt b/docs/_sources/api/plotter/_autosummary/pyprocar.plotter.DOSPlot.rst.txt
index 39fc068a..8c1e36ee 100644
--- a/docs/_sources/api/plotter/_autosummary/pyprocar.plotter.DOSPlot.rst.txt
+++ b/docs/_sources/api/plotter/_autosummary/pyprocar.plotter.DOSPlot.rst.txt
@@ -25,6 +25,11 @@
+ DOSPlot.export_data
+
+
+
+
DOSPlot.grid
diff --git a/docs/_sources/examples/05-other/plot_ebs.rst.txt b/docs/_sources/examples/05-other/plot_ebs.rst.txt
index 291da71a..11d03ee8 100644
--- a/docs/_sources/examples/05-other/plot_ebs.rst.txt
+++ b/docs/_sources/examples/05-other/plot_ebs.rst.txt
@@ -307,7 +307,7 @@ Effective mass
.. rst-class:: sphx-glr-timing
- **Total running time of the script:** (0 minutes 1.308 seconds)
+ **Total running time of the script:** (0 minutes 3.409 seconds)
.. _sphx_glr_download_examples_05-other_plot_ebs.py:
diff --git a/docs/_sources/examples/05-other/sg_execution_times.rst.txt b/docs/_sources/examples/05-other/sg_execution_times.rst.txt
index 9c339283..c0ffc9ad 100644
--- a/docs/_sources/examples/05-other/sg_execution_times.rst.txt
+++ b/docs/_sources/examples/05-other/sg_execution_times.rst.txt
@@ -6,7 +6,7 @@
Computation times
=================
-**00:02.354** total execution time for 4 files **from examples\05-other**:
+**00:03.409** total execution time for 4 files **from examples\05-other**:
.. container::
@@ -33,14 +33,14 @@ Computation times
- Time
- Mem (MB)
* - :ref:`sphx_glr_examples_05-other_plot_ebs.py` (``plot_ebs.py``)
- - 00:01.308
- - 0.0
- * - :ref:`sphx_glr_examples_05-other_plot_kpath_generation.py` (``plot_kpath_generation.py``)
- - 00:00.480
+ - 00:03.409
- 0.0
* - :ref:`sphx_glr_examples_05-other_plot_2dkmesh_generation.py` (``plot_2dkmesh_generation.py``)
- - 00:00.441
+ - 00:00.000
- 0.0
* - :ref:`sphx_glr_examples_05-other_plot_bandgap.py` (``plot_bandgap.py``)
- - 00:00.125
+ - 00:00.000
+ - 0.0
+ * - :ref:`sphx_glr_examples_05-other_plot_kpath_generation.py` (``plot_kpath_generation.py``)
+ - 00:00.000
- 0.0
diff --git a/docs/_sources/sg_execution_times.rst.txt b/docs/_sources/sg_execution_times.rst.txt
index 16dce244..5881fc17 100644
--- a/docs/_sources/sg_execution_times.rst.txt
+++ b/docs/_sources/sg_execution_times.rst.txt
@@ -6,7 +6,7 @@
Computation times
=================
-**07:46.454** total execution time for 39 files **from all galleries**:
+**00:03.409** total execution time for 39 files **from all galleries**:
.. container::
@@ -32,120 +32,120 @@ Computation times
* - Example
- Time
- Mem (MB)
+ * - :ref:`sphx_glr_examples_05-other_plot_ebs.py` (``..\..\examples\05-other\plot_ebs.py``)
+ - 00:03.409
+ - 0.0
* - :ref:`sphx_glr_examples_00-band_structure_plot_2d_bands.py` (``..\..\examples\00-band_structure\plot_2d_bands.py``)
- - 02:13.131
+ - 00:00.000
- 0.0
- * - :ref:`sphx_glr_examples_03-fermi2d_plot_rashba_spin_spliting.py` (``..\..\examples\03-fermi2d\plot_rashba_spin_spliting.py``)
- - 00:38.136
+ * - :ref:`sphx_glr_examples_00-band_structure_plot_atomic_levels.py` (``..\..\examples\00-band_structure\plot_atomic_levels.py``)
+ - 00:00.000
- 0.0
- * - :ref:`sphx_glr_examples_04-fermi3d_plot_fermi3d_isovalue_gif.py` (``..\..\examples\04-fermi3d\plot_fermi3d_isovalue_gif.py``)
- - 00:32.865
+ * - :ref:`sphx_glr_examples_00-band_structure_plot_autobands.py` (``..\..\examples\00-band_structure\plot_autobands.py``)
+ - 00:00.000
- 0.0
- * - :ref:`sphx_glr_examples_04-fermi3d_plot_fermi3d_isoslider.py` (``..\..\examples\04-fermi3d\plot_fermi3d_isoslider.py``)
- - 00:32.153
+ * - :ref:`sphx_glr_examples_00-band_structure_plot_bandsplot_configurations.py` (``..\..\examples\00-band_structure\plot_bandsplot_configurations.py``)
+ - 00:00.000
- 0.0
- * - :ref:`sphx_glr_examples_00-band_structure_plot_autobands.py` (``..\..\examples\00-band_structure\plot_autobands.py``)
- - 00:25.318
+ * - :ref:`sphx_glr_examples_00-band_structure_plot_colinear.py` (``..\..\examples\00-band_structure\plot_colinear.py``)
+ - 00:00.000
- 0.0
- * - :ref:`sphx_glr_examples_06-PyPoscar_plot_utils_pyposcar.py` (``..\..\examples\06-PyPoscar\plot_utils_pyposcar.py``)
- - 00:23.325
+ * - :ref:`sphx_glr_examples_00-band_structure_plot_compare_bands.py` (``..\..\examples\00-band_structure\plot_compare_bands.py``)
+ - 00:00.000
- 0.0
* - :ref:`sphx_glr_examples_00-band_structure_plot_ipr.py` (``..\..\examples\00-band_structure\plot_ipr.py``)
- - 00:22.809
+ - 00:00.000
- 0.0
- * - :ref:`sphx_glr_examples_00-band_structure_plot_unfolding.py` (``..\..\examples\00-band_structure\plot_unfolding.py``)
- - 00:21.062
+ * - :ref:`sphx_glr_examples_00-band_structure_plot_noncolinear_qe.py` (``..\..\examples\00-band_structure\plot_noncolinear_qe.py``)
+ - 00:00.000
- 0.0
- * - :ref:`sphx_glr_examples_01-dos_plot_noncolinear_dos_qe.py` (``..\..\examples\01-dos\plot_noncolinear_dos_qe.py``)
- - 00:18.812
+ * - :ref:`sphx_glr_examples_00-band_structure_plot_noncolinear_vasp.py` (``..\..\examples\00-band_structure\plot_noncolinear_vasp.py``)
+ - 00:00.000
- 0.0
- * - :ref:`sphx_glr_examples_03-fermi2d_plot_fermi2d_configurations.py` (``..\..\examples\03-fermi2d\plot_fermi2d_configurations.py``)
- - 00:12.888
+ * - :ref:`sphx_glr_examples_00-band_structure_plot_spin_polarized.py` (``..\..\examples\00-band_structure\plot_spin_polarized.py``)
+ - 00:00.000
- 0.0
- * - :ref:`sphx_glr_examples_03-fermi2d_plot_fermi2d_spin_texture.py` (``..\..\examples\03-fermi2d\plot_fermi2d_spin_texture.py``)
- - 00:12.859
+ * - :ref:`sphx_glr_examples_00-band_structure_plot_unfolding.py` (``..\..\examples\00-band_structure\plot_unfolding.py``)
+ - 00:00.000
- 0.0
- * - :ref:`sphx_glr_examples_04-fermi3d_plot_fermi3d_cross_section.py` (``..\..\examples\04-fermi3d\plot_fermi3d_cross_section.py``)
- - 00:11.313
+ * - :ref:`sphx_glr_examples_01-dos_plot_colinear_dos.py` (``..\..\examples\01-dos\plot_colinear_dos.py``)
+ - 00:00.000
- 0.0
- * - :ref:`sphx_glr_examples_06-PyPoscar_plot_finding_defects_pyposcar.py` (``..\..\examples\06-PyPoscar\plot_finding_defects_pyposcar.py``)
- - 00:09.326
+ * - :ref:`sphx_glr_examples_01-dos_plot_dosplot_configurations.py` (``..\..\examples\01-dos\plot_dosplot_configurations.py``)
+ - 00:00.000
- 0.0
- * - :ref:`sphx_glr_examples_06-PyPoscar_plot_subsitution_pyposcar.py` (``..\..\examples\06-PyPoscar\plot_subsitution_pyposcar.py``)
- - 00:07.702
+ * - :ref:`sphx_glr_examples_01-dos_plot_noncolinear_dos_qe.py` (``..\..\examples\01-dos\plot_noncolinear_dos_qe.py``)
+ - 00:00.000
- 0.0
- * - :ref:`sphx_glr_examples_06-PyPoscar_plot_clusters_pyposcar.py` (``..\..\examples\06-PyPoscar\plot_clusters_pyposcar.py``)
- - 00:07.684
+ * - :ref:`sphx_glr_examples_01-dos_plot_noncolinear_dos_vasp.py` (``..\..\examples\01-dos\plot_noncolinear_dos_vasp.py``)
+ - 00:00.000
- 0.0
- * - :ref:`sphx_glr_examples_04-fermi3d_plot_fermi3d_spin_texture.py` (``..\..\examples\04-fermi3d\plot_fermi3d_spin_texture.py``)
- - 00:07.507
+ * - :ref:`sphx_glr_examples_01-dos_plot_spin_polarized_dos.py` (``..\..\examples\01-dos\plot_spin_polarized_dos.py``)
+ - 00:00.000
- 0.0
- * - :ref:`sphx_glr_examples_04-fermi3d_plot_fermi3d_spin-polarized.py` (``..\..\examples\04-fermi3d\plot_fermi3d_spin-polarized.py``)
- - 00:05.801
+ * - :ref:`sphx_glr_examples_02-bands_dos_plot_bandsdosplot.py` (``..\..\examples\02-bands_dos\plot_bandsdosplot.py``)
+ - 00:00.000
- 0.0
- * - :ref:`sphx_glr_examples_01-dos_plot_noncolinear_dos_vasp.py` (``..\..\examples\01-dos\plot_noncolinear_dos_vasp.py``)
- - 00:04.541
+ * - :ref:`sphx_glr_examples_02-bands_dos_plot_bandsdosplot_configurations.py` (``..\..\examples\02-bands_dos\plot_bandsdosplot_configurations.py``)
+ - 00:00.000
- 0.0
- * - :ref:`sphx_glr_examples_01-dos_plot_colinear_dos.py` (``..\..\examples\01-dos\plot_colinear_dos.py``)
- - 00:04.252
+ * - :ref:`sphx_glr_examples_03-fermi2d_plot_fermi2d.py` (``..\..\examples\03-fermi2d\plot_fermi2d.py``)
+ - 00:00.000
- 0.0
- * - :ref:`sphx_glr_examples_04-fermi3d_plot_fermi3d_configurations.py` (``..\..\examples\04-fermi3d\plot_fermi3d_configurations.py``)
- - 00:03.328
+ * - :ref:`sphx_glr_examples_03-fermi2d_plot_fermi2d_configurations.py` (``..\..\examples\03-fermi2d\plot_fermi2d_configurations.py``)
+ - 00:00.000
- 0.0
- * - :ref:`sphx_glr_examples_01-dos_plot_spin_polarized_dos.py` (``..\..\examples\01-dos\plot_spin_polarized_dos.py``)
- - 00:03.222
+ * - :ref:`sphx_glr_examples_03-fermi2d_plot_fermi2d_spin_texture.py` (``..\..\examples\03-fermi2d\plot_fermi2d_spin_texture.py``)
+ - 00:00.000
- 0.0
- * - :ref:`sphx_glr_examples_04-fermi3d_plot_fermi3d_plain.py` (``..\..\examples\04-fermi3d\plot_fermi3d_plain.py``)
- - 00:03.149
+ * - :ref:`sphx_glr_examples_03-fermi2d_plot_rashba_spin_spliting.py` (``..\..\examples\03-fermi2d\plot_rashba_spin_spliting.py``)
+ - 00:00.000
- 0.0
* - :ref:`sphx_glr_examples_04-fermi3d_plot_de_hass_van_alphen.py` (``..\..\examples\04-fermi3d\plot_de_hass_van_alphen.py``)
- - 00:03.112
+ - 00:00.000
- 0.0
- * - :ref:`sphx_glr_examples_00-band_structure_plot_colinear.py` (``..\..\examples\00-band_structure\plot_colinear.py``)
- - 00:02.856
- - 0.0
- * - :ref:`sphx_glr_examples_00-band_structure_plot_bandsplot_configurations.py` (``..\..\examples\00-band_structure\plot_bandsplot_configurations.py``)
- - 00:02.441
+ * - :ref:`sphx_glr_examples_04-fermi3d_plot_fermi3d_configurations.py` (``..\..\examples\04-fermi3d\plot_fermi3d_configurations.py``)
+ - 00:00.000
- 0.0
- * - :ref:`sphx_glr_examples_00-band_structure_plot_spin_polarized.py` (``..\..\examples\00-band_structure\plot_spin_polarized.py``)
- - 00:02.336
+ * - :ref:`sphx_glr_examples_04-fermi3d_plot_fermi3d_cross_section.py` (``..\..\examples\04-fermi3d\plot_fermi3d_cross_section.py``)
+ - 00:00.000
- 0.0
- * - :ref:`sphx_glr_examples_02-bands_dos_plot_bandsdosplot_configurations.py` (``..\..\examples\02-bands_dos\plot_bandsdosplot_configurations.py``)
- - 00:01.971
+ * - :ref:`sphx_glr_examples_04-fermi3d_plot_fermi3d_isoslider.py` (``..\..\examples\04-fermi3d\plot_fermi3d_isoslider.py``)
+ - 00:00.000
- 0.0
- * - :ref:`sphx_glr_examples_00-band_structure_plot_noncolinear_vasp.py` (``..\..\examples\00-band_structure\plot_noncolinear_vasp.py``)
- - 00:01.845
+ * - :ref:`sphx_glr_examples_04-fermi3d_plot_fermi3d_isovalue_gif.py` (``..\..\examples\04-fermi3d\plot_fermi3d_isovalue_gif.py``)
+ - 00:00.000
- 0.0
- * - :ref:`sphx_glr_examples_03-fermi2d_plot_fermi2d.py` (``..\..\examples\03-fermi2d\plot_fermi2d.py``)
- - 00:01.691
+ * - :ref:`sphx_glr_examples_04-fermi3d_plot_fermi3d_plain.py` (``..\..\examples\04-fermi3d\plot_fermi3d_plain.py``)
+ - 00:00.000
- 0.0
- * - :ref:`sphx_glr_examples_00-band_structure_plot_compare_bands.py` (``..\..\examples\00-band_structure\plot_compare_bands.py``)
- - 00:01.665
+ * - :ref:`sphx_glr_examples_04-fermi3d_plot_fermi3d_spin-polarized.py` (``..\..\examples\04-fermi3d\plot_fermi3d_spin-polarized.py``)
+ - 00:00.000
- 0.0
- * - :ref:`sphx_glr_examples_01-dos_plot_dosplot_configurations.py` (``..\..\examples\01-dos\plot_dosplot_configurations.py``)
- - 00:01.613
+ * - :ref:`sphx_glr_examples_04-fermi3d_plot_fermi3d_spin_texture.py` (``..\..\examples\04-fermi3d\plot_fermi3d_spin_texture.py``)
+ - 00:00.000
- 0.0
- * - :ref:`sphx_glr_examples_05-other_plot_ebs.py` (``..\..\examples\05-other\plot_ebs.py``)
- - 00:01.308
+ * - :ref:`sphx_glr_examples_05-other_plot_2dkmesh_generation.py` (``..\..\examples\05-other\plot_2dkmesh_generation.py``)
+ - 00:00.000
- 0.0
- * - :ref:`sphx_glr_examples_00-band_structure_plot_noncolinear_qe.py` (``..\..\examples\00-band_structure\plot_noncolinear_qe.py``)
- - 00:01.308
+ * - :ref:`sphx_glr_examples_05-other_plot_bandgap.py` (``..\..\examples\05-other\plot_bandgap.py``)
+ - 00:00.000
- 0.0
- * - :ref:`sphx_glr_examples_00-band_structure_plot_atomic_levels.py` (``..\..\examples\00-band_structure\plot_atomic_levels.py``)
- - 00:01.159
+ * - :ref:`sphx_glr_examples_05-other_plot_kpath_generation.py` (``..\..\examples\05-other\plot_kpath_generation.py``)
+ - 00:00.000
- 0.0
- * - :ref:`sphx_glr_examples_06-PyPoscar_plot_rdf_cutoff_pyposcar.py` (``..\..\examples\06-PyPoscar\plot_rdf_cutoff_pyposcar.py``)
- - 00:00.588
+ * - :ref:`sphx_glr_examples_06-PyPoscar_plot_clusters_pyposcar.py` (``..\..\examples\06-PyPoscar\plot_clusters_pyposcar.py``)
+ - 00:00.000
- 0.0
- * - :ref:`sphx_glr_examples_05-other_plot_kpath_generation.py` (``..\..\examples\05-other\plot_kpath_generation.py``)
- - 00:00.480
+ * - :ref:`sphx_glr_examples_06-PyPoscar_plot_finding_defects_pyposcar.py` (``..\..\examples\06-PyPoscar\plot_finding_defects_pyposcar.py``)
+ - 00:00.000
- 0.0
- * - :ref:`sphx_glr_examples_05-other_plot_2dkmesh_generation.py` (``..\..\examples\05-other\plot_2dkmesh_generation.py``)
- - 00:00.441
+ * - :ref:`sphx_glr_examples_06-PyPoscar_plot_rdf_cutoff_pyposcar.py` (``..\..\examples\06-PyPoscar\plot_rdf_cutoff_pyposcar.py``)
+ - 00:00.000
- 0.0
- * - :ref:`sphx_glr_examples_02-bands_dos_plot_bandsdosplot.py` (``..\..\examples\02-bands_dos\plot_bandsdosplot.py``)
- - 00:00.331
+ * - :ref:`sphx_glr_examples_06-PyPoscar_plot_subsitution_pyposcar.py` (``..\..\examples\06-PyPoscar\plot_subsitution_pyposcar.py``)
+ - 00:00.000
- 0.0
- * - :ref:`sphx_glr_examples_05-other_plot_bandgap.py` (``..\..\examples\05-other\plot_bandgap.py``)
- - 00:00.125
+ * - :ref:`sphx_glr_examples_06-PyPoscar_plot_utils_pyposcar.py` (``..\..\examples\06-PyPoscar\plot_utils_pyposcar.py``)
+ - 00:00.000
- 0.0
diff --git a/docs/_static/documentation_options.js b/docs/_static/documentation_options.js
index c15c5866..76953631 100644
--- a/docs/_static/documentation_options.js
+++ b/docs/_static/documentation_options.js
@@ -1,6 +1,6 @@
var DOCUMENTATION_OPTIONS = {
URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
- VERSION: '6.2.0',
+ VERSION: '6.2.1',
LANGUAGE: 'en',
COLLAPSE_INDEX: false,
BUILDER: 'html',
diff --git a/docs/api/cfg/band_structure.html b/docs/api/cfg/band_structure.html
index 8d1488fd..c58b393b 100644
--- a/docs/api/cfg/band_structure.html
+++ b/docs/api/cfg/band_structure.html
@@ -8,7 +8,7 @@
- Band Structure Configuration API — PyProcar 6.2.0 documentation
+ Band Structure Configuration API — PyProcar 6.2.1 documentation
@@ -41,7 +41,7 @@
-
+
@@ -125,7 +125,7 @@
- PyProcar 6.2.0 documentation
+ PyProcar 6.2.1 documentation
@@ -654,7 +654,6 @@
QEParser
- pyprocar.io.qe.QEParser
- __init__
-- getKpointLabels
- kpoints_cart
- final_structure
- initial_structure
@@ -771,6 +770,7 @@
- pyprocar.plotter.DOSPlot
- __init__
- draw_fermi
+- export_data
- grid
- legend
- plot_dos
diff --git a/docs/api/cfg/band_structure_2d.html b/docs/api/cfg/band_structure_2d.html
index 9f0c4b9b..39cbb6ef 100644
--- a/docs/api/cfg/band_structure_2d.html
+++ b/docs/api/cfg/band_structure_2d.html
@@ -8,7 +8,7 @@
- band structure 2d plotting Options — PyProcar 6.2.0 documentation
+ band structure 2d plotting Options — PyProcar 6.2.1 documentation
@@ -41,7 +41,7 @@
-
+
@@ -125,7 +125,7 @@
- PyProcar 6.2.0 documentation
+ PyProcar 6.2.1 documentation
@@ -654,7 +654,6 @@
PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
@@ -654,7 +654,6 @@PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
@@ -654,7 +654,6 @@PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
@@ -654,7 +654,6 @@PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
@@ -654,7 +654,6 @@PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
@@ -654,7 +654,6 @@PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
@@ -654,7 +654,6 @@PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
@@ -654,7 +654,6 @@PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
@@ -654,7 +654,6 @@PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
@@ -654,7 +654,6 @@PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
@@ -654,7 +654,6 @@PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
@@ -654,7 +654,6 @@PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
@@ -654,7 +654,6 @@PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
@@ -654,7 +654,6 @@PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
@@ -654,7 +654,6 @@PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
@@ -654,7 +654,6 @@PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
@@ -654,7 +654,6 @@PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
@@ -654,7 +654,6 @@PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
@@ -654,7 +654,6 @@PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
@@ -654,7 +654,6 @@PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
@@ -654,7 +654,6 @@PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
@@ -654,7 +654,6 @@PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
@@ -654,7 +654,6 @@PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
@@ -654,7 +654,6 @@PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
@@ -654,7 +654,6 @@PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
@@ -654,7 +654,6 @@PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
@@ -654,7 +654,6 @@PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
@@ -654,7 +654,6 @@PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
@@ -654,7 +654,6 @@PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
@@ -654,7 +654,6 @@PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
@@ -654,7 +654,6 @@PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
@@ -654,7 +654,6 @@PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
@@ -654,7 +654,6 @@PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
@@ -654,7 +654,6 @@PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
@@ -654,7 +654,6 @@PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
@@ -654,7 +654,6 @@PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
@@ -654,7 +654,6 @@PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
@@ -654,7 +654,6 @@PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
@@ -654,7 +654,6 @@PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
@@ -654,7 +654,6 @@PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
@@ -654,7 +654,6 @@PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
@@ -654,7 +654,6 @@PyProcar 6.2.0 documentation
+PyProcar 6.2.1 documentation
@@ -654,7 +654,6 @@