Source code for ophyd_async.epics.demo._ioc
import atexit
from pathlib import Path
from ophyd_async.epics.testing import TestingIOC
HERE = Path(__file__).absolute().parent
[docs]
def start_ioc_subprocess(prefix: str, num_channels: int) -> TestingIOC:
"""Start an IOC subprocess for sample stage and sensor.
:param prefix: The prefix for the IOC PVs.
:param num_channels: The number of point detector channels to create.
"""
ioc = TestingIOC()
# Create X and Y motors
for suffix in ["X", "Y"]:
ioc.add_database(HERE / "motor.db", P=f"{prefix}STAGE:{suffix}:")
# Create a multichannel counter with num_counters
ioc.add_database(HERE / "point_detector.db", P=f"{prefix}DET:")
for i in range(1, num_channels + 1):
ioc.add_database(
HERE / "point_detector_channel.db",
P=f"{prefix}DET:",
CHANNEL=str(i),
X=f"{prefix}STAGE:X:",
Y=f"{prefix}STAGE:Y:",
)
# Start IOC and register it to be stopped at exit
ioc.start()
atexit.register(ioc.stop)
return ioc