def create_graph_tab(self, record):
     """
     Creates a widget displaying the data in record i
     """
     widget = QtWidgets.QWidget(self)
     # Create figure
     figure = matplotlib.figure.Figure()
     figure.suptitle(self._wcp.filename())
     canvas = backend.FigureCanvasQTAgg(figure)
     canvas.setParent(widget)
     axes = figure.add_subplot(1, 1, 1)
     toolbar = backend.NavigationToolbar2QT(canvas, widget)
     # Draw lines
     for i in range(self._wcp.channels()):
         axes.plot(
             np.array(self._wcp.times(), copy=True),
             np.array(self._wcp.values(record, i), copy=True),
         )
     # Create a layout
     vbox = QtWidgets.QVBoxLayout()
     vbox.addWidget(canvas)
     vbox.addWidget(toolbar)
     widget.setLayout(vbox)
     self._figures.append(figure)
     self._axes.append(axes)
     return widget
 def create_graph_tab(self, time, data):
     """
     Creates a widget displaying a time series.
     """
     widget = QtWidgets.QWidget(self)
     # Create figure
     figure = matplotlib.figure.Figure()
     figure.suptitle(self._filename)
     canvas = backend.FigureCanvasQTAgg(figure)
     canvas.setParent(widget)
     axes = figure.add_subplot(1, 1, 1)
     toolbar = backend.NavigationToolbar2QT(canvas, widget)
     # Draw line
     if time is None:
         axes.plot(data)
     else:
         axes.plot(time, data)
     # Create a layout
     vbox = QtWidgets.QVBoxLayout()
     vbox.addWidget(canvas)
     vbox.addWidget(toolbar)
     widget.setLayout(vbox)
     self._figures.append(figure)
     self._axes.append(axes)
     return widget
    def create_graph_tab(self, time, key):
        """
        Creates a widget displaying a graph.
        """
        widget = QtWidgets.QWidget(self)

        # Create figure
        figure = matplotlib.figure.Figure()
        figure.suptitle(self._atf.filename())
        canvas = backend.FigureCanvasQTAgg(figure)
        canvas.setParent(widget)
        axes = figure.add_subplot(1, 1, 1)
        toolbar = backend.NavigationToolbar2QT(canvas, widget)

        # Draw lines
        axes.plot(self._atf[time], self._atf[key])

        # Create a layout
        vbox = QtWidgets.QVBoxLayout()
        vbox.addWidget(canvas)
        vbox.addWidget(toolbar)
        widget.setLayout(vbox)
        self._figures.append(figure)
        self._axes.append(axes)

        # Return widget
        return widget
 def create_protocol_tab(self, channel):
     """
     Creates a widget displaying a stored D/A signal.
     """
     widget = QtWidgets.QWidget(self)
     # Create figure
     figure = matplotlib.figure.Figure()
     figure.suptitle(self._abf.filename())
     canvas = backend.FigureCanvasQTAgg(figure)
     canvas.setParent(widget)
     axes = figure.add_subplot(1, 1, 1)
     toolbar = backend.NavigationToolbar2QT(canvas, widget)
     # Draw lines
     name = 'DA(' + str(channel) + ')'  # Default if no data is present
     times = None
     for i, sweep in enumerate(self._abf.protocol()):
         if times is None:
             name = 'DA' + str(sweep[channel].number()) + ': ' \
                 + sweep[channel].name()
             times = sweep[channel].times()
         axes.plot(times, sweep[channel].values())
     # Create a layout
     vbox = QtWidgets.QVBoxLayout()
     vbox.addWidget(canvas)
     vbox.addWidget(toolbar)
     widget.setLayout(vbox)
     self._figures.append(figure)
     self._axes.append(axes)
     return widget, name
 def create_graph_tab(self, key, data):
     """
     Creates a widget displaying the ``data`` stored under ``key``.
     """
     widget = QtWidgets.QWidget(self)
     # Create figure
     figure = matplotlib.figure.Figure()
     figure.suptitle(self._filename)
     canvas = backend.FigureCanvasQTAgg(figure)
     canvas.setParent(widget)
     axes = figure.add_subplot(1, 1, 1)
     axes.set_title(key)
     toolbar = backend.NavigationToolbar2QT(canvas, widget)
     # Draw lines
     axes.plot(self._time, data)
     # Create a layout
     vbox = QtWidgets.QVBoxLayout()
     vbox.addWidget(canvas)
     vbox.addWidget(toolbar)
     widget.setLayout(vbox)
     self._figures.append(figure)
     self._axes.append(axes)
     return widget
Beispiel #6
0
 def __init__(self, parent, sim_method, output_stream, duration=1000):
     super(Explorer, self).__init__(parent)
     self.setWindowTitle('Myokit Explorer')
     self._sim_method = sim_method
     self._stream = output_stream
     # Set guess for run times
     guess_pre = 0
     guess_run = duration
     # Explorer data
     self._data = None
     self._keys = None
     # Fix background color of line edits
     self.setStyleSheet('QLineEdit{background: white;}')
     # Create top widgets
     label1 = QtWidgets.QLabel('Run unlogged for ')
     label2 = QtWidgets.QLabel(' and then log for ')
     self._pre_field = QtWidgets.QLineEdit(str(guess_pre))
     self._pre_valid = QtGui.QDoubleValidator()
     self._pre_valid.setBottom(0)
     self._pre_field.setValidator(self._pre_valid)
     self._run_field = QtWidgets.QLineEdit(str(guess_run))
     self._run_valid = QtGui.QDoubleValidator()
     self._run_valid.setBottom(0)
     self._run_field.setValidator(self._run_valid)
     self._clear_button = QtWidgets.QPushButton('Clear graphs')
     self._clear_button.clicked.connect(self.action_clear)
     self._run_button = QtWidgets.QPushButton('Run')
     self._run_button.clicked.connect(self.action_run)
     # Create graph widgets
     self._axes = None
     self._figure = matplotlib.figure.Figure()
     self._canvas = backend.FigureCanvasQTAgg(self._figure)
     self._toolbar = backend.NavigationToolbar2QT(self._canvas, self)
     self._select_x = QtWidgets.QComboBox()
     self._select_x.currentIndexChanged.connect(self.combo_changed)
     self._select_y = QtWidgets.QComboBox()
     self._select_y.currentIndexChanged.connect(self.combo_changed)
     # Create bottom widgets
     self._close_button = QtWidgets.QPushButton('Close')
     self._close_button.clicked.connect(self.action_close)
     # Create button layout
     button_layout = QtWidgets.QBoxLayout(QtWidgets.QBoxLayout.LeftToRight)
     button_layout.addWidget(label1)
     button_layout.addWidget(self._pre_field)
     button_layout.addWidget(label2)
     button_layout.addWidget(self._run_field)
     button_layout.addWidget(self._clear_button)
     button_layout.addWidget(self._run_button)
     # Create graph options layout
     graph_option_layout = QtWidgets.QBoxLayout(
         QtWidgets.QBoxLayout.LeftToRight)
     graph_option_layout.addWidget(self._select_x)
     graph_option_layout.addWidget(self._select_y)
     # Create bottom layout
     bottom_layout = QtWidgets.QBoxLayout(QtWidgets.QBoxLayout.LeftToRight)
     bottom_layout.addWidget(self._close_button)
     # Create central layout
     layout = QtWidgets.QBoxLayout(QtWidgets.QBoxLayout.TopToBottom)
     layout.addLayout(button_layout)
     layout.addLayout(graph_option_layout)
     layout.addWidget(self._canvas)
     layout.addWidget(self._toolbar)
     layout.addLayout(bottom_layout)
     self.setLayout(layout)
Beispiel #7
0
    def __init__(self, parent, title, var, func, args):
        super(VarGrapher, self).__init__(parent)
        self.setFixedSize(700, 600)
        self.setWindowTitle(title)

        # Figure panel
        self._figure = matplotlib.figure.Figure()
        self._canvas = backend.FigureCanvasQTAgg(self._figure)
        self._toolbar = backend.NavigationToolbar2QT(self._canvas, self)

        # Variable panel
        self._variable_widget = QtWidgets.QWidget()

        # Button panel
        self._button_widget = QtWidgets.QWidget()

        # Central widget
        layout = QtWidgets.QVBoxLayout()
        layout.addWidget(self._canvas)
        layout.addWidget(self._toolbar)
        layout.addWidget(self._variable_widget)
        layout.addWidget(self._button_widget)
        self.setLayout(layout)

        # Get function handle, information object
        self._func = func
        self._args = args
        self._var = var

        # Variable ranges
        grid = QtWidgets.QGridLayout()
        self._bounds = {}
        for k, lhs in enumerate(self._args):
            var = lhs.var()
            # Guess appropriate bounds
            if var.label() == 'membrane_potential' or \
                    var.name().lower() in ['v', 'voltage', 'potential']:
                if var.unit() == myokit.units.volt:
                    lohi = (-0.1, 0.1)
                else:
                    lohi = (-100.0, 100.0)
            else:
                v = lhs.eval()
                if v >= 0 and v <= 1:
                    lohi = (0.0, 1.0)
                elif v < 0:
                    lohi = (-50, 50)
                else:
                    lohi = (0, 100)
            # Row and column of first widget in grid
            row = k // 2
            col = (k % 2) * 3
            # Add label
            label = QtWidgets.QLabel(var.qname())
            grid.addWidget(label, row, col)
            # Add lower and upper bound or single value
            if k < 2:
                # Lower
                editlo = QtWidgets.QLineEdit()
                editlo.setValidator(QtGui.QDoubleValidator())
                editlo.setText(str(lohi[0]))
                grid.addWidget(editlo, row, col + 1)
                # Upper
                edithi = QtWidgets.QLineEdit()
                edithi.setValidator(QtGui.QDoubleValidator())
                edithi.setText(str(lohi[1]))
                grid.addWidget(edithi, row, col + 2)
                self._bounds[lhs] = (editlo, edithi)
            else:
                # Single, fixed value
                v = 0.5 * (lohi[0] + lohi[1])
                edit = QtWidgets.QLineEdit(str(v))
                edit.setReadOnly(True)
                grid.addWidget(edit, row, col + 1)
                self._bounds[lhs] = (edit, edit)
        self._variable_widget.setLayout(grid)

        # Buttons
        layout = QtWidgets.QHBoxLayout()

        # Graph button
        button = QtWidgets.QPushButton('Refresh')
        button.clicked.connect(self.action_draw)
        layout.addWidget(button)

        # Close button
        button = QtWidgets.QPushButton('Close')
        button.clicked.connect(self.close)
        layout.addWidget(button)
        self._button_widget.setLayout(layout)

        # Draw!
        self.action_draw()