mirror of https://github.com/Dioptas/Dioptas.git
143 lines
6.8 KiB
Python
143 lines
6.8 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Dioptas - GUI program for fast processing of 2D X-ray diffraction data
|
|
# Principal author: Clemens Prescher (clemens.prescher@gmail.com)
|
|
# Copyright (C) 2014-2019 GSECARS, University of Chicago, USA
|
|
# Copyright (C) 2015-2018 Institute for Geology and Mineralogy, University of Cologne, Germany
|
|
# Copyright (C) 2019-2020 DESY, Hamburg, Germany
|
|
#
|
|
# This program is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
|
# imports for type hinting in PyCharm -- DO NOT DELETE
|
|
from ...widgets.integration import IntegrationWidget
|
|
from ...model.DioptasModel import DioptasModel
|
|
|
|
|
|
class OptionsController(object):
|
|
"""
|
|
IntegrationPatternController handles all the interaction from the IntegrationView with the pattern data.
|
|
It manages the auto integration of image files to in addition to pattern browsing and changing of units
|
|
(2 Theta, Q, A)
|
|
"""
|
|
|
|
def __init__(self, widget, dioptas_model):
|
|
"""
|
|
:param widget: Reference to an IntegrationWidget
|
|
:param dioptas_model: reference to DioptasModel object
|
|
|
|
:type widget: IntegrationWidget
|
|
:type dioptas_model: DioptasModel
|
|
"""
|
|
|
|
self.integration_widget = widget
|
|
self.options_widget = self.integration_widget.integration_control_widget.integration_options_widget
|
|
|
|
self.model = dioptas_model
|
|
|
|
self.connect_signals()
|
|
|
|
def connect_signals(self):
|
|
self.options_widget.correct_solid_angle_cb.stateChanged.connect(self.correct_solid_angle_cb_clicked)
|
|
self.model.configuration_selected.connect(self.update_gui)
|
|
self.model.pattern_changed.connect(self.update_gui)
|
|
|
|
self.options_widget.cake_azimuth_points_sb.valueChanged.connect(self.cake_azimuth_points_changed)
|
|
self.options_widget.cake_azimuth_min_txt.editingFinished.connect(self.cake_azimuth_range_changed)
|
|
self.options_widget.cake_azimuth_max_txt.editingFinished.connect(self.cake_azimuth_range_changed)
|
|
|
|
self.options_widget.oned_full_toggle_btn.toggled.connect(self.oned_full_toggled_btn_changed)
|
|
self.options_widget.cake_full_toggle_btn.toggled.connect(self.cake_full_toggled_btn_changed)
|
|
self.options_widget.oned_azimuth_min_txt.editingFinished.connect(self.oned_azimuth_range_changed)
|
|
self.options_widget.oned_azimuth_max_txt.editingFinished.connect(self.oned_azimuth_range_changed)
|
|
|
|
def correct_solid_angle_cb_clicked(self):
|
|
self.model.current_configuration.correct_solid_angle = self.options_widget.correct_solid_angle_cb.isChecked()
|
|
|
|
def update_gui(self):
|
|
self.options_widget.blockSignals(True)
|
|
|
|
self.options_widget.correct_solid_angle_cb.blockSignals(True)
|
|
self.options_widget.correct_solid_angle_cb.setChecked(int(self.model.current_configuration.correct_solid_angle))
|
|
self.options_widget.correct_solid_angle_cb.blockSignals(False)
|
|
|
|
self.options_widget.bin_count_txt.blockSignals(True)
|
|
self.options_widget.bin_count_txt.setText("{:1.0f}".format(self.model.calibration_model.num_points))
|
|
self.options_widget.bin_count_txt.blockSignals(False)
|
|
|
|
self.options_widget.cake_azimuth_points_sb.blockSignals(True)
|
|
self.options_widget.cake_azimuth_points_sb.setValue(self.model.current_configuration.cake_azimuth_points)
|
|
self.options_widget.cake_azimuth_points_sb.blockSignals(False)
|
|
|
|
if self.model.current_configuration.cake_azimuth_range is None:
|
|
self.enable_full_cake_range()
|
|
else:
|
|
self.options_widget.cake_azimuth_min_txt.setText(
|
|
'{}'.format(self.model.current_configuration.cake_azimuth_range[0]))
|
|
self.options_widget.cake_azimuth_max_txt.setText(
|
|
'{}'.format(self.model.current_configuration.cake_azimuth_range[1]))
|
|
self.options_widget.blockSignals(False)
|
|
self.disable_full_cake_range()
|
|
self.options_widget.blockSignals(False)
|
|
|
|
def cake_azimuth_range_changed(self):
|
|
range_min = float(self.options_widget.cake_azimuth_min_txt.text())
|
|
range_max = float(self.options_widget.cake_azimuth_max_txt.text())
|
|
self.model.current_configuration.cake_azimuth_range = (range_min, range_max)
|
|
|
|
def cake_azimuth_points_changed(self):
|
|
self.model.current_configuration.cake_azimuth_points = int(
|
|
self.options_widget.cake_azimuth_points_sb.value())
|
|
|
|
def cake_full_toggled_btn_changed(self):
|
|
if self.options_widget.cake_full_toggle_btn.isChecked():
|
|
self.enable_full_cake_range()
|
|
self.model.current_configuration.cake_azimuth_range = None
|
|
|
|
elif not self.options_widget.cake_full_toggle_btn.isChecked():
|
|
self.disable_full_cake_range()
|
|
self.cake_azimuth_range_changed()
|
|
|
|
def enable_full_cake_range(self):
|
|
self.options_widget.cake_azimuth_min_txt.setDisabled(True)
|
|
self.options_widget.cake_azimuth_max_txt.setDisabled(True)
|
|
self.integration_widget.cake_shift_azimuth_sl.setDisabled(False)
|
|
|
|
def disable_full_cake_range(self):
|
|
self.options_widget.cake_azimuth_min_txt.setDisabled(False)
|
|
self.options_widget.cake_azimuth_max_txt.setDisabled(False)
|
|
self.integration_widget.cake_shift_azimuth_sl.setDisabled(True)
|
|
self.integration_widget.cake_shift_azimuth_sl.setValue(0)
|
|
|
|
def oned_azimuth_range_changed(self):
|
|
range_min = float(self.options_widget.oned_azimuth_min_txt.text())
|
|
range_max = float(self.options_widget.oned_azimuth_max_txt.text())
|
|
self.model.current_configuration.oned_azimuth_range = (range_min, range_max)
|
|
|
|
def oned_full_toggled_btn_changed(self):
|
|
if self.options_widget.oned_full_toggle_btn.isChecked():
|
|
self.enable_full_oned_range()
|
|
self.model.current_configuration.oned_azimuth_range = None
|
|
|
|
elif not self.options_widget.oned_full_toggle_btn.isChecked():
|
|
self.disable_full_oned_range()
|
|
self.oned_azimuth_range_changed()
|
|
|
|
def enable_full_oned_range(self):
|
|
self.options_widget.oned_azimuth_min_txt.setDisabled(True)
|
|
self.options_widget.oned_azimuth_max_txt.setDisabled(True)
|
|
|
|
def disable_full_oned_range(self):
|
|
self.options_widget.oned_azimuth_min_txt.setDisabled(False)
|
|
self.options_widget.oned_azimuth_max_txt.setDisabled(False)
|