Changeset fc2b91a in sasview


Ignore:
Timestamp:
Jun 18, 2008 6:07:18 PM (16 years ago)
Author:
Mathieu Doucet <doucetm@…>
Branches:
master, ESS_GUI, ESS_GUI_Docs, ESS_GUI_batch_fitting, ESS_GUI_bumps_abstraction, ESS_GUI_iss1116, ESS_GUI_iss879, ESS_GUI_iss959, ESS_GUI_opencl, ESS_GUI_ordering, ESS_GUI_sync_sascalc, costrafo411, magnetic_scatt, release-4.1.1, release-4.1.2, release-4.2.2, release_4.0.1, ticket-1009, ticket-1094-headless, ticket-1242-2d-resolution, ticket-1243, ticket-1249, ticket885, unittest-saveload
Children:
4972de2
Parents:
ad8bcd6
Message:

Updated for interactive graphs.

Location:
guiframe
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • guiframe/data_loader.py

    rde9483d rfc2b91a  
    1919        Load a 1D ascii file, with errors 
    2020    """ 
    21          
     21    import numpy 
    2222    if path and os.path.isfile(path): 
    2323     
    24         file_x = [] 
    25         file_y = [] 
    26         file_dy = [] 
     24        file_x = numpy.zeros(0) 
     25        file_y = numpy.zeros(0) 
     26        file_dy = numpy.zeros(0) 
    2727         
    2828        input_f = open(path,'r') 
    2929        buff = input_f.read() 
    3030        lines = buff.split('\n') 
     31         
     32        has_dy = False 
     33         
    3134        for line in lines: 
    3235            try: 
     
    3538                y = float(toks[1]) 
    3639                if len(toks)==3: 
     40                    has_dy = True 
    3741                    err = float(toks[2]) 
    3842                else: 
    3943                    err = 0.0 
    40                 file_x.append(x) 
    41                 file_y.append(y) 
    42                 file_dy.append(err) 
     44                file_x  = numpy.append(file_x, x) 
     45                file_y  = numpy.append(file_y, y) 
     46                file_dy = numpy.append(file_dy, err) 
    4347            except: 
    4448                print "READ ERROR", line 
    4549     
     50        if has_dy==False: 
     51            file_dy = None 
     52             
    4653        return file_x, file_y, file_dy 
    4754    return None, None, None 
     55 
     56def plot_data(parent, path, name="Loaded Data"): 
     57    from sans.guicomm.events import NewPlotEvent 
     58    from sans.guitools.plottables import Data1D, Theory1D 
     59    x, y, dy = load_ascii_1D(path) 
     60     
     61    if dy==None: 
     62        new_plot = Theory1D(x, y) 
     63    else: 
     64        new_plot = Data1D(x, y, dy=dy) 
     65    new_plot.name = name 
     66    new_plot.interactive = True 
     67     
     68    # If the data file does not tell us what the axes are, just assume... 
     69    new_plot.xaxis("\\rm{Q}", 'A^{-1}') 
     70    new_plot.yaxis("\\rm{Intensity} ","cm^{-1}") 
     71         
     72    wx.PostEvent(parent, NewPlotEvent(plot=new_plot, title="Loaded data")) 
  • guiframe/gui_manager.py

    r2310d69 rfc2b91a  
    3131warnings.simplefilter("ignore") 
    3232 
     33import logging 
    3334 
    3435class ViewerFrame(wx.Frame): 
     
    4243        from local_perspectives.plotting import plotting 
    4344        wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition, size=(1000, 1000)) 
     45         
     46        # Logging info 
     47        logging.basicConfig(level=logging.DEBUG, 
     48                    format='%(asctime)s %(levelname)s %(message)s', 
     49                    filename='sans_app.log', 
     50                    filemode='w')         
    4451         
    4552        path = os.path.dirname(__file__) 
     
    310317        # File menu 
    311318        filemenu = wx.Menu() 
    312         filemenu.Append(101,'&Quit', 'Exit')  
     319         
     320        id = wx.NewId() 
     321        filemenu.Append(id, '&Open', 'Open a file') 
     322        wx.EVT_MENU(self, id, self._on_open) 
     323         
     324        id = wx.NewId() 
     325        filemenu.Append(id,'&Quit', 'Exit')  
     326        wx.EVT_MENU(self, id, self.Close) 
    313327         
    314328        # Add sub menus 
     
    396410        self.SetMenuBar(menubar) 
    397411         
    398         # Bind handlers        
    399         wx.EVT_MENU(self, 101, self.Close) 
     412         
    400413         
    401414    def _on_status_event(self, evt): 
     
    430443            self._mgr.Update() 
    431444         
    432  
     445    def _on_open(self, event): 
     446        from data_loader import plot_data 
     447        path = self.choose_file() 
     448             
     449        if path and os.path.isfile(path): 
     450            plot_data(self, path) 
     451                 
     452         
     453         
    433454    def _onClose(self, event): 
    434455        import sys 
  • guiframe/local_perspectives/plotting/plotting.py

    r96f13a9 rfc2b91a  
    1818class PanelMenu(wx.Menu): 
    1919    plots = None 
     20    graph = None 
    2021     
    2122    def set_plots(self, plots): 
    2223        self.plots = plots 
    2324     
     25    def set_graph(self, graph): 
     26        self.graph = graph 
    2427 
    2528class View1DPanel(PlotPanel): 
     
    7174        is_new = True 
    7275        if event.plot.name in self.plots.keys(): 
    73             is_new = False 
     76            # Check whether the class of plottable changed 
     77            if not event.plot.__class__==self.plots[event.plot.name].__class__: 
     78                self.graph.delete(self.plots[event.plot.name]) 
     79            else: 
     80                is_new = False 
    7481         
    7582        if is_new: 
     
    103110        slicerpop = PanelMenu() 
    104111        slicerpop.set_plots(self.plots) 
     112        slicerpop.set_graph(self.graph) 
    105113                 
    106114        # Option to save the data displayed 
    107         for plot in self.graph.plottables: 
     115         
     116        #for plot in self.graph.plottables: 
     117        if self.graph.selected_plottable in self.plots: 
     118            plot = self.plots[self.graph.selected_plottable] 
    108119            id = wx.NewId() 
    109120            name = plot.name 
     
    117128        wx.EVT_MENU(self, id, self.onSaveImage) 
    118129         
    119         slicerpop.AppendSeparator() 
     130         
    120131        item_list = self.parent.get_context_menu(self.graph) 
    121         if not item_list==None: 
    122             for item in item_list: 
    123                 try: 
    124                     id = wx.NewId() 
    125                     slicerpop.Append(id, item[0], item[1]) 
    126                     wx.EVT_MENU(self, id, item[2]) 
    127                 except: 
    128                     print sys.exc_value 
    129                     print RuntimeError, "View1DPanel.onContextMenu: bad menu item" 
     132        if (not item_list==None) and (not len(item_list)==0): 
     133                slicerpop.AppendSeparator() 
     134                for item in item_list: 
     135                    try: 
     136                        id = wx.NewId() 
     137                        slicerpop.Append(id, item[0], item[1]) 
     138                        wx.EVT_MENU(self, id, item[2]) 
     139                    except: 
     140                        print sys.exc_value 
     141                        print RuntimeError, "View1DPanel.onContextMenu: bad menu item" 
    130142         
    131143        slicerpop.AppendSeparator() 
     
    135147        #wx.EVT_MENU(self, id, self._onToggleScale) 
    136148 
     149        if self.graph.selected_plottable in self.plots: 
     150            if self.plots[self.graph.selected_plottable].__class__.__name__=="Theory1D": 
     151                id = wx.NewId() 
     152                slicerpop.Append(id, '&Add errors to data') 
     153                wx.EVT_MENU(self, id, self._on_add_errors) 
     154 
    137155        id = wx.NewId() 
    138156        slicerpop.Append(id, '&Change scale') 
     
    140158         
    141159        id = wx.NewId() 
    142         slicerpop.AppendSeparator() 
     160        #slicerpop.AppendSeparator() 
    143161        slicerpop.Append(id, '&Reset Graph') 
    144162        wx.EVT_MENU(self, id, self.onResetGraph)         
     
    147165        pos = self.ScreenToClient(pos) 
    148166        self.PopupMenu(slicerpop, pos) 
     167     
     168    def _on_add_errors(self, evt): 
     169        """ 
     170            Compute reasonable errors for a data set without  
     171            errors and transorm the plottable to a Data1D 
     172        """ 
     173        import math 
     174        import numpy 
     175        from sans.guitools.plottables import Data1D 
     176         
     177        if not self.graph.selected_plottable == None: 
     178            length = len(self.plots[self.graph.selected_plottable].x) 
     179            dy = numpy.zeros(length) 
     180            for i in range(length): 
     181                dy[i] = math.sqrt(self.plots[self.graph.selected_plottable].y[i]) 
     182                 
     183            new_plot = Data1D(self.plots[self.graph.selected_plottable].x, 
     184                              self.plots[self.graph.selected_plottable].y, 
     185                              dy=dy) 
     186            new_plot.interactive = True 
     187            new_plot.name = self.plots[self.graph.selected_plottable].name 
     188            label, unit = self.plots[self.graph.selected_plottable].get_xaxis() 
     189            new_plot.xaxis(label, unit) 
     190            label, unit = self.plots[self.graph.selected_plottable].get_yaxis() 
     191            new_plot.yaxis(label, unit) 
     192             
     193            self.graph.delete(self.plots[self.graph.selected_plottable]) 
     194             
     195            self.graph.add(new_plot) 
     196            self.plots[self.graph.selected_plottable]=new_plot 
     197             
     198            self.graph.render(self) 
     199            self.subplot.figure.canvas.draw_idle()     
    149200     
    150201    def _onSave(self, evt): 
Note: See TracChangeset for help on using the changeset viewer.