1
1
"""Muon scan that uses two DAEs to scan a magnet."""
2
2
3
3
from collections .abc import Generator
4
+ from pathlib import Path
4
5
5
6
import bluesky .plans as bp
6
7
import matplotlib .pyplot as plt
7
8
from bluesky .callbacks import LiveFitPlot , LiveTable
8
9
from bluesky .preprocessors import subs_decorator
9
10
from bluesky .utils import Msg
10
11
from ibex_bluesky_core .callbacks import LiveFitLogger
12
+ from ibex_bluesky_core .plans import set_num_periods
11
13
from ophyd_async .plan_stubs import ensure_connected
12
14
13
15
from ibex_bluesky_core .callbacks .fitting import LiveFit
17
19
from ibex_bluesky_core .devices .simpledae import SimpleDae
18
20
from ibex_bluesky_core .devices .simpledae .controllers import (
19
21
RunPerPointController ,
22
+ PeriodPerPointController ,
20
23
)
21
24
from ibex_bluesky_core .devices .simpledae .reducers import (
22
25
PeriodGoodFramesNormalizer ,
23
26
)
24
- from ibex_bluesky_core .devices .simpledae .waiters import GoodFramesWaiter
27
+ from ibex_bluesky_core .devices .simpledae .waiters import GoodFramesWaiter , PeriodGoodFramesWaiter
25
28
from ibex_bluesky_core .plan_stubs import call_qt_aware
26
29
27
30
from ibex_bluesky_core .callbacks .file_logger import HumanReadableFileCallback
@@ -41,7 +44,7 @@ def two_dae_scan(
41
44
magnet_settle_time = 1 ,
42
45
dae_1_prefix = "IN:ARGUS:" ,
43
46
dae_2_prefix = "IN:CHRONUS:" ,
44
- spectra_total_1 = 96 ,
47
+ spectra_total_1 = 192 ,
45
48
spectra_total_2 = 32 ,
46
49
) -> Generator [Msg , None , None ]:
47
50
"""Scan a block using two DAEs and two magnets."""
@@ -65,8 +68,8 @@ def check_within_tolerance(setpoint: float, actual: float) -> bool:
65
68
),
66
69
)
67
70
68
- controller_1 = RunPerPointController (save_run = save_run )
69
- waiter_1 = GoodFramesWaiter (frames )
71
+ controller_1 = PeriodPerPointController (save_run = save_run )
72
+ waiter_1 = PeriodGoodFramesWaiter (frames )
70
73
reducer_1 = PeriodGoodFramesNormalizer (
71
74
prefix = dae_1_prefix ,
72
75
detector_spectra = [i for i in range (1 , spectra_total_1 + 1 )],
@@ -80,8 +83,8 @@ def check_within_tolerance(setpoint: float, actual: float) -> bool:
80
83
name = "dae_1" ,
81
84
)
82
85
83
- controller_2 = RunPerPointController (save_run = save_run )
84
- waiter_2 = GoodFramesWaiter (frames )
86
+ controller_2 = PeriodPerPointController (save_run = save_run )
87
+ waiter_2 = PeriodGoodFramesWaiter (frames )
85
88
reducer_2 = PeriodGoodFramesNormalizer (
86
89
prefix = dae_2_prefix ,
87
90
detector_spectra = [i for i in range (1 , spectra_total_2 + 1 )],
@@ -112,6 +115,9 @@ def check_within_tolerance(setpoint: float, actual: float) -> bool:
112
115
113
116
yield from ensure_connected (magnet_1 , magnet_2 , dae_1 , dae_2 , force_reconnect = True )
114
117
118
+ yield from set_num_periods (dae_1 , num )
119
+ yield from set_num_periods (dae_2 , num )
120
+
115
121
@subs_decorator (
116
122
[
117
123
LiveFitPlot (livefit = lf_1 , ax = ax ),
@@ -122,6 +128,7 @@ def check_within_tolerance(setpoint: float, actual: float) -> bool:
122
128
marker = "x" ,
123
129
linestyle = "none" ,
124
130
ax = ax ,
131
+ legend_keys = ["argus" ],
125
132
yerr = reducer_1 .intensity_stddev .name ,
126
133
),
127
134
LivePlot (
@@ -130,57 +137,57 @@ def check_within_tolerance(setpoint: float, actual: float) -> bool:
130
137
marker = "x" ,
131
138
linestyle = "none" ,
132
139
ax = ax ,
140
+ legend_keys = ["chronus" ],
133
141
yerr = reducer_2 .intensity_stddev .name ,
134
142
),
135
143
LiveTable (
136
144
[
137
145
magnet_1 .name ,
138
146
magnet_2 .name ,
139
- controller_1 .run_number .name ,
140
147
reducer_1 .intensity .name ,
141
148
reducer_1 .intensity_stddev .name ,
142
- reducer_1 .det_counts .name ,
143
- reducer_1 .det_counts_stddev .name ,
144
- dae_1 .good_frames .name ,
145
- controller_2 .run_number .name ,
146
149
reducer_2 .intensity .name ,
147
150
reducer_2 .intensity_stddev .name ,
148
- reducer_2 .det_counts .name ,
149
- reducer_2 .det_counts_stddev .name ,
150
- dae_2 .good_frames .name ,
151
151
]
152
152
),
153
153
HumanReadableFileCallback (
154
154
fields = [
155
155
magnet_1 .name ,
156
156
magnet_2 .name ,
157
- controller_1 .run_number .name ,
158
157
reducer_1 .intensity .name ,
159
158
reducer_1 .intensity_stddev .name ,
160
- reducer_1 .det_counts .name ,
161
- reducer_1 .det_counts_stddev .name ,
162
- dae_1 .good_frames .name ,
163
- controller_2 .run_number .name ,
164
159
reducer_2 .intensity .name ,
165
160
reducer_2 .intensity_stddev .name ,
166
- reducer_2 .det_counts .name ,
167
- reducer_2 .det_counts_stddev .name ,
168
- dae_2 .good_frames .name ,
169
- ]
161
+ ],
162
+ output_dir = Path ("//isis.cclrc.ac.uk/inst$" )
163
+ / "NDXARGUS"
164
+ / "user"
165
+ / "TEST"
166
+ / "scans" ,
170
167
),
171
168
LiveFitLogger (
172
169
lf_1 ,
173
170
x = magnet_1 .name ,
174
171
y = reducer_1 .intensity .name ,
175
172
yerr = reducer_1 .intensity_stddev .name ,
176
173
postfix = "lf_1" ,
174
+ output_dir = Path ("//isis.cclrc.ac.uk/inst$" )
175
+ / "NDXARGUS"
176
+ / "user"
177
+ / "TEST"
178
+ / "scans" ,
177
179
),
178
180
LiveFitLogger (
179
181
lf_2 ,
180
182
x = magnet_1 .name ,
181
183
y = reducer_2 .intensity .name ,
182
184
yerr = reducer_2 .intensity_stddev .name ,
183
185
postfix = "lf_2" ,
186
+ output_dir = Path ("//isis.cclrc.ac.uk/inst$" )
187
+ / "NDXARGUS"
188
+ / "user"
189
+ / "TEST"
190
+ / "scans" ,
184
191
),
185
192
]
186
193
)
0 commit comments