def set_data(self, data): if not data is None: try: if data.measured_dataset is None: raise ValueError("Measured Dataset is missing") if data.measured_dataset.phases is None: raise ValueError("Phases are missing") self.check_input_global_parameters(data) self.fit_global_parameters = data.duplicate() phases = self.fit_global_parameters.measured_dataset.phases tabs_to_remove = self.get_current_dimension() - len(phases) if tabs_to_remove > 0: for index in range(tabs_to_remove): self.parameter_tabs.removeTab(-1) self.parameter_box_array.pop() for phase_index in range(len(phases)): parameters = self.get_parameter_of_phase_item(phase_index) if phase_index < self.get_current_dimension(): self.parameter_tabs.setTabText( phase_index, OWGenericWidget.phase_name( self.fit_global_parameters, phase_index)) parameter_box = self.get_parameter_box(phase_index) if not parameters is None: parameter_box.set_data(parameters) else: parameter_box = self.get_empty_parameter_box_instance( gui.createTabPage( self.parameter_tabs, OWGenericWidget.phase_name( self.fit_global_parameters, phase_index)), phase_index) if not parameters is None: parameter_box.set_data(parameters) self.parameter_box_array.append(parameter_box) self.dumpSettings() if self.is_automatic_run: self.send_parameter() except Exception as e: QMessageBox.critical(self, "Error", str(e), QMessageBox.Ok) if self.IS_DEVELOP: raise e
def set_data(self, thermal_parameters): debye_waller_factor = thermal_parameters.get_debye_waller_factor( phase_index=self.phase_index) if not debye_waller_factor is None: self.use_debye_waller_factor = 1 OWGenericWidget.populate_fields_in_widget(self, "debye_waller_factor", debye_waller_factor, value_only=True)
def set_use_single_parameter_set(self, on_init=False): self.parameter_tabs.clear() self.parameter_box_array.clear() dimension = self.get_current_dimension( ) if self.fit_global_parameters is None else self.fit_global_parameters.measured_dataset.get_diffraction_patterns_number( ) for index in range(1 if self.use_single_parameter_set == 1 else dimension): parameter_tab = gui.createTabPage( self.parameter_tabs, OWGenericWidget.diffraction_pattern_name( self.fit_global_parameters, index, self.use_single_parameter_set == 1)) if index < self.get_current_dimension(): # keep the existing try: parameter_box = self.get_parameter_box_instance( parameter_tab, index) except: parameter_box = self.get_empty_parameter_box_instance( parameter_tab, index) # prevents crash else: parameter_box = self.get_empty_parameter_box_instance( parameter_tab, index) self.parameter_box_array.append(parameter_box) if not on_init: self.dumpSettings()
def set_data(self, thermal_parameters): for phase_index in range(len(self.debye_waller_of_phases_box_array)): debye_waller_of_phases_box = self.debye_waller_of_phases_box_array[ phase_index] debye_waller_of_phases_box.set_data(thermal_parameters) self.debye_waller_of_phases_tabs.setTabText( phase_index, OWGenericWidget.phase_name(self.widget.fit_global_parameters, phase_index))
def update_debye_waller(self, thermal_parameters): if self.use_debye_waller_factor == 1 and not self.debye_waller_factor_function == 1: congruence.checkStrictlyPositiveNumber(self.debye_waller_factor, "B") debye_waller_factor = None if self.use_debye_waller_factor == 0 else OWGenericWidget.get_fit_parameter_from_widget( self, "debye_waller_factor", self.get_parameters_prefix()) thermal_parameters.set_debye_waller_factor(self.phase_index, debye_waller_factor)
def set_data(self, data): if not data is None: try: self.fit_global_parameters = data.duplicate() diffraction_patterns = self.fit_global_parameters.measured_dataset.diffraction_patterns phases = self.fit_global_parameters.measured_dataset.phases if diffraction_patterns is None: raise ValueError("No Diffraction Pattern in input data!") if not phases is None: if (len(phases) != len(self.phases_box_array)): self.phases_tabs.clear() self.phases_box_array = [] for index in range(len(phases)): phase_tab = gui.createTabPage( self.phases_tabs, OWGenericWidget.phase_name( self.fit_global_parameters, index)) if index < len(self.a): # keep the existing phase_box = self.get_phase_box_instance( index, phase_tab) else: phase_box = self.get_empty_phase_box_instance( index, phase_tab) self.phases_box_array.append(phase_box) else: for index in range(len(phases)): self.phases_box_array[index].set_data( phases[index]) self.dumpSettings() if self.is_automatic_run: self.send_phases() except Exception as e: QMessageBox.critical(self, "Error", str(e), QMessageBox.Ok) if self.IS_DEVELOP: raise e
def set_use_single_parameter_set(self, on_init=False): self.debye_wallers_tabs.clear() self.debye_wallers_box_array = [] dimension = len( self.debye_waller_factors ) if self.fit_global_parameters is None else self.fit_global_parameters.measured_dataset.get_diffraction_patterns_number( ) phases_number = len( self.debye_waller_factors[0] ) if self.fit_global_parameters is None else self.fit_global_parameters.measured_dataset.get_phases_number( ) for diffraction_pattern_index in range( 1 if self.use_single_parameter_set == 1 else dimension): debye_waller_tab = gui.createTabPage( self.debye_wallers_tabs, OWGenericWidget.diffraction_pattern_name( self.fit_global_parameters, diffraction_pattern_index, self.use_single_parameter_set == 1)) # qui analisi delle fasi if diffraction_pattern_index < len( self.debye_waller_factors): # keep the existing use_debye_waller_factors = [] debye_waller_factors = [] debye_waller_factors_fixed = [] debye_waller_factors_has_min = [] debye_waller_factors_min = [] debye_waller_factors_has_max = [] debye_waller_factors_max = [] debye_waller_factors_function = [] debye_waller_factors_function_value = [] for phase_index in range(phases_number): if phase_index < len( self. debye_waller_factors[diffraction_pattern_index]): use_debye_waller_factors.append( self.use_debye_waller_factors[ diffraction_pattern_index][phase_index]) debye_waller_factors.append(self.debye_waller_factors[ diffraction_pattern_index][phase_index]) debye_waller_factors_fixed.append( self.debye_waller_factors_fixed[ diffraction_pattern_index][phase_index]) debye_waller_factors_has_min.append( self.debye_waller_factors_has_min[ diffraction_pattern_index][phase_index]) debye_waller_factors_min.append( self.debye_waller_factors_min[ diffraction_pattern_index][phase_index]) debye_waller_factors_has_max.append( self.debye_waller_factors_has_max[ diffraction_pattern_index][phase_index]) debye_waller_factors_max.append( self.debye_waller_factors_max[ diffraction_pattern_index][phase_index]) debye_waller_factors_function.append( self.debye_waller_factors_function[ diffraction_pattern_index][phase_index]) debye_waller_factors_function_value.append( self.debye_waller_factors_function_value[ diffraction_pattern_index][phase_index]) else: use_debye_waller_factors.append(1) debye_waller_factors.append(0.1) debye_waller_factors_fixed.append(0) debye_waller_factors_has_min.append(0) debye_waller_factors_min.append(0.0) debye_waller_factors_has_max.append(0.0) debye_waller_factors_max.append(0.0) debye_waller_factors_function.append(0) debye_waller_factors_function_value.append("") debye_waller_box = DebyeWallerBox( widget=self, parent=debye_waller_tab, diffraction_pattern_index=diffraction_pattern_index, use_debye_waller_factors=use_debye_waller_factors, debye_waller_factors=debye_waller_factors, debye_waller_factors_fixed=debye_waller_factors_fixed, debye_waller_factors_has_min=debye_waller_factors_has_min, debye_waller_factors_min=debye_waller_factors_min, debye_waller_factors_has_max=debye_waller_factors_has_max, debye_waller_factors_max=debye_waller_factors_max, debye_waller_factors_function=debye_waller_factors_function, debye_waller_factors_function_value= debye_waller_factors_function_value) else: debye_waller_box = DebyeWallerBox( widget=self, parent=debye_waller_tab, diffraction_pattern_index=diffraction_pattern_index, use_debye_waller_factors=[1] * phases_number, debye_waller_factors=[0.1] * phases_number, debye_waller_factors_fixed=[0] * phases_number, debye_waller_factors_has_min=[0] * phases_number, debye_waller_factors_min=[0.0] * phases_number, debye_waller_factors_has_max=[0.0] * phases_number, debye_waller_factors_max=[0.0] * phases_number, debye_waller_factors_function=[0] * phases_number, debye_waller_factors_function_value=[""] * phases_number) self.debye_wallers_box_array.append(debye_waller_box) if not on_init: self.dumpSettings()
def __init__(self, widget=None, widget_container=None, parent=None, diffraction_pattern_index=0, phase_index=0, use_debye_waller_factor=1, debye_waller_factor=0.1, debye_waller_factor_fixed=0, debye_waller_factor_has_min=0, debye_waller_factor_min=0.0, debye_waller_factor_has_max=0, debye_waller_factor_max=0.0, debye_waller_factor_function=0, debye_waller_factor_function_value=""): super(DebyeWallerOfPhaseBox, self).__init__() self.setLayout(QVBoxLayout()) self.layout().setAlignment(Qt.AlignTop) self.setFixedWidth(widget.CONTROL_AREA_WIDTH - 35) self.setFixedHeight(200) self.widget = widget self.widget_container = widget_container self.diffraction_pattern_index = diffraction_pattern_index self.phase_index = phase_index self.use_debye_waller_factor = use_debye_waller_factor self.debye_waller_factor = debye_waller_factor self.debye_waller_factor_fixed = debye_waller_factor_fixed self.debye_waller_factor_has_min = debye_waller_factor_has_min self.debye_waller_factor_min = debye_waller_factor_min self.debye_waller_factor_has_max = debye_waller_factor_has_max self.debye_waller_factor_max = debye_waller_factor_max self.debye_waller_factor_function = debye_waller_factor_function self.debye_waller_factor_function_value = debye_waller_factor_function_value self.CONTROL_AREA_WIDTH = widget.CONTROL_AREA_WIDTH - 65 parent.layout().addWidget(self) container = self orangegui.comboBox(container, self, "use_debye_waller_factor", label="Calculate", items=["No", "Yes"], labelWidth=250, orientation="horizontal", callback=self.set_dw) self.box_dw = gui.widgetBox(container, "", orientation="vertical", width=self.CONTROL_AREA_WIDTH - 10, height=30) self.box_dw_empty = gui.widgetBox(container, "", orientation="vertical", width=self.CONTROL_AREA_WIDTH - 10, height=30) OWGenericWidget.create_box_in_widget(self, self.box_dw, "debye_waller_factor", label="B [Å-2]", min_value=0.0, max_value=1.0, min_accepted=True, max_accepted=True, add_callback=True, trim=25) self.is_on_init = False
def set_data(self, data): if not data is None: try: self.fit_global_parameters = data.duplicate() diffraction_patterns = self.fit_global_parameters.measured_dataset.diffraction_patterns if diffraction_patterns is None: raise ValueError("No Diffraction Pattern in input data!") parameters = self.get_parameter_array() if parameters is None: self.set_use_single_parameter_set(on_init=True) else: if self.use_single_parameter_set == 0: # NO tabs_to_remove = self.get_current_dimension() - len( parameters) if tabs_to_remove > 0: for index in range(tabs_to_remove): self.parameter_tabs.removeTab(-1) self.parameter_box_array.pop() for diffraction_pattern_index in range( len(parameters)): parameters_item = self.get_parameter_item( diffraction_pattern_index) if diffraction_pattern_index < self.get_current_dimension( ): parameter_box = self.parameter_box_array[ diffraction_pattern_index] self.parameter_tabs.setTabText( diffraction_pattern_index, OWGenericWidget.diffraction_pattern_name( self.fit_global_parameters, diffraction_pattern_index, False)) else: parameter_box = self.get_empty_parameter_box_instance( parameter_tab=gui.createTabPage( self.parameter_tabs, OWGenericWidget. diffraction_pattern_name( self.fit_global_parameters, diffraction_pattern_index, False)), index=diffraction_pattern_index) self.parameter_box_array.append(parameter_box) if not parameters_item is None: parameter_box.set_data(parameters_item) else: self.__check_data_congruence(parameters) parameters_item = self.get_parameter_item(0) self.parameter_tabs.setTabText( 0, OWGenericWidget.diffraction_pattern_name( self.fit_global_parameters, 0, True)) if not parameters_item is None: self.parameter_box_array[0].set_data( parameters_item) self.dumpSettings() if self.is_automatic_run: self.send_parameter() except Exception as e: QMessageBox.critical(self, "Error", str(e), QMessageBox.Ok) if self.IS_DEVELOP: raise e
def dump_use_debye_waller_factors(self): OWGenericWidget.dump_variable_in_widget( self, "use_debye_waller_factors", variable_name_in_box="use_debye_waller_factor") self.widget.dump_use_debye_waller_factors()
def dump_debye_waller_factors(self): OWGenericWidget.dump_parameter_in_widget( self, "debye_waller_factors", parameter_name_in_box="debye_waller_factor") self.widget.dump_debye_waller_factors()
def __init__(self, widget=None, parent=None, diffraction_pattern_index=0, use_debye_waller_factors=[], debye_waller_factors=[], debye_waller_factors_fixed=[], debye_waller_factors_has_min=[], debye_waller_factors_min=[], debye_waller_factors_has_max=[], debye_waller_factors_max=[], debye_waller_factors_function=[], debye_waller_factors_function_value=[]): super(DebyeWallerBox, self).__init__() self.setLayout(QVBoxLayout()) self.layout().setAlignment(Qt.AlignTop) self.setFixedWidth(widget.CONTROL_AREA_WIDTH - 35) self.setFixedHeight(140) self.widget = widget self.diffraction_pattern_index = diffraction_pattern_index self.use_debye_waller_factors = use_debye_waller_factors self.debye_waller_factors = debye_waller_factors self.debye_waller_factors_fixed = debye_waller_factors_fixed self.debye_waller_factors_has_min = debye_waller_factors_has_min self.debye_waller_factors_min = debye_waller_factors_min self.debye_waller_factors_has_max = debye_waller_factors_has_max self.debye_waller_factors_max = debye_waller_factors_max self.debye_waller_factors_function = debye_waller_factors_function self.debye_waller_factors_function_value = debye_waller_factors_function_value self.CONTROL_AREA_WIDTH = widget.CONTROL_AREA_WIDTH - 45 parent.layout().addWidget(self) container = self self.debye_waller_of_phases_tabs = gui.tabWidget(container) self.debye_waller_of_phases_box_array = [] for phase_index in range(len(self.debye_waller_factors)): debye_waller_of_phase_tab = gui.createTabPage( self.debye_waller_of_phases_tabs, OWGenericWidget.phase_name(self.widget.fit_global_parameters, phase_index)) debye_waller_of_phase_box = DebyeWallerOfPhaseBox( widget=widget, widget_container=self, parent=debye_waller_of_phase_tab, diffraction_pattern_index=diffraction_pattern_index, phase_index=phase_index, use_debye_waller_factor=self. use_debye_waller_factors[phase_index], debye_waller_factor=self.debye_waller_factors[phase_index], debye_waller_factor_fixed=self. debye_waller_factors_fixed[phase_index], debye_waller_factor_has_min=self. debye_waller_factors_has_min[phase_index], debye_waller_factor_min=self. debye_waller_factors_min[phase_index], debye_waller_factor_has_max=self. debye_waller_factors_has_max[phase_index], debye_waller_factor_max=self. debye_waller_factors_max[phase_index], debye_waller_factor_function=self. debye_waller_factors_function[phase_index], debye_waller_factor_function_value=self. debye_waller_factors_function_value[phase_index]) self.debye_waller_of_phases_box_array.append( debye_waller_of_phase_box)
def set_data(self, data): if not data is None: try: self.fit_global_parameters = data.duplicate() diffraction_patterns = self.fit_global_parameters.measured_dataset.diffraction_patterns phases = self.fit_global_parameters.measured_dataset.phases line_profiles = self.fit_global_parameters.measured_dataset.line_profiles if diffraction_patterns is None: raise ValueError("No Diffraction Pattern in input data!") if phases is None: raise ValueError("No Phases in input data!") different_phases = len(phases) != len(self.reflections_of_phases[0]) different_patterns = len(line_profiles) != len(self.reflections_of_phases) if different_patterns or different_phases: self.line_profiles_tabs.clear() self.line_profiles_box_array = [] for diffraction_pattern_index in range(len(diffraction_patterns)): line_profile_tab = gui.createTabPage(self.line_profiles_tabs, OWGenericWidget.diffraction_pattern_name(self.fit_global_parameters, diffraction_pattern_index)) if diffraction_pattern_index < len(self.reflections_of_phases): #keep the existing reflections_of_phases = [] limits = [] limit_types = [] for phase_index in range(len(phases)): if phase_index < len(self.reflections_of_phases[diffraction_pattern_index]): reflections_of_phases.append(self.reflections_of_phases[diffraction_pattern_index][phase_index]) limits.append(self.limits[diffraction_pattern_index][phase_index]) limit_types.append(self.limit_types[diffraction_pattern_index][phase_index]) else: reflections_of_phases.append("") limits.append(0.0) limit_types.append(0) line_profile_box = LineProfileBox(widget=self, parent=line_profile_tab, diffraction_pattern_index = diffraction_pattern_index, reflections_of_phases = reflections_of_phases, limits = limits, limit_types = limit_types) else: line_profile_box = LineProfileBox(widget=self, parent=line_profile_tab, diffraction_pattern_index = diffraction_pattern_index, reflections_of_phases=[""]*len(phases), limits=[0.0]*len(phases), limit_types=[0]*len(phases)) self.line_profiles_box_array.append(line_profile_box) elif not line_profiles is None: for diffraction_pattern_index in range(len(diffraction_patterns)): self.line_profiles_tabs.setTabText(diffraction_pattern_index, OWGenericWidget.diffraction_pattern_name(self.fit_global_parameters, diffraction_pattern_index)) self.line_profiles_box_array[diffraction_pattern_index].set_data(line_profiles[diffraction_pattern_index]) self.dumpSettings() if self.is_automatic_run: self.send_line_profiles() except Exception as e: QMessageBox.critical(self, "Error", str(e), QMessageBox.Ok) if self.IS_DEVELOP: raise e
def set_data(self, data): if not data is None: try: self.fit_global_parameters = data.duplicate() phases = self.fit_global_parameters.measured_dataset.phases if phases is None: raise ValueError("Add Phase(s) before this widget") diffraction_patterns = self.fit_global_parameters.measured_dataset.diffraction_patterns if diffraction_patterns is None: raise ValueError( "Add Diffraction Pattern(s) before this widget!") thermal_parameters = self.fit_global_parameters.get_thermal_parameters( ThermalParameters.__name__) self.set_use_single_parameter_set(on_init=True) if self.use_single_parameter_set == 0: # NO if not thermal_parameters is None: for diffraction_pattern_index in range( len(thermal_parameters)): thermal_parameters_item = self.fit_global_parameters.get_thermal_parameters_item( ThermalParameters.__name__, diffraction_pattern_index) self.debye_wallers_tabs.setTabText( diffraction_pattern_index, OWGenericWidget.diffraction_pattern_name( self.fit_global_parameters, diffraction_pattern_index, False)) debye_waller_box = self.debye_wallers_box_array[ diffraction_pattern_index] if not thermal_parameters_item is None: debye_waller_box.set_data( thermal_parameters_item) else: if thermal_parameters is None: self.set_use_single_parameter_set(True) else: self.__check_data_congruence(thermal_parameters) thermal_parameters_item = self.fit_global_parameters.get_thermal_parameters_item( thermal_parameters.__name__, 0) self.debye_wallers_tabs.setTabText( 0, OWGenericWidget.diffraction_pattern_name( self.fit_global_parameters, 0, True)) if not thermal_parameters_item is None: self.debye_wallers_box_array[0].set_data( thermal_parameters_item) self.dumpSettings() if self.is_automatic_run: self.send_debye_waller() except Exception as e: QMessageBox.critical(self, "Error", str(e), QMessageBox.Ok) if self.IS_DEVELOP: raise e
def __init__(self, widget=None, parent=None, diffraction_pattern_index=0, reflections_of_phases=[], limits=[], limit_types=[]): super(LineProfileBox, self).__init__() self.setLayout(QVBoxLayout()) self.layout().setAlignment(Qt.AlignTop) self.setFixedWidth(widget.CONTROL_AREA_WIDTH - 35) self.setFixedHeight(480) self.widget = widget self.diffraction_pattern_index = diffraction_pattern_index self.reflections_of_phases = reflections_of_phases self.limits = limits self.limit_types = limit_types self.CONTROL_AREA_WIDTH = widget.CONTROL_AREA_WIDTH-45 parent.layout().addWidget(self) container = self self.reflections_of_phases_tabs = gui.tabWidget(container) self.reflections_of_phases_box_array = [] for phase_index in range(len(self.reflections_of_phases)): reflections_of_phase_tab = gui.createTabPage(self.reflections_of_phases_tabs, OWGenericWidget.phase_name(self.widget.fit_global_parameters, phase_index)) reflections_of_phase_box = ReflectionsOfPhaseBox(widget=widget, widget_container=self, parent=reflections_of_phase_tab, diffraction_pattern_index = diffraction_pattern_index, phase_index=phase_index, reflections_of_phase = self.reflections_of_phases[phase_index], limit = self.limits[phase_index], limit_type = self.limit_types[phase_index]) self.reflections_of_phases_box_array.append(reflections_of_phase_box)
def dump_limit_types(self): OWGenericWidget.dump_variable_in_widget(self, "limit_types", variable_name_in_box="limit_type") self.widget.dump_limit_types()
def dump_reflections_of_phases(self): OWGenericWidget.dump_variable_in_widget(self, "reflections_of_phases", variable_name_in_box="reflections_of_phase") self.widget.dump_reflections_of_phases()
def set_data(self, line_profile): for phase_index in range(len(self.reflections_of_phases_box_array)): reflections_of_phases_box = self.reflections_of_phases_box_array[phase_index] reflections_of_phases_box.set_data(line_profile) self.reflections_of_phases_tabs.setTabText(phase_index, OWGenericWidget.phase_name(self.widget.fit_global_parameters, phase_index))