Exemplo n.º 1
0
class XYDialog:
    def __init__(self, title, parent, filename, tmpn, type):
        # create matplotlib figure
        self.figure = Figure()
        self.canvas = FigureCanvas(self.figure)
        self.mp = ManipulateXYData(filename,
                                   type,
                                   self.figure,
                                   self,
                                   tmpn=tmpn)

        # create GTK dialog
        self.dialog = gtk.Dialog(title=title,
                                 parent=parent,
                                 flags=gtk.DIALOG_MODAL
                                 | gtk.DIALOG_DESTROY_WITH_PARENT)
        self.dialog.set_default_size(500, 400)
        self.vBox = self.dialog.vbox

        # setup matplotlib events
        self.canvas.mpl_connect('button_press_event', self.mp.on_click)
        self.canvas.mpl_connect('button_release_event', self.mp.on_release)

        # create buttons
        self.buttonBox = gtk.HBox(homogeneous=True, spacing=5)
        self.saveButton = gtk.Button(label="Save and Use",
                                     stock=gtk.STOCK_SAVE)
        self.useButton = gtk.Button(label="Use")
        self.revertButton = gtk.Button(label="Revert")
        self.cancelButton = gtk.Button(label="Cancel")

        # pack buttons
        self.buttonBox.pack_start(self.saveButton, expand=False)
        self.buttonBox.pack_start(self.useButton, expand=False)
        self.buttonBox.pack_start(self.revertButton, expand=False)
        self.buttonBox.pack_end(self.cancelButton, expand=False)

        # connect buttons
        self.use = False
        self.save = False
        self.saveButton.connect("clicked", self.saveHandler)
        self.useButton.connect("clicked", self.useHandler)
        self.revertButton.connect("clicked", self.revertHandler)
        self.cancelButton.connect("clicked", self.cancelHandler)

        # pack and show dialog
        self.vBox.pack_start(self.canvas, expand=True)
        self.vBox.pack_start(gtk.HSeparator(), expand=False)
        self.vBox.pack_end(self.buttonBox, expand=False)
        self.dialog.show_all()

    def redraw(self):
        self.canvas.draw()

    def saveHandler(self, widget):
        self.mp.save_to_file()
        self.save = True
        self.exit()

    def useHandler(self, widget):
        self.mp.save_to_file()
        self.use = True
        self.save = False
        self.exit()

    def revertHandler(self, widget):
        self.mp.reset_data()

    def cancelHandler(self, widget):
        self.save = False
        self.use = False
        self.exit()

    def exit(self):
        self.dialog.hide()
        #self.dialog.response(0)
Exemplo n.º 2
0
class ComponentChooser(gtk.Window):
    """Used for selecting components to use for remixing"""
    
    components = None # Contains the components to choose from
    data = None # Contains the original data
    choose_mask = []
    
    def __init__(self, _components = None, _data=None):
        self.components = _components
        self.data = _data
        
        gtk.Window.__init__(self,gtk.WINDOW_TOPLEVEL)
        self.set_default_size(700,500)
        self.set_title("Choose components to use...")
        self.connect("delete_event", self.delete_event)
        self.connect("destroy", self.delete_event)
        
        self.vbox = gtk.VBox()
        self.add(self.vbox)
        self.f = Figure(figsize=(5,4), dpi=100, subplotpars=SubplotParams(left=0.06, top=0.95, right=0.97, bottom=0.1))
        self.setupSubplots()
        self.plotAll()
        self.canvas = FigureCanvas(self.f)
        self.canvas.mpl_connect('button_press_event', self.cb_canvas)
        self.vbox.pack_start(self.canvas)
        self.toolbar = NavigationToolbar( self.canvas, self.window )
        self.vbox.pack_start(self.toolbar, False, False)
        self.show_all()
        
    def delete_event(self, widget, event, data=None):
        self.hide()
        return True
    
    def cb_canvas(self, event):
        """Called when the figure is clicked.""" 
        #print event.button
        if event.button == 3:   
            for i,a in enumerate(self.axs):
                if event.inaxes == a:
                    #print "Subplot %i geclickt" % i
                    self.choose_mask[i] = bool(True-self.choose_mask[i])
                    #print self.choose_mask[i]
                    #a.grid()
                    a.cla()
                    #TODO: plotte...
                    a.plot(self.components[:,i])
                    #
                    if not self.choose_mask[i]:
                        a.text(numpy.array(a.get_xlim()).mean(),numpy.array(a.get_ylim()).mean(),"X",horizontalalignment='center',verticalalignment='center',fontsize=20,color="red")
                    self.canvas.draw()
                    
        
    def setupSubplots(self):
        self.f.clear()
        try:
            ncols = 4
            nrows = self.components.shape[1]/ncols +1
            self.axs = []
            self.choose_mask = []
            for i in range(self.components.shape[1]):
                self.axs.append(self.f.add_subplot(nrows,ncols,i+1))
                self.choose_mask.append(True)
        except Exception, e:
            print "Error while setting up subplots", e
Exemplo n.º 3
0
class XYDialog:
    def __init__(self, title, parent, syn2d, numX, numY):
        # create buttons
        self.loadButton = gtk.Button(label="Load", stock=gtk.STOCK_OPEN)
        self.saveButton = gtk.Button(label="Save and Use",
                                     stock=gtk.STOCK_SAVE)
        self.useButton = gtk.Button(label="Use")
        self.revertButton = gtk.Button(label="Revert")
        self.clearButton = gtk.Button(label="Clear")
        self.cancelButton = gtk.Button(label="Cancel")

        # create matplotlib figure
        self.figure = Figure()
        self.canvas = FigureCanvas(self.figure)
        self.mp = DataPointChooser(self.figure, self, numX, numY)

        self.syn2d = syn2d
        self.parent = parent

        self.sourcesFile, self.receiversFile = self.syn2d.getDataFiles()
        print "Loading initial data from: " + self.sourcesFile + " , " + self.receiversFile
        sources = self.loadXYFile(self.sourcesFile)
        receivers = self.loadXYFile(self.receiversFile, True)

        # create GTK dialog
        self.dialog = gtk.Dialog(title=title,
                                 parent=parent,
                                 flags=gtk.DIALOG_MODAL
                                 | gtk.DIALOG_DESTROY_WITH_PARENT)
        self.dialog.set_default_size(500, 400)
        self.vBox = self.dialog.vbox

        # setup matplotlib events
        self.canvas.mpl_connect('button_press_event', self.mp.on_click)

        # pack buttons
        self.buttonBox = gtk.HBox(homogeneous=True, spacing=5)
        self.buttonBox.pack_start(self.loadButton, expand=False)
        self.buttonBox.pack_start(self.saveButton, expand=False)
        self.buttonBox.pack_start(self.useButton, expand=False)
        self.buttonBox.pack_start(self.revertButton, expand=False)
        self.buttonBox.pack_start(self.clearButton, expand=False)
        self.buttonBox.pack_end(self.cancelButton, expand=False)

        # connect buttons
        self.use = False
        self.loadButton.connect("clicked", self.loadHandler)
        self.saveButton.connect("clicked", self.saveHandler)
        self.useButton.connect("clicked", self.useHandler)
        self.revertButton.connect("clicked", self.revertHandler)
        self.clearButton.connect("clicked", self.clearHandler)
        self.cancelButton.connect("clicked", self.cancelHandler)

        self.label = gtk.Label(
            "Mouse Buttons: L-Add Station, M-Delete Point, R-Add Source")

        # pack and show dialog
        self.vBox.pack_start(self.canvas, expand=True)
        self.vBox.pack_start(gtk.HSeparator(), expand=False)
        self.vBox.pack_start(self.label, expand=False)
        self.vBox.pack_end(self.buttonBox, expand=False)

        self.mp.setOriginalData(sources, receivers)
        self.mp.reset_data()

        self.dialog.show_all()

    def redraw(self):
        self.canvas.draw()

    def loadHandler(self, widget):
        chooser = gtk.FileChooserDialog(title="Select DIRECTORY Containing 'sources.txt' and 'receivers.txt' Files", \
            parent=self.parent, \
             action=gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER, \
             buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, \
                gtk.STOCK_OPEN, gtk.RESPONSE_OK))

        response = chooser.run()
        if (response == gtk.RESPONSE_OK):
            dir = chooser.get_filename()
            sourceName = dir + os.sep + "sources.txt"
            if (os.path.exists(sourceName)):
                sources = self.loadXYFile(sourceName)
            else:
                sources = []
            receiverName = dir + os.sep + "receivers.txt"
            if (os.path.exists(receiverName)):
                receivers = self.loadXYFile(receiverName)
            else:
                receivers = []
            self.mp.setOriginalData(sources, receivers)
            self.mp.reset_data()
        chooser.destroy()

    def loadXYFile(self, file, skipDuplicates=False):

        if not os.path.exists(file):
            return []

        x, y = self.syn2d.loadXYFile(file)

        data = []

        for i in range(0, len(x)):
            if skipDuplicates:
                skip = False
                for point in data:
                    if point[0] == x[i] and point[1] == y[i]:
                        skip = True
                        break
                if skip:
                    continue
            data.append((x[i], y[i]))

        return data

    def writeXYFile(self, file, data):
        fp = open(file, "w")
        for point in data:
            fp.write(str(point[0]) + " " + str(point[1]) + "\n")
        fp.close()

    def saveHandler(self, widget):
        chooser = gtk.FileChooserDialog(title="Select DIRECTORY to save 'sources.txt' and 'receivers.txt' Files", \
            parent=self.parent, \
             action=gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER, \
             buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, \
                gtk.STOCK_OPEN, gtk.RESPONSE_OK))

        response = chooser.run()
        if (response == gtk.RESPONSE_OK):
            dir = chooser.get_filename()
            self.writeDataFiles(dir)
        chooser.destroy()

    def writeDataFiles(self, dir):
        if not dir.endswith(os.sep):
            dir += os.sep
        sourceName = dir + "sources.txt"
        self.writeXYFile(sourceName, self.mp.getSources())
        receiverName = dir + "receivers.txt"
        self.writeXYFile(receiverName, self.mp.getReceivers())
        return (sourceName, receiverName)

    def useHandler(self, widget):
        self.sourcesFile, self.receiversFile = self.writeDataFiles(
            self.syn2d.getWorkingDir())
        self.use = True
        self.exit()

    def clearHandler(self, widget):
        self.mp.setOriginalData([], [])
        self.mp.reset_data()

    def getSourcesFile(self):
        return self.sourcesFile

    def getReceiversFile(self):
        return self.receiversFile

    def wasUseSelected(self):
        print "USE? " + str(self.use)
        return self.use

    def revertHandler(self, widget):
        self.mp.reset_data()

    def cancelHandler(self, widget):
        self.use = False
        self.exit()

    def updateButtons(self, sources, receivers):
        self.useButton.set_sensitive(len(sources) > 0 and len(receivers) > 0)

    def exit(self):
        self.dialog.hide()
Exemplo n.º 4
0
class JPlot:
    """Misspecification plot"""
    def __init__(self, app):
        #setup matplotlib stuff on first notebook page (empty graph)
        self.app = app
        # Plot defaults:
        self.imp_col = '#dd2244'
        self.nim_col = '#5533dd'
        # Create figure
        self.figure = Figure(figsize=(6,4), dpi=72)
        self.axis = self.figure.add_subplot(111)
        self.axis.set_xlabel('Modification index')
        self.axis.set_ylabel('Power')
        self.axis.set_title('Misspecifications')
        try:
            # omit missing observations
            parameters = [par for par in self.app.get_parameters() if \
                        par.mi <99.0 and par.power < 1.0 and par.epc < 99.0]
            self.mis = [par.mi for par in parameters]
            self.names = [par.name for par in parameters]
            self.powers = [par.power for par in parameters]
            self.ids = ["%s in group %s" % (par.name, par.group) for par in parameters]

            self.axis.scatter( self.mis, self.powers,
                c = [par.epc > self.app.get_field_value('delta') \
                    and self.imp_col or self.nim_col for par in parameters],
                linewidth=0, picker=30.0, vmin=self.imp_col,
                vmax = self.nim_col,
            )
            self.axis.autoscale_view(True) #tight

            self.axis.axvline(self.app.get_critical(),
                 color='#444444', linestyle='dashed')
            self.axis.axhline( y=float(self.app.get_field_value('power')),
                 color='#444444', linestyle='dashed')
        except AttributeError:
            pass
        self.draw()

    def pick_handler(self, event):
        '''What happens if the user clicks a point in the plot'''
        index = event.ind[0]
        label = self.ids[index]
        sys.stderr.write('ind is %s'% index)
        sys.stderr.write('mousover %s\n' % label)
        x, y = self.mis[index], self.powers[index]
        self.axis.text(x, y, label)
        self.draw()

    def draw(self):
        'Draw or re-draw the plot, possibly showing some labels'
        try: self.graphview.remove(self.canvas)
        except: pass
        self.canvas = FigureCanvasGTK(self.figure)
        self.canvas.mpl_connect('pick_event', self.pick_handler)
        self.canvas.show()
        self.graphview = self.app.tree.get_widget("vbox_plot")
        self.graphview.pack_start(self.canvas, True, True)

    def reload(self):
        'Completely redo the whole plot.'
        self.graphview.remove(self.canvas)
        self.__init__(self.app)