Changes in / [5e0891b:d4ba565] in sasview


Ignore:
Location:
src/sas/qtgui/Perspectives/Fitting
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • src/sas/qtgui/Perspectives/Fitting/FittingLogic.py

    rdcabba7 rdcabba7  
    161161        Create a new 1D data instance based on fitting results 
    162162        """ 
     163 
    163164        return self._create1DPlot(tab_id, return_data['x'], return_data['y'], 
    164165                                  return_data['model'], return_data['data']) 
     
    211212        (pq_plot, sq_plot). If either are unavailable, the corresponding plot is None. 
    212213        """ 
    213         plots = [] 
    214         for name, result in return_data['intermediate_results'].items(): 
    215             plots.append(self._create1DPlot(tab_id, return_data['x'], result, 
    216                          return_data['model'], return_data['data'], 
    217                          component=name)) 
    218         return plots 
     214 
     215        pq_plot = None 
     216        sq_plot = None 
     217 
     218        if return_data.get('pq_values', None) is not None: 
     219            pq_plot = self._create1DPlot(tab_id, return_data['x'], 
     220                    return_data['pq_values'], return_data['model'], 
     221                    return_data['data'], component="P(Q)") 
     222        if return_data.get('sq_values', None) is not None: 
     223            sq_plot = self._create1DPlot(tab_id, return_data['x'], 
     224                    return_data['sq_values'], return_data['model'], 
     225                    return_data['data'], component="S(Q)") 
     226 
     227        return pq_plot, sq_plot 
    219228 
    220229    def computeDataRange(self): 
  • src/sas/qtgui/Perspectives/Fitting/FittingUtilities.py

    r70f4458 r70f4458  
    167167    return rows 
    168168 
    169 def addSimpleParametersToModel(parameters, is2D, parameters_original=None, model=None, view=None, row_num=None): 
     169def addSimpleParametersToModel(parameters, is2D, parameters_original=None, model=None, view=None): 
    170170    """ 
    171171    Update local ModelModel with sasmodel parameters (non-dispersed, non-magnetic) 
     
    216216        # Append to the model and use the combobox, if required 
    217217        if None not in (model, view): 
    218             if row_num is None: 
    219                 model.appendRow(row) 
    220             else: 
    221                 model.insertRow(row_num, row) 
    222                 row_num += 1 
    223  
     218            model.appendRow(row) 
    224219            if cbox: 
    225220                view.setIndexWidget(item2.index(), cbox) 
    226  
    227221        rows.append(row) 
    228222 
  • src/sas/qtgui/Perspectives/Fitting/FittingWidget.py

    rd4ba565 rd4ba565  
    21022102            return 
    21032103 
    2104         product_params = None 
    2105  
    21062104        if self.kernel_module is None: 
    21072105            # Structure factor is the only selected model; build it and show all its params 
     
    21092107            s_params = self.kernel_module._model_info.parameters 
    21102108            s_params_orig = s_params 
     2109 
    21112110        else: 
    21122111            s_kernel = self.models[structure_factor]() 
     
    21252124            if "radius_effective_mode" in all_param_names: 
    21262125                # Show all parameters 
    2127                 # In this case, radius_effective is NOT pruned by sasmodels.product 
    21282126                s_params = modelinfo.ParameterTable(all_params[p_pars_len:p_pars_len+s_pars_len]) 
    21292127                s_params_orig = modelinfo.ParameterTable(s_kernel._model_info.parameters.kernel_parameters) 
    2130                 product_params = modelinfo.ParameterTable( 
    2131                         self.kernel_module._model_info.parameters.kernel_parameters[p_pars_len+s_pars_len:]) 
    21322128            else: 
    21332129                # Ensure radius_effective is not displayed 
    21342130                s_params_orig = modelinfo.ParameterTable(s_kernel._model_info.parameters.kernel_parameters[1:]) 
    21352131                if "radius_effective" in all_param_names: 
    2136                     # In this case, radius_effective is NOT pruned by sasmodels.product 
    21372132                    s_params = modelinfo.ParameterTable(all_params[p_pars_len+1:p_pars_len+s_pars_len]) 
    2138                     product_params = modelinfo.ParameterTable( 
    2139                             self.kernel_module._model_info.parameters.kernel_parameters[p_pars_len+s_pars_len:]) 
    21402133                else: 
    2141                     # In this case, radius_effective is pruned by sasmodels.product 
    21422134                    s_params = modelinfo.ParameterTable(all_params[p_pars_len:p_pars_len+s_pars_len-1]) 
    2143                     product_params = modelinfo.ParameterTable( 
    2144                             self.kernel_module._model_info.parameters.kernel_parameters[p_pars_len+s_pars_len-1:]) 
    21452135 
    21462136        # Add heading row 
     
    21502140        # Any renamed parameters are stored as data in the relevant item, for later handling 
    21512141        FittingUtilities.addSimpleParametersToModel( 
    2152                 parameters=s_params, 
    2153                 is2D=self.is2D, 
    2154                 parameters_original=s_params_orig, 
    2155                 model=self._model_model, 
    2156                 view=self.lstParams) 
    2157  
    2158         # Insert product-only params into QModel 
    2159         if product_params: 
    2160             prod_rows = FittingUtilities.addSimpleParametersToModel( 
    2161                     parameters=product_params, 
    2162                     is2D=self.is2D, 
    2163                     parameters_original=None, 
    2164                     model=self._model_model, 
    2165                     view=self.lstParams, 
    2166                     row_num=2) 
    2167  
    2168             # Since this all happens after shells are dealt with and we've inserted rows, fix this counter 
    2169             self._n_shells_row += len(prod_rows) 
     2142                s_params, 
     2143                self.is2D, 
     2144                s_params_orig, 
     2145                self._model_model, 
     2146                self.lstParams) 
    21702147 
    21712148    def haveParamsToFit(self): 
     
    24282405 
    24292406        # Create plots for intermediate product data 
    2430         plots = self.logic.new1DProductPlots(return_data, self.tab_id) 
    2431         for plot in plots: 
    2432             plot.symbol = "Line" 
    2433             self.createNewIndex(plot) 
    2434             new_plots.append(plot) 
     2407        pq_data, sq_data = self.logic.new1DProductPlots(return_data, self.tab_id) 
     2408        if pq_data is not None: 
     2409            pq_data.symbol = "Line" 
     2410            self.createNewIndex(pq_data) 
     2411            # self.communicate.plotUpdateSignal.emit([pq_data]) 
     2412            new_plots.append(pq_data) 
     2413        if sq_data is not None: 
     2414            sq_data.symbol = "Line" 
     2415            self.createNewIndex(sq_data) 
     2416            # self.communicate.plotUpdateSignal.emit([sq_data]) 
     2417            new_plots.append(sq_data) 
    24352418 
    24362419        for plot in new_plots: 
     
    28332816        self._num_shell_params = len(new_rows) 
    28342817        self.current_shell_displayed = index 
    2835  
    2836         # Change 'n' in the parameter model, thereby updating the underlying model 
    2837         self._model_model.item(self._n_shells_row, 1).setText(str(index)) 
    28382818 
    28392819        # Update relevant models 
  • src/sas/qtgui/Perspectives/Fitting/ModelThread.py

    r5181e9b rdcabba7  
    164164        index = (self.qmin <= self.data.x) & (self.data.x <= self.qmax) 
    165165 
    166         intermediate_results = None 
    167  
    168166        # If we use a smearer, also return the unsmeared model 
    169167        unsmeared_output = None 
     
    176174            mask = self.data.x[first_bin:last_bin+1] 
    177175            unsmeared_output = numpy.zeros((len(self.data.x))) 
    178  
    179             return_data = self.model.calculate_Iq(mask) 
    180             if isinstance(return_data, tuple): 
    181                 # see sasmodels beta_approx: SasviewModel.calculate_Iq 
    182                 # TODO: implement intermediate results in smearers 
    183                 return_data, _ = return_data 
    184             unsmeared_output[first_bin:last_bin+1] = return_data 
     176            unsmeared_output[first_bin:last_bin+1] = self.model.evalDistribution(mask) 
    185177            output = self.smearer(unsmeared_output, first_bin, last_bin) 
    186178 
     
    201193                unsmeared_error=unsmeared_error 
    202194        else: 
    203             return_data = self.model.calculate_Iq(self.data.x[index]) 
    204             if isinstance(return_data, tuple): 
    205                 # see sasmodels beta_approx: SasviewModel.calculate_Iq 
    206                 return_data, intermediate_results = return_data 
    207             output[index] = return_data 
    208  
    209         if intermediate_results: 
    210             # the model returns a callable which is then used to retrieve the data 
    211             intermediate_results = intermediate_results() 
    212         else: 
    213             # TODO: this conditional branch needs refactoring 
    214             sq_values = None 
    215             pq_values = None 
    216             s_model = None 
    217             p_model = None 
    218  
    219             if isinstance(self.model, MultiplicationModel): 
    220                 s_model = self.model.s_model 
    221                 p_model = self.model.p_model 
    222  
    223             elif hasattr(self.model, "calc_composition_models"): 
    224                 results = self.model.calc_composition_models(self.data.x[index]) 
    225                 if results is not None: 
    226                     pq_values, sq_values = results 
    227  
    228             if pq_values is None or sq_values is None: 
    229                 if p_model is not None and s_model is not None: 
    230                     sq_values = numpy.zeros((len(self.data.x))) 
    231                     pq_values = numpy.zeros((len(self.data.x))) 
    232                     sq_values[index] = s_model.evalDistribution(self.data.x[index]) 
    233                     pq_values[index] = p_model.evalDistribution(self.data.x[index]) 
    234  
    235             if pq_values is not None and sq_values is not None: 
    236                 intermediate_results  = { 
    237                     "P(Q)": pq_values, 
    238                     "S(Q)": sq_values 
    239                 } 
    240             else: 
    241                 intermediate_results = {} 
     195            output[index] = self.model.evalDistribution(self.data.x[index]) 
     196 
     197        sq_values = None 
     198        pq_values = None 
     199        s_model = None 
     200        p_model = None 
     201        if isinstance(self.model, MultiplicationModel): 
     202            s_model = self.model.s_model 
     203            p_model = self.model.p_model 
     204        elif hasattr(self.model, "calc_composition_models"): 
     205            results = self.model.calc_composition_models(self.data.x[index]) 
     206            if results is not None: 
     207                pq_values, sq_values = results 
     208 
     209        if pq_values is None or sq_values is None: 
     210            if p_model is not None and s_model is not None: 
     211                sq_values = numpy.zeros((len(self.data.x))) 
     212                pq_values = numpy.zeros((len(self.data.x))) 
     213                sq_values[index] = s_model.evalDistribution(self.data.x[index]) 
     214                pq_values[index] = p_model.evalDistribution(self.data.x[index]) 
    242215 
    243216        elapsed = time.time() - self.starttime 
     
    250223            source = self.source, unsmeared_output = unsmeared_output, 
    251224            unsmeared_data = unsmeared_data, unsmeared_error = unsmeared_error, 
    252             intermediate_results = intermediate_results) 
     225            pq_values = pq_values, sq_values = sq_values) 
    253226 
    254227        if LocalConfig.USING_TWISTED: 
Note: See TracChangeset for help on using the changeset viewer.