Changeset d620d03c in sasview for src/sas/sasgui/perspectives


Ignore:
Timestamp:
Apr 1, 2019 9:35:50 PM (6 years ago)
Author:
GitHub <noreply@…>
Parents:
fa307dd (diff), 0dde203 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
git-author:
Paul Kienzle <pkienzle@…> (04/01/19 21:35:50)
git-committer:
GitHub <noreply@…> (04/01/19 21:35:50)
Message:

Merge 0dde203f515bdd11871b41ee8734237ad1296b87 into fa307ddb8d25a41b44c02bd525f9727d5b4b7e5b

Location:
src/sas/sasgui/perspectives
Files:
4 added
14 edited

Legend:

Unmodified
Added
Removed
  • src/sas/sasgui/perspectives/calculator/data_editor.py

    r5251ec6 ra5e1b6ca  
    1919_QMAX_DEFAULT = 0.13 
    2020_NPTS_DEFAULT = 50 
    21 #Control panel width  
     21#Control panel width 
    2222if sys.platform.count("darwin") == 0: 
    2323    PANEL_WIDTH = 500 
     
    196196        summary = 'No data info available...' 
    197197        self.data_summary.SetValue(summary) 
    198         #self.summary_sizer.Add(self.data_summary, 1, wx.EXPAND|wx.ALL, 10)   
     198        #self.summary_sizer.Add(self.data_summary, 1, wx.EXPAND|wx.ALL, 10) 
    199199 
    200200    def _layout_button(self): 
     
    579579        wildcard = "CanSAS 1D files(*.xml)|*.xml" 
    580580        dlg = wx.FileDialog(self, "Choose a file", 
    581                             self._default_save_location, "", wildcard , wx.SAVE) 
     581                            self._default_save_location, "", wildcard , 
     582                            wx.FD_SAVE) 
    582583 
    583584        for data in self._data: 
  • src/sas/sasgui/perspectives/calculator/data_operator.py

    r5251ec6 r34f23c8  
    866866        except: 
    867867            # toolbar event 
    868             pos_x, pos_y = self.toolbar.GetPositionTuple() 
     868            pos_x, pos_y = self.toolbar.GetPosition() 
    869869            pos = (pos_x, pos_y + 5) 
    870870        self.PopupMenu(slicerpop, pos) 
  • src/sas/sasgui/perspectives/calculator/gen_scatter_panel.py

    r5251ec6 ra5e1b6ca  
    4343 
    4444_BOX_WIDTH = 76 
    45 #Slit length panel size  
     45#Slit length panel size 
    4646if sys.platform.count("win32") > 0: 
    4747    PANEL_TOP = 0 
     
    133133        #kwds['style'] = wx.SUNKEN_BORDER 
    134134        PanelBase.__init__(self) 
    135         #Font size  
     135        #Font size 
    136136        self.SetWindowVariant(variant=FONT_VARIANT) 
    137137        self.SetupScrolling() 
    138         #thread to read data  
     138        #thread to read data 
    139139        self.reader = None 
    140140        self.ext = None 
     
    218218        iy = 0 
    219219        param_title = wx.StaticText(self, -1, 'Parameter') 
    220         sizer.Add(param_title, (iy, ix), (1, 1), \ 
    221                             wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
     220        sizer.Add(param_title, (iy, ix), (1, 1), 
     221                  wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
    222222        ix += 1 
    223223        value_title = wx.StaticText(self, -1, 'Value') 
    224         sizer.Add(value_title, (iy, ix), (1, 1), \ 
    225                             wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
     224        sizer.Add(value_title, (iy, ix), (1, 1), 
     225                  wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
    226226        ix += 1 
    227227        unit_title = wx.StaticText(self, -1, 'Unit') 
    228         sizer.Add(unit_title, (iy, ix), (1, 1), \ 
    229                             wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
     228        sizer.Add(unit_title, (iy, ix), (1, 1), 
     229                  wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
    230230        for param in sorted(params.keys()): 
    231231            iy += 1 
    232232            ix = 0 
    233233            p_name = wx.StaticText(self, -1, param) 
    234             sizer.Add(p_name, (iy, ix), (1, 1), \ 
    235                             wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
     234            sizer.Add(p_name, (iy, ix), (1, 1), 
     235                      wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
    236236            ## add parameter value 
    237237            ix += 1 
     
    239239            ctl = InputTextCtrl(self, -1, size=(_BOX_WIDTH * 2, 20), 
    240240                                style=wx.TE_PROCESS_ENTER) 
    241             #ctl.SetToolTipString(\ 
     241            #ctl.SetToolTipString( 
    242242            #            "Hit 'Enter' after typing to update the plot.") 
    243243            ctl.SetValue(format_number(value, True)) 
     
    246246            ix += 1 
    247247            unit = wx.StaticText(self, -1, details[param][0]) 
    248             sizer.Add(unit, (iy, ix), (1, 1), \ 
    249                             wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
     248            sizer.Add(unit, (iy, ix), (1, 1), 
     249                      wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
    250250            self.parameters.append([p_name, ctl, unit]) 
    251251 
     
    340340        iy = 0 
    341341        name = wx.StaticText(self, -1, 'No. of Qx (Qy) bins: ') 
    342         sizer.Add(name, (iy, ix), (1, 1), \ 
    343                         wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
     342        sizer.Add(name, (iy, ix), (1, 1), 
     343                  wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
    344344        ## add parameter value 
    345345        ix += 1 
    346346        self.npt_ctl = InputTextCtrl(self, -1, size=(_BOX_WIDTH * 1.5, 20), 
    347                             style=wx.TE_PROCESS_ENTER) 
     347                                     style=wx.TE_PROCESS_ENTER) 
    348348        self.npt_ctl.Bind(wx.EVT_TEXT, self._onparamEnter) 
    349349        self.npt_ctl.SetValue(format_number(self.npts_x, True)) 
     
    352352        ix += 1 
    353353        unit = wx.StaticText(self, -1, '') 
    354         sizer.Add(unit, (iy, ix), (1, 1), \ 
    355                         wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
     354        sizer.Add(unit, (iy, ix), (1, 1), 
     355                  wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
    356356        iy += 1 
    357357        ix = 0 
    358358        name = wx.StaticText(self, -1, 'Qx (Qy) Max: ') 
    359         sizer.Add(name, (iy, ix), (1, 1), \ 
    360                         wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
     359        sizer.Add(name, (iy, ix), (1, 1), 
     360                  wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
    361361        ## add parameter value 
    362362        ix += 1 
     
    369369        ix += 1 
    370370        unit = wx.StaticText(self, -1, '[1/A]') 
    371         sizer.Add(unit, (iy, ix), (1, 1), \ 
    372                         wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
     371        sizer.Add(unit, (iy, ix), (1, 1), 
     372                  wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
    373373        self.qrange_sizer.Add(sizer, 0, wx.LEFT, 10) 
    374374 
     
    684684        self.sld_data = self.parent.get_sld_from_omf() 
    685685        output = self.sld_data 
    686         #frame_size = wx.Size(470, 470)     
     686        #frame_size = wx.Size(470, 470) 
    687687        self.plot_frame = PlotFrame(self, -1, 'testView') 
    688688        frame = self.plot_frame 
     
    703703        panel.dimension = 3 
    704704        graph_title = self._sld_plot_helper(ax, output, has_arrow) 
    705         # Use y, z axes (in mpl 3d) as z, y axes  
     705        # Use y, z axes (in mpl 3d) as z, y axes 
    706706        # that consistent with our SAS detector coords. 
    707         ax.set_xlabel('x ($\A%s$)' % output.pos_unit) 
    708         ax.set_ylabel('z ($\A%s$)' % output.pos_unit) 
    709         ax.set_zlabel('y ($\A%s$)' % output.pos_unit) 
     707        # Format Angstrom units (A) as latex $\AA$ 
     708        units = output.pos_unit if output.pos_unit != "A" else r"$\AA$" 
     709        ax.set_xlabel('x (%s)' % units) 
     710        ax.set_ylabel('z (%s)' % units) 
     711        ax.set_zlabel('y (%s)' % units) 
    710712        panel.subplot.figure.subplots_adjust(left=0.05, right=0.95, 
    711713                                             bottom=0.05, top=0.96) 
     
    741743            marker = 'o' 
    742744            m_size = 3.5 
    743         sld_tot = (np.fabs(sld_mx) + np.fabs(sld_my) + \ 
    744                    np.fabs(sld_mz) + np.fabs(output.sld_n)) 
     745        sld_tot = (np.fabs(sld_mx) + np.fabs(sld_my) 
     746                   + np.fabs(sld_mz) + np.fabs(output.sld_n)) 
    745747        is_nonzero = sld_tot > 0.0 
    746748        is_zero = sld_tot == 0.0 
     
    766768                        pos_y[chosen_color], marker, c=color, alpha=0.5, 
    767769                        markeredgecolor=color, markersize=m_size, label=key) 
    768         # III. Plot All others         
     770        # III. Plot All others 
    769771        if np.any(other_color): 
    770772            a_name = '' 
     
    10281030        self.data = Data2D() 
    10291031        qmax = self.qmax_x #/ np.sqrt(2) 
    1030         self.data.xaxis('\\rm{Q_{x}}', '\AA^{-1}') 
    1031         self.data.yaxis('\\rm{Q_{y}}', '\AA^{-1}') 
     1032        self.data.xaxis(r'\rm{Q_{x}}', r'\AA^{-1}') 
     1033        self.data.yaxis(r'\rm{Q_{y}}', r'\AA^{-1}') 
    10321034        self.data.is_data = False 
    10331035        self.data.id = str(self.uid) + " GenData" 
     
    11201122        new_plot.dx = data.dx 
    11211123        new_plot.dy = data.dy 
    1122         new_plot.xaxis('\\rm{Q_{x}}', '\AA^{-1}') 
    1123         new_plot.yaxis('\\rm{Intensity}', 'cm^{-1}') 
     1124        new_plot.xaxis(r'\rm{Q_{x}}', r'\AA^{-1}') 
     1125        new_plot.yaxis(r'\rm{Intensity}', 'cm^{-1}') 
    11241126        new_plot.is_data = False 
    11251127        new_plot.id = str(self.uid) + " GenData1D" 
     
    11271129        new_plot.name = model.name + '1d' 
    11281130        new_plot.title = "Generic model1D " 
    1129         new_plot.id = str(page_id) + ': ' + self.file_name \ 
    1130                         + ' #%s' % str(self.graph_num) + "_1D" 
    1131         new_plot.group_id = str(page_id) + " Model1D" + \ 
    1132                              ' #%s' % str(self.graph_num) + "_1D" 
     1131        new_plot.id = (str(page_id) + ': ' + self.file_name 
     1132                       + ' #%s' % str(self.graph_num) + "_1D") 
     1133        new_plot.group_id = (str(page_id) + " Model1D" 
     1134                             + ' #%s' % str(self.graph_num) + "_1D") 
    11331135        new_plot.is_data = False 
    11341136 
     
    11751177        new_plot.name = model.name + '2d' 
    11761178        new_plot.title = "Generic model 2D " 
    1177         new_plot.id = str(page_id) + ': ' + self.file_name \ 
    1178                         + ' #%s' % str(self.graph_num) + "_2D" 
    1179         new_plot.group_id = str(page_id) + " Model2D" \ 
    1180                         + ' #%s' % str(self.graph_num) + "_2D" 
     1179        new_plot.id = (str(page_id) + ': ' + self.file_name 
     1180                       + ' #%s' % str(self.graph_num) + "_2D") 
     1181        new_plot.group_id = (str(page_id) + " Model2D" 
     1182                             + ' #%s' % str(self.graph_num) + "_2D") 
    11811183        new_plot.detector = data.detector 
    11821184        new_plot.source = data.source 
     
    12431245                               *args, **kwds) 
    12441246        PanelBase.__init__(self) 
    1245         #Font size  
     1247        #Font size 
    12461248        self.SetWindowVariant(variant=FONT_VARIANT) 
    12471249        self.SetupScrolling() 
     
    14461448            ix = 0 
    14471449            name = wx.StaticText(self, -1, key) 
    1448             sizer.Add(name, (iy, ix), (1, 1), \ 
    1449                             wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
     1450            sizer.Add(name, (iy, ix), (1, 1), 
     1451                      wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
    14501452            ## add parameter value 
    14511453            ix += 1 
     
    14591461            s_unit = '[' + omfdata.sld_unit + ']' 
    14601462            unit = wx.StaticText(self, -1, s_unit) 
    1461             sizer.Add(unit, (iy, ix), (1, 1), \ 
    1462                             wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
     1463            sizer.Add(unit, (iy, ix), (1, 1), 
     1464                      wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
    14631465            self.slds.append([key, ctl, unit]) 
    14641466        self.sld_sizer.Add(sizer, 0, wx.LEFT, 10) 
     
    14811483            ix = 0 
    14821484            name = wx.StaticText(self, -1, key) 
    1483             sizer.Add(name, (iy, ix), (1, 1), \ 
    1484                             wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
     1485            sizer.Add(name, (iy, ix), (1, 1), 
     1486                      wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
    14851487            ## add parameter value 
    14861488            ix += 1 
     
    14941496            ix += 1 
    14951497            unit = wx.StaticText(self, -1, '') 
    1496             sizer.Add(unit, (iy, ix), (1, 1), \ 
    1497                             wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
     1498            sizer.Add(unit, (iy, ix), (1, 1), 
     1499                      wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
    14981500            self.nodes.append([key, ctl, unit]) 
    14991501        self.node_sizer.Add(sizer, 0, wx.LEFT, 10) 
     
    15161518            ix = 0 
    15171519            name = wx.StaticText(self, -1, key) 
    1518             sizer.Add(name, (iy, ix), (1, 1), \ 
    1519                             wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
     1520            sizer.Add(name, (iy, ix), (1, 1), 
     1521                      wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
    15201522            ## add parameter value 
    15211523            ix += 1 
     
    15301532            p_unit = '[' + omfdata.pos_unit + ']' 
    15311533            unit = wx.StaticText(self, -1, p_unit) 
    1532             sizer.Add(unit, (iy, ix), (1, 1), \ 
    1533                             wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
     1534            sizer.Add(unit, (iy, ix), (1, 1), 
     1535                      wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
    15341536            self.stepsize.append([key, ctl, unit]) 
    15351537        self.step_sizer.Add(sizer, 0, wx.LEFT, 10) 
     
    16261628            for ctr_list in self.slds: 
    16271629                ctr_list[1].Enable(False) 
    1628                 #break    
     1630                #break 
    16291631            return 
    16301632 
     
    16371639                    max_val = np.max(sld_list[key]) 
    16381640                    mean_val = np.mean(sld_list[key]) 
    1639                     enable = (min_val == max_val) and \ 
    1640                              sld_data.pix_type == 'pixel' 
     1641                    enable = ((min_val == max_val) 
     1642                              and sld_data.pix_type == 'pixel') 
    16411643                    ctr_list[1].SetValue(format_number(mean_val, True)) 
    16421644                    ctr_list[1].Enable(enable) 
     
    16691671                            location, "sld_file", 
    16701672                             extension, 
    1671                              wx.SAVE) 
     1673                             wx.FD_SAVE) 
    16721674        if dlg.ShowModal() == wx.ID_OK: 
    16731675            path = dlg.GetPath() 
  • src/sas/sasgui/perspectives/calculator/image_viewer.py

    r5251ec6 r34f23c8  
    6262                # Any other formats (tiff, jpeg, etc) are passed 
    6363                # to PIL which seems to have a problem in version 
    64                 # 1.1.7 that causes a close error which shows up in  
     64                # 1.1.7 that causes a close error which shows up in 
    6565                # the log file.  This does not seem to have any adverse 
    6666                # effects.  PDB   --- September 17, 2017. 
     
    383383                print(err_msg) 
    384384 
    385         self.OnClose(event) 
     385        self.EndModal(wx.ID_OK) 
    386386 
    387387    def convert_image(self, rgb, xmin, xmax, ymin, ymax, zscale): 
     
    417417        output.ymin = ymin 
    418418        output.ymax = ymax 
    419         output.xaxis('\\rm{Q_{x}}', '\AA^{-1}') 
    420         output.yaxis('\\rm{Q_{y}}', '\AA^{-1}') 
     419        output.xaxis(r'\rm{Q_{x}}', r'\AA^{-1}') 
     420        output.yaxis(r'\rm{Q_{y}}', r'\AA^{-1}') 
    421421        # Store loading process information 
    422422        output.meta_data['loader'] = self.title.split('.')[-1] + "Reader" 
     
    451451        # clear event 
    452452        event.Skip() 
    453         self.Destroy() 
     453        self.EndModal(wx.ID_CANCEL) 
     454        #self.Destroy() 
    454455 
    455456if __name__ == "__main__": 
  • src/sas/sasgui/perspectives/corfunc/corfunc_panel.py

    r82d88d5 ra5e1b6ca  
    337337        dlg = wx.FileDialog(self, "Choose a file", 
    338338                            default_save_location, \ 
    339                             self.window_caption, "*.crf", wx.SAVE) 
     339                            self.window_caption, "*.crf", wx.FD_SAVE) 
    340340        if dlg.ShowModal() == wx.ID_OK: 
    341341            path = dlg.GetPath() 
  • src/sas/sasgui/perspectives/fitting/basepage.py

    rcb64d86 ra5e1b6ca  
    676676                        self._manager.parent._default_save_location 
    677677        dlg = wx.FileDialog(self, "Choose a file", self._default_save_location, 
    678                             self.window_caption, "*.fitv", wx.SAVE) 
     678                            self.window_caption, "*.fitv", wx.FD_SAVE) 
    679679 
    680680        if dlg.ShowModal() == wx.ID_OK: 
  • src/sas/sasgui/perspectives/fitting/report_dialog.py

    r44e8f48 ra5e1b6ca  
    4949        dlg = wx.FileDialog(self, "Choose a file", 
    5050                            wildcard=self.wild_card, 
    51                             style=wx.SAVE | wx.OVERWRITE_PROMPT | wx.CHANGE_DIR) 
     51                            style=wx.FD_SAVE | wx.OVERWRITE_PROMPT | wx.CHANGE_DIR) 
    5252        dlg.SetFilterIndex(0)  # Set .html files to be default 
    5353 
  • src/sas/sasgui/perspectives/invariant/invariant_panel.py

    r5251ec6 ra5e1b6ca  
    12551255        dlg = wx.FileDialog(self, "Choose a file", 
    12561256                            self._default_save_location, \ 
    1257                             self.window_caption, "*.inv", wx.SAVE) 
     1257                            self.window_caption, "*.inv", wx.FD_SAVE) 
    12581258        if dlg.ShowModal() == wx.ID_OK: 
    12591259            path = dlg.GetPath() 
  • src/sas/sasgui/perspectives/invariant/report_dialog.py

    r5251ec6 ra5e1b6ca  
    5252        dlg = wx.FileDialog(self, "Choose a file", 
    5353                            wildcard=self.wild_card, 
    54                             style=wx.SAVE | wx.OVERWRITE_PROMPT | wx.CHANGE_DIR) 
     54                            style=wx.FD_SAVE | wx.OVERWRITE_PROMPT | wx.CHANGE_DIR) 
    5555        dlg.SetFilterIndex(0)  # Set .html files to be default 
    5656 
  • src/sas/sasgui/perspectives/pr/explore_dialog.py

    r5251ec6 r34f23c8  
    5050    window_caption = "D Explorer" 
    5151 
    52     def __init__(self, d_min, d_max, parent, id= -1, color=None, \ 
     52    def __init__(self, d_min, d_max, parent, id= -1, color=None, 
    5353                 dpi=None, style=wx.NO_FULL_REPAINT_ON_RESIZE, **kwargs): 
    5454        """ 
     
    7777        self.plot.symbol = GUIFRAME_ID.CURVE_SYMBOL_NUM 
    7878 
    79         # Graph         
     79        # Graph 
    8080        self.graph = Graph() 
    81         self.graph.xaxis("\\rm{D_{max}}", 'A') 
    82         self.graph.yaxis("\\rm{%s}" % DEFAULT_OUTPUT, "") 
     81        self.graph.xaxis(r"\rm{D_{max}}", 'A') 
     82        self.graph.yaxis(r"\rm{%s}" % DEFAULT_OUTPUT, "") 
    8383        self.graph.add(self.plot) 
    8484        self.graph.render(self) 
     
    133133        # Dictionary of outputs 
    134134        self.outputs = {} 
    135         self.outputs['Chi2/dof'] = ["\chi^2/dof", "a.u.", self.chi2] 
     135        self.outputs['Chi2/dof'] = [r"\chi^2/dof", "a.u.", self.chi2] 
    136136        self.outputs['Oscillation parameter'] = ["Osc", "a.u.", self.osc] 
    137137        self.outputs['Positive fraction'] = ["P^+", "a.u.", self.pos] 
    138         self.outputs['1-sigma positive fraction'] = ["P^+_{1\ \sigma}", 
     138        self.outputs['1-sigma positive fraction'] = [r"P^+_{1\ \sigma}", 
    139139                                                     "a.u.", self.pos_err] 
    140140        self.outputs['Rg'] = ["R_g", "A", self.rg] 
  • src/sas/sasgui/perspectives/pr/inversion_panel.py

    r5251ec6 ra5e1b6ca  
    282282        dlg = wx.FileDialog(self, "Choose a file", 
    283283                            self._default_save_location, 
    284                             self.window_caption, "*.prv", wx.SAVE) 
     284                            self.window_caption, "*.prv", wx.FD_SAVE) 
    285285        if dlg.ShowModal() == wx.ID_OK: 
    286286            path = dlg.GetPath() 
  • src/sas/sasgui/perspectives/simulation/SimCanvas.py

    r959eb01 r34f23c8  
    22This software was developed by the University of Tennessee as part of the 
    33Distributed Data Analysis of Neutron Scattering Experiments (DANSE) 
    4 project funded by the US National Science Foundation.  
     4project funded by the US National Science Foundation. 
    55 
    66See the license text in license.txt 
     
    3232except ImportError: 
    3333    haveOpenGL = False 
    34      
     34 
    3535# Color set 
    36 DEFAULT_COLOR = [1.0, 1.0, 0.0, .2]     
     36DEFAULT_COLOR = [1.0, 1.0, 0.0, .2] 
    3737COLOR_RED     = [1.0, 0.0, 0.0, .2] 
    3838COLOR_GREEN   = [0.0, 1.0, 0.0, .2] 
     
    4848class SimPanel(wx.Panel): 
    4949    """ 
    50         3D viewer to support real-space simulation.  
     50        3D viewer to support real-space simulation. 
    5151    """ 
    5252    window_name = "3dview" 
    5353    window_caption = "3D viewer" 
    54      
     54 
    5555    def __init__(self, parent, id = -1, plots = None, standalone=False, **kwargs): 
    5656        wx.Panel.__init__(self, parent, id = id, **kwargs) 
    5757        self.parent = parent 
    58      
     58 
    5959        #Add a sizer 
    6060        mainSizer = wx.BoxSizer(wx.VERTICAL) 
    6161        sliderSizer = wx.BoxSizer(wx.HORIZONTAL) 
    62      
    63         self.canvas    = CanvasBase(self)  
     62 
     63        self.canvas    = CanvasBase(self) 
    6464        self.canvas.SetMinSize((200,2100)) 
    6565 
     
    7272        self.SetSizer(mainSizer) 
    7373        self.Bind(wx.EVT_CONTEXT_MENU, self._on_context_menu) 
    74          
    75   
     74 
     75 
    7676    def _on_context_menu(self, event): 
    7777        """ 
     
    8383        slicerpop.Append(id, '&Reset 3D View') 
    8484        wx.EVT_MENU(self, id, self.canvas.resetView) 
    85         
     85 
    8686        pos = event.GetPosition() 
    8787        pos = self.ScreenToClient(pos) 
    88         self.PopupMenu(slicerpop, pos)         
    89      
     88        self.PopupMenu(slicerpop, pos) 
     89 
    9090class CanvasBase(glcanvas.GLCanvas): 
    9191    """ 
     
    9494    window_name = "Simulation" 
    9595    window_caption = "Simulation" 
    96      
     96 
    9797    def __init__(self, parent): 
    9898        glcanvas.GLCanvas.__init__(self, parent, -1) 
     
    113113        self.Bind(wx.EVT_MOTION, self.OnMouseMotion) 
    114114        self.Bind(wx.EVT_MOUSEWHEEL, self._onMouseWheel) 
    115          
     115 
    116116        self.initialized = False 
    117117        self.shapes = [] 
    118118        self.parent = parent 
    119          
     119 
    120120        # Reference vectors 
    121121        self.x_vec = [1,0,0] 
    122122        self.y_vec = [0,1,0] 
    123          
     123 
    124124        self.mouse_down = False 
    125125        self.scale = 1.0 
    126126        self.zoom  = 1.0 
    127127        self.translation = [0,0,0] 
    128          
     128 
    129129        # Bind to Edit events 
    130130        self.parent.Bind(ShapeParameters.EVT_EDIT_SHAPE, self._onEditShape) 
    131          
     131 
    132132    def resetView(self, evt=None): 
    133133        """ 
     
    140140        glLoadIdentity() 
    141141        self.Refresh() 
    142                  
     142 
    143143    def _onEditShape(self, evt): 
    144144        evt.Skip() 
     
    158158        event.Skip() 
    159159 
    160     def OnPaint(self, event):      
     160    def OnPaint(self, event): 
    161161        size = self.GetClientSize() 
    162162        side = size.width 
    163163        if size.height<size.width: 
    164164            side = size.height 
    165          
     165 
    166166        if self.GetContext(): 
    167167            glViewport(0, 0, side, side) 
    168168            self.SetMinSize((side,side)) 
    169              
     169 
    170170        dc = wx.PaintDC(self) 
    171171        self.SetCurrent() 
     
    174174            self.init = True 
    175175        self.OnDraw() 
    176         event.Skip()         
    177          
     176        event.Skip() 
     177 
    178178    def _onMouseWheel(self, evt): 
    179179        # Initialize mouse position so we don't have unwanted rotation 
    180180        self.x, self.y = self.lastx, self.lasty = evt.GetPosition() 
    181181        self.tr_x, self.tr_y = self.tr_lastx, self.tr_lasty = evt.GetPosition() 
    182          
     182 
    183183        scale = 1.15 
    184184        if evt.GetWheelRotation()<0: 
    185185            scale = 1.0/scale 
    186               
    187         self.zoom *= scale              
    188               
     186 
     187        self.zoom *= scale 
     188 
    189189        glScale(scale, scale, scale) 
    190190        self.Refresh(False) 
    191          
     191 
    192192    def OnMouseDown(self, evt): 
    193193        self.SetFocus() 
     
    214214        slicerpop.Append(id, '&Reset 3D View') 
    215215        wx.EVT_MENU(self, id, self.resetView) 
    216         
     216 
    217217        pos = event.GetPosition() 
    218218        #pos = self.ScreenToClient(pos) 
    219         self.PopupMenu(slicerpop, pos)         
     219        self.PopupMenu(slicerpop, pos) 
    220220 
    221221    def OnMouseMotion(self, evt): 
     
    223223            self.tr_lastx, self.tr_lasty = self.tr_x, self.tr_y 
    224224            x, y = evt.GetPosition() 
    225              
     225 
    226226            # Min distance to do anything 
    227227            if math.fabs(self.lastx-x)>10 or math.fabs(self.lasty-y)>10: 
    228                  
     228 
    229229                self.lastx, self.lasty = self.x, self.y 
    230          
    231                  
     230 
     231 
    232232                if math.fabs(self.lastx-x)>math.fabs(self.lasty-y): 
    233233                    self.x = x 
    234234                else: 
    235235                    self.y = y 
    236                  
     236 
    237237                #self.x, self.y = evt.GetPosition() 
    238238                self.Refresh(False) 
    239                  
     239 
    240240        elif evt.Dragging() and evt.RightIsDown(): 
    241241            self.lastx, self.lasty = self.x, self.y 
     
    243243            self.tr_x, self.tr_y = evt.GetPosition() 
    244244            self.Refresh(False) 
    245              
    246     def InitGL( self ):       
     245 
     246    def InitGL( self ): 
    247247        glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGBA) 
    248248        #glShadeModel(GL_FLAT); 
    249          
     249 
    250250        glMatrixMode(GL_PROJECTION) 
    251          
     251 
    252252        glLight(GL_LIGHT0, GL_AMBIENT, [.2, .2, .2, 0]) 
    253          
     253 
    254254        # Object color 
    255255        #glLight(GL_LIGHT0, GL_DIFFUSE, COLOR_BLUE) 
    256          
     256 
    257257        glLight(GL_LIGHT0, GL_POSITION, [1.0, 1.0, -1.0, 0.0]) 
    258          
    259          
     258 
     259 
    260260        glLightModelfv(GL_LIGHT_MODEL_AMBIENT, [1, 1, 1, 0]) 
    261261        glEnable(GL_LIGHTING) 
     
    263263        glEnable(GL_BLEND) 
    264264        glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 
    265          
     265 
    266266        glEnable ( GL_ALPHA_TEST ) ; 
    267267        glAlphaFunc ( GL_GREATER, 0 ) ; 
    268268        glPixelStorei(GL_PACK_ALIGNMENT, 1) 
    269269        glPixelStorei(GL_UNPACK_ALIGNMENT, 1) 
    270          
     270 
    271271        glEnable(GL_NORMALIZE) 
    272272        glDepthFunc(GL_LESS) 
     
    276276        #glClear (GL_COLOR_BUFFER_BIT); 
    277277        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) 
    278          
    279          
     278 
     279 
    280280        gluPerspective(0, 1.0, 0.1, 60.0); 
    281281 
     
    296296        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) 
    297297        # use a fresh transformation matrix 
    298          
     298 
    299299        # get the max object size to re-scale 
    300300        max_size = 1.0 
     
    305305            if l>max_size: 
    306306                max_size = l 
    307          
     307 
    308308        max_size *= 1.05 
    309309        scale = self.scale/max_size 
    310310        glScale(scale, scale, scale) 
    311311        self.scale = max_size 
    312          
     312 
    313313        self.drawAxes() 
    314          
     314 
    315315        if self.mouse_down: 
    316316            if math.fabs((self.x - self.lastx))>math.fabs((self.y - self.lasty)): 
    317                 angle = 10.0*(self.x - self.lastx) / math.fabs(self.x - self.lastx)  
     317                angle = 10.0*(self.x - self.lastx) / math.fabs(self.x - self.lastx) 
    318318                glRotate(angle, self.y_vec[0], self.y_vec[1], self.y_vec[2]); 
    319319                self._rot_y(angle) 
    320320            elif math.fabs(self.y - self.lasty)>0: 
    321                 angle = 10.0*(self.y - self.lasty) / math.fabs(self.y - self.lasty)  
     321                angle = 10.0*(self.y - self.lasty) / math.fabs(self.y - self.lasty) 
    322322                glRotate(angle, self.x_vec[0], self.x_vec[1], self.x_vec[2]); 
    323323                self._rot_x(angle) 
     
    325325            self.lasty = self.y 
    326326            self.lastx = self.x 
    327          
    328             w,h = self.GetVirtualSizeTuple() 
    329          
     327 
     328            w, h = self.GetVirtualSize() 
     329 
    330330            # Translate in the x-y plane 
    331331            vx = self.x_vec[0] * 2.0*float(self.tr_x - self.tr_lastx)/w \ 
     
    335335            vz = self.x_vec[2] * 2.0*float(self.tr_x - self.tr_lastx)/w \ 
    336336               + self.y_vec[2] * 2.0*float(self.tr_lasty - self.tr_y)/h 
    337              
    338             glTranslate(self.scale*vx/self.zoom, self.scale*vy/self.zoom, self.scale*vz/self.zoom)     
    339                  
     337 
     338            glTranslate(self.scale*vx/self.zoom, self.scale*vy/self.zoom, self.scale*vz/self.zoom) 
     339 
    340340        # push into visible buffer 
    341341        self.SwapBuffers() 
    342          
     342 
    343343    def _matrix_mult(self, v, axis, angle): 
    344344        c = math.cos(angle) 
    345         s = math.sin(angle)  
     345        s = math.sin(angle) 
    346346        x = axis[0] 
    347347        y = axis[1] 
     
    351351        vz = v[0]*(x*z*(1-c)-y*s) + v[1]*(y*z*(1-c)+x*s) + v[2]*(z*z*(1-c)+c) 
    352352        return [vx, vy, vz] 
    353      
     353 
    354354    def _rot_y(self, theta): 
    355355        """ 
    356356            Rotate the view by theta around the y-axis 
    357357        """ 
    358         angle = theta/180.0*math.pi  
     358        angle = theta/180.0*math.pi 
    359359        axis = self.y_vec 
    360360        self.x_vec = self._matrix_mult(self.x_vec, self.y_vec, -angle) 
    361          
     361 
    362362    def _rot_x(self, theta): 
    363363        """ 
     
    366366        angle = theta/180.0*math.pi 
    367367        self.y_vec = self._matrix_mult(self.y_vec, self.x_vec, -angle) 
    368          
    369          
     368 
     369 
    370370    def addShape(self, shape, name=None): 
    371371        """ 
     
    403403 
    404404    def drawAxes(self): 
    405         """  
     405        """ 
    406406            Draw 3D axes 
    407407        """ 
    408408        pos = self.scale * 0.7 
    409         
     409 
    410410        # Z-axis is red 
    411         zaxis= Arrow(x=pos, y=-pos, z=0, r_cyl=self.scale*0.005, r_cone=self.scale*0.01,  
     411        zaxis= Arrow(x=pos, y=-pos, z=0, r_cyl=self.scale*0.005, r_cone=self.scale*0.01, 
    412412                     l_cyl=self.scale*0.1, l_cone=self.scale*0.05) 
    413413        zaxis.color = COLOR_RED 
    414414        zaxis.draw() 
    415          
     415 
    416416        # Y-axis is yellow 
    417         yaxis= Arrow(x=pos, y=-pos, z=0, r_cyl=self.scale*0.005, r_cone=self.scale*0.01,  
     417        yaxis= Arrow(x=pos, y=-pos, z=0, r_cyl=self.scale*0.005, r_cone=self.scale*0.01, 
    418418                     l_cyl=self.scale*0.1, l_cone=self.scale*0.05) 
    419419        yaxis.color = COLOR_YELLOW 
    420420        yaxis.rotate(-90,0,0) 
    421421        yaxis.draw() 
    422          
     422 
    423423        # X-axis is green 
    424         xaxis= Arrow(x=pos, y=-pos, z=0, r_cyl=self.scale*0.005, r_cone=self.scale*0.01,  
     424        xaxis= Arrow(x=pos, y=-pos, z=0, r_cyl=self.scale*0.005, r_cone=self.scale*0.01, 
    425425                     l_cyl=self.scale*0.1, l_cone=self.scale*0.05) 
    426426        xaxis.color = COLOR_GREEN 
    427427        xaxis.rotate(0,-90,0) 
    428428        xaxis.draw() 
    429          
     429 
    430430        glLight(GL_LIGHT0, GL_DIFFUSE, DEFAULT_COLOR) 
    431431 
     
    445445        self.theta_y = 0 
    446446        self.theta_z = 0 
    447          
     447 
    448448        # Params 
    449449        self.params = {} 
     
    453453        self.details['contrast'] = 'A-2' 
    454454        self.details['order']    = ' ' 
    455          
     455 
    456456        self.highlighted = False 
    457457        self.color = DEFAULT_COLOR 
    458      
     458 
    459459    def get_volume(self): 
    460460        return 0 
    461      
     461 
    462462    def get_length(self): 
    463463        return 1.0 
    464      
     464 
    465465    def highlight(self, value=False): 
    466466        self.highlighted = value 
    467          
     467 
    468468    def rotate(self, alpha, beta, gamma): 
    469         """  
     469        """ 
    470470            Set the rotation angles of the shape 
    471471            @param alpha: angle around the x-axis [degrees] 
     
    476476        self.theta_y = beta 
    477477        self.theta_z = gamma 
    478          
     478 
    479479    def _rotate(self): 
    480480        """ 
    481481            Perform the OpenGL rotation 
    482              
     482 
    483483            Note that the rotation order is reversed. 
    484484            We do Y, X, Z do be compatible with simulation... 
    485485        """ 
    486          
     486 
    487487        glRotated(self.theta_z, 0, 0, 1) 
    488488        glRotated(self.theta_x, 1, 0, 0) 
    489489        glRotated(self.theta_y, 0, 1, 0) 
    490          
     490 
    491491    def _pre_draw(self): 
    492492        if self.highlighted: 
     
    506506        self.l_cyl = l_cyl 
    507507        self.l_cone = l_cone 
    508             
     508 
    509509    def draw(self): 
    510510        self._pre_draw() 
    511511        glPushMatrix() 
    512512        glTranslate(self.x, self.y, self.z) 
    513          
     513 
    514514        # Perform rotation 
    515515        glRotate(self.theta_x, 1, 0, 0) 
     
    520520        qobj = gluNewQuadric(); 
    521521        gluCylinder(qobj, self.r_cyl, self.r_cyl, self.l_cyl, 15, 5); 
    522                  
     522 
    523523        glTranslate(0, 0, self.z+self.l_cyl) 
    524          
     524 
    525525        # Draw cone of the arrow 
    526526        glutSolidCone(self.r_cone, self.l_cone, 30, 5) 
    527          
     527 
    528528        # Translate back to original position 
    529529        glTranslate(-self.x, -self.y, -self.z) 
     
    538538        self.radius = radius 
    539539        self.height = height 
    540          
     540 
    541541    def draw(self): 
    542542        glPushMatrix() 
     
    556556        self.params['radius'] = radius 
    557557        self.details['radius'] = 'A' 
    558          
     558 
    559559    def get_volume(self): 
    560560        return 4.0/3.0*math.pi*self.params['radius']*self.params['radius']*self.params['radius'] 
    561          
     561 
    562562    def get_length(self): 
    563563        return 2.0*self.params['radius'] 
    564      
     564 
    565565    def draw(self): 
    566566        self._pre_draw() 
     
    584584    """ 
    585585        Cylinder shape, by default the cylinder is oriented along 
    586         the z-axis.  
    587          
     586        the z-axis. 
     587 
    588588        The reference point of the cylinder is the center of the 
    589589        bottom circle. 
     
    596596        self.details['radius'] = 'A' 
    597597        self.details['length'] = 'A' 
    598          
     598 
    599599    def get_volume(self): 
    600600        return math.pi*self.params['radius']*self.params['radius']*self.params['length'] 
    601          
     601 
    602602    def get_length(self): 
    603603        if self.params['length']>2.0*self.params['radius']: 
     
    605605        else: 
    606606            return 2.0*self.params['radius'] 
    607          
     607 
    608608    def draw(self): 
    609609        self._pre_draw() 
    610610        glPushMatrix() 
    611          
     611 
    612612        glTranslate(self.x, self.y, self.z) 
    613         self._rotate()  
     613        self._rotate() 
    614614        qobj = gluNewQuadric(); 
    615615        # gluCylinder(qobj, r_base, r_top, L, div around z, div along z) 
     
    619619        glPopMatrix() 
    620620        glLight(GL_LIGHT0, GL_DIFFUSE, DEFAULT_COLOR) 
    621          
     621 
    622622    def accept(self, visitor): 
    623623        return visitor.fromCylinder(self) 
    624          
     624 
    625625    def accept_update(self, visitor): 
    626626        return visitor.update_cylinder(self) 
    627          
     627 
    628628# Fill the shape list 
    629629SHAPE_LIST.append(dict(name='Sphere',   id=wx.NewId(), cl=Sphere)) 
    630630SHAPE_LIST.append(dict(name='Cylinder', id=wx.NewId(), cl=Cylinder)) 
    631          
     631 
    632632def getShapes(): 
    633633    """ 
     
    635635    """ 
    636636    return SHAPE_LIST 
    637      
     637 
    638638def getShapeClass(id): 
    639639    """ 
     
    647647        return shape[0]['cl'] 
    648648    return None 
    649      
     649 
    650650def getShapeClassByName(name): 
    651651    """ 
  • src/sas/sasgui/perspectives/fitting/media/fitting.rst

    rc926a97 r332c10d  
    1717   Smearing Functions <resolution> 
    1818 
     19   Fitting Models with Structure Factors <fitting_sq> 
     20 
     21   Writing a Plugin Model <plugin> 
     22 
    1923   Polarisation/Magnetic Scattering <magnetism/magnetism> 
    20     
     24 
    2125   Oriented Particles <orientation/orientation> 
    2226 
     
    2731   Fitting SESANS Data <sesans/sesans_fitting> 
    2832 
    29    Writing a Plugin Model <plugin> 
    30  
    3133   Computations with a GPU <gpu_setup> 
    3234 
  • src/sas/sasgui/perspectives/fitting/media/fitting_help.rst

    r9258c43c rfa307dd  
    4242*  *Ellipsoid* - ellipsoidal shapes (oblate,prolate, core shell, etc) 
    4343*  *Parellelepiped* - as the name implies 
    44 *  *Sphere* - sheroidal shapes (sphere, core multishell, vesicle, etc) 
     44*  *Sphere* - spheroidal shapes (sphere, core multishell, vesicle, etc) 
    4545*  *Lamellae* - lamellar shapes (lamellar, core shell lamellar, stacked 
    4646   lamellar, etc) 
     
    6161on the *Description* button to the right. 
    6262 
     63Product Models 
     64^^^^^^^^^^^^^^ 
     65 
     66S(Q) models can be combined with many models in the other categories to 
     67generate what SasView calls "product models". The combination can be done by 
     68one of two methods, but how they behave is slightly different. 
     69 
     70The first, most straightforward, method is simply to use the S(Q) drop-down in 
     71the FitPage: 
     72 
     73.. figure:: p_and_s_buttons.png 
     74 
     75This example would then generate a product model with the following parameters: 
     76 
     77.. figure:: p_and_s_buttons_parameters.png 
     78 
     79The other method is to use the :ref:`Sum|Multi(p1,p2)` tool under Fitting > 
     80Plugin Model Operations: 
     81 
     82.. figure:: p_and_s_sum_model.png 
     83 
     84This creates a product model with the following parameters: 
     85 
     86.. figure:: p_and_s_sum_model_parameters.png 
     87 
     88As can be seen, the second method has produced a product model with an extra 
     89parameter: *radius_effective*. This is the radial distance determining the 
     90range of the $S(Q)$ interaction and may, or may not, be the same as the 
     91*radius*, in this example, depending on the concentration of the system. In 
     92other systems, *radius_effective* may depend on the particle form (shape). 
     93 
     94See :ref:`Product_Models` for more information. 
     95 
    6396Show 1D/2D 
    6497^^^^^^^^^^ 
     
    119152 
    120153For a complete list of all the library models available in SasView, see 
    121 the `Model Documentation <../../../index.html>`_ . 
     154the `Model Documentation <../../../sasgui/perspectives/fitting/models/index.html>`_ . 
    122155 
    123156It is also possible to add your own models. 
     
    217250a P(Q) model has been selected). 
    218251 
     252.. _Sum|Multi(p1,p2): 
     253 
    219254Sum|Multi(p1,p2) 
    220255^^^^^^^^^^^^^^^^ 
     
    338373These optimisers form the *Bumps* package written by P Kienzle. For more information 
    339374on each optimiser, see the :ref:`Fitting_Documentation`. 
     375 
     376.. ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ 
     377 
     378Fitting Integer Parameters 
     379-------------------------- 
     380 
     381Most of the parameters in SasView models will naturally take floating point (decimal)  
     382values, but there are some parameters which can only have integer values. Examples  
     383include, but are not limited to, the number of shells in a multilayer vesicle, the  
     384number of beads in a pearl necklace, the number of arms of a star polymer, and so on. 
     385Wherever possible/recognised, the integer nature of a parameter is specified in the  
     386respective model documentation and/or parameter table, so read the documentation  
     387carefully! 
     388 
     389Integer parameters must be fitted with care. 
     390 
     391Start with your best possible guess for the value of the parameter. And using  
     392*a priori* knowledge, fix as many of the other parameters as possible. 
     393  
     394The SasView optimizers treat integer parameters internally as floating point  
     395numbers, but the values presented to the user are truncated or rounded, as  
     396appropriate. 
     397 
     398In most instances integer parameters will probably be greater than zero. A good  
     399policy in such cases is to use a constraint to enforce this. 
     400 
     401Because an integer parameter should, by definition, only move in integer steps,  
     402problems may be encountered if the optimizer step size is too small. Similarly,  
     403be **very careful** about applying polydispersity to integer parameters. 
     404 
     405The Levenberg-Marquardt and Quasi-Newton BFGS (and other derivative-based)  
     406optimizers are probably best avoided for fitting models with integer parameters. 
    340407 
    341408.. ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ 
Note: See TracChangeset for help on using the changeset viewer.