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

1"""曲線フィット(単発・一括・多峰分離)と、フィット結果の再表示・注釈への焼き込みのメニューの入口。 

2 

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 

9 

10 

11class FittingController: 

12 

13 def __init__(self, host): 

14 self._host = host 

15 self._state = OperationState() 

16 

17 @property 

18 def result_dialog(self): 

19 """結果は非モーダルで出し、グラフと見比べられるようにする。""" 

20 return self._state.result_windows.get(FIT_RESULT_WINDOW) 

21 

22 @property 

23 def fit_runner(self): 

24 return self._state.runners.get(FIT_RUNNER) 

25 

26 @fit_runner.setter 

27 def fit_runner(self, runner): 

28 self._state.runners[FIT_RUNNER] = runner 

29 

30 @property 

31 def batch_fit_runner(self): 

32 return self._state.runners.get(BATCH_FIT_RUNNER) 

33 

34 @batch_fit_runner.setter 

35 def batch_fit_runner(self, runner): 

36 self._state.runners[BATCH_FIT_RUNNER] = runner 

37 

38 @property 

39 def multi_peak_fit_runner(self): 

40 return self._state.runners.get(MULTI_PEAK_FIT_RUNNER) 

41 

42 @multi_peak_fit_runner.setter 

43 def multi_peak_fit_runner(self, runner): 

44 self._state.runners[MULTI_PEAK_FIT_RUNNER] = runner 

45 

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 

53 

54 def _run(self, operation): 

55 run_operation(operation, self._host, self._state) 

56 

57 def fit_current_dataset(self): 

58 self._run(FITTING_OPERATIONS["fit_current_dataset"]) 

59 

60 def batch_fit_selected(self): 

61 self._run(FITTING_OPERATIONS["batch_fit_selected"]) 

62 

63 def multi_peak_fit_current_dataset(self): 

64 self._run(FITTING_OPERATIONS["multi_peak_fit_current_dataset"]) 

65 

66 def show_fit_result(self): 

67 self._run(FITTING_OPERATIONS["show_fit_result"]) 

68 

69 def burn_fit_result_annotation(self, dataset, fit_result): 

70 self._run(burn_operation(dataset, fit_result))