Changeset 00f7ff1 in sasview


Ignore:
Timestamp:
Jun 21, 2017 11:17:18 AM (8 years ago)
Author:
Paul Kienzle <pkienzle@…>
Branches:
master, ESS_GUI, ESS_GUI_Docs, ESS_GUI_batch_fitting, ESS_GUI_bumps_abstraction, ESS_GUI_iss1116, ESS_GUI_iss879, ESS_GUI_iss959, ESS_GUI_opencl, ESS_GUI_ordering, ESS_GUI_sync_sascalc, magnetic_scatt, release-4.2.2, ticket-1009, ticket-1094-headless, ticket-1242-2d-resolution, ticket-1243, ticket-1249, ticket885, unittest-saveload
Children:
81b35396
Parents:
2a0f33f
Message:

move sim fit state to sascalc pagestate

Location:
src/sas
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • src/sas/sascalc/fit/pagestate.py

    r2a0f33f r00f7ff1  
    2222import xml.dom.minidom 
    2323from xml.dom.minidom import parseString 
     24from xml.dom.minidom import getDOMImplementation 
    2425from lxml import etree 
    2526 
    2627from sasmodels import convert 
    2728import sasmodels.weights 
     29 
     30from sas.sasview import __version__ as SASVIEW_VERSION 
    2831 
    2932import sas.sascalc.dataloader 
     
    141144    Contains information to reconstruct a page of the fitpanel. 
    142145    """ 
    143     def __init__(self, parent=None, model=None, data=None): 
     146    def __init__(self, model=None, data=None): 
    144147        """ 
    145148        Initialize the current state 
     
    189192        # fit page manager 
    190193        self.manager = None 
    191         # Store the parent of this panel parent 
    192         # For this application fitpanel is the parent 
    193         self.parent = parent 
    194194        # Event_owner is the owner of model event 
    195195        self.event_owner = None 
     
    286286            model = self.model.clone() 
    287287            model.name = self.model.name 
    288         obj = PageState(self.parent, model=model) 
     288        obj = PageState(model=model) 
    289289        obj.file = copy.deepcopy(self.file) 
    290290        obj.data = copy.deepcopy(self.data) 
     
    773773        :param batch_fit_state: simultaneous fit state 
    774774        """ 
    775         from xml.dom.minidom import getDOMImplementation 
    776  
    777775        # Check whether we have to write a standalone XML file 
    778776        if doc is None: 
     
    802800 
    803801        attr = newdoc.createAttribute("version") 
    804         from sas import sasview 
    805         attr.nodeValue = sasview.__version__ 
     802        attr.nodeValue = SASVIEW_VERSION 
    806803        # attr.nodeValue = '1.0' 
    807804        top_element.setAttributeNode(attr) 
     
    10861083                    setattr(self, varname, dic) 
    10871084 
     1085class SimFitPageState: 
     1086    """ 
     1087    State of the simultaneous fit page for saving purposes 
     1088    """ 
     1089 
     1090    def __init__(self): 
     1091        # Sim Fit Page Number 
     1092        self.fit_page_no = None 
     1093        # Select all data 
     1094        self.select_all = False 
     1095        # Data sets sent to fit page 
     1096        self.model_list = [] 
     1097        # Data sets to be fit 
     1098        self.model_to_fit = [] 
     1099        # Number of constraints 
     1100        self.no_constraint = 0 
     1101        # Dictionary of constraints 
     1102        self.constraint_dict = {} 
     1103        # List of constraints 
     1104        self.constraints_list = [] 
    10881105 
    10891106class Reader(CansasReader): 
     
    11681185                                         namespaces={'ns': CANSAS_NS}) 
    11691186            if simfitstate: 
    1170                 from simfitpage import SimFitPageState 
    11711187                sim_fit_state = SimFitPageState() 
    11721188                simfitstate_0 = simfitstate[0] 
  • src/sas/sasgui/perspectives/fitting/basepage.py

    r2a0f33f r00f7ff1  
    157157        self.disp_cb_dict = {} 
    158158 
    159         # self.state = PageState(parent=parent) 
     159        # self.state = PageState() 
    160160        # dictionary containing list of models 
    161161        self.model_list_box = {} 
     
    204204        self.fitrange = True 
    205205        # Create memento to save the current state 
    206         self.state = PageState(parent=self.parent, 
    207                                model=self.model, data=self.data) 
     206        self.state = PageState(model=self.model, data=self.data) 
    208207        # flag to determine if state has change 
    209208        self.state_change = False 
  • src/sas/sasgui/perspectives/fitting/fitting.py

    r2a0f33f r00f7ff1  
    2323import traceback 
    2424 
     25import bumps.options 
     26from bumps.gui.fit_dialog import show_fit_config 
     27try: 
     28    from bumps.gui.fit_dialog import EVT_FITTER_CHANGED 
     29except ImportError: 
     30    # CRUFT: bumps 0.7.5.8 and below 
     31    EVT_FITTER_CHANGED = None  # type: wx.PyCommandEvent 
     32 
    2533from sas.sascalc.dataloader.loader import Loader 
    2634from sas.sascalc.fit.BumpsFitting import BumpsFit as Fit 
    27 from sas.sascalc.fit.pagestate import Reader 
     35from sas.sascalc.fit.pagestate import Reader, PageState, SimFitPageState 
    2836 
    2937from sas.sasgui.guiframe.dataFitting import Data2D 
     
    3745from sas.sasgui.guiframe.plugin_base import PluginBase 
    3846from sas.sasgui.guiframe.data_processor import BatchCell 
    39 from sas.sasgui.perspectives.fitting.console import ConsoleUpdate 
    40 from sas.sasgui.perspectives.fitting.fitproblem import FitProblemDictionary 
    41 from sas.sasgui.perspectives.fitting.fitpanel import FitPanel 
    42 from sas.sasgui.perspectives.fitting.resultpanel import ResultPanel, PlotResultEvent 
    43  
    44 from sas.sasgui.perspectives.fitting.fit_thread import FitThread 
    45 from sas.sasgui.perspectives.fitting.pagestate import Reader 
    46 from sas.sasgui.perspectives.fitting.fitpage import Chi2UpdateEvent 
     47from sas.sasgui.guiframe.gui_manager import MDIFrame 
     48from sas.sasgui.guiframe.documentation_window import DocumentationWindow 
     49 
    4750from sas.sasgui.perspectives.calculator.model_editor import TextDialog 
    4851from sas.sasgui.perspectives.calculator.model_editor import EditorWindow 
    49 from sas.sasgui.guiframe.gui_manager import MDIFrame 
    50 from sas.sasgui.guiframe.documentation_window import DocumentationWindow 
    51 from sas.sasgui.perspectives.fitting.gpu_options import GpuOptions 
    52  
     52 
     53from .fitting_widgets import DataDialog 
     54from .fit_thread import FitThread 
     55from .fitpage import Chi2UpdateEvent 
     56from .console import ConsoleUpdate 
     57from .fitproblem import FitProblemDictionary 
     58from .fitpanel import FitPanel 
     59from .model_thread import Calc1D, Calc2D 
     60from .resultpanel import ResultPanel, PlotResultEvent 
     61from .gpu_options import GpuOptions 
    5362from . import models 
    5463 
     
    6574    ON_MAC = True 
    6675 
    67 import bumps.options 
    68 from bumps.gui.fit_dialog import show_fit_config 
    69 try: 
    70     from bumps.gui.fit_dialog import EVT_FITTER_CHANGED 
    71 except ImportError: 
    72     # CRUFT: bumps 0.7.5.8 and below 
    73     EVT_FITTER_CHANGED = None  # type: wx.PyCommandEvent 
    7476 
    7577class Plugin(PluginBase): 
     
    240242        Get the python editor panel 
    241243        """ 
     244        from sas.sasgui.perspectives.calculator.pyconsole import PyConsole 
     245 
    242246        event_id = event.GetId() 
    243247        label = self.edit_menu.GetLabel(event_id) 
    244         from sas.sasgui.perspectives.calculator.pyconsole import PyConsole 
    245248        filename = os.path.join(models.find_plugins_dir(), label) 
    246249        frame = PyConsole(parent=self.parent, manager=self, 
     
    284287                        break 
    285288        except Exception: 
    286             import traceback; traceback.print_exc() 
     289            traceback.print_exc() 
    287290            msg = 'Delete Error: \nCould not delete the file; Check if in use.' 
    288291            wx.MessageBox(msg, 'Error') 
     
    558561        else: 
    559562            if len(data_list) > MAX_NBR_DATA: 
    560                 from fitting_widgets import DataDialog 
    561563                dlg = DataDialog(data_list=data_list, nb_data=MAX_NBR_DATA) 
    562564                if dlg.ShowModal() == wx.ID_OK: 
     
    603605        : param datainfo: data 
    604606        """ 
    605         from pagestate import PageState 
    606         from simfitpage import SimFitPageState 
    607607        if isinstance(state, PageState): 
    608608            state = state.clone() 
    609609            self.temp_state.append(state) 
    610610        elif isinstance(state, SimFitPageState): 
    611             state.load_from_save_state(self) 
     611            if self.fit_panel.sim_page is None: 
     612                self.fit_panel.add_sim_page() 
     613            self.fit_panel.sim_page.load_from_save_state(state) 
    612614        else: 
    613615            self.temp_state = [] 
     
    14561458        if "Data" not in batch_outputs.keys(): 
    14571459            batch_outputs["Data"] = [] 
    1458         from sas.sasgui.guiframe.data_processor import BatchCell 
    14591460        cell = BatchCell() 
    14601461        cell.label = data.name 
     
    15651566            msg = ("Fit completed but the following error occurred: %s" 
    15661567                   % sys.exc_value) 
    1567             #import traceback; msg = "\n".join((traceback.format_exc(), msg)) 
     1568            #msg = "\n".join((traceback.format_exc(), msg)) 
    15681569            evt = StatusEvent(status=msg, info="warning", type="stop") 
    15691570            wx.PostEvent(self.parent, evt) 
     
    19201921            return None 
    19211922        try: 
    1922             from model_thread import Calc2D 
    19231923            ## If a thread is already started, stop it 
    19241924            if (self.calc_2D is not None) and self.calc_2D.isrunning(): 
     
    19671967            return 
    19681968        try: 
    1969             from model_thread import Calc1D 
    19701969            ## If a thread is already started, stop it 
    19711970            if (self.calc_1D is not None) and self.calc_1D.isrunning(): 
  • src/sas/sasgui/perspectives/fitting/simfitpage.py

    r959eb01 r00f7ff1  
    99from wx.lib.scrolledpanel import ScrolledPanel 
    1010 
     11from sas.sascalc.fit.pagestate import SimFitPageState 
    1112from sas.sasgui.guiframe.events import StatusEvent, PanelOnFocusEvent 
    1213from sas.sasgui.guiframe.panel_base import PanelBase 
     
    4647 
    4748    return fittable_param 
    48  
    4949 
    5050class SimultaneousFitPage(ScrolledPanel, PanelBase): 
     
    143143        return self.state 
    144144 
     145    def load_from_save_state(self, sim_state): 
     146        """ 
     147        Load in a simultaneous/constrained fit from a save state 
     148        :param fit: Fitpanel object 
     149        :return: None 
     150        """ 
     151        model_map = {} 
     152        # Process each model and associate old M# with new M# 
     153        i = 0 
     154        for model in self.model_list: 
     155            model_id = self._format_id(model[1].keys()[0]) 
     156            for saved_model in sim_state.model_list: 
     157                save_id = saved_model.pop('name') 
     158                saved_model['name'] = save_id 
     159                save_id = self._format_id(save_id) 
     160                if save_id == model_id: 
     161                    model_map[saved_model.pop('fit_page_source')] = \ 
     162                        model[3].name 
     163                    check = bool(saved_model.pop('checked')) 
     164                    self.model_list[i][0].SetValue(check) 
     165                    break 
     166            i += 1 
     167 
     168        self.check_model_name(None) 
     169 
     170        if len(sim_state.constraints_list) > 0: 
     171            self.hide_constraint.SetValue(False) 
     172            self.show_constraint.SetValue(True) 
     173            self._display_constraint(None) 
     174 
     175        for index, item in enumerate(sim_state.constraints_list): 
     176            model_cbox = item.pop('model_cbox') 
     177            if model_cbox != "": 
     178                constraint_value = item.pop('constraint') 
     179                param = item.pop('param_cbox') 
     180                equality = item.pop('egal_txt') 
     181                for key, value in model_map.iteritems(): 
     182                    model_cbox.replace(key, value) 
     183                    constraint_value.replace(key, value) 
     184 
     185                self.constraints_list[index][0].SetValue(model_cbox) 
     186                self._on_select_model(None) 
     187                self.constraints_list[index][1].SetValue(param) 
     188                self.constraints_list[index][2].SetLabel(equality) 
     189                self.constraints_list[index][3].SetValue(constraint_value) 
     190                self._on_add_constraint(None) 
     191                self._manager.sim_page = self 
     192 
     193    def _format_id(self, original_id): 
     194        original_id = original_id.rstrip('1234567890.') 
     195        new_id_list = original_id.split() 
     196        new_id = ' '.join(new_id_list) 
     197        return new_id 
     198 
     199 
     200 
    145201    def draw_page(self): 
    146202        """ 
    147203        Construct the Simultaneous/Constrained fit page. fills the first 
    148         region (sizer1) with the list of available fit page pairs of data  
     204        region (sizer1) with the list of available fit page pairs of data 
    149205        and models.  Then fills sizer2 with the checkbox for adding 
    150206        constraints, and finally fills sizer3 with the fit button and 
     
    10201076        cbox.Append(name, value) 
    10211077    cbox.SetStringSelection(selected) 
    1022  
    1023  
    1024 class SimFitPageState: 
    1025     """ 
    1026     State of the simultaneous fit page for saving purposes 
    1027     """ 
    1028  
    1029     def __init__(self): 
    1030         # Sim Fit Page Number 
    1031         self.fit_page_no = None 
    1032         # Select all data 
    1033         self.select_all = False 
    1034         # Data sets sent to fit page 
    1035         self.model_list = [] 
    1036         # Data sets to be fit 
    1037         self.model_to_fit = [] 
    1038         # Number of constraints 
    1039         self.no_constraint = 0 
    1040         # Dictionary of constraints 
    1041         self.constraint_dict = {} 
    1042         # List of constraints 
    1043         self.constraints_list = [] 
    1044  
    1045     def load_from_save_state(self, fit): 
    1046         """ 
    1047         Load in a simultaneous/constrained fit from a save state 
    1048         :param fit: Fitpanel object 
    1049         :return: None 
    1050         """ 
    1051  
    1052         model_map = {} 
    1053         if fit.fit_panel.sim_page is None: 
    1054             fit.fit_panel.add_sim_page() 
    1055         sim_page = fit.fit_panel.sim_page 
    1056  
    1057         # Process each model and associate old M# with new M# 
    1058         i = 0 
    1059         for model in sim_page.model_list: 
    1060             model_id = self._format_id(model[1].keys()[0]) 
    1061             for saved_model in self.model_list: 
    1062                 save_id = saved_model.pop('name') 
    1063                 saved_model['name'] = save_id 
    1064                 save_id = self._format_id(save_id) 
    1065                 if save_id == model_id: 
    1066                     model_map[saved_model.pop('fit_page_source')] = \ 
    1067                         model[3].name 
    1068                     check = bool(saved_model.pop('checked')) 
    1069                     sim_page.model_list[i][0].SetValue(check) 
    1070                     break 
    1071             i += 1 
    1072         sim_page.check_model_name(None) 
    1073  
    1074         if len(self.constraints_list) > 0: 
    1075             sim_page.hide_constraint.SetValue(False) 
    1076             sim_page.show_constraint.SetValue(True) 
    1077             sim_page._display_constraint(None) 
    1078  
    1079         for index, item in enumerate(self.constraints_list): 
    1080             model_cbox = item.pop('model_cbox') 
    1081             if model_cbox != "": 
    1082                 constraint_value = item.pop('constraint') 
    1083                 param = item.pop('param_cbox') 
    1084                 equality = item.pop('egal_txt') 
    1085                 for key, value in model_map.iteritems(): 
    1086                     model_cbox.replace(key, value) 
    1087                     constraint_value.replace(key, value) 
    1088  
    1089                 sim_page.constraints_list[index][0].SetValue(model_cbox) 
    1090                 sim_page._on_select_model(None) 
    1091                 sim_page.constraints_list[index][1].SetValue(param) 
    1092                 sim_page.constraints_list[index][2].SetLabel(equality) 
    1093                 sim_page.constraints_list[index][3].SetValue(constraint_value) 
    1094                 sim_page._on_add_constraint(None) 
    1095                 sim_page._manager.sim_page = sim_page 
    1096  
    1097     def _format_id(self, original_id): 
    1098         original_id = original_id.rstrip('1234567890.') 
    1099         new_id_list = original_id.split() 
    1100         new_id = ' '.join(new_id_list) 
    1101         return new_id 
Note: See TracChangeset for help on using the changeset viewer.