1+ from hexrdgui .create_hedm_instrument import create_hedm_instrument
12from hexrdgui .hexrd_config import HexrdConfig
23from hexrdgui .ui_loader import UiLoader
4+ from hexrdgui .utils import block_signals
5+
6+
37
48
59class 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