Core scan features¶
Pausing, resuming, & early termination¶
By default, a scan will always yield to a higher priority experiment that has been submitted to the ARTIQ master.
Scans always complete the current scan point before checking with the scheduler if they need to pause via
self.scheduler.check_pause() indicates that the scan needs to
yield to another experiment, the scan state is saved and the scan yields to the higher priority experiment.
After the higher priority experiment experiment completes, the scan will automatically resume at the scan point
following the scan point that was completed before yielding.
To disable pausing, resuming, and early termination and not incure the performance hit of
self.scheduler.check_pause() set the
enable_pausing attribute of the scan to
class MyScan(Scan1D, EnvExperiment): enable_pausing = False ...
Not all callbacks are executed when a scan resumes after yielding. See the Callbacks section for which callbacks will execute when the scan resumes.
Models should only be registered in either the
prepare() methods since these methods
will not be executed when the scan resumes. If a model is registered in another method, such as the
prepare_scan() method, it will be re-registered when the scan resumes causing it to be registered twice.
Multiple scan passes can be performed by setting the
npasses gui argument. The
dataset will reflect the current mean values across all passses so far.
Broadcast, Persist, and Save¶
By default, scan models do not broadcast or persist data to their own namespace to minimize the amount of data shown in
the dashboard. If
mirror is set to
False, there is no way of viewing the data except for using the
artiq_browser. By setting the model’s
persist attributes to
datasets will then be visible under the model’s namespace in the ‘Datasets’ panel of the dashboard.
Current Scan Namespace¶
Scan’s automatically mirror all dataset’s generated by the scan to the
current_scan namespace. The scan will write
data to the following locations:
current_scan.statsThis locations contains raw data and calculated statistical data from the scan. See the datasets section for more information.
current_scan.fitsThis location contains the line of best fit and all fitted parameters. See the datasets section for more information.
current_scan.plotsThis locaiton contains all data needed to produce plots. See the datasets section for more information.
Storing data in the
current_scan namespace can be disabled by setting the model’s
mirror attribute to
self.model.mirror = False
Scan models automatically generate a histogram of data collected at each scan point. When the model’s datasets are
mutated, the histogram is calculated by the model and saved to the
current_hist namespace. This allows a
measurement’s distribution to be viewed at each scan point as a scan runs. To view these histograms,
create the current histogram applet. Monitor histograms can be disabled by setting
self.enable_histograms = False
in the scan model.
Scan’s can be profiled to find bottlenecks in the code. This will only display execution times of code that runs on the host and not on the core device. It may be useful for finding bottlenecks in code running on the host side (such as performing fits, etc). To enable profiling set
self.enable_profiling = True
in the scan.