Ejemplo n.º 1
0
    def test_binning(self):
        """
        Changing the binning shouldn't affect the position
        binning x2 => same position (so shift in pixel / 2)
        """
        # At pos 0, 0
        im0 = self.camera.data.get()

        # Move a little bit in X,Y => should have a different image shifted by the same amount
        self.camera.updateMetadata({model.MD_POS: (10e-6, 20e-6)})
        im_move1 = self.camera.data.get()

        # Change to binning 2
        self.camera.binning.value = (2, 2)
        self.camera.updateMetadata({model.MD_PIXEL_SIZE: (2e-6, 2e-6)
                                    })  # Normally updated by the mdupdater

        im_move2 = self.camera.data.get()
        assert_tuple_almost_equal((0, 0),
                                  MeasureShift(im_move1[::2, ::2], im_move2,
                                               10),
                                  delta=0.5)
        assert_tuple_almost_equal((5, -10),
                                  MeasureShift(im0[::2, ::2], im_move2, 10),
                                  delta=0.5)
Ejemplo n.º 2
0
    def test_roi(self):
        """
        check that .translation and .binning work
        """

        # First, test simple behaviour on the VA
        # max resolution
        max_res = self.camera.resolution.range[1]
        self.camera.binning.value = (1, 1)
        self.camera.resolution.value = max_res
        self.camera.translation.value = (
            -1, 1)  # will be set back to 0,0 as it cannot move
        self.assertEqual(self.camera.translation.value, (0, 0))

        # binning
        self.camera.binning.value = (16, 16)
        exp_res = (max_res[0] // 16, max_res[1] // 16)
        assert_tuple_almost_equal(self.camera.resolution.value, exp_res)
        self.camera.translation.value = (-1, 1)
        self.assertEqual(self.camera.translation.value, (0, 0))

        # translation
        exp_res = (max_res[0] // 32, max_res[1] // 32)
        self.camera.resolution.value = exp_res
        self.camera.translation.value = (-1, 1)
        assert_tuple_almost_equal(self.camera.resolution.value, exp_res)
        self.assertEqual(self.camera.translation.value, (-1, 1))
        self.camera.binning.value = (1, 1)
        self.camera.resolution.value = self.camera.resolution.range[1]
        self.camera.translation.value = (0, 0)
Ejemplo n.º 3
0
    def test_roi(self):
        """
        check that .translation and .scale work
        """
        # max resolution
        max_res = self.scanner.resolution.range[1]

        # shift
        exp_res = (max_res[0] // 2, max_res[1] // 2)
        self.scanner.resolution.value = exp_res
        self.scanner.translation.value = (-1, 1)
        test.assert_tuple_almost_equal(self.scanner.resolution.value, exp_res)
        self.assertEqual(self.scanner.translation.value, (-1, 1))
        self.scanner.translation.value = (0, 0)

        self.scanner.resolution.value = max_res
        self.scanner.scale.value = (2, 2)
        self.scanner.dwellTime.value = self.scanner.dwellTime.range[0]

        # normal acquisition
        im = self.sed.data.get()
        self.assertEqual(im.shape, self.scanner.resolution.value[-1::-1])

        # shift a bit
        # reduce the size of the image so that we can have translation
        self.scanner.translation.value = (-10, 10)  # px
        im = self.sed.data.get()
        self.assertEqual(im.shape, self.scanner.resolution.value[-1::-1])

        # only one point
        self.scanner.resolution.value = (1, 1)
        im = self.sed.data.get()
        self.assertEqual(im.shape, self.scanner.resolution.value[-1::-1])
Ejemplo n.º 4
0
 def test_write_time(self):
     startt = time.time()
     shift = (-3e-6, 1e-6)
     self.bc.shift.value = shift
     self.assertLess(time.time() - startt, 0.03,
                     "Reading/writing took more than 30 ms.")
     logging.debug("Shift value set to %s", self.bc.shift.value)
     test.assert_tuple_almost_equal(self.bc.shift.value, shift, places=7)
Ejemplo n.º 5
0
 def test_transform_coordinates(self):
     val = (0, 4e-6)
     md = ((-0.00027788219369730165, 0.0013604844623992785),
           (0.00012699407486043473, -0.0006217507619527259),
           (-0.0013604844623992785, -0.00027788219369730165),
           (0.0006217507619527259, 0.00012699407486043473))
     expected = [0x6f7e, 0x835f, 0x7874,
                 0x7e75]  # from testing with example script
     ret = tfsbc.transform_coordinates(val, *md)
     self.assertEqual(ret, expected)
     rev = tfsbc.transform_coordinates_reverse(ret, *md)
     test.assert_tuple_almost_equal(val, rev, places=5)
Ejemplo n.º 6
0
    def test_save(self):
        conf = gui.conf.get_calib_conf()

        shid = 125166841353
        # try with a bit annoying numbers
        htop = (-0.5, 1e-6)
        hbot = (5e9, -1.55158e-6)
        hfoc = 0.006
        ofoc = -0.001e-6
        strans = (5.468e-3, -365e-6)
        sscale = (1.1, 0.9)
        srot = 0.1
        iscale = (13.1, 13.1)
        irot = 5.9606
        iscale_xy = (1.01, 0.9)
        ishear = 1.1
        resa = (8.09, 2.16)
        resb = (-157.5, -202.9)
        hfwa = (-0.953, -0.009)
        scaleshift = (0.029, -2.90e-05)

        orig_calib = (htop, hbot, hfoc, ofoc, strans, sscale, srot, iscale, irot,
                      iscale_xy, ishear, resa, resb, hfwa, scaleshift)
        conf.set_sh_calib(shid, *orig_calib)

        # read back from memory
        back_calib = conf.get_sh_calib(shid)
        for o, b in zip(orig_calib, back_calib):
            if isinstance(o, tuple):
                test.assert_tuple_almost_equal(o, b)
            else:
                self.assertAlmostEqual(o, b)

        # read back from file
        del conf
        gui.conf.CONF_CALIB = None

        conf = gui.conf.get_calib_conf()
        back_calib = conf.get_sh_calib(shid)
        for o, b in zip(orig_calib, back_calib):
            if isinstance(o, tuple):
                test.assert_tuple_almost_equal(o, b)
            else:
                self.assertAlmostEqual(o, b)
Ejemplo n.º 7
0
    def test_move_around(self):
        """
        Test that moving the "stage" moves the image
        """
        # At pos 0, 0
        im0 = self.camera.data.get()
        self.assertEqual(self.camera.resolution.value[::-1], im0.shape[:2])
        im1 = self.camera.data.get()
        assert_tuple_almost_equal((0, 0),
                                  MeasureShift(im0, im1, 10),
                                  delta=0.5)

        # Move a little bit in X,Y => should have a different image shifted by the same amount
        self.camera.updateMetadata({model.MD_POS: (10e-6, 20e-6)})
        im_move1 = self.camera.data.get()
        # Y is opposite direction in pixels, compared to physical
        assert_tuple_almost_equal((10, -20),
                                  MeasureShift(im0, im_move1, 10),
                                  delta=0.5)

        # Move a little bit => should have a different image
        self.camera.updateMetadata({model.MD_POS: (100e-6, 200e-6)})
        im_move1 = self.camera.data.get()
        # Note: images are always different, due to synthetic noise
        test.assert_array_not_equal(im0, im_move1)

        # Move the opposite direction
        self.camera.updateMetadata({model.MD_POS: (-100e-6, -200e-6)})
        im_move2 = self.camera.data.get()
        test.assert_array_not_equal(im0, im_move2)
        test.assert_array_not_equal(im_move1, im_move2)

        # Move far => should "block" on the border
        self.camera.updateMetadata({model.MD_POS: (-1000e-6, -2000e-6)})
        im_move_f1 = self.camera.data.get()
        #         test.assert_array_not_equal(im0, im_move_f1)

        # Move even further => no change
        self.camera.updateMetadata({model.MD_POS: (-10000e-6, -20000e-6)})
        im_move_f2 = self.camera.data.get()
Ejemplo n.º 8
0
    def test_shifts(self):
        """
        Move to different shifts, test if .shift VA is updated correctly. Wait in between,
        so the effect can be seen on the hardware.
        """
        shift = (0, 0)
        self.bc.shift.value = shift
        test.assert_tuple_almost_equal(self.bc.shift.value, shift, places=7)
        time.sleep(1)

        shift = (-5e-6, 0)
        self.bc.shift.value = shift
        test.assert_tuple_almost_equal(self.bc.shift.value, shift, places=7)
        time.sleep(1)

        shift = (-5e-6, -5e-6)
        self.bc.shift.value = shift
        test.assert_tuple_almost_equal(self.bc.shift.value, shift, places=7)
        time.sleep(1)

        shift = (0, -5e-6)
        self.bc.shift.value = shift
        test.assert_tuple_almost_equal(self.bc.shift.value, shift, places=7)

        shift = (0, 0)
        self.bc.shift.value = shift
        test.assert_tuple_almost_equal(self.bc.shift.value, shift, places=7)

        # Large shift
        shift = (500e-6, 0)
        with self.assertRaises(ValueError):
            self.bc.shift.value = shift

        shift = (0, 500e-6)
        with self.assertRaises(ValueError):
            self.bc.shift.value = shift
Ejemplo n.º 9
0
    def test_roi(self):
        """
        check that .translation and .scale work
        """

        # First, test simple behaviour on the VA
        # max resolution
        max_res = self.scanner.resolution.range[1]
        self.scanner.scale.value = (1, 1)
        self.scanner.resolution.value = max_res
        self.scanner.translation.value = (-1, 1) # will be set back to 0,0 as it cannot move
        self.assertEqual(self.scanner.translation.value, (0, 0))

        # scale up
        self.scanner.scale.value = (16, 16)
        exp_res = (max_res[0] // 16, max_res[1] // 16)
        test.assert_tuple_almost_equal(self.scanner.resolution.value, exp_res)
        self.scanner.translation.value = (-1, 1)
        self.assertEqual(self.scanner.translation.value, (0, 0))

        # shift
        exp_res = (max_res[0] // 32, max_res[1] // 32)
        self.scanner.resolution.value = exp_res
        self.scanner.translation.value = (-1, 1)
        test.assert_tuple_almost_equal(self.scanner.resolution.value, exp_res)
        self.assertEqual(self.scanner.translation.value, (-1, 1))

        # change scale to some float
        self.scanner.resolution.value = (max_res[0] // 16, max_res[1] // 16)
        self.scanner.scale.value = (1.5, 2.3)
        exp_res = (max_res[0] // 1.5, max_res[1] // 2.3)
        test.assert_tuple_almost_equal(self.scanner.resolution.value, exp_res)
        self.assertEqual(self.scanner.translation.value, (0, 0))

        self.scanner.scale.value = (1, 1)
        test.assert_tuple_almost_equal(self.scanner.resolution.value, max_res, delta=2.1)
        self.assertEqual(self.scanner.translation.value, (0, 0))

        # Then, check metadata fits with the expectations
        center = (1e3, -2e3) #m
        # simulate the information on the position (normally from the mdupdater)
        self.scanner.updateMetadata({model.MD_POS: center})

        self.scanner.resolution.value = max_res
        self.scanner.scale.value = (16, 16)
        self.scanner.dwellTime.value = self.scanner.dwellTime.range[0]

        # normal acquisition
        im = self.sed.data.get()
        self.assertEqual(im.shape, self.scanner.resolution.value[-1::-1])
        test.assert_tuple_almost_equal(im.metadata[model.MD_POS], center)

        # shift a bit
        # reduce the size of the image so that we can have translation
        self.scanner.resolution.value = (max_res[0] // 32, max_res[1] // 32)
        self.scanner.translation.value = (-1.26, 10) # px
        pxs = self.scanner.pixelSize.value
        exp_pos = (center[0] + (-1.26 * pxs[0]),
                   center[1] - (10 * pxs[1])) # because translation Y is opposite from physical one

        im = self.sed.data.get()
        self.assertEqual(im.shape, self.scanner.resolution.value[-1::-1])
        test.assert_tuple_almost_equal(im.metadata[model.MD_POS], exp_pos)

        # only one point
        self.scanner.resolution.value = (1,1)
        im = self.sed.data.get()
        self.assertEqual(im.shape, self.scanner.resolution.value[-1::-1])
        test.assert_tuple_almost_equal(im.metadata[model.MD_POS], exp_pos)
Ejemplo n.º 10
0
 def test_read_write(self):
     vals = [27000, 37000, 20000, 44000]
     self.bc._write_registers(vals)
     ret = self.bc._read_registers()
     test.assert_tuple_almost_equal(vals, list(ret), places=1)