Source code for qibocal.cli.acquisition
import datetime
import json
from dataclasses import asdict
import yaml
from qibolab.serialize import dump_platform
from ..auto.execute import Executor
from ..auto.history import add_timings_to_meta
from ..auto.mode import ExecutionMode
from .utils import META, PLATFORM, RUNCARD, generate_meta, generate_output_folder
[docs]def acquire(runcard, folder, force):
"""Data acquisition
Arguments:
- RUNCARD: runcard with declarative inputs.
"""
# rename for brevity
backend = runcard.backend_obj
platform = runcard.platform_obj
# generate output folder
path = generate_output_folder(folder, force)
# generate meta
meta = generate_meta(backend, platform, path)
# dump platform
if backend.name == "qibolab":
(path / PLATFORM).mkdir(parents=True, exist_ok=True)
dump_platform(platform, path / PLATFORM)
# dump action runcard
(path / RUNCARD).write_text(yaml.safe_dump(asdict(runcard)))
# dump meta
(path / META).write_text(json.dumps(meta, indent=4))
executor = Executor.load(runcard, path, platform, runcard.targets)
# connect and initialize platform
if platform is not None:
platform.connect()
# run protocols
list(executor.run(mode=ExecutionMode.acquire))
e = datetime.datetime.now(datetime.timezone.utc)
meta["end-time"] = e.strftime("%H:%M:%S")
# stop and disconnect platform
if platform is not None:
platform.disconnect()
# dump updated meta
meta = add_timings_to_meta(meta, executor.history)
(path / META).write_text(json.dumps(meta, indent=4))