import type { Matrix3x3, Vec3 } from '../math'; import type { InternalPoint } from '../plot'; import type { PymatgenCompleteDos } from './helpers'; export type BandStructureType = `phonon` | `electronic`; export type PathMode = `union` | `intersection` | `strict`; export type { FrequencyUnit } from './frequency-units'; export type NormalizationMode = `max` | `sum` | `integral` | null; export interface QPoint { label: string | null; frac_coords: Vec3; distance?: number; } export interface Branch { start_index: number; end_index: number; name: string; is_discontinuity?: boolean; } export interface BaseBandStructure { qpoints: QPoint[]; branches: Branch[]; labels_dict: Record; distance: number[]; nb_bands: number; bands: number[][]; spin_down_bands?: number[][]; band_widths?: number[][]; } export interface RibbonConfig { color?: string; opacity?: number; max_width?: number; scale?: number; } export interface PhononBandStructure extends BaseBandStructure { has_imaginary_modes?: boolean; has_nac?: boolean; } export interface ElectronicBandStructure extends BaseBandStructure { is_spin_polarized: boolean; efermi?: number; is_metal?: boolean; band_gap?: { energy: number; direct: boolean; transition?: string; }; } export interface PhononDos { type: `phonon`; frequencies: number[]; densities: number[]; } export interface ElectronicDos { type: `electronic`; energies: number[]; densities: number[]; spin_down_densities?: number[]; spin_polarized?: boolean; efermi?: number; dos_at_e_fermi?: number; } export type SpinMode = `mirror` | `overlay` | `up_only` | `down_only` | null; export type BandsSpinMode = Exclude; export type PdosType = `atom` | `orbital`; export interface StackedAreaData { x_values: number[]; upper_densities: number[]; lower_densities: number[]; color: string; } export type DosData = PhononDos | ElectronicDos; export type DosInput = DosData | PymatgenCompleteDos; export interface BandLineStyle { stroke?: string; stroke_width?: number; } export type LineKwargs = BandLineStyle | { acoustic?: BandLineStyle; optical?: BandLineStyle; }; export interface HoveredData { hovered_frequency?: number | null; hovered_band_point?: InternalPoint | null; hovered_qpoint_index?: number | null; } export type Complex = [re: number, im: number]; export interface PhononModeAtom { symbol: string; mass: number; coordinates: Vec3; } export interface PhononMode { frequency: number; eigenvector: Complex[][] | null; } export interface PhononQPointModes { q_position: Vec3; distance: number | null; modes: PhononMode[]; } export interface PhononPathSegment { start_index: number; end_index: number; start_label: string | null; end_label: string | null; } export interface PhononModeData { n_atoms: number; atoms: PhononModeAtom[]; lattice: Matrix3x3 | null; qpoints: PhononQPointModes[]; path_segments: PhononPathSegment[]; } export interface PhononModeDataset { modes: PhononModeData; spectrum?: VibrationalSpectrum; filename?: string; } export interface PhononModeSelection { qpoint_idx: number; mode_idx: number; } export type PhononExplorerView = `bands` | `ir` | `raman` | `modes`; export interface BornChargeData { factor: number; dielectric: Matrix3x3; born_charges: Matrix3x3[]; } export interface VibrationalMode { mode_idx: number; frequency: number; ir_intensity: number; raman_activity: number | null; depolarization_ratio: number | null; is_acoustic: boolean; is_imaginary: boolean; } export interface VibrationalSpectrum { modes: VibrationalMode[]; n_atoms: number; q_position: Vec3; has_raman: boolean; } export type SpectrumKind = `ir` | `raman`; export type SpectrumPresentation = `absorbance` | `transmittance`;