11
11
12
12
from PyQt5 .QtCore import Qt
13
13
from PyQt5 .QtGui import QDoubleValidator , QIntValidator
14
- from PyQt5 .QtWidgets import QComboBox , QGridLayout , QLabel
14
+ from PyQt5 .QtWidgets import (
15
+ QCheckBox , QComboBox , QFrame , QGridLayout , QHBoxLayout , QLabel
16
+ )
15
17
16
18
from .base_ctrl_widgets import _AbstractCtrlWidget
17
- from .smart_widgets import SmartBoundaryLineEdit , SmartLineEdit
19
+ from .smart_widgets import (
20
+ SmartBoundaryLineEdit , SmartSliceLineEdit , SmartLineEdit
21
+ )
18
22
from ..gui_helpers import invert_dict
19
23
from ...algorithms import compute_q
20
24
from ...config import config , list_azimuthal_integ_methods , Normalizer
21
25
from ...database import Metadata as mt
22
26
23
27
_DEFAULT_AZIMUTHAL_INTEG_POINTS = 512
28
+ _DEFAULT_PEAK_PROMINENCE = 100
24
29
25
30
26
31
def _estimate_q_range ():
@@ -90,56 +95,85 @@ def __init__(self, *args, **kwargs):
90
95
self ._auc_range_le = SmartBoundaryLineEdit ("0, Inf" )
91
96
self ._fom_integ_range_le = SmartBoundaryLineEdit ("0, Inf" )
92
97
98
+ self ._peak_finding_cb = QCheckBox ("Peak finding" )
99
+ self ._peak_finding_cb .setChecked (True )
100
+ self ._peak_prominence_le = SmartLineEdit (str (_DEFAULT_PEAK_PROMINENCE ))
101
+ self ._peak_prominence_le .setValidator (QIntValidator ())
102
+ self ._peak_slicer_le = SmartSliceLineEdit (":" )
103
+
104
+ self ._non_reconfigurable_widgets = [
105
+ ]
106
+
93
107
self .initUI ()
94
108
self .initConnections ()
95
109
96
110
self .setFixedHeight (self .minimumSizeHint ().height ())
97
111
98
112
def initUI (self ):
99
113
"""Override."""
100
- layout = QGridLayout ()
114
+ layout = QHBoxLayout ()
101
115
AR = Qt .AlignRight
102
116
117
+ param_widget = QFrame ()
118
+ param_layout = QGridLayout ()
103
119
row = 0
104
- layout .addWidget (QLabel ("Cx (pixel): " ), row , 0 , AR )
105
- layout .addWidget (self ._cx_le , row , 1 )
106
- layout .addWidget (QLabel ("Cy (pixel): " ), row , 2 , AR )
107
- layout .addWidget (self ._cy_le , row , 3 )
108
- layout .addWidget (QLabel ("Pixel x (m): " ), row , 4 , AR )
109
- layout .addWidget (self ._px_le , row , 5 )
110
- layout .addWidget (QLabel ("Pixel y (m): " ), row , 6 , AR )
111
- layout .addWidget (self ._py_le , row , 7 )
120
+ param_layout .addWidget (QLabel ("Cx (pixel): " ), row , 0 , AR )
121
+ param_layout .addWidget (self ._cx_le , row , 1 )
122
+ param_layout .addWidget (QLabel ("Cy (pixel): " ), row , 2 , AR )
123
+ param_layout .addWidget (self ._cy_le , row , 3 )
124
+ param_layout .addWidget (QLabel ("Pixel x (m): " ), row , 4 , AR )
125
+ param_layout .addWidget (self ._px_le , row , 5 )
126
+ param_layout .addWidget (QLabel ("Pixel y (m): " ), row , 6 , AR )
127
+ param_layout .addWidget (self ._py_le , row , 7 )
112
128
113
129
row += 1
114
- layout .addWidget (QLabel ("Sample distance (m): " ), row , 0 , AR )
115
- layout .addWidget (self ._sample_dist_le , row , 1 )
116
- layout .addWidget (QLabel ("Rotation x (rad): " ), row , 2 , AR )
117
- layout .addWidget (self ._rx_le , row , 3 )
118
- layout .addWidget (QLabel ("Rotation y (rad): " ), row , 4 , AR )
119
- layout .addWidget (self ._ry_le , row , 5 )
120
- layout .addWidget (QLabel ("Rotation z (rad): " ), row , 6 , AR )
121
- layout .addWidget (self ._rz_le , row , 7 )
130
+ param_layout .addWidget (QLabel ("Sample distance (m): " ), row , 0 , AR )
131
+ param_layout .addWidget (self ._sample_dist_le , row , 1 )
132
+ param_layout .addWidget (QLabel ("Rotation x (rad): " ), row , 2 , AR )
133
+ param_layout .addWidget (self ._rx_le , row , 3 )
134
+ param_layout .addWidget (QLabel ("Rotation y (rad): " ), row , 4 , AR )
135
+ param_layout .addWidget (self ._ry_le , row , 5 )
136
+ param_layout .addWidget (QLabel ("Rotation z (rad): " ), row , 6 , AR )
137
+ param_layout .addWidget (self ._rz_le , row , 7 )
122
138
123
139
row += 1
124
- layout .addWidget (QLabel ("Photon energy (keV): " ), row , 0 , AR )
125
- layout .addWidget (self ._photon_energy_le , row , 1 )
126
- layout .addWidget (QLabel ("Integ method: " ), row , 2 , AR )
127
- layout .addWidget (self ._integ_method_cb , row , 3 )
128
- layout .addWidget (QLabel ("Integ points: " ), row , 4 , AR )
129
- layout .addWidget (self ._integ_pts_le , row , 5 )
130
- layout .addWidget (QLabel ("Integ range (1/A): " ), row , 6 , AR )
131
- layout .addWidget (self ._integ_range_le , row , 7 )
140
+ param_layout .addWidget (QLabel ("Photon energy (keV): " ), row , 0 , AR )
141
+ param_layout .addWidget (self ._photon_energy_le , row , 1 )
142
+ param_layout .addWidget (QLabel ("Integ method: " ), row , 2 , AR )
143
+ param_layout .addWidget (self ._integ_method_cb , row , 3 )
144
+ param_layout .addWidget (QLabel ("Integ points: " ), row , 4 , AR )
145
+ param_layout .addWidget (self ._integ_pts_le , row , 5 )
146
+ param_layout .addWidget (QLabel ("Integ range (1/A): " ), row , 6 , AR )
147
+ param_layout .addWidget (self ._integ_range_le , row , 7 )
132
148
133
149
row += 1
134
- layout .addWidget (QLabel ("Norm: " ), row , 0 , AR )
135
- layout .addWidget (self ._norm_cb , row , 1 )
136
- layout .addWidget (QLabel ("AUC range (1/A): " ), row , 2 , AR )
137
- layout .addWidget (self ._auc_range_le , row , 3 )
138
- layout .addWidget (QLabel ("FOM range (1/A): " ), row , 4 , AR )
139
- layout .addWidget (self ._fom_integ_range_le , row , 5 )
140
-
150
+ param_layout .addWidget (QLabel ("Norm: " ), row , 0 , AR )
151
+ param_layout .addWidget (self ._norm_cb , row , 1 )
152
+ param_layout .addWidget (QLabel ("AUC range (1/A): " ), row , 2 , AR )
153
+ param_layout .addWidget (self ._auc_range_le , row , 3 )
154
+ param_layout .addWidget (QLabel ("FOM range (1/A): " ), row , 4 , AR )
155
+ param_layout .addWidget (self ._fom_integ_range_le , row , 5 )
156
+
157
+ param_widget .setLayout (param_layout )
158
+
159
+ algo_widget = QFrame ()
160
+ algo_layout = QGridLayout ()
161
+ algo_layout .addWidget (self ._peak_finding_cb , 0 , 0 , 1 , 2 )
162
+ algo_layout .addWidget (QLabel ("Peak prominence: " ), 1 , 0 , AR )
163
+ algo_layout .addWidget (self ._peak_prominence_le , 1 , 1 )
164
+ algo_layout .addWidget (QLabel ("Peak slicer: " ), 2 , 0 , AR )
165
+ algo_layout .addWidget (self ._peak_slicer_le , 2 , 1 )
166
+ algo_widget .setLayout (algo_layout )
167
+
168
+ layout .addWidget (param_widget )
169
+ layout .addWidget (algo_widget )
170
+ layout .setContentsMargins (1 , 1 , 1 , 1 )
141
171
self .setLayout (layout )
142
172
173
+ self .setFrameStyle (QFrame .NoFrame )
174
+ param_widget .setFrameStyle (QFrame .StyledPanel )
175
+ algo_widget .setFrameStyle (QFrame .StyledPanel )
176
+
143
177
def initConnections (self ):
144
178
"""Override."""
145
179
mediator = self ._mediator
@@ -178,6 +212,15 @@ def initConnections(self):
178
212
self ._fom_integ_range_le .value_changed_sgn .connect (
179
213
mediator .onAiFomIntegRangeChange )
180
214
215
+ self ._peak_finding_cb .toggled .connect (
216
+ mediator .onAiPeakFindingChange )
217
+
218
+ self ._peak_prominence_le .value_changed_sgn .connect (
219
+ mediator .onAiPeakProminenceChange )
220
+
221
+ self ._peak_slicer_le .value_changed_sgn .connect (
222
+ mediator .onAiPeakSlicerChange )
223
+
181
224
def updateMetaData (self ):
182
225
"""Override."""
183
226
self ._photon_energy_le .returnPressed .emit ()
@@ -203,6 +246,10 @@ def updateMetaData(self):
203
246
204
247
self ._fom_integ_range_le .returnPressed .emit ()
205
248
249
+ self ._peak_finding_cb .toggled .emit (self ._peak_finding_cb .isChecked ())
250
+ self ._peak_prominence_le .returnPressed .emit ()
251
+ self ._peak_slicer_le .returnPressed .emit ()
252
+
206
253
return True
207
254
208
255
def loadMetaData (self ):
@@ -223,3 +270,8 @@ def loadMetaData(self):
223
270
self ._available_norms_inv [int (cfg ['normalizer' ])])
224
271
self ._auc_range_le .setText (cfg ['auc_range' ][1 :- 1 ])
225
272
self ._fom_integ_range_le .setText (cfg ['fom_integ_range' ][1 :- 1 ])
273
+
274
+ self ._updateWidgetValue (self ._peak_finding_cb , cfg , "peak_finding" )
275
+ self ._updateWidgetValue (
276
+ self ._peak_prominence_le , cfg , "peak_prominence" )
277
+ self ._updateWidgetValue (self ._peak_slicer_le , cfg , "peak_slicer" )
0 commit comments