コード例 #1
0
    def __init__(self):
        super().__init__()
        self.data = None  # type: Optional[Orange.data.Table]
        self._counts = None  # type: Optional[np.ndarray]

        box = gui.widgetBox(self.controlArea, "Info")
        self._info = QLabel(box, wordWrap=True)
        self._info.setText("No data in input\n")

        box.layout().addWidget(self._info)

        box = gui.widgetBox(self.controlArea, "Filter Type", spacing=-1)
        rbg = QButtonGroup(box, exclusive=True)
        layout = QHBoxLayout()
        layout.setContentsMargins(0, 0, 0, 0)
        for id_ in [Cells, Genes, Data]:
            name, _, tip = FilterInfo[id_]
            b = QRadioButton(name,
                             toolTip=tip,
                             checked=id_ == self.selected_filter_type)
            rbg.addButton(b, id_)
            layout.addWidget(b, stretch=10, alignment=Qt.AlignCenter)
        box.layout().addLayout(layout)

        rbg.buttonClicked[int].connect(self.set_filter_type)

        self.filter_metric_cb = gui.comboBox(
            box,
            self,
            "selected_filter_metric",
            callback=self._update_metric,
            enabled=self.selected_filter_type != Data)
        for id_ in [DetectionCount, TotalCounts]:
            text, ttip = MeasureInfo[id_]
            self.filter_metric_cb.addItem(text)
            idx = self.filter_metric_cb.count() - 1
            self.filter_metric_cb.setItemData(idx, ttip, Qt.ToolTipRole)
        self.filter_metric_cb.setCurrentIndex(self.selected_filter_metric)

        form = QFormLayout(labelAlignment=Qt.AlignLeft,
                           formAlignment=Qt.AlignLeft,
                           fieldGrowthPolicy=QFormLayout.AllNonFixedFieldsGrow)
        self._filter_box = box = gui.widgetBox(
            self.controlArea, "Filter", orientation=form)  # type: QGroupBox

        self.threshold_stacks = (
            QStackedWidget(enabled=self.limit_lower_enabled),
            QStackedWidget(enabled=self.limit_upper_enabled),
        )
        finfo = np.finfo(np.float64)
        for filter_ in [Cells, Genes, Data]:
            if filter_ in {Cells, Genes}:
                minimum = 0.0
                ndecimals = 1
                metric = self.selected_filter_metric
            else:
                minimum = finfo.min
                ndecimals = 3
                metric = -1
            spinlower = QDoubleSpinBox(
                self,
                minimum=minimum,
                maximum=finfo.max,
                decimals=ndecimals,
                keyboardTracking=False,
            )
            spinupper = QDoubleSpinBox(
                self,
                minimum=minimum,
                maximum=finfo.max,
                decimals=ndecimals,
                keyboardTracking=False,
            )

            lower, upper = self.thresholds.get((filter_, metric), (0, 0))

            spinlower.setValue(lower)
            spinupper.setValue(upper)

            self.threshold_stacks[0].addWidget(spinlower)
            self.threshold_stacks[1].addWidget(spinupper)

            spinlower.valueChanged.connect(self._limitchanged)
            spinupper.valueChanged.connect(self._limitchanged)

        self.threshold_stacks[0].setCurrentIndex(self.selected_filter_type)
        self.threshold_stacks[1].setCurrentIndex(self.selected_filter_type)

        self.limit_lower_enabled_cb = cb = QCheckBox(
            "Min", checked=self.limit_lower_enabled)
        cb.toggled.connect(self.set_lower_limit_enabled)
        cb.setAttribute(Qt.WA_LayoutUsesWidgetRect, True)
        form.addRow(cb, self.threshold_stacks[0])

        self.limit_upper_enabled_cb = cb = QCheckBox(
            "Max", checked=self.limit_upper_enabled)
        cb.toggled.connect(self.set_upper_limit_enabled)
        cb.setAttribute(Qt.WA_LayoutUsesWidgetRect, True)
        form.addRow(cb, self.threshold_stacks[1])

        box = gui.widgetBox(self.controlArea, "View")
        self._showpoints = gui.checkBox(box,
                                        self,
                                        "display_dotplot",
                                        "Show data points",
                                        callback=self._update_dotplot)

        self.controlArea.layout().addStretch(10)

        gui.auto_commit(self.controlArea, self, "auto_commit", "Commit")

        self._view = pg.GraphicsView()
        self._view.enableMouse(False)
        self._view.setAntialiasing(True)
        self._plot = plot = ViolinPlot()
        self._plot.setDataPointsVisible(self.display_dotplot)
        self._plot.setSelectionMode(
            (ViolinPlot.Low if self.limit_lower_enabled else 0)
            | (ViolinPlot.High if self.limit_upper_enabled else 0))
        self._plot.selectionEdited.connect(self._limitchanged_plot)
        self._view.setCentralWidget(self._plot)
        self._plot.setTitle(FilterInfo[self.selected_filter_metric][1])

        bottom = self._plot.getAxis("bottom")  # type: pg.AxisItem
        bottom.hide()
        plot.setMouseEnabled(False, False)
        plot.hideButtons()
        self.mainArea.layout().addWidget(self._view)

        # Coalescing commit timer
        self._committimer = QTimer(self, singleShot=True)
        self._committimer.timeout.connect(self.commit)

        self.addAction(
            QAction("Select All",
                    self,
                    shortcut=QKeySequence.SelectAll,
                    triggered=self._select_all))
コード例 #2
0
ファイル: owdistancemap.py プロジェクト: ylyking/orange3
    def __init__(self):
        super().__init__()

        self.matrix = None
        self._tree = None
        self._ordered_tree = None
        self._sorted_matrix = None
        self._sort_indices = None
        self._selection = None

        self.sorting_cb = gui.comboBox(
            self.controlArea, self, "sorting", box="Element Sorting",
            items=["None", "Clustering", "Clustering with ordered leaves"],
            callback=self._invalidate_ordering)

        box = gui.vBox(self.controlArea, "Colors")
        self.color_box = gui.palette_combo_box(self.palette_name)
        self.color_box.currentIndexChanged.connect(self._update_color)
        box.layout().addWidget(self.color_box)

        form = QFormLayout(
            formAlignment=Qt.AlignLeft,
            labelAlignment=Qt.AlignLeft,
            fieldGrowthPolicy=QFormLayout.AllNonFixedFieldsGrow
        )
#         form.addRow(
#             "Gamma",
#             gui.hSlider(box, self, "color_gamma", minValue=0.0, maxValue=1.0,
#                         step=0.05, ticks=True, intOnly=False,
#                         createLabel=False, callback=self._update_color)
#         )
        form.addRow(
            "Low:",
            gui.hSlider(box, self, "color_low", minValue=0.0, maxValue=1.0,
                        step=0.05, ticks=True, intOnly=False,
                        createLabel=False, callback=self._update_color)
        )
        form.addRow(
            "High:",
            gui.hSlider(box, self, "color_high", minValue=0.0, maxValue=1.0,
                        step=0.05, ticks=True, intOnly=False,
                        createLabel=False, callback=self._update_color)
        )
        box.layout().addLayout(form)

        self.annot_combo = gui.comboBox(
            self.controlArea, self, "annotation_idx", box="Annotations",
            callback=self._invalidate_annotations, contentsLength=12)
        self.annot_combo.setModel(itemmodels.VariableListModel())
        self.annot_combo.model()[:] = ["None", "Enumeration"]
        self.controlArea.layout().addStretch()

        gui.auto_send(self.controlArea, self, "autocommit")

        self.view = pg.GraphicsView(background="w")
        self.mainArea.layout().addWidget(self.view)

        self.grid_widget = pg.GraphicsWidget()
        self.grid = QGraphicsGridLayout()
        self.grid_widget.setLayout(self.grid)

        self.viewbox = pg.ViewBox(enableMouse=False, enableMenu=False)
        self.viewbox.setAcceptedMouseButtons(Qt.NoButton)
        self.viewbox.setAcceptHoverEvents(False)
        self.grid.addItem(self.viewbox, 1, 1)

        self.left_dendrogram = DendrogramWidget(
            self.grid_widget, orientation=DendrogramWidget.Left,
            selectionMode=DendrogramWidget.NoSelection,
            hoverHighlightEnabled=False
        )
        self.left_dendrogram.setAcceptedMouseButtons(Qt.NoButton)
        self.left_dendrogram.setAcceptHoverEvents(False)

        self.top_dendrogram = DendrogramWidget(
            self.grid_widget, orientation=DendrogramWidget.Top,
            selectionMode=DendrogramWidget.NoSelection,
            hoverHighlightEnabled=False
        )
        self.top_dendrogram.setAcceptedMouseButtons(Qt.NoButton)
        self.top_dendrogram.setAcceptHoverEvents(False)

        self.grid.addItem(self.left_dendrogram, 1, 0)
        self.grid.addItem(self.top_dendrogram, 0, 1)

        self.right_labels = TextList(
            alignment=Qt.AlignLeft | Qt.AlignVCenter,
            sizePolicy=QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Expanding)
        )
        self.bottom_labels = TextList(
            orientation=Qt.Horizontal,
            alignment=Qt.AlignRight | Qt.AlignVCenter,
            sizePolicy=QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
        )

        self.grid.addItem(self.right_labels, 1, 2)
        self.grid.addItem(self.bottom_labels, 2, 1)

        self.view.setCentralItem(self.grid_widget)

        self.left_dendrogram.hide()
        self.top_dendrogram.hide()
        self.right_labels.hide()
        self.bottom_labels.hide()

        self.matrix_item = None
        self.dendrogram = None

        self.grid_widget.scene().installEventFilter(self)

        self.settingsAboutToBePacked.connect(self.pack_settings)
コード例 #3
0
Demonstrate ability of ImageItem to be used as a canvas for painting with
the mouse.

"""

import initExample ## Add path to library (just for examples; you do not need this)


from pyqtgraph.Qt import QtCore, QtGui
import numpy as np
import pyqtgraph as pg

app = pg.mkQApp("Draw Example")

## Create window with GraphicsView widget
w = pg.GraphicsView()
w.show()
w.resize(800,800)
w.setWindowTitle('pyqtgraph example: Draw')

view = pg.ViewBox()
w.setCentralItem(view)

## lock the aspect ratio
view.setAspectLocked(True)

## Create image item
img = pg.ImageItem(np.zeros((200,200)))
view.addItem(img)

## Set initial view bounds
コード例 #4
0
ファイル: test_ROI.py プロジェクト: yanbin-ha/pyqtgraph
def test_PolyLineROI():
    rois = [(pg.PolyLineROI([[0, 0], [10, 0], [0, 15]], closed=True,
                            pen=0.3), 'closed'),
            (pg.PolyLineROI([[0, 0], [10, 0], [0, 15]], closed=False,
                            pen=0.3), 'open')]

    #plt = pg.plot()
    plt = pg.GraphicsView()
    plt.show()
    resizeWindow(plt, 200, 200)
    vb = pg.ViewBox()
    plt.scene().addItem(vb)
    vb.resize(200, 200)
    #plt.plotItem = pg.PlotItem()
    #plt.scene().addItem(plt.plotItem)
    #plt.plotItem.resize(200, 200)

    plt.scene().minDragTime = 0  # let us simulate mouse drags very quickly.

    # seemingly arbitrary requirements; might need longer wait time for some platforms..
    QtTest.QTest.qWaitForWindowExposed(plt)
    QtTest.QTest.qWait(100)

    for r, name in rois:
        vb.clear()
        vb.addItem(r)
        vb.autoRange()
        app.processEvents()

        assertImageApproved(plt, 'roi/polylineroi/' + name + '_init',
                            'Init %s polyline.' % name)
        initState = r.getState()
        assert len(r.getState()['points']) == 3

        # hover over center
        center = r.mapToScene(pg.Point(3, 3))
        mouseMove(plt, center)
        assertImageApproved(plt, 'roi/polylineroi/' + name + '_hover_roi',
                            'Hover mouse over center of ROI.')

        # drag ROI
        mouseDrag(plt, center, center + pg.Point(10, -10),
                  QtCore.Qt.LeftButton)
        assertImageApproved(plt, 'roi/polylineroi/' + name + '_drag_roi',
                            'Drag mouse over center of ROI.')

        # hover over handle
        pt = r.mapToScene(pg.Point(r.getState()['points'][2]))
        mouseMove(plt, pt)
        assertImageApproved(plt, 'roi/polylineroi/' + name + '_hover_handle',
                            'Hover mouse over handle.')

        # drag handle
        mouseDrag(plt, pt, pt + pg.Point(5, 20), QtCore.Qt.LeftButton)
        assertImageApproved(plt, 'roi/polylineroi/' + name + '_drag_handle',
                            'Drag mouse over handle.')

        # hover over segment
        pt = r.mapToScene((pg.Point(r.getState()['points'][2]) +
                           pg.Point(r.getState()['points'][1])) * 0.5)
        mouseMove(plt, pt + pg.Point(0, 2))
        assertImageApproved(plt, 'roi/polylineroi/' + name + '_hover_segment',
                            'Hover mouse over diagonal segment.')

        # click segment
        mouseClick(plt, pt, QtCore.Qt.LeftButton)
        assertImageApproved(plt, 'roi/polylineroi/' + name + '_click_segment',
                            'Click mouse over segment.')

        # drag new handle
        mouseMove(
            plt, pt + pg.Point(10, -10)
        )  # pg bug: have to move the mouse off/on again to register hover
        mouseDrag(plt, pt, pt + pg.Point(10, -10), QtCore.Qt.LeftButton)
        assertImageApproved(plt,
                            'roi/polylineroi/' + name + '_drag_new_handle',
                            'Drag mouse over created handle.')

        # clear all points
        r.clearPoints()
        assertImageApproved(plt, 'roi/polylineroi/' + name + '_clear',
                            'All points cleared.')
        assert len(r.getState()['points']) == 0

        # call setPoints
        r.setPoints(initState['points'])
        assertImageApproved(plt, 'roi/polylineroi/' + name + '_setpoints',
                            'Reset points to initial state.')
        assert len(r.getState()['points']) == 3

        # call setState
        r.setState(initState)
        assertImageApproved(plt, 'roi/polylineroi/' + name + '_setstate',
                            'Reset ROI to initial state.')
        assert len(r.getState()['points']) == 3

    plt.hide()
コード例 #5
0
def visualize_new(lidar):
    pg.mkQApp()
    w = pg.GraphicsView(useOpenGL=True)
    w.show()
コード例 #6
0
ファイル: biathlon_main.py プロジェクト: gjrgj/engs90biathlon
    def initUI(self):
        global app, adc1, adc2, curve1, curve2, ptr, window, current_frame

        # set up main window, init, resize, etc
        window = pg.GraphicsView()
        screen_resolution = app.desktop().screenGeometry()
        screenWidth, screenHeight = screen_resolution.width(
        ), screen_resolution.height()
        window.resize(screenWidth, screenHeight)
        window.setWindowTitle('Biathlon Team Data Processing')
        window.show()
        layout = pg.GraphicsLayout(border=(100, 100, 100))
        window.setCentralItem(layout)

        # add plots
        adc1 = layout.addPlot(row=0,
                              col=0,
                              rowspan=3,
                              colspan=3,
                              title="Hall Effect Sensor Voltage vs Time",
                              labels={
                                  'left': 'Square Root of Voltage (V)',
                                  'bottom': 'Time (seconds)'
                              })
        adc2 = layout.addPlot(row=3,
                              col=0,
                              rowspan=3,
                              colspan=3,
                              title="Force Sensor Voltage vs Time",
                              labels={
                                  'left': 'Voltage (V)',
                                  'bottom': 'Time (seconds)'
                              })

        # add button control
        # start capture
        proxy_start = QtGui.QGraphicsProxyWidget()
        startCap = QtGui.QPushButton('Start Data Capture')
        startCap.clicked.connect(self.startCapture)
        proxy_start.setWidget(startCap)
        laystart = layout.addViewBox(row=3,
                                     col=3,
                                     colspan=1,
                                     rowspan=1,
                                     invertY=True,
                                     lockAspect=True,
                                     enableMouse=False)
        laystart.addItem(proxy_start)
        laystart.autoRange()
        # end capture
        proxy_end = QtGui.QGraphicsProxyWidget()
        endCap = QtGui.QPushButton('End Data Capture')
        endCap.clicked.connect(self.endCapture)
        proxy_end.setWidget(endCap)
        layend = layout.addViewBox(row=3,
                                   col=4,
                                   colspan=1,
                                   rowspan=1,
                                   invertY=True,
                                   lockAspect=True,
                                   enableMouse=False)
        layend.addItem(proxy_end)
        layend.autoRange()
        # load capture
        # proxy_load = QtGui.QGraphicsProxyWidget()
        # loadCap = QtGui.QPushButton('Load and Replay Data')
        # loadCap.clicked.connect(self.loadCapture)
        # proxy_load.setWidget(loadCap)
        # layload = layout.addViewBox(row=4, col=3, colspan=1, rowspan=1,invertY=True, lockAspect=True, enableMouse=False)
        # layload.addItem(proxy_load)
        # layload.autoRange()

        # logo
        logoDisplay = layout.addViewBox(row=4,
                                        col=4,
                                        rowspan=1,
                                        colspan=1,
                                        lockAspect=True,
                                        enableMouse=False,
                                        invertY=True)
        img = cv2.imread('logo.jpg', cv2.IMREAD_UNCHANGED)
        img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        logo = pg.ImageItem(img)
        logoDisplay.addItem(logo)
        logoDisplay.autoRange()

        # exit program
        proxy_exit = QtGui.QGraphicsProxyWidget()
        exitCap = QtGui.QPushButton('Exit Program')
        exitCap.clicked.connect(self.exitProgram)
        proxy_exit.setWidget(exitCap)
        layexit = layout.addViewBox(row=4,
                                    col=3,
                                    colspan=1,
                                    rowspan=1,
                                    invertY=True,
                                    lockAspect=True,
                                    enableMouse=False)
        layexit.addItem(proxy_exit)
        layexit.autoRange()

        # add video display
        self.capture = 0
        # start video stream
        if not self.capture:
            self.capture = QtCapture(0)
            exitCap.clicked.connect(self.capture.stop)
            self.capture.setParent(self)
            self.capture.setWindowFlags(QtCore.Qt.Tool)
        self.capture.start()
        videoDisplay = layout.addViewBox(row=0,
                                         col=3,
                                         rowspan=3,
                                         colspan=3,
                                         lockAspect=True,
                                         enableMouse=False)
        current_frame = pg.ImageItem(
            np.zeros((self.capture.height, self.capture.width, 3), np.uint8))
        videoDisplay.addItem(current_frame)

        # antialiasing for better plots
        pg.setConfigOptions(antialias=True)

        # set downsampling and clipping to reduce drawing load
        adc1.setDownsampling(mode='peak')
        adc2.setDownsampling(mode='peak')
        adc1.setClipToView(True)
        adc2.setClipToView(True)

        # set axis parameters
        adc1.setRange(xRange=[-100, 10], yRange=[math.sqrt(3), math.sqrt(4.3)])
        # adc1.setRange(xRange=[-10, 1], yRange=[-1,5])
        adc1.setLimits(xMax=10, xMin=-15, yMax=5, yMin=-1)
        adc2.setRange(xRange=[-10, 1], yRange=[-1, 5])
        adc2.setLimits(xMax=10, xMin=-15, yMax=5, yMin=-1)

        # makes color of both pens yellow
        curve1 = adc1.plot(pen='y')
        curve2 = adc2.plot(pen='y')
コード例 #7
0
    def __init__(self, **kargs):
        super(SignalAndSpike, self).__init__(**kargs)

        # TODO : add global UI option for this
        #~ self.auto_zoom_x = True
        #~ self.auto_zoom_x = False

        sps = self.spikesorter
        self.timerSeeker = TimeSeeker(show_play=False)

        self.sigs = getattr(self.spikesorter, self.sig_name)

        self.view = pg.GraphicsView()
        l = pg.GraphicsLayout()
        self.view.setCentralItem(l)

        self.plots = []
        self.curves = []
        self.threshold_curves = []
        for i in range(sps.trodness):
            l.nextRow()
            viewBox = MyViewBox()
            plot = l.addPlot(viewBox=viewBox)
            self.plots.append(plot)
            plot.hideButtons()
            curve = plot.plot([np.nan], [np.nan], pen='w')
            self.curves.append(curve)
            viewBox.disableAutoRange()
            if i != sps.trodness - 1:
                plot.hideAxis('bottom')
            viewBox.yzoom_in.connect(lambda: self.yzoom(.8))
            viewBox.yzoom_out.connect(lambda: self.yzoom(1.2))
            viewBox.clicked_at_x.connect(self.clicked_at_x)

            tc = pg.InfiniteLine(angle=0, movable=False, pen='g')
            tc.setPos(0.)
            self.threshold_curves.append(tc)
            plot.addItem(tc)
            tc.hide()

        self.scatters = [{} for i in range(sps.trodness)]

        self.timerSeeker.fast_time_changed.connect(self.seek)
        self.timerSeeker.fast_time_changed.connect(self.on_time_changed)

        self.time_by_seg = np.zeros(len(sps.segs), dtype=float)
        for s, seg in enumerate(sps.segs):
            self.time_by_seg[s] = sps.segs[s].analogsignals[
                0].t_start.magnitude

        param_global = [
            {
                'name': 'auto_zoom_on_select',
                'type': 'bool',
                'value': True
            },
            {
                'name': 'zoom_size',
                'type': 'float',
                'value': 0.2,
                'step': 0.001
            },
            {
                'name': 'plot_threshold',
                'type': 'bool',
                'value': True
            },
        ]
        self.params = pg.parametertree.Parameter.create(name='Global options',
                                                        type='group',
                                                        children=param_global)
        self.treeParam = pg.parametertree.ParameterTree(parent=self)
        self.treeParam.header().hide()
        self.treeParam.setParameters(self.params, showTop=True)
        self.treeParam.setWindowTitle(u'Options for signal viewer')
        self.treeParam.setWindowFlags(Qt.Window)

        self.createToolBar()
        self.mainLayout.addWidget(self.toolbar)

        self.mainLayout.addWidget(self.view)
        self.mainLayout.addWidget(self.timerSeeker)

        self.shared_view_with = None
コード例 #8
0
    def __init__(self, x, y):
        super(BandSelectorWidget, self).__init__()

        # parameters
        self.width = 3
        self.x = 20
        self.x_max = 30.
        self.gran = x[1] - x[0]

        graphics_widget = pg.GraphicsWidget()

        self.middle = pg.LinearRegionItem([self.x, self.x],
                                          pg.LinearRegionItem.Vertical)
        self.middle.setBounds(
            [0 + self.width / 2, self.x_max - self.width / 2])
        self.middle.sigRegionChanged.connect(self.regionChanged)
        self.region = pg.LinearRegionItem(
            [self.x - self.width / 2, self.x + self.width / 2],
            pg.LinearRegionItem.Vertical,
            movable=False)
        self.region.setBounds((0, self.x_max))
        self.region.sigRegionChanged.connect(self.regionChanged)

        view_box = pg.ViewBox(parent=graphics_widget,
                              enableMouse=False,
                              enableMenu=False)
        #view_box.setAspectLocked()
        view_box.setYRange(0, 1)
        #view_box.enableAutoRange(view_box.XYAxes)

        axis = pg.AxisItem('bottom', linkView=view_box, parent=graphics_widget)
        plot = pg.PlotDataItem()
        plot.setData(x, y / (max(y[x < self.x_max]) or 1))
        view_box.setXRange(0, self.x_max)

        view_box.addItem(plot)
        view_box.addItem(self.region)
        view_box.addItem(self.middle)
        self.view_box = view_box

        # setup grid layout
        grid_layout = QtGui.QGraphicsGridLayout(graphics_widget)
        grid_layout.addItem(axis, 1, 0)
        grid_layout.addItem(view_box, 0, 0)

        # view
        view = pg.GraphicsView()
        view.setCentralItem(graphics_widget)
        self.width_slider = ParameterSlider('Band width:',
                                            1,
                                            10,
                                            interval=0.1,
                                            value=self.width,
                                            units='Hz')
        self.width_slider.valueChanged.connect(self.changeWidth)
        main_layout = QtGui.QVBoxLayout(self)
        main_layout.addWidget(view)
        main_layout.addWidget(self.width_slider)
        self.band = None
        btn = QtGui.QPushButton('Select')
        btn.clicked.connect(self.select_band)
        btn.setMaximumWidth(200)

        self.band_str = QtGui.QLabel(
            'Band:\t{}\t-\t{} Hz'.format(*self.region.getRegion()))
        main_layout.addWidget(self.band_str)
        main_layout.addWidget(btn)
コード例 #9
0
    def plot_init(self, plot_type, plot_params, plot_ID):
        self.plot_ID = plot_ID
        self.plot_type = plot_type
        self.connect_labrad()

        if plot_type == 'Single Frequency': # Required parameters = sources, averaging #. Data will be in format {Source: value}
            sources = plot_params['sources'] #Acceptable sources - Counter 0/1/2/3.
            self.plot_data['sources'] = sources
            self.plot_data['data'] = {}
            for source in sources:
                self.plot_data['data'][source] = [] # To be plotted

            a = QtGui.QApplication( [] )

            win = pg.GraphicsWindow()
            win.resize(1000,600)
            win.setWindowTitle('Single Frequency')

            p1 = win.addPlot(title="Single Frequency")
            curves = {}
            for source in sources:
                if source == 'Counter0':
                    curves[source] = p1.plot(pen={'color':'y', 'width':5})
                elif source == 'Counter1':
                    curves[source] = p1.plot(pen={'color':'r', 'width':5})
                elif source == 'Counter2':
                    curves[source] = p1.plot(pen={'color':'w', 'width':5})
                elif source == 'Osc1':
                    curves[source] = p1.plot(pen={'color':'y', 'width':5})
                elif source == 'Osc2':
                    curves[source] = p1.plot(pen={'color':'r', 'width':5})
                elif source == 'Osc3':
                    curves[source] = p1.plot(pen={'color':'w', 'width':5})
                else:
                    curves[source] = p1.plot(pen={'color':'c', 'width':5})



            # Enable antialiasing for prettier plots
            pg.setConfigOptions(antialias=True)

            def update(timer):
                if 'save' in self.plot_data.keys():
                    if self.plot_data['save'] == True:
                        timer.stop()
                        save_path =  self.plot_data['save_path']
                        save_prefixes  = self.plot_data['save_prefixes']
                        exporter = pg.exporters.ImageExporter(p1)
                        exporterCSV = pg.exporters.CSVExporter(p1)
                        for save_prefix in save_prefixes:
                            if not os.path.exists(save_path+str(save_prefix)+'.png'):
                                exporter.export(save_path+str(save_prefix)+'.png')
                                exporterCSV.export(save_path+str(save_prefix)+'.csv')
                                break

                for source in sources:
                    data = self.plot_data['data'][source]
                    curves[source].setData(data)


            timer = QtCore.QTimer()
            timer.timeout.connect(partial(update,timer))
            timer.start(50)
            QtGui.QApplication.instance().exec_()



        elif plot_type == 'Frequency Scan': # Required parameters = sources, averaging #, Frequency Range. Data will be in format {Source: value}
            sources = plot_params['sources'] #Acceptable sources - Counter 0/1/2/3.
            frequencies = plot_params['Frequency Range']
            self.plot_data['sources'] = sources
            self.plot_data['data'] = {}

            for source in sources:
                self.plot_data['data'][source] = [] # To be plotted


            a = QtGui.QApplication( [] )

            win = pg.GraphicsWindow()
            win.resize(1000,600)
            win.setWindowTitle('Frequency Scan')

            p1 = win.addPlot(title="Frequency Scan")
            curves = {}
            for source in sources:
                if source == 'Counter0':
                    curves[source] = p1.plot(pen={'color':'y', 'width':5})
                elif source == 'Counter1':
                    curves[source] = p1.plot(pen={'color':'r', 'width':5})
                elif source == 'Counter1':
                    curves[source] = p1.plot(pen={'color':'w', 'width':5})
                else:
                    curves[source] = p1.plot(pen={'color':'c', 'width':5})

            # Enable antialiasing for prettier plots
            pg.setConfigOptions(antialias=True)

            def update(timer):
                if 'save' in self.plot_data.keys():
                    if self.plot_data['save'] == True:
                        self.plot_data['save'] = False
                        timer.stop()
                        save_path =  self.plot_data['save_path']
                        save_prefixes  = self.plot_data['save_prefixes']
                        exporter = pg.exporters.ImageExporter(p1)
                        exporterCSV = pg.exporters.CSVExporter(p1)
                        for save_prefix in save_prefixes:
                            if not os.path.exists(save_path+str(save_prefix)+'.png'):
                                exporter.export(save_path+str(save_prefix)+'.png')
                                exporterCSV.export(save_path+str(save_prefix)+'.csv')
                                break

                for source in sources:
                    data = self.plot_data['data'][source]
                    num_points = len(data)
                    curves[source].setData(x = frequencies[0:num_points], y = data)

            timer = QtCore.QTimer()
            timer.timeout.connect(partial(update,timer))
            timer.start(50)
            QtGui.QApplication.instance().exec_()


        elif plot_type == 'Fast Scan': # Required parameters = sources, averaging #, Frequency Range. Data will be in format {Source: value}
            sources = plot_params['sources'] #Acceptable sources - Counter 0/1/2/3
            self.plot_data['sources'] = sources
            self.plot_data['data'] = {}

            for source in sources:
                self.plot_data['data'][source] = [] # To be plotted


            a = QtGui.QApplication( [] )


            win = pg.GraphicsWindow()
            win.setWindowTitle('Frequency Scan')
            win.resize(1000,600)

            keepTrace = QtGui.QCheckBox('Keep current trace')

            p1 = win.addPlot(title="Frequency Scan")
            curves = {}
            for source in sources:
                if source == 'Counter0':
                    curves[source] = p1.plot(pen={'color':'y', 'width':5})
                    curves['keepTrace'+source] = p1.plot(pen={'color':'r', 'width':5})
                elif source == 'Counter1':
                    curves[source] = p1.plot(pen={'color':'w', 'width':5})
                    curves['keepTrace'+source] = p1.plot(pen={'color':'g', 'width':5})
                else:
                    curves[source] = p1.plot(pen={'color': 'c', 'width':5})
                    curves['keepTrace'+source] = p1.plot(pen={'color':'r', 'width':5})



            # Enable antialiasing for prettier plots
            pg.setConfigOptions(antialias=True)

            layout = pg.LayoutWidget()
            layout.addWidget(keepTrace, row=1, col = 0)
            layout.addWidget(win, row = 2, col = 0)
            layout.show()
            layout.resize(1000,600)
            self.fast_scan_keepTrace_past = False

            def update(timer):
                if 'save' in self.plot_data.keys():
                    if self.plot_data['save'] == True:
                        self.plot_data['save'] = False
                        timer.stop()
                        save_path =  self.plot_data['save_path']
                        save_prefixes  = self.plot_data['save_prefixes']
                        exporter = pg.exporters.ImageExporter(p1)
                        exporterCSV = pg.exporters.CSVExporter(p1)
                        for save_prefix in save_prefixes:
                            if not os.path.exists(save_path+str(save_prefix)+'.png'):
                                exporter.export(save_path+str(save_prefix)+'.png')
                                exporterCSV.export(save_path+str(save_prefix)+'.csv')
                                break

                if keepTrace.isChecked() and not(self.fast_scan_keepTrace_past):
                    self.fast_scan_keepTrace_past = True
                    for source in sources:
                        data = self.plot_data['data'][source]
                        curves['keepTrace'+source].setData( y = data)


                elif not(keepTrace.isChecked()):
                    self.fast_scan_keepTrace_past = False
                    for source in sources:
                        data = self.plot_data['data'][source]
                        curves['keepTrace'+source].setData( y = [])


                for source in sources:
                    data = self.plot_data['data'][source]
                    curves[source].setData( y = data)

            timer = QtCore.QTimer()
            timer.timeout.connect(partial(update,timer))
            timer.start(50)
            QtGui.QApplication.instance().exec_()


        elif plot_type == 'Camera':
            self.plot_data['data'] = np.zeros((550,550), dtype=np.uint8).tolist()
            self.data_out = np.array([[0]])
            pg.mkQApp()

            win = pg.GraphicsView()
            win.setWindowTitle('Top Camera')

            win_lay = pg.GraphicsLayout()
            win_vb = win_lay.addViewBox()
            win.setCentralItem(win_lay)
            # Item for displaying image data
            img = pg.ImageItem()
            win_vb.addItem(img)


            roi = pg.ROI([82, 82], [386,386], angle=0.0, snapSize= 1.0, scaleSnap = True, translateSnap = True, pen = pg.mkPen('r',width=2))  # "top","left","height""width"
            roi.addScaleHandle([1, 1], [0, 0])
            roi.addScaleHandle([0, 0], [1, 1])
            roi.setZValue(10)  # make sure ROI is drawn above image
            win_vb.addItem(roi)

            (rx0,ry0) = roi.pos()
            (rxsize,rysize) = roi.size()


            win2 = pg.GraphicsWindow()

            p2x = win2.addPlot(title="Y projection")
            win2.nextRow()
            p2y = win2.addPlot(title="X projection")
            win2.resize(75,75)
            curvex_data = p2x.plot(pen='r', y = np.zeros(int(rxsize)) , x = np.arange(int(rxsize))+int(rx0)-275)
            curvey_data = p2y.plot(pen='r', y = np.zeros(int(rysize)) , x = np.arange(int(rysize))+int(ry0)-275)
            curvex_fit = p2x.plot(pen='w')
            curvey_fit = p2y.plot(pen='w')



            NASave = QtGui.QPushButton('Set as No Atoms (NA)')
            NARemove = QtGui.QCheckBox('Divide NA')
            BkgSave = QtGui.QPushButton('Set as noise')
            BkgRemove = QtGui.QCheckBox('Subtract noise')
            GetANumber = QtGui.QCheckBox('Get atom number')



            newfont = QtGui.QFont("Times", 25, QtGui.QFont.Bold)
            atomNumberDisplay = QtGui.QLabel('0')
            atomNumberDisplay.setFont(newfont)
            atomNumberDisplay_label = QtGui.QLabel('Atom Number')
            atomNumberDisplay_label.setFont(newfont)

            Rot_label = QtGui.QLabel('Rot angle')
            Rot_label.setFont(QtGui.QFont("Times", 15))
            Rot = QtGui.QLineEdit('47')

            Avg_label = QtGui.QLabel('Averages')
            Avg_label.setFont(QtGui.QFont("Times", 15))
            Avg = QtGui.QLineEdit('1')

            f_label = QtGui.QLabel('Fname: ')
            f_label.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter)
            f_label.setFont(QtGui.QFont("Times", 15))
            finput = QtGui.QLineEdit('IM0')

            ImSave = QtGui.QPushButton('Save Data')


            XDisplay = QtGui.QLabel('0')
            XDisplay.setFont(newfont)
            XDisplay_label = QtGui.QLabel('X')
            XDisplay_label.setFont(newfont)

            YDisplay = QtGui.QLabel('0')
            YDisplay.setFont(newfont)
            YDisplay_label = QtGui.QLabel('Y')
            YDisplay_label.setFont(newfont)


            SigmaXDisplay = QtGui.QLabel('0')
            SigmaXDisplay.setFont(newfont)
            SigmaXDisplay_label = QtGui.QLabel(u"\u03C3"+'X')
            SigmaXDisplay_label.setFont(newfont)


            SigmaYDisplay = QtGui.QLabel('0')
            SigmaYDisplay.setFont(newfont)
            SigmaYDisplay_label = QtGui.QLabel(u"\u03C3"+'Y')
            SigmaYDisplay_label.setFont(newfont)

            def saveIm():

                filename = QtGui.QFileDialog.getSaveFileName(None ,"Save Image as...", "C:/Users/RoyOutput/Dropbox (MIT)/" + str(finput.text()) + '.png', "Image files (*.png)" )
                basename = filename.replace(".png","")

                Imexporter = pg.exporters.ImageExporter(win_vb)
                Imexporter.export(basename + '.png')
                Imexporter = pg.exporters.ImageExporter(p2y)
                Imexporter.export(basename + '_X.png')
                Imexporter = pg.exporters.ImageExporter(p2x)
                Imexporter.export(basename + '_Y.png')
                exporterCSV = pg.exporters.CSVExporter(p2x)
                exporterCSV.export(basename + '_Y.csv')
                exporterCSV = pg.exporters.CSVExporter(p2y)
                exporterCSV.export(basename + '_X.csv')

                np.savetxt( str(basename) + '.txt', (img.image).astype(float)  , delimiter=',')


            ImSave.clicked.connect(saveIm)


            layout = pg.LayoutWidget()
            layout.addWidget(NASave)
            layout.addWidget(NARemove)
            layout.addWidget(BkgSave)
            layout.addWidget(BkgRemove)
            layout.addWidget(GetANumber)
            layout.addWidget(Rot_label, col=10)
            layout.addWidget(Rot, col=11)
            layout.addWidget(Avg_label, col=12)
            layout.addWidget(Avg, col=13)
            layout.addWidget(ImSave, row=6, col = 0 , colspan=2, rowspan=1)
            layout.addWidget(f_label,row=6, col = 2 , colspan=1, rowspan=1)
            layout.addWidget(finput ,row=6, col = 3 , colspan=1.5, rowspan=1)
            layout.addWidget(win, row=1, col=0, colspan=6, rowspan=4)
            layout.addWidget(win2, row=2, col=10, colspan=5, rowspan=1)
            layout.addWidget(atomNumberDisplay_label, row=5, col=0, colspan=1, rowspan=1)
            layout.addWidget(atomNumberDisplay, row=5, col=2, colspan=1, rowspan=1)
            layout.addWidget(XDisplay_label, row=5, col=13, colspan=1, rowspan=1)
            layout.addWidget(XDisplay, row=5, col=14, colspan=1, rowspan=1)
            layout.addWidget(YDisplay_label, row=6, col=13, colspan=1, rowspan=1)
            layout.addWidget(YDisplay, row=6, col=14, colspan=1, rowspan=1)
            layout.addWidget(SigmaXDisplay_label, row=5, col=10, colspan=1, rowspan=1)
            layout.addWidget(SigmaXDisplay, row=5, col=11, colspan=1, rowspan=1)
            layout.addWidget(SigmaYDisplay_label, row=6, col=10, colspan=1, rowspan=1)
            layout.addWidget(SigmaYDisplay, row=6, col=11, colspan=1, rowspan=1)
            layout.resize(1000,800)
            layout.show()




            def saveBkg():
                #data = np.array(self.plot_data['data']).astype(np.uint8)
                self.cameraBkg = self.data_ave

            BkgSave.clicked.connect(saveBkg)

            def saveNA():
                #data = np.array(self.plot_data['data']).astype(np.uint8)
                self.cameraNA = self.data_ave

            NASave.clicked.connect(saveNA)

            def gaussian(offset, height, center_x, center_y, width_x, width_y):
                """Returns a gaussian function with the given parameters"""
                width_x = float(width_x)
                width_y = float(width_y)
                return lambda x,y: offset+height*np.exp(
                            -(((x-center_x)/width_x)**2+((y-center_y)/width_y)**2)/2)

            self.camera_data_prev= [0]
            self.avg_count = 0
            self.data_ave = []
            self.data = []

            def update():
                    #Be smarter about this....
                    temp_data = np.array(self.plot_data['data']).astype(np.float)

                    if np.array_equal(self.camera_data_prev, temp_data):
                        return 1
                    else :
                        self.camera_data_prev = temp_data


                    averages  = int(Avg.text())

                    if self.avg_count < averages:
                        self.avg_count += 1
                        self.data.append(temp_data)
                    elif self.avg_count > averages:
                        self.avg_count = averages
                        if self.data[0:averages-1]== []:
                            self.data = [temp_data]
                        else:
                            self.data = [temp_data]+ self.data[0:averages-1]
                    else:
                        if self.data[1:averages]== []:
                            self.data = [temp_data]
                        else:
                            self.data = [temp_data] + self.data[0:averages-1]


                    self.data_ave = self.data[0]
                    data_len = len(self.data)
                    

                    for i in xrange(data_len-1):
                        self.data_ave += self.data[i+1]
                    self.data_ave /= data_len
                    
                    data = self.data_ave

                    autoLevels = True




                    if BkgRemove.isChecked() and NARemove.isChecked():
                        data = np.true_divide((data - self.cameraBkg),(self.cameraNA - self.cameraBkg))
                        data[data == np.inf] = 1
                        data[np.isnan(data)] = 1
                        data[data <= 0] = 1
                        autoLevels =False

                    elif NARemove.isChecked():
                        data = np.true_divide(data, self.cameraNA)
                        data[data == np.inf] = 1
                        data[np.isnan(data)] = 1
                        autoLevels =False


                    elif BkgRemove.isChecked():
                         data = data - self.cameraBkg
                         data[data <= 0] = 1

                    rot_angle = float(Rot.text())
                    data = sp.rotate(data, rot_angle, reshape=False)


                    try:
                        data_roi= roi.getArrayRegion(data, img)
                    except:
                        print 'Exception!'
                        data_roi = np.array(data)


                    self.data_out = data_roi
                    (rx0,ry0) = roi.pos()
                    (rxsize,rysize) = roi.size()


                    if GetANumber.isChecked():

                        atom_number, offset, height, x, y, width_x, width_y = self.FindAtomNumber(data_roi )
                        atomNumberDisplay.setText( "{:.3E}".format(atom_number*(topmag**2)))

                        pixel_ratio = 4.65 #micrometer / pixel
                        XDisplay.setText( "{:.2E}".format(x+rx0 - 275))
                        YDisplay.setText( "{:.2E}".format(y+ry0 - 275))
                        SigmaXDisplay.setText( "{:.2E}".format(pixel_ratio*width_x*topmag))
                        SigmaYDisplay.setText( "{:.2E}".format(pixel_ratio*width_y*topmag))

                        fit = gaussian(*[offset, height, x, y, width_x, width_y])
                        data_fit = fit(*np.indices(data_roi.shape))


                        curvey_fit.setData(y = data_fit.sum(axis=1), x = np.arange( data_fit.shape[0])+ int(rx0)-275 ) #data_fit.sum(axis=0)
                        curvex_fit.setData(y = data_fit.sum(axis=0), x = np.arange( data_fit.shape[1])+ int(ry0)-275 ) #data_fit.sum(axis=1)


                    curvex_data.setData( y = np.log(data_roi).sum(axis=0), x = np.arange(data_roi.shape[1])+ int(ry0)-275 ) #np.log(data_roi).sum(axis=0),
                    curvey_data.setData( y = np.log(data_roi).sum(axis=1), x = np.arange(data_roi.shape[0])+ int(rx0)-275 ) #np.log(data_roi).sum(axis=1),

                    if autoLevels:
                        img.setImage(image=data, autoDownsample = True)
                    else:
                        img.setImage(image=data, autoLevels=False, autoDownsample = True, levels = (0.5, 1), lut=lut)


            timer = QtCore.QTimer()
            timer.timeout.connect(update)
            timer.start(100)

            QtGui.QApplication.instance().exec_()

        elif plot_type == 'Side Camera':

            self.plot_data['data'] = np.zeros((480,640), dtype=np.uint8).tolist()
            self.data_out = np.array([[0]])
            pg.mkQApp()

            win = pg.GraphicsView()
            win_lay = pg.GraphicsLayout()
            win_vb = win_lay.addViewBox()
            win.setCentralItem(win_lay)
            # Item for displaying image data
            img = pg.ImageItem()
            win_vb.addItem(img)


            roi = pg.ROI([82, 82], [386,386], angle=0.0, snapSize= 1.0, scaleSnap = True, translateSnap = True, pen = pg.mkPen('r',width=2))  # "top","left","height""width"
            roi.addScaleHandle([1, 1], [0, 0])
            roi.addScaleHandle([0, 0], [1, 1])
            roi.setZValue(10)  # make sure ROI is drawn above image
            win_vb.addItem(roi)

            (rx0,ry0) = roi.pos()
            (rxsize,rysize) = roi.size()


            win2 = pg.GraphicsWindow()
            p2x = win2.addPlot(title="Y projection")
            win2.nextRow()
            p2y = win2.addPlot(title="X projection")
            win2.resize(75,75)
            curvex_data = p2x.plot(pen='r', y = np.zeros(int(rxsize)) , x = np.arange(int(rxsize))+int(rx0)-275)
            curvey_data = p2y.plot(pen='r', y = np.zeros(int(rysize)) , x = np.arange(int(rysize))+int(ry0)-275)
            curvex_fit = p2x.plot(pen='w')
            curvey_fit = p2y.plot(pen='w')



            NASave = QtGui.QPushButton('Set as No Atoms (NA)')
            NARemove = QtGui.QCheckBox('Divide NA')
            BkgSave = QtGui.QPushButton('Set as noise')
            BkgRemove = QtGui.QCheckBox('Subtract noise')
            GetANumber = QtGui.QCheckBox('Get atom number')




            newfont = QtGui.QFont("Times", 25, QtGui.QFont.Bold)
            atomNumberDisplay = QtGui.QLabel('0')
            atomNumberDisplay.setFont(newfont)
            atomNumberDisplay_label = QtGui.QLabel('Atom Number')
            atomNumberDisplay_label.setFont(newfont)

            Rot_label = QtGui.QLabel('Rot angle')
            Rot_label.setFont(QtGui.QFont("Times", 15))
            Rot = QtGui.QLineEdit('0')

            Avg_label = QtGui.QLabel('Averages')
            Avg_label.setFont(QtGui.QFont("Times", 15))
            Avg = QtGui.QLineEdit('1')

            f_label = QtGui.QLabel('Fname: ')
            f_label.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter)
            f_label.setFont(QtGui.QFont("Times", 15))
            finput = QtGui.QLineEdit('IM0')

            ImSave = QtGui.QPushButton('Save Data')


            XDisplay = QtGui.QLabel('0')
            XDisplay.setFont(newfont)
            XDisplay_label = QtGui.QLabel('X')
            XDisplay_label.setFont(newfont)

            YDisplay = QtGui.QLabel('0')
            YDisplay.setFont(newfont)
            YDisplay_label = QtGui.QLabel('Y')
            YDisplay_label.setFont(newfont)


            SigmaXDisplay = QtGui.QLabel('0')
            SigmaXDisplay.setFont(newfont)
            SigmaXDisplay_label = QtGui.QLabel(u"\u03C3"+'X')
            SigmaXDisplay_label.setFont(newfont)


            SigmaYDisplay = QtGui.QLabel('0')
            SigmaYDisplay.setFont(newfont)
            SigmaYDisplay_label = QtGui.QLabel(u"\u03C3"+'Y')
            SigmaYDisplay_label.setFont(newfont)

            def saveIm():

                filename = QtGui.QFileDialog.getSaveFileName(None ,"Save Image as...", "C:/Users/RoyOutput/Dropbox (MIT)/" + str(finput.text()) + '.png', "Image files (*.png)" )
                basename = filename.replace(".png","")

                Imexporter = pg.exporters.ImageExporter(win_vb)
                Imexporter.export(basename + 'S.png')
                Imexporter = pg.exporters.ImageExporter(p2y)
                Imexporter.export(basename + '_XS.png')
                Imexporter = pg.exporters.ImageExporter(p2x)
                Imexporter.export(basename + '_YS.png')
                exporterCSV = pg.exporters.CSVExporter(p2x)
                exporterCSV.export(basename + '_YS.csv')
                exporterCSV = pg.exporters.CSVExporter(p2y)
                exporterCSV.export(basename + '_XS.csv')

                np.savetxt( str(basename) + '_S.txt', (img.image).astype(float)  , delimiter=',')


            ImSave.clicked.connect(saveIm)


            layout = pg.LayoutWidget()
            layout.addWidget(NASave)
            layout.addWidget(NARemove)
            layout.addWidget(BkgSave)
            layout.addWidget(BkgRemove)
            layout.addWidget(GetANumber)
            layout.addWidget(Rot_label, col=10)
            layout.addWidget(Rot, col=11)
            layout.addWidget(Avg_label, col=12)
            layout.addWidget(Avg, col=13)
            layout.addWidget(ImSave, row=6, col = 0 , colspan=2, rowspan=1)
            layout.addWidget(f_label,row=6, col = 2 , colspan=1, rowspan=1)
            layout.addWidget(finput ,row=6, col = 3 , colspan=1.5, rowspan=1)
            layout.addWidget(win, row=1, col=0, colspan=6, rowspan=4)
            layout.addWidget(win2, row=2, col=10, colspan=5, rowspan=1)
            layout.addWidget(atomNumberDisplay_label, row=5, col=0, colspan=1, rowspan=1)
            layout.addWidget(atomNumberDisplay, row=5, col=2, colspan=1, rowspan=1)
            layout.addWidget(XDisplay_label, row=5, col=13, colspan=1, rowspan=1)
            layout.addWidget(XDisplay, row=5, col=14, colspan=1, rowspan=1)
            layout.addWidget(YDisplay_label, row=6, col=13, colspan=1, rowspan=1)
            layout.addWidget(YDisplay, row=6, col=14, colspan=1, rowspan=1)
            layout.addWidget(SigmaXDisplay_label, row=5, col=10, colspan=1, rowspan=1)
            layout.addWidget(SigmaXDisplay, row=5, col=11, colspan=1, rowspan=1)
            layout.addWidget(SigmaYDisplay_label, row=6, col=10, colspan=1, rowspan=1)
            layout.addWidget(SigmaYDisplay, row=6, col=11, colspan=1, rowspan=1)
            layout.resize(1000,800)
            layout.show()




            def saveBkg():
                #data = np.array(self.plot_data['data']).astype(np.uint8)
                self.cameraBkg = self.data_ave

            BkgSave.clicked.connect(saveBkg)

            def saveNA():
                #data = np.array(self.plot_data['data']).astype(np.uint8)
                self.cameraNA = self.data_ave

            NASave.clicked.connect(saveNA)

            def gaussian(offset, height, center_x, center_y, width_x, width_y):
                """Returns a gaussian function with the given parameters"""
                width_x = float(width_x)
                width_y = float(width_y)
                return lambda x,y: offset+height*np.exp(
                            -(((x-center_x)/width_x)**2+((y-center_y)/width_y)**2)/2)

            self.camera_data_prev= [0]
            self.avg_count = 0
            self.data = []

            def update():
                    #Be smarter about this....
                    temp_data = np.array(self.plot_data['data']).astype(np.float)

                    if np.array_equal(self.camera_data_prev, temp_data):
                        return 1
                    else :
                        self.camera_data_prev = temp_data


                    averages  = int(Avg.text())

                    if self.avg_count < averages:
                        self.avg_count += 1
                        self.data.append(temp_data)
                    elif self.avg_count > averages:
                        self.avg_count = averages
                        if self.data[0:averages-1]== []:
                            self.data = [temp_data]
                        else:
                            self.data = [temp_data]+ self.data[0:averages-1]
                    else:
                        if self.data[1:averages]== []:
                            self.data = [temp_data]
                        else:
                            self.data = [temp_data] + self.data[0:averages-1]


                    data = self.data[0]
                    data_len = len(self.data)


                    for i in xrange(data_len-1):
                        data += self.data[i+1]
                    data /= data_len


                    autoLevels = True




                    if BkgRemove.isChecked() and NARemove.isChecked():
                        data = np.true_divide((data - self.cameraBkg),(self.cameraNA - self.cameraBkg))
                        data[data == np.inf] = 1
                        data[np.isnan(data)] = 1
                        data[data <= 0] = 1
                        autoLevels =False

                    elif NARemove.isChecked():
                        data = np.true_divide(data, self.cameraNA)
                        data[data == np.inf] = 1
                        data[np.isnan(data)] = 1
                        autoLevels =False


                    elif BkgRemove.isChecked():
                         data = data - self.cameraBkg
                         data[data <= 0] = 1

                    rot_angle = float(Rot.text())
                    data = sp.rotate(data, rot_angle, reshape=False)


                    try:
                        data_roi= roi.getArrayRegion(data, img)
                    except:
                        print 'Exception!'
                        data_roi = np.array(data)


                    self.data_out = data_roi
                    (rx0,ry0) = roi.pos()
                    (rxsize,rysize) = roi.size()


                    if GetANumber.isChecked():

                        atom_number, offset, height, x, y, width_x, width_y = self.FindAtomNumber(data_roi )
                        atomNumberDisplay.setText( "{:.3E}".format(atom_number*(sidemag**2)))

                        pixel_ratio = 7.4 #micrometer / pixel
                        XDisplay.setText( "{:.2E}".format(x+rx0 - 275))
                        YDisplay.setText( "{:.2E}".format(y+ry0 - 275))
                        SigmaXDisplay.setText( "{:.2E}".format(pixel_ratio*width_x*sidemag))
                        SigmaYDisplay.setText( "{:.2E}".format(pixel_ratio*width_y*sidemag))

                        fit = gaussian(*[offset, height, x, y, width_x, width_y])
                        data_fit = fit(*np.indices(data_roi.shape))


                        curvey_fit.setData(y = data_fit.sum(axis=1), x = np.arange( data_fit.shape[0])+ int(rx0)-275 ) #data_fit.sum(axis=0)
                        curvex_fit.setData(y = data_fit.sum(axis=0), x = np.arange( data_fit.shape[1])+ int(ry0)-275 ) #data_fit.sum(axis=1)


                    curvex_data.setData( y = np.log(data_roi).sum(axis=0), x = np.arange(data_roi.shape[1])+ int(ry0)-275 ) #np.log(data_roi).sum(axis=0),
                    curvey_data.setData( y = np.log(data_roi).sum(axis=1), x = np.arange(data_roi.shape[0])+ int(rx0)-275 ) #np.log(data_roi).sum(axis=1),

                    if autoLevels:
                        img.setImage(image=data, autoDownsample = True)
                    else:
                        img.setImage(image=data, autoLevels=False, autoDownsample = True, levels = (0.5, 1), lut=lut)


            timer = QtCore.QTimer()
            timer.timeout.connect(update)
            timer.start(100)

            QtGui.QApplication.instance().exec_()

        elif plot_type == 'Side Camera3':

            self.plot_data['data'] = np.zeros((480,640), dtype=np.uint8).tolist()
            self.data_out = np.array([[0]])
            pg.mkQApp()

            win = pg.GraphicsView()
            win_lay = pg.GraphicsLayout()
            win_vb = win_lay.addViewBox()
            win.setCentralItem(win_lay)
            # Item for displaying image data
            img = pg.ImageItem()
            win_vb.addItem(img)


            roi = pg.ROI([82, 82], [386,386], angle=0.0, snapSize= 1.0, scaleSnap = True, translateSnap = True, pen = pg.mkPen('r',width=2))  # "top","left","height""width"
            roi.addScaleHandle([1, 1], [0, 0])
            roi.addScaleHandle([0, 0], [1, 1])
            roi.setZValue(10)  # make sure ROI is drawn above image
            win_vb.addItem(roi)

            (rx0,ry0) = roi.pos()
            (rxsize,rysize) = roi.size()


            win2 = pg.GraphicsWindow()
            p2x = win2.addPlot(title="Y projection")
            win2.nextRow()
            p2y = win2.addPlot(title="X projection")
            win2.resize(75,75)
            curvex_data = p2x.plot(pen='r', y = np.zeros(int(rxsize)) , x = np.arange(int(rxsize))+int(rx0)-275)
            curvey_data = p2y.plot(pen='r', y = np.zeros(int(rysize)) , x = np.arange(int(rysize))+int(ry0)-275)
            curvex_fit = p2x.plot(pen='w')
            curvey_fit = p2y.plot(pen='w')



            NASave = QtGui.QPushButton('Set as No Atoms (NA)')
            NARemove = QtGui.QCheckBox('Divide NA')
            BkgSave = QtGui.QPushButton('Set as noise')
            BkgRemove = QtGui.QCheckBox('Subtract noise')
            GetANumber = QtGui.QCheckBox('Get atom number')




            newfont = QtGui.QFont("Times", 25, QtGui.QFont.Bold)
            atomNumberDisplay = QtGui.QLabel('0')
            atomNumberDisplay.setFont(newfont)
            atomNumberDisplay_label = QtGui.QLabel('Atom Number')
            atomNumberDisplay_label.setFont(newfont)

            Rot_label = QtGui.QLabel('Rot angle')
            Rot_label.setFont(QtGui.QFont("Times", 15))
            Rot = QtGui.QLineEdit('0')

            Avg_label = QtGui.QLabel('Averages')
            Avg_label.setFont(QtGui.QFont("Times", 15))
            Avg = QtGui.QLineEdit('1')

            f_label = QtGui.QLabel('Fname: ')
            f_label.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter)
            f_label.setFont(QtGui.QFont("Times", 15))
            finput = QtGui.QLineEdit('IM0')

            ImSave = QtGui.QPushButton('Save Data')


            XDisplay = QtGui.QLabel('0')
            XDisplay.setFont(newfont)
            XDisplay_label = QtGui.QLabel('X')
            XDisplay_label.setFont(newfont)

            YDisplay = QtGui.QLabel('0')
            YDisplay.setFont(newfont)
            YDisplay_label = QtGui.QLabel('Y')
            YDisplay_label.setFont(newfont)


            SigmaXDisplay = QtGui.QLabel('0')
            SigmaXDisplay.setFont(newfont)
            SigmaXDisplay_label = QtGui.QLabel(u"\u03C3"+'X')
            SigmaXDisplay_label.setFont(newfont)


            SigmaYDisplay = QtGui.QLabel('0')
            SigmaYDisplay.setFont(newfont)
            SigmaYDisplay_label = QtGui.QLabel(u"\u03C3"+'Y')
            SigmaYDisplay_label.setFont(newfont)

            def saveIm():

                filename = QtGui.QFileDialog.getSaveFileName(None ,"Save Image as...", "C:/Users/RoyOutput/Dropbox (MIT)/" + str(finput.text()) + '.png', "Image files (*.png)" )
                basename = filename.replace(".png","")

                Imexporter = pg.exporters.ImageExporter(win_vb)
                Imexporter.export(basename + 'S.png')
                Imexporter = pg.exporters.ImageExporter(p2y)
                Imexporter.export(basename + '_XS.png')
                Imexporter = pg.exporters.ImageExporter(p2x)
                Imexporter.export(basename + '_YS.png')
                exporterCSV = pg.exporters.CSVExporter(p2x)
                exporterCSV.export(basename + '_YS.csv')
                exporterCSV = pg.exporters.CSVExporter(p2y)
                exporterCSV.export(basename + '_XS.csv')

                np.savetxt( str(basename) + '_S.txt', (img.image).astype(float)  , delimiter=',')


            ImSave.clicked.connect(saveIm)


            layout = pg.LayoutWidget()
            layout.addWidget(NASave)
            layout.addWidget(NARemove)
            layout.addWidget(BkgSave)
            layout.addWidget(BkgRemove)
            layout.addWidget(GetANumber)
            layout.addWidget(Rot_label, col=10)
            layout.addWidget(Rot, col=11)
            layout.addWidget(Avg_label, col=12)
            layout.addWidget(Avg, col=13)
            layout.addWidget(ImSave, row=6, col = 0 , colspan=2, rowspan=1)
            layout.addWidget(f_label,row=6, col = 2 , colspan=1, rowspan=1)
            layout.addWidget(finput ,row=6, col = 3 , colspan=1.5, rowspan=1)
            layout.addWidget(win, row=1, col=0, colspan=6, rowspan=4)
            layout.addWidget(win2, row=2, col=10, colspan=5, rowspan=1)
            layout.addWidget(atomNumberDisplay_label, row=5, col=0, colspan=1, rowspan=1)
            layout.addWidget(atomNumberDisplay, row=5, col=2, colspan=1, rowspan=1)
            layout.addWidget(XDisplay_label, row=5, col=13, colspan=1, rowspan=1)
            layout.addWidget(XDisplay, row=5, col=14, colspan=1, rowspan=1)
            layout.addWidget(YDisplay_label, row=6, col=13, colspan=1, rowspan=1)
            layout.addWidget(YDisplay, row=6, col=14, colspan=1, rowspan=1)
            layout.addWidget(SigmaXDisplay_label, row=5, col=10, colspan=1, rowspan=1)
            layout.addWidget(SigmaXDisplay, row=5, col=11, colspan=1, rowspan=1)
            layout.addWidget(SigmaYDisplay_label, row=6, col=10, colspan=1, rowspan=1)
            layout.addWidget(SigmaYDisplay, row=6, col=11, colspan=1, rowspan=1)
            layout.resize(1000,800)
            layout.show()




            def saveBkg():
                #data = np.array(self.plot_data['data']).astype(np.uint8)
                self.cameraBkg = self.data_ave

            BkgSave.clicked.connect(saveBkg)

            def saveNA():
                #data = np.array(self.plot_data['data']).astype(np.uint8)
                self.cameraNA = self.data_ave

            NASave.clicked.connect(saveNA)

            def gaussian(offset, height, center_x, center_y, width_x, width_y):
                """Returns a gaussian function with the given parameters"""
                width_x = float(width_x)
                width_y = float(width_y)
                return lambda x,y: offset+height*np.exp(
                            -(((x-center_x)/width_x)**2+((y-center_y)/width_y)**2)/2)

            self.camera_data_prev= [0]
            self.avg_count = 0
            self.data = []

            def update():
                    #Be smarter about this....
                    temp_data = np.array(self.plot_data['data']).astype(np.float)

                    if np.array_equal(self.camera_data_prev, temp_data):
                        return 1
                    else :
                        self.camera_data_prev = temp_data


                    averages  = int(Avg.text())

                    if self.avg_count < averages:
                        self.avg_count += 1
                        self.data.append(temp_data)
                    elif self.avg_count > averages:
                        self.avg_count = averages
                        if self.data[0:averages-1]== []:
                            self.data = [temp_data]
                        else:
                            self.data = [temp_data]+ self.data[0:averages-1]
                    else:
                        if self.data[1:averages]== []:
                            self.data = [temp_data]
                        else:
                            self.data = [temp_data] + self.data[0:averages-1]


                    data = self.data[0]
                    data_len = len(self.data)


                    for i in xrange(data_len-1):
                        data += self.data[i+1]
                    data /= data_len


                    autoLevels = True




                    if BkgRemove.isChecked() and NARemove.isChecked():
                        data = np.true_divide((data - self.cameraBkg),(self.cameraNA - self.cameraBkg))
                        data[data == np.inf] = 1
                        data[np.isnan(data)] = 1
                        data[data <= 0] = 1
                        autoLevels =False

                    elif NARemove.isChecked():
                        data = np.true_divide(data, self.cameraNA)
                        data[data == np.inf] = 1
                        data[np.isnan(data)] = 1
                        autoLevels =False


                    elif BkgRemove.isChecked():
                         data = data - self.cameraBkg
                         data[data <= 0] = 1

                    rot_angle = float(Rot.text())
                    data = sp.rotate(data, rot_angle, reshape=False)


                    try:
                        data_roi= roi.getArrayRegion(data, img)
                    except:
                        print 'Exception!'
                        data_roi = np.array(data)


                    self.data_out = data_roi
                    (rx0,ry0) = roi.pos()
                    (rxsize,rysize) = roi.size()


                    if GetANumber.isChecked():

                        atom_number, offset, height, x, y, width_x, width_y = self.FindAtomNumber(data_roi )
                        atomNumberDisplay.setText( "{:.3E}".format(atom_number*(sidemag**2)))

                        pixel_ratio = 7.4 #micrometer / pixel
                        XDisplay.setText( "{:.2E}".format(x+rx0 - 275))
                        YDisplay.setText( "{:.2E}".format(y+ry0 - 275))
                        SigmaXDisplay.setText( "{:.2E}".format(pixel_ratio*width_x*sidemag))
                        SigmaYDisplay.setText( "{:.2E}".format(pixel_ratio*width_y*sidemag))

                        fit = gaussian(*[offset, height, x, y, width_x, width_y])
                        data_fit = fit(*np.indices(data_roi.shape))


                        curvey_fit.setData(y = data_fit.sum(axis=1), x = np.arange( data_fit.shape[0])+ int(rx0)-275 ) #data_fit.sum(axis=0)
                        curvex_fit.setData(y = data_fit.sum(axis=0), x = np.arange( data_fit.shape[1])+ int(ry0)-275 ) #data_fit.sum(axis=1)


                    curvex_data.setData( y = np.log(data_roi).sum(axis=0), x = np.arange(data_roi.shape[1])+ int(ry0)-275 ) #np.log(data_roi).sum(axis=0),
                    curvey_data.setData( y = np.log(data_roi).sum(axis=1), x = np.arange(data_roi.shape[0])+ int(rx0)-275 ) #np.log(data_roi).sum(axis=1),

                    if autoLevels:
                        img.setImage(image=data, autoDownsample = True)
                    else:
                        img.setImage(image=data, autoLevels=False, autoDownsample = True, levels = (0.5, 1), lut=lut)


            timer = QtCore.QTimer()
            timer.timeout.connect(update)
            timer.start(100)

            QtGui.QApplication.instance().exec_()
コード例 #10
0
    def __init__(self, client, **kwargs):
        super(Gui, self).__init__()
        self.path = kwargs.pop('path', None)
        self.client = client
        self.original_image = None
        self.delta = 0.01  # the amount to translate image on UP DOWN LEFT RIGHT key presses
        self.client_queue = {}  # a queue of requests to send to the RPi

        zoom = kwargs.get('zoom')
        if zoom:
            self.zoom_history = [zoom]  # (x, y, width, height) values between 0.0 and 1.0
        else:
            self.zoom_history = []

        self.ocr_params = {
            'zoom': zoom,
            'rotate': kwargs.get('rotate'),
            'threshold': kwargs.get('threshold'),
            'dilate': kwargs.get('dilate'),
            'erode': kwargs.get('erode'),
            'blur': kwargs.get('blur'),
            'algorithm': kwargs.get('algorithm', 'tesseract').lower(),
            'lang': kwargs.get('lang', 'eng').lower(),
        }

        self.ocr_label = QtWidgets.QLabel()
        self.ocr_label.setFont(QtGui.QFont('Helvetica', 14))

        # the canvas widget to display the image
        self.graphics_view = pg.GraphicsView(background=None)
        self.view_box = pg.ViewBox(invertY=True, lockAspect=True, enableMouse=False, enableMenu=False)
        self.graphics_view.setCentralItem(self.view_box)
        self.canvas = pg.ImageItem(axisOrder='row-major')
        self.view_box.setMouseMode(pg.ViewBox.RectMode)
        self.view_box.addItem(self.canvas)
        self.view_box.mouseDragEvent = self.select_zoom

        graphing_layout = QtWidgets.QVBoxLayout()
        graphing_layout.addWidget(self.ocr_label, alignment=QtCore.Qt.AlignCenter)
        graphing_layout.addWidget(self.graphics_view)

        # the container for all the image-processing widgets
        self.image_processing_group = QtWidgets.QGroupBox('Image Processing')

        # rotate
        self.rotate_label = QtWidgets.QLabel('<html>Rotate [0&deg;]</html>')
        self.rotate_slider = QtWidgets.QSlider(orientation=QtCore.Qt.Horizontal)
        self.rotate_slider.setToolTip('The angle to rotate the image')
        self.rotate_slider.setMinimum(-180)
        self.rotate_slider.setMaximum(180)
        self.rotate_slider.setSingleStep(1)
        self.rotate_slider.setPageStep(15)
        self.rotate_slider.valueChanged.connect(self.update_rotate)
        if self.ocr_params['rotate']:
            self.rotate_slider.setValue(self.ocr_params['rotate'])

        # Gaussian blur
        self.blur_label = QtWidgets.QLabel('Gaussian Blur [0]')
        self.blur_slider = QtWidgets.QSlider(orientation=QtCore.Qt.Horizontal)
        self.blur_slider.setToolTip('The pixel radius to use for the Gaussian blur')
        self.blur_slider.setMinimum(0)
        self.blur_slider.setMaximum(kwargs.pop('max_blur', 9))
        self.blur_slider.setSingleStep(1)
        self.blur_slider.valueChanged.connect(self.update_blur)
        if self.ocr_params['blur']:
            self.blur_slider.setValue(self.ocr_params['blur'])

        # threshold
        self.threshold_label = QtWidgets.QLabel('Threshold [0]')
        self.threshold_checkbox = QtWidgets.QCheckBox()
        self.threshold_checkbox.setToolTip('Apply thresholding?')
        self.threshold_checkbox.clicked.connect(self.update_threshold_checkbox)
        self.threshold_slider = QtWidgets.QSlider(orientation=QtCore.Qt.Horizontal)
        self.threshold_slider.setToolTip('The threshold value')
        self.threshold_slider.setMinimum(0)
        self.threshold_slider.setMaximum(255)
        self.threshold_slider.setSingleStep(1)
        self.threshold_slider.valueChanged.connect(self.update_threshold)
        if self.ocr_params['threshold']:
            self.threshold_slider.setValue(self.ocr_params['threshold'])
            self.threshold_checkbox.setChecked(True)
        else:
            self.threshold_slider.setEnabled(False)
            self.threshold_checkbox.setChecked(False)

        # dilate
        self.dilate_label = QtWidgets.QLabel('Dilate [0]')
        self.dilate_slider = QtWidgets.QSlider(orientation=QtCore.Qt.Horizontal)
        self.dilate_spinbox = QtWidgets.QSpinBox()
        self.dilate_spinbox.setToolTip('The number of iterations to apply dilation at the specified radius')
        self.dilate_spinbox.setMinimum(1)
        self.dilate_spinbox.setMaximum(99)
        self.dilate_spinbox.setSingleStep(1)
        self.dilate_spinbox.valueChanged.connect(self.update_dilate_iter)
        self.dilate_slider.setToolTip('The pixel radius to use for dilation')
        self.dilate_slider.setMinimum(0)
        self.dilate_slider.setMaximum(kwargs.pop('max_dilate', 9))
        self.dilate_slider.setSingleStep(1)
        self.dilate_slider.valueChanged.connect(self.update_dilate)
        if self.ocr_params['dilate']:
            self.dilate_slider.setValue(self.ocr_params['dilate'])

        # erode
        self.erode_label = QtWidgets.QLabel('Erode [0]')
        self.erode_slider = QtWidgets.QSlider(orientation=QtCore.Qt.Horizontal)
        self.erode_spinbox = QtWidgets.QSpinBox()
        self.erode_spinbox.setToolTip('The number of iterations to apply erosion at the specified radius')
        self.erode_spinbox.setMinimum(1)
        self.erode_spinbox.setMaximum(99)
        self.erode_spinbox.setSingleStep(1)
        self.erode_spinbox.valueChanged.connect(self.update_erode_iter)
        self.erode_slider.setToolTip('The pixel radius to use for erosion')
        self.erode_slider.setMinimum(0)
        self.erode_slider.setMaximum(kwargs.pop('max_erode', 9))
        self.erode_slider.setSingleStep(1)
        self.erode_slider.valueChanged.connect(self.update_erode)
        if self.ocr_params['erode']:
            self.erode_slider.setValue(self.ocr_params['erode'])

        # image-processing layout
        ip_layout = QtWidgets.QGridLayout()
        ip_layout.addWidget(self.rotate_label, 0, 0)
        ip_layout.addWidget(self.rotate_slider, 0, 1)
        ip_layout.addWidget(self.blur_label, 1, 0)
        ip_layout.addWidget(self.blur_slider, 1, 1)
        ip_layout.addWidget(self.threshold_label, 2, 0)
        ip_layout.addWidget(self.threshold_slider, 2, 1)
        ip_layout.addWidget(self.threshold_checkbox, 2, 2)
        ip_layout.addWidget(self.dilate_label, 3, 0)
        ip_layout.addWidget(self.dilate_slider, 3, 1)
        ip_layout.addWidget(self.dilate_spinbox, 3, 2)
        ip_layout.addWidget(self.erode_label, 4, 0)
        ip_layout.addWidget(self.erode_slider, 4, 1)
        ip_layout.addWidget(self.erode_spinbox, 4, 2)
        self.image_processing_group.setLayout(ip_layout)

        # the container for all the camera widgets
        self.camera_config_group = QtWidgets.QGroupBox('Camera Settings')

        # ISO
        self.iso_combobox = QtWidgets.QComboBox()
        self.iso_combobox.setToolTip('The ISO setting of the camera')
        self.iso_combobox.addItems(['auto', '100', '200', '320', '400', '500', '640', '800'])
        iso = str(kwargs.pop('iso', 'auto'))
        if iso == '0':
            iso = 'auto'
        self.iso_combobox.setCurrentText(iso)
        self.update_iso(self.iso_combobox.currentText())
        self.iso_combobox.currentTextChanged.connect(self.update_iso)
        self.iso_combobox.setEnabled(not self.path)

        # resolution
        self.resolution_combobox = QtWidgets.QComboBox()
        self.resolution_combobox.setToolTip('The resolution of the camera')
        self.resolution_combobox.addItems(['VGA', 'SVGA', 'XGA', '720p', 'SXGA', 'UXGA', '1080p', 'MAX'])
        self.resolution_combobox.setCurrentText(str(kwargs.pop('resolution', 'VGA')))
        self.update_resolution(self.resolution_combobox.currentText())
        self.resolution_combobox.currentTextChanged.connect(self.update_resolution)
        self.resolution_combobox.setEnabled(not self.path)

        # exposure mode
        self.exposure_mode_combobox = QtWidgets.QComboBox()
        self.exposure_mode_combobox.setToolTip('The exposure mode of the camera')
        self.exposure_mode_combobox.addItems(['off', 'auto', 'night', 'nightpreview',
                                              'backlight', 'spotlight', 'sports', 'snow',
                                              'beach', 'verylong', 'fixedfps', 'antishake', 'fireworks'])
        self.exposure_mode_combobox.setCurrentText(str(kwargs.pop('exposure_mode', 'auto')))
        self.update_exposure_mode(self.exposure_mode_combobox.currentText())
        self.exposure_mode_combobox.currentTextChanged.connect(self.update_exposure_mode)
        self.exposure_mode_combobox.setEnabled(not self.path)

        camera_layout = QtWidgets.QGridLayout()
        camera_layout.addWidget(QtWidgets.QLabel('ISO'), 0, 0)
        camera_layout.addWidget(self.iso_combobox, 0, 1)
        camera_layout.addItem(QtWidgets.QSpacerItem(1, 1, QtWidgets.QSizePolicy.MinimumExpanding), 0, 2)
        camera_layout.addWidget(QtWidgets.QLabel('Resolution'), 1, 0)
        camera_layout.addWidget(self.resolution_combobox, 1, 1)
        camera_layout.addWidget(QtWidgets.QLabel('Exposure Mode'), 2, 0)
        camera_layout.addWidget(self.exposure_mode_combobox, 2, 1)
        self.camera_config_group.setLayout(camera_layout)

        if self.client is None:
            self.iso_combobox.setEnabled(False)
            self.resolution_combobox.setEnabled(False)
            self.exposure_mode_combobox.setEnabled(False)

        # the container for all the OCR algorithm widgets
        self.ocr_config_group = QtWidgets.QGroupBox('OCR Algorithm Settings')

        # tesseract languages
        self.tess_lang_combobox = QtWidgets.QComboBox()
        self.tess_lang_combobox.addItems(['eng', 'letsgodigital'])
        self.tess_lang_combobox.currentTextChanged.connect(self.update_tess_lang)
        self.tess_lang_combobox.setToolTip('The language to use for Tesseract')

        # tesseract or ssocr
        self.tess_radio = QtWidgets.QRadioButton('Tesseract')
        self.tess_radio.setToolTip('Use Tesseract')
        self.tess_radio.toggled.connect(self.update_algorithm)
        self.ssocr_radio = QtWidgets.QRadioButton('SSOCR')
        self.ssocr_radio.setToolTip('Use SSOCR')
        self.ssocr_radio.toggled.connect(self.update_algorithm)
        if self.ocr_params['algorithm'] == 'ssocr':
            self.ssocr_radio.setChecked(True)
        else:
            self.tess_radio.setChecked(True)

        algo_layout = QtWidgets.QGridLayout()
        algo_layout.addWidget(self.tess_radio, 0, 0)
        algo_layout.addWidget(self.tess_lang_combobox, 0, 1)
        algo_layout.addItem(QtWidgets.QSpacerItem(1, 1, QtWidgets.QSizePolicy.MinimumExpanding), 0, 2)
        algo_layout.addWidget(self.ssocr_radio, 1, 0)
        self.ocr_config_group.setLayout(algo_layout)

        options_layout = QtWidgets.QVBoxLayout()
        options_layout.addWidget(self.image_processing_group)
        options_layout.addWidget(self.camera_config_group)
        options_layout.addWidget(self.ocr_config_group)
        options_layout.addStretch(1)

        layout = QtWidgets.QHBoxLayout()
        layout.addLayout(graphing_layout)
        layout.addLayout(options_layout)
        self.setLayout(layout)

        if self.path:
            self.setAcceptDrops(True)
            self.capture_thread = None
            self.original_image = utils.to_cv2(self.path)
            height, width = self.original_image.shape[:2]
            try:  # could pass in an already-opened image object (which isn't a path)
                basename = os.path.basename(self.path)
            except OSError:
                basename = 'UNKNOWN'
            self.setWindowTitle('OCR || {} [{} x {}]'.format(basename, width, height))
        else:
            self.setAcceptDrops(False)
            self.original_image = None
            self.capture_index = 0
            self.setWindowTitle('OCR || Capture 0')
            self.capture_thread = Capture()
            self.capture_thread.add_callback(self.capture)
            self.capture_thread.start(self.client)

        self.apply_ocr()
コード例 #11
0
    def initUI(self):

        self.chnButtons = []
        self.expSpnBoxes = []
        #print channels
        self.layout = QtGui.QHBoxLayout()
        #self.layout=QtGui.QGridLayout(margin=0,spacing=-1)

        self.layout.setSpacing(0)

        self.gv = pg.GraphicsView(background='k')
        self.gv.setContentsMargins(0, 0, 0, 0)

        self.vb = pg.ViewBox()
        self.gv.setCentralItem(self.vb)
        self.vb.setAspectLocked()
        self.vb.setContentsMargins(0, 0, 0, 0)

        self.img = pg.ImageItem()

        self.vb.addItem(self.img)
        self.layout.setContentsMargins(0, 0, 0, 0)

        self.layout.addWidget(self.gv)

        self.setLayout(self.layout)
        self.setAutoFillBackground(True)
        p = self.palette()
        p.setColor(self.backgroundRole(), QtCore.Qt.black)
        self.setPalette(p)

        keys = self.exposure_times.keys()

        gridlay = QtGui.QGridLayout(margin=0, spacing=-1)
        for i, ch in enumerate(self.channels):
            btn = QtGui.QPushButton(ch, self)
            self.chnButtons.append(btn)

            gridlay.addWidget(btn, i, 0)

            spnBox = QtGui.QSpinBox(self)
            spnBox.setRange(1, 10000)
            spnBox.setSingleStep(25)
            if ch in keys:
                spnBox.setValue(self.exposure_times[ch])
            else:
                spnBox.setValue(self.mmc.getExposure())
            spnBox.setSuffix(" ms")
            btn.clicked.connect(self.make_channelButtonClicked(ch, spnBox))
            self.expSpnBoxes.append(spnBox)
            gridlay.addWidget(spnBox, i, 1)

        Nch = len(self.channels)
        #auto_exposure button
        autoExpBtn = QtGui.QPushButton('Auto set exposure', self)
        autoExpBtn.clicked.connect(self.setExposureAuto)
        gridlay.addWidget(autoExpBtn, Nch, 0)

        #reset focus offset button
        focResetBtn = QtGui.QPushButton('Reset Focus Position', self)
        focResetBtn.clicked.connect(self.imgSrc.reset_focus_offset)
        gridlay.addWidget(focResetBtn, Nch + 1, 0)

        #focus lock button
        self.isLockedBtn = QtGui.QPushButton('Focus Locked', self)
        self.isLockedBtn.setCheckable(True)
        self.isLockedBtn.clicked[bool].connect(self.toggleLock)
        isLocked = self.imgSrc.get_hardware_autofocus_state()
        if isLocked:
            self.isLockedBtn.setText('Focus Locked')
            self.isLockedBtn.setDown(True)
        else:
            self.isLockedBtn.setText('Focus UnLocked')
            self.isLockedBtn.setDown(False)
        gridlay.addWidget(self.isLockedBtn, Nch + 2, 0)

        self.layout.addLayout(gridlay)
コード例 #12
0
def main():
    print("Mode = "+config.VISUAL_EFFECT)

    if config.USE_GUI:
        import pyqtgraph as pg
        from pyqtgraph.Qt import QtGui, QtCore
        # Create GUI window
        app = QtGui.QApplication([])
        view = pg.GraphicsView()
        layout = pg.GraphicsLayout(border=(100,100,100))
        view.setCentralItem(layout)
        view.show()
        view.setWindowTitle('Visualization')
        view.resize(800,600)
        # Mel filterbank plot
        fft_plot = layout.addPlot(title='Filterbank Output', colspan=3)
        fft_plot.setRange(yRange=[-0.1, 1.2])
        fft_plot.disableAutoRange(axis=pg.ViewBox.YAxis)
        x_data = np.array(range(1, config.N_FFT_BINS + 1))
        mel_curve = pg.PlotCurveItem()
        mel_curve.setData(x=x_data, y=x_data*0)
        fft_plot.addItem(mel_curve)
        # Visualization plot
        layout.nextRow()
        led_plot = layout.addPlot(title='Visualization Output', colspan=3)
        led_plot.setRange(yRange=[-5, 260])
        led_plot.disableAutoRange(axis=pg.ViewBox.YAxis)
        # Pen for each of the color channel curves
        r_pen = pg.mkPen((255, 30, 30, 200), width=4)
        g_pen = pg.mkPen((30, 255, 30, 200), width=4)
        b_pen = pg.mkPen((30, 30, 255, 200), width=4)
        # Color channel curves
        r_curve = pg.PlotCurveItem(pen=r_pen)
        g_curve = pg.PlotCurveItem(pen=g_pen)
        b_curve = pg.PlotCurveItem(pen=b_pen)
        # Define x data
        x_data = np.array(range(1, config.N_PIXELS + 1))
        r_curve.setData(x=x_data, y=x_data*0)
        g_curve.setData(x=x_data, y=x_data*0)
        b_curve.setData(x=x_data, y=x_data*0)
        # Add curves to plot
        led_plot.addItem(r_curve)
        led_plot.addItem(g_curve)
        led_plot.addItem(b_curve)
        # Frequency range label
        freq_label = pg.LabelItem('')
        # Frequency slider
        def freq_slider_change(tick):
            minf = freq_slider.tickValue(0)**2.0 * (config.MIC_RATE / 2.0)
            maxf = freq_slider.tickValue(1)**2.0 * (config.MIC_RATE / 2.0)
            t = 'Frequency range: {:.0f} - {:.0f} Hz'.format(minf, maxf)
            freq_label.setText(t)
            config.MIN_FREQUENCY = minf
            config.MAX_FREQUENCY = maxf
            dsp.create_mel_bank()
        freq_slider = pg.TickSliderItem(orientation='bottom', allowAdd=False)
        freq_slider.addTick((config.MIN_FREQUENCY / (config.MIC_RATE / 2.0))**0.5)
        freq_slider.addTick((config.MAX_FREQUENCY / (config.MIC_RATE / 2.0))**0.5)
        freq_slider.tickMoveFinished = freq_slider_change
        freq_label.setText('Frequency range: {} - {} Hz'.format(
            config.MIN_FREQUENCY,
            config.MAX_FREQUENCY))
        # Effect selection
        active_color = '#16dbeb'
        inactive_color = '#FFFFFF'
        def energy_click(x):
            global visualization_effect
            visualization_effect = visualize_energy
            energy_label.setText('Energy', color=active_color)
            scroll_label.setText('Scroll', color=inactive_color)
            spectrum_label.setText('Spectrum', color=inactive_color)
        def scroll_click(x):
            global visualization_effect
            visualization_effect = visualize_scroll
            energy_label.setText('Energy', color=inactive_color)
            scroll_label.setText('Scroll', color=active_color)
            spectrum_label.setText('Spectrum', color=inactive_color)
        def spectrum_click(x):
            global visualization_effect
            visualization_effect = visualize_spectrum
            energy_label.setText('Energy', color=inactive_color)
            scroll_label.setText('Scroll', color=inactive_color)
            spectrum_label.setText('Spectrum', color=active_color)
        # Create effect "buttons" (labels with click event)
        energy_label = pg.LabelItem('Energy')
        scroll_label = pg.LabelItem('Scroll')
        spectrum_label = pg.LabelItem('Spectrum')
        energy_label.mousePressEvent = energy_click
        scroll_label.mousePressEvent = scroll_click
        spectrum_label.mousePressEvent = spectrum_click
        energy_click(0)
        # Layout
        layout.nextRow()
        layout.addItem(freq_label, colspan=3)
        layout.nextRow()
        layout.addItem(freq_slider, colspan=3)
        layout.nextRow()
        layout.addItem(energy_label)
        layout.addItem(scroll_label)
        layout.addItem(spectrum_label)
    # Initialize LEDs
    led.update()
    # Start listening to live audio stream
    microphone.start_stream(microphone_update)
コード例 #13
0
ファイル: test_ROI.py プロジェクト: wwoody827/pymeasurement
def check_getArrayRegion(roi, name, testResize=True):
    initState = roi.getState()
    
    #win = pg.GraphicsLayoutWidget()
    win = pg.GraphicsView()
    win.show()
    win.resize(200, 400)
    
    # Don't use Qt's layouts for testing--these generate unpredictable results.
    #vb1 = win.addViewBox()
    #win.nextRow()
    #vb2 = win.addViewBox()
    
    # Instead, place the viewboxes manually 
    vb1 = pg.ViewBox()
    win.scene().addItem(vb1)
    vb1.setPos(6, 6)
    vb1.resize(188, 191)

    vb2 = pg.ViewBox()
    win.scene().addItem(vb2)
    vb2.setPos(6, 203)
    vb2.resize(188, 191)
    
    img1 = pg.ImageItem(border='w')
    img2 = pg.ImageItem(border='w')
    vb1.addItem(img1)
    vb2.addItem(img2)
    
    np.random.seed(0)
    data = np.random.normal(size=(7, 30, 31, 5))
    data[0, :, :, :] += 10
    data[:, 1, :, :] += 10
    data[:, :, 2, :] += 10
    data[:, :, :, 3] += 10
    
    img1.setImage(data[0, ..., 0])
    vb1.setAspectLocked()
    vb1.enableAutoRange(True, True)
    
    roi.setZValue(10)
    vb1.addItem(roi)

    rgn = roi.getArrayRegion(data, img1, axes=(1, 2))
    assert np.all((rgn == data[:, 1:-2, 1:-2, :]) | (rgn == 0))
    img2.setImage(rgn[0, ..., 0])
    vb2.setAspectLocked()
    vb2.enableAutoRange(True, True)
    
    app.processEvents()
    
    assertImageApproved(win, name+'/roi_getarrayregion', 'Simple ROI region selection.')

    with pytest.raises(TypeError):
        roi.setPos(0, False)

    roi.setPos([0.5, 1.5])
    rgn = roi.getArrayRegion(data, img1, axes=(1, 2))
    img2.setImage(rgn[0, ..., 0])
    app.processEvents()
    assertImageApproved(win, name+'/roi_getarrayregion_halfpx', 'Simple ROI region selection, 0.5 pixel shift.')

    roi.setAngle(45)
    roi.setPos([3, 0])
    rgn = roi.getArrayRegion(data, img1, axes=(1, 2))
    img2.setImage(rgn[0, ..., 0])
    app.processEvents()
    assertImageApproved(win, name+'/roi_getarrayregion_rotate', 'Simple ROI region selection, rotation.')

    if testResize:
        roi.setSize([60, 60])
        rgn = roi.getArrayRegion(data, img1, axes=(1, 2))
        img2.setImage(rgn[0, ..., 0])
        app.processEvents()
        assertImageApproved(win, name+'/roi_getarrayregion_resize', 'Simple ROI region selection, resized.')

    img1.scale(1, -1)
    img1.setPos(0, img1.height())
    img1.rotate(20)
    rgn = roi.getArrayRegion(data, img1, axes=(1, 2))
    img2.setImage(rgn[0, ..., 0])
    app.processEvents()
    assertImageApproved(win, name+'/roi_getarrayregion_img_trans', 'Simple ROI region selection, image transformed.')

    vb1.invertY()
    rgn = roi.getArrayRegion(data, img1, axes=(1, 2))
    img2.setImage(rgn[0, ..., 0])
    app.processEvents()
    assertImageApproved(win, name+'/roi_getarrayregion_inverty', 'Simple ROI region selection, view inverted.')

    roi.setState(initState)
    img1.resetTransform()
    img1.setPos(0, 0)
    img1.scale(1, 0.5)
    rgn = roi.getArrayRegion(data, img1, axes=(1, 2))
    img2.setImage(rgn[0, ..., 0])
    app.processEvents()
    assertImageApproved(win, name+'/roi_getarrayregion_anisotropic', 'Simple ROI region selection, image scaled anisotropically.')
コード例 #14
0
def _live_view(
    *,
    state: RecordState,
    sample_rate: int,
    downsample_to: Optional[int],
    seconds: int,
    calibrate: Optional[Tuple[int, str]],
):

    from pyqtgraph.Qt import QtGui, QtCore
    import numpy as np
    import pyqtgraph as pg
    from pyqtgraph.ptime import time
    from pyqtgraph import PlotDataItem
    from pyqtgraph.graphicsItems.ViewBox import ViewBox
    # https://github.com/pyqtgraph/pyqtgraph/blob/master/examples/GraphicsLayout.py

    # data will be downsampled to this value
    # downsample_to: Optional[int] = 100
    # (hw version, bias path)
    # bp = '<grf_python>/test_data/CSM016/bias_20191120.csv'
    # calibrate: Optional[Tuple[int, str]] = (1, bp)
    # calibrate = None

    @contextmanager
    def app_closer(app):
        try:
            yield
        finally:
            app.quit()

    with ExitStack() as stack:
        stack.enter_context(LiveViewContext(state))

        live_headers = [h for h in HEADERS if not h.get('synthetic')]

        if downsample_to is not None:
            assert sample_rate % downsample_to == 0, "sample rate must be evenly divisible by downsampled rate"
            downsample_factor: Optional[int] = sample_rate // downsample_to
            sample_rate = downsample_to
        else:
            downsample_factor = None

        if calibrate is not None:
            import importlib.util
            import sys

            hw_version, bias_path = calibrate

            # adding the grf_python folder to path risks breaking stuff
            # but it should only break the live view process at worst

            # note that tilt_rewrites util will shadow grf_python's

            grf_python_path = os.environ['grf_python_path']

            sys.path.append(grf_python_path)

            from load_table import apply_bias, apply_best_voltage, load_bias
            from cop import calc_all_cop, add_cop_columns
            from hardware_config import HardwareConfig
            import numpy as np

            bias_column_mapping = [
                (h['csv'], h['cal']) for h in HEADERS
                if 'cal' in h and h['csv'].startswith('sensor')
            ]
            # bias_column_mapping_ = [
            #     ('Dev6/ai18', 'rhl_fx'), ('Dev6/ai19', 'rhl_fy'), ('Dev6/ai20', 'rhl_fz'),
            #     ('Dev6/ai21', 'rhl_tx'), ('Dev6/ai22', 'rhl_ty'), ('Dev6/ai23', 'rhl_tz'),
            #     ('Dev6/ai32', 'lhl_fx'), ('Dev6/ai33', 'lhl_fy'), ('Dev6/ai34', 'lhl_fz'),
            #     ('Dev6/ai35', 'lhl_tx'), ('Dev6/ai36', 'lhl_ty'), ('Dev6/ai37', 'lhl_tz'),
            #     ('Dev6/ai38', 'fl_fx'), ('Dev6/ai39', 'fl_fy'), ('Dev6/ai48', 'fl_fz'),
            #     ('Dev6/ai49', 'fl_tx'), ('Dev6/ai50', 'fl_ty'), ('Dev6/ai51', 'fl_tz'),
            # ]
            # assert bias_column_mapping == bias_column_mapping_

            bias = load_bias(bias_path, column_mapping=bias_column_mapping)

            hw_conf = HardwareConfig(1)

            # data = {
            #     'np': np.array([[1.0 for _ in live_headers] for _ in range(10)]),
            #     'column_names': [x['cal'] for x in live_headers],
            # }
            # print(bias)
            # apply_bias(data, bias)
            # apply_best_voltage(data, hw_conf)
            # print(data)
            # cop = calc_all_cop(data, hw_conf)
            # print(cop)

        app = pg.mkQApp("Data")
        stack.enter_context(app_closer(app))

        view = pg.GraphicsView()
        layout = pg.GraphicsLayout(border=(100, 100, 100))

        view.setCentralItem(layout)
        view.show()
        view.setWindowTitle('data')
        view.resize(800, 600)

        layout.addLabel('red=rhl green=lhl blue=fl')

        collectors: List[deque[float]] = [
            deque(maxlen=sample_rate * seconds) for _ in live_headers
        ]

        plots = {}
        for graph_name, graph_info in GRAPHS.items():
            row, col = graph_info['pos']
            title = graph_info.get('title', graph_name)
            plot = layout.addPlot(row=row + 1, col=col, title=title)

            y_max = graph_info.get('y_max')
            if y_max:
                view_box = plot.getViewBox()
                view_box.disableAutoRange(axis=ViewBox.YAxis)
                view_box.setRange(yRange=(0, y_max))

            plots[graph_name] = plot

        def get_curve(i):
            h = live_headers[i]
            if 'graph' not in h:
                # curves.append(None)
                # continue
                return None
            color = h.get('color', (255, 255, 255))
            plot = plots[h['graph']]
            curve = plot.plot(pen=color)
            return curve

        curves: List[PlotDataItem] = [
            get_curve(i) for i in range(len(live_headers))
        ]

        def update():
            try:
                data = state.live.queue.get(block=False)
            except Empty:
                return

            if data is None:
                app.quit()
                return

            for i, h in enumerate(live_headers):
                # skip timestamp column since it isn't actually in the collected data
                if h['csv'] == 'Timestamp':
                    continue

                if downsample_factor is None:
                    collectors[i].extend(data[i])
                else:
                    downsampled = (
                        data[i][x]
                        for x in range(0, len(data[i]), downsample_factor))
                    collectors[i].extend(downsampled)

            def apply_cal():
                data = np.array(collectors, dtype=float)
                data = data.swapaxes(0, 1)

                data = {
                    'np': data,
                    'column_names': [x['cal'] for x in live_headers],
                }

                apply_bias(data, bias)
                apply_best_voltage(data, hw_conf)
                cop = calc_all_cop(data, hw_conf)

                out_data = data['np'].swapaxes(0, 1)
                for i, (curve, header) in enumerate(zip(curves, live_headers)):
                    if curve is not None:
                        if header['csv'] == 'Strobe':
                            curve.setData(cop['cop_x'])
                        elif header['csv'] == 'Start':
                            curve.setData(cop['cop_y'])
                        else:
                            curve.setData(out_data[i])

            if calibrate is not None:
                apply_cal()
            else:
                for i, curve in enumerate(curves):
                    if curve is not None:
                        curve.setData(collectors[i])

            app.processEvents()

        timer = QtCore.QTimer()
        timer.timeout.connect(update)
        timer.start(0)

        app.exec_()
コード例 #15
0
    def gen_layout(self):
        # live EEG inspection and Annotation
        self.graph_eeg = pg.PlotItem()
        self.graph_emg = pg.PlotItem()
        self.graph_ann = pg.PlotItem()

        self.view = pg.GraphicsView()
        self.lay = pg.GraphicsLayout()
        self.lay_brainstate = self.lay.addLayout()

        #what's annotated, laser, and current visited timepoint
        self.graph_treck = pg.PlotItem()
        self.lay_brainstate.addItem(self.graph_treck)
        self.lay_brainstate.nextRow()

        # color-coded brainstate
        self.graph_brainstate = self.lay_brainstate.addPlot()
        self.image_brainstate = pg.ImageItem()
        self.graph_brainstate.addItem(self.image_brainstate)
        self.lay_brainstate.nextRow()

        # add whole spectrogram
        # self.graph_spectrum contains the image image_spectrum
        self.graph_spectrum = self.lay_brainstate.addPlot()
        self.image_spectrum = pg.ImageItem()
        #self.image_spectrum = pg.ImageView()
        self.graph_spectrum.addItem(self.image_spectrum)
        self.lay_brainstate.nextRow()

        # EMG Amplitude
        self.graph_emgampl = self.lay_brainstate.addPlot()
        self.lay.nextRow()

        # Add live EEG and EMG
        self.lay.nextRow()
        self.lay.addItem(self.graph_eeg)
        self.lay.nextRow()
        self.lay.addItem(self.graph_emg)
        self.lay.nextRow()

        self.lay_ann = self.lay.addLayout()
        # add live spectrum
        self.graph_fft = self.lay_ann.addPlot()
        self.image_fft = pg.ImageItem()
        self.graph_fft.addItem(self.image_fft)
        self.lay_ann.nextRow()

        # add annotation
        self.lay_ann.addItem(self.graph_ann)

        # explanation how layout in QtMainWindow is organized:
        # https://srinikom.github.io/pyside-docs/PySide/QtGui/QMainWindow.html
        self.view.setCentralItem(self.lay)
        self.setCentralWidget(self.view)

        # mix colormaps
        # the old colormap which I've used till 05/30/19:
        # pos = np.array([0, 0.2, 0.4, 0.6, 0.8])
        # color = np.array(
        #    [[0, 255, 255, 255], [150, 0, 255, 255], [192, 192, 192, 255], (0, 0, 0, 255), (255, 255, 0, 255)],
        #    dtype=np.ubyte)

        # new colormap
        color = np.array([[0, 0, 0, 200], [0, 255, 255, 200],
                          [150, 0, 255, 200], [150, 150, 150, 200]],
                         dtype=np.ubyte)
        pos = np.linspace(0, 1, color.shape[0])
        cmap = pg.ColorMap(pos, color)
        self.lut_brainstate = cmap.getLookupTable(0, 1, color.shape[0])

        pos = np.array([0., 0.05, .2, .4, .6, .9])
        color = np.array([[0, 0, 0, 255], [0, 0, 128, 255], [0, 255, 0, 255],
                          [255, 255, 0, 255], (255, 165, 0, 255),
                          (255, 0, 0, 255)],
                         dtype=np.ubyte)
        cmap = pg.ColorMap(pos, color)
        self.lut_spectrum = cmap.getLookupTable(0.0, 1.0, 256)
コード例 #16
0
 def __init__(self):
     self.app = QtGui.QApplication([])
     self.view = pg.GraphicsView()
コード例 #17
0
    def __init__(self):
        super().__init__()

        self.results = None
        self.classifier_names = []
        self.perf_line = None
        self.colors = []
        self._curve_data = {}
        self._plot_curves = {}
        self._rocch = None
        self._perf_line = None
        self._tooltip_cache = None

        box = gui.vBox(self.controlArea, "Plot")
        tbox = gui.vBox(box, "Target Class")
        tbox.setFlat(True)

        self.target_cb = gui.comboBox(tbox,
                                      self,
                                      "target_index",
                                      callback=self._on_target_changed,
                                      contentsLength=8,
                                      searchable=True)

        cbox = gui.vBox(box, "Classifiers")
        cbox.setFlat(True)
        self.classifiers_list_box = gui.listBox(
            cbox,
            self,
            "selected_classifiers",
            "classifier_names",
            selectionMode=QListView.MultiSelection,
            callback=self._on_classifiers_changed)

        abox = gui.vBox(box, "Combine ROC Curves From Folds")
        abox.setFlat(True)
        gui.comboBox(abox,
                     self,
                     "roc_averaging",
                     items=[
                         "Merge Predictions from Folds", "Mean TP Rate",
                         "Mean TP and FP at Threshold",
                         "Show Individual Curves"
                     ],
                     callback=self._replot)

        hbox = gui.vBox(box, "ROC Convex Hull")
        hbox.setFlat(True)
        gui.checkBox(hbox,
                     self,
                     "display_convex_curve",
                     "Show convex ROC curves",
                     callback=self._replot)
        gui.checkBox(hbox,
                     self,
                     "display_convex_hull",
                     "Show ROC convex hull",
                     callback=self._replot)

        box = gui.vBox(self.controlArea, "Analysis")

        gui.checkBox(box,
                     self,
                     "display_def_threshold",
                     "Default threshold (0.5) point",
                     callback=self._on_display_def_threshold_changed)

        gui.checkBox(box,
                     self,
                     "display_perf_line",
                     "Show performance line",
                     callback=self._on_display_perf_line_changed)
        grid = QGridLayout()
        gui.indentedBox(box, orientation=grid)

        sp = gui.spin(box,
                      self,
                      "fp_cost",
                      1,
                      1000,
                      10,
                      alignment=Qt.AlignRight,
                      callback=self._on_display_perf_line_changed)
        grid.addWidget(QLabel("FP Cost:"), 0, 0)
        grid.addWidget(sp, 0, 1)

        sp = gui.spin(box,
                      self,
                      "fn_cost",
                      1,
                      1000,
                      10,
                      alignment=Qt.AlignRight,
                      callback=self._on_display_perf_line_changed)
        grid.addWidget(QLabel("FN Cost:"))
        grid.addWidget(sp, 1, 1)
        self.target_prior_sp = gui.spin(box,
                                        self,
                                        "target_prior",
                                        1,
                                        99,
                                        alignment=Qt.AlignRight,
                                        callback=self._on_target_prior_changed)
        self.target_prior_sp.setSuffix(" %")
        self.target_prior_sp.addAction(QAction("Auto", sp))
        grid.addWidget(QLabel("Prior target class probability:"))
        grid.addWidget(self.target_prior_sp, 2, 1)

        self.plotview = pg.GraphicsView(background="w")
        self.plotview.setFrameStyle(QFrame.StyledPanel)
        self.plotview.scene().sigMouseMoved.connect(self._on_mouse_moved)

        self.plot = pg.PlotItem(enableMenu=False)
        self.plot.setMouseEnabled(False, False)
        self.plot.hideButtons()

        pen = QPen(self.palette().color(QPalette.Text))

        tickfont = QFont(self.font())
        tickfont.setPixelSize(max(int(tickfont.pixelSize() * 2 // 3), 11))

        axis = self.plot.getAxis("bottom")
        axis.setTickFont(tickfont)
        axis.setPen(pen)
        axis.setLabel("FP Rate (1-Specificity)")

        axis = self.plot.getAxis("left")
        axis.setTickFont(tickfont)
        axis.setPen(pen)
        axis.setLabel("TP Rate (Sensitivity)")

        self.plot.showGrid(True, True, alpha=0.1)
        self.plot.setRange(xRange=(0.0, 1.0), yRange=(0.0, 1.0), padding=0.05)

        self.plotview.setCentralItem(self.plot)
        self.mainArea.layout().addWidget(self.plotview)
コード例 #18
0
    def __init__(self, eventEngine, parent=None):
        """Constructor"""
        self.parent = parent
        QtGui.QWidget.__init__(self, parent)
        self.setWindowTitle(u'VaR监控')
        self.setWindowIcon(QtGui.QIcon('./icons/stock.ico'))

        self.eventEngine = eventEngine
        self.eventEngine.start()
        self.eventEngine.register("showData", self.showData)

        self.view = pg.GraphicsView()
        self.l = pg.GraphicsLayout(border=(100, 100, 100))
        self.view.setCentralItem(self.l)
        self.view.show()
        self.view.resize(800, 600)

        self.view2 = pg.GraphicsView()
        self.l2 = pg.GraphicsLayout(border=(100, 100, 100))
        self.view2.setCentralItem(self.l2)
        self.view2.show()
        self.view2.resize(800, 600)

        self.x = []
        self.y = []
        self.x1 = []
        self.y1 = []

        self.btn_load = QtWidgets.QPushButton(U'计算', self)
        self.btn_load.setGeometry(QtCore.QRect(242, 0, 81, 25))
        #font = QtGui.QFont()
        #font.setPointSize(12)
        #font.setBold(True)
        #font.setWeight(75)
        self.btn_load.setFixedSize(80, 35)
        #self.btn_load.setFont(font)
        self.btn_load.setObjectName("btn_load")
        self.btn_load.clicked.connect(self.clickedbutton)

        self.c = Communicate()
        self.c.closeApp.connect(self.emitSignal)

        self.label = QtWidgets.QLabel(self)
        self.label.setGeometry(QtCore.QRect(0, 0, 31, 25))
        self.label.setFixedSize(80, 35)
        self.label.setObjectName("label")
        self.label.setText(U"置信区间")

        self.cbb_model = QtWidgets.QComboBox(self)
        self.cbb_model.setGeometry(QtCore.QRect(500, 0, 51, 25))
        self.cbb_model.setFixedSize(80, 35)
        self.cbb_model.setObjectName("cbb_model")
        self.cbb_model.addItem("0.95")
        self.cbb_model.addItem("0.97")
        self.cbb_model.addItem("0.99")
        self.cbb_model.setCurrentIndex(0)

        self.initUI()
        # 设置界面
        self.hb = QtGui.QVBoxLayout()
        #self.hb.addWidget(self.btn_load)
        self.hb.addWidget(self.view)
        self.mainb = QtGui.QHBoxLayout()
        self.mainb.addLayout(self.hb)
        self.vb2 = QtGui.QVBoxLayout()
        self.vb2.addWidget(self.view2)
        self.mainb.addLayout(self.vb2)
        self.lastb = QtGui.QVBoxLayout()

        self.vb3 = QtGui.QHBoxLayout()
        self.vb3.addWidget(self.label)
        self.vb3.addWidget(self.cbb_model)
        self.vb3.addWidget(self.btn_load)
        self.vb3.addWidget(QtWidgets.QLabel(self))

        self.lastb.addLayout(self.vb3)
        self.lastb.addLayout(self.mainb)
        self.view2.setFixedWidth(600)
        self.setLayout(self.lastb)
コード例 #19
0
    def __init__(self):
        super().__init__()

        self.matrix = None
        self._matrix_range = 0.
        self._tree = None
        self._ordered_tree = None
        self._sorted_matrix = None
        self._sort_indices = None
        self._selection = None

        self.sorting_cb = gui.comboBox(
            self.controlArea, self, "sorting", box="Element Sorting",
            items=["None", "Clustering", "Clustering with ordered leaves"],
            callback=self._invalidate_ordering)

        box = gui.vBox(self.controlArea, "Colors")
        self.color_map_widget = cmw = ColorGradientSelection(
            thresholds=(self.color_low, self.color_high),
        )
        model = itemmodels.ContinuousPalettesModel(parent=self)
        cmw.setModel(model)
        idx = cmw.findData(self.palette_name, model.KeyRole)
        if idx != -1:
            cmw.setCurrentIndex(idx)

        cmw.activated.connect(self._update_color)

        def _set_thresholds(low, high):
            self.color_low, self.color_high = low, high
            self._update_color()

        cmw.thresholdsChanged.connect(_set_thresholds)
        box.layout().addWidget(self.color_map_widget)

        self.annot_combo = gui.comboBox(
            self.controlArea, self, "annotation_idx", box="Annotations",
            contentsLength=12, searchable=True,
            callback=self._invalidate_annotations
        )
        self.annot_combo.setModel(itemmodels.VariableListModel())
        self.annot_combo.model()[:] = ["None", "Enumeration"]
        gui.rubber(self.controlArea)

        gui.auto_send(self.buttonsArea, self, "autocommit")

        self.view = pg.GraphicsView(background="w")
        self.mainArea.layout().addWidget(self.view)

        self.grid_widget = pg.GraphicsWidget()
        self.grid = QGraphicsGridLayout()
        self.grid_widget.setLayout(self.grid)

        self.gradient_legend = GradientLegendWidget(0, 1, self._color_map())
        self.gradient_legend.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed)
        self.gradient_legend.setMaximumWidth(250)
        self.grid.addItem(self.gradient_legend, 0, 1)
        self.viewbox = pg.ViewBox(enableMouse=False, enableMenu=False)
        self.viewbox.setAcceptedMouseButtons(Qt.NoButton)
        self.viewbox.setAcceptHoverEvents(False)
        self.grid.addItem(self.viewbox, 2, 1)

        self.left_dendrogram = DendrogramWidget(
            self.grid_widget, orientation=DendrogramWidget.Left,
            selectionMode=DendrogramWidget.NoSelection,
            hoverHighlightEnabled=False
        )
        self.left_dendrogram.setAcceptedMouseButtons(Qt.NoButton)
        self.left_dendrogram.setAcceptHoverEvents(False)

        self.top_dendrogram = DendrogramWidget(
            self.grid_widget, orientation=DendrogramWidget.Top,
            selectionMode=DendrogramWidget.NoSelection,
            hoverHighlightEnabled=False
        )
        self.top_dendrogram.setAcceptedMouseButtons(Qt.NoButton)
        self.top_dendrogram.setAcceptHoverEvents(False)

        self.grid.addItem(self.left_dendrogram, 2, 0)
        self.grid.addItem(self.top_dendrogram, 1, 1)

        self.right_labels = TextList(
            alignment=Qt.AlignLeft | Qt.AlignVCenter,
            sizePolicy=QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Expanding)
        )
        self.bottom_labels = TextList(
            orientation=Qt.Horizontal,
            alignment=Qt.AlignRight | Qt.AlignVCenter,
            sizePolicy=QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
        )

        self.grid.addItem(self.right_labels, 2, 2)
        self.grid.addItem(self.bottom_labels, 3, 1)

        self.view.setCentralItem(self.grid_widget)

        self.gradient_legend.hide()
        self.left_dendrogram.hide()
        self.top_dendrogram.hide()
        self.right_labels.hide()
        self.bottom_labels.hide()

        self.matrix_item = None
        self.dendrogram = None

        self.settingsAboutToBePacked.connect(self.pack_settings)
コード例 #20
0
    def make_gui(self):
        # Create GUI window
        app = QtGui.QApplication([])
        view = pg.GraphicsView()
        layout = pg.GraphicsLayout(border=(100,100,100))
        view.setCentralItem(layout)
        view.show()
        view.setWindowTitle('Visualization')
        view.resize(800,600)
        # Mel filterbank plot
        fft_plot = layout.addPlot(title='Filterbank Output', colspan=3)
        fft_plot.setRange(yRange=[-0.1, 1.2])
        fft_plot.disableAutoRange(axis=pg.ViewBox.YAxis)
        x_data = np.array(range(1, self.config['N_FFT_BINS'] + 1))
        mel_curve = pg.PlotCurveItem()
        mel_curve.setData(x=x_data, y=x_data*0)
        fft_plot.addItem(mel_curve)

        def add_led_plot(o):
            # Visualization plot
            layout.nextRow()
            led_plot = layout.addPlot(title='LED: ' + o['NAME'], colspan=3)
            led_plot.setRange(yRange=[-5, 260])
            led_plot.disableAutoRange(axis=pg.ViewBox.YAxis)
            # Pen for each of the color channel curves
            r_pen = pg.mkPen((255, 30, 30, 200), width=4)
            g_pen = pg.mkPen((30, 255, 30, 200), width=4)
            b_pen = pg.mkPen((30, 30, 255, 200), width=4)
            # Color channel curves
            r_curve = pg.PlotCurveItem(pen=r_pen)
            g_curve = pg.PlotCurveItem(pen=g_pen)
            b_curve = pg.PlotCurveItem(pen=b_pen)
            # Define x data
            x_data = np.array(range(1, o['N_PIXELS'] + 1))
            r_curve.setData(x=x_data, y=x_data*0)
            g_curve.setData(x=x_data, y=x_data*0)
            b_curve.setData(x=x_data, y=x_data*0)
            # Add curves to plot
            led_plot.addItem(r_curve)
            led_plot.addItem(g_curve)
            led_plot.addItem(b_curve)

            self.led_plots[o['NAME']] = (led_plot, r_curve, g_curve, b_curve)

        for o in self.config.get('OUTPUTS') or []:
            # TODO: better way to figure this out
            if o.get('DEVICE', '').endswith('Strip'):
                add_led_plot(o)

        # Frequency range label
        freq_label = pg.LabelItem('')
        # Frequency slider
        def freq_slider_change(tick):
            minf = freq_slider.tickValue(0)**2.0 * (self.config['MIC_RATE'] / 2.0)
            maxf = freq_slider.tickValue(1)**2.0 * (self.config['MIC_RATE'] / 2.0)
            t = 'Frequency range: {:.0f} - {:.0f} Hz'.format(minf, maxf)
            freq_label.setText(t)
            self.config['MIN_FREQUENCY'] = minf
            self.config['MAX_FREQUENCY'] = maxf
            return
            dsp.create_mel_bank()
        freq_slider = pg.TickSliderItem(orientation='bottom', allowAdd=False)
        freq_slider.addTick((self.config['MIN_FREQUENCY'] / (self.config['MIC_RATE'] / 2.0))**0.5)
        freq_slider.addTick((self.config['MAX_FREQUENCY'] / (self.config['MIC_RATE'] / 2.0))**0.5)
        freq_slider.tickMoveFinished = freq_slider_change
        freq_label.setText('Frequency range: {} - {} Hz'.format(
            self.config['MIN_FREQUENCY'],
            self.config['MAX_FREQUENCY']))
        # # Effect selection
        # active_color = '#16dbeb'
        # inactive_color = '#FFFFFF'
        # def energy_click(x):
        #     global visualization_effect
        #     visualization_effect = visualize_energy
        #     energy_label.setText('Energy', color=active_color)
        #     scroll_label.setText('Scroll', color=inactive_color)
        #     spectrum_label.setText('Spectrum', color=inactive_color)
        # def scroll_click(x):
        #     global visualization_effect
        #     visualization_effect = visualize_scroll
        #     energy_label.setText('Energy', color=inactive_color)
        #     scroll_label.setText('Scroll', color=active_color)
        #     spectrum_label.setText('Spectrum', color=inactive_color)
        # def spectrum_click(x):
        #     global visualization_effect
        #     visualization_effect = visualize_spectrum
        #     energy_label.setText('Energy', color=inactive_color)
        #     scroll_label.setText('Scroll', color=inactive_color)
        #     spectrum_label.setText('Spectrum', color=active_color)
        # # Create effect "buttons" (labels with click event)
        # energy_label = pg.LabelItem('Energy')
        # scroll_label = pg.LabelItem('Scroll')
        # spectrum_label = pg.LabelItem('Spectrum')
        # energy_label.mousePressEvent = energy_click
        # scroll_label.mousePressEvent = scroll_click
        # spectrum_label.mousePressEvent = spectrum_click
        # energy_click(0)
        # Layout
        layout.nextRow()
        layout.addItem(freq_label, colspan=3)
        layout.nextRow()
        layout.addItem(freq_slider, colspan=3)
        layout.nextRow()
        # layout.addItem(energy_label)
        # layout.addItem(scroll_label)
        # layout.addItem(spectrum_label)

        self.app = app
        self.view = view
        self.layout = layout
        self.mel_curve = mel_curve
コード例 #21
0
    def __init__(self):
        super().__init__()

        self.matrix = None
        self._tree = None
        self._ordered_tree = None
        self._sorted_matrix = None
        self._sort_indices = None
        self._selection = None

        box = gui.widgetBox(self.controlArea, "Element sorting", margin=0)
        gui.comboBox(
            box,
            self,
            "sorting",
            items=["None", "Clustering", "Clustering with ordered leaves"],
            callback=self._invalidate_ordering)

        box = gui.widgetBox(self.controlArea, "Colors")

        self.colormap_cb = gui.comboBox(box,
                                        self,
                                        "colormap",
                                        callback=self._update_color)
        self.colormap_cb.setIconSize(QSize(64, 16))
        self.palettes = list(sorted(load_default_palettes()))
        self.palettes += [("Blue-Yellow", {2: [(0, 0, 255), (255, 255, 0)]})]
        for i, pcolor in enumerate(self.palettes):
            if pcolor[0] == 'Blue-Yellow':
                self.colormap = i
        init_color_combo(self.colormap_cb, self.palettes, QSize(64, 16))
        self.colormap_cb.setCurrentIndex(self.colormap)

        form = QFormLayout(formAlignment=Qt.AlignLeft,
                           labelAlignment=Qt.AlignLeft,
                           fieldGrowthPolicy=QFormLayout.AllNonFixedFieldsGrow)
        #         form.addRow(
        #             "Gamma",
        #             gui.hSlider(box, self, "color_gamma", minValue=0.0, maxValue=1.0,
        #                         step=0.05, ticks=True, intOnly=False,
        #                         createLabel=False, callback=self._update_color)
        #         )
        form.addRow(
            "Low",
            gui.hSlider(box,
                        self,
                        "color_low",
                        minValue=0.0,
                        maxValue=1.0,
                        step=0.05,
                        ticks=True,
                        intOnly=False,
                        createLabel=False,
                        callback=self._update_color))
        form.addRow(
            "High",
            gui.hSlider(box,
                        self,
                        "color_high",
                        minValue=0.0,
                        maxValue=1.0,
                        step=0.05,
                        ticks=True,
                        intOnly=False,
                        createLabel=False,
                        callback=self._update_color))
        box.layout().addLayout(form)

        box = gui.widgetBox(self.controlArea, "Annotations")
        self.annot_combo = gui.comboBox(box,
                                        self,
                                        "annotation_idx",
                                        callback=self._invalidate_annotations,
                                        contentsLength=12)
        self.annot_combo.setModel(itemmodels.VariableListModel())
        self.annot_combo.model()[:] = ["None", "Enumeration"]
        self.controlArea.layout().addStretch()

        gui.auto_commit(self.controlArea, self, "autocommit", "Send data",
                        "Auto send is on")

        self.view = pg.GraphicsView(background="w")
        self.mainArea.layout().addWidget(self.view)

        self.grid_widget = pg.GraphicsWidget()
        self.grid = QGraphicsGridLayout()
        self.grid_widget.setLayout(self.grid)

        self.viewbox = pg.ViewBox(enableMouse=False, enableMenu=False)
        self.viewbox.setAcceptedMouseButtons(Qt.NoButton)
        self.viewbox.setAcceptHoverEvents(False)
        self.grid.addItem(self.viewbox, 1, 1)

        self.left_dendrogram = DendrogramWidget(
            self.grid_widget,
            orientation=DendrogramWidget.Left,
            selectionMode=DendrogramWidget.NoSelection,
            hoverHighlightEnabled=False)
        self.left_dendrogram.setAcceptedMouseButtons(Qt.NoButton)
        self.left_dendrogram.setAcceptHoverEvents(False)

        self.top_dendrogram = DendrogramWidget(
            self.grid_widget,
            orientation=DendrogramWidget.Top,
            selectionMode=DendrogramWidget.NoSelection,
            hoverHighlightEnabled=False)
        self.top_dendrogram.setAcceptedMouseButtons(Qt.NoButton)
        self.top_dendrogram.setAcceptHoverEvents(False)

        self.grid.addItem(self.left_dendrogram, 1, 0)
        self.grid.addItem(self.top_dendrogram, 0, 1)

        self.right_labels = TextList(alignment=Qt.AlignLeft)

        self.bottom_labels = TextList(orientation=Qt.Horizontal,
                                      alignment=Qt.AlignRight)

        self.grid.addItem(self.right_labels, 1, 2)
        self.grid.addItem(self.bottom_labels, 2, 1)

        self.view.setCentralItem(self.grid_widget)

        self.left_dendrogram.hide()
        self.top_dendrogram.hide()
        self.right_labels.hide()
        self.bottom_labels.hide()

        self.matrix_item = None
        self.dendrogram = None

        self.grid_widget.scene().installEventFilter(self)
        self.graphButton.clicked.connect(self.save_graph)
コード例 #22
0
    def __init__(self):
        super().__init__()

        self.results = None
        self.scores = None
        self.classifier_names = []
        self.colors = []
        self.line = None

        self._last_score_value = -1

        box = gui.vBox(self.controlArea, box="Settings")
        self.target_cb = gui.comboBox(box,
                                      self,
                                      "target_index",
                                      label="Target:",
                                      orientation=Qt.Horizontal,
                                      callback=self.target_index_changed,
                                      contentsLength=8,
                                      searchable=True)
        gui.checkBox(box,
                     self,
                     "display_rug",
                     "Show rug",
                     callback=self._on_display_rug_changed)
        gui.checkBox(box,
                     self,
                     "fold_curves",
                     "Curves for individual folds",
                     callback=self._replot)

        self.classifiers_list_box = gui.listBox(
            self.controlArea,
            self,
            "selected_classifiers",
            "classifier_names",
            box="Classifier",
            selectionMode=QListWidget.ExtendedSelection,
            sizePolicy=(QSizePolicy.Preferred, QSizePolicy.Preferred),
            sizeHint=QSize(150, 40),
            callback=self._on_selection_changed)

        box = gui.vBox(self.controlArea, "Metrics")
        combo = gui.comboBox(box,
                             self,
                             "score",
                             items=(metric.name for metric in Metrics),
                             callback=self.score_changed)

        self.explanation = gui.widgetLabel(box,
                                           wordWrap=True,
                                           fixedWidth=combo.sizeHint().width())
        self.explanation.setContentsMargins(8, 8, 0, 0)
        font = self.explanation.font()
        font.setPointSizeF(0.85 * font.pointSizeF())
        self.explanation.setFont(font)

        gui.radioButtons(box,
                         self,
                         value="output_calibration",
                         btnLabels=("Sigmoid calibration",
                                    "Isotonic calibration"),
                         label="Output model calibration",
                         callback=self.apply)

        self.info_box = gui.widgetBox(self.controlArea, "Info")
        self.info_label = gui.widgetLabel(self.info_box)

        gui.auto_apply(self.controlArea,
                       self,
                       "auto_commit",
                       commit=self.apply)

        self.plotview = pg.GraphicsView(background="w")
        axes = {
            "bottom": AxisItem(orientation="bottom"),
            "left": AxisItem(orientation="left")
        }
        self.plot = pg.PlotItem(enableMenu=False, axisItems=axes)
        self.plot.parameter_setter = ParameterSetter(self.plot)
        self.plot.setMouseEnabled(False, False)
        self.plot.hideButtons()

        for axis_name in ("bottom", "left"):
            axis = self.plot.getAxis(axis_name)
            axis.setPen(pg.mkPen(color=0.0))
            # Remove the condition (that is, allow setting this for bottom
            # axis) when pyqtgraph is fixed
            # Issue: https://github.com/pyqtgraph/pyqtgraph/issues/930
            # Pull request: https://github.com/pyqtgraph/pyqtgraph/pull/932
            if axis_name != "bottom":  # remove if when pyqtgraph is fixed
                axis.setStyle(stopAxisAtTick=(True, True))

        self.plot.setRange(xRange=(0.0, 1.0), yRange=(0.0, 1.0), padding=0.05)
        self.plotview.setCentralItem(self.plot)

        self.mainArea.layout().addWidget(self.plotview)
        self._set_explanation()

        VisualSettingsDialog(self, self.plot.parameter_setter.initial_settings)
コード例 #23
0
ファイル: test_ROI.py プロジェクト: yanbin-ha/pyqtgraph
def check_getArrayRegion(roi, name, testResize=True, transpose=False):
    initState = roi.getState()

    #win = pg.GraphicsLayoutWidget()
    win = pg.GraphicsView()
    win.show()
    resizeWindow(win, 200, 400)
    # Don't use Qt's layouts for testing--these generate unpredictable results.
    #vb1 = win.addViewBox()
    #win.nextRow()
    #vb2 = win.addViewBox()

    # Instead, place the viewboxes manually
    vb1 = pg.ViewBox()
    win.scene().addItem(vb1)
    vb1.setPos(6, 6)
    vb1.resize(188, 191)

    vb2 = pg.ViewBox()
    win.scene().addItem(vb2)
    vb2.setPos(6, 203)
    vb2.resize(188, 191)

    img1 = pg.ImageItem(border='w')
    img2 = pg.ImageItem(border='w')

    vb1.addItem(img1)
    vb2.addItem(img2)

    np.random.seed(0)
    data = np.random.normal(size=(7, 30, 31, 5))
    data[0, :, :, :] += 10
    data[:, 1, :, :] += 10
    data[:, :, 2, :] += 10
    data[:, :, :, 3] += 10

    if transpose:
        data = data.transpose(0, 2, 1, 3)

    img1.setImage(data[0, ..., 0])
    vb1.setAspectLocked()
    vb1.enableAutoRange(True, True)

    roi.setZValue(10)
    vb1.addItem(roi)

    if isinstance(roi, pg.RectROI):
        if transpose:
            assert roi.getAffineSliceParams(data, img1, axes=(1, 2)) == ([
                28.0, 27.0
            ], ((1.0, 0.0), (0.0, 1.0)), (1.0, 1.0))
        else:
            assert roi.getAffineSliceParams(data, img1, axes=(1, 2)) == ([
                27.0, 28.0
            ], ((1.0, 0.0), (0.0, 1.0)), (1.0, 1.0))

    rgn = roi.getArrayRegion(data, img1, axes=(1, 2))
    #assert np.all((rgn == data[:, 1:-2, 1:-2, :]) | (rgn == 0))
    img2.setImage(rgn[0, ..., 0])
    vb2.setAspectLocked()
    vb2.enableAutoRange(True, True)

    app.processEvents()
    assertImageApproved(win, name + '/roi_getarrayregion',
                        'Simple ROI region selection.')

    with pytest.raises(TypeError):
        roi.setPos(0, False)

    roi.setPos([0.5, 1.5])
    rgn = roi.getArrayRegion(data, img1, axes=(1, 2))
    img2.setImage(rgn[0, ..., 0])
    app.processEvents()
    assertImageApproved(win, name + '/roi_getarrayregion_halfpx',
                        'Simple ROI region selection, 0.5 pixel shift.')

    roi.setAngle(45)
    roi.setPos([3, 0])
    rgn = roi.getArrayRegion(data, img1, axes=(1, 2))
    img2.setImage(rgn[0, ..., 0])
    app.processEvents()
    assertImageApproved(win, name + '/roi_getarrayregion_rotate',
                        'Simple ROI region selection, rotation.')

    if testResize:
        roi.setSize([60, 60])
        rgn = roi.getArrayRegion(data, img1, axes=(1, 2))
        img2.setImage(rgn[0, ..., 0])
        app.processEvents()
        assertImageApproved(win, name + '/roi_getarrayregion_resize',
                            'Simple ROI region selection, resized.')

    img1.setPos(0, img1.height())
    img1.setTransform(QtGui.QTransform().scale(1, -1).rotate(20), True)
    rgn = roi.getArrayRegion(data, img1, axes=(1, 2))
    img2.setImage(rgn[0, ..., 0])
    app.processEvents()
    assertImageApproved(win, name + '/roi_getarrayregion_img_trans',
                        'Simple ROI region selection, image transformed.')

    vb1.invertY()
    rgn = roi.getArrayRegion(data, img1, axes=(1, 2))
    img2.setImage(rgn[0, ..., 0])
    app.processEvents()
    # on windows, one edge of one ROI handle is shifted slightly; letting this slide with pxCount=10
    if pg.Qt.QT_LIB in {'PyQt4', 'PySide'}:
        pxCount = 10
    else:
        pxCount = -1
    assertImageApproved(win,
                        name + '/roi_getarrayregion_inverty',
                        'Simple ROI region selection, view inverted.',
                        pxCount=pxCount)

    roi.setState(initState)
    img1.setPos(0, 0)
    img1.setTransform(QtGui.QTransform.fromScale(1, 0.5))
    rgn = roi.getArrayRegion(data, img1, axes=(1, 2))
    img2.setImage(rgn[0, ..., 0])
    app.processEvents()
    assertImageApproved(
        win, name + '/roi_getarrayregion_anisotropic',
        'Simple ROI region selection, image scaled anisotropically.')

    # allow the roi to be re-used
    roi.scene().removeItem(roi)

    win.hide()
コード例 #24
0
ファイル: replay_list.py プロジェクト: mallman777-zz/ttag
###############

if True:
  win = QtGui.QMainWindow()
  win.resize(1600,600)
  win.setWindowTitle('window title')

  glw = QtGui.QWidget()
  #glw = pg.GraphicsLayoutWidget()
  l = QtGui.QGridLayout()
  glw.setLayout(l)

  win.setCentralWidget(glw)
  #view = glw.addViewBox()
  v = pg.GraphicsView()
  view = pg.ViewBox()
  view.setAspectLocked(True)
  v.setCentralItem(view)
  img = pg.ImageItem(border='y')
  view.addItem(img)
  
  v2 = pg.GraphicsView()
  l2 = pg.GraphicsLayout()
  v2.setCentralItem(l2) 
  plot1 = l2.addPlot()
  curve1 = plot1.plot(pen=(200,200,200), symbolBrush = (0,255,0), symbolPen = 'w')
#  plot1.setYRange(0.01, 1000000)
  plot1.setLogMode(x = False, y = p.param("LogScaleRow?").value())
  l2.nextRow()
  plot2 = l2.addPlot()
コード例 #25
0
def test_basics_graphics_view():
    app = pg.mkQApp()
    view = pg.GraphicsView()
    background_role = view.backgroundRole()
    assert background_role == QtGui.QPalette.Background

    palette = view.palette()
    assert palette.isBrushSet(QtGui.QPalette.Active, QtGui.QPalette.Background)
    assert palette.color(QtGui.QPalette.Background) == QtCore.Qt.transparent
    assert view.backgroundBrush().color() == QtGui.QColor(0, 0, 0, 255)

    assert view.focusPolicy() == QtCore.Qt.StrongFocus
    assert view.transformationAnchor() == QtGui.QGraphicsView.NoAnchor
    minimal_update = QtGui.QGraphicsView.MinimalViewportUpdate
    assert view.viewportUpdateMode() == minimal_update
    assert view.frameShape() == QtGui.QFrame.NoFrame
    assert view.hasMouseTracking() is True

    # Default properties
    # --------------------------------------

    assert view.mouseEnabled is False
    assert view.aspectLocked is False
    assert view.autoPixelRange is True
    assert view.scaleCenter is False
    assert view.clickAccepted is False
    assert view.centralWidget is not None
    assert view._background == "default"

    # Set background color
    # --------------------------------------
    view.setBackground("w")
    assert view._background == "w"
    palette = view.palette()
    assert palette.isBrushSet(QtGui.QPalette.Active, QtGui.QPalette.Background)
    assert palette.color(QtGui.QPalette.Background) == QtCore.Qt.transparent
    assert view.backgroundBrush().color() == QtCore.Qt.white

    # Set anti aliasing
    # --------------------------------------
    aliasing = QtGui.QPainter.Antialiasing
    # Default is set to `False`
    assert not view.renderHints() & aliasing == aliasing
    view.setAntialiasing(True)
    assert view.renderHints() & aliasing == aliasing
    view.setAntialiasing(False)
    assert not view.renderHints() & aliasing == aliasing

    # Enable mouse
    # --------------------------------------
    view.enableMouse(True)
    assert view.mouseEnabled is True
    assert view.autoPixelRange is False
    view.enableMouse(False)
    assert view.mouseEnabled is False
    assert view.autoPixelRange is True

    # Add and remove item
    # --------------------------------------
    central_item = QtGui.QGraphicsWidget()
    view.setCentralItem(central_item)
    assert view.centralWidget is central_item
    # XXX: Removal of central item is not clear in code
    scene = view.sceneObj
    assert isinstance(scene, pg.GraphicsScene)
    assert central_item in scene.items()

    item = QtGui.QGraphicsWidget()
    assert item not in scene.items()
    view.addItem(item)
    assert item in scene.items()
    view.removeItem(item)
    assert item not in scene.items()

    # Close the graphics view
    # --------------------------------------

    view.close()
    assert view.centralWidget is None
    assert view.currentItem is None
    assert view.sceneObj is None
    assert view.closed is True

    del view
    app.deleteLater()
コード例 #26
0
ファイル: main_window.py プロジェクト: NSLS-II-ESM-1/esmtools
    def get_data(self, s):
        file_name = s.text()
        MDIWindow.count = MDIWindow.count + 1
        sub = QMdiSubWindow()
        sub.resize(600, 600)
        sub.setWindowTitle(file_name)
        sub.setObjectName(file_name)
        if 'ibw' in file_name:
            self.opened_wd_names.append(file_name)
            self.data_dict = ut.ibw2dict(self.current_dir + '/' + file_name)
        elif 'zip' in file_name:
            self.opened3D_wd_names.append(file_name)
            self.data3D_dict = ut.read_bin_multi_region(
                self.current_dir, file_name[:-4])

        e_sc = self.data_dict['E_axis'][1] - self.data_dict['E_axis'][0]
        a_sc = self.data_dict['A_axis'][1] - self.data_dict['A_axis'][0]
        e_rg = self.data_dict['E_axis'][-1] - self.data_dict['E_axis'][0]
        a_rg = self.data_dict['A_axis'][-1] - self.data_dict['A_axis'][0]

        e_str = self.data_dict['E_axis'][0]
        a_str = self.data_dict['A_axis'][0]
        e_end = self.data_dict['E_axis'][-1]
        a_end = self.data_dict['A_axis'][-1]

        gr_v = pg.GraphicsView()
        l = pg.GraphicsLayout()
        gr_v.setCentralWidget(l)
        sub.setWidget(gr_v)
        self.ui.mdi.addSubWindow(sub)
        sub.show()

        p1 = l.addPlot(x=[1, 2],
                       y=[1, 2],
                       name="Plot1",
                       title="EDC",
                       pen="r",
                       row=0,
                       col=0)
        #       label1 = pg.LabelItem(justify='right')
        #        p1.addItem(label1)

        plt_i = pg.PlotItem(labels={
            'left': ('slits', 'degrees'),
            'bottom': ('Kin. Energy', 'eV')
        })
        plt_i.setRange(xRange=[e_str, e_end],
                       yRange=[a_str, a_end],
                       update=True,
                       padding=0)

        vb = plt_i.getViewBox()
        vb.setLimits(xMin=e_str, xMax=e_end, yMin=a_str, yMax=a_end)
        vb.setMouseMode(vb.RectMode)

        l.addItem(plt_i, row=1, col=0)
        img_i = pg.ImageItem(self.data_dict['data'], border=None)
        qrect = vb.viewRect()
        img_i.setRect(qrect)
        vb.addItem(img_i)
        vb.autoRange()
        #        vb.invertX()
        vb.invertY()
        hist = pg.HistogramLUTItem(image=img_i)

        l.addItem(hist, row=0, col=1)

        p2 = l.addPlot(x=[1, 2],
                       y=[2, 1],
                       name="Plot2",
                       title="MDC",
                       pen="g",
                       row=1,
                       col=1)
        #        label2 = pg.LabelItem(justify='left')
        #        plt_i.addItem(label2)

        # cross hair
        vLine = pg.InfiniteLine(angle=90, movable=False)
        hLine = pg.InfiniteLine(angle=0, movable=False)
        p1.addItem(vLine, ignoreBounds=False)
        p1.addItem(hLine, ignoreBounds=False)

        vb1 = p1.vb

        pcv = plt_i.addLine(x=e_end, pen='r')
        pch = plt_i.addLine(y=a_str, pen='r')

        def onMouseMoved(point):
            p = vb.mapSceneToView(point)
            pcv.setValue(p.x())
            pch.setValue(p.y())
            #            print(p.x(), p.y())

            hROI = pg.ROI((e_str, p.y()), size=(e_rg, 5 * a_sc))
            vb.addItem(hROI)
            hROI.hide()
            sl, co = hROI.getArrayRegion(self.data_dict['data'],
                                         img_i,
                                         returnMappedCoords=True)
            sl_sum = np.sum(sl, axis=1)
            p1.setXLink(plt_i)
            p1.plot(x=co[0, :, 0], y=sl_sum, clear=True)
            p1.setTitle('EDC, angle ={:.2f}'.format(p.y()))

            vROI = pg.ROI((p.x(), a_str), size=(5 * e_sc, a_rg))
            vb.addItem(vROI)
            vROI.hide()
            slc, coo = vROI.getArrayRegion(self.data_dict['data'],
                                           img_i,
                                           returnMappedCoords=True)
            sl_sum = np.sum(slc, axis=0)
            p2.invertY()
            p2.setYLink(plt_i)
            p2.plot(y=coo[1, 0, :], x=sl_sum, clear=True)
            p2.setTitle('MDC, energy ={:.2f}'.format(p.x()))

        #            label2.setText("{}-{}".format(p.x(), p.y()))

        img_i.scene().sigMouseMoved.connect(onMouseMoved)
コード例 #27
0
    def __init__(self):
        super().__init__()

        self.results = None
        self.classifier_names = []
        self.colors = []
        self._curve_data = {}

        box = gui.vBox(self.controlArea, "Plot")
        tbox = gui.vBox(box, "Target Class")
        tbox.setFlat(True)

        self.target_cb = gui.comboBox(tbox,
                                      self,
                                      "target_index",
                                      callback=self._on_target_changed,
                                      contentsLength=8)

        cbox = gui.vBox(box, "Classifiers")
        cbox.setFlat(True)
        self.classifiers_list_box = gui.listBox(
            cbox,
            self,
            "selected_classifiers",
            "classifier_names",
            selectionMode=QListView.MultiSelection,
            callback=self._on_classifiers_changed)

        gui.checkBox(box,
                     self,
                     "display_convex_hull",
                     "Show lift convex hull",
                     callback=self._replot)

        self.plotview = pg.GraphicsView(background="w")
        self.plotview.setFrameStyle(QFrame.StyledPanel)

        self.plot = pg.PlotItem(enableMenu=False)
        self.plot.setMouseEnabled(False, False)
        self.plot.hideButtons()

        pen = QPen(self.palette().color(QPalette.Text))

        tickfont = QFont(self.font())
        tickfont.setPixelSize(max(int(tickfont.pixelSize() * 2 // 3), 11))

        axis = self.plot.getAxis("bottom")
        axis.setTickFont(tickfont)
        axis.setPen(pen)
        axis.setLabel("P Rate")

        axis = self.plot.getAxis("left")
        axis.setTickFont(tickfont)
        axis.setPen(pen)
        axis.setLabel("TP Rate")

        self.plot.showGrid(True, True, alpha=0.1)
        self.plot.setRange(xRange=(0.0, 1.0), yRange=(0.0, 1.0), padding=0.05)

        self.plotview.setCentralItem(self.plot)
        self.mainArea.layout().addWidget(self.plotview)
コード例 #28
0
ファイル: test_decorator.py プロジェクト: johnsonc/cnmodel
    def plot(self):
        pg.setConfigOption('background', 'w')  # set background to white
        pg.setConfigOption('foreground', 'k')
        self.app = pg.mkQApp()

        wintitle = 'test_decorator'
        self.view = pg.GraphicsView()
        self.layout = pg.GraphicsLayout()  #(border=(100,100,100))
        self.view.setCentralItem(self.layout)
        self.view.resize(800, 600)
        self.view.show()
        self.plots = {}
        nr1 = 6
        nc = 10
        for i in range(1, nr1):
            self.plots['p%d' % i] = None
        for i in range(1, nr1 + 1):
            self.layout.addLayout(row=i, col=nc)
        for i in range(1, nc + 1):
            self.layout.addLayout(row=nr1 + 2, col=i)

        self.plots['p1'] = self.layout.addPlot(row=1,
                                               col=1,
                                               rowspan=6,
                                               colspan=9,
                                               labels={
                                                   'left': 'V (mV)',
                                                   'bottom': 'Time (ms)'
                                               })
        self.plots['p2'] = self.layout.addPlot(row=7,
                                               col=1,
                                               rowspan=1,
                                               colspan=9,
                                               labels={
                                                   'left': 'I (nA)',
                                                   'bottom': 'Time (ms)'
                                               })

        for k in range(len(self.iv.voltage_traces)):
            self.plots['p1'].plot(self.iv.time_values,
                                  np.array(self.iv.voltage_traces[k]),
                                  pen=pg.mkPen('k', width=0.75))
            self.plots['p2'].plot(self.iv.time_values,
                                  np.array(self.iv.current_traces[k]),
                                  pen=pg.mkPen('k', width=0.75))
        self.plots['p1'].setRange(xRange=(0.,
                                          np.sum(self.durs) - self.initdelay),
                                  yRange=(-160., 40.))
        self.plots['p2'].setRange(xRange=(0.,
                                          np.sum(self.durs) - self.initdelay),
                                  yRange=(-1, 1))
        PH.noaxes(self.plots['p1'])
        PH.calbar(self.plots['p1'],
                  calbar=[125., -120., 10., 20.],
                  unitNames={
                      'x': 'ms',
                      'y': 'mV'
                  })
        PH.noaxes(self.plots['p2'])
        PH.calbar(self.plots['p2'],
                  calbar=[125, 0.1, 0., 0.5],
                  unitNames={
                      'x': 'ms',
                      'y': 'nA'
                  })

        text = (u"{0:2d}\u00b0C {1:.2f}-{2:.2f} nA".format(
            int(self.temperature), np.min(self.iv.current_cmd),
            np.max(self.iv.current_cmd)))
        ti = pg.TextItem(text, anchor=(1, 0))
        ti.setFont(pg.QtGui.QFont('Arial', 9))
        ti.setPos(120., -120.)
        self.plots['p1'].addItem(ti)
コード例 #29
0
ファイル: test_incsfa.py プロジェクト: s7ev3n/IncSFA
def testincsfa(animate=False):
    try:
        import mdp.nodes
    except ImportError:
        raise ('Intall MDP toolkit for check/test')

    iterval = 20
    t = np.linspace(0, 4 * np.pi, 500)
    x1 = np.sin(t) + np.power(np.cos(11 * t), 2)
    x2 = np.cos(11 * t)
    x = np.zeros([t.shape[0], 2])
    x[:, 0] = x1
    x[:, 1] = x2
    expnode = mdp.nodes.PolynomialExpansionNode(2)
    input_data = expnode(x)

    ##Setup node/trainer
    input_dim = input_data.shape[1]
    whitening_output_dim = 5
    output_dim = 5
    node = IncSFANode(input_dim, whitening_output_dim, output_dim, eps=0.05)
    trainer = TrainerNode(node, mode='Incremental', ticker=100)

    #For check
    bsfanode = mdp.nodes.SFANode(output_dim=output_dim)
    bsfanode(input_data)
    bv = bsfanode.sf.T

    if PYQT:
        global app
        app = pg.QtGui.QApplication([])

        pg.setConfigOption('background', 'k')
        pg.setConfigOption('foreground', 'w')
        pg.setConfigOptions(antialias=True)

        ##Setup Plot

        view = pg.GraphicsView()
        l = pg.GraphicsLayout(border=(100, 100, 100))
        view.setCentralItem(l)
        view.setWindowTitle('IncSFA Test')
        view.resize(1200, 500)

        ## Title at top

        text = """
        This example demonstrates the working of Incremental Slow Feature Analysis (IncSFA).
        """
        l.addLabel(text, col=0, colspan=5, size='20px')
        l.nextRow()

        pen = pg.mkPen(color=(255, 255, 200), width=1)
        labelStyle = {'color': '#FFF', 'font-size': '16px'}

        p1 = l.addPlot(rowspan=2, colspan=2)

        #Axis Settings
        p1.getAxis('left').setPen(pen)
        p1.getAxis('bottom').setPen(pen)
        p1.showGrid(1, 1, .2)
        p1.setLabel('bottom', 'Ticker', units='t', **labelStyle)
        p1.setLabel('left', 'DC', **labelStyle)
        p1.setTitle('Direction Cosines', size='16px')
        p1.setXRange(0, iterval * t.shape[0] / trainer.ticker)
        p1.setYRange(0, 1.1)

        #Legend
        leg = pg.LegendItem(size=(100, 60),
                            offset=(-20, 100))  # args are (size, offset)
        leg.setParentItem(
            p1.graphicsItem())  # Note we do NOT call plt.addItem in this case

        #init curves
        curves1 = [
            pg.PlotCurveItem(pen=(i, output_dim * 1.3))
            for i in range(output_dim)
        ]
        for i, c in enumerate(curves1):
            p1.addItem(c)
            leg.addItem(c, 'V-%d' % i)

        l2 = l.addLayout(col=2, colspan=2, border=(50, 0, 0))

        curves2 = [
            pg.PlotCurveItem(pen=(i, output_dim * 1.3)) for i in range(4)
        ]

        l2.setContentsMargins(10, 10, 10, 10)
        l2.addLabel("IncSFA Feature Outputs", colspan=3, size='16px')
        l2.nextRow()
        l2.addLabel('Output Value', angle=-90, rowspan=2, size='16px')
        p21 = l2.addPlot()
        p21.addItem(curves2[0])
        p21.setXRange(0, t.shape[0])
        p21.setYRange(-2, 2)
        p22 = l2.addPlot()
        p22.addItem(curves2[1])
        p22.setXRange(0, t.shape[0])
        p22.setYRange(-2, 2)
        l2.nextRow()
        p23 = l2.addPlot()
        p23.addItem(curves2[2])
        p23.setXRange(0, t.shape[0])
        p23.setYRange(-2, 2)
        p24 = l2.addPlot()
        p24.addItem(curves2[3])
        p24.setXRange(0, t.shape[0])
        p24.setYRange(-2, 2)
        l2.nextRow()
        l2.addLabel("Time(t)", col=1, colspan=2, size='16px')

        if animate:
            view.show()
            trn = trainer.itrain(input_data,
                                 iterval=iterval,
                                 monitor_keys=['slowFeatures'])
            dcosines = np.zeros(
                [iterval * t.shape[0] / trainer.ticker, output_dim])
            timer = QtCore.QTimer()
            cnt = [0]
            _tcnt = time.time()

            def animloop():
                rtnval = trn.next()
                if not rtnval:
                    timer.stop()
                    print ''
                    print 'Total Time for %d iterations: ' % (
                        iterval), time.time() - _tcnt
                    print 'Success status: ', np.allclose(dcosines[cnt[0] - 1],
                                                          np.ones(output_dim),
                                                          atol=1e-2)
                    print 'Maximum error: ', np.max(
                        np.abs(np.ones(output_dim) - dcosines[cnt[0] - 1]))
                    return
                v = trainer.monitorVar['slowFeatures'][0]
                out = node.execute(input_data)
                for dim in xrange(output_dim):
                    dcosines[cnt[0], dim] = np.abs(np.dot(
                        v[dim], bv[dim].T)) / (np.linalg.norm(v[dim]) *
                                               np.linalg.norm(bv[dim]))

                for i in range(output_dim):
                    curves1[i].setData(dcosines[:cnt[0], i])

                for i in range(4):
                    curves2[i].setData(out[:, i])

                cnt[0] += 1

            timer.timeout.connect(animloop)
            timer.start(0)
        else:
            _tcnt = time.time()
            trainer.train(input_data,
                          iterval=iterval,
                          monitor_keys=['slowFeatures'])
            v = trainer.monitorVar['slowFeatures']
            dcosines = np.zeros([len(v), output_dim])
            for i in xrange(len(v)):
                for dim in xrange(output_dim):
                    dcosines[i, dim] = np.abs(np.dot(v[i][dim], bv[dim].T)) / (
                        np.linalg.norm(v[i][dim]) * np.linalg.norm(bv[dim]))

            out = node.execute(input_data)

            for i in range(output_dim):
                curves1[i].setData(dcosines[:, i])

            for i in range(4):
                curves2[i].setData(out[:, i])

            view.show()
            print ''
            print 'Total Time for %d iterations: ' % (
                iterval), time.time() - _tcnt
            print 'Success status: ', np.allclose(dcosines[-1],
                                                  np.ones(output_dim),
                                                  atol=1e-2)
            print 'Maximum error: ', np.max(
                np.abs(np.ones(output_dim) - dcosines[-1]))

        app.exec_()
    else:
        _tcnt = time.time()
        trainer.train(input_data,
                      iterval=iterval,
                      monitor_keys=['slowFeatures'])
        v = trainer.monitorVar['slowFeatures']
        dcosines = np.zeros([len(v), output_dim])
        for i in xrange(len(v)):
            for dim in xrange(output_dim):
                dcosines[i, dim] = np.abs(np.dot(v[i][dim], bv[dim].T)) / (
                    np.linalg.norm(v[i][dim]) * np.linalg.norm(bv[dim]))

        print ''
        print 'Total Time for %d iterations: ' % (iterval), time.time() - _tcnt
        print 'Success status: ', np.allclose(dcosines[-1],
                                              np.ones(output_dim),
                                              atol=1e-2)
        print 'Maximum error: ', np.max(
            np.abs(np.ones(output_dim) - dcosines[-1]))

        plt.figure(figsize=(12, 5))
        fig = plt.gcf()
        fig.canvas.set_window_title(
            'This example demonstrates the working of Incremental Slow Feature Analysis (IncSFA).'
        )
        plt.subplot2grid((2, 4), (0, 0), colspan=2, rowspan=2)
        plt.plot(dcosines)
        plt.ylim([0, 1.1])
        plt.title('Direction Cosines')
        plt.legend(['V-%d' % (i + 1) for i in xrange(output_dim)])
        plt.xlabel('Ticker')

        out = node.execute(input_data)

        plt.subplot2grid((2, 4), (0, 2))
        plt.plot(out[:, 0], 'b', linewidth=1.5)
        plt.title('SF Out-1')
        plt.subplot2grid((2, 4), (0, 3))
        plt.plot(out[:, 1], 'g', linewidth=1.5)
        plt.title('SF Out-2')
        plt.subplot2grid((2, 4), (1, 2))
        plt.plot(out[:, 2], 'r', linewidth=1.5)
        plt.title('SF Out-3')
        plt.subplot2grid((2, 4), (1, 3))
        plt.plot(out[:, 3], 'c', linewidth=1.5)
        plt.title('SF Out-4')

        plt.tight_layout()
        plt.show()
コード例 #30
0
ファイル: GUI.py プロジェクト: deathka77/ventiliser
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.setWindowTitle("Neonatal Ventilation Data Annotation Tool")
        self.resize(1280, 720)
        pg.setConfigOption('foreground', "k")
        pg.setConfigOption('background', 'w')

        # Label choices
        info_layout = QHBoxLayout()
        self.pressure_choice = QComboBox()
        self.pressure_choice.addItems(MainWindow.pressure_options)
        self.flow_choice = QComboBox()
        self.flow_choice.addItems(MainWindow.flow_options)
        info_layout.addWidget(QLabel("Pressure labels"), 1)
        info_layout.addWidget(self.pressure_choice, 2)
        info_layout.addWidget(QLabel("Flow labels"), 1)
        info_layout.addWidget(self.flow_choice, 2)

        # Graphing
        self.display = pg.GraphicsView()
        self.display_layout = pg.GraphicsLayout()
        self.display.setCentralItem(self.display_layout)
        self.pressure_plot = self.display_layout.addPlot(
            title="Pressure waveform")
        self.pressure_plot.showGrid(x=True, y=True)
        self.pressure_plot.setMenuEnabled(False)
        self.pressure_plot.setLabel("left", "Pressure")
        self.pressure_plot.setLabel("bottom", "Time")
        self.pressure_plot.scene().sigMouseClicked.connect(
            self.__on_graph_click)
        self.pressure_plot.sigXRangeChanged.connect(self.__on_axis_change)
        self.pressure_plot.setClipToView(True)
        self.display_layout.nextRow()
        self.flow_plot = self.display_layout.addPlot(title="Flow waveform")
        self.flow_plot.showGrid(x=True, y=True)
        self.flow_plot.setMenuEnabled(False)
        self.flow_plot.setLabel("left", "Flow")
        self.flow_plot.setLabel("bottom", "Time")
        self.flow_plot.setClipToView(True)
        self.flow_plot.getViewBox().setXLink(self.pressure_plot)
        self.pressure_pen = pg.mkPen(color="r", width=2)
        self.flow_pen = pg.mkPen(color="b", width=2)

        widget = QWidget()
        layout = QVBoxLayout()
        layout.addLayout(info_layout)
        layout.addWidget(self.display)
        widget.setLayout(layout)

        self.setCentralWidget(widget)

        # Default values
        self.data = None
        self.w_len = 500
        self.interval = 0
        self.pressure_labels = []
        self.flow_labels = []
        self.pressure_markers = []
        self.flow_markers = []
        self.xmin = 0
        self.xmax = 0

        # For file i/o
        self.File = self.menuBar().addMenu("&File")
        load_waveforms = QAction("Load Waveforms", self)
        load_waveforms.triggered.connect(self.__load_waveforms)
        self.File.addAction(load_waveforms)
        save_annotations = QAction("Save Annotations", self)
        save_annotations.triggered.connect(self.__save_annotations)
        self.File.addAction(save_annotations)
        load_annotations = QAction("Load Annotations", self)
        load_annotations.triggered.connect(self.__load_annotations)
        self.File.addAction(load_annotations)
        save_graph = QAction("Save graph", self)
        save_graph.triggered.connect(self.__save_graph)
        self.File.addAction(save_graph)

        # For view settings
        self.View = self.menuBar().addMenu("&View")
        view_settings = QAction("Display Settings", self)
        view_settings.triggered.connect(self.__display_setting)
        self.View.addAction(view_settings)