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_lifetimes import ParametersLifetimes, calculate_lifetimes 9 1 : from pairinteraction_gui.config import KetConfigLifetimes 10 1 : from pairinteraction_gui.page.base_page import CalculationPage 11 1 : from pairinteraction_gui.plotwidget.plotwidget import PlotLifetimes 12 1 : from pairinteraction_gui.qobjects import show_status_tip 13 : 14 : if TYPE_CHECKING: 15 : from pairinteraction_gui.calculate.calculate_lifetimes import ResultsLifetimes 16 : 17 1 : logger = logging.getLogger(__name__) 18 : 19 : 20 1 : class LifetimesPage(CalculationPage): 21 : """Page for calculating lifetimes.""" 22 : 23 1 : title = "Lifetimes" 24 1 : tooltip = "Calculate the lifetimes and transition rates for a specified ket" 25 : 26 1 : ket_config: KetConfigLifetimes 27 1 : plotwidget: PlotLifetimes # type: ignore[assignment] 28 : 29 1 : def setupWidget(self) -> None: 30 1 : super().setupWidget() 31 1 : show_status_tip(self, "Ready", timeout=1) 32 : 33 : # all attributes of instance BaseConfig will be added to the toolbox in postSetupWidget 34 1 : self.ket_config = KetConfigLifetimes(self) 35 : 36 1 : def _create_plot_widget(self) -> PlotLifetimes: # type: ignore[override] 37 1 : return PlotLifetimes(self) 38 : 39 1 : def calculate(self) -> tuple[ParametersLifetimes, ResultsLifetimes]: # type: ignore[override] 40 1 : params = ParametersLifetimes.from_page(self) 41 1 : results = calculate_lifetimes(params) 42 1 : return params, results 43 : 44 1 : def update_plot(self, parameters: ParametersLifetimes, results: ResultsLifetimes) -> None: # type: ignore[override] 45 0 : super().update_plot(parameters, results) # type: ignore[arg-type] 46 0 : self.ket_config.set_lifetime(results.lifetime) 47 0 : show_status_tip(self, "Finished updating plot. Tip: Click on a bar to see transition details.", logger=logger) 48 : 49 1 : def _get_export_notebook_template_name(self) -> str: 50 1 : return "lifetimes.ipynb" 51 : 52 1 : def _get_export_replacements(self) -> dict[str, str]: 53 1 : parameters = ParametersLifetimes.from_page(self) 54 1 : return parameters.to_replacement_dict()