Changeset 3ae9179 in sasview for src/sas


Ignore:
Timestamp:
Aug 10, 2018 6:17:13 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:
44777ee
Parents:
a2cc8b97
Message:

intermediate P(Q), S(Q) values are now saved in Data Explorer and are plottable

Location:
src/sas/qtgui
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • src/sas/qtgui/MainWindow/DataExplorer.py

    rebfe223 r3ae9179  
    44import time 
    55import logging 
     6import re 
    67 
    78from PyQt5 import QtCore 
     
    3637    # The controller which is responsible for managing signal slots connections 
    3738    # for the gui and providing an interface to the data model. 
     39    theory_plot_ID_pattern = re.compile(r"^([0-9]+)\s+(\[(.*)\]\s+)?(.*)$") 
    3840 
    3941    def __init__(self, parent=None, guimanager=None, manager=None): 
     
    504506                self.active_plots[plot_id].replacePlot(plot_id, plot) 
    505507            else: 
     508                # Don't plot intermediate data e.g. P(Q), S(Q) 
     509                match = self.theory_plot_ID_pattern.match(plot_id) 
     510                if match and match.groups()[1] != None: 
     511                    continue 
    506512                # 'sophisticated' test to generate standalone plot for residuals 
    507513                if 'esiduals' in plot.title: 
  • src/sas/qtgui/Perspectives/Fitting/FittingLogic.py

    r87dfca4 r3ae9179  
    132132        self._data.ymax = ymax 
    133133 
    134     def new1DPlot(self, return_data, tab_id): 
    135         """ 
    136         Create a new 1D data instance based on fitting results 
    137         """ 
    138         # Unpack return data from Calc1D 
    139         x, y, page_id, state, weight,\ 
    140         fid, toggle_mode_on, \ 
    141         elapsed, index, model,\ 
    142         data, update_chisqr, source = return_data 
    143  
     134    def _create1DPlot(self, tab_id, x, y, model, data, component=None): 
     135        """ 
     136        For internal use: create a new 1D data instance based on fitting results 
     137        component is a string indicating the model component, e.g. "P(Q)" 
     138        """ 
    144139        # Create the new plot 
    145140        new_plot = Data1D(x=x, y=y) 
     
    150145 
    151146        new_plot.group_id = data.group_id 
    152         new_plot.id = str(tab_id) + " " + model.id 
    153  
    154         if data.filename: 
    155             new_plot.name = model.name + " [" + data.filename + "]" # data file 
    156         else: 
    157             new_plot.name = model.name + " [" + model.id + "]"  # theory 
     147        new_plot.id = str(tab_id) + " " + ("[" + component + "] " if component else "") + model.id 
     148 
     149        # use data.filename for data, use model.id for theory 
     150        id_str = data.filename if data.filename else model.id 
     151        new_plot.name = model.name + ((" " + component) if component else "") + " [" + id_str + "]" 
    158152 
    159153        new_plot.title = new_plot.name 
     
    162156 
    163157        return new_plot 
     158 
     159    def new1DPlot(self, return_data, tab_id): 
     160        """ 
     161        Create a new 1D data instance based on fitting results 
     162        """ 
     163        # Unpack return data from Calc1D 
     164        x, y, page_id, state, weight,\ 
     165        fid, toggle_mode_on, \ 
     166        elapsed, index, model, \ 
     167        data, update_chisqr, source, \ 
     168        unsmeared_output, unsmeared_data, unsmeared_error, \ 
     169        pq_values, sq_values = return_data 
     170 
     171        return self._create1DPlot(tab_id, x, y, model, data) 
    164172 
    165173    def new2DPlot(self, return_data): 
     
    205213        return new_plot 
    206214 
     215    def new1DProductPlots(self, return_data, tab_id): 
     216        """ 
     217        If return_data contains separated P(Q) and S(Q) data, create 1D plots for each and return as a tuple. 
     218        Returns (None, None) if this data is unavailable. 
     219        """ 
     220        # Unpack return data from Calc1D 
     221        x, y, page_id, state, weight, \ 
     222        fid, toggle_mode_on, \ 
     223        elapsed, index, model, \ 
     224        data, update_chisqr, source, \ 
     225        unsmeared_output, unsmeared_data, unsmeared_error, \ 
     226        pq_values, sq_values = return_data 
     227 
     228        if pq_values is not None and sq_values is not None: 
     229            pq_plot = self._create1DPlot(tab_id, x, pq_values, model, data, component="P(Q)") 
     230            sq_plot = self._create1DPlot(tab_id, x, sq_values, model, data, component="S(Q)") 
     231 
     232            return pq_plot, sq_plot 
     233        else: 
     234            return None, None 
     235 
    207236    def computeDataRange(self): 
    208237        """ 
  • src/sas/qtgui/Perspectives/Fitting/FittingWidget.py

    ra2cc8b97 r3ae9179  
    21132113            self.updateModelIndex(fitted_data) 
    21142114        else: 
    2115             name = self.nameForFittedData(self.kernel_module.id) 
     2115            if not fitted_data.name: 
     2116                name = self.nameForFittedData(self.kernel_module.id) 
     2117            else: 
     2118                name = fitted_data.name 
    21162119            fitted_data.title = name 
    2117             fitted_data.name = name 
    21182120            fitted_data.filename = name 
    21192121            fitted_data.symbol = "Line" 
     
    22292231        self.model_data = fitted_data 
    22302232 
     2233        # Create plots for intermediate product data 
     2234        pq_data, sq_data = self.logic.new1DProductPlots(return_data, self.tab_id) 
     2235        if pq_data is not None and sq_data is not None: 
     2236            self.createNewIndex(pq_data) 
     2237            self.createNewIndex(sq_data) 
     2238 
    22312239    def complete2D(self, return_data): 
    22322240        """ 
  • src/sas/qtgui/Perspectives/Fitting/ModelThread.py

    rd4dac80 r3ae9179  
    222222            s_model = self.model.s_model 
    223223            p_model = self.model.p_model 
    224         elif hasattr(self.model, "get_composition_models"): 
    225             p_model, s_model = self.model.get_composition_models() 
    226  
    227         if p_model is not None and s_model is not None: 
    228             sq_values = numpy.zeros((len(self.data.x))) 
    229             pq_values = numpy.zeros((len(self.data.x))) 
    230             sq_values[index] = s_model.evalDistribution(self.data.x[index]) 
    231             pq_values[index] = p_model.evalDistribution(self.data.x[index]) 
     224        elif hasattr(self.model, "calc_composition_models"): 
     225            results = self.model.calc_composition_models(self.data.x[index]) 
     226            if results is not None: 
     227                pq_values, sq_values = results 
     228 
     229        if pq_values is None or sq_values is None: 
     230            if p_model is not None and s_model is not None: 
     231                sq_values = numpy.zeros((len(self.data.x))) 
     232                pq_values = numpy.zeros((len(self.data.x))) 
     233                sq_values[index] = s_model.evalDistribution(self.data.x[index]) 
     234                pq_values[index] = p_model.evalDistribution(self.data.x[index]) 
    232235 
    233236        elapsed = time.time() - self.starttime 
     
    243246                    self.data, 
    244247                    self.update_chisqr, 
    245                     self.source) 
     248                    self.source, 
     249                    unsmeared_output, unsmeared_data, unsmeared_error, 
     250                    pq_values, sq_values) 
    246251        else: 
    247252            self.complete(x=self.data.x[index], y=output[index], 
Note: See TracChangeset for help on using the changeset viewer.