- Timestamp:
- Sep 4, 2018 10:19:33 AM (6 years ago)
- Branches:
- ESS_GUI, ESS_GUI_batch_fitting, ESS_GUI_bumps_abstraction, ESS_GUI_iss1116, ESS_GUI_iss879, ESS_GUI_opencl, ESS_GUI_ordering, ESS_GUI_sync_sascalc
- Children:
- 70f4458
- Parents:
- c7809a9
- Location:
- src/sas/qtgui/Perspectives/Fitting
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
src/sas/qtgui/Perspectives/Fitting/FittingWidget.py
rc7809a9 rf3a19ad 1955 1955 # Crete/overwrite model items 1956 1956 self._model_model.clear() 1957 1958 # First, add parameters from the main model 1959 if model_name is not None: 1957 self._poly_model.clear() 1958 self._magnet_model.clear() 1959 1960 if model_name is None: 1961 if structure_factor not in (None, "None"): 1962 # S(Q) on its own, treat the same as a form factor 1963 self.kernel_module = None 1964 self.fromStructureFactorToQModel(structure_factor) 1965 else: 1966 # No models selected 1967 return 1968 else: 1960 1969 self.fromModelToQModel(model_name) 1961 1962 # Then, add structure factor derived parameters1963 if structure_factor is not None and structure_factor != "None":1964 if model_name is None:1965 # Instantiate the current sasmodel for SF-only models1966 self. kernel_module = self.models[structure_factor]()1967 self.fromStructureFactorToQModel(structure_factor)1968 else:1969 # A llow the SF combobox visibility for the given sasmodel1970 self. enableStructureFactorControl(structure_factor)1970 if structure_factor not in (None, "None"): 1971 # add S(Q) 1972 self.fromStructureFactorToQModel(structure_factor) 1973 else: 1974 # enable selection of S(Q) 1975 self.enableStructureFactorControl(structure_factor) 1976 # Add polydispersity to the model 1977 self.setPolyModel() 1978 # Add magnetic parameters to the model 1979 self.setMagneticModel() 1971 1980 1972 1981 # Then, add multishells … … 1974 1983 # Multishell models need additional treatment 1975 1984 self.addExtraShells() 1976 1977 # Add polydispersity to the model1978 self.setPolyModel()1979 # Add magnetic parameters to the model1980 self.setMagneticModel()1981 1985 1982 1986 # Adjust the table cells width … … 2059 2063 Setting model parameters into QStandardItemModel based on selected _structure factor_ 2060 2064 """ 2061 structure_module = generate.load_kernel_module(structure_factor)2062 2063 2065 s_kernel = self.models[structure_factor]() 2064 2066 p_kernel = self.kernel_module 2065 2067 2066 p_pars_len = len(p_kernel._model_info.parameters.kernel_parameters) 2067 s_pars_len = len(s_kernel._model_info.parameters.kernel_parameters) - 1 # no radius_effective 2068 2069 self.kernel_module = MultiplicationModel(p_kernel, s_kernel) 2070 all_params = self.kernel_module._model_info.parameters.kernel_parameters 2071 all_param_names = [param.name for param in all_params] 2072 2073 # S(Q) params from the product model are not necessarily the same as those from the S(Q) model; any conflicting 2074 # names with P(Q) params will cause a rename; we also lose radius_effective (for now...) 2075 2076 if "radius_effective_mode" in all_param_names: 2077 # for this version of sasmodels we do NOT kill radius_effective 2078 s_params = modelinfo.ParameterTable(all_params[p_pars_len:p_pars_len+s_pars_len]) 2079 s_params_orig = modelinfo.ParameterTable(s_kernel._model_info.parameters.kernel_parameters) 2068 if p_kernel is None: 2069 # Not a product model, just S(Q) 2070 self.kernel_module = s_kernel 2071 params = modelinfo.ParameterTable(self.kernel_module._model_info.parameters.kernel_parameters) 2072 new_rows = FittingUtilities.addSimpleParametersToModel(params, self.is2D) 2080 2073 else: 2081 # kill radius_effective 2082 s_pars_len -= 1 2083 s_params = modelinfo.ParameterTable(all_params[p_pars_len+1:p_pars_len+s_pars_len]) 2084 s_params_orig = modelinfo.ParameterTable(s_kernel._model_info.parameters.kernel_parameters[1:]) 2085 2086 # Get new rows for QModel 2087 # Any renamed parameters are stored as data in the relevant item, for later handling 2088 new_rows = FittingUtilities.addSimpleParametersToModel(s_params, self.is2D, s_params_orig) 2089 2090 # TODO: merge the rest of this implementation in 2091 # These parameters are not part of P(Q) nor S(Q), but are added only to the product model (e.g. specifying 2092 # structure factor calculation mode) 2093 # product_params = all_params[p_pars_len+s_pars_len:] 2074 p_pars_len = len(p_kernel._model_info.parameters.kernel_parameters) 2075 s_pars_len = len(s_kernel._model_info.parameters.kernel_parameters) 2076 2077 self.kernel_module = MultiplicationModel(p_kernel, s_kernel) 2078 all_params = self.kernel_module._model_info.parameters.kernel_parameters 2079 all_param_names = [param.name for param in all_params] 2080 2081 # S(Q) params from the product model are not necessarily the same as those from the S(Q) model; any 2082 # conflicting names with P(Q) params will cause a rename; we also lose radius_effective (for now...) 2083 2084 # TODO: merge rest of beta approx implementation in 2085 # This is to ensure compatibility when we merge beta approx support in...! 2086 2087 # radius_effective is always s_params[0] 2088 2089 # if radius_effective_mode is in all_params, then all_params contains radius_effective and we want to 2090 # keep it in the model 2091 2092 # if radius_effective_mode is NOT in all_params, then radius_effective should NOT be kept, because the user 2093 # cannot specify it themselves; but, make sure we only remove it if it's actually there in the first place 2094 # (sasmodels master removes it already) 2095 if "radius_effective_mode" in all_param_names: 2096 # Show all parameters 2097 s_params = modelinfo.ParameterTable(all_params[p_pars_len:p_pars_len+s_pars_len]) 2098 s_params_orig = modelinfo.ParameterTable(s_kernel._model_info.parameters.kernel_parameters) 2099 else: 2100 # Ensure radius_effective is not displayed 2101 s_params_orig = modelinfo.ParameterTable(s_kernel._model_info.parameters.kernel_parameters[1:]) 2102 if "radius_effective" in all_param_names: 2103 s_params = modelinfo.ParameterTable(all_params[p_pars_len+1:p_pars_len+s_pars_len]) 2104 else: 2105 s_params = modelinfo.ParameterTable(all_params[p_pars_len:p_pars_len+s_pars_len-1]) 2106 2107 # Get new rows for QModel 2108 # Any renamed parameters are stored as data in the relevant item, for later handling 2109 new_rows = FittingUtilities.addSimpleParametersToModel(s_params, self.is2D, s_params_orig) 2110 2111 # TODO: merge rest of beta approx implementation in 2112 # These parameters are not part of P(Q) nor S(Q), but are added only to the product model (e.g. specifying 2113 # structure factor calculation mode) 2114 # product_params = all_params[p_pars_len+s_pars_len:] 2094 2115 2095 2116 # Add heading row … … 2100 2121 self._model_model.appendRow(row) 2101 2122 # disable fitting of parameters not listed in self.kernel_module (probably radius_effective) 2102 if row[0].text() not in self.kernel_module.params.keys():2103 row_num = self._model_model.rowCount() - 12104 FittingUtilities.markParameterDisabled(self._model_model, row_num)2123 # if row[0].text() not in self.kernel_module.params.keys(): 2124 # row_num = self._model_model.rowCount() - 1 2125 # FittingUtilities.markParameterDisabled(self._model_model, row_num) 2105 2126 2106 2127 # Update the counter used for multishell display -
src/sas/qtgui/Perspectives/Fitting/UnitTesting/FittingWidgetTest.py
r00b7ddf0 rf3a19ad 254 254 self.widget.cbStructureFactor.setCurrentIndex(structure_index) 255 255 256 # We have 4 more rows now257 self.assertEqual(self.widget._model_model.rowCount(), rowcount+ 5)256 # We have 3 more param rows now (radius_effective is removed), and a new heading 257 self.assertEqual(self.widget._model_model.rowCount(), rowcount+4) 258 258 259 259 # Switch models … … 274 274 last_index = self.widget.cbStructureFactor.count() 275 275 self.widget.cbStructureFactor.setCurrentIndex(last_index-1) 276 # Do we have all the rows ?276 # Do we have all the rows (incl. radius_effective & heading row)? 277 277 self.assertEqual(self.widget._model_model.rowCount(), 5) 278 278
Note: See TracChangeset
for help on using the changeset viewer.