def testDiagonalProfile(self): """Test diagonal profile, without and with image""" # Use Plot backend widget to submit mouse events widget = self.plot.getWidgetHandle() self.plot.addImage(numpy.arange(100 * 100).reshape(100, -1)) for method in ('sum', 'mean'): with self.subTest(method=method): # 2 positions to use for mouse events pos1 = widget.width() * 0.4, widget.height() * 0.4 pos2 = widget.width() * 0.6, widget.height() * 0.6 # Trigger tool button for diagonal profile mode self.toolBar.lineAction.trigger() # draw profile line widget.setFocus(qt.Qt.OtherFocusReason) self.mouseMove(widget, pos=pos1) self.qWait(100) self.mousePress(widget, qt.Qt.LeftButton, pos=pos1) self.qWait(100) self.mouseMove(widget, pos=pos2) self.qWait(100) self.mouseRelease(widget, qt.Qt.LeftButton, pos=pos2) self.qWait(100) manager = self.toolBar.getProfileManager() for _ in range(20): self.qWait(200) if not manager.hasPendingOperations(): break roi = manager.getCurrentRoi() self.assertIsNotNone(roi) roi.setProfileLineWidth(3) roi.setProfileMethod(method) for _ in range(20): self.qWait(200) if not manager.hasPendingOperations(): break curveItem = self.toolBar.getProfilePlot().getAllCurves()[0] if method == 'sum': self.assertTrue(curveItem.getData()[1].max() > 10000) elif method == 'mean': self.assertTrue(curveItem.getData()[1].max() < 10000) # Remove the ROI so the profile window is also removed roiManager = manager.getRoiManager() roiManager.removeRoi(roi) self.qWait(100)
def testMethodSumLine(self): """Simple interaction test to make sure the sum is correctly computed """ toolBar = self.plot.getProfileToolbar() toolBar.lineAction.trigger() plot2D = self.plot.getPlotWidget().getWidgetHandle() pos1 = plot2D.width() * 0.5, plot2D.height() * 0.2 pos2 = plot2D.width() * 0.5, plot2D.height() * 0.8 self.mouseMove(plot2D, pos=pos1) self.mousePress(plot2D, qt.Qt.LeftButton, pos=pos1) self.mouseMove(plot2D, pos=pos2) self.mouseRelease(plot2D, qt.Qt.LeftButton, pos=pos2) manager = toolBar.getProfileManager() roi = manager.getCurrentRoi() roi.setProfileMethod("sum") roi.setProfileType("2D") roi.setProfileLineWidth(3) for _ in range(20): self.qWait(200) if not manager.hasPendingOperations(): break # check 2D 'sum' profile profilePlot = toolBar.getProfilePlot() data = profilePlot.getAllImages()[0].getData() expected = numpy.array([[3, 12], [21, 30], [39, 48]]) numpy.testing.assert_almost_equal(data, expected)
def testMethodProfile2D(self): """Test that the profile can have a different method if we want to compute then in 1D or in 2D""" toolBar = self.plot.getProfileToolbar() toolBar.vLineAction.trigger() plot2D = self.plot.getPlotWidget().getWidgetHandle() pos1 = plot2D.width() * 0.5, plot2D.height() * 0.5 self.mouseClick(plot2D, qt.Qt.LeftButton, pos=pos1) manager = toolBar.getProfileManager() roi = manager.getCurrentRoi() roi.setProfileMethod("mean") roi.setProfileType("2D") roi.setProfileLineWidth(3) for _ in range(20): self.qWait(200) if not manager.hasPendingOperations(): break # check 2D 'mean' profile profilePlot = toolBar.getProfilePlot() data = profilePlot.getAllImages()[0].getData() expected = numpy.array([[1, 4], [7, 10], [13, 16]]) numpy.testing.assert_almost_equal(data, expected)
def testAlignedProfile(self): """Test horizontal and vertical profile, without and with image""" # Use Plot backend widget to submit mouse events widget = self.plot.getWidgetHandle() for method in ('sum', 'mean'): with self.subTest(method=method): # 2 positions to use for mouse events pos1 = widget.width() * 0.4, widget.height() * 0.4 pos2 = widget.width() * 0.6, widget.height() * 0.6 for action in (self.toolBar.hLineAction, self.toolBar.vLineAction): with self.subTest(mode=action.text()): # Trigger tool button for mode action.trigger() # Without image self.mouseMove(widget, pos=pos1) self.mouseClick(widget, qt.Qt.LeftButton, pos=pos1) # with image self.plot.addImage( numpy.arange(100 * 100).reshape(100, -1)) self.mousePress(widget, qt.Qt.LeftButton, pos=pos1) self.mouseMove(widget, pos=pos2) self.mouseRelease(widget, qt.Qt.LeftButton, pos=pos2) self.mouseMove(widget) self.mouseClick(widget, qt.Qt.LeftButton) manager = self.toolBar.getProfileManager() for _ in range(20): self.qWait(200) if not manager.hasPendingOperations(): break
def testProfile2D(self): """Test that the profile plot associated to a stack view is either a Plot1D or a plot 2D instance.""" self.plot = StackView() self.plot.show() self.qWaitForWindowExposed(self.plot) self.plot.setStack(numpy.array([[[0, 1], [2, 3]], [[4, 5], [6, 7]]])) toolBar = self.plot.getProfileToolbar() manager = toolBar.getProfileManager() roiManager = manager.getRoiManager() roi = rois.ProfileImageStackHorizontalLineROI() roi.setPosition(0.5) roi.setProfileType("2D") roiManager.addRoi(roi) roiManager.setCurrentRoi(roi) for _ in range(20): self.qWait(200) if not manager.hasPendingOperations(): break profileWindow = roi.getProfileWindow() self.assertIsInstance(roi.getProfileWindow(), qt.QMainWindow) self.assertIsInstance(profileWindow.getCurrentPlotWidget(), Plot2D) roi.setProfileType("1D") for _ in range(20): self.qWait(200) if not manager.hasPendingOperations(): break profileWindow = roi.getProfileWindow() self.assertIsInstance(roi.getProfileWindow(), qt.QMainWindow) self.assertIsInstance(profileWindow.getCurrentPlotWidget(), Plot1D)
def testProfile1D(self): self.plot = Plot2D() self.plot.show() self.qWaitForWindowExposed(self.plot) self.plot.addImage([[0, 1], [2, 3]]) toolBar = self.plot.getProfileToolbar() manager = toolBar.getProfileManager() roiManager = manager.getRoiManager() roi = rois.ProfileImageHorizontalLineROI() roi.setPosition(0.5) roiManager.addRoi(roi) roiManager.setCurrentRoi(roi) for _ in range(20): self.qWait(200) if not manager.hasPendingOperations(): break profileWindow = roi.getProfileWindow() self.assertIsInstance(roi.getProfileWindow(), qt.QMainWindow) self.assertIsInstance(profileWindow.getCurrentPlotWidget(), Plot1D)