diff --git a/slic/core/acquisition/sfacquisition.py b/slic/core/acquisition/sfacquisition.py index 1fec170d..22d4a732 100644 --- a/slic/core/acquisition/sfacquisition.py +++ b/slic/core/acquisition/sfacquisition.py @@ -12,7 +12,7 @@ from .broker_client import BrokerClient class SFAcquisition(BaseAcquisition): - def __init__(self, instrument, pgroup, default_channels=None, api_address="http://sf-daq-1:10002", rate_multiplicator=1): + def __init__(self, instrument, pgroup, default_detectors=None, default_channels=None, default_pvs=None, api_address="http://sf-daq-1:10002", rate_multiplicator=1): self.instrument = instrument self.pgroup = pgroup @@ -22,27 +22,38 @@ class SFAcquisition(BaseAcquisition): default_channel_list = self.paths.default_channel_list default_channels = Channels(default_channel_list) + self.default_detectors = default_detectors self.default_channels = default_channels + self.default_pvs = default_pvs + self.api_address = api_address self.client = BrokerClient(pgroup, address=api_address, rate_multiplicator=rate_multiplicator, client_name="slic") self.current_task = None - def acquire(self, filename, channels=None, n_pulses=100, wait=True): + def acquire(self, filename, detectors=None, channels=None, pvs=None, scan_info=None, n_pulses=100, wait=True): if not filename or filename == "/dev/null": print("Skipping retrieval since no filename was given.") return + if not detectors: + print("No detectors specified, using default detector list.") + detectors = self.default_detectors + if not channels: print("No channels specified, using default channel list.") channels = self.default_channels + if not pvs: + print("No PVs specified, using default PV list.") + pvs = self.default_pvs + client = self.client - client.set_config(n_pulses, filename, channels=channels) + client.set_config(n_pulses, filename, detectors=detectors, channels=channels, pvs=pvs, scan_info=scan_info) def _acquire(): - run_number = self.client.start() + run_number = client.start() printable_run_number = str(run_number).zfill(6) filename_pattern = self.paths.raw / filename / f"run_{printable_run_number}.*.h5" filename_pattern = str(filename_pattern) # json cannot serialize pathlib paths diff --git a/slic/core/scanner/scanbackend.py b/slic/core/scanner/scanbackend.py index bfb20dfb..c5b934e2 100644 --- a/slic/core/scanner/scanbackend.py +++ b/slic/core/scanner/scanbackend.py @@ -9,16 +9,21 @@ from .scaninfo import ScanInfo class ScanBackend: - def __init__(self, adjustables, values, acquisitions, filename, channels, n_pulses, data_base_dir, scan_info_dir, make_scan_sub_dir, condition): + def __init__(self, adjustables, values, acquisitions, filename, detectors, channels, pvs, n_pulses, data_base_dir, scan_info_dir, make_scan_sub_dir, condition): self.adjustables = adjustables self.values = values self.acquisitions = acquisitions self.filename = filename + + self.detectors = detectors #TODO: only for sf_daq (see also in arguments) self.channels = channels + self.pvs = pvs #TODO: only for sf_daq (see also in arguments) + self.n_pulses_per_step = n_pulses #TODO: to rename or not to rename? self.data_base_dir = data_base_dir - self.scan_info = ScanInfo(filename, scan_info_dir, adjustables, values) + self.scan_info = ScanInfo(filename, scan_info_dir, adjustables, values) + self.scan_info_sfdaq = ScanInfo(filename, scan_info_dir, adjustables, values) self.make_scan_sub_dir = make_scan_sub_dir self.condition = condition @@ -72,6 +77,9 @@ class ScanBackend: step_readbacks = get_all_current_values(self.adjustables) print("Moved adjustables, starting acquisition") +#TODO: sf_daq needs scan info in advance, filenames are not needed + self.scan_info_sfdaq.append(step_values, step_readbacks, None, step_info) + fn = self.get_filename(n_step) step_filenames = self.acquire_all(fn) print("Acquisition done") @@ -112,7 +120,10 @@ class ScanBackend: def acquire_all(self, filename): tasks = [] for acq in self.acquisitions: - t = acq.acquire(filename=filename, channels=self.channels, n_pulses=self.n_pulses_per_step, wait=False) +#TODO: sf_daq expects scan info in advance, and detectors/bs-channels/PVs separated + scan_info = self.scan_info_sfdaq.to_sfdaq_dict() + t = acq.acquire(filename, detectors=self.detectors, channels=self.channels, pvs=self.pvs, scan_info=scan_info, n_pulses=self.n_pulses_per_step, wait=False) +# t = acq.acquire(filename=filename, channels=self.channels, n_pulses=self.n_pulses_per_step, wait=False) tasks.append(t) self.current_tasks = tasks diff --git a/slic/core/scanner/scanner.py b/slic/core/scanner/scanner.py index de88b5a9..17adfea9 100644 --- a/slic/core/scanner/scanner.py +++ b/slic/core/scanner/scanner.py @@ -38,7 +38,8 @@ class Scanner: self.current_scan = None - def make_scan(self, adjustables, positions, n_pulses, filename, channels=None, acquisitions=(), start_immediately=True, step_info=None): +#TODO: detectors and pvs only for sf_daq + def make_scan(self, adjustables, positions, n_pulses, filename, detectors=None, channels=None, pvs=None, acquisitions=(), start_immediately=True, step_info=None): """N-dimensional scan Parameters: @@ -53,13 +54,14 @@ class Scanner: Returns: ScanBackend: Scan instance. """ - #TODO: sf_daq counts runs +#TODO: sf_daq counts runs # filename = self.filename_generator.get_next_run_filename(filename) if not acquisitions: acquisitions = self.default_acquisitions - scan = ScanBackend(adjustables, positions, acquisitions, filename, channels, n_pulses=n_pulses, data_base_dir=self.data_base_dir, scan_info_dir=self.scan_info_dir, make_scan_sub_dir=self.make_scan_sub_dir, condition=self.condition) +#TODO: detectors and pvs only for sf_daq + scan = ScanBackend(adjustables, positions, acquisitions, filename, detectors, channels, pvs, n_pulses=n_pulses, data_base_dir=self.data_base_dir, scan_info_dir=self.scan_info_dir, make_scan_sub_dir=self.make_scan_sub_dir, condition=self.condition) if start_immediately: scan.run(step_info=step_info)