Skip to content

Commit d363b6d

Browse files
committed
Some cleanup and simplifications
I removed the `use_physics_package` variable from `HexrdConfig()` because it could have been simplified by simply checking if the physics package existed. I also fixed a few issues and cleaned up a few things. Signed-off-by: Patrick Avery <[email protected]>
1 parent 4a7a949 commit d363b6d

10 files changed

+102
-79
lines changed

hexrdgui/absorption_correction_options_dialog.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,12 @@ def load_additional_materials(self):
4545
# FIXME: Update to use defaults once they've been added to HEXRD
4646
return
4747

48+
@property
49+
def any_detector_filters_applied(self):
50+
det_names = HexrdConfig().detector_names
51+
all_filters = [HexrdConfig().detector_filter(det) for det in det_names]
52+
return any(filter.thickness > 0 for filter in all_filters)
53+
4854
def update_gui(self):
4955
# Filter info is set per detector
5056
self.ui.detectors.addItems(HexrdConfig().detector_names)
@@ -79,7 +85,7 @@ def update_gui(self):
7985
self.ui.filter_material.setCurrentText(filter.material)
8086
self.ui.filter_density.setValue(filter.density)
8187
self.ui.filter_thickness.setValue(filter.thickness)
82-
self.ui.apply_filters.setChecked(filter.thickness > 0)
88+
self.ui.apply_filters.setChecked(self.any_detector_filters_applied)
8389
# COATING
8490
if coating.material not in self.mat_options:
8591
self.ui.coating_material_input.setText(coating.material)

hexrdgui/create_hedm_instrument.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ def create_hedm_instrument():
2020

2121
# Make sure that the physics package is included for instruments
2222
# that expect it
23-
if HexrdConfig().use_physics_package:
23+
if HexrdConfig().has_physics_package:
2424
iconfig['physics_package'] = HexrdConfig().physics_package
2525
if HexrdConfig().apply_absorption_correction:
2626
for det in HexrdConfig().detector_names:

hexrdgui/hexrd_config.py

Lines changed: 34 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
import hexrd.imageseries.save
1515
from hexrd.config.loader import NumPyIncludeLoader
1616
from hexrd.instrument import HEDMInstrument
17-
from hexrd.instrument.constants import PHYSICS_PACKAGE_DEFAULTS
17+
from hexrd.instrument.constants import PHYSICS_PACKAGE_DEFAULTS, PINHOLE_DEFAULTS
1818
from hexrd.instrument.physics_package import HEDPhysicsPackage
1919
from hexrd.material import load_materials_hdf5, save_materials_hdf5, Material
2020
from hexrd.rotations import RotMatEuler
@@ -27,9 +27,6 @@
2727
from hexrdgui import utils
2828
from hexrdgui.masking.constants import MaskType
2929
from hexrdgui.singletons import QSingleton
30-
from hexrdgui.utils.physics_package import (
31-
ask_to_create_physics_package_if_missing
32-
)
3330

3431
import hexrdgui.resources.calibration
3532
import hexrdgui.resources.indexing
@@ -329,7 +326,6 @@ def __init__(self):
329326
self._physics_package = None
330327
self._detector_coatings = {}
331328
self._instrument_rigid_body_params = {}
332-
self._use_physics_package = False
333329

334330
# Make sure that the matplotlib font size matches the application
335331
self.font_size = self.font_size
@@ -435,7 +431,6 @@ def _attributes_to_persist(self):
435431
('_instrument_rigid_body_params', {}),
436432
('recent_state_files', []),
437433
('apply_absorption_correction', False),
438-
('use_physics_package', False),
439434
('physics_package_dictified', None),
440435
('custom_polar_tth_distortion_object_serialized', None),
441436
('detector_coatings_dictified', {}),
@@ -556,8 +551,6 @@ def load_from_state(self, state):
556551
self.show_all_colormaps = self.show_all_colormaps == 'true'
557552
if not isinstance(self.apply_absorption_correction, bool):
558553
self.apply_absorption_correction = self.apply_absorption_correction == 'true'
559-
if not isinstance(self.use_physics_package, bool):
560-
self.use_physics_package = self.use_physics_package == 'true'
561554

562555
# This is None sometimes. Make sure it is an empty list instead.
563556
if self.recent_state_files is None:
@@ -708,7 +701,7 @@ def overlays_dictified(self, v):
708701
continue
709702

710703
if overlay_dict.get('tth_distortion_type') is not None:
711-
if not self.use_physics_package:
704+
if not self.has_physics_package:
712705
# We need to create a default physics package
713706
# This is for backward compatibility
714707
self.create_default_physics_package()
@@ -2440,7 +2433,7 @@ def custom_polar_tth_distortion_object_serialized(self):
24402433
def custom_polar_tth_distortion_object_serialized(self, v):
24412434
obj = None
24422435
if v is not None:
2443-
if not self.use_physics_package:
2436+
if not self.has_physics_package:
24442437
# This requires a physics package to deserialize
24452438
self.create_default_physics_package()
24462439

@@ -3049,54 +3042,55 @@ def apply_absorption_correction(self, v):
30493042
self._apply_absorption_correction = v
30503043
self.deep_rerender_needed.emit()
30513044

3052-
@property
3053-
def use_physics_package(self):
3054-
return self._use_physics_package
3055-
3056-
@use_physics_package.setter
3057-
def use_physics_package(self, v):
3058-
if v != self.use_physics_package:
3059-
self._use_physics_package = v
3060-
self.physics_package_modified.emit()
3061-
if self.use_physics_package:
3062-
self.create_default_physics_package()
3063-
else:
3064-
self.physics_package = None
3065-
30663045
@property
30673046
def physics_package_dictified(self):
3068-
if not self.use_physics_package:
3047+
if not self.has_physics_package:
30693048
return None
3049+
30703050
return self.physics_package.serialize()
30713051

30723052
@physics_package_dictified.setter
3073-
def physics_package_dictified(self, v):
3074-
self.update_physics_package(**v)
3053+
def physics_package_dictified(self, kwargs):
3054+
if not kwargs:
3055+
self.physics_package = None
3056+
return
3057+
3058+
# Set defaults if missing
3059+
kwargs = {
3060+
**PHYSICS_PACKAGE_DEFAULTS.HED,
3061+
**kwargs,
3062+
}
3063+
self.physics_package = HEDPhysicsPackage(**kwargs)
3064+
3065+
def update_physics_package(self, **kwargs):
3066+
self.physics_package_dictified = {
3067+
**self.physics_package_dictified,
3068+
**kwargs,
3069+
}
30753070

30763071
@property
30773072
def physics_package(self):
30783073
return self._physics_package
30793074

30803075
@physics_package.setter
30813076
def physics_package(self, value):
3082-
self._physics_package = value
3083-
self.use_physics_package = bool(value is not None)
3077+
if value != self._physics_package:
3078+
self._physics_package = value
3079+
self.physics_package_modified.emit()
30843080

3085-
def update_physics_package(self, **kwargs):
3086-
if self.physics_package is None:
3087-
all_kwargs = PHYSICS_PACKAGE_DEFAULTS.HED
3088-
all_kwargs.update(**kwargs)
3089-
self.physics_package = HEDPhysicsPackage(**all_kwargs)
3090-
self.physics_package.deserialize(**kwargs)
3091-
self.physics_package_modified.emit()
3081+
@property
3082+
def has_physics_package(self) -> bool:
3083+
return self.physics_package is not None
30923084

30933085
def create_default_physics_package(self):
3094-
self.physics_package = HEDPhysicsPackage(
3095-
**PHYSICS_PACKAGE_DEFAULTS.HED)
3096-
self.physics_package_modified.emit()
3086+
# Our default will be an HED Physics package with a pinhole
3087+
self.physics_package_dictified = {
3088+
**PHYSICS_PACKAGE_DEFAULTS.HED,
3089+
**PINHOLE_DEFAULTS.TARDIS,
3090+
}
30973091

30983092
def absorption_length(self):
3099-
if not ask_to_create_physics_package_if_missing():
3093+
if not self.has_physics_package:
31003094
raise ValueError(
31013095
f'Cannot calculate absorption length without physics package')
31023096
return self.physics_package.pinhole_absorption_length(

hexrdgui/main_window.py

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -308,8 +308,8 @@ def setup_connections(self):
308308
self.ui.action_edit_physics_package.triggered.connect(
309309
self.on_action_edit_physics_package_triggered
310310
)
311-
self.ui.action_apply_physics_package.toggled.connect(
312-
self.on_action_apply_physics_package_toggled
311+
self.ui.action_include_physics_package.toggled.connect(
312+
self.on_action_include_physics_package_toggled
313313
)
314314

315315
self.image_mode_widget.polar_show_snip1d.connect(
@@ -336,6 +336,8 @@ def setup_connections(self):
336336
self.update_mask_region_canvas)
337337
HexrdConfig().update_instrument_toolbox.connect(
338338
self.update_config_gui)
339+
HexrdConfig().physics_package_modified.connect(
340+
self.on_physics_package_modified)
339341

340342
ImageLoadManager().update_needed.connect(self.update_all)
341343
ImageLoadManager().new_images_loaded.connect(self.new_images_loaded)
@@ -378,6 +380,11 @@ def setup_connections(self):
378380
HexrdConfig().enable_canvas_focus_mode.connect(
379381
self.enable_canvas_focus_mode)
380382

383+
# Always assume Physics Package is needed for LLNL import
384+
self.llnl_import_tool_dialog.ui.complete.clicked.connect(
385+
lambda: self.on_action_include_physics_package_toggled(True)
386+
)
387+
381388
def on_state_loaded(self):
382389
self.update_action_check_states()
383390
self.update_action_enable_states()
@@ -397,7 +404,7 @@ def update_action_check_states(self):
397404
'action_show_all_colormaps': 'show_all_colormaps',
398405
'action_apply_absorption_correction':
399406
'apply_absorption_correction',
400-
'action_apply_physics_package': 'use_physics_package',
407+
'action_include_physics_package': 'has_physics_package',
401408
}
402409

403410
for cb_name, attr_name in checkbox_to_hexrd_config_mappings.items():
@@ -407,7 +414,7 @@ def update_action_check_states(self):
407414

408415
def update_action_enable_states(self):
409416
enabled_to_hexrd_config_mappings = {
410-
'action_edit_physics_package': 'use_physics_package',
417+
'action_edit_physics_package': 'has_physics_package',
411418
}
412419

413420
for en_name, attr_name in enabled_to_hexrd_config_mappings.items():
@@ -1560,10 +1567,6 @@ def on_action_hedm_import_tool_triggered(self):
15601567
def on_action_llnl_import_tool_triggered(self):
15611568
dialog = self.llnl_import_tool_dialog
15621569
dialog.show()
1563-
# Always assume Physics Package is needed for LLNL import
1564-
dialog.ui.complete.clicked.connect(
1565-
lambda: self.on_action_apply_physics_package_toggled(True)
1566-
)
15671570

15681571
def on_action_image_stack_triggered(self):
15691572
self.image_stack_dialog.show()
@@ -1664,24 +1667,27 @@ def on_action_open_preconfigured_instrument_file_triggered(self):
16641667
def on_action_edit_physics_package_triggered(self):
16651668
self.physics_package_manager_dialog.show()
16661669

1667-
def on_action_apply_physics_package_toggled(self, b):
1670+
def on_action_include_physics_package_toggled(self, b):
16681671
self.ui.action_edit_physics_package.setEnabled(b)
1669-
HexrdConfig().use_physics_package = b
1672+
if b and not HexrdConfig().has_physics_package:
1673+
HexrdConfig().create_default_physics_package()
1674+
16701675
if not b:
16711676
# Just turn it off and return
1677+
HexrdConfig().physics_package = None
16721678
return
16731679

16741680
# Get the user to select the physics package options
16751681
dialog = self.physics_package_manager_dialog
1676-
dialog.show()
1682+
dialog.show(delete_if_canceled=True)
16771683

1678-
def _cancel():
1679-
# Canceled... uncheck the action.
1680-
self.ui.action_apply_physics_package.setChecked(False)
1681-
self.ui.action_edit_physics_package.setEnabled(False)
1682-
HexrdConfig().use_physics_package = False
1684+
def on_physics_package_modified(self):
1685+
enable = HexrdConfig().has_physics_package
1686+
w = self.ui.action_include_physics_package
1687+
with block_signals(w):
1688+
w.setChecked(enable)
16831689

1684-
dialog.ui.rejected.connect(_cancel)
1690+
self.ui.action_edit_physics_package.setEnabled(enable)
16851691

16861692
def action_apply_absorption_correction_toggled(self, b):
16871693
if not b:

hexrdgui/overlays/powder_overlay.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,6 @@
1717
from hexrdgui.utils.conversions import (
1818
angles_to_cart, angles_to_stereo, cart_to_angles
1919
)
20-
from hexrdgui.utils.physics_package import (
21-
ask_to_create_physics_package_if_missing
22-
)
2320
from hexrdgui.utils.tth_distortion import apply_tth_distortion_if_needed
2421

2522

@@ -86,9 +83,9 @@ def validate_tth_distortion_kwargs(self):
8683
from hexrdgui.hexrd_config import HexrdConfig
8784

8885
if self.tth_distortion_type is not None:
89-
if not ask_to_create_physics_package_if_missing():
86+
if not HexrdConfig().has_physics_package:
9087
# This will require a physics package
91-
return
88+
HexrdConfig().create_default_physics_package()
9289

9390
if self.tth_distortion_type == 'SampleLayerDistortion':
9491
# We added pinhole_radius later. Set a default if it is missing.

hexrdgui/physics_package_manager_dialog.py

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ def __init__(self, parent=None):
2525
self.ui = loader.load_file('physics_package_manager_dialog.ui', parent)
2626
self.additional_materials = {}
2727
self.instrument_type = None
28+
self.delete_if_canceled = False
2829

2930
canvas = FigureCanvas(Figure(tight_layout=True))
3031
# Get the canvas to take up the majority of the screen most of the time
@@ -36,7 +37,8 @@ def __init__(self, parent=None):
3637
self.update_instrument_type()
3738
self.setup_connections()
3839

39-
def show(self):
40+
def show(self, delete_if_canceled=False):
41+
self.delete_if_canceled = delete_if_canceled
4042
self.setup_form()
4143
self.ui.show()
4244

@@ -78,6 +80,18 @@ def setup_connections(self):
7880
HexrdConfig().detectors_changed.connect(
7981
self.initialize_detector_coatings)
8082

83+
self.ui.accepted.connect(self.on_accepted)
84+
self.ui.rejected.connect(self.on_rejected)
85+
86+
def on_accepted(self):
87+
self.delete_if_canceled = False
88+
89+
def on_rejected(self):
90+
if self.delete_if_canceled:
91+
HexrdConfig().physics_package = None
92+
93+
self.delete_if_canceled = False
94+
8195
def initialize_detector_coatings(self):
8296
# Reset detector coatings to make sure they're in sync w/ current dets
8397
HexrdConfig().detector_coatings_dictified = {}
@@ -133,7 +147,7 @@ def setup_form(self):
133147
w.insertSeparator(2 + len(custom_mats))
134148

135149
# Set default values
136-
if not HexrdConfig().use_physics_package:
150+
if not HexrdConfig().has_physics_package:
137151
return
138152

139153
physics = HexrdConfig().physics_package
@@ -180,6 +194,7 @@ def toggle_pinhole(self, enabled):
180194

181195
def material_changed(self, index, category):
182196
material = self.material_selectors[category].currentText()
197+
183198
self.material_inputs[category].setEnabled(index == 0)
184199
self.density_inputs[category].setEnabled(index == 0)
185200
if category == 'pinhole':
@@ -196,7 +211,7 @@ def material_changed(self, index, category):
196211
else:
197212
self.density_inputs[category].setValue(0.0)
198213

199-
if HexrdConfig().use_physics_package:
214+
if HexrdConfig().has_physics_package:
200215
self.ui.absorption_length.setValue(HexrdConfig().absorption_length())
201216

202217
def accept_changes(self):

hexrdgui/pinhole_correction_editor.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,11 @@ def correction_kwargs(self, v):
154154
if v is None:
155155
return
156156

157+
if not HexrdConfig().has_physics_package:
158+
return
159+
160+
physics = HexrdConfig().physics_package
161+
157162
vp = v.copy()
158163
# These units are in mm, but we display in micrometers
159164
for key, value in v.items():
@@ -164,10 +169,6 @@ def correction_kwargs(self, v):
164169

165170
vp[key] = value * multiplier
166171

167-
if not ask_to_create_physics_package_if_missing():
168-
return
169-
physics = HexrdConfig().physics_package
170-
171172
# Values are (key, default)
172173
values = {
173174
'sample_layer_standoff': ('layer_standoff',
@@ -408,7 +409,7 @@ def enter_manually_idx(self):
408409
return 0
409410

410411
def on_rygg_absorption_length_selector_changed(self):
411-
if not ask_to_create_physics_package_if_missing():
412+
if not HexrdConfig().has_physics_package:
412413
# Cannot update
413414
return
414415

0 commit comments

Comments
 (0)