def test_fill_and_multiple_streams(db, RE, tmpdir, hw): from ophyd import sim RE.subscribe(db.insert) detfs1 = sim.SynSignalWithRegistry(name='detfs1', func=lambda: np.ones((5, 5)), reg=db.reg, save_path=str(tmpdir.mkdir('a'))) detfs2 = sim.SynSignalWithRegistry(name='detfs2', func=lambda: np.ones((5, 5)), reg=db.reg, save_path=str(tmpdir.mkdir('b'))) # In each event stream, put one 'fillable' (external-writing) # detector and one simple detector. primary_dets = [detfs1, hw.det1] baseline_dets = [detfs2, hw.det2] uid, = RE( stage_wrapper(baseline_wrapper(count(primary_dets), baseline_dets), baseline_dets)) db.reg.register_handler('NPY_SEQ', sim.NumpySeqHandler) h = db[uid] list(h.documents(stream_name=ALL, fill=False)) list(h.documents(stream_name=ALL, fill=True))
def test_config_data(db, RE, hw): # simple case: one Event Descriptor, one stream RE.subscribe(db.insert) from ophyd import Device, sim, Component as C class SynWithConfig(Device): x = C(sim.Signal, value=0) y = C(sim.Signal, value=2) z = C(sim.Signal, value=3) det = SynWithConfig(name='det') det.x.name = 'x' det.y.name = 'y' det.z.name = 'z' det.read_attrs = ['x'] det.configuration_attrs = ['y', 'z'] uid, = get_uids(RE(count([det]))) h = db[uid] actual = h.config_data('det') expected = {'primary': [{'y': 2, 'z': 3}]} assert actual == expected # generate two Event Descriptors in the primary stream @run_decorator() def plan(): # working around 'yield from' here which breaks py2 for msg in configure(det, {'z': 3}): # no-op yield msg for msg in trigger_and_read([det]): yield msg # changing the config after a read generates a new Event Descriptor for msg in configure(det, {'z': 4}): yield msg for msg in trigger_and_read([det]): yield msg uid, = get_uids(RE(plan())) h = db[uid] actual = h.config_data('det') expected = {'primary': [{'y': 2, 'z': 3}, {'y': 2, 'z': 4}]} assert actual == expected # generate two streams, primary and baseline -- one Event Descriptor each uid, = get_uids(RE(baseline_wrapper(count([det]), [det]))) h = db[uid] actual = h.config_data('det') expected = {'primary': [{'y': 2, 'z': 4}], 'baseline': [{'y': 2, 'z': 4}]} assert actual == expected
def test_colliding_streams(RE, hw): collector = {'primary': [], 'baseline': []} descs = {} def local_cb(name, doc): if name == 'descriptor': descs[doc['uid']] = doc['name'] elif name == 'event': collector[descs[doc['descriptor']]].append(doc) RE( baseline_wrapper( grid_scan([hw.motor], hw.motor, -1, 1, 5, hw.motor1, -5, 5, 7, True), [hw.motor, hw.motor1]), local_cb) assert len(collector['primary']) == 35 assert len(collector['baseline']) == 2 assert list(range(1, 36)) == [e['seq_num'] for e in collector['primary']] assert list(range(1, 3)) == [e['seq_num'] for e in collector['baseline']]
def test_colliding_streams(RE, hw): collector = {'primary': [], 'baseline': []} descs = {} def local_cb(name, doc): if name == 'descriptor': descs[doc['uid']] = doc['name'] elif name == 'event': collector[descs[doc['descriptor']]].append(doc) RE(baseline_wrapper(grid_scan([hw.motor], hw.motor, -1, 1, 5, hw.motor1, -5, 5, 7, True), [hw.motor, hw.motor1]), local_cb) assert len(collector['primary']) == 35 assert len(collector['baseline']) == 2 assert list(range(1, 36)) == [e['seq_num'] for e in collector['primary']] assert list(range(1, 3)) == [e['seq_num'] for e in collector['baseline']]