Ignore:
Timestamp:
Apr 27, 2012 4:20:33 PM (13 years ago)
Author:
Mathieu Doucet <doucetm@…>
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, costrafo411, magnetic_scatt, release-4.1.1, release-4.1.2, release-4.2.2, release_4.0.1, ticket-1009, ticket-1094-headless, ticket-1242-2d-resolution, ticket-1243, ticket-1249, ticket885, unittest-saveload
Children:
f992a06
Parents:
9e07bc4
Message:

Pep-8-ification

File:
1 edited

Legend:

Unmodified
Added
Removed
  • fittingview/src/sans/perspectives/fitting/fitting.py

    ra5f6748 rf32d144  
    22    Fitting perspective 
    33""" 
    4  
    54################################################################################ 
    65#This software was developed by the University of Tennessee as part of the 
    76#Distributed Data Analysis of Neutron Scattering Experiments (DANSE) 
    8 #project funded by the US National Science Foundation.  
     7#project funded by the US National Science Foundation. 
    98# 
    109#See the license text in license.txt 
     
    1211#copyright 2009, University of Tennessee 
    1312################################################################################ 
    14  
    15  
    1613import re 
    1714import sys 
     
    4845SANS_F_TOL = 5e-05 
    4946 
    50 (PageInfoEvent, EVT_PAGE_INFO)   = wx.lib.newevent.NewEvent() 
    51  
    52  
    53 if sys.platform.count("darwin")==0: 
     47(PageInfoEvent, EVT_PAGE_INFO) = wx.lib.newevent.NewEvent() 
     48 
     49 
     50if sys.platform.count("darwin") == 0: 
    5451    ON_MAC = False 
    5552else: 
    56     ON_MAC = True    
     53    ON_MAC = True 
     54 
    5755 
    5856class Plugin(PluginBase): 
    5957    """ 
    60     Fitting plugin is used to perform fit  
     58    Fitting plugin is used to perform fit 
    6159    """ 
    6260    def __init__(self, standalone=False): 
     
    7876        self.elapsed = 0.022 
    7977        # the type of optimizer selected, park or scipy 
    80         self.fitter  = None 
     78        self.fitter = None 
    8179        self.fit_panel = None 
    8280        #let fit ready 
     
    8482        #Flag to let the plug-in know that it is running stand alone 
    8583        self.standalone = True 
    86         ## dictionary of page closed and id  
     84        ## dictionary of page closed and id 
    8785        self.closed_page_dict = {} 
    8886        ## Fit engine 
     
    106104        self.test_model_color = None 
    107105        #Create a reader for fit page's state 
    108         self.state_reader = None  
     106        self.state_reader = None 
    109107        self._extensions = '.fitv' 
    110108        self.scipy_id = wx.NewId() 
     
    119117        self.page_finder = {} 
    120118        # Log startup 
    121         logging.info("Fitting plug-in started")  
     119        logging.info("Fitting plug-in started") 
    122120        self.batch_capable = self.get_batch_capable() 
    123121     
     
    169167        id1 = wx.NewId() 
    170168        simul_help = "Add new fit panel" 
    171         self.menu1.Append(id1, '&New Fit Page',simul_help) 
     169        self.menu1.Append(id1, '&New Fit Page', simul_help) 
    172170        wx.EVT_MENU(owner, id1, self.on_add_new_page) 
    173171        self.menu1.AppendSeparator() 
    174172        self.id_simfit = wx.NewId() 
    175173        simul_help = "Simultaneous Fit" 
    176         self.menu1.Append(self.id_simfit, '&Simultaneous Fit',simul_help) 
     174        self.menu1.Append(self.id_simfit, '&Simultaneous Fit', simul_help) 
    177175        wx.EVT_MENU(owner, self.id_simfit, self.on_add_sim_page) 
    178176        self.sim_menu = self.menu1.FindItemById(self.id_simfit) 
    179         self.sim_menu.Enable(False)  
     177        self.sim_menu.Enable(False) 
    180178        #combined Batch 
    181179        self.id_batchfit = wx.NewId() 
    182180        batch_help = "Combined Batch" 
    183181        self.menu1.Append(self.id_batchfit, '&Combine Batch Fit', batch_help) 
    184         wx.EVT_MENU(owner, self.id_batchfit,  self.on_add_sim_page) 
     182        wx.EVT_MENU(owner, self.id_batchfit, self.on_add_sim_page) 
    185183        self.batch_menu = self.menu1.FindItemById(self.id_batchfit) 
    186         self.batch_menu.Enable(False)  
     184        self.batch_menu.Enable(False) 
    187185        self.menu1.AppendSeparator() 
    188186        #Set park engine 
    189187        scipy_help = "Scipy Engine: Perform Simple fit. More in Help window...." 
    190188        self.menu1.AppendCheckItem(self.scipy_id, "Simple FitEngine [LeastSq]", 
    191                                    scipy_help)  
    192         wx.EVT_MENU(owner, self.scipy_id,  self._onset_engine_scipy) 
     189                                   scipy_help) 
     190        wx.EVT_MENU(owner, self.scipy_id, self._onset_engine_scipy) 
    193191         
    194192        park_help = "Park Engine: Perform Complex fit. More in Help window...." 
    195193        self.menu1.AppendCheckItem(self.park_id, "Complex FitEngine [ParkMC]", 
    196                                    park_help)  
    197         wx.EVT_MENU(owner, self.park_id,  self._onset_engine_park) 
     194                                   park_help) 
     195        wx.EVT_MENU(owner, self.park_id, self._onset_engine_park) 
    198196         
    199197        self.menu1.FindItemById(self.scipy_id).Check(True) 
     
    202200        self.id_tol = wx.NewId() 
    203201        ftol_help = "Change the current FTolerance (=%s) " % str(self.ftol) 
    204         ftol_help += "of Simple FitEngine..."  
    205         self.menu1.Append(self.id_tol, "Change FTolerance",  
    206                                    ftol_help)  
    207         wx.EVT_MENU(owner, self.id_tol,  self.show_ftol_dialog) 
     202        ftol_help += "of Simple FitEngine..." 
     203        self.menu1.Append(self.id_tol, "Change FTolerance", 
     204                                   ftol_help) 
     205        wx.EVT_MENU(owner, self.id_tol, self.show_ftol_dialog) 
    208206        self.menu1.AppendSeparator() 
    209207         
    210208        self.id_reset_flag = wx.NewId() 
    211209        resetf_help = "BatchFit: If checked, the initial param values will be " 
    212         resetf_help += "propagated from the previous results. "  
     210        resetf_help += "propagated from the previous results. " 
    213211        resetf_help += "Otherwise, the same initial param values will be used " 
    214         resetf_help += "for all fittings."  
    215         self.menu1.AppendCheckItem(self.id_reset_flag,  
    216                                    "Chain Fitting [BatchFit Only]",  
    217                                    resetf_help)  
    218         wx.EVT_MENU(owner, self.id_reset_flag,  self.on_reset_batch_flag) 
     212        resetf_help += "for all fittings." 
     213        self.menu1.AppendCheckItem(self.id_reset_flag, 
     214                                   "Chain Fitting [BatchFit Only]", 
     215                                   resetf_help) 
     216        wx.EVT_MENU(owner, self.id_reset_flag, self.on_reset_batch_flag) 
    219217        chain_menu = self.menu1.FindItemById(self.id_reset_flag) 
    220218        chain_menu.Check(not self.batch_reset_flag) 
     
    230228         
    231229        self.id_edit = wx.NewId() 
    232         editmodel_help = "Edit customized model sample file"  
    233         self.menu1.AppendMenu(self.id_edit, "Edit Custom Model",  
     230        editmodel_help = "Edit customized model sample file" 
     231        self.menu1.AppendMenu(self.id_edit, "Edit Custom Model", 
    234232                              self.edit_model_menu, editmodel_help) 
    235233        #create  menubar items 
     
    244242        from sans.perspectives.calculator.pyconsole import PyConsole 
    245243        filename = os.path.join(models.find_plugins_dir(), label) 
    246         frame = PyConsole(parent=self.parent, manager=self, panel= self.fit_panel, 
    247                           title='Advanced Custom Model Editor', filename=filename) 
     244        frame = PyConsole(parent=self.parent, manager=self, 
     245                          panel=self.fit_panel, 
     246                          title='Advanced Custom Model Editor', 
     247                          filename=filename) 
    248248        self.put_icon(frame) 
    249         frame.Show(True)  
     249        frame.Show(True) 
    250250     
    251251    def delete_custom_model(self, event): 
     
    276276        """ 
    277277        id = event.GetId() 
    278         model_list = [] 
    279278        model_manager = models.ModelManager() 
    280279        model_list = model_manager.get_model_name_list() 
     
    283282                              model_list, plug_dir) 
    284283        self.put_icon(textdial) 
    285         dial = textdial.ShowModal() 
    286  
     284        textdial.ShowModal() 
    287285        textdial.Destroy() 
    288286     
    289287    def make_new_model(self, event): 
    290288        """ 
    291         Make new model  
     289        Make new model 
    292290        """ 
    293291        if self.new_model_frame != None and self.new_model_frame.IsShown(): 
     
    297295            dir_path = models.find_plugins_dir() 
    298296            title = "New Custom Model Function" 
    299             self.new_model_frame = EditorWindow(parent=self, base=self,  
     297            self.new_model_frame = EditorWindow(parent=self, base=self, 
    300298                                                path=dir_path, title=title) 
    301299            self.put_icon(self.new_model_frame) 
     
    328326         
    329327         
    330     def set_edit_menu(self, owner):     
     328    def set_edit_menu(self, owner): 
    331329        """ 
    332330        Set list of the edit model menu labels 
     
    334332        id = wx.NewId() 
    335333        #new_model_menu = wx.Menu() 
    336         self.edit_model_menu.Append(id, 'New',  
    337                                    'Add a new model function')#,  
    338                                    #new_model_menu)  
    339         wx.EVT_MENU(owner, id,  self.make_new_model) 
     334        self.edit_model_menu.Append(id, 'New', 
     335                                   'Add a new model function') 
     336        wx.EVT_MENU(owner, id, self.make_new_model) 
    340337        id = wx.NewId() 
    341         self.edit_model_menu.Append(id, 'Sum(p1, p2)',  
    342                                     'Sum of two model functions')  
    343         wx.EVT_MENU(owner, id,  self.make_sum_model) 
     338        self.edit_model_menu.Append(id, 'Sum(p1, p2)', 
     339                                    'Sum of two model functions') 
     340        wx.EVT_MENU(owner, id, self.make_sum_model) 
    344341        e_id = wx.NewId() 
    345         self.edit_menu =wx.Menu() 
     342        self.edit_menu = wx.Menu() 
    346343        self.edit_model_menu.AppendMenu(e_id,  
    347344                                    'Advanced', self.edit_menu)  
     
    349346 
    350347        d_id = wx.NewId() 
    351         self.delete_menu =wx.Menu() 
    352         self.edit_model_menu.AppendMenu(d_id,  
    353                                     'Delete', self.delete_menu) 
     348        self.delete_menu = wx.Menu() 
     349        self.edit_model_menu.AppendMenu(d_id, 
     350                                        'Delete', self.delete_menu) 
    354351        self.set_edit_menu_helper(owner, self.delete_custom_model) 
    355352     
     
    365362            name = os.path.basename(f_item) 
    366363            toks = os.path.splitext(name) 
    367             if toks[-1]=='.py' and not toks[0] =='__init__': 
     364            if toks[-1] == '.py' and not toks[0] == '__init__': 
    368365                if menu == self.edit_custom_model: 
    369                     if toks[0] =='easy_sum_of_p1_p2': 
     366                    if toks[0] == 'easy_sum_of_p1_p2': 
    370367                        continue 
    371368                    submenu = self.edit_menu 
    372369                else: 
    373370                    submenu = self.delete_menu 
    374                     #name = toks[0] 
    375371                has_file = False 
    376372                for item in submenu.GetMenuItems(): 
     
    379375                if not has_file: 
    380376                    id = wx.NewId() 
    381                     submenu.Append(id, name)  
    382                     wx.EVT_MENU(owner, id,  menu) 
     377                    submenu.Append(id, name) 
     378                    wx.EVT_MENU(owner, id, menu) 
    383379                    has_file = False 
    384380 
     
    393389                    frame.SetIcon(icon) 
    394390                except: 
    395                     pass       
    396                       
     391                    pass 
     392 
    397393    def on_add_sim_page(self, event): 
    398394        """ 
     
    423419    def help(self, evt): 
    424420        """ 
    425         Show a general help dialog.  
     421        Show a general help dialog. 
    426422        """ 
    427423        from help_panel import  HelpWindow 
    428         frame = HelpWindow(None, -1, 'HelpWindow')   
     424        frame = HelpWindow(None, -1, 'HelpWindow') 
    429425        if hasattr(frame, "IsIconized"): 
    430426            if not frame.IsIconized(): 
     
    433429                    frame.SetIcon(icon) 
    434430                except: 
    435                     pass   
     431                    pass 
    436432        frame.Show(True) 
    437433         
     
    445441        :return: a list of menu items with call-back function 
    446442         
    447         :note: if Data1D was generated from Theory1D   
     443        :note: if Data1D was generated from Theory1D 
    448444                the fitting option is not allowed 
    449445                 
     
    456452            return [] 
    457453        item = plotpanel.plots[graph.selected_plottable] 
    458         if item.__class__.__name__ is "Data2D":  
    459             if hasattr(item,"is_data"): 
     454        if item.__class__.__name__ is "Data2D": 
     455            if hasattr(item, "is_data"): 
    460456                if item.is_data: 
    461457                    return [[fit_option, fit_hint, self._onSelect]] 
     
    467463            # if is_data is true , this in an actual data loaded 
    468464            #else it is a data created from a theory model 
    469             if hasattr(item,"is_data"): 
     465            if hasattr(item, "is_data"): 
    470466                if item.is_data: 
    471                     return [[fit_option, fit_hint, 
    472                               self._onSelect]] 
     467                    return [[fit_option, fit_hint, self._onSelect]] 
    473468                else: 
    474                     return []  
    475         return []    
    476  
     469                    return [] 
     470        return [] 
    477471 
    478472    def get_panels(self, parent): 
     
    493487        #index number to create random model name 
    494488        self.index_model = 0 
    495         self.index_theory= 0 
     489        self.index_theory = 0 
    496490        self.parent.Bind(EVT_SLICER_PANEL, self._on_slicer_event) 
    497491        self.parent.Bind(EVT_SLICER_PARS_UPDATE, self._onEVT_SLICER_PANEL) 
    498         self.parent._mgr.Bind(wx.aui.EVT_AUI_PANE_CLOSE,self._onclearslicer)     
     492        self.parent._mgr.Bind(wx.aui.EVT_AUI_PANE_CLOSE,self._onclearslicer) 
    499493        #Create reader when fitting panel are created 
    500         self.state_reader = Reader(self.set_state)    
    501         #append that reader to list of available reader  
     494        self.state_reader = Reader(self.set_state) 
     495        #append that reader to list of available reader 
    502496        loader = Loader() 
    503497        loader.associate_file_reader(".fitv", self.state_reader) 
    504         #loader.associate_file_reader(".svs", self.state_reader) 
    505         #from sans.perspectives.calculator.sld_panel import SldPanel 
    506498        #Send the fitting panel to guiframe 
    507         self.mypanels.append(self.fit_panel)  
    508         #self.mypanels.append(SldPanel(parent=self.parent, base=self.parent)) 
     499        self.mypanels.append(self.fit_panel) 
    509500        return self.mypanels 
    510501     
     
    517508        """ 
    518509        Call back method that True to notify the parent that the current plug-in 
    519         can be set as default  perspective. 
    520         when returning False, the plug-in is not candidate for an automatic  
     510        can be set as default perspective. 
     511        when returning False, the plug-in is not candidate for an automatic 
    521512        default perspective setting 
    522513        """ 
     
    571562 
    572563         
    573     def set_theory(self,  theory_list=None): 
     564    def set_theory(self, theory_list=None): 
    574565        """ 
    575566        """ 
     
    582573                msg = "Fitting: cannot deal with the theory received" 
    583574                logging.error("set_theory " + msg + "\n" + str(sys.exc_value)) 
    584                 wx.PostEvent(self.parent, StatusEvent(status=msg, info="error")) 
     575                wx.PostEvent(self.parent, 
     576                             StatusEvent(status=msg, info="error")) 
    585577             
    586578    def set_state(self, state=None, datainfo=None, format=None): 
     
    596588            state = state.clone() 
    597589            # store fitting state in temp_state 
    598             self.temp_state.append(state)  
     590            self.temp_state.append(state) 
    599591        else: 
    600592            self.temp_state = [] 
     
    606598        self.on_set_state_helper(event=None) 
    607599 
    608     def  on_set_state_helper(self,event=None): 
    609         """ 
    610         Set_state_helper. This actually sets state  
     600    def  on_set_state_helper(self, event=None): 
     601        """ 
     602        Set_state_helper. This actually sets state 
    611603        after plotting data from state file. 
    612604         
    613         : event: FitStateUpdateEvent called  
     605        : event: FitStateUpdateEvent called 
    614606            by dataloader.plot_data from guiframe 
    615607        """ 
    616608        if len(self.temp_state) == 0: 
    617             if self.state_index==0 and len(self.mypanels) <= 0 \ 
    618             and self.sfile_ext =='.svs': 
     609            if self.state_index == 0 and len(self.mypanels) <= 0 \ 
     610            and self.sfile_ext == '.svs': 
    619611                #TODO: Why was the following line left in the code 
    620612                # if add_default_pages doesn't exist? 
     
    635627                data = self.parent.create_gui_data(state.data) 
    636628                data.group_id = state.data.group_id 
    637                 self.parent.add_data(data_list={data.id:data}) 
     629                self.parent.add_data(data_list={data.id: data}) 
    638630                wx.PostEvent(self.parent, NewPlotEvent(plot=data, 
    639631                                        title=data.title)) 
     
    641633                #to panel 
    642634                state.data = data 
    643                 page = self.fit_panel.set_state(state)    
     635                page = self.fit_panel.set_state(state) 
    644636            else: 
    645637                #just set data because set_state won't work 
    646638                data = self.parent.create_gui_data(state.data) 
    647639                data.group_id = state.data.group_id 
    648                 self.parent.add_data(data_list={data.id:data}) 
     640                self.parent.add_data(data_list={data.id: data}) 
    649641                wx.PostEvent(self.parent, NewPlotEvent(plot=data, 
    650642                                        title=data.title)) 
    651643                page = self.add_fit_page([data]) 
    652644                caption = page.window_caption 
    653                 self.store_data(uid=page.uid, data_list=page.get_data_list(),  
     645                self.store_data(uid=page.uid, data_list=page.get_data_list(), 
    654646                        caption=caption) 
    655                 self.mypanels.append(page)  
     647                self.mypanels.append(page) 
    656648                 
    657649            # get ready for the next set_state 
    658650            self.state_index += 1 
    659651 
    660             #reset state variables to default when all set_state is finished.  
     652            #reset state variables to default when all set_state is finished. 
    661653            if len(self.temp_state) == self.state_index: 
    662654                 
     
    664656                #self.state_index = 0 
    665657                # Make sure the user sees the fitting panel after loading 
    666                 #self.parent.set_perspective(self.perspective)  
     658                #self.parent.set_perspective(self.perspective) 
    667659                self.on_perspective(event=None) 
    668660        except: 
    669             self.state_index==0 
     661            self.state_index = 0 
    670662            self.temp_state = [] 
    671663            raise 
     
    687679        Set graph_id for fitprobelm 
    688680        """ 
    689         return self.page_finder[uid].get_graph_id()     
     681        return self.page_finder[uid].get_graph_id() 
    690682                           
    691     def save_fit_state(self, filepath, fitstate):   
     683    def save_fit_state(self, filepath, fitstate): 
    692684        """ 
    693685        save fit page state into file 
     
    698690        """ 
    699691        Set the fit weights of a given page for all 
    700         its data by default. If fid is provide then set the range  
     692        its data by default. If fid is provide then set the range 
    701693        only for the data with fid as id 
    702694        :param uid: id corresponding to a fit page 
     
    710702        """ 
    711703        Set the fitting range of a given page for all 
    712         its data by default. If fid is provide then set the range  
     704        its data by default. If fid is provide then set the range 
    713705        only for the data with fid as id 
    714706        :param uid: id corresponding to a fit page 
     
    720712            self.page_finder[uid].set_range(qmin=qmin, qmax=qmax, fid=fid) 
    721713       
    722     def schedule_for_fit(self, value=0, uid=None):   
     714    def schedule_for_fit(self, value=0, uid=None): 
    723715        """ 
    724716        Set the fit problem field to 0 or 1 to schedule that problem to fit. 
    725         Schedule the specified fitproblem or get the fit problem related to  
     717        Schedule the specified fitproblem or get the fit problem related to 
    726718        the current page and set value. 
    727         :param value: integer 0 or 1  
     719        :param value: integer 0 or 1 
    728720        :param uid: the id related to a page contaning fitting information 
    729721        """ 
    730         if uid in self.page_finder.keys():   
     722        if uid in self.page_finder.keys(): 
    731723            self.page_finder[uid].schedule_tofit(value) 
    732724           
     
    734726        """ 
    735727        return self.page_finder used also by simfitpage.py 
    736         """   
    737         return self.page_finder  
     728        """ 
     729        return self.page_finder 
    738730     
    739     def set_page_finder(self,modelname,names,values): 
     731    def set_page_finder(self, modelname, names, values): 
    740732        """ 
    741733        Used by simfitpage.py to reset a parameter given the string constrainst. 
    742734          
    743         :param modelname: the name ot the model for with the parameter  
     735        :param modelname: the name ot the model for with the parameter 
    744736                            has to reset 
    745737        :param value: can be a string in this case. 
     
    748740        :note: expecting park used for fit. 
    749741          
    750         """   
     742        """ 
    751743        sim_page_id = self.sim_page.uid 
    752744        for uid, value in self.page_finder.iteritems(): 
     
    758750                    break 
    759751          
    760     def split_string(self,item):  
     752    def split_string(self, item): 
    761753        """ 
    762754        receive a word containing dot and split it. used to split parameterset 
     
    769761        if item.find(".") >= 0: 
    770762            param_names = re.split("\.", item) 
    771             model_name = param_names[0]            
     763            model_name = param_names[0] 
    772764            ##Assume max len is 3; eg., M0.radius.width 
    773765            if len(param_names) == 3: 
    774766                param_name = param_names[1] + "." + param_names[2] 
    775767            else: 
    776                 param_name = param_names[1]                     
     768                param_name = param_names[1] 
    777769            return model_name, param_name 
    778770    
    779771    def set_ftol(self, ftol=None): 
    780772        """ 
    781         Set ftol: Relative error desired in the sum of chi squares.   
     773        Set ftol: Relative error desired in the sum of chi squares. 
    782774        """ 
    783775        # check if it is flaot 
     
    791783        # update ftol menu help strings 
    792784        ftol_help = "Change the current FTolerance (=%s) " % str(self.ftol) 
    793         ftol_help += "of Simple FitEngine..."  
     785        ftol_help += "of Simple FitEngine..." 
    794786        if self.menu1 != None: 
    795787            self.menu1.SetHelpString(self.id_tol, ftol_help) 
     
    839831        :param qmax: the maximum value of the theory plotting range 
    840832        :param draw: Determine if the theory needs to be plot 
    841         """    
     833        """ 
    842834        if uid not in self.page_finder.keys(): 
    843835            return 
     
    846838        if draw: 
    847839            ## draw model 1D with smeared data 
    848             data =  self.page_finder[uid].get_fit_data(fid=fid) 
     840            data = self.page_finder[uid].get_fit_data(fid=fid) 
    849841            if data is None: 
    850842                msg = "set_mearer requires at least data.\n" 
     
    874866        """ 
    875867        if ON_MAC: 
    876            time.sleep(sec) 
     868            time.sleep(sec) 
    877869         
    878870    def draw_model(self, model, page_id, data=None, smearer=None, 
     
    881873                   fid=None, 
    882874                   toggle_mode_on=False, 
    883                    qmin=None, qmax=None,  
     875                   qmin=None, qmax=None, 
    884876                   update_chisqr=True, weight=None, source='model'): 
    885877        """ 
     
    899891        """ 
    900892        #self.weight = weight 
    901         if issubclass(data.__class__, Data1D) or not enable2D:     
     893        if issubclass(data.__class__, Data1D) or not enable2D: 
    902894            ## draw model 1D with no loaded data 
    903             self._draw_model1D(model=model,  
     895            self._draw_model1D(model=model, 
    904896                               data=data, 
    905897                               page_id=page_id, 
    906                                enable1D=enable1D,  
     898                               enable1D=enable1D, 
    907899                               smearer=smearer, 
    908900                               qmin=qmin, 
    909                                qmax=qmax,  
     901                               qmax=qmax, 
    910902                               fid=fid, 
    911903                               weight=weight, 
     
    914906                               update_chisqr=update_chisqr, 
    915907                               source=source) 
    916         else:      
     908        else: 
    917909            ## draw model 2D with no initial data 
    918910            self._draw_model2D(model=model, 
     
    933925        """ 
    934926        Get series of data, model, associates parameters and range and send then 
    935         to  series of fit engines. Fit data and model, display result to  
    936         corresponding panels.  
     927        to  series of fit engines. Fit data and model, display result to 
     928        corresponding panels. 
    937929        :param uid: id related to the panel currently calling this fit function. 
    938930        """ 
    939931        flag = True 
    940         ##  count the number of fitproblem schedule to fit  
     932        ##  count the number of fitproblem schedule to fit 
    941933        fitproblem_count = 0 
    942934        for value in self.page_finder.values(): 
    943935            if value.get_scheduled() == 1: 
    944936                fitproblem_count += 1 
    945         self._gui_engine = self._return_engine_type()        
    946         self.fitproblem_count = fitproblem_count   
     937        self._gui_engine = self._return_engine_type() 
     938        self.fitproblem_count = fitproblem_count 
    947939        if self._fit_engine == "park": 
    948940            engineType = "Simultaneous Fit" 
    949941        else: 
    950942            engineType = "Single Fit" 
    951         fitter_list = []         
    952         sim_fitter = None      
     943        fitter_list = [] 
     944        sim_fitter = None 
    953945        is_single_fit = True 
    954946        batch_on = False 
    955947        if self.sim_page is not None and self.sim_page.uid == uid: 
    956             #simulatanous fit only one engine need to be created  
     948            #simulatanous fit only one engine need to be created 
    957949            ## if simultaneous fit change automatically the engine to park 
    958             self._on_change_engine(engine='park')    
    959             sim_fitter = Fit(self._fit_engine)   
     950            self._on_change_engine(engine='park') 
     951            sim_fitter = Fit(self._fit_engine) 
    960952            sim_fitter.fitter_id = self.sim_page.uid 
    961             fitter_list.append(sim_fitter)  
     953            fitter_list.append(sim_fitter) 
    962954            is_single_fit = False 
    963955            batch_on = self.sim_page.batch_on 
    964956             
    965  
    966         self.fitproblem_count = fitproblem_count   
     957        self.fitproblem_count = fitproblem_count 
    967958        if self._fit_engine == "park": 
    968959            engineType = "Simultaneous Fit" 
     
    990981                    templist = [] 
    991982                    page = self.fit_panel.get_page_by_id(page_id) 
    992                     self.set_fit_weight(uid=page.uid,  
     983                    self.set_fit_weight(uid=page.uid, 
    993984                                     flag=page.get_weight_flag(), 
    994                                      is2d = page._is_2D()) 
     985                                     is2d=page._is_2D()) 
    995986                    templist = page.get_param_list() 
    996                     flag = page._update_paramv_on_fit()  
     987                    flag = page._update_paramv_on_fit() 
    997988                    if not flag: 
    998989                        msg = "Fitting range or parameter values are" 
    999                         msg += " invalid in %s"% \ 
     990                        msg += " invalid in %s" % \ 
    1000991                                    page.window_caption 
    1001                         wx.PostEvent(page.parent.parent,  
    1002                                      StatusEvent(status= msg, info="error", 
     992                        wx.PostEvent(page.parent.parent, 
     993                                     StatusEvent(status=msg, info="error", 
    1003994                                     type="stop")) 
    1004995                        return flag 
     
    10091000                    for fitproblem in  fitproblem_list: 
    10101001                        if sim_fitter is None: 
    1011                             fitter = Fit(self._fit_engine)   
     1002                            fitter = Fit(self._fit_engine) 
    10121003                            fitter.fitter_id = page_id 
    1013                             self._fit_helper(fitproblem=fitproblem,  
    1014                                                 pars=pars,  
    1015                                                 fitter=fitter, 
    1016                                               fit_id=fit_id,  
    1017                                               batch_inputs=batch_inputs, 
    1018                                               batch_outputs=batch_outputs) 
    1019                             fitter_list.append(fitter)  
     1004                            self._fit_helper(fitproblem=fitproblem, 
     1005                                             pars=pars, 
     1006                                             fitter=fitter, 
     1007                                             fit_id=fit_id, 
     1008                                             batch_inputs=batch_inputs, 
     1009                                             batch_outputs=batch_outputs) 
     1010                            fitter_list.append(fitter) 
    10201011                        else: 
    10211012                            fitter = sim_fitter 
    1022                             self._fit_helper(fitproblem=fitproblem,  
    1023                                                 pars=pars,  
    1024                                                 fitter=fitter, 
    1025                                               fit_id=fit_id,  
    1026                                               batch_inputs=batch_inputs, 
    1027                                               batch_outputs=batch_outputs) 
     1013                            self._fit_helper(fitproblem=fitproblem, 
     1014                                             pars=pars, 
     1015                                             fitter=fitter, 
     1016                                             fit_id=fit_id, 
     1017                                             batch_inputs=batch_inputs, 
     1018                                             batch_outputs=batch_outputs) 
    10281019                        fit_id += 1 
    10291020                    list_page_id.append(page_id) 
     
    10321023            except: 
    10331024                flag = False 
    1034                 msg= "%s error: %s" % (engineType, sys.exc_value) 
     1025                msg = "%s error: %s" % (engineType, sys.exc_value) 
    10351026                wx.PostEvent(self.parent, StatusEvent(status=msg, info="error", 
    10361027                                                      type="stop")) 
     
    10401031        #    self.calc_fit.stop() 
    10411032        msg = "Fitting is in progress..." 
    1042         wx.PostEvent( self.parent, StatusEvent(status=msg, type="progress" )) 
     1033        wx.PostEvent(self.parent, StatusEvent(status=msg, type="progress")) 
    10431034         
    10441035        #Handler used for park engine displayed message 
     
    10531044        except: 
    10541045            try: 
    1055                 #if the id cannot be found then  we deal with a self.sim_page  
     1046                #if the id cannot be found then  we deal with a self.sim_page 
    10561047                #or a self.batch_page 
    10571048                if self.sim_page is not None and uid == self.sim_page.uid: 
     
    10601051                    batch_on = self.batch_page.batch_on 
    10611052            except: 
    1062                  batch_on = False 
    1063                  #raise 
    1064          
     1053                batch_on = False 
     1054 
    10651055        # batch fit 
    10661056        if batch_on: 
    1067             calc_fit = FitThread(handler = handler, 
    1068                                     fn=fitter_list, 
    1069                                     pars=pars, 
    1070                                     batch_inputs=batch_inputs, 
    1071                                     batch_outputs=batch_outputs, 
    1072                                     page_id=list_page_id, 
    1073                                     completefn=self._batch_fit_complete, 
    1074                                     ftol=self.ftol, 
    1075                                     reset_flag=self.batch_reset_flag) 
     1057            calc_fit = FitThread(handler=handler, 
     1058                                 fn=fitter_list, 
     1059                                 pars=pars, 
     1060                                 batch_inputs=batch_inputs, 
     1061                                 batch_outputs=batch_outputs, 
     1062                                 page_id=list_page_id, 
     1063                                 completefn=self._batch_fit_complete, 
     1064                                 ftol=self.ftol, 
     1065                                 reset_flag=self.batch_reset_flag) 
    10761066        else: 
    1077             # single fit: not batch and not simul fit  
     1067            # single fit: not batch and not simul fit 
    10781068            if not is_single_fit: 
    10791069                current_page_id = self.sim_page.uid 
     
    10901080        calc_fit.queue() 
    10911081        msg = "Fitting is in progress..." 
    1092         wx.PostEvent( self.parent, StatusEvent(status=msg, type="progress" )) 
     1082        wx.PostEvent(self.parent, StatusEvent(status=msg, type="progress")) 
    10931083         
    10941084        self.ready_fit(calc_fit=calc_fit) 
     
    11231113            group_id = data.group_id 
    11241114            wx.PostEvent(self.parent, NewPlotEvent(id=plot_id, 
    1125                                                        group_id=group_id, 
    1126                                                        action='remove')) 
     1115                                                   group_id=group_id, 
     1116                                                   action='remove')) 
    11271117            
    11281118    def store_data(self, uid, data_list=None, caption=None): 
     
    11471137        try: 
    11481138            page = self.fit_panel.add_empty_page() 
    1149             page_caption = page.window_caption 
    11501139            # add data associated to the page created 
    1151             if page != None:   
     1140            if page != None: 
    11521141                wx.PostEvent(self.parent, StatusEvent(status="Page Created", 
    11531142                                               info="info")) 
     
    11711160        if page == None: 
    11721161            return page 
    1173         page_caption = page.window_caption 
    11741162        #append Data1D to the panel containing its theory 
    11751163        #if theory already plotted 
     
    11811169                if theory_data is not None: 
    11821170                    group_id = str(page.uid) + " Model1D" 
    1183                     wx.PostEvent(self.parent,  
     1171                    wx.PostEvent(self.parent, 
    11841172                             NewPlotEvent(group_id=group_id, 
    11851173                                               action="delete")) 
    11861174                    self.parent.update_data(prev_data=theory_data, 
    1187                                              new_data=data)       
     1175                                             new_data=data) 
    11881176            else: 
    11891177                if theory_data is not None: 
     
    11941182                                               action="delete")) 
    11951183                    self.parent.update_data(prev_data=theory_data, 
    1196                                              new_data=data)    
    1197         self.store_data(uid=page.uid, data_list=page.get_data_list(),  
     1184                                             new_data=data) 
     1185        self.store_data(uid=page.uid, data_list=page.get_data_list(), 
    11981186                        caption=page.window_caption) 
    11991187        if self.sim_page is not None and not self.batch_on: 
     
    12061194    def _onEVT_SLICER_PANEL(self, event): 
    12071195        """ 
    1208         receive and event telling to update a panel with a name starting with  
    1209         event.panel_name. this method update slicer panel  
     1196        receive and event telling to update a panel with a name starting with 
     1197        event.panel_name. this method update slicer panel 
    12101198        for a given interactor. 
    12111199         
    1212         :param event: contains type of slicer , paramaters for updating  
     1200        :param event: contains type of slicer , paramaters for updating 
    12131201            the panel and panel_name to find the slicer 's panel concerned. 
    12141202        """ 
     
    12201208        self.parent._mgr.Update() 
    12211209    
    1222     def _closed_fitpage(self, event):    
    1223         """ 
    1224         request fitpanel to close a given page when its unique data is removed  
     1210    def _closed_fitpage(self, event): 
     1211        """ 
     1212        request fitpanel to close a given page when its unique data is removed 
    12251213        from the plot. close fitpage only when the a loaded data is removed 
    1226         """     
     1214        """ 
    12271215        if event is None or event.data is None: 
    12281216            return 
    1229         if hasattr(event.data,"is_data"): 
     1217        if hasattr(event.data, "is_data"): 
    12301218            if not event.data.is_data or \ 
    12311219                event.data.__class__.__name__ == "Data1D": 
    1232                 self.fit_panel.close_page_with_data(event.data)  
     1220                self.fit_panel.close_page_with_data(event.data) 
    12331221   
    12341222    def _reset_schedule_problem(self, value=0, uid=None): 
     
    12511239        :param pars: list of fittable parameters 
    12521240        :param fitter_list: list of fit engine 
    1253         :param value:  structure storing data mapped to their model, range etc.. 
     1241        :param value:  structure storing data mapped to their model, range etc. 
    12541242        """ 
    12551243        data = fitproblem.get_fit_data() 
     
    12651253                ## check if constraint 
    12661254                if item[0] != None and item[1] != None: 
    1267                     listOfConstraint.append((item[0],item[1])) 
    1268         new_model = model#deepcopy(model) 
     1255                    listOfConstraint.append((item[0], item[1])) 
     1256        new_model = model 
    12691257        fitter.set_model(new_model, fit_id, pars, data=data, 
    12701258                         constraints=listOfConstraint) 
    1271         fitter.set_data(data=data, id=fit_id, smearer=smearer, qmin=qmin,  
     1259        fitter.set_data(data=data, id=fit_id, smearer=smearer, qmin=qmin, 
    12721260                        qmax=qmax) 
    12731261        fitter.select_problem_for_fit(id=fit_id, value=1) 
    12741262        
    1275      
    1276     def _onSelect(self,event): 
    1277         """  
    1278         when Select data to fit a new page is created .Its reference is  
     1263    def _onSelect(self, event): 
     1264        """ 
     1265        when Select data to fit a new page is created .Its reference is 
    12791266        added to self.page_finder 
    12801267        """ 
     
    13041291        print "update_fit result", result 
    13051292         
    1306     
    1307     def _batch_fit_complete(self, result, pars, page_id,  
     1293    def _batch_fit_complete(self, result, pars, page_id, 
    13081294                            batch_outputs, batch_inputs, elapsed=None): 
    13091295        """ 
    1310         Display fit result in batch  
     1296        Display fit result in batch 
    13111297        :param result: list of objects received fromt fit engines 
    13121298        :param pars: list of  fitted parameters names 
     
    13171303        uid = page_id[0] 
    13181304        if uid in self.fit_thread_list.keys(): 
    1319             del self.fit_thread_list[uid]  
     1305            del self.fit_thread_list[uid] 
    13201306           
    13211307        self._update_fit_button(page_id) 
     
    13251311        msg += "Duration time: %s s.\n" % str(elapsed) 
    13261312        wx.PostEvent(self.parent, StatusEvent(status=msg, info="info", 
    1327                                                       type="stop")) 
     1313                                              type="stop")) 
    13281314        
    13291315        if batch_outputs is None: 
     
    13331319        batch_outputs["Chi2"] = [] 
    13341320        #Don't like these loops 
    1335         # Need to create dictionary of all fitted parameters  
     1321        # Need to create dictionary of all fitted parameters 
    13361322        # since the number of parameters can differ between each fit result 
    13371323        for list_res in result: 
     
    13761362                    new_theory = copy_data.data 
    13771363                    new_theory[res.index] = res.theory 
    1378                     new_theory[res.index == False] = numpy.nan  
     1364                    new_theory[res.index == False] = numpy.nan 
    13791365                    correct_result = True 
    13801366                #get all fittable parameters of the current model 
     
    13831369                    if not model.is_fittable(param) and \ 
    13841370                        param in param_list: 
    1385                         param_list.remove(param)        
     1371                        param_list.remove(param) 
    13861372                if not correct_result or res.fitness is None or \ 
    13871373                    not numpy.isfinite(res.fitness) or \ 
     
    13941380                    if model is not None: 
    13951381                        model_name = str(model.name) 
    1396                     msg += "Data %s and Model %s did not fit.\n" % (data_name,  
     1382                    msg += "Data %s and Model %s did not fit.\n" % (data_name, 
    13971383                                                                    model_name) 
    13981384                    ERROR = numpy.NAN 
     
    14101396                            batch_inputs["error on %s" % str(param)].append(ERROR) 
    14111397                else: 
    1412                     # ToDo: Why sometimes res.pvec comes with numpy.float64?  
     1398                    # ToDo: Why sometimes res.pvec comes with numpy.float64? 
    14131399                    # Need to fix it within ScipyEngine 
    1414                     if res.pvec.__class__== numpy.float64: 
     1400                    if res.pvec.__class__ == numpy.float64: 
    14151401                        res.pvec = [res.pvec] 
    14161402                         
     
    14351421                                batch_inputs["error on %s" % param].append('-') 
    14361422                            model.setParam(param, res.pvec[index]) 
    1437                 #fill the batch result with emtpy value if not in the current  
     1423                #fill the batch result with emtpy value if not in the current 
    14381424                #model 
    14391425                EMPTY = "-" 
     
    14411427                    if key not in param_list and key not in ["Chi2", "Data"]: 
    14421428                        batch_outputs[key].append(EMPTY) 
    1443                 #for key in batch_inputs.keys(): 
    1444                     #if key not in param_list and key not in ["Chi2", "Data"]: 
    1445                         #batch_inputs[key].append(EMPTY) 
    14461429                                 
    14471430                self.page_finder[pid].set_batch_result(batch_inputs=batch_inputs, 
    1448                                                      batch_outputs=batch_outputs)  
     1431                                                       batch_outputs=batch_outputs) 
    14491432                
    14501433                cpage = self.fit_panel.get_page_by_id(pid) 
     
    14561439                if correct_result: 
    14571440                    if not is_data2d: 
    1458                         self._complete1D(x=data.x, y=res.theory, page_id=pid,  
    1459                                      elapsed=None,  
    1460                                      index=res.index, model=model, 
    1461                                      weight=None, fid=data.id, 
    1462                                      toggle_mode_on=False, state=None,  
    1463                                      data=data, update_chisqr=False,  
    1464                                      source='fit', plot_result = plot_result) 
     1441                        self._complete1D(x=data.x, y=res.theory, page_id=pid, 
     1442                                         elapsed=None, 
     1443                                         index=res.index, model=model, 
     1444                                         weight=None, fid=data.id, 
     1445                                         toggle_mode_on=False, state=None, 
     1446                                         data=data, update_chisqr=False, 
     1447                                         source='fit', plot_result=plot_result) 
    14651448                    else: 
    14661449                        self._complete2D(image=new_theory, data=data, 
    1467                                       model=model, 
    1468                                       page_id=pid,  elapsed=None,  
    1469                                       index=res.index,  
    1470                                       qmin=qmin, 
    1471                                      qmax=qmax, fid=data.id, weight=None, 
    1472                                       toggle_mode_on=False, state=None,  
    1473                                      update_chisqr=False,  
    1474                                      source='fit', plot_result = plot_result) 
    1475                 self.on_set_batch_result(page_id=pid,  
    1476                                          fid=data.id,  
    1477                                          batch_outputs=batch_outputs,  
     1450                                         model=model, 
     1451                                         page_id=pid, elapsed=None, 
     1452                                         index=res.index, 
     1453                                         qmin=qmin, 
     1454                                         qmax=qmax, fid=data.id, weight=None, 
     1455                                         toggle_mode_on=False, state=None, 
     1456                                         update_chisqr=False, 
     1457                                         source='fit', plot_result=plot_result) 
     1458                self.on_set_batch_result(page_id=pid, 
     1459                                         fid=data.id, 
     1460                                         batch_outputs=batch_outputs, 
    14781461                                         batch_inputs=batch_inputs) 
    14791462         
    14801463        wx.PostEvent(self.parent, StatusEvent(status=msg, error="error", 
    1481                                                               type="stop")) 
     1464                                              type="stop")) 
    14821465        # Remove parameters that are not shown 
    14831466        cpage = self.fit_panel.get_page_by_id(uid) 
     
    14851468        shownkeystr = cpage.get_copy_params() 
    14861469        for key in batch_outputs.keys(): 
    1487             if key in ["Chi2", "Data"] or shownkeystr.count(key)>0: 
     1470            if key in ["Chi2", "Data"] or shownkeystr.count(key) > 0: 
    14881471                tbatch_outputs[key] = batch_outputs[key] 
    14891472                 
    1490         wx.CallAfter(self.parent.on_set_batch_result,tbatch_outputs,  
    1491                                             batch_inputs, 
    1492                                            self.sub_menu) 
     1473        wx.CallAfter(self.parent.on_set_batch_result, tbatch_outputs, 
     1474                     batch_inputs, self.sub_menu) 
    14931475         
    14941476    def on_set_batch_result(self, page_id, fid, batch_outputs, batch_inputs): 
    14951477        """ 
    14961478        """ 
    1497          
    1498         pid =  page_id 
     1479        pid = page_id 
    14991480        if fid not in self.page_finder[pid]: 
    15001481            return 
    15011482        fitproblem = self.page_finder[pid][fid] 
    15021483        index = self.page_finder[pid].nbr_residuals_computed - 1 
    1503         residuals =  fitproblem.get_residuals() 
     1484        residuals = fitproblem.get_residuals() 
    15041485        theory_data = fitproblem.get_theory_data() 
    15051486        data = fitproblem.get_fit_data() 
     
    15441525        if hasattr(data.sample, param): 
    15451526            if param not in  batch_inputs.keys(): 
    1546                  batch_inputs[param] = [] 
     1527                batch_inputs[param] = [] 
    15471528            batch_inputs[param].append(data.sample.temperature) 
    15481529         
    1549  
    15501530    def _fit_completed(self, result, page_id, batch_outputs, 
    1551                              batch_inputs=None, 
    1552                               pars=None,  
    1553                              elapsed=None): 
     1531                       batch_inputs=None, pars=None, elapsed=None): 
    15541532        """ 
    15551533        Display result of the fit on related panel(s). 
     
    15731551        if page_id is None: 
    15741552            page_id = [] 
    1575         ## fit more than 1 model at the same time  
    1576         self._mac_sleep(0.2)  
     1553        ## fit more than 1 model at the same time 
     1554        self._mac_sleep(0.2) 
    15771555        try: 
    15781556            index = 0 
     
    15841562                    not numpy.all(numpy.isfinite(res.pvec)): 
    15851563                    msg = "Fitting did not converge!!!" 
    1586                     wx.PostEvent(self.parent,  
    1587                              StatusEvent(status=msg,  
     1564                    wx.PostEvent(self.parent, 
     1565                             StatusEvent(status=msg, 
    15881566                                         info="warning", 
    15891567                                         type="stop")) 
     
    15911569                else: 
    15921570                    #set the panel when fit result are float not list 
    1593                     if res.pvec.__class__== numpy.float64: 
     1571                    if res.pvec.__class__ == numpy.float64: 
    15941572                        pvec = [res.pvec] 
    15951573                    else: 
    15961574                        pvec = res.pvec 
    1597                     if res.stderr.__class__== numpy.float64: 
     1575                    if res.stderr.__class__ == numpy.float64: 
    15981576                        stderr = [res.stderr] 
    15991577                    else: 
    16001578                        stderr = res.stderr 
    16011579                    cpage = self.fit_panel.get_page_by_id(uid) 
    1602                     # Make sure we got all results  
     1580                    # Make sure we got all results 
    16031581                    #(CallAfter is important to MAC) 
    16041582                    try: 
    16051583                        #if res != None: 
    1606                         wx.CallAfter(cpage.onsetValues, res.fitness, res.param_list,  
     1584                        wx.CallAfter(cpage.onsetValues, res.fitness, 
     1585                                     res.param_list, 
    16071586                                     pvec, stderr) 
    16081587                        index += 1 
     
    16101589                    except: 
    16111590                        msg = "Singular point: Fitting Error occurred." 
    1612                         wx.PostEvent(self.parent, StatusEvent(status=msg, info="error", 
    1613                                                   type="stop")) 
     1591                        wx.PostEvent(self.parent, StatusEvent(status=msg, 
     1592                                                              info="error", 
     1593                                                              type="stop")) 
    16141594                     
    16151595        except: 
     
    16271607        if page_id.__class__.__name__ != 'list': 
    16281608            page_id = [page_id] 
    1629         for uid in page_id:   
     1609        for uid in page_id: 
    16301610            page = self.fit_panel.get_page_by_id(uid) 
    16311611            page._on_fit_complete() 
     
    16541634        ## post a message to status bar 
    16551635        msg = "Set Chain Fitting: %s" % str(not self.batch_reset_flag) 
    1656         wx.PostEvent(self.parent,  
     1636        wx.PostEvent(self.parent, 
    16571637                     StatusEvent(status=msg)) 
    16581638 
    1659     def _onset_engine_park(self,event): 
     1639    def _onset_engine_park(self, event): 
    16601640        """  
    16611641        set engine to park 
     
    16631643        self._on_change_engine('park') 
    16641644        
    1665     def _onset_engine_scipy(self,event): 
     1645    def _onset_engine_scipy(self, event): 
    16661646        """  
    16671647        set engine to scipy 
     
    16711651    def _on_slicer_event(self, event): 
    16721652        """ 
    1673         Receive a panel as event and send it to guiframe  
     1653        Receive a panel as event and send it to guiframe 
    16741654         
    16751655        :param event: event containing a panel 
     
    16821662            event_id = self.parent.popup_panel(new_panel) 
    16831663            new_panel.uid = event_id 
    1684             self.mypanels.append(new_panel)  
     1664            self.mypanels.append(new_panel) 
    16851665        
    16861666    def _onclearslicer(self, event): 
     
    16881668        Clear the boxslicer when close the panel associate with this slicer 
    16891669        """ 
    1690         name =event.GetPane().caption 
     1670        name = event.GetPane().caption 
    16911671     
    16921672        for panel in self.slicer_panels: 
    1693             if panel.window_caption==name: 
     1673            if panel.window_caption == name: 
    16941674                 
    16951675                for item in self.parent.panels: 
    16961676                    if hasattr(self.parent.panels[item], "uid"): 
    1697                         if self.parent.panels[item].uid ==panel.base.uid: 
     1677                        if self.parent.panels[item].uid == panel.base.uid: 
    16981678                            self.parent.panels[item].onClearSlicer(event) 
    16991679                            self.parent._mgr.Update() 
    1700                             break  
     1680                            break 
    17011681                break 
    17021682     
     
    17071687        return self._fit_engine 
    17081688      
    1709       
    17101689    def _on_change_engine(self, engine='park'): 
    17111690        """ 
    1712         Allow to select the type of engine to perform fit  
     1691        Allow to select the type of engine to perform fit 
    17131692         
    17141693        :param engine: the key work of the engine 
     
    17261705        ## post a message to status bar 
    17271706        msg = "Engine set to: %s" % self._fit_engine 
    1728         wx.PostEvent(self.parent,  
     1707        wx.PostEvent(self.parent, 
    17291708                     StatusEvent(status=msg)) 
    17301709        ## send the current engine type to fitpanel 
    17311710        self.fit_panel._on_engine_change(name=self._fit_engine) 
    17321711 
    1733         
    17341712    def _on_model_panel(self, evt): 
    17351713        """ 
     
    17401718        """ 
    17411719        model = evt.model 
    1742         uid = evt.uid  
     1720        uid = evt.uid 
    17431721        qmin = evt.qmin 
    17441722        qmax = evt.qmax 
    1745         smearer = evt.smearer 
    17461723        caption = evt.caption 
    17471724        enable_smearer = evt.enable_smearer 
     
    17651742        """ 
    17661743        msg = "Plot updating ... " 
    1767         wx.PostEvent(self.parent, StatusEvent(status=msg,type="update")) 
     1744        wx.PostEvent(self.parent, StatusEvent(status=msg, type="update")) 
    17681745         
    17691746    def _complete1D(self, x, y, page_id, elapsed, index, model, 
    17701747                    weight=None, fid=None, 
    1771                     toggle_mode_on=False, state=None,  
    1772                     data=None, update_chisqr=True,  
     1748                    toggle_mode_on=False, state=None, 
     1749                    data=None, update_chisqr=True, 
    17731750                    source='model', plot_result=True): 
    17741751        """ 
    17751752        Complete plotting 1D data 
    1776         """  
     1753        """ 
    17771754        try: 
    17781755            numpy.nan_to_num(y) 
     
    17821759            new_plot.dy = numpy.zeros(len(y)) 
    17831760            new_plot.symbol = GUIFRAME_ID.CURVE_SYMBOL_NUM 
    1784             _yaxis, _yunit = data.get_yaxis()  
    1785             _xaxis, _xunit = data.get_xaxis()  
     1761            _yaxis, _yunit = data.get_yaxis() 
     1762            _xaxis, _xunit = data.get_xaxis() 
    17861763            new_plot.title = data.name 
    17871764 
    1788             new_plot.group_id = data.group_id#self.page_finder[page_id].get_graph_id() 
     1765            new_plot.group_id = data.group_id 
    17891766            if new_plot.group_id == None: 
    17901767                new_plot.group_id = data.group_id 
    1791             new_plot.id =  str(page_id) + "model-" + data.name 
     1768            new_plot.id = str(page_id) + "model-" + data.name 
    17921769            #if new_plot.id in self.color_dict: 
    1793             #    new_plot.custom_color = self.color_dict[new_plot.id]  
     1770            #    new_plot.custom_color = self.color_dict[new_plot.id] 
    17941771            #find if this theory was already plotted and replace that plot given 
    17951772            #the same id 
     
    18011778                data_name = str(model.__class__.__name__) 
    18021779             
    1803             new_plot.name = model.name + " ["+ data_name +"]" 
     1780            new_plot.name = model.name + " [" + data_name +"]" 
    18041781            new_plot.xaxis(_xaxis, _xunit) 
    18051782            new_plot.yaxis(_yaxis, _yunit) 
    1806             self.page_finder[page_id].set_theory_data(data=new_plot,  
     1783            self.page_finder[page_id].set_theory_data(data=new_plot, 
    18071784                                                      fid=data.id) 
    18081785            self.parent.update_theory(data_id=data.id, theory=new_plot, 
    1809                                        state=state)    
     1786                                       state=state) 
    18101787            current_pg = self.fit_panel.get_page_by_id(page_id) 
    18111788            title = new_plot.title 
     
    18181795                if data.id == top_data_id: 
    18191796                    wx.PostEvent(self.parent, NewPlotEvent(plot=new_plot, 
    1820                                             title=str(title)))     
     1797                                            title=str(title))) 
    18211798            caption = current_pg.window_caption 
    18221799            self.page_finder[page_id].set_fit_tab_caption(caption=caption) 
    18231800            
    1824             self.page_finder[page_id].set_theory_data(data=new_plot,  
     1801            self.page_finder[page_id].set_theory_data(data=new_plot, 
    18251802                                                      fid=data.id) 
    18261803            if toggle_mode_on: 
    1827                 wx.PostEvent(self.parent,  
     1804                wx.PostEvent(self.parent, 
    18281805                             NewPlotEvent(group_id=str(page_id) + " Model2D", 
    1829                                                action="Hide")) 
     1806                                          action="Hide")) 
    18301807            else: 
    18311808                if update_chisqr: 
     
    18391816                else: 
    18401817                    self._plot_residuals(page_id=page_id, data=data, fid=fid, 
    1841                                           index=index, weight=weight) 
     1818                                         index=index, weight=weight) 
    18421819 
    18431820            msg = "Computation  completed!" 
    1844             wx.PostEvent( self.parent, StatusEvent(status=msg, type="stop" )) 
     1821            wx.PostEvent(self.parent, StatusEvent(status=msg, type="stop")) 
    18451822        except: 
    18461823            raise 
    1847             #msg = " Error occurred when drawing %s Model 1D: " % new_plot.name 
    1848             #msg += " %s"  % sys.exc_value 
    1849             #wx.PostEvent(self.parent, StatusEvent(status=msg, type="stop")) 
    18501824    
    1851     def _update2D(self, output,time=None): 
     1825    def _update2D(self, output, time=None): 
    18521826        """ 
    18531827        Update the output of plotting model 
     
    18571831        #self.ready_fit() 
    18581832   
    1859     def _complete2D(self, image, data, model, page_id,  elapsed, index, qmin, 
    1860                 qmax, fid=None, weight=None, toggle_mode_on=False, state=None,  
     1833    def _complete2D(self, image, data, model, page_id, elapsed, index, qmin, 
     1834                qmax, fid=None, weight=None, toggle_mode_on=False, state=None, 
    18611835                     update_chisqr=True, source='model', plot_result=True): 
    18621836        """ 
     
    18651839        """ 
    18661840        numpy.nan_to_num(image) 
    1867         new_plot= Data2D(image=image, err_image=data.err_data) 
     1841        new_plot = Data2D(image=image, err_image=data.err_data) 
    18681842        new_plot.name = model.name 
    18691843        new_plot.title = "Analytical model 2D " 
     
    18721846        new_plot.detector = data.detector 
    18731847        new_plot.source = data.source 
    1874         new_plot.is_data = False  
     1848        new_plot.is_data = False 
    18751849        new_plot.qx_data = data.qx_data 
    18761850        new_plot.qy_data = data.qy_data 
     
    18971871        theory_data.name = "Unknown" 
    18981872         
    1899         self.page_finder[page_id].set_theory_data(data=theory_data, fid=data.id) 
    1900         self.parent.update_theory(data_id=data.id,  
     1873        self.page_finder[page_id].set_theory_data(data=theory_data, 
     1874                                                  fid=data.id) 
     1875        self.parent.update_theory(data_id=data.id, 
    19011876                                       theory=new_plot, 
    1902                                        state=state)   
     1877                                       state=state) 
    19031878        current_pg = self.fit_panel.get_page_by_id(page_id) 
    19041879        title = new_plot.title 
    1905         batch_on = self.fit_panel.get_page_by_id(page_id).batch_on 
    19061880        if not source == 'fit' and plot_result: 
    19071881            wx.PostEvent(self.parent, NewPlotEvent(plot=new_plot, 
    19081882                                               title=title)) 
    1909         #self.page_finder[page_id].set_theory_data(data=new_plot, fid=data.id) 
    19101883        if toggle_mode_on: 
    1911             wx.PostEvent(self.parent,  
     1884            wx.PostEvent(self.parent, 
    19121885                             NewPlotEvent(group_id=str(page_id) + " Model1D", 
    19131886                                               action="Hide")) 
     
    19541927            if (self.calc_2D is not None) and self.calc_2D.isrunning(): 
    19551928                self.calc_2D.stop() 
    1956             self.calc_2D = Calc2D(model=model,  
     1929            self.calc_2D = Calc2D(model=model, 
    19571930                                    data=data, 
    19581931                                    page_id=page_id, 
     
    19671940                                    update_chisqr=update_chisqr, source=source) 
    19681941            self.calc_2D.queue() 
    1969  
    19701942        except: 
    19711943            raise 
    1972             #msg = " Error occurred when drawing %s Model 2D: " % model.name 
    1973             #msg += " %s" % sys.exc_value 
    1974             #wx.PostEvent(self.parent, StatusEvent(status=msg)) 
    1975  
    1976     def _draw_model1D(self, model, page_id, data,  
     1944 
     1945    def _draw_model1D(self, model, page_id, data, 
    19771946                      qmin, qmax, smearer=None, 
    19781947                state=None, 
    19791948                weight=None, 
    1980                 fid=None,  
     1949                fid=None, 
    19811950                toggle_mode_on=False, update_chisqr=True, source='model', 
    19821951                enable1D=True): 
     
    19891958        """ 
    19901959        if not enable1D: 
    1991             return  
     1960            return 
    19921961        try: 
    19931962            from model_thread import Calc1D 
     
    20151984            wx.PostEvent(self.parent, StatusEvent(status=msg)) 
    20161985     
    2017    
    2018      
    2019     def _cal_chisqr(self, page_id, data, weight, fid=None, index=None):  
     1986    def _cal_chisqr(self, page_id, data, weight, fid=None, index=None): 
    20201987        """ 
    20211988        Get handy Chisqr using the output from draw1D and 2D,  
    20221989        instead of calling expansive CalcChisqr in guithread 
    20231990        """ 
    2024         data_copy = deepcopy(data)   
     1991        data_copy = deepcopy(data) 
    20251992        # default chisqr 
    20261993        chisqr = None 
     
    20321999        # Get data: data I, theory I, and data dI in order 
    20332000        if data_copy.__class__.__name__ == "Data2D": 
    2034             if index == None:  
    2035                 index = numpy.ones(len(data_copy.data),ntype=bool) 
     2001            if index == None: 
     2002                index = numpy.ones(len(data_copy.data), ntype=bool) 
    20362003            if weight != None: 
    20372004                data_copy.err_data = weight 
    20382005            # get rid of zero error points 
    2039             index = index & (data_copy.err_data != 0)   
    2040             index = index & (numpy.isfinite(data_copy.data))  
    2041             fn = data_copy.data[index]  
     2006            index = index & (data_copy.err_data != 0) 
     2007            index = index & (numpy.isfinite(data_copy.data)) 
     2008            fn = data_copy.data[index] 
    20422009            theory_data = self.page_finder[page_id].get_theory_data(fid=data_copy.id) 
    2043             if theory_data== None: 
     2010            if theory_data == None: 
    20442011                return chisqr 
    20452012            gn = theory_data.data[index] 
     
    20572024                # But this should be corrected later. 
    20582025                dy = deepcopy(data_copy.dy) 
    2059                 dy[dy==0] = 1 
    2060             fn = data_copy.y[index]  
     2026                dy[dy == 0] = 1 
     2027            fn = data_copy.y[index] 
    20612028             
    20622029            theory_data = self.page_finder[page_id].get_theory_data(fid=data_copy.id) 
    2063             if theory_data== None: 
     2030            if theory_data == None: 
    20642031                return chisqr 
    20652032            gn = theory_data.y 
     
    20722039        chisqr = numpy.average(residuals * residuals) 
    20732040         
    2074         self._plot_residuals(page_id=page_id, data=data_copy,  
     2041        self._plot_residuals(page_id=page_id, data=data_copy, 
    20752042                             fid=fid, 
    20762043                             weight=weight, index=index) 
     
    20792046     
    20802047    def _plot_residuals(self, page_id, weight, fid=None, 
    2081                         data=None, index=None):  
     2048                        data=None, index=None): 
    20822049        """ 
    20832050        Plot the residuals 
    20842051         
    20852052        :param data: data 
    2086         :param index: index array (bool)  
     2053        :param index: index array (bool) 
    20872054        : Note: this is different from the residuals in cal_chisqr() 
    20882055        """ 
     
    20962063            data_copy.clone_without_data(len(data_copy.data), residuals) 
    20972064            residuals.data = None 
    2098             fn = data_copy.data#[index]  
     2065            fn = data_copy.data 
    20992066            theory_data = self.page_finder[page_id].get_theory_data(fid=data_copy.id) 
    2100             gn = theory_data.data#[index] 
     2067            gn = theory_data.data 
    21012068            if weight == None: 
    21022069                en = data_copy.err_data 
    21032070            else: 
    21042071                en = weight 
    2105             residuals.data = (fn - gn) / en  
    2106             residuals.qx_data = data_copy.qx_data#[index] 
    2107             residuals.qy_data = data_copy.qy_data #[index] 
    2108             residuals.q_data = data_copy.q_data#[index] 
    2109             residuals.err_data = numpy.ones(len(residuals.data))#[index] 
     2072            residuals.data = (fn - gn) / en 
     2073            residuals.qx_data = data_copy.qx_data 
     2074            residuals.qy_data = data_copy.qy_data 
     2075            residuals.q_data = data_copy.q_data 
     2076            residuals.err_data = numpy.ones(len(residuals.data)) 
    21102077            residuals.xmin = min(residuals.qx_data) 
    21112078            residuals.xmax = max(residuals.qx_data) 
    21122079            residuals.ymin = min(residuals.qy_data) 
    21132080            residuals.ymax = max(residuals.qy_data) 
    2114             residuals.q_data = data_copy.q_data#[index] 
     2081            residuals.q_data = data_copy.q_data 
    21152082            residuals.mask = data_copy.mask 
    21162083            residuals.scale = 'linear' 
     
    21252092                if weight == None: 
    21262093                    dy = numpy.ones(len(data_copy.y)) 
    2127                 ## Set consitently w/AbstractFitengine:  
     2094                ## Set consitently w/AbstractFitengine: 
    21282095                ## But this should be corrected later. 
    21292096                else: 
    2130                     dy = weight#deepcopy(data_copy.dy) 
    2131                 dy[dy==0] = 1   
    2132             fn = data_copy.y[index]  
     2097                    dy = weight 
     2098                dy[dy == 0] = 1 
     2099            fn = data_copy.y[index] 
    21332100            theory_data = self.page_finder[page_id].get_theory_data(fid=data_copy.id) 
    21342101            gn = theory_data.y 
     
    21472114            residuals.yaxis('\\rm{Residuals} ', 'normalized') 
    21482115        new_plot = residuals 
    2149         new_plot.name = "Residuals for " + str(theory_data.name.split()[0]) +"[" +  str(data.name) +"]" 
     2116        new_plot.name = "Residuals for " + str(theory_data.name.split()[0]) + "[" +  str(data.name) +"]" 
    21502117        ## allow to highlight data when plotted 
    21512118        new_plot.interactive = True 
    21522119        ## when 2 data have the same id override the 1 st plotted 
    2153         new_plot.id = "res" + str(data_copy.id)#name + " residuals" 
     2120        new_plot.id = "res" + str(data_copy.id) 
    21542121        ##group_id specify on which panel to plot this data 
    21552122        group_id = self.page_finder[page_id].get_graph_id() 
    21562123        if group_id == None: 
    21572124            group_id = data.group_id 
    2158         new_plot.group_id ="res" + str(group_id) 
     2125        new_plot.group_id = "res" + str(group_id) 
    21592126        #new_plot.is_data = True 
    21602127        ##post data to plot 
    2161         title = new_plot.name  
    2162         self.page_finder[page_id].set_residuals(residuals=new_plot, fid=data.id) 
     2128        title = new_plot.name 
     2129        self.page_finder[page_id].set_residuals(residuals=new_plot, 
     2130                                                fid=data.id) 
    21632131        self.parent.update_theory(data_id=data.id, theory=new_plot) 
    21642132        batch_on = self.fit_panel.get_page_by_id(page_id).batch_on 
    21652133        if not batch_on: 
    21662134            wx.PostEvent(self.parent, NewPlotEvent(plot=new_plot, title=title)) 
    2167        
    2168         
    2169 #def profile(fn, *args, **kw): 
    2170 #    import cProfile, pstats, os 
    2171 #    global call_result 
    2172 #    def call(): 
    2173 #        global call_result 
    2174 #        call_result = fn(*args, **kw) 
    2175 #    cProfile.runctx('call()', dict(call=call), {}, 'profile.out') 
    2176 #    stats = pstats.Stats('profile.out') 
    2177 #    #stats.sort_stats('time') 
    2178 #    stats.sort_stats('calls') 
    2179 #    stats.print_stats() 
    2180 #    os.unlink('profile.out') 
    2181 #    return call_result 
    2182 if __name__ == "__main__": 
    2183     i = Plugin() 
    2184      
    2185      
    2186      
    2187      
Note: See TracChangeset for help on using the changeset viewer.