Line data Source code
1 : # SPDX-FileCopyrightText: 2025 Pairinteraction Developers 2 : # SPDX-License-Identifier: LGPL-3.0-or-later 3 : 4 1 : import logging 5 1 : from typing import Any 6 : 7 1 : from pairinteraction_gui.calculate.calculate_two_atoms import ParametersTwoAtoms, ResultsTwoAtoms, calculate_two_atoms 8 1 : from pairinteraction_gui.config import ( 9 : BasisConfigTwoAtoms, 10 : CalculationConfig, 11 : KetConfigTwoAtoms, 12 : SystemConfigTwoAtoms, 13 : ) 14 1 : from pairinteraction_gui.page.base_page import CalculationPage 15 : 16 1 : logger = logging.getLogger(__name__) 17 : 18 : 19 1 : class TwoAtomsPage(CalculationPage): 20 : """Page for configuring and analyzing pair systems.""" 21 : 22 1 : title = "Two Atoms" 23 1 : tooltip = "Configure and analyze pair systems" 24 : 25 1 : def setupWidget(self) -> None: 26 1 : super().setupWidget() 27 : 28 : # all attributes of instance BaseConfig will be added to the toolbox in postSetupWidget 29 1 : self.ket_config = KetConfigTwoAtoms(self) 30 1 : self.basis_config = BasisConfigTwoAtoms(self) 31 1 : self.system_config = SystemConfigTwoAtoms(self) 32 1 : self.calculation_config = CalculationConfig(self) 33 : 34 : # Set some better defaults for the two atoms page 35 1 : self.calculation_config.number_state_labels.setValue(5) 36 1 : self.calculation_config.number_state_labels.setChecked(False) 37 1 : self.calculation_config.energy_range.setValues(-0.5, 0.5) 38 1 : self.calculation_config.energy_range.setChecked(False) 39 : 40 1 : self.ket_config.signal_species_changed.connect(self.basis_config.on_species_changed) 41 1 : self.ket_config.signal_species_changed.connect(self.plotwidget.clear) 42 : 43 1 : def before_calculate(self) -> None: 44 0 : self.basis_config.clear_basis_pair_label() 45 0 : return super().before_calculate() 46 : 47 1 : def calculate(self) -> tuple[ParametersTwoAtoms, ResultsTwoAtoms]: 48 0 : parameters = ParametersTwoAtoms.from_page(self) 49 0 : results = calculate_two_atoms(parameters) 50 0 : return parameters, results 51 : 52 1 : def update_plot(self, parameters: ParametersTwoAtoms, results: ResultsTwoAtoms) -> None: # type: ignore[override] 53 0 : super().update_plot(parameters, results) 54 : 55 0 : if results.basis_0_label is not None: 56 0 : self.basis_config.update_basis_pair_label(results.basis_0_label) 57 : 58 1 : def _get_export_replacements(self) -> dict[str, Any]: 59 0 : parameters = ParametersTwoAtoms.from_page(self) 60 0 : return parameters.to_replacement_dict() 61 : 62 1 : def _get_export_notebook_template_name(self) -> str: 63 0 : ranges = self.system_config.get_ranges_dict() 64 0 : if all(v[0] == v[-1] for k, v in ranges.items() if k in ["Ex", "Ey", "Ez", "Bx", "By", "Bz"]): 65 0 : return "two_atoms.ipynb" 66 0 : return "two_atoms_variable_fields.ipynb"