Exemplo n.º 1
0
    def test_spot_mode_world_overlay(self):
        sem = simsem.SimSEM(**CONFIG_SEM)
        for child in sem.children.value:
            if child.name == CONFIG_SCANNER["name"]:
                ebeam = child
        # Simulate a stage move
        ebeam.updateMetadata({model.MD_POS: (1e-3, -0.2e-3)})

        cnvs = miccanvas.DblMicroscopeCanvas(self.panel)
        cnvs.background_brush = wx.BRUSHSTYLE_CROSS_HATCH
        self.add_control(cnvs, wx.EXPAND, proportion=1, clear=True)

        spotPosition = model.TupleVA((0.1, 0.1))
        sol = wol.SpotModeOverlay(cnvs, spot_va=spotPosition, scanner=ebeam)
        sol.activate()
        cnvs.add_world_overlay(sol)
        cnvs.scale = 100000
        cnvs.update_drawing()
        test.gui_loop(1)

        spotPosition.value = (0.5, 0.5)

        test.gui_loop(1)

        spotPosition.value = (None, None)

        test.gui_loop()
        self.assertIsNone(sol.p_pos, None)
Exemplo n.º 2
0
    def setUpClass(cls):
        cls.sem_int = simsem.SimSEM(**CONFIG_SEM_INT)
        cls.sem_ext = semcomedi.SEMComedi(**CONFIG_SEM_EXT)

        for child in cls.sem_ext.children.value:
            if child.name == CONFIG_SCANNER_EXT["name"]:
                cls.ebeam_ext = child
            elif child.name == CONFIG_SED_EXT["name"]:
                cls.sed_ext = child
        for child in cls.sem_int.children.value:
            if child.name == CONFIG_SCANNER_INT["name"]:
                cls.ebeam_int = child
            if child.name == CONFIG_SED_INT["name"]:
                cls.sed_int = child

        det_kwargs = dict(name="test_detector",
                          role="detector",
                          dependencies={"external": cls.sed_ext})
        cls.scanner = CLASS(
            name="test_scanner",
            role="e-beam",
            dependencies={
                "external": cls.ebeam_ext,
                "internal": cls.ebeam_int
            },
            children={"detector": det_kwargs},
        )

        cls.detector = next(iter(cls.scanner.children.value))
Exemplo n.º 3
0
    def setUpClass(cls):
        cls.sem = simsem.SimSEM(**CONFIG_SEM)

        for child in cls.sem.children.value:
            if child.name == CONFIG_SED["name"]:
                cls.sed = child
            elif child.name == CONFIG_SCANNER["name"]:
                cls.scanner = child
Exemplo n.º 4
0
    def test_roa_select_overlay_va(self):

        sem = simsem.SimSEM(**CONFIG_SEM)
        for child in sem.children.value:
            if child.name == CONFIG_SCANNER["name"]:
                ebeam = child
        # Simulate a stage move
        ebeam.updateMetadata({model.MD_POS: (1e-3, -0.2e-3)})

        # but it should be a simple miccanvas
        cnvs = miccanvas.DblMicroscopeCanvas(self.panel)
        self.add_control(cnvs, wx.EXPAND, proportion=1, clear=True)

        roa = model.TupleVA(UNDEFINED_ROI)
        rsol = wol.RepetitionSelectOverlay(cnvs, roa=roa, scanner=ebeam)
        rsol.activate()
        cnvs.add_world_overlay(rsol)
        cnvs.scale = 100000
        cnvs.update_drawing()

        # Undefined ROA => sel = None
        roi_back = rsol.get_physical_sel()
        self.assertEqual(roi_back, None)

        # Full FoV
        roa.value = (0, 0, 1, 1)
        test.gui_loop(0.1)
        # Expect the whole SEM FoV
        fov = compute_scanner_fov(ebeam)
        ebeam_rect = get_fov_rect(ebeam, fov)
        roi_back = rsol.get_physical_sel()

        for o, b in zip(ebeam_rect, roi_back):
            self.assertAlmostEqual(o,
                                   b,
                                   msg="ebeam FoV (%s) != ROI (%s)" %
                                   (ebeam_rect, roi_back))

        # Hald the FoV
        roa.value = (0.25, 0.25, 0.75, 0.75)
        test.gui_loop(0.1)
        # Expect the whole SEM FoV
        fov = compute_scanner_fov(ebeam)
        fov = (fov[0] / 2, fov[1] / 2)
        ebeam_rect = get_fov_rect(ebeam, fov)
        roi_back = rsol.get_physical_sel()

        for o, b in zip(ebeam_rect, roi_back):
            self.assertAlmostEqual(o,
                                   b,
                                   msg="ebeam FoV (%s) != ROI (%s)" %
                                   (ebeam_rect, roi_back))

        test.gui_loop()

        sem.terminate()
Exemplo n.º 5
0
    def setUpClass(cls):
        cls.sem = simsem.SimSEM(drift_period=0.1, **CONFIG_SEM)

        for child in cls.sem.children.value:
            if child.name == CONFIG_SED["name"]:
                cls.sed = child
            elif child.name == CONFIG_SCANNER["name"]:
                cls.scanner = child
            elif child.name == CONFIG_FOCUS["name"]:
                cls.focus = child
Exemplo n.º 6
0
    def test_pickle(self):
        try:
            os.remove("test")
        except OSError:
            pass
        daemon = Pyro4.Daemon(unixsocket="test")
        
        sem = simsem.SimSEM(daemon=daemon, **CONFIG_SEM)
                
        dump = pickle.dumps(sem, pickle.HIGHEST_PROTOCOL)
#        print "dump size is", len(dump)
        sem_unpickled = pickle.loads(dump)
        self.assertEqual(len(sem_unpickled.children.value), 2)
        sem.terminate()
Exemplo n.º 7
0
    def setUpClass(cls):
        cls.sem_ext = semcomedi.SEMComedi(**CONFIG_SEM_EXT)
        cls.sem_int = simsem.SimSEM(**CONFIG_SEM_INT)

        for child in cls.sem_ext.children.value:
            if child.name == CONFIG_SCANNER_EXT["name"]:
                cls.ebeam_ext = child
            elif child.name == CONFIG_SED_EXT["name"]:
                cls.sed = child
        for child in cls.sem_int.children.value:
            if child.name == CONFIG_SCANNER_INT["name"]:
                cls.ebeam_int = child
        cls.scanner = CLASS(name="test", role="e-beam",
                            dependencies={"external": cls.ebeam_ext,
                                      "internal": cls.ebeam_int})
Exemplo n.º 8
0
    def test_pickle(self):
        try:
            os.remove("testds")
        except OSError:
            pass
        daemon = Pyro4.Daemon(unixsocket="testds")

        sem = simsem.SimSEM(daemon=daemon, **CONFIG_SEM)

        dump = pickle.dumps(sem, pickle.HIGHEST_PROTOCOL)
        #        print "dump size is", len(dump)
        sem_unpickled = pickle.loads(dump)
        self.assertIsInstance(sem_unpickled.children,
                              model.VigilantAttributeBase)
        self.assertEqual(sem_unpickled.name, sem.name)
        sem.terminate()
        daemon.shutdown()
Exemplo n.º 9
0
 def test_creation(self):
     """
     Doesn't even try to acquire an image, just create and delete components
     """
     sem = simsem.SimSEM(**CONFIG_SEM)
     self.assertEqual(len(sem.children.value), 3)
     
     for child in sem.children.value:
         if child.name == CONFIG_SED["name"]:
             sed = child
         elif child.name == CONFIG_SCANNER["name"]:
             scanner = child
     
     self.assertEqual(len(scanner.resolution.value), 2)
     self.assertIsInstance(sed.data, model.DataFlow)
     
     self.assertTrue(sem.selfTest(), "SEM self test failed.")
     sem.terminate()