Source code for pyprocar.cfg.band_structure

from dataclasses import asdict, dataclass, field
from typing import Dict, Any, List, Optional,Tuple
from enum import Enum, auto


from pyprocar.cfg.base import PlotType, BaseConfig

[docs] class BandStructureMode(Enum): """ An enumeration for defining the modes of Band Structure representations. Attributes ---------- PLAIN : str Represents the band structure in a simple, where the colors are the different bands. PARAMETRIC : str Represents the band structure in a parametric form, summing over the projections. SACATTER : str Represents the band structure in a scatter plot, where the colors are the different bands. ATOMIC : str Represents the band structure in an atomic level plot, plots singlr kpoint bands. OVERLAY : str Represents the band structure in an overlay plot, where the colors are the selected projections OVERLAY_SPECIES : str Represents the band structure in an overlay plot, where the colors are the different projection of the species. OVERLAY_ORBITALS : str Represents the band structure in an overlay plot, where the colors are the different projection of the orbitals. """ PLAIN = "plain" PARAMETRIC = "parametric" SACATTER = "scatter" ATOMIC = "atomic" OVERLAY = "overlay" OVERLAY_SPECIES = "overlay_species" OVERLAY_ORBITALS = "overlay_orbitals"
[docs] class BandStructureProperty(Enum): """ An enumeration for defining the properties that can be visualized on the BandStructure. Attributes ---------- """
[docs] @dataclass class BandStructureConfig(BaseConfig): """ Configuration class for plotting band structures with custom options. Parameters ---------- color : str, optional (default 'black') Color for the plot lines. spin_colors : Tuple[str], optional Colors for the spin texture lines. colorbar_title : str, optional Title of the colorbar. colorbar_title_size : int, optional Font size of the title of the colorbar. colorbar_title_padding : int, optional Padding of the title of the colorbar. colorbar_tick_labelsize : int, optional Size of the tick labels on the colorbar. Plot Appearance --------------- cmap : str, optional (default 'jet') The colormap used for the plot. clim : Tuple[float, float], optional The color scale limits for the color bar. fermi_color : str, optional Color of the Fermi line. fermi_linestyle : str, optional The linestyle of the Fermi line. fermi_linewidth : float, optional The linewidth of the Fermi line. grid : bool, optional If true, a grid will be shown on the plot. grid_axis : str, optional Which axis (or both) the grid lines should be drawn on. grid_color : str, optional The color of the grid lines. grid_linestyle : str, optional The linestyle of the grid lines. grid_linewidth : float, optional The linewidth of the grid lines. grid_which : str, optional Which grid lines to draw (major, minor, or both). label : Tuple[str], optional The labels for the plot lines. legend : bool, optional If true, a legend will be shown on the plot. linestyle : Tuple[str], optional The linestyles for the plot lines. linewidth : Tuple[float], optional The linewidths for the plot lines. marker : Tuple[str], optional The marker styles for the plot points. markersize : Tuple[float], optional The size of the markers for the plot points. opacity : Tuple[float], optional The opacities for the plot lines. plot_color_bar : bool, optional If true, a color bar will be shown on the plot. savefig : str, optional The file name to save the figure. If null, the figure will not be saved. title : str, optional The title for the plot. If null, no title will be displayed. weighted_color : bool, optional If true, the color of the lines will be weighted. weighted_width : bool, optional If true, the width of the lines will be weighted. figure_size : Tuple[int], optional The size of the figure (width, height) in inches. dpi : str, optional The resolution in dots per inch. If 'figure', use the figure's dpi value. colorbar_tick_params : Dict[str, any], optional The colorbar tick parameters, by default None colorbar_label_params : Dict[str, any], optional The colorbar label parameters, by default None x_label_params : Dict[str, any], optional The x label parameters, by default None y_label_params : Dict[str, any], optional The y label parameters, by default None title_params : Dict[str, any], optional The title parameters, by default None major_x_tick_params : Dict[str, any], optional The major x tick parameters, by default None major_y_tick_params : Dict[str, any], optional The major y tick parameters, by default None minor_y_tick_params : Dict[str, any], optional The minor y tick parameters, by default None major_y_locator : matplotlib.ticker.Locator, optional The major y locator, by default None minor_y_locator : matplotlib.ticker.Locator, optional The minor y locator, by default None multiple_locator_y_major_value : float, optional The major value for the multiple locator, by default None multiple_locator_y_minor_value : float, optional The minor value for the multiple locator, by default None Methods ------- __post_init__(): Post-initialization to set additional properties like `plot_type`. Examples -------- To initialize a basic configuration with the default settings: >>> config = BandStructureConfig() To customize the plot with a specific colormap and line styles: >>> custom_config = BandStructureConfig(cmap='magma', linestyle=('dotted', 'dashed')) """ modes: List[str] = field(default_factory=lambda: [mode.value for mode in BandStructureMode]) # Basic Plot Settings color: str = 'black' spin_colors: Tuple[str] = field(default_factory=lambda: ('blue', 'red')) # Colorbar Configuration colorbar_title: str = 'Atomic Orbital Projections' colorbar_title_size: int = 15 colorbar_title_padding: int = 20 colorbar_tick_labelsize: int = 10 # Plot Appearance cmap: str = 'jet' clim: Optional[Tuple[float, float]] = (0.0, 1.0) fermi_color: str = 'blue' fermi_linestyle: str = 'dotted' fermi_linewidth: float = 1 grid: bool = False grid_axis: str = 'both' grid_color: str = 'grey' grid_linestyle: str = 'solid' grid_linewidth: float = 1 grid_which: str = 'major' label: Tuple[str] = field(default_factory=lambda: (r'$\uparrow$', r'$\downarrow$')) legend: bool = True linestyle: Tuple[str] = field(default_factory=lambda: ('solid', 'dashed')) linewidth: Tuple[float] = field(default_factory=lambda: (1.0, 1.0)) marker: Tuple[str] = field(default_factory=lambda: ('o', 'v', '^', 'D')) markersize: Tuple[float] = field(default_factory=lambda: (0.2, 0.2)) opacity: Tuple[float] = field(default_factory=lambda: (1.0, 1.0)) plot_color_bar: bool = True savefig: Optional[str] = None title: Optional[str] = None weighted_color: bool = True weighted_width: bool = False figure_size: Tuple[int] = field(default_factory=lambda: (9, 6)) dpi: str = 'figure' colorbar_tick_params: Dict[str, any] = field(default_factory=lambda: {}) colorbar_label_params: Dict[str, any] = field(default_factory=lambda: {}) x_label_params: Dict[str, any] = field(default_factory=lambda: {}) y_label_params: Dict[str, any] = field(default_factory=lambda: {}) title_params: Dict[str, any] = field(default_factory=lambda: {}) # Tick Parameters major_y_tick_params: Dict[str, any] = field(default_factory=lambda: { "which": "major", "axis": "y", "direction": "inout", "width": 1, "length": 5, "labelright": False, "right": True, "left": True }) minor_y_tick_params: Dict[str, any] = field(default_factory=lambda: { "which": "minor", "axis": "y", "direction": "in", "left": True, "right": True }) major_x_tick_params: Dict[str, any] = field(default_factory=lambda: { "which": "major", "axis": "x", "direction": "in" }) major_y_locator = None minor_y_locator = None multiple_locator_y_major_value:float = None multiple_locator_y_minor_value:float = None def __post_init__(self): """This method is immediately called after the object is initialized. It is useful to validate the data and set default values. """ self.plot_type = PlotType.BAND_STRUCTURE
[docs] def as_dict(self): """ Returns a dictionary of the configuration settings. """ return asdict(self)