Source code for abipy.panels.a2f

"""Panels to interact with A2F files."""
from __future__ import annotations

#import param
import panel as pn
import panel.widgets as pnw

from .core import (PanelWithElectronBands, ply, mpl, dfc, depends_on_btn_click)


[docs] class A2fFilePanel(PanelWithElectronBands): """ Panel with widgets to interact with a |GsrFile|. """ def __init__(self, ncfile, **params): PanelWithElectronBands.__init__(self, ebands=ncfile.ebands, **params) self.ncfile = ncfile self.a2f_view_btn = pnw.Button(name="Plot a2F", button_type='primary')
[docs] def get_a2f_view(self) -> pn.Row: """ Return Row with widgets to visualize the structure. """ return pn.Row( self.pws_col(["## Visualize a2F", "a2f_view_btn", ]), self.on_view_a2f, )
[docs] @depends_on_btn_click('a2f_view_btn') def on_view_a2f(self): """Visualize a2f function.""" col = pn.Column(sizing_mode='stretch_width'); ca = col.append ncfile = self.ncfile a2f = ncfile.a2f_qcoarse ca(f"## A2F") fig = a2f.plot_with_lambda(units="eV", **self.mpl_kwargs) ca(mpl(fig)) ca(f"## A2F + nu") fig = a2f.plot_nuterms(units="eV", ax_mat=None, with_lambda=True, fontsize=12, xlims=None, ylims=None, label=None, **self.mpl_kwargs) ca(mpl(fig)) for what in ("gamma", "lambda"): ca(f"## Phbands with {what}") fig = ncfile.plot(what=what, units="eV", scale=None, alpha=0.6, ylims=None, ax=None, colormap="jet", **self.mpl_kwargs) ca(mpl(fig)) return col
[docs] def get_panel(self, as_dict=False, **kwargs): """ Return tabs with widgets to interact with the A2F file. """ d = {} #d["Summary"] = self.get_summary_view_for_abiobj(self.gsr) d["a2F"] = self.get_a2f_view() d["e-Bands"] = self.get_plot_ebands_view() #tabs_dict = self.ncfile.phbands.get_panel(as_dict=True) #for k, v in tabs_dict.items(): # d[k] = v kpoints = self.ncfile.ebands.kpoints if kpoints.is_ibz: # Add DOS tab but only if k-sampling. d["e-DOS"] = self.get_plot_edos_view() d["SKW"] = self.get_skw_view() if not self.ncfile.ebands.isnot_ibz_sampling(): d["Ifermi"] = self.get_ifermi_view() #d["fsviewer"] = self.get_fsviewer_view() d["Structure"] = self.get_structure_view() d["NcFile"] = self.ncfile.get_ncfile_view() # TODO #d["Global"] = pn.Row( # pn.Column("# Global options", # *self.pws("units", "mpi_procs", "verbose"), # ), # self.get_software_stack()) #)) if as_dict: return d return self.get_template_from_tabs(d, template=kwargs.get("template", None))