Line data Source code
1 : # SPDX-FileCopyrightText: 2025 PairInteraction Developers 2 : # SPDX-License-Identifier: LGPL-3.0-or-later 3 1 : from __future__ import annotations 4 : 5 1 : import logging 6 1 : from typing import TYPE_CHECKING 7 : 8 1 : from pairinteraction_gui.calculate.calculate_one_atom import ParametersOneAtom, calculate_one_atom 9 1 : from pairinteraction_gui.config import ( 10 : BasisConfigOneAtom, 11 : CalculationConfig, 12 : KetConfigOneAtom, 13 : SystemConfigOneAtom, 14 : ) 15 1 : from pairinteraction_gui.page.base_page import CalculationPage 16 : 17 : if TYPE_CHECKING: 18 : from pairinteraction_gui.calculate.calculate_one_atom import ResultsOneAtom 19 : 20 1 : logger = logging.getLogger(__name__) 21 : 22 : 23 1 : class OneAtomPage(CalculationPage): 24 : """Page for configuring and analyzing single-atom systems.""" 25 : 26 1 : title = "One\nAtom" 27 1 : tooltip = "Configure and analyze single-atom systems" 28 : 29 1 : def setupWidget(self) -> None: 30 1 : super().setupWidget() 31 : 32 : # all attributes of instance BaseConfig will be added to the toolbox in postSetupWidget 33 1 : self.ket_config = KetConfigOneAtom(self) 34 1 : self.basis_config = BasisConfigOneAtom(self) 35 1 : self.system_config = SystemConfigOneAtom(self) 36 1 : self.calculation_config = CalculationConfig(self) 37 : 38 1 : self.ket_config.signal_species_changed.connect(self.basis_config.on_species_changed) 39 1 : self.ket_config.signal_species_changed.connect(self.plotwidget.clear) 40 : 41 1 : def calculate(self) -> tuple[ParametersOneAtom, ResultsOneAtom]: 42 1 : parameters = ParametersOneAtom.from_page(self) 43 1 : results = calculate_one_atom(parameters) 44 1 : return parameters, results 45 : 46 1 : def _get_export_notebook_template_name(self) -> str: 47 1 : return "one_atom.ipynb" 48 : 49 1 : def _get_export_replacements(self) -> dict[str, str]: 50 1 : parameters = ParametersOneAtom.from_page(self) 51 1 : return parameters.to_replacement_dict()