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()
|