Changeset 5181e9b in sasview


Ignore:
Timestamp:
Sep 8, 2018 3:34:11 AM (6 years ago)
Author:
Torin Cooper-Bennun <torin.cooper-bennun@…>
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:
f3e5956
Parents:
254199c
Message:

ModelThread? supports sasmodels beta_approx version of calculate_Iq, which returns intermediate results

File:
1 edited

Legend:

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

    r9ba91b7 r5181e9b  
    164164        index = (self.qmin <= self.data.x) & (self.data.x <= self.qmax) 
    165165 
     166        intermediate_results = None 
     167 
    166168        # If we use a smearer, also return the unsmeared model 
    167169        unsmeared_output = None 
     
    174176            mask = self.data.x[first_bin:last_bin+1] 
    175177            unsmeared_output = numpy.zeros((len(self.data.x))) 
    176             unsmeared_output[first_bin:last_bin+1] = self.model.evalDistribution(mask) 
     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 
    177185            output = self.smearer(unsmeared_output, first_bin, last_bin) 
    178186 
     
    193201                unsmeared_error=unsmeared_error 
    194202        else: 
    195             output[index] = self.model.evalDistribution(self.data.x[index]) 
    196  
    197         results_eval = {} 
    198         intermediate_results = getattr(self.model, "_intermediate_results", None) 
    199         if callable(intermediate_results): 
    200             # support for future sasmodels (beta approx support) - it returns a dict of intermediate results, keyed by 
    201             # name 
    202             results_eval = intermediate_results() 
    203         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 
    204214            sq_values = None 
    205215            pq_values = None 
    206216            s_model = None 
    207217            p_model = None 
     218 
    208219            if isinstance(self.model, MultiplicationModel): 
    209220                s_model = self.model.s_model 
    210221                p_model = self.model.p_model 
     222 
    211223            elif hasattr(self.model, "calc_composition_models"): 
    212224                results = self.model.calc_composition_models(self.data.x[index]) 
     
    222234 
    223235            if pq_values is not None and sq_values is not None: 
    224                 results_eval = { 
     236                intermediate_results = { 
    225237                    "P(Q)": pq_values, 
    226238                    "S(Q)": sq_values 
    227239                } 
     240            else: 
     241                intermediate_results = {} 
    228242 
    229243        elapsed = time.time() - self.starttime 
     
    236250            source = self.source, unsmeared_output = unsmeared_output, 
    237251            unsmeared_data = unsmeared_data, unsmeared_error = unsmeared_error, 
    238             intermediate_results = results_eval) 
     252            intermediate_results = intermediate_results) 
    239253 
    240254        if LocalConfig.USING_TWISTED: 
Note: See TracChangeset for help on using the changeset viewer.