9
9
"""
10
10
from collections import OrderedDict
11
11
12
- from PyQt5 .QtCore import Qt
12
+ from PyQt5 .QtCore import pyqtSignal , Qt
13
13
from PyQt5 .QtGui import QIntValidator
14
14
from PyQt5 .QtWidgets import (
15
15
QCheckBox , QComboBox , QFrame , QGridLayout , QHBoxLayout , QLabel ,
16
- QPushButton
16
+ QPushButton , QWidget
17
17
)
18
18
19
19
from .base_ctrl_widgets import _AbstractCtrlWidget
20
+ from .curve_fitting_ctrl_widget import _BaseFittingCtrlWidget , FittingType
20
21
from .smart_widgets import SmartBoundaryLineEdit , SmartLineEdit
21
22
from ..gui_helpers import invert_dict
22
23
from ...config import AnalysisType
23
24
from ...database import Metadata as mt
24
25
25
26
27
+ class _FittingCtrlWidget (_BaseFittingCtrlWidget ):
28
+
29
+ def __init__ (self , * args , ** kwargs ):
30
+ super ().__init__ (* args , ** kwargs )
31
+
32
+ self .initUI ()
33
+ self .initConnections ()
34
+
35
+ def initUI (self ):
36
+ AR = Qt .AlignRight
37
+
38
+ layout = QGridLayout ()
39
+ layout .addWidget (QLabel ("Param a0 = " ), 1 , 0 , AR )
40
+ layout .addWidget (self ._params [0 ], 1 , 1 )
41
+ layout .addWidget (QLabel ("Param b0 = " ), 1 , 2 , AR )
42
+ layout .addWidget (self ._params [1 ], 1 , 3 )
43
+ layout .addWidget (QLabel ("Param c0 = " ), 1 , 4 , AR )
44
+ layout .addWidget (self ._params [2 ], 1 , 5 )
45
+ layout .addWidget (QLabel ("Param d0 = " ), 2 , 0 , AR )
46
+ layout .addWidget (self ._params [3 ], 2 , 1 )
47
+ layout .addWidget (QLabel ("Param e0 = " ), 2 , 2 , AR )
48
+ layout .addWidget (self ._params [4 ], 2 , 3 )
49
+ layout .addWidget (QLabel ("Param f0 = " ), 2 , 4 , AR )
50
+ layout .addWidget (self ._params [5 ], 2 , 5 )
51
+ layout .addWidget (self .fit_btn , 3 , 0 , 1 , 2 )
52
+ layout .addWidget (self .clear_btn , 3 , 2 , 1 , 2 )
53
+ layout .addWidget (QLabel ("Fit type: " ), 3 , 4 , AR )
54
+ layout .addWidget (self .fit_type_cb , 3 , 5 )
55
+ layout .addWidget (self ._output , 4 , 0 , 1 , 6 )
56
+ layout .setContentsMargins (0 , 0 , 0 , 0 )
57
+ self .setLayout (layout )
58
+
59
+ self .setFixedWidth (self .minimumSizeHint ().width ())
60
+
61
+
26
62
class HistogramCtrlWidget (_AbstractCtrlWidget ):
27
63
"""Widget for setting up histogram analysis parameters."""
28
64
@@ -33,6 +69,9 @@ class HistogramCtrlWidget(_AbstractCtrlWidget):
33
69
})
34
70
_analysis_types_inv = invert_dict (_analysis_types )
35
71
72
+ fit_curve_sgn = pyqtSignal ()
73
+ clear_fitting_sgn = pyqtSignal ()
74
+
36
75
def __init__ (self , * args , ** kwargs ):
37
76
super ().__init__ (* args , ** kwargs )
38
77
@@ -53,6 +92,8 @@ def __init__(self, *args, **kwargs):
53
92
54
93
self ._reset_btn = QPushButton ("Reset" )
55
94
95
+ self ._fitting = _FittingCtrlWidget ()
96
+
56
97
self .initUI ()
57
98
self .initConnections ()
58
99
@@ -61,27 +102,23 @@ def __init__(self, *args, **kwargs):
61
102
def initUI (self ):
62
103
"""Overload."""
63
104
AR = Qt .AlignRight
64
- AT = Qt .AlignTop
65
105
66
- lwidget = QFrame ()
106
+ ctrl_widget = QFrame ()
67
107
llayout = QGridLayout ()
68
108
llayout .addWidget (QLabel ("Analysis type: " ), 0 , 0 , AR )
69
109
llayout .addWidget (self ._analysis_type_cb , 0 , 1 )
70
- llayout .addWidget (self ._pulse_resolved_cb , 1 , 1 )
71
- llayout .addWidget (self ._reset_btn , 2 , 0 , 1 , 2 )
72
- lwidget .setLayout (llayout )
73
-
74
- rwidget = QFrame ()
75
- rlayout = QGridLayout ()
76
- rlayout .addWidget (QLabel ("Bin range: " ), 1 , 0 , AR )
77
- rlayout .addWidget (self ._bin_range_le , 1 , 1 )
78
- rlayout .addWidget (QLabel ("# of bins: " ), 2 , 0 , AR )
79
- rlayout .addWidget (self ._n_bins_le , 2 , 1 )
80
- rwidget .setLayout (rlayout )
110
+ llayout .addWidget (self ._pulse_resolved_cb , 0 , 3 , AR )
111
+ llayout .addWidget (self ._reset_btn , 0 , 5 )
112
+ llayout .addWidget (QLabel ("Bin range: " ), 1 , 2 , AR )
113
+ llayout .addWidget (self ._bin_range_le , 1 , 3 )
114
+ llayout .addWidget (QLabel ("# of bins: " ), 1 , 4 , AR )
115
+ llayout .addWidget (self ._n_bins_le , 1 , 5 )
116
+ llayout .setContentsMargins (0 , 0 , 0 , 0 )
117
+ ctrl_widget .setLayout (llayout )
81
118
82
119
layout = QHBoxLayout ()
83
- layout .addWidget (lwidget , alignment = AT )
84
- layout .addWidget (rwidget , alignment = AT )
120
+ layout .addWidget (ctrl_widget , alignment = Qt . AlignTop )
121
+ layout .addWidget (self . _fitting )
85
122
self .setLayout (layout )
86
123
87
124
def initConnections (self ):
@@ -100,6 +137,9 @@ def initConnections(self):
100
137
101
138
self ._reset_btn .clicked .connect (mediator .onHistReset )
102
139
140
+ self ._fitting .fit_btn .clicked .connect (self .fit_curve_sgn )
141
+ self ._fitting .clear_btn .clicked .connect (self .clear_fitting_sgn )
142
+
103
143
def updateMetaData (self ):
104
144
"""Overload."""
105
145
self ._analysis_type_cb .currentTextChanged .emit (
@@ -127,3 +167,6 @@ def loadMetaData(self):
127
167
def resetAnalysisType (self ):
128
168
self ._analysis_type_cb .setCurrentText (
129
169
self ._analysis_types_inv [AnalysisType .UNDEFINED ])
170
+
171
+ def fit_curve (self , x , y ):
172
+ return self ._fitting .fit (x , y )
0 commit comments