Ignore:
Timestamp:
Jun 21, 2017 11:17:18 AM (7 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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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.