Skip to content

Commit 1946cd0

Browse files
authored
Merge pull request #1826 from HEXRD/absorption-correction
Fix filter options for absorption correction
2 parents 1d8781d + 1d37abc commit 1946cd0

File tree

1 file changed

+52
-21
lines changed

1 file changed

+52
-21
lines changed

hexrdgui/absorption_correction_options_dialog.py

Lines changed: 52 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
1+
from hexrdgui.create_hedm_instrument import create_hedm_instrument
12
from hexrdgui.hexrd_config import HexrdConfig
23
from hexrdgui.ui_loader import UiLoader
4+
from hexrdgui.utils import block_signals
5+
6+
37

48

59
class AbsorptionCorrectionOptionsDialog:
@@ -10,9 +14,9 @@ def __init__(self, parent=None):
1014
parent)
1115

1216
self.additional_materials = {}
13-
self.filters = {n: {} for n in HexrdConfig().detector_names}
1417
self.mat_options = []
1518

19+
self.get_initial_filter_values()
1620
self.load_additional_materials()
1721
self.setup_connections()
1822
self.update_gui()
@@ -108,7 +112,10 @@ def update_gui(self):
108112
def setup_connections(self):
109113
for k, w in self.material_selectors.items():
110114
w.currentIndexChanged.connect(
111-
lambda index, k=k: self.material_changed(index, k))
115+
lambda index, k=k: self.material_changed(k, index=index))
116+
for k, w in self.material_inputs.items():
117+
w.textChanged.connect(
118+
lambda text, k=k: self.material_changed(k, text=text))
112119
self.ui.filter_density.valueChanged.connect(self.filter_info_changed)
113120
self.ui.filter_thickness.valueChanged.connect(self.filter_info_changed)
114121
self.ui.detectors.currentTextChanged.connect(self.detector_changed)
@@ -122,7 +129,7 @@ def setup_connections(self):
122129
def exec(self):
123130
return self.ui.exec()
124131

125-
def material_changed(self, index, category):
132+
def material_changed(self, category, index=0, text=None):
126133
selected = self.material_selectors[category].currentText()
127134
self.material_inputs[category].setEnabled(index == 0)
128135
self.density_inputs[category].setEnabled(index == 0)
@@ -137,34 +144,42 @@ def material_changed(self, index, category):
137144
self.density_inputs[category].setValue(density)
138145
if category == 'filter':
139146
det_name = self.ui.detectors.currentText()
140-
self.filters.setdefault(det_name, {})
141-
self.filters[det_name]['material'] = material
147+
self.filters[det_name]['material'] = material.name
142148
else:
143149
self.density_inputs[category].setValue(0.0)
150+
if category == 'filter':
151+
det_name = self.ui.detectors.currentText()
152+
self.filters[det_name]['material'] = material.name if index > 0 else text
144153

145154
def filter_info_changed(self, new_value=None, det_name=None):
146155
if det_name is None:
147156
det_name = self.ui.detectors.currentText()
148-
self.filters.setdefault(det_name, {})
149157
self.filters[det_name]['density'] = self.ui.filter_density.value()
150158
self.filters[det_name]['thickness'] = self.ui.filter_thickness.value()
151159

152160
def detector_changed(self, new_det):
153-
filter = HexrdConfig().detector_filter(new_det)
154-
if filter is None:
155-
# Make sure the filter exists
156-
HexrdConfig().update_detector_filter(new_det)
157-
filter = HexrdConfig().detector_filter(new_det)
158-
159-
mat = self.filters[new_det].get('material', filter.material)
160-
if filter.material not in self.mat_options:
161-
self.ui.filter_material_input.setText(mat)
162-
else:
163-
self.ui.filter_material.setCurrentText(mat)
164-
density = self.filters[new_det].get('density', filter.density)
165-
self.ui.filter_density.setValue(density)
166-
thickness = self.filters[new_det].get('thickness', filter.thickness)
167-
self.ui.filter_thickness.setValue(thickness)
161+
filter_widgets = [
162+
self.ui.filter_material,
163+
self.ui.filter_material_input,
164+
self.ui.filter_density,
165+
self.ui.filter_thickness
166+
]
167+
168+
with block_signals(*filter_widgets):
169+
# Update material inputs
170+
mat = self.filters[new_det]['material']
171+
custom_mat = mat not in self.mat_options
172+
self.ui.filter_material.setCurrentText(
173+
mat if not custom_mat else 'Enter Manually'
174+
)
175+
self.ui.filter_material_input.setText(mat if custom_mat else '')
176+
self.ui.filter_material_input.setEnabled(custom_mat)
177+
self.ui.filter_density.setEnabled(custom_mat)
178+
# Update filter inputs
179+
self.ui.filter_density.setValue(self.filters[new_det]['density'])
180+
self.ui.filter_thickness.setValue(
181+
self.filters[new_det]['thickness']
182+
)
168183

169184
def accept_changes(self):
170185
materials = {}
@@ -221,3 +236,19 @@ def toggle_apply_phosphor(self, checked):
221236
self.ui.phosphor_thickness.setEnabled(checked)
222237
self.ui.phosphor_readout_length.setEnabled(checked)
223238
self.ui.phosphor_pre_U0.setEnabled(checked)
239+
240+
def get_initial_filter_values(self):
241+
# Use the current value, or if none, use the default
242+
self.filters = {}
243+
instr = create_hedm_instrument()
244+
for det in HexrdConfig().detector_names:
245+
filter = HexrdConfig().detector_filter(det)
246+
print(f'config filter {det}: {filter.material} {filter.density} {filter.thickness}')
247+
if filter is None:
248+
filter = instr.detectors[det].filter
249+
print(f'default filter {det}: {filter.material} {filter.density} {filter.thickness}')
250+
self.filters[det] = {
251+
'material': filter.material,
252+
'density': filter.density,
253+
'thickness': filter.thickness
254+
}

0 commit comments

Comments
 (0)