33from typing import Generator
44
55import bluesky .plan_stubs as bps
6+ import bluesky .plans as bp
67import matplotlib
78import matplotlib .pyplot as plt
89from bluesky .callbacks import LiveTable
9- from bluesky .preprocessors import run_decorator , subs_decorator
10+ from bluesky .preprocessors import subs_decorator
1011from bluesky .utils import Msg
1112from ophyd_async .plan_stubs import ensure_connected
1213
1314from ibex_bluesky_core .callbacks .plotting import LivePlot
1415from ibex_bluesky_core .devices import get_pv_prefix
1516from ibex_bluesky_core .devices .block import block_rw_rbv
16- from ibex_bluesky_core .devices .dae .dae import Dae
17+ from ibex_bluesky_core .devices .simpledae import SimpleDae
18+ from ibex_bluesky_core .devices .simpledae .controllers import (
19+ RunPerPointController ,
20+ )
21+ from ibex_bluesky_core .devices .simpledae .reducers import (
22+ GoodFramesNormalizer ,
23+ )
24+ from ibex_bluesky_core .devices .simpledae .waiters import GoodFramesWaiter
1725from ibex_bluesky_core .run_engine import get_run_engine
1826
1927__all__ = ["demo_plan" ]
@@ -23,27 +31,45 @@ def demo_plan() -> Generator[Msg, None, None]:
2331 """Demonstration plan which moves a block and reads the DAE."""
2432 prefix = get_pv_prefix ()
2533 block = block_rw_rbv (float , "mot" )
26- dae = Dae (prefix )
34+
35+ controller = RunPerPointController (save_run = True )
36+ waiter = GoodFramesWaiter (500 )
37+ reducer = GoodFramesNormalizer (
38+ prefix = prefix ,
39+ detector_spectra = [i for i in range (1 , 100 )],
40+ )
41+
42+ dae = SimpleDae (
43+ prefix = prefix ,
44+ controller = controller ,
45+ waiter = waiter ,
46+ reducer = reducer ,
47+ )
48+
49+ # Demo giving some signals more user-friendly names
50+ controller .run_number .set_name ("run number" )
51+ reducer .intensity .set_name ("normalized counts" )
2752
2853 yield from ensure_connected (block , dae , force_reconnect = True )
2954
3055 @subs_decorator (
3156 [
32- LivePlot (y = "DAE-good_uah" , x = block .name , marker = "x" , linestyle = "none" ),
33- LiveTable ([block .name , "DAE-good_uah" ]),
57+ LivePlot (y = reducer .intensity .name , x = block .name , marker = "x" , linestyle = "none" ),
58+ LiveTable (
59+ [
60+ block .name ,
61+ controller .run_number .name ,
62+ reducer .intensity .name ,
63+ reducer .det_counts .name ,
64+ dae .good_frames .name ,
65+ ]
66+ ),
3467 ]
3568 )
36- @run_decorator (md = {})
3769 def _inner () -> Generator [Msg , None , None ]:
38- # Acquisition showing arbitrary DAE control to support complex use-cases.
39- yield from bps .abs_set (block , 2.0 , wait = True )
40- yield from bps .trigger (dae .controls .begin_run , wait = True )
41- yield from bps .sleep (5 ) # ... some complicated logic ...
42- yield from bps .trigger (dae .controls .end_run , wait = True )
43- yield from bps .create () # Create a bundle of readings
44- yield from bps .read (block )
45- yield from bps .read (dae .good_uah )
46- yield from bps .save ()
70+ num_points = 20
71+ yield from bps .mv (dae .number_of_periods , num_points )
72+ yield from bp .scan ([dae ], block , 0 , 10 , num = num_points )
4773
4874 yield from _inner ()
4975
0 commit comments