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)
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))
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
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()
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
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()
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})
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()
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()