def createImageContext(self): TestStatsBase.createImageContext(self) self.imageContext = stats._ImageContext(item=self.plot2d.getImage( self._imgLgd), plot=self.plot2d, onlimits=False, roi=self._2Droi_rect) self.imageContext_2 = stats._ImageContext(item=self.plot2d.getImage( self._imgLgd), plot=self.plot2d, onlimits=False, roi=self._2Droi_poly)
def testOnLimits(self): stat = stats.StatMin() self.plot1d.getXAxis().setLimitsConstraints(minPos=2, maxPos=5) curveContextOnLimits = stats._CurveContext( item=self.plot1d.getCurve('curve0'), plot=self.plot1d, onlimits=True, roi=None) self.assertEqual(stat.calculate(curveContextOnLimits), 2) self.plot2d.getXAxis().setLimitsConstraints(minPos=32) imageContextOnLimits = stats._ImageContext( item=self.plot2d.getImage('test image'), plot=self.plot2d, onlimits=True, roi=None) self.assertEqual(stat.calculate(imageContextOnLimits), 32) self.scatterPlot.getXAxis().setLimitsConstraints(minPos=40) scatterContextOnLimits = stats._ScatterContext( item=self.scatterPlot.getScatter('scatter plot'), plot=self.scatterPlot, onlimits=True, roi=None) self.assertEqual(stat.calculate(scatterContextOnLimits), 20)
def createImageContext(self): self.plot2d = Plot2D() self._imgLgd = 'test image' self.imageData = numpy.arange(32*128).reshape(32, 128) self.plot2d.addImage(data=self.imageData, legend=self._imgLgd, replace=False) self.imageContext = stats._ImageContext( item=self.plot2d.getImage(self._imgLgd), plot=self.plot2d, onlimits=False )
def createImageContext(self): self.plot2d = Plot2D() lgd = 'test image' self.imageData = numpy.arange(32*128).reshape(32, 128) self.plot2d.addImage(data=self.imageData, legend=lgd, replace=False) self.imageContext = stats._ImageContext( item=self.plot2d.getImage(lgd), plot=self.plot2d, onlimits=False )
def test(self): """Test stats result on an image context with different scale and origins""" roi_origins = [(0, 0), (2, 10), (14, 20)] img_origins = [(0, 0), (14, 20), (2, 10)] img_scales = [1.0, 0.5, 2.0] _stats = { 'sum': stats.Stat(name='sum', fct=numpy.sum), } for roi_origin in roi_origins: for img_origin in img_origins: for img_scale in img_scales: with self.subTest(roi_origin=roi_origin, img_origin=img_origin, img_scale=img_scale): self.plot.addImage(self.data, legend='img', origin=img_origin, scale=img_scale) roi = RectangleROI() roi.setGeometry(origin=roi_origin, size=(20, 20)) context = stats._ImageContext( item=self.plot.getImage('img'), plot=self.plot, onlimits=False, roi=roi) x_start = int( (roi_origin[0] - img_origin[0]) / img_scale) x_end = int(x_start + (20 / img_scale)) + 1 y_start = int( (roi_origin[1] - img_origin[1]) / img_scale) y_end = int(y_start + (20 / img_scale)) + 1 x_start = max(x_start, 0) x_end = min(max(x_end, 0), self.data_dims[1]) y_start = max(y_start, 0) y_end = min(max(y_end, 0), self.data_dims[0]) th_sum = numpy.sum(self.data[y_start:y_end, x_start:x_end]) self.assertAlmostEqual( _stats['sum'].calculate(context), th_sum)
def testStatsImageAdv(self): """Test that scale and origin are taking into account for images""" image2Data = numpy.arange(32 * 128).reshape(32, 128) self.plot2d.addImage(data=image2Data, legend=self._imgLgd, replace=True, origin=(100, 10), scale=(2, 0.5)) image2Context = stats._ImageContext( item=self.plot2d.getImage(self._imgLgd), plot=self.plot2d, onlimits=False ) _stats = self.getBasicStats() self.assertTrue(_stats['min'].calculate(image2Context) == 0) self.assertTrue( _stats['max'].calculate(image2Context) == 128 * 32 - 1) self.assertTrue( _stats['minCoords'].calculate(image2Context) == (100, 10)) self.assertTrue( _stats['maxCoords'].calculate(image2Context) == (127*2. + 100, 31 * 0.5 + 10) ) self.assertTrue( _stats['std'].calculate(image2Context) == numpy.std( self.imageData)) self.assertTrue( _stats['mean'].calculate(image2Context) == numpy.mean( self.imageData)) yData = numpy.sum(self.imageData, axis=1) xData = numpy.sum(self.imageData, axis=0) dataXRange = range(self.imageData.shape[1]) dataYRange = range(self.imageData.shape[0]) ycom = numpy.sum(yData * dataYRange) / numpy.sum(yData) ycom = (ycom * 0.5) + 10 xcom = numpy.sum(xData * dataXRange) / numpy.sum(xData) xcom = (xcom * 2.) + 100 self.assertTrue( _stats['com'].calculate(image2Context) == (xcom, ycom))
def testStatsImageAdv(self): """Test that scale and origin are taking into account for images""" image2Data = numpy.arange(32 * 128).reshape(32, 128) self.plot2d.addImage(data=image2Data, legend=self._imgLgd, replace=True, origin=(100, 10), scale=(2, 0.5)) image2Context = stats._ImageContext( item=self.plot2d.getImage(self._imgLgd), plot=self.plot2d, onlimits=False ) _stats = self.getBasicStats() self.assertTrue(_stats['min'].calculate(image2Context) == 0) self.assertTrue( _stats['max'].calculate(image2Context) == 128 * 32 - 1) self.assertTrue( _stats['minCoords'].calculate(image2Context) == (100, 10)) self.assertTrue( _stats['maxCoords'].calculate(image2Context) == (127*2. + 100, 31 * 0.5 + 10) ) self.assertTrue( _stats['std'].calculate(image2Context) == numpy.std( self.imageData)) self.assertTrue( _stats['mean'].calculate(image2Context) == numpy.mean( self.imageData)) yData = numpy.sum(self.imageData, axis=1) xData = numpy.sum(self.imageData, axis=0) dataXRange = range(self.imageData.shape[1]) dataYRange = range(self.imageData.shape[0]) ycom = numpy.sum(yData * dataYRange) / numpy.sum(yData) ycom = (ycom * 0.5) + 10 xcom = numpy.sum(xData * dataXRange) / numpy.sum(xData) xcom = (xcom * 2.) + 100 self.assertTrue( _stats['com'].calculate(image2Context) == (xcom, ycom))
def testOnLimits(self): stat = stats.StatMin() self.plot1d.getXAxis().setLimitsConstraints(minPos=2, maxPos=5) curveContextOnLimits = stats._CurveContext( item=self.plot1d.getCurve('curve0'), plot=self.plot1d, onlimits=True) self.assertTrue(stat.calculate(curveContextOnLimits) == 2) self.plot2d.getXAxis().setLimitsConstraints(minPos=32) imageContextOnLimits = stats._ImageContext( item=self.plot2d.getImage('test image'), plot=self.plot2d, onlimits=True) self.assertTrue(stat.calculate(imageContextOnLimits) == 32) self.scatterPlot.getXAxis().setLimitsConstraints(minPos=40) scatterContextOnLimits = stats._ScatterContext( item=self.scatterPlot.getScatter('scatter plot'), plot=self.scatterPlot, onlimits=True) self.assertTrue(stat.calculate(scatterContextOnLimits) == 20)