def __init__(self,parent=None,scaling_options=dict(scaled_xaxis=dict(label="",units=None,offset=0,scaling=1),scaled_yaxis=dict(label="",units=None,offset=0,scaling=1))): super(Viewer2D,self).__init__() #setting the gui self.ui=Ui_Form() self.ui.ROIs_widget=self.setup_Roi_widget() if parent is None: parent=QtWidgets.QWidget() self.ui.setupUi(parent)#it's a widget here self.ui.horizontalLayout.addWidget(self.ui.ROIs_widget) self.ui.ROIs_widget.setVisible(False) self.max_size_integrated = 200 self.scaling_options = copy.deepcopy(scaling_options) self.viewer_type='Data2D' #☺by default self.title="" self.parent=parent self.image = None self.isdata=edict(blue=False,green=False,red=False) self.color_list=[(255,0,0),(0,255,0),(0,0,255),(14,207,189),(207,14,166),(207,204,14)] self.image_widget = ImageWidget() self.ui.plotitem = self.image_widget.plotitem # for backward compatibility self.ui.splitter_VLeft.replaceWidget(0, self.ui.graphicsView) self.autolevels=False self.ui.auto_levels_pb.clicked.connect(self.set_autolevels) self.scaled_yaxis=AxisItem_Scaled('right') self.scaled_xaxis=AxisItem_Scaled('top') self.image_widget.view.sig_double_clicked.connect(self.double_clicked) self.image_widget.plotitem.layout.addItem(self.scaled_xaxis, *(1,1)) self.image_widget.plotitem.layout.addItem(self.scaled_yaxis, *(2,2)) self.scaled_xaxis.linkToView(self.image_widget.view) self.scaled_yaxis.linkToView(self.image_widget.view) self.set_scaling_axes(self.scaling_options) self.image_widget.plotitem.vb.setAspectLocked(lock=True, ratio=1) self.ui.img_red = ImageItem() self.ui.img_green = ImageItem() self.ui.img_blue = ImageItem() #self.ui.img_red.sig_double_clicked.connect(self.double_clicked) self.ui.img_red.setCompositionMode( QtGui.QPainter.CompositionMode_Plus ) self.ui.img_green.setCompositionMode( QtGui.QPainter.CompositionMode_Plus ) self.ui.img_blue.setCompositionMode( QtGui.QPainter.CompositionMode_Plus ) self.ui.img_red.setOpts(axisOrder='row-major') self.ui.img_green.setOpts(axisOrder='row-major') self.ui.img_blue.setOpts(axisOrder='row-major') #selection area checkbox self.ui.blue_cb.setVisible(True) self.ui.blue_cb.setChecked(True) self.ui.blue_cb.clicked.connect(self.update_selection_area_visibility) self.ui.green_cb.setVisible(True) self.ui.green_cb.setChecked(True) self.ui.green_cb.clicked.connect(self.update_selection_area_visibility) self.ui.red_cb.setVisible(True) self.ui.red_cb.clicked.connect(self.update_selection_area_visibility) self.ui.red_cb.setChecked(True) self.image_widget.plotitem.addItem(self.ui.img_red) self.image_widget.plotitem.addItem(self.ui.img_green) self.image_widget.plotitem.addItem(self.ui.img_blue) self.ui.graphicsView.setCentralItem(self.image_widget.plotitem) ##self.ui.graphicsView.setCentralItem(self.image_widget.plotitem) #axis=pg.AxisItem('right',linkView=self.image_widget.view) #self.ui.graphicsView.addItem(axis) self.ui.aspect_ratio_pb.clicked.connect(self.lock_aspect_ratio) self.ui.aspect_ratio_pb.setChecked(True) #histograms histo_layout = QtWidgets.QHBoxLayout() self.ui.widget_histo.setLayout(histo_layout) self.ui.histogram_red=pg.HistogramLUTWidget() self.ui.histogram_red.setImageItem(self.ui.img_red) self.ui.histogram_green=pg.HistogramLUTWidget() self.ui.histogram_green.setImageItem(self.ui.img_green) self.ui.histogram_blue=pg.HistogramLUTWidget() self.ui.histogram_blue.setImageItem(self.ui.img_blue) histo_layout.addWidget(self.ui.histogram_red) histo_layout.addWidget(self.ui.histogram_green) histo_layout.addWidget(self.ui.histogram_blue) Ntick=3 colors_red =[(int(r),0,0) for r in pg.np.linspace(0,255,Ntick)] colors_green=[(0,int(g),0) for g in pg.np.linspace(0,255,Ntick)] colors_blue=[(0,0,int(b)) for b in pg.np.linspace(0,255,Ntick)] cmap_red = pg.ColorMap(pos=pg.np.linspace(0.0, 1.0, Ntick), color=colors_red) cmap_green = pg.ColorMap(pos=pg.np.linspace(0.0, 1.0, Ntick), color=colors_green) cmap_blue = pg.ColorMap(pos=pg.np.linspace(0.0, 1.0, Ntick), color=colors_blue) self.ui.histogram_red.gradient.setColorMap(cmap_red) self.ui.histogram_green.gradient.setColorMap(cmap_green) self.ui.histogram_blue.gradient.setColorMap(cmap_blue) self.ui.histogram_red.setVisible(False) self.ui.histogram_green.setVisible(False) self.ui.histogram_blue.setVisible(False) self.ui.Show_histogram.clicked.connect(self.show_hide_histogram) #ROI selects an area and export its bounds as a signal self.ui.ROIselect=pg.RectROI([0,0],[10,10],centered=True,sideScalers=True) self.image_widget.plotitem.addItem(self.ui.ROIselect) self.ui.ROIselect.setVisible(False) self.ui.ROIselect.sigRegionChangeFinished.connect(self.selected_region_changed) self.ui.ROIselect_pb.clicked.connect(self.show_ROI_select) ## Isocurve drawing self.ui.iso = pg.IsocurveItem(level=0.8, pen='g',axisOrder='row-major') self.ui.iso.setParentItem(self.ui.img_red) self.ui.iso.setZValue(5) ## Draggable line for setting isocurve level self.ui.isoLine = pg.InfiniteLine(angle=0, movable=True, pen='g') self.ui.histogram_red.vb.addItem(self.ui.isoLine) self.ui.histogram_red.vb.setMouseEnabled(y=False) # makes user interaction a little easier self.ui.isoLine.setValue(0.8) self.ui.isoLine.setZValue(1000) # bring iso line above contrast controls self.ui.isocurve_pb.clicked.connect(self.show_hide_iso) self.ui.isocurve_pb.setChecked(False) self.show_hide_iso() # build isocurves from smoothed data self.ui.isoLine.sigDragged.connect(self.updateIsocurve) ##crosshair self.ui.crosshair=Crosshair(self.image_widget.plotitem) self.ui.crosshair_H_blue = self.ui.Lineout_H.plot(pen="b") self.ui.crosshair_H_green = self.ui.Lineout_H.plot(pen="g") self.ui.crosshair_H_red = self.ui.Lineout_H.plot(pen="r") self.ui.crosshair_V_blue = self.ui.Lineout_V.plot(pen="b") self.ui.crosshair_V_green = self.ui.Lineout_V.plot(pen="g") self.ui.crosshair_V_red = self.ui.Lineout_V.plot(pen="r") self.ui.crosshair.crosshair_dragged.connect(self.update_crosshair_data) self.ui.crosshair_pb.clicked.connect(self.crosshairClicked) self.crosshairClicked() #flipping self.ui.FlipUD_pb.clicked.connect(self.update_image_flip) self.ui.FlipLR_pb.clicked.connect(self.update_image_flip) self.ui.rotate_pb.clicked.connect(self.update_image_flip) ## ROI stuff self.ui.RoiCurve_H=edict() self.ui.RoiCurve_V=edict() self.ui.RoiCurve_integrated=edict() self.data_integrated_plot= edict() self.ui.ROIs=OrderedDict([]) self.ui.roiBtn.clicked.connect(self.roiClicked) self.data_to_export=OrderedDict(data0D=OrderedDict(),data1D=OrderedDict(),data2D=OrderedDict()) self._x_axis=None self._y_axis=None self.x_axis_scaled=None self.y_axis_scaled=None self.ui.Ini_plot_pb.clicked.connect(self.ini_plot) params = [ROIScalableGroup(name="ROIs")] self.roi_settings=Parameter.create(title='ROIs Settings', name='roissettings', type='group', children=params) self.ui.ROI_Tree.setParameters(self.roi_settings, showTop=False) self.roi_settings.sigTreeStateChanged.connect(self.roi_tree_changed) self.ui.save_ROI_pb.clicked.connect(self.save_ROI) self.ui.load_ROI_pb.clicked.connect(self.load_ROI) #self.roiClicked() ## initialize roi plot to correct shape / visibility ##splitter try: self.ui.splitter_VLeft.splitterMoved[int,int].connect(self.move_right_splitter) self.ui.splitter_VRight.splitterMoved[int,int].connect(self.move_left_splitter) except: pass
def setupUI(self): self.ui = Ui_Form() self.ui.setupUi(self.parent) widg = QtWidgets.QWidget() self.viewer = Viewer1DBasic(widg) self.ui.verticalLayout.addWidget(widg) self.ui.Graph1D = self.viewer #for backcompatibility self.roi_manager.viewer_widget = self.viewer.plotwidget self.legend = None self.axis_settings = dict(orientation='bottom', label='x axis', units='pxls') # creating the settings widget of the viewer (ROI...) self.ui.splitter_2.replaceWidget(1, self.roi_manager.roiwidget) self.ui.statusbar = QtWidgets.QStatusBar(self.parent) self.ui.statusbar.setMaximumHeight(15) self.ui.StatusBarLayout.addWidget(self.ui.statusbar) # create and set the zoom widget # self.ui.zoom_widget=Dock("1DViewer zoom", size=(300, 100), closable=True) self.ui.zoom_widget = QtWidgets.QWidget() layout = QtWidgets.QHBoxLayout() self.ui.Graph_zoom = pg.PlotWidget() layout.addWidget(self.ui.Graph_zoom) self.ui.zoom_widget.setLayout(layout) self.ui.zoom_region = pg.LinearRegionItem() self.ui.zoom_region.setZValue(-10) self.ui.zoom_region.setBrush('r') self.ui.zoom_region.setOpacity(0.2) self.ui.Graph_zoom.addItem(self.ui.zoom_region) self.zoom_plot = [] # self.dockarea.addDock(self.ui.zoom_widget) self.ui.zoom_widget.setVisible(False) self.ui.xaxis_item = self.viewer.plotwidget.plotItem.getAxis('bottom') self.ui.Graph_Lineouts.hide() self.ui.aspect_ratio_pb.clicked.connect(self.lock_aspect_ratio) ##crosshair self.ui.crosshair = Crosshair(self.viewer.plotwidget.plotItem, orientation='vertical') self.ui.crosshair.crosshair_dragged.connect(self.update_crosshair_data) self.ui.crosshair_pb.clicked.connect(self.crosshairClicked) self.crosshairClicked() # self.ui.Measurement_widget=Dock("Measurement Module", size=(300, 100), closable=True) # self.dockarea.addDock(self.ui.Measurement_widget) self.ui.Measurement_widget = QtWidgets.QWidget() self.ui.Measurement_widget.setVisible(False) ##Connecting buttons: self.ui.Do_math_pb.clicked.connect(self.do_math_fun) self.ui.do_measurements_pb.clicked.connect( self.open_measurement_module) self.ui.zoom_pb.clicked.connect(self.enable_zoom)
def setupUI(self): self.ui = QObject() self.parent.setLayout(QtWidgets.QVBoxLayout()) splitter_hor = QtWidgets.QSplitter(Qt.Horizontal) self.ui.statusbar = QtWidgets.QStatusBar() self.ui.statusbar.setMaximumHeight(15) self.parent.layout().addWidget(splitter_hor) self.parent.layout().addWidget(self.ui.statusbar) graph_widget = QtWidgets.QWidget() graph_widget.setLayout(QtWidgets.QVBoxLayout()) splitter_hor.addWidget(graph_widget) splitter_hor.addWidget(self.roi_manager.roiwidget) self.roi_manager.roiwidget.hide() self.ui.button_widget = QtWidgets.QWidget() self.ui.button_widget.setLayout(QtWidgets.QHBoxLayout()) self.ui.button_widget.setMaximumHeight(50) splitter_ver = QtWidgets.QSplitter(Qt.Vertical) graph_widget.layout().addWidget(self.ui.button_widget) graph_widget.layout().addWidget(splitter_ver) self.ui.Graph_Lineouts = pg.PlotWidget() widg = QtWidgets.QWidget() self.viewer = Viewer1DBasic(widg) splitter_ver.addWidget(widg) splitter_ver.addWidget(self.ui.Graph_Lineouts) self.ui.Graph1D = self.viewer #for backcompatibility self.roi_manager.viewer_widget = self.viewer.plotwidget self.setup_buttons(self.ui.button_widget) self.setup_zoom() self.legend = None self.axis_settings = dict(orientation='bottom', label='x axis', units='pxls') self.ui.xaxis_item = self.viewer.plotwidget.plotItem.getAxis('bottom') self.ui.Graph_Lineouts.hide() self.ui.aspect_ratio_pb.clicked.connect(self.lock_aspect_ratio) ##crosshair self.ui.crosshair = Crosshair(self.viewer.plotwidget.plotItem, orientation='vertical') self.ui.crosshair.crosshair_dragged.connect(self.update_crosshair_data) self.ui.crosshair_pb.clicked.connect(self.crosshairClicked) self.crosshairClicked() # self.ui.Measurement_widget=Dock("Measurement Module", size=(300, 100), closable=True) # self.dockarea.addDock(self.ui.Measurement_widget) self.ui.Measurement_widget = QtWidgets.QWidget() self.ui.Measurement_widget.setVisible(False) ##Connecting buttons: self.ui.Do_math_pb.clicked.connect(self.do_math_fun) self.ui.do_measurements_pb.clicked.connect( self.open_measurement_module) self.ui.zoom_pb.clicked.connect(self.enable_zoom) self.ui.scatter.clicked.connect(self.do_scatter)
def __init__(self, parent=None): QLocale.setDefault(QLocale(QLocale.English, QLocale.UnitedStates)) super(Viewer1D, self).__init__() if parent is None: parent=QtWidgets.QWidget() self.parent=parent self.ui=Ui_Form() self.ui.setupUi(parent) if DAQ_Measurement is None: self.ui.do_measurements_pb.setVisible(False) self.viewer_type='Data1D' self.legend = None #creating the settings widget of the viewer (ROI...) self.ui.settings_layout=QtWidgets.QVBoxLayout() horlayout=QtWidgets.QHBoxLayout() self.ui.load_ROI_pb=QtWidgets.QPushButton('Load') self.ui.save_ROI_pb=QtWidgets.QPushButton('Save') horlayout.addWidget(self.ui.save_ROI_pb) horlayout.addWidget(self.ui.load_ROI_pb) self.ui.settings_layout.addLayout(horlayout) self.ui.ROIs_widget.setLayout(self.ui.settings_layout) self.ui.ROIs_widget.setVisible(False) widg = QtWidgets.QWidget() self.viewer = Viewer1DBasic(widg) self.ui.verticalLayout.addWidget(widg) self.ui.Graph1D = self.viewer #for backcompatibility self.ui.statusbar=QtWidgets.QStatusBar(parent) self.ui.statusbar.setMaximumHeight(15) self.ui.StatusBarLayout.addWidget(self.ui.statusbar) #create and set the zoom widget #self.ui.zoom_widget=Dock("1DViewer zoom", size=(300, 100), closable=True) self.ui.zoom_widget=QtWidgets.QWidget() layout=QtWidgets.QHBoxLayout() self.ui.Graph_zoom=pg.PlotWidget() layout.addWidget(self.ui.Graph_zoom) self.ui.zoom_widget.setLayout(layout) self.ui.zoom_region=pg.LinearRegionItem() self.ui.zoom_region.setZValue(-10) self.ui.zoom_region.setBrush('r') self.ui.zoom_region.setOpacity(0.2) self.ui.Graph_zoom.addItem(self.ui.zoom_region) self.zoom_plot=[] #self.dockarea.addDock(self.ui.zoom_widget) self.ui.zoom_widget.setVisible(False) self.ui.xaxis_item=self.viewer.plotwidget.plotItem.getAxis('bottom') self.ui.Graph_Lineouts.hide() self.wait_time=3000 self.measurement_module=None ##crosshair self.ui.crosshair = Crosshair(self.viewer.plotwidget.plotItem,orientation='vertical') self.ui.crosshair.crosshair_dragged.connect(self.update_crosshair_data) self.ui.crosshair_pb.clicked.connect(self.crosshairClicked) self.crosshairClicked() self._labels = [] self.plot_channels = None self.plot_colors = utils.plot_colors self.color_list = [(255, 0, 0), (0, 255, 0), (0, 0, 255), (14, 207, 189), (207, 14, 166), (207, 204, 14)] self.linear_regions = [] self.lo_items = [] self.lo_data = [] self.ROI_bounds = [] self._x_axis = None self.datas = [] # datas on each channel. list of 1D arrays self.data_to_export = OrderedDict(data0D=OrderedDict(), data1D=OrderedDict(), data2D=None) self.measurement_dict = OrderedDict(x_axis=None, data=None, ROI_bounds=None, operation=None) # OrderedDict to be send to the daq_measurement module self.measure_data_dict = OrderedDict() # dictionnary with data to be put in the table on the form: key="Meas.{}:".format(ind) # and value is the result of a given lineout or measurement # self.ui.Measurement_widget=Dock("Measurement Module", size=(300, 100), closable=True) # self.dockarea.addDock(self.ui.Measurement_widget) self.ui.Measurement_widget = QtWidgets.QWidget() self.ui.Measurement_widget.setVisible(False) # create viewer parameter tree self.ui.settings_tree = ParameterTree() self.ui.settings_layout.addWidget(self.ui.settings_tree) self.ui.settings_tree.setMinimumWidth(250) params = [ {'title': 'Math Settings', 'name': 'math_settings', 'type': 'group', 'children': [ {'title': 'Do math on CH:', 'name': 'channel_combo', 'type': 'list'}, {'title': 'Math type:', 'name': 'math_function', 'type': 'list', 'values': ['Sum', 'Mean', 'half-life', 'expotime'], 'value': 'Sum'}, {'title': 'N Lineouts:', 'name': 'Nlineouts_sb', 'type': 'int', 'value': 0, 'default': 0, 'min': 0}, {'title': 'Spread ROI', 'name': 'spreadROI_pb', 'type': 'action'}, {'title': 'Clear Lineouts', 'name': 'clear_lo_pb', 'type': 'action'} ]}, {'name': 'Measurements', 'type': 'table', 'value': OrderedDict([]), 'Ncol': 2, 'header': ["LO", "Value"]}, {'name': 'ROIs', 'type': 'group'} ] self.roi_settings = Parameter.create(title='Viewer Settings',name='Viewer1D_Settings', type='group', children=params) #connecting from tree self.roi_settings.child('math_settings', 'spreadROI_pb').sigActivated.connect(self.spread_lineouts) self.roi_settings.child('math_settings', 'clear_lo_pb').sigActivated.connect(self.clear_lo) self.ui.settings_tree.setParameters(self.roi_settings, showTop=False) self.roi_settings.sigTreeStateChanged.connect(self.roi_tree_changed) ##Connecting buttons: self.ui.Do_math_pb.clicked.connect(self.do_math_fun) self.ui.do_measurements_pb.clicked.connect(self.open_measurement_module) self.ui.zoom_pb.clicked.connect(self.enable_zoom) self.ui.save_ROI_pb.clicked.connect(self.save_ROI) self.ui.load_ROI_pb.clicked.connect(self.load_ROI)