Changeset 2f4b430 in sasview


Ignore:
Timestamp:
Mar 4, 2015 3:39:45 PM (10 years ago)
Author:
Doucet, Mathieu <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:
74f419d
Parents:
2f732b0
Message:

Take care of white spaces (pylint)

Location:
src/sas/perspectives/fitting
Files:
15 edited

Legend:

Unmodified
Added
Removed
  • src/sas/perspectives/fitting/batchfitpage.py

    rfa09d62 r2f4b430  
    1 """  
     1""" 
    22Batch panel 
    33""" 
     
    55import wx.lib.newevent 
    66import math 
    7 from sas.guiframe.events import StatusEvent     
    8 from sas.guiframe.events import NewPlotEvent   
    9  
    10 (Chi2UpdateEvent, EVT_CHI2_UPDATE)   = wx.lib.newevent.NewEvent() 
     7from sas.guiframe.events import StatusEvent 
     8from sas.guiframe.events import NewPlotEvent 
     9 
     10(Chi2UpdateEvent, EVT_CHI2_UPDATE) = wx.lib.newevent.NewEvent() 
    1111_BOX_WIDTH = 76 
    1212_DATA_BOX_WIDTH = 300 
     
    2424    """ 
    2525    window_name = "BatchFit" 
    26     window_caption  = "BatchFit" 
     26    window_caption = "BatchFit" 
    2727 
    2828    def __init__(self, parent, color=None): 
    29         """  
     29        """ 
    3030        Initialization of the Panel 
    3131        """ 
    3232        FitPage.__init__(self, parent, color=color) 
    33          
     33 
    3434        ## draw sizer 
    35          
     35 
    3636    def _fill_data_sizer(self): 
    3737        """ 
     
    5353        text2.SetForegroundColour(wx.RED) 
    5454        sizer_data.Add(text2) 
    55          
     55 
    5656        combo = wx.BoxSizer(wx.HORIZONTAL) 
    5757        self.dataSource = wx.ComboBox(self, -1, style=wx.CB_READONLY) 
    5858        wx.EVT_COMBOBOX(self.dataSource, -1, self.on_select_data) 
    5959        self.dataSource.SetMinSize((_DATA_BOX_WIDTH, -1)) 
    60          
     60 
    6161        combo.Add(wx.StaticText(self, -1, 'Name : ')) 
    62         combo.Add((0,5)) 
     62        combo.Add((0, 5)) 
    6363        combo.Add(self.dataSource) 
    64          
     64 
    6565        sizer_data.Add(combo, 0, wx.ALL, 10) 
    6666        boxsizer1.Add(sizer_data, 0, wx.ALL, 0) 
     
    6969 
    7070#    COMMENTED OUT TO USE METHODS INHERITED FROM fitpage.py 
    71          
     71 
    7272#     def _fill_range_sizer(self): 
    7373#         """ 
     
    398398#                                       caption=self.window_name) 
    399399#             self._draw_model() 
    400      
    401  
    402          
     400 
     401 
     402 
    403403class BGTextCtrl(wx.TextCtrl): 
    404404    """ 
    405405    Text control used to display outputs. 
    406     No editing allowed. The background is  
     406    No editing allowed. The background is 
    407407    grayed out. User can't select text. 
    408408    """ 
     
    411411        self.SetEditable(False) 
    412412        self.SetBackgroundColour(self.GetParent().parent.GetBackgroundColour()) 
    413          
     413 
    414414        # Bind to mouse event to avoid text highlighting 
    415415        # The event will be skipped once the call-back 
    416416        # is called. 
    417417        self.Bind(wx.EVT_MOUSE_EVENTS, self._click) 
    418          
     418 
    419419    def _click(self, event): 
    420420        """ 
    421421        Prevent further handling of the mouse event 
    422422        by not calling Skip(). 
    423         """  
     423        """ 
    424424        pass 
    425   
     425 
  • src/sas/perspectives/fitting/console.py

    rb9a5f0e r2f4b430  
    22 
    33 
    4 from sas.guiframe.events import StatusEvent  
     4from sas.guiframe.events import StatusEvent 
    55import time 
    66import wx 
     
    1313    isbetter = False 
    1414    """Record whether results improved since last update""" 
    15     progress_delta =  60 
     15    progress_delta = 60 
    1616    """Number of seconds between progress updates""" 
    1717    improvement_delta = 5 
    1818    """Number of seconds between improvement updates""" 
    1919    def __init__(self, parent, manager=None, 
    20                  quiet=False,progress_delta=60,improvement_delta=5): 
     20                 quiet=False, progress_delta=60, improvement_delta=5): 
    2121        """ 
    2222        If quiet is true, only print out final summary, not progress and 
    2323        improvements. 
    24          
     24 
    2525        :attr parent: the object that handle the messages 
    26          
     26 
    2727        """ 
    28         self.parent= parent 
     28        self.parent = parent 
    2929        self.manager = manager 
    3030        self.progress_time = time.time() 
     
    3838        self.update_duration = time.time() 
    3939        self.fit_duration = 0 
    40          
    41          
     40 
     41 
    4242    def progress(self, k, n): 
    4343        """ 
     
    4747 
    4848        t = time.time() 
    49         p = int((100*k)//n) 
    50          
     49        p = int((100 * k) // n) 
     50 
    5151        # Show improvements if there are any 
    5252        dt = t - self.improvement_time 
     
    5656            self.isbetter = False 
    5757            self.improvement_time = t 
    58         
     58 
    5959        # Update percent complete 
    60         dp = p-self.progress_percent 
     60        dp = p - self.progress_percent 
    6161        if dp < 1: return 
    6262        dt = t - self.progress_time 
     
    6767                self.update_fit() 
    6868            elif 2 < dp <= 5: 
    69                 if p//5 != self.progress_percent//5: 
     69                if p // 5 != self.progress_percent // 5: 
    7070                    self.progress_percent = p 
    7171                    self.progress_time = t 
    7272            else: 
    73                 if p//10 != self.progress_percent//10: 
     73                if p // 10 != self.progress_percent // 10: 
    7474                    self.progress_percent = p 
    7575                    self.progress_time = t 
    7676                    self.update_fit() 
    77          
     77 
    7878    def improvement(self): 
    7979        """ 
     
    8282        """ 
    8383        self.isbetter = True 
    84      
     84 
    8585    def print_result(self): 
    8686        """ 
     
    8989        msg = " \n %s \n" % str(self.result) 
    9090        wx.PostEvent(self.parent, StatusEvent(status=msg)) 
    91                       
     91 
    9292    def error(self, msg): 
    9393        """ 
     
    112112        wx.PostEvent(self.parent, StatusEvent(status=message, 
    113113                                   info="info", type="stop")) 
    114          
     114 
    115115    def finalize(self): 
    116116        """ 
     
    126126            #self.result.print_summary() 
    127127            self.update_fit() 
    128              
    129          
     128 
     129 
    130130    def update_fit(self, last=False): 
    131131        """ 
    132132        """ 
    133133        t1 = time.time() 
    134         self.elapsed_time =  t1 - self.update_duration 
     134        self.elapsed_time = t1 - self.update_duration 
    135135        self.update_duration = t1 
    136136        self.fit_duration += self.elapsed_time 
     
    147147                d_flag = (hasattr(self.result, "data") and \ 
    148148                    self.result.data is not None and \ 
    149                     hasattr(self.result.data, "sas_data") and  
     149                    hasattr(self.result.data, "sas_data") and 
    150150                    self.result.data.sas_data is not None) 
    151151                m_flag = (hasattr(self.result, "model") and \ 
     
    156156                    model_name = str(self.result.model.name) 
    157157                if m_flag and d_flag: 
    158                     msg += "Data : %s \n"  % (str(data_name))#, 
     158                    msg += "Data : %s \n" % (str(data_name))#, 
    159159                                                     #str(model_name)) 
    160                 msg +=  str(self.result) 
     160                msg += str(self.result) 
    161161                msg += "\n" 
    162162            else: 
     
    164164            wx.PostEvent(self.parent, StatusEvent(status=msg, info="info", 
    165165                                              type="progress")) 
    166       
     166 
    167167    def starting_fit(self): 
    168168        """ 
    169169        """ 
    170170        wx.PostEvent(self.parent, StatusEvent(status="Starting the Fit...", 
    171                                         info="info",type="progress")) 
    172          
     171                                        info="info", type="progress")) 
     172 
    173173    def set_result(self, result): 
    174174        """ 
    175175        """ 
    176176        self.result = result 
    177      
     177 
    178178    def get_result(self): 
    179179        """ 
    180180        """ 
    181181        return self.result 
    182          
    183      
     182 
     183 
  • src/sas/perspectives/fitting/fit_thread.py

    r386ffe1 r2f4b430  
    99    Execute class.function and return result 
    1010    """ 
    11     return  getattr(classInstance,classFunc)(*args) 
     11    return  getattr(classInstance, classFunc)(*args) 
    1212 
    1313def map_apply(arguments): 
     
    1616class FitThread(CalcThread): 
    1717    """Thread performing the fit """ 
    18      
    19     def __init__(self,  
     18 
     19    def __init__(self, 
    2020                 fn, 
    2121                 page_id, 
     
    2424                 batch_inputs=None, 
    2525                 pars=None, 
    26                  completefn = None, 
    27                  updatefn   = None, 
    28                  yieldtime  = 0.03, 
    29                  worktime   = 0.03, 
    30                  reset_flag = False): 
     26                 completefn=None, 
     27                 updatefn=None, 
     28                 yieldtime=0.03, 
     29                 worktime=0.03, 
     30                 reset_flag=False): 
    3131        CalcThread.__init__(self, 
    3232                 completefn, 
     
    4444        #Relative error desired in the sum of squares. 
    4545        self.reset_flag = reset_flag 
    46     
     46 
    4747    def isquit(self): 
    4848        """ 
    4949        :raise KeyboardInterrupt: when the thread is interrupted 
    50          
     50 
    5151        """ 
    5252        try: 
     
    5555            msg = "Fitting: terminated by the user." 
    5656            raise KeyboardInterrupt, msg 
    57         
     57 
    5858    def compute(self): 
    5959        """ 
    60         Perform a fit  
     60        Perform a fit 
    6161        """ 
    6262        msg = "" 
     
    6464            import copy 
    6565            list_handler = [] 
    66             list_curr_thread = []  
     66            list_curr_thread = [] 
    6767            list_reset_flag = [] 
    6868            list_map_get_attr = [] 
     
    7878            #from multiprocessing import Pool 
    7979            inputs = zip(list_map_get_attr, self.fitter, list_fit_function, 
    80                          list_q, list_q, list_handler,list_curr_thread, 
     80                         list_q, list_q, list_handler, list_curr_thread, 
    8181                         list_reset_flag) 
    82             result =  map(map_apply, inputs) 
    83      
     82            result = map(map_apply, inputs) 
     83 
    8484            self.complete(result=result, 
    8585                          batch_inputs=self.batch_inputs, 
    8686                          batch_outputs=self.batch_outputs, 
    8787                          page_id=self.page_id, 
    88                           pars = self.pars, 
    89                           elapsed=time.time()-self.starttime) 
    90             
     88                          pars=self.pars, 
     89                          elapsed=time.time() - self.starttime) 
     90 
    9191        except KeyboardInterrupt, msg: 
    9292            # Thread was interrupted, just proceed and re-raise. 
     
    9595            #Stop on exception during fitting. Todo: need to put  
    9696            #some mssg and reset progress bar. 
    97              
     97 
    9898            if self.handler is not None: 
    9999                self.handler.stop(msg=msg) 
     
    102102            if self.handler is not None: 
    103103                self.handler.error(msg=traceback.format_exc()) 
    104             
    105          
    106      
     104 
     105 
     106 
  • src/sas/perspectives/fitting/fitpage.py

    r386ffe1 r2f4b430  
    3232    FitPanel class contains fields allowing to display results when 
    3333    fitting  a model and one data 
    34      
     34 
    3535    :note: For Fit to be performed the user should check at least one parameter 
    3636        on fit Panel window. 
     
    4242        """ 
    4343        BasicPage.__init__(self, parent, color=color) 
    44          
     44 
    4545        ## draw sizer 
    4646        self._fill_data_sizer() 
     
    6969        self.create_default_data() 
    7070        #self._manager.frame.Bind(wx.EVT_SET_FOCUS, self.on_set_focus) 
    71      
     71 
    7272    def enable_fit_button(self): 
    7373        """ 
     
    7676        flag = check_data_validity(self.data) & (self.model is not None) 
    7777        self.btFit.Enable(flag) 
    78          
     78 
    7979    def _fill_data_sizer(self): 
    8080        """ 
     
    9999        self.sizer0.Add(boxsizer1, 0, wx.EXPAND | wx.ALL, 10) 
    100100        self.sizer0.Layout() 
    101          
     101 
    102102    def enable_datasource(self): 
    103103        """ 
     
    108108        else: 
    109109            self.dataSource.Enable() 
    110              
     110 
    111111    def fill_data_combobox(self, data_list): 
    112112        """ 
     
    143143        if len(data_list) == 1: 
    144144            self.dataSource.Disable() 
    145                  
     145 
    146146    def on_select_data(self, event=None): 
    147147        """ 
     
    155155            data = self.dataSource.GetClientData(pos) 
    156156            self.set_data(data) 
    157      
     157 
    158158    def _on_fit_complete(self): 
    159159        """ 
     
    162162        self.fit_started = False 
    163163        self.set_fitbutton() 
    164          
     164 
    165165    def _is_2D(self): 
    166166        """ 
    167167        Check if data_name is Data2D 
    168          
     168 
    169169        :return: True or False 
    170          
     170 
    171171        """ 
    172172        if self.data.__class__.__name__ == "Data2D" or \ 
     
    174174            return True 
    175175        return False 
    176              
     176 
    177177    def _on_engine_change(self, name): 
    178178        """ 
     
    180180         and update the panel accordingly 
    181181        """ 
    182          
     182 
    183183        self.engine_type = str(name) 
    184184        self.state.engine_type = self.engine_type 
     
    189189            self.Layout() 
    190190            self.Refresh() 
    191          
     191 
    192192    def _fill_range_sizer(self): 
    193193        """ 
     
    196196        """ 
    197197        is_2Ddata = False 
    198          
     198 
    199199        # Check if data is 2D 
    200200        if self.data.__class__.__name__ == "Data2D" or \ 
    201201                        self.enable2D: 
    202202            is_2Ddata = True 
    203              
     203 
    204204        title = "Fitting" 
    205205        #smear messages & titles 
     
    218218        smear_message_slit_height_title = "Slit height[1/A]:" 
    219219        smear_message_slit_width_title = "Slit width[1/A]:" 
    220          
     220 
    221221        self._get_smear_info() 
    222          
     222 
    223223        #Sizers 
    224224        box_description_range = wx.StaticBox(self, -1, str(title)) 
     
    233233        sizer_smearer_box = wx.StaticBoxSizer(smear_set_box, wx.HORIZONTAL) 
    234234        sizer_smearer_box.SetMinSize((_DATA_BOX_WIDTH, 60)) 
    235          
     235 
    236236        weighting_set_box = wx.StaticBox(self, -1, \ 
    237237                                'Set Weighting by Selecting dI Source') 
     
    268268        self.dI_idata.Enable(False) 
    269269        weighting_box.Add(sizer_weighting) 
    270          
     270 
    271271        sizer_fit = wx.GridSizer(2, 4, 2, 6) 
    272          
     272 
    273273        # combobox for smear2d accuracy selection 
    274274        self.smear_accuracy = wx.ComboBox(self, -1, size=(50, -1), 
     
    279279        self.smear_accuracy.SetToolTipString(\ 
    280280            "'Higher' uses more Gaussian points for smearing computation.") 
    281                     
     281 
    282282        wx.EVT_COMBOBOX(self.smear_accuracy, -1, self._on_select_accuracy) 
    283283 
     
    287287        self.btFit.Bind(wx.EVT_BUTTON, self._onFit, id=self.btFit.GetId()) 
    288288        self.btFit.SetToolTipString("Start fitting.") 
    289          
     289 
    290290        #textcntrl for custom resolution 
    291291        self.smear_pinhole_max = self.ModelTextCtrl(self, -1, 
     
    343343                  id=self.slit_smearer.GetId()) 
    344344        self.disable_smearer.SetValue(True) 
    345          
     345 
    346346        # add 4 types of smearing to the sizer 
    347347        sizer_smearer.Add(self.disable_smearer, 0, wx.LEFT, 10) 
     
    353353        sizer_smearer.Add(self.slit_smearer) 
    354354        sizer_smearer.Add((10, 10)) 
    355          
     355 
    356356        # StaticText for chi2, N(for fitting), Npts + Log/linear spacing 
    357357        self.tcChi = BGTextCtrl(self, -1, "-", size=(75, 20), style=0) 
     
    367367        self.Npts_total.SetToolTipString(\ 
    368368                                " Total Npts : total number of data points") 
    369                  
     369 
    370370        # Update and Draw button 
    371371        self.draw_button = wx.Button(self, wx.NewId(), 
     
    374374                              self._onDraw, id=self.draw_button.GetId()) 
    375375        self.draw_button.SetToolTipString("Compute and Draw.") 
    376          
    377         self.points_sizer = wx.BoxSizer(wx.HORIZONTAL)  
     376 
     377        self.points_sizer = wx.BoxSizer(wx.HORIZONTAL) 
    378378        self.pointsbox = wx.CheckBox(self, -1, 'Log?', (10, 10)) 
    379379        self.pointsbox.SetValue(False) 
    380380        self.pointsbox.SetToolTipString("Check mark to use log spaced points") 
    381381        wx.EVT_CHECKBOX(self, self.pointsbox.GetId(), self.select_log) 
    382          
     382 
    383383        self.points_sizer.Add(wx.StaticText(self, -1, 'Npts    ')) 
    384384        self.points_sizer.Add(self.pointsbox) 
     
    389389        #box_description_3.SetToolTipString( \ 
    390390        #                        " Total Npts : total number of data points") 
    391          
     391 
    392392        sizer_fit.Add(box_description_1, 0, 0) 
    393393        sizer_fit.Add(box_description_2, 0, 0) 
     
    404404                                    smear_message_none, style=wx.ALIGN_LEFT) 
    405405        self.smear_description_dqdata = wx.StaticText(self, 
    406                                 -1, smear_message_dqdata, style=wx.ALIGN_LEFT) 
     406                                - 1, smear_message_dqdata, style=wx.ALIGN_LEFT) 
    407407        self.smear_description_type = wx.StaticText(self, 
    408                                      -1, "Type:", style=wx.ALIGN_LEFT) 
     408                                     - 1, "Type:", style=wx.ALIGN_LEFT) 
    409409        self.smear_description_accuracy_type = wx.StaticText(self, -1, 
    410410                                        "Accuracy:", style=wx.ALIGN_LEFT) 
     
    435435        self.smear_description_slit_width = wx.StaticText(self, -1, 
    436436                        smear_message_slit_width_title, style=wx.ALIGN_LEFT) 
    437          
     437 
    438438        #arrange sizers 
    439439        self.sizer_set_smearer.Add(sizer_smearer) 
     
    468468        self.sizer_new_smear.Add((20, -1)) 
    469469        self.sizer_new_smear.Add(self.smear_description_2d_y, 
    470                                   0, wx.CENTER, 10 ) 
     470                                  0, wx.CENTER, 10) 
    471471        self.sizer_new_smear.Add(self.smear_description_pin_max, 
    472                                   0, wx.CENTER, 10 ) 
     472                                  0, wx.CENTER, 10) 
    473473        self.sizer_new_smear.Add(self.smear_description_slit_width, 
    474                                   0, wx.CENTER, 10 ) 
     474                                  0, wx.CENTER, 10) 
    475475 
    476476        self.sizer_new_smear.Add(self.smear_pinhole_max, 0, wx.CENTER, 10) 
    477477        self.sizer_new_smear.Add(self.smear_slit_width, 0, wx.CENTER, 10) 
    478478        self.sizer_new_smear.Add(self.smear_data_right, 0, wx.CENTER, 10) 
    479             
     479 
    480480        self.sizer_set_smearer.Add(self.smear_message_new_s, 0, wx.CENTER, 10) 
    481481        self.sizer_set_smearer.Add(self.smear_message_new_p, 0, wx.CENTER, 10) 
    482482        self.sizer_set_smearer.Add((5, 2)) 
    483483        self.sizer_set_smearer.Add(self.sizer_new_smear, 0, wx.CENTER, 10) 
    484          
     484 
    485485        # add all to chi2 sizer 
    486486        sizer_smearer_box.Add(self.sizer_set_smearer) 
     
    489489        sizer_chi2.Add(weighting_box) 
    490490        sizer_chi2.Add((-1, 5)) 
    491          
     491 
    492492        # hide all smear messages and textctrl 
    493493        self._hide_all_smear_info() 
    494          
     494 
    495495        # get smear_selection 
    496496        self.current_smearer = smear_selection(self.data, self.model) 
     
    513513        #2D data? default 
    514514        is_2Ddata = False 
    515          
     515 
    516516        #check if it is 2D data 
    517517        if self.data.__class__.__name__ == "Data2D" or self.enable2D: 
    518518            is_2Ddata = True 
    519              
     519 
    520520        self.sizer5.Clear(True) 
    521       
     521 
    522522        self.qmin = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH, 20), 
    523523                                    style=wx.TE_PROCESS_ENTER, 
     
    530530        qmin_tip += q_tip 
    531531        self.qmin.SetToolTipString(qmin_tip) 
    532       
     532 
    533533        self.qmax = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH, 20), 
    534534                                       style=wx.TE_PROCESS_ENTER, 
     
    548548        id = wx.NewId() 
    549549        self.reset_qrange = wx.Button(self, id, 'Reset', size=(77, 20)) 
    550        
     550 
    551551        self.reset_qrange.Bind(wx.EVT_BUTTON, self.on_reset_clicked, id=id) 
    552552        self.reset_qrange.SetToolTipString("Reset Q range to the default") 
    553       
     553 
    554554        sizer = wx.GridSizer(2, 4, 2, 6) 
    555555 
     
    559559        self.btEditMask.SetToolTipString("Edit Mask.") 
    560560        self.EditMask_title = wx.StaticText(self, -1, ' Masking(2D)') 
    561          
     561 
    562562        sizer.Add(wx.StaticText(self, -1, '   Q range')) 
    563563        sizer.Add(wx.StaticText(self, -1, ' Min[1/A]')) 
     
    572572        boxsizer_range.Add((10, 10)) 
    573573        boxsizer_range.Add(sizer) 
    574          
     574 
    575575        boxsizer_range.Add((10, 15)) 
    576576        boxsizer_range.Add(sizer_fit) 
     
    586586        self.sizer5.Layout() 
    587587 
    588          
     588 
    589589    def _set_sizer_dispersion(self): 
    590590        """ 
     
    602602            ## the user didn't select dispersity display 
    603603            return 
    604              
     604 
    605605        self._reset_dispersity() 
    606          
     606 
    607607        ## fill a sizer with the combobox to select dispersion type 
    608608        model_disp = wx.StaticText(self, -1, 'Function') 
     
    632632        self.sizer4_4.Add(self.text_disp_1, (iy, ix), (1, 1), \ 
    633633                          wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
    634          
     634 
    635635        ix += 1 
    636636        self.text_disp_min = wx.StaticText(self, -1, 'Min') 
     
    642642        self.sizer4_4.Add(self.text_disp_max, (iy, ix), (1, 1), 
    643643                          wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
    644         
     644 
    645645        ix += 1 
    646646        npts = wx.StaticText(self, -1, 'Npts') 
     
    660660        self.sizer4_4.Add(model_disp, (iy, ix), (1, 1), 
    661661                          wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
    662          
     662 
    663663        self.text_disp_max.Show(True) 
    664664        self.text_disp_min.Show(True) 
     
    680680                iy += 1 
    681681                for p in self.model.dispersion[item].keys(): 
    682          
     682 
    683683                    if p == "width": 
    684684                        ix = 0 
     
    713713                                           size=(_BOX_WIDTH / 1.3, 20), 
    714714                                           style=0) 
    715                    
     715 
    716716                        self.sizer4_4.Add(ctl2, (iy, ix), (1, 1), 
    717717                                          wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
     
    724724                                                  style=wx.TE_PROCESS_ENTER, 
    725725                                text_enter_callback=self._onparamRangeEnter) 
    726                          
     726 
    727727                        self.sizer4_4.Add(ctl3, (iy, ix), (1, 1), 
    728728                                          wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
    729                         
     729 
    730730                        ix = 5 
    731731                        ctl4 = self.ModelTextCtrl(self, -1, 
     
    733733                                                  style=wx.TE_PROCESS_ENTER, 
    734734                            text_enter_callback=self._onparamRangeEnter) 
    735                          
     735 
    736736                        self.sizer4_4.Add(ctl4, (iy, ix), (1, 1), 
    737737                                          wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
     
    739739                        ctl3.Show(True) 
    740740                        ctl4.Show(True) 
    741                                                                
     741 
    742742                    elif p == "npts": 
    743743                        ix = 6 
     
    746746                                                  size=(_BOX_WIDTH / 2.2, 20), 
    747747                                                  style=wx.TE_PROCESS_ENTER) 
    748                          
     748 
    749749                        Tctl.SetValue(str(format_number(value))) 
    750750                        self.sizer4_4.Add(Tctl, (iy, ix), (1, 1), 
     
    758758                                                  size=(_BOX_WIDTH / 2.2, 20), 
    759759                                                  style=wx.TE_PROCESS_ENTER) 
    760                          
     760 
    761761                        Tct2.SetValue(str(format_number(value))) 
    762762                        self.sizer4_4.Add(Tct2, (iy, ix), (1, 1), 
     
    777777                self.fittable_param.append([cb, name1, ctl1, text2, 
    778778                                            ctl2, ctl3, ctl4, disp_box]) 
    779                             
     779 
    780780        ix = 0 
    781781        iy += 1 
     
    794794                name2 = item + ".npts" 
    795795                name3 = item + ".nsigmas" 
    796                  
     796 
    797797                if not name1 in self.model.details: 
    798798                    self.model.details[name1] = ["", None, None] 
    799   
     799 
    800800                iy += 1 
    801801                for p in self.model.dispersion[item].keys(): 
    802          
     802 
    803803                    if p == "width": 
    804804                        ix = 0 
     
    832832                                poly_text += "It is the STD (ratio*mean)" 
    833833                                poly_text += " of the distribution.\n " 
    834                              
     834 
    835835                                values.SetToolTipString(poly_text) 
    836836                                first_orient = False 
     
    838838                        elif ctl1.IsShown(): 
    839839                            ctl1.Hide() 
    840                          
     840 
    841841                        self.sizer4_4.Add(ctl1, (iy, ix), (1, 1), wx.EXPAND) 
    842842                        ## text to show error sign 
     
    852852                                           size=(_BOX_WIDTH / 1.3, 20), 
    853853                                           style=0) 
    854                      
     854 
    855855                        self.sizer4_4.Add(ctl2, (iy, ix), (1, 1), 
    856856                                          wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
     
    862862                                text2.Show(True) 
    863863                                ctl2.Show(True) 
    864                              
     864 
    865865                        ix = 4 
    866866                        ctl3 = self.ModelTextCtrl(self, -1, 
     
    873873 
    874874                        ctl3.Hide() 
    875                  
     875 
    876876                        ix = 5 
    877877                        ctl4 = self.ModelTextCtrl(self, -1, 
     
    882882                                          wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
    883883                        ctl4.Hide() 
    884                          
     884 
    885885                        if self.data.__class__.__name__ == "Data2D" or \ 
    886886                                self.enable2D: 
    887887                            ctl3.Show(True) 
    888888                            ctl4.Show(True) 
    889                               
     889 
    890890                    elif p == "npts": 
    891891                        ix = 6 
     
    894894                                                 size=(_BOX_WIDTH / 2.2, 20), 
    895895                                                 style=wx.TE_PROCESS_ENTER) 
    896                          
     896 
    897897                        Tctl.SetValue(str(format_number(value))) 
    898898                        if self.data.__class__.__name__ == "Data2D" or \ 
     
    914914                                                  size=(_BOX_WIDTH / 2.2, 20), 
    915915                                                  style=wx.TE_PROCESS_ENTER) 
    916                          
     916 
    917917                        Tct2.SetValue(str(format_number(value))) 
    918918                        if self.data.__class__.__name__ == "Data2D" or \ 
     
    926926                        self.fixed_param.append([None, name3, Tct2, 
    927927                                                 None, None, None, None, None]) 
    928                                                     
     928 
    929929                        self.orientation_params_disp.append([None, name3, 
    930930                                        Tct2, None, None, None, None, None]) 
     
    943943                self.orientation_params_disp.append([cb, name1, ctl1, 
    944944                                            text2, ctl2, ctl3, ctl4, disp_box]) 
    945                         
     945 
    946946                if self.data.__class__.__name__ == "Data2D" or \ 
    947947                                self.enable2D: 
     
    949949                else: 
    950950                    disp_box.Hide() 
    951          
     951 
    952952        self.state.disp_cb_dict = copy.deepcopy(self.disp_cb_dict) 
    953            
     953 
    954954        self.state.model = self.model.clone() 
    955955        ## save state into 
     
    984984        """ 
    985985        flag = self._update_paramv_on_fit() 
    986      
     986 
    987987        wx.CallAfter(self._onparamEnter_helper) 
    988988        if not flag: 
     
    990990            wx.PostEvent(self._manager.parent, StatusEvent(status=msg)) 
    991991            return 
    992          
     992 
    993993    def _onFit(self, event): 
    994994        """ 
     
    10151015                         StatusEvent(status="Fit: %s" % msg, type="stop")) 
    10161016            return 
    1017          
     1017 
    10181018        if len(self.param_toFit) <= 0: 
    10191019            msg = "Select at least one parameter to fit" 
     
    10221022                         StatusEvent(status=msg, type="stop")) 
    10231023            return 
    1024          
     1024 
    10251025        flag = self._update_paramv_on_fit() 
    1026          
     1026 
    10271027        if self.batch_on and not self._is_2D(): 
    10281028            if not self._validate_Npts_1D(): 
    10291029                return 
    1030                  
     1030 
    10311031        if not flag: 
    10321032            msg = "Fitting range or parameters are invalid" 
     
    10341034                         StatusEvent(status=msg, type="stop")) 
    10351035            return 
    1036                
     1036 
    10371037        self.select_param(event=None) 
    10381038 
     
    10501050        self.fit_started = self._manager.onFit(uid=self.uid) 
    10511051        wx.CallAfter(self.set_fitbutton) 
    1052      
     1052 
    10531053    def set_fitbutton(self): 
    10541054        """ 
     
    10591059        if self.is_mac: 
    10601060            return 
    1061          
     1061 
    10621062        if self.fit_started: 
    10631063            label = "Stop" 
     
    10701070        self.btFit.SetForegroundColour(color) 
    10711071        self.btFit.Enable(True) 
    1072                       
     1072 
    10731073    def get_weight_flag(self): 
    10741074        """ 
     
    10921092                break 
    10931093        return flag 
    1094                  
     1094 
    10951095    def _StopFit(self, event=None): 
    10961096        """ 
     
    11021102        self._manager._reset_schedule_problem(value=0) 
    11031103        self._on_fit_complete() 
    1104           
     1104 
    11051105    def rename_model(self): 
    11061106        """ 
     
    11091109        if self.model is not None: 
    11101110            self.model.name = "M" + str(self.index_model) 
    1111      
     1111 
    11121112    def _on_select_model(self, event=None): 
    11131113        """ 
     
    11411141        self.state.pinhole_smearer = self.pinhole_smearer.GetValue() 
    11421142        self.state.slit_smearer = self.slit_smearer.GetValue() 
    1143      
     1143 
    11441144        self.state.structurecombobox = self.structurebox.GetLabel() 
    11451145        self.state.formfactorcombobox = self.formfactorbox.GetLabel() 
     
    11611161                self.disable_smearer.SetValue(True) 
    11621162                self.enable_smearer.SetValue(False) 
    1163      
     1163 
    11641164            # more disables for 2D 
    11651165            self._set_smear_buttons() 
    1166              
     1166 
    11671167            try: 
    11681168                # update smearer sizer 
     
    11801180            ## event to post model to fit to fitting plugins 
    11811181            (ModelEventbox, EVT_MODEL_BOX) = wx.lib.newevent.NewEvent() 
    1182           
     1182 
    11831183            ## set smearing value whether or not 
    11841184            #    the data contain the smearing info 
     
    11901190                            caption=self.window_caption, 
    11911191                            qmax=float(self.qmax_x)) 
    1192     
     1192 
    11931193            self._manager._on_model_panel(evt=evt) 
    1194             self.mbox_description.SetLabel("Model [ %s ]"% str(self.model.name)) 
     1194            self.mbox_description.SetLabel("Model [ %s ]" % str(self.model.name)) 
    11951195            self.mbox_description.SetForegroundColour(wx.BLUE) 
    11961196            self.state.model = self.model.clone() 
     
    12251225                self.get_paste_params(copy_flag) 
    12261226                wx.CallAfter(self._onDraw, None) 
    1227                  
     1227 
    12281228        else: 
    12291229            self._draw_model() 
    1230              
     1230 
    12311231        if self.batch_on: 
    12321232            self.slit_smearer.Enable(False) 
     
    12341234            self.btEditMask.Disable() 
    12351235            self.EditMask_title.Disable() 
    1236              
     1236 
    12371237        self.Show(True) 
    12381238        self.SetupScrolling() 
    1239           
     1239 
    12401240    def _onparamEnter(self, event): 
    12411241        """ 
     
    12821282                if flag: 
    12831283                    #self.compute_chisqr(smearer= temp_smearer) 
    1284          
     1284 
    12851285                    ## new state posted 
    12861286                    if self.state_change: 
     
    12971297            msg = "Cannot Plot :Must enter a number!!!  " 
    12981298            wx.PostEvent(self._manager.parent, StatusEvent(status=msg)) 
    1299               
     1299 
    13001300        self.save_current_state() 
    13011301        return 
    1302     
     1302 
    13031303    def _onparamRangeEnter(self, event): 
    13041304        """ 
     
    13231323        else: 
    13241324            tcrtl.SetBackgroundColour(wx.WHITE) 
    1325             
     1325 
    13261326        #self._undo.Enable(True) 
    13271327        self.save_current_state() 
     
    13291329        wx.PostEvent(self.parent, event) 
    13301330        self.state_change = False 
    1331          
    1332     def qrang_set_focus(self, event=None):   
     1331 
     1332    def qrang_set_focus(self, event=None): 
    13331333        """ 
    13341334        ON Qrange focus 
     
    13381338        #tcrtl = event.GetEventObject() 
    13391339        self._validate_qrange(self.qmin, self.qmax) 
    1340          
     1340 
    13411341    def qrange_click(self, event): 
    13421342        """ 
     
    13521352            d_group_id = self.data.group_id 
    13531353            act_ctrl = event.GetEventObject() 
    1354             wx.PostEvent(self._manager.parent,  
    1355                          PlotQrangeEvent(ctrl=[self.qmin, self.qmax], id=d_id,  
     1354            wx.PostEvent(self._manager.parent, 
     1355                         PlotQrangeEvent(ctrl=[self.qmin, self.qmax], id=d_id, 
    13561356                                     group_id=d_group_id, leftdown=is_click, 
    13571357                                     active=act_ctrl)) 
    1358              
     1358 
    13591359    def on_qrange_text(self, event): 
    13601360        """ 
     
    13681368        d_id = self.data.id 
    13691369        d_group_id = self.data.group_id 
    1370         wx.PostEvent(self._manager.parent,  
    1371                      PlotQrangeEvent(ctrl=[self.qmin, self.qmax], id=d_id,  
    1372                                      group_id=d_group_id, leftdown=False,  
     1370        wx.PostEvent(self._manager.parent, 
     1371                     PlotQrangeEvent(ctrl=[self.qmin, self.qmax], id=d_id, 
     1372                                     group_id=d_group_id, leftdown=False, 
    13731373                                     active=act_ctrl)) 
    13741374        self._validate_qrange(self.qmin, self.qmax) 
    1375      
    1376     def on_key(self, event):    
     1375 
     1376    def on_key(self, event): 
    13771377        """ 
    13781378        On Key down 
     
    13851385            x_data = float(ctrl.GetValue()) 
    13861386        except: 
    1387             return  
     1387            return 
    13881388        key = event.GetKeyCode() 
    13891389        length = len(self.data.x) 
     
    14021402        ctrl.SetValue(str(self.data.x[indx])) 
    14031403        self._validate_qrange(self.qmin, self.qmax) 
    1404                 
     1404 
    14051405    def _onQrangeEnter(self, event): 
    14061406        """ 
     
    14631463                              (self.data.x <= self.qmax_x)) 
    14641464                self.Npts_fit.SetValue(str(len(self.data.x[index_data]))) 
    1465              
     1465 
    14661466            self.npts_x = self.Npts_total.GetValue() 
    14671467            self.create_default_data() 
     
    14711471            msg = "Model Error:wrong value entered!!!" 
    14721472            wx.PostEvent(self._manager.parent, StatusEvent(status=msg)) 
    1473          
     1473 
    14741474        self._draw_model() 
    14751475        self.save_current_state() 
     
    14781478        self.state_change = False 
    14791479        return 
    1480      
     1480 
    14811481    def _clear_Err_on_Fit(self): 
    14821482        """ 
     
    15081508                    if item[4] != None and item[4].IsShown(): 
    15091509                        item[4].Hide() 
    1510    
     1510 
    15111511        if len(self.fittable_param) > 0: 
    15121512            for item in self.fittable_param: 
     
    15281528                        item[4].Hide() 
    15291529        return 
    1530                  
     1530 
    15311531    def _get_defult_custom_smear(self): 
    15321532        """ 
     
    15421542        if self.dx_max == None: 
    15431543            self.dx_max = SMEAR_SIZE_H 
    1544          
     1544 
    15451545    def _get_smear_info(self): 
    15461546        """ 
    15471547        Get the smear info from data. 
    1548         
     1548 
    15491549        :return: self.smear_type, self.dq_l and self.dq_r, 
    15501550            respectively the type of the smear, dq_min and 
     
    15771577            self.dq_l = data.dx[0] 
    15781578            self.dq_r = data.dx[-1] 
    1579              
     1579 
    15801580        # check if it is slit smear and get min max if it is. 
    15811581        elif data.dxl != None or data.dxw != None: 
     
    15861586                self.dq_r = data.dxw[0] 
    15871587        #return self.smear_type,self.dq_l,self.dq_r 
    1588      
     1588 
    15891589    def _show_smear_sizer(self): 
    15901590        """ 
     
    16501650        self.smear_description_2d_y.Hide() 
    16511651        self.smear_description_2d.Hide() 
    1652          
     1652 
    16531653        self.smear_accuracy.Hide() 
    16541654        self.smear_data_left.Hide() 
     
    16641664        self.smear_message_new_p.Hide() 
    16651665        self.smear_message_new_s.Hide() 
    1666      
     1666 
    16671667    def _set_accuracy_list(self): 
    16681668        """ 
     
    16741674        for idx in range(len(list)): 
    16751675            self.smear_accuracy.Append(list[idx], idx) 
    1676              
     1676 
    16771677    def _set_fun_box_list(self, fun_box): 
    16781678        """ 
     
    16951695                    break 
    16961696            ind += 1 
    1697          
     1697 
    16981698    def _on_select_accuracy(self, event): 
    16991699        """ 
     
    17101710            if self.current_smearer != None: 
    17111711                self.current_smearer.set_accuracy(accuracy=\ 
    1712                                                   self.smear2d_accuracy)  
     1712                                                  self.smear2d_accuracy) 
    17131713        event.Skip() 
    17141714 
     
    17351735        # get ready for new event 
    17361736        event.Skip() 
    1737          
     1737 
    17381738    def _onMask(self, event): 
    17391739        """ 
     
    17421742        from sas.guiframe.local_perspectives.plotting.masking \ 
    17431743        import MaskPanel as MaskDialog 
    1744          
     1744 
    17451745        self.panel = MaskDialog(base=self, data=self.data, id=wx.NewId()) 
    17461746        self.panel.ShowModal() 
    1747          
     1747 
    17481748    def _draw_masked_model(self, event): 
    17491749        """ 
     
    17971797        """ 
    17981798        return self.enable2D 
    1799      
     1799 
    18001800    def compute_data_set_range(self, data_list): 
    18011801        """ 
     
    18101810                self.npts_data_set += npts 
    18111811        return self.qmin_data_set, self.qmax_data_set, self.npts_data_set 
    1812          
     1812 
    18131813    def compute_data_range(self, data): 
    18141814        """ 
     
    18261826                    npts = len(data.x) 
    18271827                except: 
    1828                     msg = "Unable to find min/max/length of \n data named %s"% \ 
    1829                                 data.filename   
     1828                    msg = "Unable to find min/max/length of \n data named %s" % \ 
     1829                                data.filename 
    18301830                    wx.PostEvent(self._manager.parent, StatusEvent(status=msg, 
    18311831                                               info="error")) 
    18321832                    raise ValueError, msg 
    1833                      
     1833 
    18341834            else: 
    18351835                qmin = 0 
     
    18381838                    y = max(math.fabs(data.ymin), math.fabs(data.ymax)) 
    18391839                except: 
    1840                     msg = "Unable to find min/max of \n data named %s"% \ 
    1841                                 data.filename   
     1840                    msg = "Unable to find min/max of \n data named %s" % \ 
     1841                                data.filename 
    18421842                    wx.PostEvent(self._manager.parent, StatusEvent(status=msg, 
    18431843                                               info="error")) 
     
    18471847                npts = len(data.data) 
    18481848        return qmin, qmax, npts 
    1849              
     1849 
    18501850    def set_data(self, data): 
    18511851        """ 
     
    18741874            self.graph_id = data.group_id 
    18751875        self.data.group_id = self.graph_id 
    1876          
     1876 
    18771877        if self.data is None: 
    18781878            data_name = "" 
     
    18841884                self._set_bookmark_flag(not self.batch_on) 
    18851885                self._keep.Enable(not self.batch_on) 
    1886             if self.data.is_data:     
     1886            if self.data.is_data: 
    18871887                self._set_save_flag(True) 
    18881888                self._set_preview_flag(True) 
     
    19221922            self.dI_sqrdata.Enable(True) 
    19231923            self.dI_idata.Enable(True) 
    1924                
     1924 
    19251925            self.formfactorbox.Enable() 
    19261926            self.structurebox.Enable() 
     
    19341934                self.btEditMask.Enable() 
    19351935                self.EditMask_title.Enable() 
    1936      
     1936 
    19371937        self.Npts_total.SetValue(str(npts)) 
    19381938        #default:number of data points selected to fit 
     
    19411941        self.Npts_total.SetBackgroundColour(\ 
    19421942                                    self.GetParent().GetBackgroundColour()) 
    1943          
     1943 
    19441944        self.Npts_total.Bind(wx.EVT_MOUSE_EVENTS, self._npts_click) 
    19451945        self.pointsbox.Disable() 
     
    19521952        if check_data_validity(data): 
    19531953            self.data_box_description.SetForegroundColour(wx.BLUE) 
    1954          
     1954 
    19551955        if self.batch_on: 
    19561956            self.slit_smearer.Enable(False) 
     
    19881988                                      title=str(self.data.title))) 
    19891989            self._draw_model() 
    1990      
     1990 
    19911991    def _npts_click(self, event): 
    19921992        """ 
     
    19951995        """ 
    19961996        pass 
    1997      
     1997 
    19981998    def reset_page(self, state, first=False): 
    19991999        """ 
     
    20022002        try: 
    20032003            self.reset_page_helper(state) 
    2004      
     2004 
    20052005            self.select_param(event=None) 
    20062006            #Save state_fit 
     
    20102010            msg = "Error: This model state has missing or outdated " 
    20112011            msg += "information.\n" 
    2012             msg += "%s"% (sys.exc_value) 
     2012            msg += "%s" % (sys.exc_value) 
    20132013            wx.PostEvent(self._manager.parent, 
    20142014                         StatusEvent(status=msg, info="error")) 
    20152015        self._lay_out() 
    20162016        self.Refresh() 
    2017          
     2017 
    20182018    def get_range(self): 
    20192019        """ 
     
    20212021        """ 
    20222022        return float(self.qmin_x), float(self.qmax_x) 
    2023      
     2023 
    20242024    def get_npts2fit(self): 
    20252025        """ 
    20262026        return numbers of data points within qrange 
    2027          
     2027 
    20282028        :Note: This is to normalize chisq by Npts of fit 
    2029          
     2029 
    20302030        """ 
    20312031        if self.data is None: 
     
    20522052        """ 
    20532053        self.Npts_fit.SetValue(str(self.get_npts2fit())) 
    2054          
     2054 
    20552055    def get_chi2(self): 
    20562056        """ 
     
    20582058        """ 
    20592059        return self.tcChi.GetValue() 
    2060          
     2060 
    20612061    def onsetValues(self, chisqr, p_name, out, cov): 
    20622062        """ 
    20632063        Build the panel from the fit result 
    2064          
     2064 
    20652065        :param chisqr: Value of the goodness of fit metric 
    20662066        :param p_name: the name of parameters 
    20672067        :param out: list of parameter with the best value found during fitting 
    20682068        :param cov: Covariance matrix 
    2069     
    2070         """ 
    2071          
     2069 
     2070        """ 
     2071 
    20722072        # make sure stop button to fit button all the time 
    20732073        self._on_fit_complete() 
    20742074        if out == None or not numpy.isfinite(chisqr): 
    20752075            raise ValueError, "Fit error occured..." 
    2076          
     2076 
    20772077        is_modified = False 
    20782078        has_error = False 
    20792079        dispersity = '' 
    2080          
     2080 
    20812081        #Hide textctrl boxes of errors. 
    20822082        self._clear_Err_on_Fit() 
    2083          
     2083 
    20842084        #Check if chi2 is finite 
    20852085        if chisqr != None and numpy.isfinite(chisqr): 
     
    20902090        else: 
    20912091            self.tcChi.SetValue("-") 
    2092          
     2092 
    20932093        #Hide error title 
    20942094        if self.text2_3.IsShown() and not self.is_mac: 
    20952095            self.text2_3.Hide() 
    2096        
     2096 
    20972097        try: 
    20982098            if self.enable_disp.GetValue(): 
     
    21032103            dispersity = None 
    21042104            pass 
    2105        
     2105 
    21062106        i = 0 
    21072107        #Set the panel when fit result are list 
     
    21212121                        val_out = format_number(out[ind], True) 
    21222122                        item[2].SetValue(val_out) 
    2123      
     2123 
    21242124                    if(cov != None and len(cov) == len(out)): 
    21252125                        try: 
     
    21332133                        except: 
    21342134                            pass 
    2135                          
     2135 
    21362136                        if cov[ind] != None: 
    21372137                            if numpy.isfinite(float(cov[ind])): 
     
    21602160        ## save current state 
    21612161        self.save_current_state() 
    2162          
     2162 
    21632163        if not self.is_mac: 
    21642164            self.Layout() 
     
    21672167        #plot model ( when drawing, do not update chisqr value again) 
    21682168        self._draw_model(update_chisqr=False, source='fit') 
    2169      
     2169 
    21702170    def onWeighting(self, event): 
    21712171        """ 
     
    21742174        self.weightbt_string = event.GetEventObject().GetLabelText() 
    21752175        self._set_weight() 
    2176          
     2176 
    21772177    def _set_weight(self, is_2D=None): 
    21782178        """ 
     
    21912191                                     is2d=is_2D, 
    21922192                                     fid=None) 
    2193      
     2193 
    21942194    def onPinholeSmear(self, event): 
    21952195        """ 
    21962196        Create a custom pinhole smear object that will change the way residuals 
    21972197        are compute when fitting 
    2198          
     2198 
    21992199        :Note: accuracy is given by strings'High','Med', 'Low' FOR 2d, 
    22002200                     None for 1D 
    2201                       
     2201 
    22022202        """ 
    22032203        if self.model == None: 
     
    22322232        # hide all silt sizer 
    22332233        self._hide_all_smear_info() 
    2234          
     2234 
    22352235        # show relevant slit sizers 
    22362236        self._show_smear_sizer() 
     
    22382238        self.sizer_set_smearer.Layout() 
    22392239        self.Layout() 
    2240          
     2240 
    22412241        if event != None: 
    22422242            event.Skip() 
     
    22452245        event = PageInfoEvent(page=self) 
    22462246        wx.PostEvent(self.parent, event) 
    2247          
     2247 
    22482248    def _is_changed_pinhole(self): 
    22492249        """ 
    22502250        check if any of pinhole smear is changed 
    2251          
     2251 
    22522252        :return: True or False 
    2253          
     2253 
    22542254        """ 
    22552255        # get the values 
    22562256        pin_min = self.smear_pinhole_min.GetValue() 
    22572257        pin_max = self.smear_pinhole_max.GetValue() 
    2258                      
     2258 
    22592259        # Check changes in slit width 
    22602260        try: 
     
    22642264        if self.dx_min != dx_min: 
    22652265            return True 
    2266          
     2266 
    22672267        # Check changes in slit heigth 
    22682268        try: 
     
    22732273            return True 
    22742274        return False 
    2275      
     2275 
    22762276    def _set_pinhole_smear(self): 
    22772277        """ 
    22782278        Set custom pinhole smear 
    2279          
     2279 
    22802280        :return: msg 
    2281          
     2281 
    22822282        """ 
    22832283        # copy data 
     
    22952295            data.dxw = None 
    22962296        msg = None 
    2297     
     2297 
    22982298        get_pin_min = self.smear_pinhole_min 
    22992299        get_pin_max = self.smear_pinhole_max 
     
    23492349            get_pin_max.SetBackgroundColour("white") 
    23502350        ## set smearing value whether or not the data contain the smearing info 
    2351          
     2351 
    23522352        self._manager.set_smearer(smearer=self.current_smearer, 
    23532353                            fid=self.data.id, 
     
    23572357                            uid=self.uid) 
    23582358        return msg 
    2359          
     2359 
    23602360    def update_pinhole_smear(self): 
    23612361        """ 
    23622362        called by kill_focus on pinhole TextCntrl 
    23632363        to update the changes 
    2364          
     2364 
    23652365        :return: False when wrong value was entered 
    2366          
     2366 
    23672367        """ 
    23682368        # msg default 
     
    23772377        else: 
    23782378            return True 
    2379                       
     2379 
    23802380    def onSlitSmear(self, event): 
    23812381        """ 
     
    24102410        else: 
    24112411            is_new_slit = True 
    2412          
     2412 
    24132413        # if any value is changed 
    24142414        if is_new_slit: 
    24152415            msg = self._set_slit_smear() 
    2416              
     2416 
    24172417        # hide all silt sizer 
    24182418        self._hide_all_smear_info() 
     
    24332433        """ 
    24342434        check if any of slit lengths is changed 
    2435          
     2435 
    24362436        :return: True or False 
    2437          
     2437 
    24382438        """ 
    24392439        # get the values 
    24402440        width = self.smear_slit_width.GetValue() 
    24412441        height = self.smear_slit_height.GetValue() 
    2442          
     2442 
    24432443        # check and change the box bg color if it was pink 
    24442444        #    but it should be white now 
     
    24482448        if width.lstrip().rstrip() == "": 
    24492449            self.smear_slit_width.SetBackgroundColour(wx.WHITE) 
    2450              
     2450 
    24512451        # Check changes in slit width 
    24522452        if width == "": 
     
    24592459        if self.dxw != dxw: 
    24602460            return True 
    2461          
     2461 
    24622462        # Check changes in slit heigth 
    24632463        if height == "": 
     
    24722472 
    24732473        return False 
    2474      
     2474 
    24752475    def _set_slit_smear(self): 
    24762476        """ 
    24772477        Set custom slit smear 
    2478          
     2478 
    24792479        :return: message to inform the user about the validity 
    24802480            of the values entered for slit smear 
     
    24902490        data.dxw = None 
    24912491        msg = None 
    2492     
     2492 
    24932493        try: 
    24942494            self.dxl = float(self.smear_slit_height.GetValue()) 
     
    25152515            else: 
    25162516                self.smear_slit_width.SetBackgroundColour(wx.WHITE) 
    2517                
     2517 
    25182518        self.current_smearer = smear_selection(data, self.model) 
    25192519        ## set smearing value whether or not the data contain the smearing info 
     
    25252525                                 uid=self.uid) 
    25262526        return msg 
    2527      
     2527 
    25282528    def update_slit_smear(self): 
    25292529        """ 
    25302530        called by kill_focus on pinhole TextCntrl 
    25312531        to update the changes 
    2532          
     2532 
    25332533        :return: False when wrong value was entered 
    2534          
     2534 
    25352535        """ 
    25362536        # msg default 
     
    25462546        else: 
    25472547            return True 
    2548                              
     2548 
    25492549    def onSmear(self, event): 
    25502550        """ 
     
    25722572                self._manager.page_finder[self.uid].add_data(data=self.data) 
    25732573        temp_smearer = self.on_smear_helper() 
    2574          
     2574 
    25752575        self.sizer_set_smearer.Layout() 
    25762576        self.Layout() 
    25772577        self._set_weight() 
    2578          
     2578 
    25792579        ## set smearing value whether or not the data contain the smearing info 
    25802580        wx.CallAfter(self._manager.set_smearer, uid=self.uid, 
     
    25852585                     enable_smearer=not self.disable_smearer.GetValue(), 
    25862586                     draw=True) 
    2587          
     2587 
    25882588        self.state.enable_smearer = self.enable_smearer.GetValue() 
    25892589        self.state.disable_smearer = self.disable_smearer.GetValue() 
    25902590        self.state.pinhole_smearer = self.pinhole_smearer.GetValue() 
    25912591        self.state.slit_smearer = self.slit_smearer.GetValue() 
    2592          
     2592 
    25932593    def on_smear_helper(self, update=False): 
    25942594        """ 
    25952595        Help for onSmear 
    2596          
     2596 
    25972597        :param update: force or not to update 
    25982598        """ 
     
    26062606        self._hide_all_smear_info() 
    26072607        data = copy.deepcopy(self.data) 
    2608          
     2608 
    26092609        # make sure once more if it is smearer 
    26102610        temp_smearer = smear_selection(data, self.model) 
     
    26292629            self.onSlitSmear(None) 
    26302630        self._show_smear_sizer() 
    2631          
     2631 
    26322632        return temp_smearer 
    2633      
     2633 
    26342634    def on_complete_chisqr(self, event): 
    26352635        """ 
     
    26482648        except: 
    26492649            pass 
    2650              
     2650 
    26512651    def get_all_checked_params(self): 
    26522652        """ 
     
    26642664                    self.param_toFit.append(item) 
    26652665        self.save_current_state_fit() 
    2666         
     2666 
    26672667        event = PageInfoEvent(page=self) 
    26682668        wx.PostEvent(self.parent, event) 
     
    26722672                param2fit.append(item[1]) 
    26732673        self._manager.set_param2fit(self.uid, param2fit) 
    2674                  
     2674 
    26752675    def select_all_param(self, event): 
    26762676        """ 
     
    27062706                            except: 
    27072707                                pass 
    2708      
     2708 
    27092709                        else: 
    27102710                            ## for 1D all parameters except orientation 
     
    27262726                    item[0].SetValue(False) 
    27272727                self.param_toFit = [] 
    2728             
     2728 
    27292729        self.save_current_state_fit() 
    2730         
     2730 
    27312731        if event != None: 
    27322732            #self._undo.Enable(True) 
     
    27392739                param2fit.append(item[1]) 
    27402740        self.parent._manager.set_param2fit(self.uid, param2fit) 
    2741      
     2741 
    27422742    def select_param(self, event): 
    27432743        """ 
     
    27922792        else: 
    27932793            self.cb1.SetValue(False) 
    2794         
     2794 
    27952795        self.save_current_state_fit() 
    27962796        if event != None: 
     
    27982798            event = PageInfoEvent(page=self) 
    27992799            wx.PostEvent(self.parent, event) 
    2800          
     2800 
    28012801        param2fit = [] 
    28022802        for item in self.param_toFit: 
     
    28042804                param2fit.append(item[1]) 
    28052805        self._manager.set_param2fit(self.uid, param2fit) 
    2806          
     2806 
    28072807    def set_model_param_sizer(self, model): 
    28082808        """ 
    28092809        Build the panel from the model content 
    2810          
     2810 
    28112811        :param model: the model selected in combo box for fitting purpose 
    2812          
     2812 
    28132813        """ 
    28142814        self.sizer3.Clear(True) 
     
    28202820        self.orientation_params = [] 
    28212821        self.orientation_params_disp = [] 
    2822          
     2822 
    28232823        if model == None: 
    28242824            self.sizer3.Layout() 
     
    28342834        ## save the current model 
    28352835        self.model = model 
    2836             
     2836 
    28372837        keys = self.model.getParamList() 
    2838          
     2838 
    28392839        #list of dispersion parameters 
    28402840        self.disp_list = self.model.getDispParamList() 
     
    28922892 
    28932893        keys.sort(custom_compare) 
    2894      
     2894 
    28952895        iy = 0 
    28962896        ix = 0 
     
    29002900        self.cb1.SetToolTipString("To check/uncheck all the boxes below.") 
    29012901        self.cb1.SetValue(True) 
    2902          
     2902 
    29032903        sizer.Add(self.cb1, (iy, ix), (1, 1), \ 
    29042904                             wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 5) 
     
    29282928                            wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
    29292929        self.text2_4.Hide() 
    2930          
     2930 
    29312931        CHECK_STATE = self.cb1.GetValue() 
    29322932        for item in keys: 
    2933              
     2933 
    29342934            if not item in self.disp_list and not item in \ 
    29352935                    self.model.orientation_params: 
    2936                  
     2936 
    29372937                ##prepare a spot to store errors 
    29382938                if not item in self.model.details: 
    29392939                    self.model.details[item] = ["", None, None] 
    2940           
     2940 
    29412941                iy += 1 
    29422942                ix = 0 
     
    29782978                    #cb.SetValue(True) 
    29792979                    wx.EVT_CHECKBOX(self, cb.GetId(), self.select_param) 
    2980                      
     2980 
    29812981                    sizer.Add(cb, (iy, ix), (1, 1), 
    29822982                              wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 5) 
     
    30173017                    sizer.Add(ctl3, (iy, ix), (1, 1), 
    30183018                              wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
    3019              
     3019 
    30203020                    ix += 1 
    30213021                    ctl4 = self.ModelTextCtrl(self, -1, 
     
    30283028                    sizer.Add(ctl4, (iy, ix), (1, 1), 
    30293029                              wx.EXPAND | wx.FIXED_MINSIZE, 0) 
    3030      
     3030 
    30313031                    ix += 1 
    30323032                    # Units 
     
    30393039                    sizer.Add(units, (iy, ix), (1, 1), 
    30403040                              wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
    3041                          
     3041 
    30423042                    self.parameters.append([cb, item, ctl1, 
    30433043                                            text2, ctl2, ctl3, ctl4, units]) 
    3044                                    
     3044 
    30453045        iy += 1 
    30463046        sizer.Add((10, 10), (iy, ix), (1, 1), 
    30473047                  wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 15) 
    3048          
     3048 
    30493049        # type can be either Guassian or Array 
    30503050        if len(self.model.dispersion.values()) > 0: 
     
    30523052        else: 
    30533053            type = "Gaussian" 
    3054              
     3054 
    30553055        iy += 1 
    30563056        ix = 0 
     
    30593059            if item in self.model.orientation_params: 
    30603060                orient_angle = wx.StaticText(self, -1, '[For 2D only]:') 
    3061                 mag_on_button = wx.Button(self, -1, "Magnetic ON" ) 
     3061                mag_on_button = wx.Button(self, -1, "Magnetic ON") 
    30623062                mag_on_button.Bind(wx.EVT_BUTTON, self._on_mag_on) 
    3063                 mag_help_button = wx.Button(self, -1,"Magnetic angles?" ) 
    3064                 mag_help_button.Bind(wx.EVT_BUTTON,self._on_mag_help) 
     3063                mag_help_button = wx.Button(self, -1, "Magnetic angles?") 
     3064                mag_help_button.Bind(wx.EVT_BUTTON, self._on_mag_help) 
    30653065                sizer.Add(orient_angle, (iy, ix), (1, 1), 
    30663066                          wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 15) 
    30673067                iy += 1 
    3068                 sizer.Add(mag_on_button,(iy, ix ),(1,1),  
    3069                           wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15)  
    3070                 sizer.Add(mag_help_button,(iy, ix + 1),(1,1),  
    3071                           wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15)  
    3072                  
     3068                sizer.Add(mag_on_button, (iy, ix), (1, 1), 
     3069                          wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 15) 
     3070                sizer.Add(mag_help_button, (iy, ix + 1), (1, 1), 
     3071                          wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 15) 
     3072 
    30733073                #handle the magnetic buttons 
    30743074                if not self._has_magnetic: 
     
    30823082                    if self.magnetic_on: 
    30833083                        mag_on_button.SetLabel("Magnetic OFF") 
    3084                         mag_help_button.Show(True)  
     3084                        mag_help_button.Show(True) 
    30853085                    else: 
    30863086                        mag_on_button.SetLabel("Magnetic ON") 
    30873087                        mag_help_button.Show(False) 
    3088                          
     3088 
    30893089                if not self.data.__class__.__name__ == "Data2D" and \ 
    30903090                        not self.enable2D: 
     
    30933093                    orient_angle.Show(True) 
    30943094                break 
    3095        
     3095 
    30963096        #For Gaussian only 
    30973097        if type.lower() != "array": 
     
    31043104                    if not item in self.model.details: 
    31053105                        self.model.details[item] = ["", None, None] 
    3106                            
     3106 
    31073107                    iy += 1 
    31083108                    ix = 0 
     
    31193119                    sizer.Add(cb, (iy, ix), (1, 1), 
    31203120                              wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 5) 
    3121      
     3121 
    31223122                    ## add parameter value 
    31233123                    ix += 1 
     
    31483148 
    31493149                    ctl2.Hide() 
    3150                      
     3150 
    31513151                    ix += 1 
    31523152                    ctl3 = self.ModelTextCtrl(self, -1, 
     
    31543154                                              style=wx.TE_PROCESS_ENTER, 
    31553155                                text_enter_callback=self._onparamRangeEnter) 
    3156                      
     3156 
    31573157                    sizer.Add(ctl3, (iy, ix), (1, 1), 
    31583158                              wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
    31593159                    ctl3.Hide() 
    3160                   
     3160 
    31613161                    ix += 1 
    31623162                    ctl4 = self.ModelTextCtrl(self, -1, 
     
    31663166                    sizer.Add(ctl4, (iy, ix), (1, 1), 
    31673167                              wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
    3168                     
     3168 
    31693169                    ctl4.Hide() 
    3170                      
     3170 
    31713171                    if self.data.__class__.__name__ == "Data2D" or \ 
    31723172                            self.enable2D: 
     
    31763176                        ctl3.Show(True) 
    31773177                        ctl4.Show(True) 
    3178                      
     3178 
    31793179                    ix += 1 
    31803180                    # Units 
     
    31913191                    else: 
    31923192                        units.Hide() 
    3193                      
     3193 
    31943194                    sizer.Add(units, (iy, ix), (1, 1), 
    31953195                              wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
    3196                                            
     3196 
    31973197                    self.parameters.append([cb, item, ctl1, 
    31983198                                            text2, ctl2, ctl3, ctl4, units]) 
    31993199                    self.orientation_params.append([cb, item, ctl1, 
    32003200                                            text2, ctl2, ctl3, ctl4, units]) 
    3201                
     3201 
    32023202        iy += 1 
    32033203        box_description.SetForegroundColour(wx.BLUE) 
     
    32353235            wx.PostEvent(self._manager.parent, 
    32363236                        StatusEvent(status=msg, info=infor)) 
    3237          
     3237 
    32383238    def _onModel2D(self, event): 
    32393239        """ 
     
    32433243            self.model_view.SetLabel("Show 1D") 
    32443244            self.enable2D = True 
    3245                
     3245 
    32463246        else: 
    32473247            self.model_view.SetLabel("Show 2D") 
     
    32583258        self.SetupScrolling() 
    32593259        self._draw_model() 
    3260          
     3260 
    32613261        self.state.enable2D = copy.deepcopy(self.enable2D) 
    3262      
     3262 
    32633263    def _set_smear_buttons(self): 
    32643264        """ 
     
    32743274            self.slit_smearer.Enable(True) 
    32753275            self.pinhole_smearer.Enable(True) 
    3276              
    3277              
     3276 
     3277 
    32783278class BGTextCtrl(wx.TextCtrl): 
    32793279    """ 
     
    32863286        self.SetEditable(False) 
    32873287        self.SetBackgroundColour(self.GetParent().parent.GetBackgroundColour()) 
    3288          
     3288 
    32893289        # Bind to mouse event to avoid text highlighting 
    32903290        # The event will be skipped once the call-back 
    32913291        # is called. 
    32923292        self.Bind(wx.EVT_MOUSE_EVENTS, self._click) 
    3293          
     3293 
    32943294    def _click(self, event): 
    32953295        """ 
  • src/sas/perspectives/fitting/fitpanel.py

    r386ffe1 r2f4b430  
    44:note: For Fit to be performed the user should check at least one parameter 
    55    on fit Panel window. 
    6     
     6 
    77""" 
    88import wx 
     
    2222    """ 
    2323    FitPanel class contains fields allowing to fit  models and  data 
    24      
     24 
    2525    :note: For Fit to be performed the user should check at least one parameter 
    2626        on fit Panel window. 
    27         
     27 
    2828    """ 
    2929    ## Internal name for the AUI manager 
     
    3232    window_caption = "Fit Panel " 
    3333    CENTER_PANE = True 
    34      
     34 
    3535    def __init__(self, parent, manager=None, *args, **kwargs): 
    3636        """ 
    3737        """ 
    3838        nb.__init__(self, parent, -1, 
    39                     style=wx.aui.AUI_NB_WINDOWLIST_BUTTON| 
    40                     wx.aui.AUI_NB_DEFAULT_STYLE| 
     39                    style=wx.aui.AUI_NB_WINDOWLIST_BUTTON | 
     40                    wx.aui.AUI_NB_DEFAULT_STYLE | 
    4141                    wx.CLIP_CHILDREN) 
    4242        PanelBase.__init__(self, parent) 
     
    5151        self.model_dictionary = self.menu_mng.get_model_dictionary() 
    5252        self.pageClosedEvent = wx.aui.EVT_AUINOTEBOOK_PAGE_CLOSE 
    53          
     53 
    5454        self.Bind(self.pageClosedEvent, self.on_close_page) 
    5555        ## save the title of the last page tab added 
     
    7171        self.Bind(wx.aui.EVT_AUINOTEBOOK_PAGE_CHANGED, self.on_page_changing) 
    7272        self.Bind(wx.aui.EVT_AUINOTEBOOK_PAGE_CLOSED, self.on_closed) 
    73          
     73 
    7474    def on_closed(self, event): 
    7575        """ 
     
    7878            self.add_empty_page() 
    7979            self.enable_close_button() 
    80          
     80 
    8181    def save_project(self, doc=None): 
    8282        """ 
     
    109109                                                            info="warning")) 
    110110        return doc 
    111      
     111 
    112112    def update_model_list(self): 
    113113        """ 
     
    117117            self.model_list_box = temp 
    118118        return temp 
    119      
     119 
    120120    def reset_pmodel_list(self): 
    121121        """ 
     
    125125            self.model_list_box = temp 
    126126        return temp 
    127      
     127 
    128128    def get_page_by_id(self, uid): 
    129129        """ 
     
    134134        else: 
    135135            return self.opened_pages[uid] 
    136          
     136 
    137137    def on_page_changing(self, event): 
    138138        """ 
     
    141141        """ 
    142142        wx.CallAfter(self.helper_on_page_change) 
    143          
     143 
    144144    def helper_on_page_change(self): 
    145145        """ 
     
    148148        if pos != -1: 
    149149            selected_page = self.GetPage(pos) 
    150             wx.PostEvent(self._manager.parent,  
     150            wx.PostEvent(self._manager.parent, 
    151151                         PanelOnFocusEvent(panel=selected_page)) 
    152152        self.enable_close_button() 
    153         
     153 
    154154    def on_set_focus(self, event): 
    155155        """ 
     
    158158        if pos != -1: 
    159159            selected_page = self.GetPage(pos) 
    160             wx.PostEvent(self._manager.parent,  
     160            wx.PostEvent(self._manager.parent, 
    161161                         PanelOnFocusEvent(panel=selected_page)) 
    162          
     162 
    163163    def get_data(self): 
    164164        """ 
     
    169169            selected_page = self.GetPage(pos) 
    170170            return selected_page.get_data() 
    171      
     171 
    172172    def set_model_state(self, state): 
    173173        """ 
     
    178178            selected_page = self.GetPage(pos) 
    179179            selected_page.set_model_state(state) 
    180              
     180 
    181181    def get_state(self): 
    182182        """ 
     
    187187            selected_page = self.GetPage(pos) 
    188188            return selected_page.get_state() 
    189      
     189 
    190190    def close_all(self): 
    191191        """ 
    192192        remove all pages, used when a svs file is opened 
    193193        """ 
    194          
     194 
    195195        #get number of pages 
    196196        nop = self.GetPageCount() 
     
    204204            self.DeletePage(0) 
    205205            nop = nop - 1 
    206              
     206 
    207207        ## save the title of the last page tab added 
    208208        self.fit_page_name = {} 
    209209        ## list of existing fit page 
    210210        self.opened_pages = {} 
    211           
     211 
    212212    def set_state(self, state): 
    213213        """ 
     
    238238                    panel.reset_page(state=state) 
    239239                    panel.save_current_state() 
    240                      
     240 
    241241    def clear_panel(self): 
    242242        """ 
    243243        Clear and close all panels, used by guimanager 
    244244        """ 
    245         
     245 
    246246        #close all panels only when svs file opened 
    247247        self.close_all() 
    248248        self._manager.mypanels = [] 
    249          
     249 
    250250    def on_close_page(self, event=None): 
    251251        """ 
     
    260260                return 
    261261        self._close_helper(selected_page=selected_page) 
    262          
     262 
    263263    def close_page_with_data(self, deleted_data): 
    264264        """ 
     
    271271            if hasattr(selected_page, "get_data"): 
    272272                data = selected_page.get_data() 
    273                  
     273 
    274274                if data is None: 
    275275                    #the fitpanel exists and only the initial fit page is open 
     
    280280                    self.DeletePage(index) 
    281281                    break 
    282          
     282 
    283283    def set_manager(self, manager): 
    284284        """ 
    285285        set panel manager 
    286          
     286 
    287287        :param manager: instance of plugin fitting 
    288          
     288 
    289289        """ 
    290290        self._manager = manager 
     
    297297        """ 
    298298        copy a dictionary of model into its own dictionary 
    299          
     299 
    300300        :param m_dict: dictionnary made of model name as key and model class 
    301301        as value 
    302302        """ 
    303303        self.model_list_box = dict 
    304          
     304 
    305305    def set_model_dict(self, m_dict): 
    306306        """ 
     
    313313        """ 
    314314        :return: the current page selected 
    315          
     315 
    316316        """ 
    317317        return self.GetPage(self.GetSelection()) 
    318      
     318 
    319319    def add_sim_page(self, caption="Const & Simul Fit"): 
    320320        """ 
     
    325325        if caption == "Const & Simul Fit": 
    326326            self.sim_page = SimultaneousFitPage(self, page_finder=page_finder, 
    327                                                  id=-1, batch_on=False) 
     327                                                 id= -1, batch_on=False) 
    328328            self.sim_page.window_caption = caption 
    329329            self.sim_page.window_name = caption 
     
    343343            self.enable_close_button() 
    344344            return self.batch_page 
    345   
     345 
    346346    def add_empty_page(self): 
    347347        """ 
     
    385385        panel.on_set_focus(None) 
    386386        return panel 
    387      
     387 
    388388    def enable_close_button(self): 
    389389        """ 
     
    403403                style |= wx.aui.AUI_NB_CLOSE_ON_ACTIVE_TAB 
    404404                self.SetWindowStyle(style) 
    405              
     405 
    406406    def delete_data(self, data): 
    407407        """ 
     
    422422            if self.GetPageCount() == 0: 
    423423                self._manager.on_add_new_page(event=None) 
    424          
     424 
    425425    def set_data_on_batch_mode(self, data_list): 
    426426        """ 
    427427        Add all data to a single tab when the application is on Batch mode. 
    428         However all data in the set of data must be either 1D or 2D type.  
    429         This method presents option to select the data type before creating a  
     428        However all data in the set of data must be either 1D or 2D type. 
     429        This method presents option to select the data type before creating a 
    430430        tab. 
    431431        """ 
     
    445445            #check if there is an empty page to fill up 
    446446            if not check_data_validity(p.get_data()) and p.batch_on: 
    447                  
     447 
    448448                #make sure data get placed in 1D empty tab if data is 1D 
    449449                #else data get place on 2D tab empty tab 
     
    479479            elif not data_1d_list and data_2d_list: 
    480480                page.fill_data_combobox(data_2d_list) 
    481                  
     481 
    482482        pos = self.GetPageIndex(page) 
    483483        page.batch_on = self.batch_on 
     
    486486        self.opened_pages[page.uid] = page 
    487487        return page 
    488      
     488 
    489489    def set_data(self, data_list): 
    490490        """ 
    491491        Add a fitting page on the notebook contained by fitpanel 
    492          
     492 
    493493        :param data: data to fit 
    494          
     494 
    495495        :return panel : page just added for further used. 
    496496        is used by fitting module 
    497          
     497 
    498498        """ 
    499499        if not data_list: 
     
    509509                data_list = [data] 
    510510                data = data_list[0] 
    511                  
     511 
    512512            if data is None: 
    513513                return None 
     
    535535        self.SetSelection(pos) 
    536536        return page 
    537         
     537 
    538538    def _onGetstate(self, event): 
    539539        """ 
     
    543543        if page.uid in self.fit_page_name: 
    544544            self.fit_page_name[page.uid].appendItem(page.createMemento()) 
    545              
     545 
    546546    def _onUndo(self, event): 
    547547        """ 
     
    556556                page._redo.Enable(True) 
    557557            page.reset_page(state) 
    558          
     558 
    559559    def _onRedo(self, event): 
    560560        """ 
     
    571571                state = self.fit_page_name[page.uid].getNextItem() 
    572572            page.reset_page(state) 
    573                   
     573 
    574574    def _close_helper(self, selected_page): 
    575575        """ 
     
    606606            for uid, list in self.opened_pages.iteritems(): 
    607607                #Don't return any panel is the exact same page is created 
    608                  
     608 
    609609                if flag and selected_page.uid == uid: 
    610610                    self._manager.remove_plot(uid, theory=False) 
    611611                    break 
    612612            del page_finder[selected_page] 
    613    
     613 
    614614        #Delete the name of the page into the list of open page 
    615615        for uid, list in self.opened_pages.iteritems(): 
  • src/sas/perspectives/fitting/fitproblem.py

    r7a04dbb r2f4b430  
    2727        flag is 0 ingore smear value. 
    2828        """ 
    29          
     29 
    3030    def get_smearer(self): 
    3131        """ 
     
    3535        """ 
    3636        """ 
    37          
     37 
    3838    def get_name(self): 
    3939        """ 
    4040        """ 
    41          
     41 
    4242    def set_model(self, model): 
    4343        """ 
     
    4646        :param name: name created for model 
    4747        """ 
    48          
     48 
    4949    def get_model(self): 
    5050        """ 
    5151        :return: saved model 
    5252        """ 
    53          
     53 
    5454    def set_residuals(self, residuals): 
    5555        """ 
     
    5757        :param data: data selected 
    5858        """ 
    59          
     59 
    6060    def get_residuals(self): 
    6161        """ 
    6262        :return: residuals 
    6363        """ 
    64          
     64 
    6565    def set_theory_data(self, data): 
    6666        """ 
     
    6868        :param data: data selected 
    6969        """ 
    70          
     70 
    7171    def get_theory_data(self): 
    7272        """ 
    7373        :return: list of data dList 
    7474        """ 
    75          
     75 
    7676    def set_fit_data(self, data): 
    7777        """ 
     
    8181        :param data: list of data selected 
    8282        """ 
    83          
     83 
    8484    def get_fit_data(self): 
    8585        """ 
    8686        """ 
    87          
     87 
    8888    def set_model_param(self, name, value=None): 
    8989        """ 
     
    9292        :param value: value of that parameter 
    9393        """ 
    94          
     94 
    9595    def set_param2fit(self, list): 
    9696        """ 
     
    9898        :param list: list of the param names 
    9999        """ 
    100          
     100 
    101101    def get_param2fit(self): 
    102102        """ 
    103103        return the list param names to fit 
    104104        """ 
    105          
     105 
    106106    def get_model_param(self): 
    107107        """ 
    108108        return list of couple of parameter name and value 
    109109        """ 
    110          
     110 
    111111    def schedule_tofit(self, schedule=0): 
    112112        """ 
    113113        set schedule to true to decide if this fit  must be performed 
    114114        """ 
    115          
     115 
    116116    def get_scheduled(self): 
    117117        """ 
    118118        return true or false if a problem as being schedule for fitting 
    119119        """ 
    120          
     120 
    121121    def set_range(self, qmin=None, qmax=None): 
    122122        """ 
    123123        set fitting range 
    124124        """ 
    125          
     125 
    126126    def get_range(self): 
    127127        """ 
    128128        :return: fitting range 
    129129        """ 
    130          
     130 
    131131    def set_weight(self, flag=None): 
    132132        """ 
    133133        set fitting range 
    134134        """ 
    135          
     135 
    136136    def get_weight(self): 
    137137        """ 
    138138        get fitting weight 
    139139        """ 
    140          
     140 
    141141    def clear_model_param(self): 
    142142        """ 
    143143        clear constraint info 
    144144        """ 
    145          
     145 
    146146    def set_fit_tab_caption(self, caption): 
    147147        """ 
    148148        store the caption of the page associated with object 
    149149        """ 
    150          
     150 
    151151    def get_fit_tab_caption(self): 
    152152        """ 
    153153        Return the caption of the page associated with object 
    154154        """ 
    155          
     155 
    156156    def set_graph_id(self, id): 
    157157        """ 
    158         Set graph id (from data_group_id at the time the graph produced)  
    159         """ 
    160          
     158        Set graph id (from data_group_id at the time the graph produced) 
     159        """ 
     160 
    161161    def get_graph_id(self): 
    162162        """ 
     
    173173        """ 
    174174 
    175     
     175 
    176176class FitProblemDictionary(FitProblemComponent, dict): 
    177177    """ 
     
    198198        self.batch_inputs = {} 
    199199        self.batch_outputs = {} 
    200   
     200 
    201201    def enable_smearing(self, flag=False, fid=None): 
    202202        """ 
     
    211211            if fid in self.iterkeys(): 
    212212                self[fid].enable_smearing(flag) 
    213          
     213 
    214214    def set_smearer(self, smearer, fid=None): 
    215215        """ 
     
    223223            if fid in self.iterkeys(): 
    224224                self[fid].set_smearer(smearer) 
    225                  
     225 
    226226    def get_smearer(self, fid=None): 
    227227        """ 
     
    230230        if fid in self.iterkeys(): 
    231231            return self[fid].get_smearer() 
    232       
     232 
    233233    def save_model_name(self, name, fid=None): 
    234234        """ 
     
    240240            if fid in self.iterkeys(): 
    241241                self[fid].save_model_name(name) 
    242                  
     242 
    243243    def get_name(self, fid=None): 
    244244        """ 
     
    252252                result.append(self[fid].get_name()) 
    253253        return result 
    254      
     254 
    255255    def set_model(self, model, fid=None): 
    256256        """ 
     
    266266            if fid in self.iterkeys(): 
    267267                self[fid].set_model(self.model) 
    268        
     268 
    269269    def get_model(self, fid): 
    270270        """ 
     
    273273        if fid in self.iterkeys(): 
    274274            return self[fid].get_model() 
    275         
     275 
    276276    def set_fit_tab_caption(self, caption): 
    277277        """ 
     
    279279        """ 
    280280        self.fit_tab_caption = caption 
    281      
     281 
    282282    def get_fit_tab_caption(self): 
    283283        """ 
     
    285285        """ 
    286286        return self.fit_tab_caption 
    287      
     287 
    288288    def set_residuals(self, residuals, fid): 
    289289        """ 
     
    293293        if fid in self.iterkeys(): 
    294294            self[fid].set_residuals(residuals) 
    295              
     295 
    296296    def get_residuals(self, fid): 
    297297        """ 
     
    300300        if fid in self.iterkeys(): 
    301301            return self[fid].get_residuals() 
    302          
     302 
    303303    def set_theory_data(self, fid, data=None): 
    304304        """ 
     
    308308        if fid in self.iterkeys(): 
    309309            self[fid].set_theory_data(data) 
    310              
     310 
    311311    def get_theory_data(self, fid): 
    312312        """ 
     
    315315        if fid in self.iterkeys(): 
    316316            return self[fid].get_theory_data() 
    317              
     317 
    318318    def add_data(self, data): 
    319319        """ 
     
    325325            self[data.id] = FitProblem() 
    326326        self[data.id].set_fit_data(data) 
    327          
     327 
    328328    def set_fit_data(self, data): 
    329329        """ 
    330330        save a copy of the data select to fit 
    331331        :param data: data selected 
    332          
     332 
    333333        """ 
    334334        self.clear() 
     
    342342                self[d.id].set_model(self.model) 
    343343                self[d.id].set_range(self.qmin, self.qmax) 
    344                  
     344 
    345345    def get_fit_data(self, fid): 
    346346        """ 
     
    351351        if fid in self.iterkeys(): 
    352352            return self[fid].get_fit_data() 
    353     
     353 
    354354    def set_model_param(self, name, value=None, fid=None): 
    355355        """ 
     
    364364            if fid in self.iterkeys(): 
    365365                self[fid].set_model_param(name, value) 
    366                  
     366 
    367367    def get_model_param(self, fid): 
    368368        """ 
     
    371371        if fid in self.iterkeys(): 
    372372            return self[fid].get_model_param() 
    373      
     373 
    374374    def set_param2fit(self, list): 
    375375        """ 
     
    378378        """ 
    379379        self.list_param2fit = list 
    380          
     380 
    381381    def get_param2fit(self): 
    382382        """ 
     
    384384        """ 
    385385        return self.list_param2fit 
    386            
     386 
    387387    def schedule_tofit(self, schedule=0): 
    388388        """ 
     
    392392        for value in self.itervalues(): 
    393393            value.schedule_tofit(schedule) 
    394        
     394 
    395395    def get_scheduled(self): 
    396396        """ 
     
    398398        """ 
    399399        return self.scheduled 
    400      
     400 
    401401    def set_range(self, qmin=None, qmax=None, fid=None): 
    402402        """ 
     
    411411            if fid in self.iterkeys(): 
    412412                self[fid].value.set_range(self.qmin, self.qmax) 
    413          
     413 
    414414    def get_range(self, fid): 
    415415        """ 
     
    418418        if fid in self.iterkeys(): 
    419419            return self[fid].get_range() 
    420          
     420 
    421421    def set_weight(self, is2d, flag=None, fid=None): 
    422422        """ 
     
    429429            if fid in self.iterkeys(): 
    430430                self[fid].set_weight(flag=flag, is2d=is2d) 
    431                  
     431 
    432432    def get_weight(self, fid=None): 
    433433        """ 
     
    436436        if fid in self.iterkeys(): 
    437437            return self[fid].get_weight() 
    438                   
     438 
    439439    def clear_model_param(self, fid=None): 
    440440        """ 
     
    447447            if fid in self.iterkeys(): 
    448448                self[fid].clear_model_param() 
    449                  
     449 
    450450    def get_fit_problem(self): 
    451451        """ 
     
    453453        """ 
    454454        return self.itervalues() 
    455      
     455 
    456456    def set_result(self, result, fid): 
    457457        """ 
     
    459459        if fid in self.iterkeys(): 
    460460            self[fid].set_result(result) 
    461              
     461 
    462462    def set_batch_result(self, batch_inputs, batch_outputs): 
    463463        """ 
     
    466466        self.batch_inputs = batch_inputs 
    467467        self.batch_outputs = batch_outputs 
    468               
     468 
    469469    def get_result(self, fid): 
    470470        """ 
     
    473473        if fid in self.iterkeys(): 
    474474            return self[fid].get_result() 
    475              
     475 
    476476    def get_batch_result(self): 
    477477        """ 
     
    479479        """ 
    480480        return self.batch_inputs, self.batch_outputs 
    481      
     481 
    482482    def set_graph_id(self, id): 
    483483        """ 
    484         Set graph id (from data_group_id at the time the graph produced)  
     484        Set graph id (from data_group_id at the time the graph produced) 
    485485        """ 
    486486        self.graph_id = id 
    487          
     487 
    488488    def get_graph_id(self): 
    489489        """ 
     
    491491        """ 
    492492        return self.graph_id 
    493      
    494      
     493 
     494 
    495495class FitProblem(FitProblemComponent): 
    496496    """ 
     
    527527        self.weight = None 
    528528        self.result = None 
    529          
     529 
    530530    def enable_smearing(self, flag=False): 
    531531        """ 
     
    534534        """ 
    535535        self.smearer_enable = flag 
    536          
     536 
    537537    def set_smearer(self, smearer): 
    538538        """ 
    539539        save reference of  smear object on fitdata 
    540          
     540 
    541541        :param smear: smear object from DataLoader 
    542          
     542 
    543543        """ 
    544544        self.smearer_computer_value = smearer 
    545         
     545 
    546546    def get_smearer(self): 
    547547        """ 
     
    556556            self.smearer_computed = True 
    557557        return self.smearer_computer_value 
    558      
     558 
    559559    def save_model_name(self, name): 
    560560        """ 
    561561        """ 
    562562        self.name_per_page = name 
    563          
     563 
    564564    def get_name(self): 
    565565        """ 
    566566        """ 
    567567        return self.name_per_page 
    568      
     568 
    569569    def set_model(self, model): 
    570570        """ 
     
    577577                                                           self.model) 
    578578        self.smearer_computed = True 
    579          
     579 
    580580    def get_model(self): 
    581581        """ 
     
    583583        """ 
    584584        return self.model 
    585     
     585 
    586586    def set_residuals(self, residuals): 
    587587        """ 
     
    590590        """ 
    591591        self.residuals = residuals 
    592              
     592 
    593593    def get_residuals(self): 
    594594        """ 
     
    596596        """ 
    597597        return self.residuals 
    598          
     598 
    599599    def set_theory_data(self, data): 
    600600        """ 
    601601        save a copy of the data select to fit 
    602          
     602 
    603603        :param data: data selected 
    604          
     604 
    605605        """ 
    606606        self.theory_data = copy.deepcopy(data) 
    607          
     607 
    608608    def get_theory_data(self): 
    609609        """ 
     
    627627        self.smearer_computed = True 
    628628        self.result = None 
    629          
     629 
    630630    def get_fit_data(self): 
    631631        """ 
     
    633633        """ 
    634634        return self.fit_data 
    635      
     635 
    636636    def get_origin_data(self): 
    637637        """ 
    638638        """ 
    639639        return self.original_data 
    640      
     640 
    641641    def set_weight(self, is2d, flag=None): 
    642642        """ 
     
    658658        """ 
    659659        return self.weight 
    660      
     660 
    661661    def set_param2fit(self, list): 
    662662        """ 
     
    665665        """ 
    666666        self.list_param2fit = list 
    667          
     667 
    668668    def get_param2fit(self): 
    669669        """ 
     
    671671        """ 
    672672        return self.list_param2fit 
    673      
     673 
    674674    def set_model_param(self, name, value=None): 
    675675        """ 
     
    679679        """ 
    680680        self.list_param.append([name, value]) 
    681          
     681 
    682682    def get_model_param(self): 
    683683        """ 
     
    685685        """ 
    686686        return self.list_param 
    687          
     687 
    688688    def schedule_tofit(self, schedule=0): 
    689689        """ 
     
    691691        """ 
    692692        self.schedule = schedule 
    693          
     693 
    694694    def get_scheduled(self): 
    695695        """ 
     
    697697        """ 
    698698        return self.schedule 
    699      
     699 
    700700    def set_range(self, qmin=None, qmax=None): 
    701701        """ 
     
    706706        self.qmin = qmin 
    707707        self.qmax = qmax 
    708          
     708 
    709709    def get_range(self): 
    710710        """ 
    711711        :return: fitting range 
    712          
     712 
    713713        """ 
    714714        return self.qmin, self.qmax 
    715      
     715 
    716716    def clear_model_param(self): 
    717717        """ 
     
    719719        """ 
    720720        self.list_param = [] 
    721          
     721 
    722722    def set_fit_tab_caption(self, caption): 
    723723        """ 
    724724        """ 
    725725        self.fit_tab_caption = str(caption) 
    726          
     726 
    727727    def get_fit_tab_caption(self): 
    728728        """ 
    729729        """ 
    730730        return self.fit_tab_caption 
    731      
     731 
    732732    def set_graph_id(self, id): 
    733733        """ 
     
    735735        """ 
    736736        self.graph_id = id 
    737          
     737 
    738738    def get_graph_id(self): 
    739739        """ 
     
    741741        """ 
    742742        return self.graph_id 
    743      
     743 
    744744    def set_result(self, result): 
    745745        """ 
    746746        """ 
    747747        self.result = result 
    748          
     748 
    749749    def get_result(self): 
    750750        """ 
  • src/sas/perspectives/fitting/fitting.py

    r39356b5 r2f4b430  
    2525from sas.guiframe.dataFitting import Data1D 
    2626from sas.guiframe.dataFitting import check_data_validity 
    27 from sas.guiframe.events import NewPlotEvent  
    28 from sas.guiframe.events import StatusEvent   
     27from sas.guiframe.events import NewPlotEvent 
     28from sas.guiframe.events import StatusEvent 
    2929from sas.guiframe.events import EVT_SLICER_PANEL 
    3030from sas.guiframe.events import EVT_SLICER_PARS_UPDATE 
    3131from sas.guiframe.gui_style import GUIFRAME_ID 
    32 from sas.guiframe.plugin_base import PluginBase  
     32from sas.guiframe.plugin_base import PluginBase 
    3333from sas.guiframe.data_processor import BatchCell 
    3434from sas.fit.Fitting import Fit 
     
    6363    def __init__(self, standalone=False): 
    6464        PluginBase.__init__(self, name="Fitting", standalone=standalone) 
    65          
     65 
    6666        #list of panel to send to guiframe 
    6767        self.mypanels = [] 
     
    6969        self.calc_2D = None 
    7070        self.calc_1D = None 
    71          
     71 
    7272        self.color_dict = {} 
    73          
     73 
    7474        self.fit_thread_list = {} 
    7575        self.residuals = None 
     
    107107        self.menu1 = None 
    108108        self.new_model_frame = None 
    109          
     109 
    110110        self.temp_state = [] 
    111111        self.state_index = 0 
     
    116116        logging.info("Fitting plug-in started") 
    117117        self.batch_capable = self.get_batch_capable() 
    118      
     118 
    119119    def get_batch_capable(self): 
    120120        """ 
     
    122122        """ 
    123123        return True 
    124      
     124 
    125125    def create_fit_problem(self, page_id): 
    126126        """ 
     
    128128        """ 
    129129        self.page_finder[page_id] = FitProblemDictionary() 
    130          
     130 
    131131    def delete_fit_problem(self, page_id): 
    132132        """ 
     
    135135        if page_id in self.page_finder.iterkeys(): 
    136136            del self.page_finder[page_id] 
    137          
     137 
    138138    def add_color(self, color, id): 
    139139        """ 
     
    141141        """ 
    142142        self.color_dict[id] = color 
    143          
     143 
    144144    def on_batch_selection(self, flag): 
    145145        """ 
     
    149149        if self.fit_panel is not None: 
    150150            self.fit_panel.batch_on = self.batch_on 
    151          
     151 
    152152    def populate_menu(self, owner): 
    153153        """ 
    154154        Create a menu for the Fitting plug-in 
    155          
     155 
    156156        :param id: id to create a menu 
    157157        :param owner: owner of menu 
    158          
     158 
    159159        :return: list of information to populate the main menu 
    160          
     160 
    161161        """ 
    162162        #Menu for fitting 
     
    194194        wx.EVT_MENU(owner, self.id_result_panel, lambda ev: self.result_frame.Show()) 
    195195        self.menu1.AppendSeparator() 
    196          
     196 
    197197        self.id_reset_flag = wx.NewId() 
    198198        resetf_help = "BatchFit: If checked, the initial param values will be " 
     
    207207        chain_menu.Check(not self.batch_reset_flag) 
    208208        chain_menu.Enable(self.batch_on) 
    209          
     209 
    210210        self.menu1.AppendSeparator() 
    211211        self.edit_model_menu = wx.Menu() 
     
    215215        except: 
    216216            raise 
    217          
     217 
    218218        self.id_edit = wx.NewId() 
    219219        editmodel_help = "Edit customized model sample file" 
     
    222222        #create  menubar items 
    223223        return [(self.menu1, self.sub_menu)] 
    224      
     224 
    225225    def edit_custom_model(self, event): 
    226226        """ 
     
    237237        self.put_icon(frame) 
    238238        frame.Show(True) 
    239      
     239 
    240240    def delete_custom_model(self, event): 
    241241        """ 
     
    266266                    if item.GetLabel() == label: 
    267267                        self.edit_menu.DeleteItem(item) 
    268                         msg = "The custom model, %s, has been deleted."% label 
    269                         wx.PostEvent(self.parent, StatusEvent(status=msg,  
     268                        msg = "The custom model, %s, has been deleted." % label 
     269                        wx.PostEvent(self.parent, StatusEvent(status=msg, 
    270270                                                type='stop', info='info')) 
    271271                        break 
    272272        except: 
    273             msg ='Delete Error: \nCould not delete the file; Check if in use.' 
     273            msg = 'Delete Error: \nCould not delete the file; Check if in use.' 
    274274            wx.MessageBox(msg, 'Error') 
    275      
     275 
    276276    def make_sum_model(self, event): 
    277277        """ 
     
    282282        model_list = model_manager.get_model_name_list() 
    283283        plug_dir = models.find_plugins_dir() 
    284         textdial = TextDialog(None, self, -1, 'Easy Sum/Multi(p1, p2) Editor',  
     284        textdial = TextDialog(None, self, -1, 'Easy Sum/Multi(p1, p2) Editor', 
    285285                              model_list, plug_dir) 
    286286        self.put_icon(textdial) 
    287287        textdial.ShowModal() 
    288288        textdial.Destroy() 
    289      
     289 
    290290    def make_new_model(self, event): 
    291291        """ 
     
    332332        except: 
    333333            pass 
    334          
    335          
     334 
     335 
    336336    def set_edit_menu(self, owner): 
    337337        """ 
     
    349349        e_id = wx.NewId() 
    350350        self.edit_menu = wx.Menu() 
    351         self.edit_model_menu.AppendMenu(e_id,  
    352                                     'Advanced', self.edit_menu)  
     351        self.edit_model_menu.AppendMenu(e_id, 
     352                                    'Advanced', self.edit_menu) 
    353353        self.set_edit_menu_helper(owner, self.edit_custom_model) 
    354354 
     
    358358                                        'Delete', self.delete_menu) 
    359359        self.set_edit_menu_helper(owner, self.delete_custom_model) 
    360      
     360 
    361361    def set_edit_menu_helper(self, owner=None, menu=None): 
    362362        """ 
     
    409409            caption = "Combined Batch" 
    410410            page = self.batch_page 
    411              
     411 
    412412        def set_focus_page(page): 
    413413            page.Show(True) 
     
    417417            msg = "%s already opened\n" % str(page.window_caption) 
    418418            wx.PostEvent(self.parent, StatusEvent(status=msg)) 
    419              
     419 
    420420        if page != None: 
    421421            return set_focus_page(page) 
     
    424424        else: 
    425425            self.batch_page = self.fit_panel.add_sim_page(caption=caption) 
    426          
     426 
    427427    def help(self, evt): 
    428428        """ 
     
    439439                    pass 
    440440        frame.Show(True) 
    441          
     441 
    442442    def get_context_menu(self, plotpanel=None): 
    443443        """ 
    444444        Get the context menu items available for P(r).them allow fitting option 
    445445        for Data2D and Data1D only. 
    446          
     446 
    447447        :param graph: the Graph object to which we attach the context menu 
    448          
     448 
    449449        :return: a list of menu items with call-back function 
    450          
     450 
    451451        :note: if Data1D was generated from Theory1D 
    452452                the fitting option is not allowed 
    453                  
     453 
    454454        """ 
    455455        self.plot_panel = plotpanel 
    456456        graph = plotpanel.graph 
    457457        fit_option = "Select data for fitting" 
    458         fit_hint =  "Dialog with fitting parameters " 
    459          
     458        fit_hint = "Dialog with fitting parameters " 
     459 
    460460        if graph.selected_plottable not in plotpanel.plots: 
    461461            return [] 
     
    466466                    return [[fit_option, fit_hint, self._onSelect]] 
    467467                else: 
    468                     return []  
     468                    return [] 
    469469            return [[fit_option, fit_hint, self._onSelect]] 
    470470        else: 
    471              
     471 
    472472            # if is_data is true , this in an actual data loaded 
    473473            #else it is a data created from a theory model 
     
    501501        self.result_panel = ResultPanel(parent=self.result_frame, manager=self) 
    502502        self.perspective.append(self.result_panel.window_name) 
    503         
     503 
    504504        #index number to create random model name 
    505505        self.index_model = 0 
     
    517517        self.mypanels.append(self.result_panel) 
    518518        return self.mypanels 
    519      
     519 
    520520    def clear_panel(self): 
    521521        """ 
    522522        """ 
    523523        self.fit_panel.clear_panel() 
    524          
     524 
    525525    def delete_data(self, data): 
    526526        """ 
     
    528528        """ 
    529529        self.fit_panel.delete_data(data) 
    530          
     530 
    531531    def set_data(self, data_list=None): 
    532532        """ 
     
    545545                    selected_data_list = dlg.get_data() 
    546546                dlg.Destroy() 
    547                  
     547 
    548548            else: 
    549549                selected_data_list = data_list 
     
    562562                msg = "Fitting Set_data: " + str(sys.exc_value) 
    563563                wx.PostEvent(self.parent, StatusEvent(status=msg, info="error")) 
    564      
     564 
    565565    def set_theory(self, theory_list=None): 
    566566        """ 
     
    576576                wx.PostEvent(self.parent, 
    577577                             StatusEvent(status=msg, info="error")) 
    578              
     578 
    579579    def set_state(self, state=None, datainfo=None, format=None): 
    580580        """ 
    581581        Call-back method for the fit page state reader. 
    582582        This method is called when a .fitv/.svs file is loaded. 
    583          
     583 
    584584        : param state: PageState object 
    585585        : param datainfo: data 
     
    596596        # state file format 
    597597        self.sfile_ext = format 
    598          
     598 
    599599        self.on_set_state_helper(event=None) 
    600600 
     
    603603        Set_state_helper. This actually sets state 
    604604        after plotting data from state file. 
    605          
     605 
    606606        : event: FitStateUpdateEvent called 
    607607            by dataloader.plot_data from guiframe 
     
    613613                self.state_index = 0 
    614614            return 
    615          
     615 
    616616        try: 
    617617            # Load fitting state 
     
    641641                        caption=caption) 
    642642                self.mypanels.append(page) 
    643                  
     643 
    644644            # get ready for the next set_state 
    645645            self.state_index += 1 
     
    647647            #reset state variables to default when all set_state is finished. 
    648648            if len(self.temp_state) == self.state_index: 
    649                  
     649 
    650650                self.temp_state = [] 
    651651                #self.state_index = 0 
     
    657657            self.temp_state = [] 
    658658            raise 
    659          
     659 
    660660    def set_param2fit(self, uid, param2fit): 
    661661        """ 
     
    663663        """ 
    664664        self.page_finder[uid].set_param2fit(param2fit) 
    665          
     665 
    666666    def set_graph_id(self, uid, graph_id): 
    667667        """ 
     
    669669        """ 
    670670        self.page_finder[uid].set_graph_id(graph_id) 
    671          
     671 
    672672    def get_graph_id(self, uid): 
    673673        """ 
     
    675675        """ 
    676676        return self.page_finder[uid].get_graph_id() 
    677                            
     677 
    678678    def save_fit_state(self, filepath, fitstate): 
    679679        """ 
     
    693693        if uid in self.page_finder.keys(): 
    694694            self.page_finder[uid].set_weight(flag=flag, is2d=is2d) 
    695                      
     695 
    696696    def set_fit_range(self, uid, qmin, qmax, fid=None): 
    697697        """ 
     
    706706        if uid in self.page_finder.keys(): 
    707707            self.page_finder[uid].set_range(qmin=qmin, qmax=qmax, fid=fid) 
    708        
     708 
    709709    def schedule_for_fit(self, value=0, uid=None): 
    710710        """ 
     
    717717        if uid in self.page_finder.keys(): 
    718718            self.page_finder[uid].schedule_tofit(value) 
    719            
     719 
    720720    def get_page_finder(self): 
    721721        """ 
     
    723723        """ 
    724724        return self.page_finder 
    725      
     725 
    726726    def set_page_finder(self, modelname, names, values): 
    727727        """ 
    728728        Used by simfitpage.py to reset a parameter given the string constrainst. 
    729           
     729 
    730730        :param modelname: the name ot the model for with the parameter 
    731731                            has to reset 
     
    741741                    value.set_model_param(names, values) 
    742742                    break 
    743           
     743 
    744744    def split_string(self, item): 
    745745        """ 
    746746        receive a word containing dot and split it. used to split parameterset 
    747747        name into model name and parameter name example: :: 
    748          
     748 
    749749            paramaterset (item) = M1.A 
    750750            Will return model_name = M1 , parameter name = A 
    751              
     751 
    752752        """ 
    753753        if item.find(".") >= 0: 
     
    760760                param_name = param_names[1] 
    761761            return model_name, param_name 
    762     
     762 
    763763    def on_bumps_options(self, event=None): 
    764764        from bumps.gui.fit_dialog import OpenFitOptions 
     
    786786                        panel = self.fit_panel.opened_pages[uid] 
    787787                        panel._on_fit_complete() 
    788    
     788 
    789789    def set_smearer(self, uid, smearer, fid, qmin=None, qmax=None, draw=True, 
    790790                    enable_smearer=False): 
     
    792792        Get a smear object and store it to a fit problem of fid as id. If proper 
    793793        flag is enable , will plot the theory with smearing information. 
    794          
     794 
    795795        :param smearer: smear object to allow smearing data of id fid 
    796796        :param enable_smearer: Define whether or not all (data, model) contained 
     
    828828                qmin=qmin, qmax=qmax, weight=weight) 
    829829            self._mac_sleep(0.2) 
    830              
     830 
    831831    def _mac_sleep(self, sec=0.2): 
    832832        """ 
     
    835835        if ON_MAC: 
    836836            time.sleep(sec) 
    837          
     837 
    838838    def draw_model(self, model, page_id, data=None, smearer=None, 
    839839                   enable1D=True, enable2D=False, 
     
    845845        """ 
    846846        Draw model. 
    847          
     847 
    848848        :param model: the model to draw 
    849849        :param name: the name of the model to draw 
     
    856856        :param qstep: number of step to divide the x and y-axis 
    857857        :param update_chisqr: update chisqr [bool] 
    858               
     858 
    859859        """ 
    860860        #self.weight = weight 
     
    889889                                update_chisqr=update_chisqr, 
    890890                                source=source) 
    891              
     891 
    892892    def onFit(self, uid): 
    893893        """ 
     
    934934                                     is2d=page._is_2D()) 
    935935                    if not page.param_toFit: 
    936                         msg = "No fitting parameters for %s"%page.window_caption 
     936                        msg = "No fitting parameters for %s" % page.window_caption 
    937937                        wx.PostEvent(page.parent.parent, 
    938938                                     StatusEvent(status=msg, info="error", 
     
    979979        msg = "Fitting is in progress..." 
    980980        wx.PostEvent(self.parent, StatusEvent(status=msg, type="progress")) 
    981          
     981 
    982982        #Handler used for fit engine displayed message 
    983983        handler = ConsoleUpdate(parent=self.parent, 
     
    10191019        msg = "Fitting is in progress..." 
    10201020        wx.PostEvent(self.parent, StatusEvent(status=msg, type="progress")) 
    1021          
     1021 
    10221022        return True 
    10231023 
     
    10431043                                                   group_id=group_id, 
    10441044                                                   action='remove')) 
    1045             
     1045 
    10461046    def store_data(self, uid, data_list=None, caption=None): 
    10471047        """ 
     
    10541054        if data_list is None: 
    10551055            data_list = [] 
    1056          
     1056 
    10571057        self.page_finder[uid].set_fit_data(data=data_list) 
    10581058        if caption is not None: 
    10591059            self.page_finder[uid].set_fit_tab_caption(caption=caption) 
    1060              
     1060 
    10611061    def on_add_new_page(self, event=None): 
    10621062        """ 
     
    10741074                                                       info="warning")) 
    10751075        except: 
    1076             msg = "Creating Fit page: %s"%sys.exc_value 
     1076            msg = "Creating Fit page: %s" % sys.exc_value 
    10771077            wx.PostEvent(self.parent, StatusEvent(status=msg, info="error")) 
    1078          
     1078 
    10791079    def add_fit_page(self, data): 
    10801080        """ 
     
    11051105                    group_id = str(page.uid) + " Model2D" 
    11061106                    data.group_id = theory_data.group_id 
    1107                     wx.PostEvent(self.parent,  
     1107                    wx.PostEvent(self.parent, 
    11081108                             NewPlotEvent(group_id=group_id, 
    11091109                                               action="delete")) 
     
    11161116        if self.batch_page is not None and self.batch_on: 
    11171117            self.batch_page.draw_page() 
    1118              
     1118 
    11191119        return page 
    1120              
     1120 
    11211121    def _onEVT_SLICER_PANEL(self, event): 
    11221122        """ 
     
    11241124        event.panel_name. this method update slicer panel 
    11251125        for a given interactor. 
    1126          
     1126 
    11271127        :param event: contains type of slicer , paramaters for updating 
    11281128            the panel and panel_name to find the slicer 's panel concerned. 
     
    11331133            if self.parent.panels[item].window_caption.startswith(name): 
    11341134                self.parent.panels[item].set_slicer(event.type, event.params) 
    1135                  
     1135 
    11361136        #self.parent._mgr.Update() 
    1137     
     1137 
    11381138    def _closed_fitpage(self, event): 
    11391139        """ 
     
    11471147                event.data.__class__.__name__ == "Data1D": 
    11481148                self.fit_panel.close_page_with_data(event.data) 
    1149    
     1149 
    11501150    def _reset_schedule_problem(self, value=0, uid=None): 
    11511151        """ 
     
    11601160            if uid in self.page_finder.keys(): 
    11611161                self.page_finder[uid].schedule_tofit(value) 
    1162                  
     1162 
    11631163    def _add_problem_to_fit(self, fitproblem, pars, fitter, fit_id): 
    11641164        """ 
     
    11871187                        qmax=qmax) 
    11881188        fitter.select_problem_for_fit(id=fit_id, value=1) 
    1189         
     1189 
    11901190    def _onSelect(self, event): 
    11911191        """ 
     
    11981198        Plugin.on_perspective(self, event=event) 
    11991199        self.select_data(panel) 
    1200          
     1200 
    12011201    def select_data(self, panel): 
    12021202        """ 
     
    12121212                data = plottable 
    12131213                self.add_fit_page(data=[data]) 
    1214              
     1214 
    12151215    def update_fit(self, result=None, msg=""): 
    12161216        """ 
    12171217        """ 
    12181218        print "update_fit result", result 
    1219          
     1219 
    12201220    def _batch_fit_complete(self, result, pars, page_id, 
    12211221                            batch_outputs, batch_inputs, elapsed=None): 
     
    12311231        if uid in self.fit_thread_list.keys(): 
    12321232            del self.fit_thread_list[uid] 
    1233            
     1233 
    12341234        self._update_fit_button(page_id) 
    12351235        t1 = time.time() 
     
    12391239        wx.PostEvent(self.parent, StatusEvent(status=msg, info="info", 
    12401240                                              type="stop")) 
    1241         
     1241 
    12421242        if batch_outputs is None: 
    12431243            batch_outputs = {} 
    1244          
     1244 
    12451245        # format batch_outputs 
    12461246        batch_outputs["Chi2"] = [] 
     
    12781278                if data is not None and hasattr(data, "sas_data"): 
    12791279                    data = data.sas_data 
    1280                  
     1280 
    12811281                is_data2d = issubclass(data.__class__, Data2D) 
    12821282                #check consistency of arrays 
     
    13271327                    if res.pvec.__class__ == numpy.float64: 
    13281328                        res.pvec = [res.pvec] 
    1329                          
     1329 
    13301330                    cell = BatchCell() 
    13311331                    cell.label = res.fitness 
     
    13541354                    if key not in param_list and key not in ["Chi2", "Data"]: 
    13551355                        batch_outputs[key].append(EMPTY) 
    1356                                  
     1356 
    13571357                self.page_finder[pid].set_batch_result(batch_inputs=batch_inputs, 
    13581358                                                       batch_outputs=batch_outputs) 
    1359                 
     1359 
    13601360                cpage = self.fit_panel.get_page_by_id(pid) 
    13611361                cpage._on_fit_complete() 
     
    13871387                                         batch_outputs=batch_outputs, 
    13881388                                         batch_inputs=batch_inputs) 
    1389          
     1389 
    13901390        wx.PostEvent(self.parent, StatusEvent(status=msg, error="info", 
    13911391                                              type="stop")) 
     
    13971397            if key in ["Chi2", "Data"] or shownkeystr.count(key) > 0: 
    13981398                tbatch_outputs[key] = batch_outputs[key] 
    1399                  
     1399 
    14001400        wx.CallAfter(self.parent.on_set_batch_result, tbatch_outputs, 
    14011401                     batch_inputs, self.sub_menu) 
    1402          
     1402 
    14031403    def on_set_batch_result(self, page_id, fid, batch_outputs, batch_inputs): 
    14041404        """ 
     
    14201420        cell.label = data.name 
    14211421        cell.value = index 
    1422          
     1422 
    14231423        if theory_data != None: 
    14241424            #Suucessful fit 
     
    14301430                if group_id not in theory_data.list_group_id: 
    14311431                    theory_data.list_group_id.append(group_id) 
    1432                  
     1432 
    14331433            try: 
    14341434                # associate residuals plot 
     
    14541454                batch_inputs[param] = [] 
    14551455            batch_inputs[param].append(data.sample.temperature) 
    1456          
     1456 
    14571457    def _fit_completed(self, result, page_id, batch_outputs, 
    14581458                       batch_inputs=None, pars=None, elapsed=None): 
     
    15221522                                                              info="error", 
    15231523                                                              type="stop")) 
    1524                      
     1524 
    15251525        except: 
    15261526            msg = "Fit completed but Following" 
     
    15281528            wx.PostEvent(self.parent, StatusEvent(status=msg, info="warning", 
    15291529                                                  type="stop")) 
    1530             
     1530 
    15311531    def _update_fit_button(self, page_id): 
    15321532        """ 
    15331533        Update Fit button when fit stopped 
    1534          
     1534 
    15351535        : parameter page_id: fitpage where the button is 
    15361536        """ 
     
    15401540            page = self.fit_panel.get_page_by_id(uid) 
    15411541            page._on_fit_complete() 
    1542          
     1542 
    15431543    def _on_show_panel(self, event): 
    15441544        """ 
    15451545        """ 
    15461546        pass 
    1547      
     1547 
    15481548    def on_reset_batch_flag(self, event): 
    15491549        """ 
     
    15611561            menu_item.Check(True) 
    15621562            self.batch_reset_flag = False 
    1563          
     1563 
    15641564        ## post a message to status bar 
    15651565        msg = "Set Chain Fitting: %s" % str(not self.batch_reset_flag) 
     
    15711571        """ 
    15721572        Receive a panel as event and send it to guiframe 
    1573          
     1573 
    15741574        :param event: event containing a panel 
    1575          
     1575 
    15761576        """ 
    15771577        if event.panel is not None: 
     
    15821582            event.panel.uid = event_id 
    15831583            self.mypanels.append(event.panel) 
    1584         
     1584 
    15851585    def _onclearslicer(self, event): 
    15861586        """ 
     
    15901590        for panel in self.slicer_panels: 
    15911591            if panel.window_caption == name: 
    1592                  
     1592 
    15931593                for item in self.parent.panels: 
    15941594                    if hasattr(self.parent.panels[item], "uid"): 
     
    15981598                            break 
    15991599                break 
    1600      
     1600 
    16011601    def _on_model_panel(self, evt): 
    16021602        """ 
    1603         react to model selection on any combo box or model menu.plot the model   
    1604          
     1603        react to model selection on any combo box or model menu.plot the model 
     1604 
    16051605        :param evt: wx.combobox event 
    1606          
     1606 
    16071607        """ 
    16081608        model = evt.model 
     
    16251625        if self.batch_page is not None and self.batch_on: 
    16261626            self.batch_page.draw_page() 
    1627          
     1627 
    16281628    def _update1D(self, x, output): 
    16291629        """ 
     
    16321632        msg = "Plot updating ... " 
    16331633        wx.PostEvent(self.parent, StatusEvent(status=msg, type="update")) 
    1634          
     1634 
    16351635    def _complete1D(self, x, y, page_id, elapsed, index, model, 
    16361636                    weight=None, fid=None, 
     
    16431643        try: 
    16441644            numpy.nan_to_num(y) 
    1645              
     1645 
    16461646            new_plot = Data1D(x=x, y=y) 
    16471647            new_plot.is_data = False 
     
    16611661            #the same id 
    16621662            theory_data = self.page_finder[page_id].get_theory_data(fid=data.id) 
    1663              
     1663 
    16641664            if data.is_data: 
    16651665                data_name = str(data.name) 
    16661666            else: 
    16671667                data_name = str(model.__class__.__name__) 
    1668              
    1669             new_plot.name = model.name + " [" + data_name +"]" 
     1668 
     1669            new_plot.name = model.name + " [" + data_name + "]" 
    16701670            new_plot.xaxis(_xaxis, _xunit) 
    16711671            new_plot.yaxis(_yaxis, _yunit) 
     
    16871687            caption = current_pg.window_caption 
    16881688            self.page_finder[page_id].set_fit_tab_caption(caption=caption) 
    1689             
     1689 
    16901690            self.page_finder[page_id].set_theory_data(data=new_plot, 
    16911691                                                      fid=data.id) 
     
    17111711        except: 
    17121712            raise 
    1713     
     1713 
    17141714    def _update2D(self, output, time=None): 
    17151715        """ 
     
    17191719        #updating ... ", type="update")) 
    17201720        #self.ready_fit() 
    1721    
     1721 
    17221722    def _complete2D(self, image, data, model, page_id, elapsed, index, qmin, 
    17231723                qmax, fid=None, weight=None, toggle_mode_on=False, state=None, 
     
    17461746        new_plot.xmax = data.xmax 
    17471747        title = data.title 
    1748          
     1748 
    17491749        new_plot.is_data = False 
    17501750        if data.is_data: 
     
    17541754 
    17551755        if len(title) > 1: 
    1756             new_plot.title = "Model2D for %s "% model.name + data_name 
     1756            new_plot.title = "Model2D for %s " % model.name + data_name 
    17571757        new_plot.name = model.name + " [" + \ 
    17581758                                    data_name + "]" 
    17591759        theory_data = deepcopy(new_plot) 
    1760          
     1760 
    17611761        self.page_finder[page_id].set_theory_data(data=theory_data, 
    17621762                                                  fid=data.id) 
     
    17871787        msg = "Computation  completed!" 
    17881788        wx.PostEvent(self.parent, StatusEvent(status=msg, type="stop")) 
    1789      
     1789 
    17901790    def _draw_model2D(self, model, page_id, qmin, 
    17911791                      qmax, 
     
    17991799        """ 
    18001800        draw model in 2D 
    1801          
     1801 
    18021802        :param model: instance of the model to draw 
    18031803        :param description: the description of the model 
     
    18061806        :param qmax: the maximum value to draw model 2D 
    18071807        :param qstep: the number of division of Qx and Qy of the model to draw 
    1808              
     1808 
    18091809        """ 
    18101810        if not enable2D: 
     
    18291829                                    qmin=qmin, 
    18301830                                    qmax=qmax, 
    1831                                     weight=weight,  
     1831                                    weight=weight, 
    18321832                                    fid=fid, 
    18331833                                    toggle_mode_on=toggle_mode_on, 
     
    18481848        """ 
    18491849        Draw model 1D from loaded data1D 
    1850          
     1850 
    18511851        :param data: loaded data 
    18521852        :param model: the model to plot 
    1853          
     1853 
    18541854        """ 
    18551855        if not enable1D: 
     
    18781878            self.calc_1D = Calc1D(data=data, 
    18791879                                  model=model, 
    1880                                   page_id=page_id,  
     1880                                  page_id=page_id, 
    18811881                                  qmin=qmin, 
    18821882                                  qmax=qmax, 
     
    18951895            msg += " %s" % sys.exc_value 
    18961896            wx.PostEvent(self.parent, StatusEvent(status=msg)) 
    1897      
     1897 
    18981898    def _cal_chisqr(self, page_id, data, weight, fid=None, index=None): 
    18991899        """ 
    1900         Get handy Chisqr using the output from draw1D and 2D,  
     1900        Get handy Chisqr using the output from draw1D and 2D, 
    19011901        instead of calling expansive CalcChisqr in guithread 
    19021902        """ 
     
    19291929        else: 
    19301930            # 1 d theory from model_thread is only in the range of index 
    1931             if index == None:  
     1931            if index == None: 
    19321932                index = numpy.ones(len(data_copy.y), dtype=bool) 
    19331933            if weight != None: 
     
    19411941                dy[dy == 0] = 1 
    19421942            fn = data_copy.y[index] 
    1943              
     1943 
    19441944            theory_data = self.page_finder[page_id].get_theory_data(fid=data_copy.id) 
    19451945            if theory_data == None: 
     
    19471947            gn = theory_data.y 
    19481948            en = dy[index] 
    1949          
     1949 
    19501950        # residual 
    19511951        try: 
    19521952            res = (fn - gn) / en 
    19531953        except ValueError: 
    1954             print "Unmatch lengths %s, %s, %s"% (len(fn), len(gn), len(en)) 
     1954            print "Unmatch lengths %s, %s, %s" % (len(fn), len(gn), len(en)) 
    19551955            return 
    1956          
     1956 
    19571957        residuals = res[numpy.isfinite(res)] 
    19581958        # get chisqr only w/finite 
    19591959        chisqr = numpy.average(residuals * residuals) 
    1960          
     1960 
    19611961        self._plot_residuals(page_id=page_id, data=data_copy, 
    19621962                             fid=fid, 
    19631963                             weight=weight, index=index) 
    1964          
     1964 
    19651965        return chisqr 
    1966      
     1966 
    19671967    def _plot_residuals(self, page_id, weight, fid=None, 
    19681968                        data=None, index=None): 
    19691969        """ 
    19701970        Plot the residuals 
    1971          
     1971 
    19721972        :param data: data 
    19731973        :param index: index array (bool) 
     
    20402040        theory_name = str(theory_data.name.split()[0]) 
    20412041        new_plot = residuals 
    2042         new_plot.name = "Residuals for " + str(theory_name) + "[" +\ 
    2043                         str(data.name) +"]" 
     2042        new_plot.name = "Residuals for " + str(theory_name) + "[" + \ 
     2043                        str(data.name) + "]" 
    20442044        ## allow to highlight data when plotted 
    20452045        new_plot.interactive = True 
  • src/sas/perspectives/fitting/fitting_widgets.py

    r79492222 r2f4b430  
    2121        ScrolledPanel.__init__(self, *args, **kwds) 
    2222        self.SetupScrolling() 
    23          
    24          
     23 
     24 
    2525class BatchDataDialog(wx.Dialog): 
    2626    """ 
     
    3535        self.data_2d_selected = None 
    3636        self._do_layout() 
    37     
     37 
    3838    def _do_layout(self): 
    3939        """ 
     
    4343        box_description = wx.StaticBox(self, -1, str("Hint")) 
    4444        hint_sizer = wx.StaticBoxSizer(box_description, wx.VERTICAL) 
    45         selection_sizer = wx.GridBagSizer(5,5) 
     45        selection_sizer = wx.GridBagSizer(5, 5) 
    4646        button_sizer = wx.BoxSizer(wx.HORIZONTAL) 
    4747        self.data_1d_selected = wx.RadioButton(self, -1, 'Data1D', 
     
    6060        iy = 0 
    6161        selection_sizer.Add(self.data_1d_selected, (iy, ix), 
    62                            (1, 1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
     62                           (1, 1), wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 15) 
    6363        iy += 1 
    6464        selection_sizer.Add(self.data_2d_selected, (iy, ix), 
    65                            (1, 1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
     65                           (1, 1), wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 15) 
    6666        #contruction the sizer contaning button 
    67         button_sizer.Add((20, 20), 1, wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     67        button_sizer.Add((20, 20), 1, wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
    6868        button_sizer.Add(button_cancel, 0, 
    69                          wx.LEFT|wx.RIGHT|wx.ADJUST_MINSIZE, 10) 
     69                         wx.LEFT | wx.RIGHT | wx.ADJUST_MINSIZE, 10) 
    7070        button_sizer.Add(button_OK, 0, 
    71                                 wx.LEFT|wx.RIGHT|wx.ADJUST_MINSIZE, 10) 
    72         vbox.Add(hint_sizer, 0, wx.EXPAND|wx.ALL, 10) 
    73         vbox.Add(selection_sizer, 0, wx.TOP|wx.BOTTOM, 10) 
    74         vbox.Add(wx.StaticLine(self, -1),  0, wx.EXPAND, 0) 
    75         vbox.Add(button_sizer, 0, wx.TOP|wx.BOTTOM, 10) 
     71                                wx.LEFT | wx.RIGHT | wx.ADJUST_MINSIZE, 10) 
     72        vbox.Add(hint_sizer, 0, wx.EXPAND | wx.ALL, 10) 
     73        vbox.Add(selection_sizer, 0, wx.TOP | wx.BOTTOM, 10) 
     74        vbox.Add(wx.StaticLine(self, -1), 0, wx.EXPAND, 0) 
     75        vbox.Add(button_sizer, 0, wx.TOP | wx.BOTTOM, 10) 
    7676        self.SetSizer(vbox) 
    7777        self.Layout() 
    78          
     78 
    7979    def get_data(self): 
    8080        """ 
     
    9797        self._max_data = nb_data 
    9898        self._nb_selected_data = nb_data 
    99          
     99 
    100100        self.SetSize((WIDTH, HEIGHT)) 
    101101        self.list_of_ctrl = [] 
     
    104104        select_data_text = " %s Data selected.\n" % str(self._nb_selected_data) 
    105105        self._data_text_ctrl = wx.StaticText(self, -1, str(select_data_text)) 
    106                                 
     106 
    107107        self._data_text_ctrl.SetForegroundColour('blue') 
    108108        self._sizer_main = wx.BoxSizer(wx.VERTICAL) 
     
    111111        self._choice_sizer = wx.GridBagSizer(5, 5) 
    112112        self._panel = DialogPanel(self, style=wx.RAISED_BORDER, 
    113                                size=(WIDTH-20, HEIGHT/3)) 
     113                               size=(WIDTH - 20, HEIGHT / 3)) 
    114114        self.__do_layout(data_list, text=text) 
    115          
     115 
    116116    def __do_layout(self, data_list, text=''): 
    117117        """ 
     
    141141            self.list_of_ctrl.append((cb, data_list[i])) 
    142142            self._choice_sizer.Add(cb, (iy, ix), 
    143                            (1, 1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
     143                           (1, 1), wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 15) 
    144144            iy += 1 
    145145        self._panel.SetSizer(self._choice_sizer) 
    146146        #add sizer 
    147         self._sizer_button.Add((20, 20), 1, wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     147        self._sizer_button.Add((20, 20), 1, wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
    148148        button_cancel = wx.Button(self, wx.ID_CANCEL, "Cancel") 
    149149        self._sizer_button.Add(button_cancel, 0, 
    150                           wx.LEFT|wx.RIGHT|wx.ADJUST_MINSIZE, 10) 
     150                          wx.LEFT | wx.RIGHT | wx.ADJUST_MINSIZE, 10) 
    151151        button_OK = wx.Button(self, wx.ID_OK, "Ok") 
    152152        button_OK.SetFocus() 
    153153        self._sizer_button.Add(button_OK, 0, 
    154                                 wx.LEFT|wx.RIGHT|wx.ADJUST_MINSIZE, 10) 
     154                                wx.LEFT | wx.RIGHT | wx.ADJUST_MINSIZE, 10) 
    155155        static_line = wx.StaticLine(self, -1) 
    156         self._sizer_txt.Add(self._panel, 0, wx.EXPAND|wx.ALL, 10) 
    157         self._sizer_main.Add(self._sizer_txt, 0, wx.EXPAND|wx.ALL, 10) 
    158         self._sizer_main.Add(self._data_text_ctrl, 0,  wx.EXPAND|wx.ALL, 10) 
     156        self._sizer_txt.Add(self._panel, 0, wx.EXPAND | wx.ALL, 10) 
     157        self._sizer_main.Add(self._sizer_txt, 0, wx.EXPAND | wx.ALL, 10) 
     158        self._sizer_main.Add(self._data_text_ctrl, 0, wx.EXPAND | wx.ALL, 10) 
    159159        self._sizer_main.Add(static_line, 0, wx.EXPAND, 0) 
    160         self._sizer_main.Add(self._sizer_button, 0, wx.EXPAND|wx.ALL, 10) 
     160        self._sizer_main.Add(self._sizer_button, 0, wx.EXPAND | wx.ALL, 10) 
    161161        self.SetSizer(self._sizer_main) 
    162162        self.Layout() 
    163          
     163 
    164164    def get_data(self): 
    165165        """ 
     
    172172                temp.append(data) 
    173173        return temp 
    174      
     174 
    175175    def _count_selected_data(self, event): 
    176176        """ 
  • src/sas/perspectives/fitting/hint_fitpage.py

    r79492222 r2f4b430  
    1313    ## Title to appear on top of the window 
    1414    window_caption = "Hint page " 
    15      
     15 
    1616    def __init__(self, parent): 
    1717        wx.ScrolledWindow.__init__(self, parent, 
    18                  style = wx.FULL_REPAINT_ON_RESIZE) 
     18                 style=wx.FULL_REPAINT_ON_RESIZE) 
    1919        PanelBase.__init__(self, parent) 
    2020        msg = "right click on the data when it is highlighted " 
    2121        msg += "the select option to fit for futher options" 
    2222        self.do_layout() 
    23          
     23 
    2424    def do_layout(self): 
    2525        """ 
     
    2727        """ 
    2828        name = "Hint" 
    29         box_description= wx.StaticBox(self, -1, name) 
     29        box_description = wx.StaticBox(self, -1, name) 
    3030        boxsizer = wx.StaticBoxSizer(box_description, wx.VERTICAL) 
    3131        msg = "    How to link data to the control panel: \n \n" 
     
    3434        msg += "    Finally, select 'Select data for fitting' in the pop-up menu. \n" 
    3535        self.hint_txt = wx.StaticText(self, -1, msg, style=wx.ALIGN_LEFT) 
    36         boxsizer.Add(self.hint_txt, wx.ALL|wx.EXPAND, 20) 
     36        boxsizer.Add(self.hint_txt, wx.ALL | wx.EXPAND, 20) 
    3737        self.vbox = wx.BoxSizer(wx.VERTICAL) 
    3838        self.vbox.Add(boxsizer) 
     
    4242        self.SetScrollbars(20, 20, 25, 65) 
    4343        self.Layout() 
    44          
     44 
    4545    def createMemento(self): 
    4646        return 
    47          
    48          
     47 
     48 
    4949class HelpWindow(wx.Frame): 
    5050    def __init__(self, parent, id, title): 
    5151        wx.Frame.__init__(self, parent, id, title, size=(570, 400)) 
    52         
     52 
    5353        self.page = HintFitPage(self) 
    5454        self.Centre() 
  • src/sas/perspectives/fitting/model_thread.py

    r79492222 r2f4b430  
    4343        self.update_chisqr = update_chisqr 
    4444        self.source = source 
    45          
     45 
    4646    def compute(self): 
    4747        """ 
     
    5959                                   math.fabs(self.data.ymin)), 2) 
    6060                self.qmax = math.sqrt(newx + newy) 
    61          
     61 
    6262        if self.data is None: 
    6363            msg = "Compute Calc2D receive data = %s.\n" % str(self.data) 
    6464            raise ValueError, msg 
    65              
     65 
    6666        # Define matrix where data will be plotted 
    6767        radius = numpy.sqrt((self.data.qx_data * self.data.qx_data) + \ 
     
    7373        index_model = index_model & self.data.mask 
    7474        index_model = index_model & numpy.isfinite(self.data.data) 
    75        
     75 
    7676        if self.smearer is not None: 
    7777            # Set smearer w/ data, model and index. 
     
    112112                       update_chisqr=self.update_chisqr, 
    113113                       source=self.source) 
    114          
     114 
    115115 
    116116class Calc1D(CalcThread): 
     
    156156        self.out = None 
    157157        self.index = None 
    158          
     158 
    159159    def compute(self): 
    160160        """ 
     
    164164        output = numpy.zeros((len(self.data.x))) 
    165165        index = (self.qmin <= self.data.x) & (self.data.x <= self.qmax) 
    166       
     166 
    167167        ##smearer the ouput of the plot 
    168168        if self.smearer is not None: 
     
    174174        else: 
    175175            output[index] = self.model.evalDistribution(self.data.x[index]) 
    176           
     176 
    177177        elapsed = time.time() - self.starttime 
    178         
     178 
    179179        self.complete(x=self.data.x[index], y=output[index], 
    180180                      page_id=self.page_id, 
     
    187187                      update_chisqr=self.update_chisqr, 
    188188                      source=self.source) 
    189          
     189 
    190190    def results(self): 
    191191        """ 
     
    196196""" 
    197197Example: :: 
    198                       
     198 
    199199    class CalcCommandline: 
    200200        def __init__(self, n=20000): 
    201201            #print thread.get_ident() 
    202202            from sas.models.CylinderModel import CylinderModel 
    203              
     203 
    204204            model = CylinderModel() 
    205              
    206               
     205 
     206 
    207207            print model.runXY([0.01, 0.02]) 
    208              
     208 
    209209            qmax = 0.01 
    210210            qstep = 0.0001 
    211211            self.done = False 
    212              
     212 
    213213            x = numpy.arange(-qmax, qmax+qstep*0.01, qstep) 
    214214            y = numpy.arange(-qmax, qmax+qstep*0.01, qstep) 
    215          
    216          
     215 
     216 
    217217            calc_thread_2D = Calc2D(x, y, None, model.clone(),None, 
    218218                                    -qmax, qmax,qstep, 
     
    220220                                            updatefn=self.update , 
    221221                                            yieldtime=0.0) 
    222           
     222 
    223223            calc_thread_2D.queue() 
    224224            calc_thread_2D.ready(2.5) 
    225              
     225 
    226226            while not self.done: 
    227227                time.sleep(1) 
    228      
     228 
    229229        def update(self,output): 
    230230            print "update" 
    231      
     231 
    232232        def complete(self, image, data, model, elapsed, qmin, qmax,index, qstep ): 
    233233            print "complete" 
    234234            self.done = True 
    235      
     235 
    236236    if __name__ == "__main__": 
    237237        CalcCommandline() 
  • src/sas/perspectives/fitting/models.py

    r6f82ba1 r2f4b430  
    2020from sas.models.BaseComponent import BaseComponent 
    2121from sas.guiframe.CategoryInstaller import CategoryInstaller 
    22     
     22 
    2323PLUGIN_DIR = 'plugin_models' 
    2424 
     
    4040    """ 
    4141    Do some checking before model adding plugins in the list 
    42      
     42 
    4343    :param model: class model to add into the plugin list 
    4444    :param name:name of the module plugin 
    45      
     45 
    4646    :return model: model if valid model or None if not valid 
    47      
     47 
    4848    """ 
    4949    #Check if the plugin is of type Model1DPlugin 
     
    6363        log(msg) 
    6464        return None 
    65     
     65 
    6666    if hasattr(new_instance, "function"): 
    6767        try: 
     
    7777        return None 
    7878    return model 
    79    
    80    
     79 
     80 
    8181def find_plugins_dir(): 
    8282    """ 
     
    8585    """ 
    8686    dir = os.path.join(os.path.expanduser("~"), '.sasview', PLUGIN_DIR) 
    87      
     87 
    8888    # If the plugin directory doesn't exist, create it 
    8989    if not os.path.isdir(dir): 
    9090        os.makedirs(dir) 
    91          
     91 
    9292    # Find paths needed 
    9393    try: 
     
    132132            raise type, value, traceback 
    133133        return 1 
    134      
     134 
    135135report_problem = ReportProblem() 
    136136 
     
    173173            if toks[1] == '.py' and not toks[0] == '__init__': 
    174174                name = toks[0] 
    175              
     175 
    176176                path = [os.path.abspath(dir)] 
    177177                file = None 
     
    194194                    log(msg) 
    195195                finally: 
    196                
     196 
    197197                    if not file == None: 
    198198                        file.close() 
     
    213213        """ 
    214214        self.mydict = {} 
    215          
     215 
    216216    def set_list(self, name, mylist): 
    217217        """ 
    218218        :param name: the type of the list 
    219219        :param mylist: the list to add 
    220          
     220 
    221221        """ 
    222222        if name not in self.mydict.keys(): 
    223223            self.reset_list(name, mylist) 
    224              
     224 
    225225    def reset_list(self, name, mylist): 
    226226        """ 
     
    229229        """ 
    230230        self.mydict[name] = mylist 
    231              
     231 
    232232    def get_list(self): 
    233233        """ 
     
    235235        """ 
    236236        return self.mydict 
    237          
    238          
     237 
     238 
    239239class ModelManagerBase: 
    240240    """ 
     
    262262    event_owner = None 
    263263    last_time_dir_modified = 0 
    264      
     264 
    265265    def __init__(self): 
    266266        """ 
     
    269269        self.stored_plugins = {} 
    270270        self._getModelList() 
    271          
     271 
    272272    def findModels(self): 
    273273        """ 
     
    280280        logging.info("pluging model : %s\n" % str(temp)) 
    281281        return temp 
    282          
     282 
    283283    def _getModelList(self): 
    284284        """ 
    285285        List of models we want to make available by default 
    286286        for this application 
    287      
     287 
    288288        :return: the next free event ID following the new menu events 
    289          
     289 
    290290        """ 
    291291 
     
    702702            #        self.shape_indep_list.append(BEPolyelectrolyte) 
    703703            self.model_name_list.append(BEPolyelectrolyte.__name__) 
    704             self.form_factor_dict[str(wx.NewId())] =  [SphereModel] 
     704            self.form_factor_dict[str(wx.NewId())] = [SphereModel] 
    705705        except: 
    706706            pass 
     
    10131013        #self.shape_indep_list.append(FractalO_Z) 
    10141014        #self.model_name_list.append(FractalO_Z.__name__) 
    1015      
     1015 
    10161016        #Looking for plugins 
    10171017        self.stored_plugins = self.findModels() 
     
    10191019        for name, plug in self.stored_plugins.iteritems(): 
    10201020            self.model_dictionary[name] = plug 
    1021              
     1021 
    10221022        self._get_multifunc_models() 
    1023         
     1023 
    10241024        return 0 
    10251025 
     
    10361036                is_modified = True 
    10371037                self.last_time_dir_modified = temp 
    1038          
     1038 
    10391039        return is_modified 
    1040      
     1040 
    10411041    def update(self): 
    10421042        """ 
     
    10551055        else: 
    10561056            return {} 
    1057      
     1057 
    10581058    def pulgins_reset(self): 
    10591059        """ 
     
    10741074        self.model_combobox.reset_list("Customized Models", self.plugins) 
    10751075        return self.model_combobox.get_list() 
    1076         
     1076 
    10771077##   I believe the next four methods are for the old form factor GUI 
    10781078##   where the dropdown showed a list of categories which then rolled out 
     
    11011101        ## guiframe reference 
    11021102#        self.event_owner = event_owner 
    1103          
     1103 
    11041104#        shape_submenu = wx.Menu() 
    11051105#        shape_indep_submenu = wx.Menu() 
     
    11121112#                                         " simple shape"], 
    11131113#                         list1=self.shape_list) 
    1114          
     1114 
    11151115#        self._fill_simple_menu(menuinfo=["Shape-Independent", 
    11161116#                                         shape_indep_submenu, 
    11171117#                                         "List of shape-independent models"], 
    11181118#                         list1=self.shape_indep_list) 
    1119          
     1119 
    11201120#        self._fill_simple_menu(menuinfo=["Structure Factors", 
    11211121#                                         structure_factor, 
    11221122#                                         "List of Structure factors models"], 
    11231123#                                list1=self.struct_list) 
    1124          
     1124 
    11251125#        self._fill_plugin_menu(menuinfo=["Customized Models", added_models, 
    11261126#                                            "List of additional models"], 
    11271127#                                 list1=self.plugins) 
    1128          
     1128 
    11291129#        self._fill_menu(menuinfo=["P(Q)*S(Q)", multip_models, 
    11301130#                                  "mulplication of 2 models"], 
     
    11321132#                                   list2=self.struct_list) 
    11331133#        return 0 
    1134      
     1134 
    11351135#    def _fill_plugin_menu(self, menuinfo, list1): 
    11361136#        """ 
     
    11431143#            menuinfo[1].Append(int(id), "Empty", msg) 
    11441144#        self._fill_simple_menu(menuinfo, list1) 
    1145          
     1145 
    11461146#   def _fill_simple_menu(self, menuinfo, list1): 
    11471147#       """ 
     
    11571157#       if len(list1) > 0: 
    11581158#           self.model_combobox.set_list(menuinfo[0], list1) 
    1159              
     1159 
    11601160#            for item in list1: 
    11611161#                try: 
     
    12171217#        id = wx.NewId() 
    12181218#        self.modelmenu.AppendMenu(id, menuinfo[0], menuinfo[1], menuinfo[2]) 
    1219          
     1219 
    12201220    def _on_model(self, evt): 
    12211221        """ 
    12221222        React to a model menu event