diff --git a/hexrdgui/absorption_correction_options_dialog.py b/hexrdgui/absorption_correction_options_dialog.py
index db2145e2d..f72111c71 100644
--- a/hexrdgui/absorption_correction_options_dialog.py
+++ b/hexrdgui/absorption_correction_options_dialog.py
@@ -1,10 +1,6 @@
-import h5py
-
from hexrdgui.hexrd_config import HexrdConfig
from hexrdgui.ui_loader import UiLoader
-from hexrd.material import _angstroms, _kev, Material
-
class AbsorptionCorrectionOptionsDialog:
@@ -49,6 +45,12 @@ def load_additional_materials(self):
# FIXME: Update to use defaults once they've been added to HEXRD
return
+ @property
+ def any_detector_filters_applied(self):
+ det_names = HexrdConfig().detector_names
+ all_filters = [HexrdConfig().detector_filter(det) for det in det_names]
+ return any(filter.thickness > 0 for filter in all_filters)
+
def update_gui(self):
# Filter info is set per detector
self.ui.detectors.addItems(HexrdConfig().detector_names)
@@ -65,10 +67,17 @@ def update_gui(self):
w.insertSeparator(2 + len(custom_mats))
# Set default values
- filter = HexrdConfig().detector_filter(self.ui.detectors.currentText())
- coating = HexrdConfig().detector_coating(
- self.ui.detectors.currentText())
- phosphor = HexrdConfig().detector_phosphor(self.ui.detectors.currentText())
+ det = self.ui.detectors.currentText()
+ if (filter := HexrdConfig().detector_filter(det)) is None:
+ HexrdConfig().update_detector_filter(det)
+ filter = HexrdConfig().detector_filter(det)
+ if (coating := HexrdConfig().detector_coating(det)) is None:
+ HexrdConfig().update_detector_coating(det)
+ coating = HexrdConfig().detector_coating(det)
+ if (phosphor := HexrdConfig().detector_phosphor(det)) is None:
+ HexrdConfig().update_detector_phosphor(det)
+ phosphor = HexrdConfig().detector_phosphor(det)
+
# FILTER
if filter.material not in self.mat_options:
self.ui.filter_material_input.setText(filter.material)
@@ -76,6 +85,7 @@ def update_gui(self):
self.ui.filter_material.setCurrentText(filter.material)
self.ui.filter_density.setValue(filter.density)
self.ui.filter_thickness.setValue(filter.thickness)
+ self.ui.apply_filters.setChecked(self.any_detector_filters_applied)
# COATING
if coating.material not in self.mat_options:
self.ui.coating_material_input.setText(coating.material)
@@ -83,6 +93,7 @@ def update_gui(self):
self.ui.coating_material.setCurrentText(coating.material)
self.ui.coating_density.setValue(coating.density)
self.ui.coating_thickness.setValue(coating.thickness)
+ self.ui.apply_coating.setChecked(coating.thickness > 0)
# PHOSPHOR
if phosphor.material not in self.mat_options:
self.ui.phosphor_material_input.setText(phosphor.material)
@@ -90,6 +101,7 @@ def update_gui(self):
self.ui.phosphor_material.setCurrentText(phosphor.material)
self.ui.phosphor_density.setValue(phosphor.density)
self.ui.phosphor_thickness.setValue(phosphor.thickness)
+ self.ui.apply_phosphor.setChecked(phosphor.thickness > 0)
self.ui.phosphor_readout_length.setValue(phosphor.readout_length)
self.ui.phosphor_pre_U0.setValue(phosphor.pre_U0)
@@ -103,6 +115,9 @@ def setup_connections(self):
self.ui.button_box.accepted.connect(self.accept_changes)
self.ui.button_box.accepted.connect(self.ui.accept)
self.ui.button_box.rejected.connect(self.ui.reject)
+ self.ui.apply_filters.toggled.connect(self.toggle_apply_filters)
+ self.ui.apply_coating.toggled.connect(self.toggle_apply_coating)
+ self.ui.apply_phosphor.toggled.connect(self.toggle_apply_phosphor)
def exec(self):
return self.ui.exec()
@@ -127,8 +142,9 @@ def material_changed(self, index, category):
else:
self.density_inputs[category].setValue(0.0)
- def filter_info_changed(self):
- det_name = self.ui.detectors.currentText()
+ def filter_info_changed(self, new_value=None, det_name=None):
+ if det_name is None:
+ det_name = self.ui.detectors.currentText()
self.filters.setdefault(det_name, {})
self.filters[det_name]['density'] = self.ui.filter_density.value()
self.filters[det_name]['thickness'] = self.ui.filter_thickness.value()
@@ -173,3 +189,35 @@ def accept_changes(self):
density=self.ui.phosphor_density.value(),
thickness=self.ui.phosphor_thickness.value()
)
+
+ def toggle_apply_filters(self, checked):
+ if not checked:
+ self.ui.filter_thickness.setValue(0.0)
+ for det in HexrdConfig().detector_names:
+ self.filter_info_changed(det_name=det)
+ self.ui.detectors.setEnabled(checked)
+ self.ui.filter_material.setEnabled(checked)
+ index = self.ui.filter_material.currentIndex()
+ self.ui.filter_material_input.setEnabled(checked and index == 0)
+ self.ui.filter_density.setEnabled(checked)
+ self.ui.filter_thickness.setEnabled(checked)
+
+ def toggle_apply_coating(self, checked):
+ if not checked:
+ self.ui.coating_thickness.setValue(0.0)
+ self.ui.coating_material.setEnabled(checked)
+ index = self.ui.coating_material.currentIndex()
+ self.ui.coating_material_input.setEnabled(checked and index == 0)
+ self.ui.coating_density.setEnabled(checked)
+ self.ui.coating_thickness.setEnabled(checked)
+
+ def toggle_apply_phosphor(self, checked):
+ if not checked:
+ self.ui.phosphor_thickness.setValue(0.0)
+ self.ui.phosphor_material.setEnabled(checked)
+ index = self.ui.phosphor_material.currentIndex()
+ self.ui.phosphor_material_input.setEnabled(checked and index == 0)
+ self.ui.phosphor_density.setEnabled(checked)
+ self.ui.phosphor_thickness.setEnabled(checked)
+ self.ui.phosphor_readout_length.setEnabled(checked)
+ self.ui.phosphor_pre_U0.setEnabled(checked)
diff --git a/hexrdgui/create_hedm_instrument.py b/hexrdgui/create_hedm_instrument.py
index ffad161a4..43bbff78a 100644
--- a/hexrdgui/create_hedm_instrument.py
+++ b/hexrdgui/create_hedm_instrument.py
@@ -20,15 +20,16 @@ def create_hedm_instrument():
# Make sure that the physics package is included for instruments
# that expect it
- if HexrdConfig().physics_package is not None:
+ if HexrdConfig().has_physics_package:
iconfig['physics_package'] = HexrdConfig().physics_package
- for det in HexrdConfig().detector_names:
- iconfig['detectors'][det]['filter'] = (
- HexrdConfig().detector_filter(det))
- iconfig['detectors'][det]['coating'] = (
- HexrdConfig().detector_coating(det))
- iconfig['detectors'][det]['phosphor'] = (
- HexrdConfig().detector_phosphor(det))
+ if HexrdConfig().apply_absorption_correction:
+ for det in HexrdConfig().detector_names:
+ iconfig['detectors'][det]['filter'] = (
+ HexrdConfig().detector_filter(det))
+ iconfig['detectors'][det]['coating'] = (
+ HexrdConfig().detector_coating(det))
+ iconfig['detectors'][det]['phosphor'] = (
+ HexrdConfig().detector_phosphor(det))
kwargs = {
'instrument_config': iconfig,
diff --git a/hexrdgui/hexrd_config.py b/hexrdgui/hexrd_config.py
index b9b4488fa..409064e5b 100644
--- a/hexrdgui/hexrd_config.py
+++ b/hexrdgui/hexrd_config.py
@@ -14,7 +14,7 @@
import hexrd.imageseries.save
from hexrd.config.loader import NumPyIncludeLoader
from hexrd.instrument import HEDMInstrument
-from hexrd.instrument.constants import PHYSICS_PACKAGE_DEFAULTS
+from hexrd.instrument.constants import PHYSICS_PACKAGE_DEFAULTS, PINHOLE_DEFAULTS
from hexrd.instrument.physics_package import HEDPhysicsPackage
from hexrd.material import load_materials_hdf5, save_materials_hdf5, Material
from hexrd.rotations import RotMatEuler
@@ -27,7 +27,6 @@
from hexrdgui import utils
from hexrdgui.masking.constants import MaskType
from hexrdgui.singletons import QSingleton
-from hexrdgui.utils.guess_instrument_type import guess_instrument_type
import hexrdgui.resources.calibration
import hexrdgui.resources.indexing
@@ -596,7 +595,7 @@ def set_overlays():
def set_physics_and_coatings():
pp = state.get('physics_package_dictified', None)
self.physics_package_dictified = pp if pp is not None else {}
- dc = state.get('detector_coatings_dictified')
+ dc = state.get('detector_coatings_dictified', None)
self.detector_coatings_dictified = dc if dc is not None else {}
if 'detector_coatings_dictified' in state:
@@ -702,7 +701,7 @@ def overlays_dictified(self, v):
continue
if overlay_dict.get('tth_distortion_type') is not None:
- if self.physics_package is None:
+ if not self.has_physics_package:
# We need to create a default physics package
# This is for backward compatibility
self.create_default_physics_package()
@@ -2434,7 +2433,7 @@ def custom_polar_tth_distortion_object_serialized(self):
def custom_polar_tth_distortion_object_serialized(self, v):
obj = None
if v is not None:
- if self.physics_package is None:
+ if not self.has_physics_package:
# This requires a physics package to deserialize
self.create_default_physics_package()
@@ -3045,37 +3044,53 @@ def apply_absorption_correction(self, v):
@property
def physics_package_dictified(self):
- if self.physics_package is None:
+ if not self.has_physics_package:
return None
+
return self.physics_package.serialize()
@physics_package_dictified.setter
- def physics_package_dictified(self, v):
- instr_type = guess_instrument_type(self.detector_names)
- self.update_physics_package(instr_type, **v)
+ def physics_package_dictified(self, kwargs):
+ if not kwargs:
+ self.physics_package = None
+ return
+
+ # Set defaults if missing
+ kwargs = {
+ **PHYSICS_PACKAGE_DEFAULTS.HED,
+ **kwargs,
+ }
+ self.physics_package = HEDPhysicsPackage(**kwargs)
+
+ def update_physics_package(self, **kwargs):
+ self.physics_package_dictified = {
+ **self.physics_package_dictified,
+ **kwargs,
+ }
@property
def physics_package(self):
return self._physics_package
- def update_physics_package(self, instr_type=None, **kwargs):
- if instr_type not in ('TARDIS', 'PXRDIP'):
- self._physics_package = None
- elif self.physics_package is None:
- all_kwargs = PHYSICS_PACKAGE_DEFAULTS.HED
- all_kwargs.update(**kwargs)
- self._physics_package = HEDPhysicsPackage(**all_kwargs)
- else:
- self._physics_package.deserialize(**kwargs)
- self.physics_package_modified.emit()
+ @physics_package.setter
+ def physics_package(self, value):
+ if value != self._physics_package:
+ self._physics_package = value
+ self.physics_package_modified.emit()
+
+ @property
+ def has_physics_package(self) -> bool:
+ return self.physics_package is not None
def create_default_physics_package(self):
- self._physics_package = HEDPhysicsPackage(
- **PHYSICS_PACKAGE_DEFAULTS.HED)
- self.physics_package_modified.emit()
+ # Our default will be an HED Physics package with a pinhole
+ self.physics_package_dictified = {
+ **PHYSICS_PACKAGE_DEFAULTS.HED,
+ **PINHOLE_DEFAULTS.TARDIS,
+ }
def absorption_length(self):
- if self._physics_package is None:
+ if not self.has_physics_package:
raise ValueError(
f'Cannot calculate absorption length without physics package')
return self.physics_package.pinhole_absorption_length(
@@ -3129,6 +3144,8 @@ def detector_filter(self, det_name):
return self._detector_coatings[det_name].get('filter', None)
def update_detector_filter(self, det_name, **kwargs):
+ if det_name not in self.detector_names:
+ return None
self._set_detector_coatings('filter')
filter = self._detector_coatings[det_name]['filter']
filter.deserialize(**kwargs)
@@ -3138,6 +3155,8 @@ def detector_coating(self, det_name):
return self._detector_coatings[det_name].get('coating', None)
def update_detector_coating(self, det_name, **kwargs):
+ if det_name not in self.detector_names:
+ return None
self._set_detector_coatings('coating')
coating = self._detector_coatings[det_name]['coating']
coating.deserialize(**kwargs)
@@ -3147,6 +3166,8 @@ def detector_phosphor(self, det_name):
return self._detector_coatings[det_name].get('phosphor', None)
def update_detector_phosphor(self, det_name, **kwargs):
+ if det_name not in self.detector_names:
+ return None
self._set_detector_coatings('phosphor')
phosphor = self._detector_coatings[det_name]['phosphor']
phosphor.deserialize(**kwargs)
diff --git a/hexrdgui/llnl_import_tool_dialog.py b/hexrdgui/llnl_import_tool_dialog.py
index a09e93dac..9d6e12d34 100644
--- a/hexrdgui/llnl_import_tool_dialog.py
+++ b/hexrdgui/llnl_import_tool_dialog.py
@@ -36,7 +36,7 @@ class LLNLImportToolDialog(QObject):
cancel_workflow = Signal()
- def __init__(self, cmap=None, physics_package_manager=None, parent=None):
+ def __init__(self, cmap=None, parent=None):
super().__init__(parent)
loader = UiLoader()
@@ -59,7 +59,6 @@ def __init__(self, cmap=None, physics_package_manager=None, parent=None):
self.import_in_progress = False
self.loaded_images = []
self.canvas = parent.image_tab_widget.active_canvas
- self.physics_package_manager = physics_package_manager
# Disable these by default.
# If we disable these in Qt Designer, there are some weird bugs
@@ -620,7 +619,6 @@ def completed(self):
self.ui.instrument.setDisabled(False)
HexrdConfig().enable_canvas_toolbar.emit(True)
self.cmap.block_updates(False)
- self.physics_package_manager.show()
def show(self):
self.ui.show()
diff --git a/hexrdgui/main_window.py b/hexrdgui/main_window.py
index fd03c620d..951d5bfb9 100644
--- a/hexrdgui/main_window.py
+++ b/hexrdgui/main_window.py
@@ -78,7 +78,6 @@
from hexrdgui.ui_loader import UiLoader
from hexrdgui.utils import block_signals, unique_name
from hexrdgui.utils.dialog import add_help_url
-from hexrdgui.utils.guess_instrument_type import guess_instrument_type
from hexrdgui.utils.physics_package import (
ask_to_create_physics_package_if_missing,
)
@@ -139,7 +138,6 @@ def __init__(self, parent=None, image_files=None):
self.simple_image_series_dialog = SimpleImageSeriesDialog(self.ui)
self.llnl_import_tool_dialog = LLNLImportToolDialog(
self.color_map_editor,
- self.physics_package_manager_dialog,
self.ui)
self.image_stack_dialog = ImageStackDialog(
self.ui, self.simple_image_series_dialog)
@@ -170,10 +168,11 @@ def __init__(self, parent=None, image_files=None):
self.setup_connections()
self.update_config_gui()
- self.update_physics_package_visibilities()
self.update_action_check_states()
+ self.update_action_enable_states()
+
self.set_live_update(HexrdConfig().live_update)
self.on_action_show_all_colormaps_toggled(HexrdConfig().show_all_colormaps)
@@ -306,8 +305,11 @@ def setup_connections(self):
self.on_action_edit_apply_threshold_triggered)
self.ui.action_open_preconfigured_instrument_file.triggered.connect(
self.on_action_open_preconfigured_instrument_file_triggered)
- self.ui.action_physics_package_editor.triggered.connect(
- self.on_action_physics_package_editor_triggered
+ self.ui.action_edit_physics_package.triggered.connect(
+ self.on_action_edit_physics_package_triggered
+ )
+ self.ui.action_include_physics_package.toggled.connect(
+ self.on_action_include_physics_package_toggled
)
self.image_mode_widget.polar_show_snip1d.connect(
@@ -334,6 +336,8 @@ def setup_connections(self):
self.update_mask_region_canvas)
HexrdConfig().update_instrument_toolbox.connect(
self.update_config_gui)
+ HexrdConfig().physics_package_modified.connect(
+ self.on_physics_package_modified)
ImageLoadManager().update_needed.connect(self.update_all)
ImageLoadManager().new_images_loaded.connect(self.new_images_loaded)
@@ -376,8 +380,14 @@ def setup_connections(self):
HexrdConfig().enable_canvas_focus_mode.connect(
self.enable_canvas_focus_mode)
+ # Always assume Physics Package is needed for LLNL import
+ self.llnl_import_tool_dialog.ui.complete.clicked.connect(
+ lambda: self.on_action_include_physics_package_toggled(True)
+ )
+
def on_state_loaded(self):
self.update_action_check_states()
+ self.update_action_enable_states()
self.materials_panel.update_gui_from_config()
def update_action_check_states(self):
@@ -394,6 +404,7 @@ def update_action_check_states(self):
'action_show_all_colormaps': 'show_all_colormaps',
'action_apply_absorption_correction':
'apply_absorption_correction',
+ 'action_include_physics_package': 'has_physics_package',
}
for cb_name, attr_name in checkbox_to_hexrd_config_mappings.items():
@@ -401,6 +412,16 @@ def update_action_check_states(self):
with block_signals(cb):
cb.setChecked(getattr(HexrdConfig(), attr_name))
+ def update_action_enable_states(self):
+ enabled_to_hexrd_config_mappings = {
+ 'action_edit_physics_package': 'has_physics_package',
+ }
+
+ for en_name, attr_name in enabled_to_hexrd_config_mappings.items():
+ action = getattr(self.ui, en_name)
+ with block_signals(action):
+ action.setEnabled(getattr(HexrdConfig(), attr_name))
+
def set_icon(self, icon):
self.ui.setWindowIcon(icon)
@@ -441,7 +462,6 @@ def enable_canvas_focus_mode(self, b):
def on_instrument_config_loaded(self):
self.update_config_gui()
- self.update_physics_package_visibilities()
def on_action_open_config_file_triggered(self):
selected_file, selected_filter = QFileDialog.getOpenFileName(
@@ -471,23 +491,6 @@ def on_action_save_config_hexrd_triggered(self):
def on_action_save_config_yaml_triggered(self):
self._save_config('.yml', 'YAML files (*.yml)')
- def update_physics_package_visibilities(self):
- instr_type = guess_instrument_type(HexrdConfig().detector_names)
- visible = instr_type in ('TARDIS', 'PXRDIP')
-
- self.ui.action_physics_package_editor.setVisible(visible)
- self.ui.action_apply_absorption_correction.setVisible(visible)
-
- if not visible:
- # Turn off absorption correction
- self.ui.action_apply_absorption_correction.setChecked(False)
-
- # Set the physics package to None
- HexrdConfig().update_physics_package()
-
- # Turn off all detector coatings
- HexrdConfig().detector_coatings_dictified = {}
-
def open_grain_fitting_results(self):
selected_file, _ = QFileDialog.getOpenFileName(
self.ui, 'Open Grain Fitting File', HexrdConfig().working_dir,
@@ -1562,7 +1565,8 @@ def on_action_hedm_import_tool_triggered(self):
self.simple_image_series_dialog.show()
def on_action_llnl_import_tool_triggered(self):
- self.llnl_import_tool_dialog.show()
+ dialog = self.llnl_import_tool_dialog
+ dialog.show()
def on_action_image_stack_triggered(self):
self.image_stack_dialog.show()
@@ -1660,22 +1664,35 @@ def on_action_open_preconfigured_instrument_file_triggered(self):
with resource_loader.resource_path(instrument_templates, fname) as f:
HexrdConfig().load_instrument_config(Path(f))
- def on_action_physics_package_editor_triggered(self):
+ def on_action_edit_physics_package_triggered(self):
self.physics_package_manager_dialog.show()
- def action_apply_absorption_correction_toggled(self, b):
+ def on_action_include_physics_package_toggled(self, b):
+ self.ui.action_edit_physics_package.setEnabled(b)
+ if b and not HexrdConfig().has_physics_package:
+ HexrdConfig().create_default_physics_package()
+
if not b:
# Just turn it off and return
- HexrdConfig().apply_absorption_correction = b
+ HexrdConfig().physics_package = None
return
- # Make sure the physics package exists first
- if HexrdConfig().physics_package is None:
- msg = (
- 'Physics package must be set before absorption correction can be '
- 'applied. See the "Physics Package" editor under the "Edit" menu.'
- )
- QMessageBox.warning(self.ui, 'HEXRD', msg)
+ # Get the user to select the physics package options
+ dialog = self.physics_package_manager_dialog
+ dialog.show(delete_if_canceled=True)
+
+ def on_physics_package_modified(self):
+ enable = HexrdConfig().has_physics_package
+ w = self.ui.action_include_physics_package
+ with block_signals(w):
+ w.setChecked(enable)
+
+ self.ui.action_edit_physics_package.setEnabled(enable)
+
+ def action_apply_absorption_correction_toggled(self, b):
+ if not b:
+ # Just turn it off and return
+ HexrdConfig().apply_absorption_correction = b
return
# Get the user to first select the absorption correction options
diff --git a/hexrdgui/overlays/powder_overlay.py b/hexrdgui/overlays/powder_overlay.py
index 5bd6b9183..c0b63f91f 100644
--- a/hexrdgui/overlays/powder_overlay.py
+++ b/hexrdgui/overlays/powder_overlay.py
@@ -83,7 +83,7 @@ def validate_tth_distortion_kwargs(self):
from hexrdgui.hexrd_config import HexrdConfig
if self.tth_distortion_type is not None:
- if HexrdConfig().physics_package is None:
+ if not HexrdConfig().has_physics_package:
# This will require a physics package
HexrdConfig().create_default_physics_package()
diff --git a/hexrdgui/physics_package_manager_dialog.py b/hexrdgui/physics_package_manager_dialog.py
index 0e7fde09c..b9754391c 100644
--- a/hexrdgui/physics_package_manager_dialog.py
+++ b/hexrdgui/physics_package_manager_dialog.py
@@ -25,6 +25,7 @@ def __init__(self, parent=None):
self.ui = loader.load_file('physics_package_manager_dialog.ui', parent)
self.additional_materials = {}
self.instrument_type = None
+ self.delete_if_canceled = False
canvas = FigureCanvas(Figure(tight_layout=True))
# Get the canvas to take up the majority of the screen most of the time
@@ -36,7 +37,8 @@ def __init__(self, parent=None):
self.update_instrument_type()
self.setup_connections()
- def show(self):
+ def show(self, delete_if_canceled=False):
+ self.delete_if_canceled = delete_if_canceled
self.setup_form()
self.ui.show()
@@ -73,9 +75,26 @@ def setup_connections(self):
for k, w in self.material_selectors.items():
w.currentIndexChanged.connect(
lambda index, k=k: self.material_changed(index, k))
- HexrdConfig().instrument_config_loaded.connect(self.update_instrument_type)
+ HexrdConfig().instrument_config_loaded.connect(
+ self.update_instrument_type)
+ HexrdConfig().detectors_changed.connect(
+ self.initialize_detector_coatings)
+
+ self.ui.accepted.connect(self.on_accepted)
+ self.ui.rejected.connect(self.on_rejected)
+
+ def on_accepted(self):
+ self.delete_if_canceled = False
+
+ def on_rejected(self):
+ if self.delete_if_canceled:
+ HexrdConfig().physics_package = None
+
+ self.delete_if_canceled = False
def initialize_detector_coatings(self):
+ # Reset detector coatings to make sure they're in sync w/ current dets
+ HexrdConfig().detector_coatings_dictified = {}
for det in HexrdConfig().detector_names:
HexrdConfig().update_detector_filter(det)
HexrdConfig().update_detector_coating(det)
@@ -99,27 +118,22 @@ def load_additional_materials(self):
def update_instrument_type(self):
new_instr_type = guess_instrument_type(HexrdConfig().detector_names)
- if (
- new_instr_type == self.instrument_type or
- new_instr_type not in ('TARDIS', 'PXRDIP')
- ):
+ if new_instr_type == self.instrument_type:
return
self.initialize_detector_coatings()
if new_instr_type == 'TARDIS':
- HexrdConfig().update_physics_package(
- new_instr_type, **PINHOLE_DEFAULTS.TARDIS)
+ HexrdConfig().update_physics_package(**PINHOLE_DEFAULTS.TARDIS)
for det in HexrdConfig().detector_names:
HexrdConfig().update_detector_filter(
det, **FILTER_DEFAULTS.TARDIS)
elif new_instr_type == 'PXRDIP':
- HexrdConfig().update_physics_package(
- new_instr_type, **PINHOLE_DEFAULTS.PXRDIP)
+ HexrdConfig().update_physics_package(**PINHOLE_DEFAULTS.PXRDIP)
for det in HexrdConfig().detector_names:
HexrdConfig().update_detector_filter(
det, **FILTER_DEFAULTS.PXRDIP)
else:
- HexrdConfig().update_physics_package(instr_type=None)
+ HexrdConfig().create_default_physics_package()
self.instrument_type = new_instr_type
def setup_form(self):
@@ -133,10 +147,10 @@ def setup_form(self):
w.insertSeparator(2 + len(custom_mats))
# Set default values
- physics = HexrdConfig().physics_package
- if physics is None:
+ if not HexrdConfig().has_physics_package:
return
+ physics = HexrdConfig().physics_package
# PINHOLE
self.ui.pinhole_material.setCurrentText(physics.pinhole_material)
self.ui.pinhole_density.setValue(physics.pinhole_density)
@@ -180,6 +194,7 @@ def toggle_pinhole(self, enabled):
def material_changed(self, index, category):
material = self.material_selectors[category].currentText()
+
self.material_inputs[category].setEnabled(index == 0)
self.density_inputs[category].setEnabled(index == 0)
if category == 'pinhole':
@@ -196,7 +211,7 @@ def material_changed(self, index, category):
else:
self.density_inputs[category].setValue(0.0)
- if HexrdConfig().physics_package is not None:
+ if HexrdConfig().has_physics_package:
self.ui.absorption_length.setValue(HexrdConfig().absorption_length())
def accept_changes(self):
@@ -219,7 +234,7 @@ def accept_changes(self):
'pinhole_thickness': self.ui.pinhole_thickness.value(),
'pinhole_density': self.ui.pinhole_density.value(),
}
- HexrdConfig().update_physics_package(self.instrument_type, **kwargs)
+ HexrdConfig().update_physics_package(**kwargs)
if HexrdConfig().apply_absorption_correction:
# Make sure changes are reflected
diff --git a/hexrdgui/pinhole_correction_editor.py b/hexrdgui/pinhole_correction_editor.py
index af0cd85b6..2783ef846 100644
--- a/hexrdgui/pinhole_correction_editor.py
+++ b/hexrdgui/pinhole_correction_editor.py
@@ -154,6 +154,11 @@ def correction_kwargs(self, v):
if v is None:
return
+ if not HexrdConfig().has_physics_package:
+ return
+
+ physics = HexrdConfig().physics_package
+
vp = v.copy()
# These units are in mm, but we display in micrometers
for key, value in v.items():
@@ -164,10 +169,6 @@ def correction_kwargs(self, v):
vp[key] = value * multiplier
- physics = HexrdConfig().physics_package
- if physics is None:
- return
-
# Values are (key, default)
values = {
'sample_layer_standoff': ('layer_standoff',
@@ -408,7 +409,7 @@ def enter_manually_idx(self):
return 0
def on_rygg_absorption_length_selector_changed(self):
- if HexrdConfig().physics_package is None:
+ if not HexrdConfig().has_physics_package:
# Cannot update
return
diff --git a/hexrdgui/resources/ui/absorption_correction_options_dialog.ui b/hexrdgui/resources/ui/absorption_correction_options_dialog.ui
index 979a4519c..383838073 100644
--- a/hexrdgui/resources/ui/absorption_correction_options_dialog.ui
+++ b/hexrdgui/resources/ui/absorption_correction_options_dialog.ui
@@ -6,8 +6,8 @@
0
0
- 500
- 332
+ 347
+ 443
@@ -20,16 +20,46 @@
Absorption Correction Editor
- -
+
-
+
+
+ Filter
+
+
+ true
+
+
+
+ -
+
+
+ Coating
+
+
+ true
+
+
+
+ -
+
+
+ Phosphor
+
+
+ true
+
+
+
+ -
-
-
+
-
QDialogButtonBox::Cancel|QDialogButtonBox::Ok
- -
+
-
QTabWidget::North
@@ -308,6 +338,13 @@
+ -
+
+
+ Apply:
+
+
+
@@ -318,6 +355,9 @@
+ apply_filters
+ apply_coating
+ apply_phosphor
tab_widget
detectors
filter_material
diff --git a/hexrdgui/resources/ui/main_window.ui b/hexrdgui/resources/ui/main_window.ui
index d90ad527f..1de087036 100644
--- a/hexrdgui/resources/ui/main_window.ui
+++ b/hexrdgui/resources/ui/main_window.ui
@@ -213,6 +213,13 @@
+
@@ -221,7 +228,7 @@
-
+
diff --git a/hexrdgui/utils/physics_package.py b/hexrdgui/utils/physics_package.py
index a55df05ae..6d2787c16 100644
--- a/hexrdgui/utils/physics_package.py
+++ b/hexrdgui/utils/physics_package.py
@@ -4,7 +4,7 @@
def ask_to_create_physics_package_if_missing() -> bool:
- if HexrdConfig().physics_package is not None:
+ if HexrdConfig().has_physics_package:
return True
msg = (