Ignore:
Timestamp:
Oct 20, 2016 3:54:06 PM (8 years ago)
Author:
krzywon
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, ticket-1009, ticket-1094-headless, ticket-1242-2d-resolution, ticket-1243, ticket-1249, ticket885, unittest-saveload
Children:
880e845, cf1910f
Parents:
8b645cc
Message:

Fixes #738: No errors are thrown on loading projects with fits, plus linting.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/sas/sasgui/perspectives/fitting/fitpage.py

    r3bec50a rc8e1996  
    1414from sasmodels.weights import MODELS as POLYDISPERSITY_MODELS 
    1515 
    16 from sas.sasgui.guiframe.events import StatusEvent 
    17 from sas.sasgui.guiframe.events import NewPlotEvent 
    18 from sas.sasgui.guiframe.events import PlotQrangeEvent 
     16from sas.sasgui.guiframe.events import StatusEvent, NewPlotEvent, \ 
     17    PlotQrangeEvent 
    1918from sas.sasgui.guiframe.dataFitting import check_data_validity 
    20 from sas.sasgui.guiframe.utils import format_number 
    21 from sas.sasgui.guiframe.utils import check_float 
     19from sas.sasgui.guiframe.utils import format_number, check_float 
    2220from sas.sasgui.guiframe.documentation_window import DocumentationWindow 
     21 
     22from sas.sasgui.perspectives.fitting.basepage import BasicPage as BasicPage 
     23from sas.sasgui.perspectives.fitting.basepage import PageInfoEvent as \ 
     24    PageInfoEvent 
     25from sas.sascalc.data_util.qsmearing import smear_selection 
     26from .basepage import ModelTextCtrl 
    2327 
    2428(Chi2UpdateEvent, EVT_CHI2_UPDATE) = wx.lib.newevent.NewEvent() 
     
    2832SMEAR_SIZE_H = 0.00 
    2933 
    30 from sas.sasgui.perspectives.fitting.basepage import BasicPage as BasicPage 
    31 from sas.sasgui.perspectives.fitting.basepage import PageInfoEvent as PageInfoEvent 
    32 from sas.sascalc.data_util.qsmearing import smear_selection 
    33 from .basepage import ModelTextCtrl 
    34  
    3534 
    3635class FitPage(BasicPage): 
     
    4948        BasicPage.__init__(self, parent, color=color) 
    5049 
    51         ## draw sizer 
     50        # draw sizer 
    5251        self._fill_data_sizer() 
    5352        self.is_2D = None 
     
    7271        self.enable_fit_button() 
    7372        self.fill_data_combobox(data_list=self.data_list) 
    74         #create a default data for an empty panel 
     73        # create a default data for an empty panel 
    7574        self.create_default_data() 
    7675        self._manager.frame.Bind(wx.EVT_SET_FOCUS, self.on_set_focus) 
     
    105104        self.data_box_description.SetForegroundColour(dname_color) 
    106105        boxsizer1 = wx.StaticBoxSizer(self.data_box_description, wx.VERTICAL) 
    107         #---------------------------------------------------------- 
     106        # ---------------------------------------------------------- 
    108107        sizer_data = wx.BoxSizer(wx.HORIZONTAL) 
    109108        self.dataSource = wx.ComboBox(self, wx.ID_ANY, style=wx.CB_READONLY) 
     
    134133        self.enable_datasource() 
    135134        if len(data_list) > 0: 
    136             #find the maximum range covering all data 
     135            # find the maximum range covering all data 
    137136            qmin, qmax, npts = self.compute_data_set_range(data_list) 
    138137            self.qmin_data_set = qmin 
     
    185184 
    186185        :return: True or False 
    187  
    188186        """ 
    189187        if self.data.__class__.__name__ == "Data2D" or \ 
     
    199197        buttons, xi^2, number of points etc. 
    200198        """ 
    201         is_2Ddata = False 
     199        is_2d_data = False 
    202200 
    203201        # Check if data is 2D 
    204202        if self.data.__class__.__name__ == "Data2D" or \ 
    205203                        self.enable2D: 
    206             is_2Ddata = True 
     204            is_2d_data = True 
    207205 
    208206        title = "Fitting" 
    209         #smear messages & titles 
     207        # smear messages & titles 
    210208        smear_message_none = "No smearing is selected..." 
    211209        smear_message_dqdata = "The dQ data is being used for smearing..." 
     
    225223        self._get_smear_info() 
    226224 
    227         #Sizers 
     225        # Sizers 
    228226        box_description_range = wx.StaticBox(self, wx.ID_ANY, str(title)) 
    229227        box_description_range.SetForegroundColour(wx.BLUE) 
     
    244242        sizer_weighting = wx.BoxSizer(wx.HORIZONTAL) 
    245243        weighting_box.SetMinSize((_DATA_BOX_WIDTH, 40)) 
    246         #Filling the sizer containing weighting info. 
     244        # Filling the sizer containing weighting info. 
    247245        self.dI_noweight = wx.RadioButton(self, wx.ID_ANY, 
    248246                                          'No Weighting', style=wx.RB_GROUP) 
     
    286284                        self._on_select_accuracy) 
    287285 
    288         #Fit button 
     286        # Fit button 
    289287        self.btFit = wx.Button(self, self._ids.next(), 'Fit') 
    290288        self.default_bt_colour = self.btFit.GetDefaultAttributes() 
     
    292290        self.btFit.SetToolTipString("Start fitting.") 
    293291 
    294         #General Help button 
     292        # General Help button 
    295293        self.btFitHelp = wx.Button(self, wx.ID_ANY, 'Help') 
    296294        self.btFitHelp.SetToolTipString("General fitting help.") 
    297295        self.btFitHelp.Bind(wx.EVT_BUTTON, self._onFitHelp) 
    298296         
    299         #Resolution Smearing Help button (for now use same technique as 
    300         #used for dI help to get tiniest possible button that works 
    301         #both on MAC and PC.  Should completely rewrite the fitting sizer  
    302         #in future.  This is minimum to get out release 3.1 
     297        # Resolution Smearing Help button (for now use same technique as 
     298        # used for dI help to get tiniest possible button that works 
     299        # both on MAC and PC.  Should completely rewrite the fitting sizer 
     300        # in future.  This is minimum to get out release 3.1 
    303301        #        comment June 14, 2015     --- PDB 
    304302        if sys.platform.count("win32") > 0: 
    305             size_q = (20, 15)  #on PC 
     303            size_q = (20, 15)  # on PC 
    306304        else: 
    307             size_q = (30, 20)  #on MAC 
     305            size_q = (30, 20)  # on MAC 
    308306        self.btSmearHelp = wx.Button(self, wx.ID_ANY, '?', 
    309307                                     style=wx.BU_EXACTFIT, size=size_q) 
     
    311309        self.btSmearHelp.Bind(wx.EVT_BUTTON, self._onSmearHelp) 
    312310         
    313         #textcntrl for custom resolution 
     311        # textcntrl for custom resolution 
    314312        self.smear_pinhole_max = ModelTextCtrl(self, wx.ID_ANY, 
    315313                            size=(_BOX_WIDTH - 25, 20), 
     
    329327                            text_enter_callback=self.onSlitSmear) 
    330328 
    331         ## smear 
     329        # smear 
    332330        self.smear_data_left = BGTextCtrl(self, wx.ID_ANY, 
    333331                                          size=(_BOX_WIDTH - 25, 20), style=0) 
     
    337335        self.smear_data_right.SetValue(str(self.dq_r)) 
    338336 
    339         #set default values for smear 
     337        # set default values for smear 
    340338        self.smear_pinhole_max.SetValue(str(self.dx_max)) 
    341339        self.smear_pinhole_min.SetValue(str(self.dx_min)) 
     
    343341        self.smear_slit_width.SetValue(str(self.dxw)) 
    344342 
    345         #Filling the sizer containing instruments smearing info. 
     343        # Filling the sizer containing instruments smearing info. 
    346344        self.disable_smearer = wx.RadioButton(self, wx.ID_ANY, 
    347345                                              'None', style=wx.RB_GROUP) 
    348346        self.enable_smearer = wx.RadioButton(self, wx.ID_ANY, 'Use dQ Data') 
    349         #self.enable_smearer.SetToolTipString( 
    350         #"Click to use the loaded dQ data for smearing.") 
     347        # self.enable_smearer.SetToolTipString( 
     348        # "Click to use the loaded dQ data for smearing.") 
    351349        self.pinhole_smearer = wx.RadioButton(self, wx.ID_ANY, 
    352350                                              'Custom Pinhole Smear') 
    353         #self.pinhole_smearer.SetToolTipString 
    354         #("Click to input custom resolution for pinhole smearing.") 
     351        # self.pinhole_smearer.SetToolTipString 
     352        # ("Click to input custom resolution for pinhole smearing.") 
    355353        self.slit_smearer = wx.RadioButton(self, wx.ID_ANY, 'Custom Slit Smear') 
    356         #self.slit_smearer.SetToolTipString 
    357         #("Click to input custom resolution for slit smearing.") 
     354        # self.slit_smearer.SetToolTipString 
     355        # ("Click to input custom resolution for slit smearing.") 
    358356        self.Bind(wx.EVT_RADIOBUTTON, self.onSmear, 
    359357                  id=self.disable_smearer.GetId()) 
     
    378376        self.Npts_fit = BGTextCtrl(self, wx.ID_ANY, "-", size=(75, 20), style=0) 
    379377        self.Npts_fit.SetToolTipString( 
    380                             " Npts : number of points selected for fitting") 
     378            " Npts : number of points selected for fitting") 
    381379        self.Npts_total = ModelTextCtrl(self, wx.ID_ANY, size=(_BOX_WIDTH, 20), 
    382                             style=wx.TE_PROCESS_ENTER, 
    383                             text_enter_callback=self._onQrangeEnter) 
     380                                        style=wx.TE_PROCESS_ENTER, 
     381                                        text_enter_callback=self._onQrangeEnter) 
    384382        self.Npts_total.SetValue(format_number(self.npts_x)) 
    385         self.Npts_total.SetToolTipString(\ 
    386                                 " Total Npts : total number of data points") 
     383        self.Npts_total.SetToolTipString( 
     384            " Total Npts : total number of data points") 
    387385 
    388386        # Update and Draw button 
     
    429427        self.smear_description_2d_y = wx.StaticText(self, wx.ID_ANY, 
    430428                            smear_message_2d_y_title, style=wx.ALIGN_LEFT) 
    431         self.smear_description_2d_y.SetToolTipString(\ 
     429        self.smear_description_2d_y.SetToolTipString( 
    432430                                    " dQs(perpendicular) in q_phi direction.") 
    433431        self.smear_description_pin_min = wx.StaticText(self, wx.ID_ANY, 
     
    440438                        smear_message_slit_width_title, style=wx.ALIGN_LEFT) 
    441439 
    442         #arrange sizers 
     440        # arrange sizers 
    443441        self.sizer_set_smearer.Add(sizer_smearer) 
    444442        self.sizer_set_smearer.Add((10, 10)) 
    445443        self.sizer_set_smearer.Add(self.smear_description_none, 
    446                                     0, wx.CENTER, 10) 
     444                                   0, wx.CENTER, 10) 
    447445        self.sizer_set_smearer.Add(self.smear_description_dqdata, 
    448                                     0, wx.CENTER, 10) 
     446                                   0, wx.CENTER, 10) 
    449447        self.sizer_set_smearer.Add(self.smear_description_2d, 
    450                                     0, wx.CENTER, 10) 
     448                                   0, wx.CENTER, 10) 
    451449        self.sizer_new_smear.Add(self.smear_description_type, 
    452                                   0, wx.CENTER, 10) 
     450                                 0, wx.CENTER, 10) 
    453451        self.sizer_new_smear.Add(self.smear_description_accuracy_type, 
    454                                   0, wx.CENTER, 10) 
     452                                 0, wx.CENTER, 10) 
    455453        self.sizer_new_smear.Add(self.smear_accuracy) 
    456454        self.sizer_new_smear.Add(self.smear_description_smear_type, 
    457                                   0, wx.CENTER, 10) 
     455                                 0, wx.CENTER, 10) 
    458456        self.sizer_new_smear.Add((15, -1)) 
    459         self.sizer_new_smear.Add(self.smear_description_2d_x, 
    460                                   0, wx.CENTER, 10) 
     457        self.sizer_new_smear.Add(self.smear_description_2d_x, 0, wx.CENTER, 10) 
    461458        self.sizer_new_smear.Add(self.smear_description_pin_min, 
    462                                   0, wx.CENTER, 10) 
     459                                 0, wx.CENTER, 10) 
    463460        self.sizer_new_smear.Add(self.smear_description_slit_height, 
    464                                   0, wx.CENTER, 10) 
    465  
    466         self.sizer_new_smear.Add(self.smear_pinhole_min, 
    467                                   0, wx.CENTER, 10) 
    468         self.sizer_new_smear.Add(self.smear_slit_height, 
    469                                   0, wx.CENTER, 10) 
    470         self.sizer_new_smear.Add(self.smear_data_left, 
    471                                   0, wx.CENTER, 10) 
     461                                 0, wx.CENTER, 10) 
     462 
     463        self.sizer_new_smear.Add(self.smear_pinhole_min, 0, wx.CENTER, 10) 
     464        self.sizer_new_smear.Add(self.smear_slit_height, 0, wx.CENTER, 10) 
     465        self.sizer_new_smear.Add(self.smear_data_left, 0, wx.CENTER, 10) 
    472466        self.sizer_new_smear.Add((20, -1)) 
    473467        self.sizer_new_smear.Add(self.smear_description_2d_y, 
    474                                   0, wx.CENTER, 10) 
     468                                 0, wx.CENTER, 10) 
    475469        self.sizer_new_smear.Add(self.smear_description_pin_max, 
    476                                   0, wx.CENTER, 10) 
     470                                 0, wx.CENTER, 10) 
    477471        self.sizer_new_smear.Add(self.smear_description_slit_width, 
    478                                   0, wx.CENTER, 10) 
     472                                 0, wx.CENTER, 10) 
    479473 
    480474        self.sizer_new_smear.Add(self.smear_pinhole_max, 0, wx.CENTER, 10) 
     
    501495 
    502496        # Show only the relevant smear messages, etc 
    503         if self.current_smearer == None: 
    504             if not is_2Ddata: 
     497        if self.current_smearer is None: 
     498            if not is_2d_data: 
    505499                self.smear_description_none.Show(True) 
    506500                self.enable_smearer.Disable() 
     
    508502                self.smear_description_none.Show(True) 
    509503                self.slit_smearer.Disable() 
    510             if self.data == None: 
     504            if self.data is None: 
    511505                self.slit_smearer.Disable() 
    512506                self.pinhole_smearer.Disable() 
     
    515509            self._show_smear_sizer() 
    516510        boxsizer_range.Add(self.sizer_set_masking) 
    517         #2D data? default 
    518         is_2Ddata = False 
    519  
    520         #check if it is 2D data 
     511        # 2D data? default 
     512        is_2d_data = False 
     513 
     514        # check if it is 2D data 
    521515        if self.data.__class__.__name__ == "Data2D" or self.enable2D: 
    522             is_2Ddata = True 
     516            is_2d_data = True 
    523517 
    524518        self.sizer5.Clear(True) 
     
    568562        sizer.Add(wx.StaticText(self, wx.ID_ANY, ' Max[1/A]')) 
    569563        sizer.Add(self.EditMask_title) 
    570         sizer.Add((-1,5)) 
     564        sizer.Add((-1, 5)) 
    571565 
    572566        sizer.Add(self.reset_qrange) 
     
    574568        sizer.Add(self.qmax) 
    575569        sizer.Add(self.btEditMask) 
    576         sizer.Add((-1,5)) 
    577  
    578         sizer.AddMany(5*[(-1,5)]) 
     570        sizer.Add((-1, 5)) 
     571 
     572        sizer.AddMany(5*[(-1, 5)]) 
    579573 
    580574        sizer.Add(box_description_1, 0, 0) 
     
    582576        sizer.Add(self.points_sizer, 0, 0) 
    583577        sizer.Add(self.draw_button, 0, 0) 
    584         sizer.Add((-1,5)) 
     578        sizer.Add((-1, 5)) 
    585579         
    586580        sizer.Add(self.tcChi, 0, 0) 
     
    592586        boxsizer_range.Add(sizer_chi2) 
    593587        boxsizer_range.Add(sizer) 
    594         if is_2Ddata: 
     588        if is_2d_data: 
    595589            self.btEditMask.Enable() 
    596590            self.EditMask_title.Enable() 
     
    598592            self.btEditMask.Disable() 
    599593            self.EditMask_title.Disable() 
    600         ## save state 
     594        # save state 
    601595        self.save_current_state() 
    602596        self.sizer5.Add(boxsizer_range, 0, wx.EXPAND | wx.ALL, 10) 
    603597        self.sizer5.Layout() 
    604598 
    605  
    606599    def _set_sizer_dispersion(self): 
    607600        """ 
     
    613606 
    614607        self.sizer4_4.Clear(True) 
    615         if self.model == None: 
    616             ##no model is selected 
     608        if self.model is None: 
     609            # no model is selected 
    617610            return 
    618611        if not self.enable_disp.GetValue(): 
    619             ## the user didn't select dispersity display 
     612            # the user didn't select dispersity display 
    620613            return 
    621614 
    622615        self._reset_dispersity() 
    623616 
    624         ## fill a sizer with the combobox to select dispersion type 
     617        # fill a sizer with the combobox to select dispersion type 
    625618        model_disp = wx.StaticText(self, wx.ID_ANY, 'Function') 
    626619        CHECK_STATE = False 
     
    645638            err_text = '' 
    646639        self.text_disp_1 = wx.StaticText(self, wx.ID_ANY, err_text) 
    647         self.sizer4_4.Add(self.text_disp_1, (iy, ix), (1, 1), \ 
     640        self.sizer4_4.Add(self.text_disp_1, (iy, ix), (1, 1), 
    648641                          wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
    649642 
    650643        ix += 1 
    651644        self.text_disp_min = wx.StaticText(self, wx.ID_ANY, 'Min') 
    652         self.sizer4_4.Add(self.text_disp_min, (iy, ix), (1, 1), \ 
     645        self.sizer4_4.Add(self.text_disp_min, (iy, ix), (1, 1), 
    653646                            wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
    654647 
     
    683676                if item in self.model.magnetic_params: 
    684677                    continue 
    685             if not item in self.model.orientation_params: 
    686                 if not item in self.disp_cb_dict: 
     678            if item not in self.model.orientation_params: 
     679                if item not in self.disp_cb_dict: 
    687680                    self.disp_cb_dict[item] = None 
    688681                name0 = "Distribution of " + item 
     
    690683                name2 = item + ".npts" 
    691684                name3 = item + ".nsigmas" 
    692                 if not name1 in self.model.details: 
     685                if name1 not in self.model.details: 
    693686                    self.model.details[name1] = ["", None, None] 
    694687 
     
    716709                        ctl1.SetValue(str(format_number(value, True))) 
    717710                        self.sizer4_4.Add(ctl1, (iy, ix), (1, 1), wx.EXPAND) 
    718                         ## text to show error sign 
     711                        # text to show error sign 
    719712                        ix = 2 
    720713                        text2 = wx.StaticText(self, wx.ID_ANY, '+/-') 
     
    776769                        Tct2.SetValue(str(format_number(value))) 
    777770                        self.sizer4_4.Add(Tct2, (iy, ix), (1, 1), 
    778                                            wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
     771                                          wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
    779772                        self.fixed_param.append([None, name3, Tct2, 
    780773                                                 None, None, None, 
     
    802795                if item in self.model.magnetic_params: 
    803796                    continue 
    804             if  item in self.model.orientation_params: 
    805                 if not item in self.disp_cb_dict: 
     797            if item in self.model.orientation_params: 
     798                if item not in self.disp_cb_dict: 
    806799                    self.disp_cb_dict[item] = None 
    807800                name0 = "Distribution of " + item 
     
    810803                name3 = item + ".nsigmas" 
    811804 
    812                 if not name1 in self.model.details: 
     805                if name1 not in self.model.details: 
    813806                    self.model.details[name1] = ["", None, None] 
    814807 
     
    855848 
    856849                        self.sizer4_4.Add(ctl1, (iy, ix), (1, 1), wx.EXPAND) 
    857                         ## text to show error sign 
     850                        # text to show error sign 
    858851                        ix = 2 
    859852                        text2 = wx.StaticText(self, wx.ID_ANY, '+/-') 
     
    968961 
    969962        self.state.model = self.model.clone() 
    970         ## save state into 
     963        # save state into 
    971964        self._copy_parameters_state(self.parameters, self.state.parameters) 
    972965        self._copy_parameters_state(self.orientation_params_disp, 
     
    978971        wx.PostEvent(self.parent, 
    979972                     StatusEvent(status=" Selected Distribution: Gaussian")) 
    980         #Fill the list of fittable parameters 
     973        # Fill the list of fittable parameters 
    981974        self.get_all_checked_params() 
    982975        self.Layout() 
     
    986979        Update and Draw the model 
    987980        """ 
    988         if self.model == None: 
     981        if self.model is None: 
    989982            msg = "Please select a Model first..." 
    990983            wx.MessageBox(msg, 'Info') 
     
    996989            self.create_default_data() 
    997990        """ 
    998         flag,is_modified = self._update_paramv_on_fit() 
    999  
    1000         wx.CallAfter(self._onparamEnter_helper,is_modified) 
     991        flag, is_modified = self._update_paramv_on_fit() 
     992 
     993        wx.CallAfter(self._onparamEnter_helper, is_modified) 
    1001994        if not flag: 
    1002995            msg = "The parameters are invalid" 
     
    10081001        Allow to fit 
    10091002        """ 
    1010         if event != None: 
     1003        if event is not None: 
    10111004            event.Skip() 
    10121005        if self.fit_started: 
     
    10481041            return 
    10491042 
    1050         self.select_param(event=None) 
     1043        self.select_param() 
    10511044 
    10521045        # Remove or do not allow fitting on the Q=0 point, especially 
     
    10591052                                    qmax=self.qmax_x) 
    10601053 
    1061         #single fit 
    1062         #self._manager.onFit(uid=self.uid) 
     1054        # single fit 
     1055        # self._manager.onFit(uid=self.uid) 
    10631056        self.fit_started = self._manager.onFit(uid=self.uid) 
    10641057        wx.CallAfter(self.set_fitbutton) 
     
    10731066        versions of Wx (before 2.9) and thus not the release version of 
    10741067        installers, the help comes up at the top level of the file as 
    1075         webbrowser does not pass anything past the # to the browser when it is 
     1068        web browser does not pass anything past the # to the browser when it is 
    10761069        running "file:///...." 
    10771070 
    1078     :param evt: Triggers on clicking the help button 
    1079     """ 
     1071        :param evt: Triggers on clicking the help button 
     1072        """ 
    10801073 
    10811074        _TreeLocation = "user/sasgui/perspectives/fitting/fitting_help.html" 
     
    10921085        versions of Wx (before 2.9) and thus not the release version of 
    10931086        installers, the help comes up at the top level of the file as 
    1094         webbrowser does not pass anything past the # to the browser when it is 
     1087        web browser does not pass anything past the # to the browser when it is 
    10951088        running "file:///...." 
    10961089 
    1097     :param evt: Triggers on clicking the help button 
    1098     """ 
     1090        :param evt: Triggers on clicking the help button 
     1091        """ 
    10991092 
    11001093        _TreeLocation = "user/sasgui/perspectives/fitting/sm_help.html" 
     
    11081101        """ 
    11091102        # Skip this feature if we are not on Windows 
    1110         #NOTE: the is_mac data member actually means "is no Windows". 
     1103        # NOTE: the is_mac data member actually means "is no Windows". 
    11111104        if self.is_mac: 
    11121105            return 
     
    11181111            label = "Fit" 
    11191112            color = "black" 
    1120         #self.btFit.Enable(False) 
     1113        # self.btFit.Enable(False) 
    11211114        self.btFit.SetLabel(label) 
    11221115        self.btFit.SetForegroundColour(color) 
     
    11491142        Stop fit 
    11501143        """ 
    1151         if event != None: 
     1144        if event is not None: 
    11521145            event.Skip() 
    11531146        self._manager.stop_fit(self.uid) 
     
    11691162        copy_flag = False 
    11701163        is_poly_enabled = None 
    1171         if event != None: 
    1172             if (event.GetEventObject() == self.formfactorbox\ 
     1164        if event is not None: 
     1165            if (event.GetEventObject() == self.formfactorbox 
    11731166                        and self.structurebox.GetLabel() != 'None')\ 
    11741167                        or event.GetEventObject() == self.structurebox\ 
     
    11831176            self._keep.Enable(False) 
    11841177            self._set_save_flag(False) 
    1185         # TODO: why do we have to variables for one flag?? 
    11861178        self.enable_disp.SetValue(False) 
    11871179        self.disable_disp.SetValue(True) 
     
    12131205                    self._keep.Enable(not self.batch_on) 
    12141206                    self._set_save_flag(True) 
     1207                    self._set_smear(self.data) 
    12151208 
    12161209            # more disables for 2D 
     
    12261219            except: 
    12271220                raise 
    1228                 ## error occured on chisqr computation 
    1229                 #pass 
    1230             ## event to post model to fit to fitting plugins 
     1221                # error occured on chisqr computation 
     1222                # pass 
     1223            # event to post model to fit to fitting plugins 
    12311224            (ModelEventbox, EVT_MODEL_BOX) = wx.lib.newevent.NewEvent() 
    12321225 
    1233             ## set smearing value whether or not 
    1234             #    the data contain the smearing info 
     1226            # set smearing value whether or not data contain the smearing info 
    12351227            evt = ModelEventbox(model=self.model, 
    12361228                            smearer=temp_smear, 
     
    12421234 
    12431235            self._manager._on_model_panel(evt=evt) 
    1244             self.mbox_description.SetLabel("Model [ %s ]" % str(self.model.name)) 
     1236            self.mbox_description.SetLabel("Model [ %s ]" % 
     1237                                           str(self.model.name)) 
    12451238            self.mbox_description.SetForegroundColour(wx.BLUE) 
    12461239            self.state.model = self.model.clone() 
    12471240            self.state.model.name = self.model.name 
    12481241 
    1249         if event != None: 
    1250             ## post state to fit panel 
     1242        if event is not None: 
     1243            # post state to fit panel 
    12511244            new_event = PageInfoEvent(page=self) 
    12521245            wx.PostEvent(self.parent, new_event) 
    1253             #update list of plugins if new plugin is available 
     1246            # update list of plugins if new plugin is available 
    12541247            custom_model = 'Customized Models' 
    12551248            mod_cat = self.categorybox.GetStringSelection() 
     
    12641257                    self.formfactorbox.SetValue(current_val) 
    12651258            # when select a model only from guictr/button 
    1266             if is_poly_enabled != None: 
     1259            if is_poly_enabled is not None: 
    12671260                self.enable_disp.SetValue(is_poly_enabled) 
    12681261                self.disable_disp.SetValue(not is_poly_enabled) 
     
    12921285        when enter value on panel redraw model according to changed 
    12931286        """ 
    1294         if self.model == None: 
     1287        if self.model is None: 
    12951288            msg = "Please select a Model first..." 
    12961289            wx.MessageBox(msg, 'Info') 
    12971290            return 
    12981291 
    1299         #default flag 
     1292        # default flag 
    13001293        flag = False 
    13011294        self.fitrange = True 
    1302         #get event object 
     1295        # get event object 
    13031296        tcrtl = event.GetEventObject() 
    1304         #Clear msg if previously shown. 
     1297        # Clear msg if previously shown. 
    13051298        msg = "" 
    13061299        wx.PostEvent(self._manager.parent, StatusEvent(status=msg)) 
     
    13131306                if not self.disable_smearer.GetValue(): 
    13141307                    temp_smearer = self.current_smearer 
    1315                     ## set smearing value whether or not 
    1316                     #        the data contain the smearing info 
     1308                    # set smearing value whether or not data contain the 
     1309                    # smearing info 
    13171310                    if self.slit_smearer.GetValue(): 
    13181311                        flag1 = self.update_slit_smear() 
     
    13311324                                              enable_smearer=enable_smearer) 
    13321325                if flag: 
    1333                     #self.compute_chisqr(smearer= temp_smearer) 
    1334  
    1335                     ## new state posted 
     1326                    # self.compute_chisqr(smearer= temp_smearer) 
     1327 
     1328                    # new state posted 
    13361329                    if self.state_change: 
    1337                         #self._undo.Enable(True) 
     1330                        # self._undo.Enable(True) 
    13381331                        event = PageInfoEvent(page=self) 
    13391332                        wx.PostEvent(self.parent, event) 
     
    13451338        else: 
    13461339            self.save_current_state() 
    1347             msg = "Cannot Plot :Must enter a number!!!  " 
     1340            msg = "Cannot Plot: Must enter a number!!!  " 
    13481341            wx.PostEvent(self._manager.parent, StatusEvent(status=msg)) 
    13491342 
     
    13561349        """ 
    13571350        tcrtl = event.GetEventObject() 
    1358         #Clear msg if previously shown. 
     1351        # Clear msg if previously shown. 
    13591352        msg = "" 
    13601353        wx.PostEvent(self._manager.parent, StatusEvent(status=msg)) 
     
    13741367            tcrtl.SetBackgroundColour(wx.WHITE) 
    13751368 
    1376         #self._undo.Enable(True) 
     1369        # self._undo.Enable(True) 
    13771370        self.save_current_state() 
    13781371        event = PageInfoEvent(page=self) 
     
    13841377        ON Qrange focus 
    13851378        """ 
    1386         if event != None: 
     1379        if event is not None: 
    13871380            event.Skip() 
    1388         #tcrtl = event.GetEventObject() 
     1381        # tcrtl = event.GetEventObject() 
    13891382        self._validate_qrange(self.qmin, self.qmax) 
    13901383 
     
    13931386        On Qrange textctrl click, make the qrange lines in the plot 
    13941387        """ 
    1395         if event != None: 
     1388        if event is not None: 
    13961389            event.Skip() 
    13971390        if self.data.__class__.__name__ == "Data2D": 
     
    14111404        #On q range value updated. DO not combine with qrange_click(). 
    14121405        """ 
    1413         if event != None: 
     1406        if event is not None: 
    14141407            event.Skip() 
    14151408        if self.data.__class__.__name__ == "Data2D": 
     
    14391432        length = len(self.data.x) 
    14401433        indx = (numpy.abs(self.data.x - x_data)).argmin() 
    1441         #return array.flat[idx] 
     1434        # return array.flat[idx] 
    14421435        if key == wx.WXK_PAGEUP or key == wx.WXK_NUMPAD_PAGEUP: 
    14431436            indx += 1 
     
    14581451        """ 
    14591452        tcrtl = event.GetEventObject() 
    1460         #Clear msg if previously shown. 
     1453        # Clear msg if previously shown. 
    14611454        msg = "" 
    14621455        wx.PostEvent(self._manager.parent, StatusEvent(status=msg)) 
     
    14881481                wx.PostEvent(self._manager.parent, StatusEvent(status=msg)) 
    14891482                return 
    1490             #Check if # of points for theory model are valid(>0). 
     1483            # Check if # of points for theory model are valid(>0). 
    14911484            # check for 2d 
    14921485            if self.data.__class__.__name__ == "Data2D" or \ 
     
    14951488                radius = numpy.sqrt(self.data.qx_data * self.data.qx_data + 
    14961489                                    self.data.qy_data * self.data.qy_data) 
    1497                 index_data = ((self.qmin_x <= radius) & \ 
    1498                                 (radius <= self.qmax_x)) 
     1490                index_data = ((self.qmin_x <= radius) & (radius <= self.qmax_x)) 
    14991491                index_data = (index_data) & (self.data.mask) 
    15001492                index_data = (index_data) & (numpy.isfinite(self.data.data)) 
     
    15061498                    return 
    15071499                else: 
    1508                     #self.data.mask = index_data 
    1509                     #self.Npts_fit.SetValue(str(len(self.data.mask))) 
     1500                    # self.data.mask = index_data 
     1501                    # self.Npts_fit.SetValue(str(len(self.data.mask))) 
    15101502                    self.show_npts2fit() 
    15111503            else: 
    1512                 index_data = ((self.qmin_x <= self.data.x) & \ 
     1504                index_data = ((self.qmin_x <= self.data.x) & 
    15131505                              (self.data.x <= self.qmax_x)) 
    15141506                self.Npts_fit.SetValue(str(len(self.data.x[index_data]))) 
     
    15431535            for item in self.parameters: 
    15441536                if item[0].IsShown(): 
    1545                     #Skip the angle parameters if 1D data 
     1537                    # Skip the angle parameters if 1D data 
    15461538                    if self.data.__class__.__name__ != "Data2D" and \ 
    15471539                            not self.enable2D: 
     
    15501542                    if item in self.param_toFit: 
    15511543                        continue 
    1552                     ## hide statictext +/- 
     1544                    # hide statictext +/- 
    15531545                    if len(item) < 4: 
    15541546                        continue 
    1555                     if item[3] != None and item[3].IsShown(): 
     1547                    if item[3] is not None and item[3].IsShown(): 
    15561548                        item[3].Hide() 
    1557                     ## hide textcrtl  for error after fit 
    1558                     if item[4] != None and item[4].IsShown(): 
     1549                    # hide textcrtl  for error after fit 
     1550                    if item[4] is not None and item[4].IsShown(): 
    15591551                        item[4].Hide() 
    15601552 
     
    15621554            for item in self.fittable_param: 
    15631555                if item[0].IsShown(): 
    1564                     #Skip the angle parameters if 1D data 
     1556                    # Skip the angle parameters if 1D data 
    15651557                    if self.data.__class__.__name__ != "Data2D" and \ 
    15661558                            not self.enable2D: 
     
    15711563                    if len(item) < 4: 
    15721564                        continue 
    1573                     ## hide statictext +/- 
    1574                     if item[3] != None and item[3].IsShown(): 
     1565                    # hide statictext +/- 
     1566                    if item[3] is not None and item[3].IsShown(): 
    15751567                        item[3].Hide() 
    1576                     ## hide textcrtl  for error after fit 
    1577                     if item[4] != None and item[4].IsShown(): 
     1568                    # hide textcrtl  for error after fit 
     1569                    if item[4] is not None and item[4].IsShown(): 
    15781570                        item[4].Hide() 
    15791571        return 
     
    15841576        """ 
    15851577        # get the default values 
    1586         if self.dxl == None: 
     1578        if self.dxl is None: 
    15871579            self.dxl = 0.0 
    1588         if self.dxw == None: 
     1580        if self.dxw is None: 
    15891581            self.dxw = "" 
    1590         if self.dx_min == None: 
     1582        if self.dx_min is None: 
    15911583            self.dx_min = SMEAR_SIZE_L 
    1592         if self.dx_max == None: 
     1584        if self.dx_max is None: 
    15931585            self.dx_max = SMEAR_SIZE_H 
    15941586 
     
    16111603        elif self.data.__class__.__name__ == "Data2D" or \ 
    16121604            self.enable2D: 
    1613             if data.dqx_data == None or  data.dqy_data == None: 
     1605            if data.dqx_data is None or data.dqy_data is None: 
    16141606                return 
    1615             elif self.current_smearer != None \ 
     1607            elif self.current_smearer is not None \ 
    16161608                and data.dqx_data.any() != 0 \ 
    16171609                and data.dqx_data.any() != 0: 
     
    16231615                return 
    16241616        # check if it is pinhole smear and get min max if it is. 
    1625         if data.dx != None and all(data.dx != 0): 
     1617        if data.dx is not None and not numpy.any(data.dx): 
    16261618            self.smear_type = "Pinhole" 
    16271619            self.dq_l = data.dx[0] 
     
    16291621 
    16301622        # check if it is slit smear and get min max if it is. 
    1631         elif data.dxl != None or data.dxw != None: 
     1623        elif data.dxl is not None or data.dxw is not None: 
    16321624            self.smear_type = "Slit" 
    1633             if data.dxl != None and all(data.dxl != 0): 
     1625            if data.dxl is not None and not numpy.all(data.dxl, 0): 
    16341626                self.dq_l = data.dxl[0] 
    1635             if data.dxw != None and all(data.dxw != 0): 
     1627            if data.dxw is not None and not numpy.all(data.dxw, 0): 
    16361628                self.dq_r = data.dxw[0] 
    1637         #return self.smear_type,self.dq_l,self.dq_r 
     1629        # return self.smear_type,self.dq_l,self.dq_r 
    16381630 
    16391631    def _show_smear_sizer(self): 
     
    16591651 
    16601652            self.smear_description_dqdata.Show(True) 
    1661             if self.smear_type != None: 
     1653            if self.smear_type is not None: 
    16621654                self.smear_description_smear_type.Show(True) 
    16631655                if self.smear_type == 'Slit': 
     
    17501742        Select an accuracy in 2D custom smear: Xhigh, High, Med, or Low 
    17511743        """ 
    1752         #event.Skip() 
     1744        # event.Skip() 
    17531745        # Check if the accuracy is same as before 
    1754         #self.smear2d_accuracy = event.GetEventObject().GetValue() 
     1746        # self.smear2d_accuracy = event.GetEventObject().GetValue() 
    17551747        self.smear2d_accuracy = self.smear_accuracy.GetValue() 
    17561748        if self.pinhole_smearer.GetValue(): 
     
    17581750        else: 
    17591751            self.onSmear(event=None) 
    1760             if self.current_smearer != None: 
     1752            if self.current_smearer is not None: 
    17611753                self.current_smearer.set_accuracy(accuracy=\ 
    17621754                                                  self.smear2d_accuracy) 
     
    17901782        Build a panel to allow to edit Mask 
    17911783        """ 
    1792         from sas.sasgui.guiframe.local_perspectives.plotting.masking \ 
    1793         import MaskPanel as MaskDialog 
     1784        from sas.sasgui.guiframe.local_perspectives.plotting.masking import \ 
     1785            MaskPanel as MaskDialog 
    17941786 
    17951787        self.panel = MaskDialog(base=self, data=self.data, id=wx.NewId()) 
     
    18021794        is_valid_qrange = self._update_paramv_on_fit() 
    18031795 
    1804         if is_valid_qrange and self.model != None: 
     1796        if is_valid_qrange and self.model is not None: 
    18051797            self.panel.MakeModal(False) 
    18061798            event.Skip() 
     
    18081800            self._draw_model() 
    18091801            self.show_npts2fit() 
    1810         elif self.model == None: 
     1802        elif self.model is None: 
    18111803            self.panel.MakeModal(False) 
    18121804            event.Skip() 
     
    18751867                    npts = len(data.x) 
    18761868                except: 
    1877                     msg = "Unable to find min/max/length of \n data named %s" % \ 
     1869                    msg = "Unable to find min/max/length of \n data named %s" %\ 
    18781870                                data.filename 
    18791871                    wx.PostEvent(self._manager.parent, StatusEvent(status=msg, 
     
    18921884                                               info="error")) 
    18931885                    raise ValueError, msg 
    1894                 ## Maximum value of data 
     1886                # Maximum value of data 
    18951887                qmax = math.sqrt(x * x + y * y) 
    18961888                npts = len(data.data) 
     
    19041896        flag = False 
    19051897        is_data = False 
     1898        npts = 0 
    19061899        try: 
    19071900            old_id = self.data.id 
     
    19151908                flag = True 
    19161909        if data is not None: 
    1917             id = data.id 
    19181910            if is_data: 
    19191911                self.graph_id = self.data.group_id 
     
    19301922            self._set_save_flag(False) 
    19311923        else: 
    1932             if self.model != None: 
     1924            if self.model is not None: 
    19331925                self._set_bookmark_flag(not self.batch_on) 
    19341926                self._keep.Enable(not self.batch_on) 
     
    19371929                self._set_preview_flag(True) 
    19381930 
    1939             self._set_smear(data) 
    19401931            # more disables for 2D 
    19411932            if self.data.__class__.__name__ == "Data2D" or \ 
     
    19441935                self.pinhole_smearer.Enable(True) 
    19451936                self.default_mask = copy.deepcopy(self.data.mask) 
    1946                 if self.data.err_data == None or\ 
    1947                         (self.data.err_data == 1).all() or\ 
    1948                         (self.data.err_data == 0).all(): 
     1937                if self.data.err_data is None or\ 
     1938                        numpy.all(err == 1 for err in self.data.err_data) or \ 
     1939                        not numpy.any(self.data.err_data): 
    19491940                    self.dI_didata.Enable(False) 
    19501941                    self.dI_noweight.SetValue(True) 
     
    19571948                self.slit_smearer.Enable(True) 
    19581949                self.pinhole_smearer.Enable(True) 
    1959                 if self.data.dy == None or\ 
    1960                      (self.data.dy == 1).all() or\ 
    1961                      (self.data.dy == 0).all(): 
     1950 
     1951                if self.data.dy is None or\ 
     1952                     numpy.all(self.data.dy == 1) or\ 
     1953                     not numpy.any(self.data.dy): 
    19621954                    self.dI_didata.Enable(False) 
    19631955                    self.dI_noweight.SetValue(True) 
     
    19671959                    self.dI_didata.SetValue(True) 
    19681960                    self.weightbt_string = self.dI_didata.GetLabelText() 
    1969             # Enable weighting radio uttons 
     1961            # Enable weighting radio buttons 
    19701962            self.dI_noweight.Enable(True) 
    19711963            self.dI_sqrdata.Enable(True) 
     
    19761968            data_name = self.data.name 
    19771969            _, _, npts = self.compute_data_range(self.data) 
    1978             #set maximum range for x in linear scale 
     1970            # set maximum range for x in linear scale 
    19791971            if not hasattr(self.data, "data"):  # Display only for 1D data fit 
    19801972                self.btEditMask.Disable() 
     
    19851977 
    19861978        self.Npts_total.SetValue(str(npts)) 
    1987         #default:number of data points selected to fit 
     1979        # default:number of data points selected to fit 
    19881980        self.Npts_fit.SetValue(str(npts)) 
    19891981        self.Npts_total.SetEditable(False) 
    1990         self.Npts_total.SetBackgroundColour(\ 
     1982        self.Npts_total.SetBackgroundColour( 
    19911983                                    self.GetParent().GetBackgroundColour()) 
    19921984 
     
    19981990        # send graph_id to page_finder 
    19991991        self._manager.set_graph_id(uid=self.uid, graph_id=self.graph_id) 
    2000         #focus the page 
     1992        # focus the page 
    20011993        if check_data_validity(data): 
    20021994            self.data_box_description.SetForegroundColour(wx.BLUE) 
     
    20102002        self.on_set_focus(None) 
    20112003        self.Refresh() 
    2012         #update model plot with new data information 
     2004        # update model plot with new data information 
    20132005        if flag: 
    2014             #set model view button 
    2015             self.onSmear(None) 
    2016  
    20172006            if self.data.__class__.__name__ == "Data2D": 
    20182007                self.enable2D = True 
     
    20222011                self.model_view.SetLabel("1D Mode") 
    20232012            self.model_view.Disable() 
    2024             #replace data plot on combo box selection 
    2025             #by removing the previous selected data 
     2013            #  replace data plot on combo box selection 
     2014            # by removing the previous selected data 
    20262015            try: 
    20272016                wx.PostEvent(self._manager.parent, 
     
    20302019            except: 
    20312020                pass 
    2032             #plot the current selected data 
     2021            # plot the current selected data 
    20332022            wx.PostEvent(self._manager.parent, 
    20342023                         NewPlotEvent(action="check", plot=self.data, 
     
    20502039            self.reset_page_helper(state) 
    20512040 
    2052             self.select_param(event=None) 
    2053             #Save state_fit 
     2041            self.select_param() 
     2042            # Save state_fit 
    20542043            self.save_current_state_fit() 
    20552044        except: 
     
    20902079        else: 
    20912080            for qx in self.data.x: 
    2092                 if qx >= qmin and qx <= qmax: 
     2081                if qmax >= qx >= qmin: 
    20932082                    npts2fit += 1 
    20942083        return npts2fit 
     
    21192108        # make sure stop button to fit button all the time 
    21202109        self._on_fit_complete() 
    2121         if out == None or not numpy.isfinite(chisqr): 
     2110        if out is None or not numpy.isfinite(chisqr): 
    21222111            raise ValueError, "Fit error occured..." 
    21232112 
     
    21262115        dispersity = '' 
    21272116 
    2128         #Hide textctrl boxes of errors. 
     2117        # Hide textctrl boxes of errors. 
    21292118        self._clear_Err_on_Fit() 
    21302119 
    2131         #Check if chi2 is finite 
    2132         if chisqr != None and numpy.isfinite(chisqr): 
    2133             #format chi2 
     2120        # Check if chi2 is finite 
     2121        if chisqr is not None and numpy.isfinite(chisqr): 
     2122            # format chi2 
    21342123            chi2 = format_number(chisqr, True) 
    21352124            self.tcChi.SetValue(chi2) 
     
    21382127            self.tcChi.SetValue("-") 
    21392128 
    2140         #Hide error title 
     2129        # Hide error title 
    21412130        if self.text2_3.IsShown() and not self.is_mac: 
    21422131            self.text2_3.Hide() 
     
    21452134            if self.enable_disp.GetValue(): 
    21462135                if hasattr(self, "text_disp_1"): 
    2147                     if self.text_disp_1 != None and not self.is_mac: 
     2136                    if self.text_disp_1 is not None and not self.is_mac: 
    21482137                        self.text_disp_1.Hide() 
    21492138        except: 
     
    21522141 
    21532142        i = 0 
    2154         #Set the panel when fit result are list 
     2143        # Set the panel when fit result are list 
    21552144 
    21562145        for item in self.param_toFit: 
    2157             if len(item) > 5 and item != None: 
     2146            if len(item) > 5 and item is not None: 
    21582147 
    21592148                if item[0].IsShown(): 
    2160                     ## reset error value to initial state 
     2149                    # reset error value to initial state 
    21612150                    if not self.is_mac: 
    21622151                        item[3].Hide() 
     
    21652154                        if item[1] == p_name[ind]: 
    21662155                            break 
    2167                     if len(out) > 0 and out[ind] != None: 
     2156                    if len(out) > 0 and out[ind] is not None: 
    21682157                        val_out = format_number(out[ind], True) 
    21692158                        item[2].SetValue(val_out) 
    21702159 
    2171                     if(cov != None and len(cov) == len(out)): 
     2160                    if(cov is not None and len(cov) == len(out)): 
    21722161                        try: 
    2173                             if dispersity != None: 
     2162                            if dispersity is not None: 
    21742163                                if self.enable_disp.GetValue(): 
    21752164                                    if hasattr(self, "text_disp_1"): 
    2176                                         if self.text_disp_1 != None: 
     2165                                        if self.text_disp_1 is not None: 
    21772166                                            if not self.text_disp_1.IsShown()\ 
    2178                                                 and not self.is_mac: 
     2167                                                  and not self.is_mac: 
    21792168                                                self.text_disp_1.Show(True) 
    21802169                        except: 
    21812170                            pass 
    21822171 
    2183                         if cov[ind] != None: 
     2172                        if cov[ind] is not None: 
    21842173                            if numpy.isfinite(float(cov[ind])): 
    21852174                                val_err = format_number(cov[ind], True) 
    2186                                 item[4].SetForegroundColour(wx.BLACK) 
     2175                                item[4].SetForegroundColour(wx.BLACK) 
    21872176                            else: 
    21882177                                val_err = 'NaN' 
     
    21962185            else: 
    21972186                raise ValueError, "onsetValues: Invalid parameters..." 
    2198         #Show error title when any errors displayed 
     2187        # Show error title when any errors displayed 
    21992188        if has_error: 
    22002189            if not self.text2_3.IsShown(): 
    22012190                self.text2_3.Show(True) 
    2202         ## save current state 
     2191        # save current state 
    22032192        self.save_current_state() 
    22042193 
     
    22072196            self.Refresh() 
    22082197        self._mac_sleep(0.1) 
    2209         #plot model ( when drawing, do not update chisqr value again) 
     2198        # plot model ( when drawing, do not update chisqr value again) 
    22102199        self._draw_model(update_chisqr=False, source='fit') 
    22112200 
     
    22232212        # compute weight for the current data 
    22242213        flag_weight = self.get_weight_flag() 
    2225         if is_2D == None: 
     2214        if is_2D is None: 
    22262215            is_2D = self._is_2D() 
    22272216        self._manager.set_fit_weight(uid=self.uid, 
     
    22422231        self._update_paramv_on_fit() 
    22432232 
    2244         if event != None: 
     2233        if event is not None: 
    22452234            tcrtl = event.GetEventObject() 
    22462235            # event case of radio button 
    2247             if tcrtl.GetValue() == True: 
     2236            if tcrtl.GetValue(): 
    22482237                self.dx_min = 0.0 
    22492238                self.dx_max = 0.0 
     
    22632252 
    22642253        self.sizer_set_smearer.Layout() 
    2265         ## we need FitInside here not just self.Layout to ensure all the sizers 
    2266         ## end up with the necessasary space to in the scroll panel. In 
    2267         ## particular the compute and fit buttons end up on top of each other 
    2268         ## PDB Nov 28 2015.  
     2254        # we need FitInside here not just self.Layout to ensure all the sizers 
     2255        # end up with the necessasary space to in the scroll panel. In 
     2256        # particular the compute and fit buttons end up on top of each other 
     2257        # PDB Nov 28 2015. 
    22692258        self.FitInside() 
    22702259 
    2271         if event != None: 
     2260        if event is not None: 
    22722261            event.Skip() 
    2273         #self._undo.Enable(True) 
     2262        # self._undo.Enable(True) 
    22742263        self.save_current_state() 
    22752264        event = PageInfoEvent(page=self) 
     
    23462335                get_pin_max.SetBackgroundColour("pink") 
    23472336                msg = "Model Error:This value can not be negative!!!" 
    2348             elif self.dx_min != None and self.dx_max != None: 
     2337            elif self.dx_min is not None and self.dx_max is not None: 
    23492338                if self._is_2D(): 
    23502339                    data.dqx_data[data.dqx_data == 0] = self.dx_min 
     
    23572346                                           self.dx_max + step / 1.1, 
    23582347                                           step) 
    2359             elif self.dx_min != None: 
     2348            elif self.dx_min is not None: 
    23602349                if self._is_2D(): 
    23612350                    data.dqx_data[data.dqx_data == 0] = self.dx_min 
    23622351                else: 
    23632352                    data.dx[data.dx == 0] = self.dx_min 
    2364             elif self.dx_max != None: 
     2353            elif self.dx_max is not None: 
    23652354                if self._is_2D(): 
    23662355                    data.dqy_data[data.dqy_data == 0] = self.dx_max 
     
    23702359            # 2D need to set accuracy 
    23712360            if self._is_2D(): 
    2372                 self.current_smearer.set_accuracy(accuracy=\ 
    2373                                                   self.smear2d_accuracy) 
    2374  
    2375         if msg != None: 
     2361                self.current_smearer.set_accuracy( 
     2362                    accuracy=self.smear2d_accuracy) 
     2363 
     2364        if msg is not None: 
    23762365            wx.PostEvent(self._manager.parent, StatusEvent(status=msg)) 
    23772366        else: 
    23782367            get_pin_min.SetBackgroundColour("white") 
    23792368            get_pin_max.SetBackgroundColour("white") 
    2380         ## set smearing value whether or not the data contain the smearing info 
     2369        # set smearing value whether or not the data contain the smearing info 
    23812370 
    23822371        enable_smearer = not self.disable_smearer.GetValue() 
     
    24042393        wx.CallAfter(self.save_current_state) 
    24052394 
    2406         if msg != None: 
     2395        if msg is not None: 
    24072396            return False 
    24082397        else: 
     
    24202409        msg = None 
    24212410        # for event given 
    2422         if event != None: 
     2411        if event is not None: 
    24232412            tcrtl = event.GetEventObject() 
    24242413            # event case of radio button 
     
    24412430        self._show_smear_sizer() 
    24422431        self.sizer_set_smearer.Layout() 
    2443         ## we need FitInside here not just self.Layout to ensure all the sizers 
    2444         ## end up with the necessasary space to in the scroll panel. In 
    2445         ## particular the compute and fit buttons end up on top of each other 
    2446         ## PDB Nov 28 2015.  
     2432        # we need FitInside here not just self.Layout to ensure all the sizers 
     2433        # end up with the necessasary space to in the scroll panel. In 
     2434        # particular the compute and fit buttons end up on top of each other 
     2435        # PDB Nov 28 2015. 
    24472436        self.FitInside() 
    24482437 
    2449         if event != None: 
     2438        if event is not None: 
    24502439            event.Skip() 
    24512440        self.save_current_state() 
    24522441        event = PageInfoEvent(page=self) 
    24532442        wx.PostEvent(self.parent, event) 
    2454         if msg != None: 
     2443        if msg is not None: 
    24552444            wx.PostEvent(self._manager.parent, StatusEvent(status=msg)) 
    24562445 
     
    25412530 
    25422531        self.current_smearer = smear_selection(data, self.model) 
    2543         ## set smearing value whether or not the data contain the smearing info 
     2532        # set smearing value whether or not the data contain the smearing info 
    25442533        enable_smearer = not self.disable_smearer.GetValue() 
    25452534        self._manager.set_smearer(smearer=self.current_smearer, 
     
    25642553        if self._is_changed_slit(): 
    25652554            msg = self._set_slit_smear() 
    2566         #self._undo.Enable(True) 
     2555        # self._undo.Enable(True) 
    25672556        self.save_current_state() 
    25682557 
    2569         if msg != None: 
     2558        if msg is not None: 
    25702559            return False 
    25712560        else: 
     
    25772566        are computed when fitting 
    25782567        """ 
    2579         if event != None: 
     2568        if event is not None: 
    25802569            event.Skip() 
    25812570        if self.data is None: 
     
    25902579 
    25912580        self.sizer_set_smearer.Layout() 
    2592         ## we need FitInside here not just self.Layout to ensure all the sizers 
    2593         ## end up with the necessasary space to in the scroll panel. In 
    2594         ## particular the compute and fit buttons end up on top of each other 
    2595         ## PDB Nov 28 2015.  
     2581        # we need FitInside here not just self.Layout to ensure all the sizers 
     2582        # end up with the necessasary space to in the scroll panel. In 
     2583        # particular the compute and fit buttons end up on top of each other 
     2584        # PDB Nov 28 2015. 
    25962585        self.FitInside() 
    25972586        self._set_weight() 
    25982587 
    2599         ## set smearing value whether or not the data contain the smearing info 
     2588        # set smearing value whether or not the data contain the smearing info 
    26002589        enable_smearer = not self.disable_smearer.GetValue() 
    26012590        wx.CallAfter(self._manager.set_smearer, uid=self.uid, 
     
    26182607        """ 
    26192608        self._get_smear_info() 
    2620         #renew smear sizer 
     2609        # renew smear sizer 
    26212610        if self.smear_type is not None: 
    26222611            self.smear_description_smear_type.SetValue(str(self.smear_type)) 
     
    26582647        """ 
    26592648        try: 
    2660             if event == None: 
     2649            if event is None: 
    26612650                output = "-" 
    26622651            elif not numpy.isfinite(event.output): 
     
    26932682        self._manager.set_param2fit(self.uid, param2fit) 
    26942683 
    2695     def select_param(self, event): 
     2684    def select_param(self, event=None): 
    26962685        """ 
    26972686        Select TextCtrl  checked for fitting purpose and stores them 
     
    27002689        self.param_toFit = [] 
    27012690        for item in self.parameters: 
    2702             #Skip t ifhe angle parameters if 1D data 
     2691            # Skip t ifhe angle parameters if 1D data 
    27032692            if self.data.__class__.__name__ != "Data2D" and\ 
    27042693                        not self.enable2D: 
    27052694                if item in self.orientation_params: 
    27062695                    continue 
    2707             #Select parameters to fit for list of primary parameters 
     2696            # Select parameters to fit for list of primary parameters 
    27082697            if item[0].GetValue() and item[0].IsShown(): 
    27092698                if not (item in self.param_toFit): 
     
    27142703                    self.param_toFit.remove(item) 
    27152704 
    2716         #Select parameters to fit for list of fittable parameters 
     2705        # Select parameters to fit for list of fittable parameters 
    27172706        #        with dispersion 
    27182707        for item in self.fittable_param: 
    2719             #Skip t ifhe angle parameters if 1D data 
     2708            # Skip t ifhe angle parameters if 1D data 
    27202709            if self.data.__class__.__name__ != "Data2D" and\ 
    27212710                        not self.enable2D: 
     
    27262715                    self.param_toFit.append(item) 
    27272716            else: 
    2728                 #remove parameters from the fitting list 
     2717                # remove parameters from the fitting list 
    27292718                if item in self.param_toFit: 
    27302719                    self.param_toFit.remove(item) 
    27312720 
    2732         #Calculate num. of angle parameters 
     2721        # Calculate num. of angle parameters 
    27332722        if self.data.__class__.__name__ == "Data2D" or \ 
    27342723                       self.enable2D: 
     
    27362725        else: 
    27372726            len_orient_para = len(self.orientation_params)  # assume even len 
    2738         #Total num. of angle parameters 
     2727        # Total num. of angle parameters 
    27392728        if len(self.fittable_param) > 0: 
    27402729            len_orient_para *= 2 
    27412730 
    27422731        self.save_current_state_fit() 
    2743         if event != None: 
    2744             ## post state to fit panel 
     2732        if event is not None: 
     2733            # post state to fit panel 
    27452734            event = PageInfoEvent(page=self) 
    27462735            wx.PostEvent(self.parent, event) 
     
    27682757        self.orientation_params_disp = [] 
    27692758 
    2770         if model == None: 
     2759        if model is None: 
    27712760            self.sizer3.Layout() 
    27722761            self.SetupScrolling() 
     
    27762765        boxsizer1 = wx.StaticBoxSizer(box_description, wx.VERTICAL) 
    27772766        sizer = wx.GridBagSizer(5, 5) 
    2778         ## save the current model 
     2767        # save the current model 
    27792768        self.model = model 
    27802769 
    27812770        keys = self.model.getParamList() 
    27822771 
    2783         #list of dispersion parameters 
     2772        # list of dispersion parameters 
    27842773        self.disp_list = self.model.getDispParamList() 
    27852774 
     
    28142803                return -1 
    28152804            # both have a number 
    2816             if num_a != None and num_b != None: 
     2805            if num_a is not None and num_b is not None: 
    28172806                if num_a > num_b: 
    28182807                    return -1 
     
    28272816                    return 1 
    28282817            # one of them has a number 
    2829             elif num_a != None: 
     2818            elif num_a is not None: 
    28302819                return 1 
    2831             elif num_b != None: 
     2820            elif num_b is not None: 
    28322821                return -1 
    28332822            # no numbers 
     
    28352824                return cmp(a.lower(), b.lower()) 
    28362825         
    2837         # keys obtained now from ordered dict, so commenting alphabetical ordering 
    2838         #keys.sort(custom_compare) 
     2826        # keys obtained now from ordered dict, so commenting alphabetical 
     2827        # ordering keys.sort(custom_compare) 
    28392828 
    28402829        iy = 0 
     
    28442833        ix += 1 
    28452834        self.text2_2 = wx.StaticText(self, wx.ID_ANY, 'Value') 
    2846         sizer.Add(self.text2_2, (iy, ix), (1, 1), \ 
     2835        sizer.Add(self.text2_2, (iy, ix), (1, 1), 
    28472836                            wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
    28482837        ix += 2 
    28492838        self.text2_3 = wx.StaticText(self, wx.ID_ANY, 'Error') 
    2850         sizer.Add(self.text2_3, (iy, ix), (1, 1), \ 
    2851                             wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
     2839        sizer.Add(self.text2_3, (iy, ix), (1, 1), 
     2840                  wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
    28522841        if not self.is_mac: 
    28532842            self.text2_3.Hide() 
    28542843        ix += 1 
    28552844        self.text2_min = wx.StaticText(self, wx.ID_ANY, 'Min') 
    2856         sizer.Add(self.text2_min, (iy, ix), (1, 1), \ 
    2857                             wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
    2858         #self.text2_min.Hide() 
     2845        sizer.Add(self.text2_min, (iy, ix), (1, 1), 
     2846                  wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
     2847        # self.text2_min.Hide() 
    28592848        ix += 1 
    28602849        self.text2_max = wx.StaticText(self, wx.ID_ANY, 'Max') 
    2861         sizer.Add(self.text2_max, (iy, ix), (1, 1), \ 
    2862                             wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
    2863         #self.text2_max.Hide() 
     2850        sizer.Add(self.text2_max, (iy, ix), (1, 1), 
     2851                  wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
     2852        # self.text2_max.Hide() 
    28642853        ix += 1 
    28652854        self.text2_4 = wx.StaticText(self, wx.ID_ANY, '[Units]') 
    2866         sizer.Add(self.text2_4, (iy, ix), (1, 1), \ 
    2867                             wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
     2855        sizer.Add(self.text2_4, (iy, ix), (1, 1), 
     2856                  wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
    28682857        self.text2_4.Hide() 
    28692858 
     
    28712860        for item in keys: 
    28722861 
    2873             if not item in self.disp_list and not item in \ 
     2862            if item not in self.disp_list and not item in \ 
    28742863                    self.model.orientation_params: 
    28752864 
    2876                 ##prepare a spot to store errors 
    2877                 if not item in self.model.details: 
     2865                # prepare a spot to store errors 
     2866                if item not in self.model.details: 
    28782867                    self.model.details[item] = ["", None, None] 
    28792868 
    28802869                iy += 1 
    28812870                ix = 0 
    2882                 if (self.model.__class__ in \ 
    2883                     self.model_list_box["Multi-Functions"] or \ 
     2871                if (self.model.__class__ in 
     2872                    self.model_list_box["Multi-Functions"] or 
    28842873                    self.temp_multi_functional)\ 
    28852874                    and (item in self.model.non_fittable): 
    28862875                    non_fittable_name = wx.StaticText(self, wx.ID_ANY, item) 
    2887                     sizer.Add(non_fittable_name, (iy, ix), (1, 1), \ 
     2876                    sizer.Add(non_fittable_name, (iy, ix), (1, 1), 
    28882877                            wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 21) 
    2889                     ## add parameter value 
     2878                    # add parameter value 
    28902879                    ix += 1 
    28912880                    value = self.model.getParam(item) 
    28922881                    if len(self.model.fun_list) > 0: 
    2893                         #num = item.split('_')[1][5:7] 
     2882                        # num = item.split('_')[1][5:7] 
    28942883                        fun_box = wx.ComboBox(self, wx.ID_ANY, size=(100, -1), 
    28952884                                    style=wx.CB_READONLY, name='%s' % item) 
    28962885                        self._set_fun_box_list(fun_box) 
    28972886                        fun_box.SetSelection(0) 
    2898                         #self.fun_box.SetToolTipString("A function 
     2887                        # self.fun_box.SetToolTipString("A function 
    28992888                        #    describing the interface") 
    29002889                        wx.EVT_COMBOBOX(fun_box, wx.ID_ANY, self._on_fun_box) 
     
    29032892                                                size=(_BOX_WIDTH, 20), 
    29042893                                style=wx.TE_PROCESS_ENTER, name='%s' % item) 
    2905                         fun_box.SetToolTipString(\ 
     2894                        fun_box.SetToolTipString( 
    29062895                                "Hit 'Enter' after typing to update the plot.") 
    29072896                        fun_box.SetValue(format_number(value, True)) 
     
    29112900                                                None, None]) 
    29122901                else: 
    2913                     ## add parameters name with checkbox for selecting to fit 
     2902                    # add parameters name with checkbox for selecting to fit 
    29142903                    cb = wx.CheckBox(self, wx.ID_ANY, item) 
    29152904                    cb.SetValue(CHECK_STATE) 
    29162905                    cb.SetToolTipString(" Check mark to fit.") 
    2917                     #cb.SetValue(True) 
     2906                    # cb.SetValue(True) 
    29182907                    wx.EVT_CHECKBOX(self, cb.GetId(), self.select_param) 
    29192908 
     
    29212910                              wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 5) 
    29222911 
    2923                     ## add parameter value 
     2912                    # add parameter value 
    29242913                    ix += 1 
    29252914                    value = self.model.getParam(item) 
    29262915                    ctl1 = ModelTextCtrl(self, wx.ID_ANY, size=(_BOX_WIDTH, 20), 
    29272916                                         style=wx.TE_PROCESS_ENTER) 
    2928                     ctl1.SetToolTipString(\ 
     2917                    ctl1.SetToolTipString( 
    29292918                                "Hit 'Enter' after typing to update the plot.") 
    29302919                    ctl1.SetValue(format_number(value, True)) 
    29312920                    sizer.Add(ctl1, (iy, ix), (1, 1), wx.EXPAND) 
    2932                     ## text to show error sign 
     2921                    # text to show error sign 
    29332922                    ix += 1 
    29342923                    text2 = wx.StaticText(self, wx.ID_ANY, '+/-') 
    2935                     sizer.Add(text2, (iy, ix), (1, 1), \ 
     2924                    sizer.Add(text2, (iy, ix), (1, 1), 
    29362925                              wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
    29372926                    if not self.is_mac: 
     
    29942983        iy += 1 
    29952984        ix = 0 
    2996         #Add tile for orientational angle 
     2985        # Add tile for orientational angle 
    29972986        for item in keys: 
    29982987            if item in self.model.orientation_params: 
     
    30012990                mag_on_button.SetToolTipString("Turn Pol Beam/Mag scatt on/off") 
    30022991                mag_on_button.Bind(wx.EVT_BUTTON, self._on_mag_on) 
    3003                 mag_angle_help_button = wx.Button(self, wx.ID_ANY, "Magnetic angles?") 
     2992                mag_angle_help_button = wx.Button(self, wx.ID_ANY, 
     2993                                                  "Magnetic angles?") 
    30042994                mag_angle_help_button.SetToolTipString("see angle definitions") 
    30052995                mag_help_button = wx.Button(self, wx.ID_ANY, "Mag HELP") 
    30062996                mag_help_button.SetToolTipString("Help on pol beam/mag fitting") 
    30072997                mag_help_button.Bind(wx.EVT_BUTTON, self._on_mag_help) 
    3008                 mag_angle_help_button.Bind(wx.EVT_BUTTON, \ 
     2998                mag_angle_help_button.Bind(wx.EVT_BUTTON, 
    30092999                                            self._on_mag_angle_help) 
    30103000                sizer.Add(orient_angle, (iy, ix), (1, 1), 
     
    30193009                          wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 15) 
    30203010 
    3021                 #handle the magnetic buttons 
    3022                 #clean this up so that assume mag is off then turn  
    3023                 #all buttons on IF mag has mag and has 2D 
     3011                # handle the magnetic buttons 
     3012                # clean this up so that assume mag is off then turn 
     3013                # all buttons on IF mag has mag and has 2D 
    30243014                if not self._has_magnetic: 
    30253015                    mag_on_button.Show(False) 
     
    30473037                break 
    30483038 
    3049         #For Gaussian only 
     3039        # For Gaussian only 
    30503040        if type.lower() != "array": 
    30513041            for item in self.model.orientation_params: 
     
    30533043                    if item in self.model.magnetic_params: 
    30543044                        continue 
    3055                 if not item in self.disp_list: 
    3056                     ##prepare a spot to store min max 
    3057                     if not item in self.model.details: 
     3045                if item not in self.disp_list: 
     3046                    # prepare a spot to store min max 
     3047                    if item not in self.model.details: 
    30583048                        self.model.details[item] = ["", None, None] 
    30593049 
    30603050                    iy += 1 
    30613051                    ix = 0 
    3062                     ## add parameters name with checkbox for selecting to fit 
     3052                    # add parameters name with checkbox for selecting to fit 
    30633053                    cb = wx.CheckBox(self, wx.ID_ANY, item) 
    30643054                    cb.SetValue(CHECK_STATE) 
     
    30733063                              wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 5) 
    30743064 
    3075                     ## add parameter value 
     3065                    # add parameter value 
    30763066                    ix += 1 
    30773067                    value = self.model.getParam(item) 
    30783068                    ctl1 = ModelTextCtrl(self, -1, size=(_BOX_WIDTH, 20), 
    30793069                                         style=wx.TE_PROCESS_ENTER) 
    3080                     ctl1.SetToolTipString(\ 
     3070                    ctl1.SetToolTipString( 
    30813071                                "Hit 'Enter' after typing to update the plot.") 
    30823072                    ctl1.SetValue(format_number(value, True)) 
     
    30873077                        ctl1.Hide() 
    30883078                    sizer.Add(ctl1, (iy, ix), (1, 1), wx.EXPAND) 
    3089                     ## text to show error sign 
     3079                    # text to show error sign 
    30903080                    ix += 1 
    30913081                    text2 = wx.StaticText(self, -1, '+/-') 
    3092                     sizer.Add(text2, (iy, ix), (1, 1), \ 
     3082                    sizer.Add(text2, (iy, ix), (1, 1), 
    30933083                              wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
    30943084 
     
    31553145        iy += 1 
    31563146        box_description.SetForegroundColour(wx.BLUE) 
    3157         #Display units text on panel 
     3147        # Display units text on panel 
    31583148        for item in keys: 
    31593149            if item in self.model.details: 
    31603150                self.text2_4.Show() 
    3161         #Fill the list of fittable parameters 
     3151        # Fill the list of fittable parameters 
    31623152        self.get_all_checked_params() 
    31633153        self.save_current_state_fit() 
     
    31713161        Get key stroke event 
    31723162        """ 
    3173         if self.data == None: 
     3163        if self.data is None: 
    31743164            return 
    31753165        # Figuring out key combo: Cmd for copy, Alt for paste 
Note: See TracChangeset for help on using the changeset viewer.