Coverage for graphica/gui/datasets/fitting.py: 91.8%
45 statements
« prev ^ index » next coverage.py v7.16.2, created at 2026-10-12 16:38 +0000
« prev ^ index » next coverage.py v7.16.2, created at 2026-10-12 16:38 +0000
1"""曲線フィット(単発・一括・多峰分離)と、フィット結果の再表示・注釈への焼き込みのメニューの入口。
3本体は gui/datasets/operations/fitting.py。計算は裏で動き、終わったら結果を足す。
4"""
5from graphica.gui.datasets.operations.fitting import (BATCH_FIT_RUNNER, FIT_RESULT_WINDOW, FIT_RUNNER,
6 FITTING_OPERATIONS, MULTI_PEAK_FIT_RUNNER, RUNNER_NAMES,
7 burn_operation, stop_runner)
8from graphica.gui.datasets.operations.runner import OperationState, run_operation
11class FittingController:
13 def __init__(self, host):
14 self._host = host
15 self._state = OperationState()
17 @property
18 def result_dialog(self):
19 """結果は非モーダルで出し、グラフと見比べられるようにする。"""
20 return self._state.result_windows.get(FIT_RESULT_WINDOW)
22 @property
23 def fit_runner(self):
24 return self._state.runners.get(FIT_RUNNER)
26 @fit_runner.setter
27 def fit_runner(self, runner):
28 self._state.runners[FIT_RUNNER] = runner
30 @property
31 def batch_fit_runner(self):
32 return self._state.runners.get(BATCH_FIT_RUNNER)
34 @batch_fit_runner.setter
35 def batch_fit_runner(self, runner):
36 self._state.runners[BATCH_FIT_RUNNER] = runner
38 @property
39 def multi_peak_fit_runner(self):
40 return self._state.runners.get(MULTI_PEAK_FIT_RUNNER)
42 @multi_peak_fit_runner.setter
43 def multi_peak_fit_runner(self, runner):
44 self._state.runners[MULTI_PEAK_FIT_RUNNER] = runner
46 def shutdown(self):
47 """タブを閉じる前に、実行中の計算を待って片付ける(curve_fit 自体は中断できない)。"""
48 for name in RUNNER_NAMES:
49 runner = self._state.runners.get(name)
50 if runner is not None: 50 ↛ 51line 50 didn't jump to line 51 because the condition on line 50 was never true
51 stop_runner(runner)
52 self._state.runners[name] = None
54 def _run(self, operation):
55 run_operation(operation, self._host, self._state)
57 def fit_current_dataset(self):
58 self._run(FITTING_OPERATIONS["fit_current_dataset"])
60 def batch_fit_selected(self):
61 self._run(FITTING_OPERATIONS["batch_fit_selected"])
63 def multi_peak_fit_current_dataset(self):
64 self._run(FITTING_OPERATIONS["multi_peak_fit_current_dataset"])
66 def show_fit_result(self):
67 self._run(FITTING_OPERATIONS["show_fit_result"])
69 def burn_fit_result_annotation(self, dataset, fit_result):
70 self._run(burn_operation(dataset, fit_result))