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 @@ + + + Physics Package + + + + @@ -221,7 +228,7 @@ - + @@ -873,9 +880,20 @@ Preconfigured - + + + true + + + Include Physics Package + + + + + false + - Physics Package + Edit Physics Package 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 = (