Skip to content
Merged
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
c83e361
Use template to reconstruct parse_expression
1041176461 Jan 21, 2023
cdf3c0c
Feature: output R matrix at each MD step
1041176461 Jan 23, 2023
cff6e08
Modify'matrix_HS' to 'matrix' for R matrix output
1041176461 Jan 23, 2023
b9db1f1
Merge branch 'develop' into develop
1041176461 Jan 23, 2023
6c1a77b
Merge branch 'develop' of https://github.com/1041176461/abacus-develo…
1041176461 Jan 31, 2023
cc149a5
Merge branches 'develop' and 'develop' of https://github.com/10411764…
Feb 11, 2023
992ba96
Merge branch 'develop' of https://github.com/1041176461/abacus-develo…
Feb 11, 2023
0c753e2
Merge branch 'deepmodeling:develop' into develop
1041176461 Feb 12, 2023
3fd87f3
Merge branch 'develop' of https://github.com/1041176461/abacus-develo…
Feb 14, 2023
2a81795
Fix: modify index in parse_expression
1041176461 Feb 15, 2023
3523c57
Merge branch 'deepmodeling:develop' into develop
1041176461 Mar 27, 2023
afe397c
Fix: add regfree for parse_expression
May 10, 2023
d7775cf
Merge branch 'develop' into develop
1041176461 May 10, 2023
aad3e5a
Merge branch 'develop' into develop
Qianruipku May 10, 2023
4375864
Merge branch 'deepmodeling:develop' into develop
1041176461 May 21, 2023
d91a9e9
Doc: update phonopy doc
1041176461 Jun 5, 2023
238d73f
Merge branch 'deepmodeling:develop' into develop
1041176461 Jun 5, 2023
cdc685a
Doc: update phonopy doc
1041176461 Jun 5, 2023
47bc26b
Merge branch 'develop' of https://github.com/1041176461/abacus-develo…
1041176461 Jun 5, 2023
2ecdcca
Merge branch 'deepmodeling:develop' into develop
1041176461 Jun 24, 2023
53eeedf
Merge branch 'deepmodeling:develop' into develop
1041176461 Aug 30, 2023
b22769e
Merge branch 'deepmodeling:develop' into develop
1041176461 Sep 4, 2023
89d7394
Merge branch 'deepmodeling:develop' into develop
1041176461 Oct 30, 2023
d09f2d8
Merge branch 'deepmodeling:develop' into develop
1041176461 Apr 8, 2024
2673ecc
fix tdos plot for nspin=2
1041176461 Apr 8, 2024
3d2d8dd
optimize dosplot for nspin=2
1041176461 Apr 8, 2024
d919681
fix legend for dosplot
1041176461 Apr 8, 2024
76defcd
Merge branch 'develop' into develop
1041176461 Apr 8, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 21 additions & 13 deletions tools/plot-tools/abacus_plot/dos.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@
class DOS:
"""Parse DOS data"""

def __init__(self) -> None:
self.nspin = 1
def __init__(self, nspin) -> None:
self.nspin = nspin
if self.nspin in [1, 4]:
self._nsplit = 1
elif self.nspin == 2:
Expand Down Expand Up @@ -89,10 +89,11 @@ def bandgap(cls, vb: namedtuple, cb: namedtuple):
return gap


class DOSPlot:
class :
"""Plot density of state(DOS)"""

def __init__(self, fig: Figure = None, ax: axes.Axes = None, **kwargs) -> None:
def __init__(self, fig: Figure = None, ax: axes.Axes = None, nspin: int = 1, **kwargs) -> None:
self.nspin = nspin
self.fig = fig
self.ax = ax
self._lw = kwargs.pop('lw', 2)
Expand Down Expand Up @@ -145,19 +146,26 @@ def _set_figure(self, energy_range: Sequence = [], dos_range: Sequence = [], not
else:
self.ax.axvline(0, linestyle="--", c='b', lw=1.0)

if self.nspin == 2:
self.ax.axhline(0, linestyle="--", c='gray', lw=1.0)

handles, labels = self.ax.get_legend_handles_labels()
by_label = OrderedDict(zip(labels, handles))
if "legend_prop" in self.plot_params.keys():
self.ax.legend(prop=self.plot_params["legend_prop"])
self.ax.legend(by_label.values(), by_label.keys(),
prop=self.plot_params["legend_prop"])
else:
self.ax.legend(prop={'size': 15})
self.ax.legend(by_label.values(),
by_label.keys(), prop={'size': 15})


class TDOS(DOS):
"""Parse total DOS data"""

def __init__(self, tdosfile: PathLike = None) -> None:
super().__init__()
self.tdosfile = tdosfile
self._read()
super().__init__(self.nspin)

def _read(self) -> tuple:
"""Read total DOS data file
Expand All @@ -171,7 +179,7 @@ def _read(self) -> tuple:
self.energy, self.dos = np.split(data, self.nspin+1, axis=1)
elif self.nspin == 2:
self.energy, dos_up, dos_dw = np.split(data, self.nspin+1, axis=1)
self.dos = np.hstack(dos_up, dos_dw)
self.dos = np.hstack((dos_up, dos_dw))

def _shift_energy(self, efermi: float = 0, shift: bool = False, prec: float = 0.01):
if shift:
Expand All @@ -188,7 +196,7 @@ def plot(self, fig: Figure, ax: Union[axes.Axes, Sequence[axes.Axes]], efermi: f

energy_f = self._shift_energy(efermi, shift, prec)

dosplot = DOSPlot(fig, ax, **kwargs)
dosplot = DOSPlot(fig, ax, self.nspin, **kwargs)
dosplot.ax = self._plot(dosplot, energy_f, self.dos, "TDOS")
if "notes" in dosplot.plot_params.keys():
dosplot._set_figure(energy_range, dos_range,
Expand All @@ -203,9 +211,9 @@ class PDOS(DOS):
"""Parse partial DOS data"""

def __init__(self, pdosfile: PathLike = None) -> None:
super().__init__()
self.pdosfile = pdosfile
self._read()
super().__init__(self.nspin)

def _read(self):
"""Read partial DOS data file
Expand Down Expand Up @@ -398,7 +406,7 @@ def _parial_plot(self,
energy_f, tdos = self._shift_energy(efermi, shift, prec)

if not species:
dosplot = DOSPlot(fig, ax, **kwargs)
dosplot = DOSPlot(fig, ax, self.nspin, **kwargs)
dosplot.ax = self._plot(dosplot, energy_f, tdos, "TDOS")
if "notes" in dosplot.plot_params.keys():
dosplot._set_figure(energy_range, dos_range,
Expand All @@ -409,7 +417,7 @@ def _parial_plot(self,
return dosplot

if isinstance(species, (list, tuple)):
dosplot = DOSPlot(fig, ax, **kwargs)
dosplot = DOSPlot(fig, ax, self.nspin, **kwargs)
if "xlabel_params" in dosplot.plot_params.keys():
dosplot.ax.set_xlabel("Energy(eV)", **
dosplot.plot_params["xlabel_params"])
Expand All @@ -431,7 +439,7 @@ def _parial_plot(self,
assert len(ax) >= len(
dos.keys()), "There must be enough `axes` to plot."
for i, elem in enumerate(dos.keys()):
dosplot = DOSPlot(fig, ax[i], **kwargs)
dosplot = DOSPlot(fig, ax[i], self.nspin, **kwargs)
for ang in dos[elem].keys():
l_index = int(ang)
if isinstance(dos[elem][ang], dict):
Expand Down