source: sans/utils/bt5/bt5plot2/bt5plot2 @ 439

Last change on this file since 439 was 439, checked in by ajj, 14 years ago

add missing files

  • Property svn:executable set to *
File size: 5.0 KB
Line 
1#!/usr/bin/env python
2
3import sys
4import os
5import matplotlib
6matplotlib.use('GTK')
7
8from matplotlib.figure import Figure
9from matplotlib.axes import Subplot
10from matplotlib.backends.backend_gtk import FigureCanvasGTK, NavigationToolbar
11
12import usans
13
14try:
15        import pygtk
16        pygtk.require("2.0")
17       
18except:
19        pass
20
21try:
22        import gtk
23        import gtk.glade
24except:
25        sys.exit(1)
26
27
28
29class appGui:
30       
31        TARGETS = [('STRING', gtk.TARGET_SAME_APP, 0)]
32       
33        def __init__(self):
34               
35                gladefile = "bt5plot2.glade"
36                self.windowname = "win_Main"
37                self.wTree = gtk.glade.XML(gladefile, self.windowname)
38
39                event_dic = {"on_win_Main_destroy" : gtk.main_quit,
40                                         "on_quit1_activate" : gtk.main_quit,
41                                         "on_set_data_dir1_activate" : self.setdatadir,
42                                         "on_xaxis_loglin_activate" : self.handle_xaxis_loglin,
43                                         "on_yaxis_loglin_activate" : self.handle_yaxis_loglin}
44        #                                "on_tv_plotlist_key_press_event" : self.handle_plotlist_keypress}
45
46               
47                self.wTree.signal_autoconnect(event_dic)
48
49                # Set up file list
50                self.filelistview = self.wTree.get_widget("tv_filelist")
51               
52                self.filelist = gtk.ListStore(str,'gboolean',object,object,object)
53                self.filelist.set_sort_column_id(0,gtk.SORT_ASCENDING)
54                self.filelistview.set_model(self.filelist)
55
56                self.cellrenderertoggle = gtk.CellRendererToggle()
57                self.cellrenderertoggle.set_property('activatable', True)
58                self.cellrenderertoggle.connect("toggled", self.handle_plot_toggle, self.filelist)
59       
60                self.AddFileListColumns()
61
62                #fill the file list
63                self.FillFileList(self.GetDirList())
64
65                # Set up graphing widget to display xpeek data
66                self.figure = Figure(figsize=(4,4), dpi=72)
67                self.axis = self.figure.add_subplot(111)
68                self.axis.set_xlabel('Motor position')
69                self.axis.set_ylabel('Counts')
70                #self.axis.set_title('XPeek')
71                self.axis.grid(True)
72               
73                self.canvas = FigureCanvasGTK(self.figure)
74                self.canvas.show()
75               
76                self.plotView = self.wTree.get_widget("hbox1")
77                self.plotView.pack_start(self.canvas, True, True)       
78               
79                #self.filelistview.enable_model_drag_source( gtk.gdk.BUTTON1_MASK,
80                #                                  self.TARGETS,
81                #                                   gtk.gdk.ACTION_COPY)
82
83                #self.filelistview.connect("drag_data_get", self.dnd_data_getdata)
84               
85               
86        def AddFileListColumns(self):
87                """This function adds a column to the list view.
88                First it create the gtk.TreeViewColumn and then set
89                some needed properties"""
90                                               
91                column = gtk.TreeViewColumn('Filename', gtk.CellRendererText()
92                        , text=0)
93                column.set_resizable(True)             
94                column.set_sort_column_id(0)
95                self.filelistview.append_column(column)
96
97                column = gtk.TreeViewColumn('', self.cellrenderertoggle, active=1)
98                self.filelistview.append_column(column)
99                return
100               
101        def GetDirList(self):
102                dirlist = os.listdir(os.getcwd())
103               
104                bt5list = [ x for x in dirlist if x.find('.bt5') > 0]
105               
106                return bt5list
107               
108       
109        def FillFileList(self,filenames):
110                self.filelist.clear()
111                for filename in filenames:
112                        data = usans.getBT5DataFromFile(filename)
113                        self.filelist.append([filename,0,data,0,0])
114                return
115                       
116
117        def setdatadir(self, widget):
118                chooser = gtk.FileChooserDialog(title="Select Data Directory",action=gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER,
119                                  buttons=(gtk.STOCK_CANCEL,gtk.RESPONSE_CANCEL,gtk.STOCK_OPEN,gtk.RESPONSE_OK))
120                chooser.set_default_response(gtk.RESPONSE_OK)
121                chooser.set_current_folder(os.getcwd())
122                response = chooser.run()
123                if response == gtk.RESPONSE_OK:
124                        os.chdir(chooser.get_filename())
125                        self.FillFileList(self.GetDirList())
126                chooser.destroy()
127
128        def handle_plot_toggle(self, cell, path, model):
129                model[path][1] = not model[path][1]
130
131                if model[path][1]:
132                        #add plot
133                        self.add_plot(model, path)
134                else:
135                        #remove plot
136                        self.remove_plot(model, path)
137                return
138
139        def add_plot(self, model, path):
140               
141                xdata = []
142                ydata = []
143
144                data =  model[path][2]
145                mvals =  data.keys()
146                mvals.sort(usans.numeric_compare)
147                for mval in mvals:
148                        xdata.append(mval)
149                        ydata.append(data[mval][1]+data[mval][2]+data[mval][4]+data[mval][5]+data[mval][6])
150                       
151                model[path][3] = (xdata,ydata)
152
153                model[path][4], = self.axis.plot(xdata,ydata)
154                self.canvas.draw()
155                return
156
157        def remove_plot(self, model, path):
158
159                self.axis.lines.remove(model[path][4])
160                self.canvas.draw()
161                return
162
163        def handle_xaxis_loglin(self,widget):
164
165
166                if (self.axis.get_xscale() == "log"):
167                        self.axis.set_xscale('linear')
168                else:
169                        self.axis.set_xscale('log')             
170
171                self.canvas.draw()
172                return 
173
174        def handle_yaxis_loglin(self,widget):
175
176
177                if (self.axis.get_yscale() == "log"):
178                        self.axis.set_yscale('linear')
179                else:
180                        self.axis.set_yscale('log')             
181
182                self.canvas.draw()
183                return
184
185        #def handle_plotlist_keypress(self,widget,event):
186        #       keyname = gtk.gdk.keyval_name(event.keyval)
187        #       print keyname
188        #       if keyname in ["Delete", "BackSpace"]:
189        #               self.deleteplotlistentry(widget)
190        #               
191        #       return True
192               
193        #def deleteplotlistentry(self, treeview):
194        #       treeselection = treeview.get_selection()
195        #       model, iter = treeselection.get_selected()
196        #       model.remove(iter)
197        #       return
198                       
199
200app = appGui()
201gtk.main()
Note: See TracBrowser for help on using the repository browser.