Getting Started =============== Installation ------------ Install secop-ophyd using pip: .. code-block:: bash pip install secop-ophyd For development, clone the repository and install with development dependencies: .. code-block:: bash git clone https://github.com/SampleEnvironment/secop-ophyd.git cd secop-ophyd pip install -e ".[dev]" Prerequisites ------------- SECoP-Ophyd integrates SECoP (Sample Environment Communication Protocol) devices with the Bluesky experiment orchestration framework. Before using this package, you should have: - A SECoP node (hardware device or simulation) accessible over the network - Basic familiarity with `Bluesky `_ and `Ophyd-async `_ - Python 3.10 or later Quick Start ----------- Here's a minimal example to get you started: .. code-block:: python from bluesky import RunEngine from ophyd_async.core import init_devices from secop_ophyd.SECoPDevices import SECoPNodeDevice # Create a run engine RE = RunEngine({}) # Connect to a SECoP node at localhost:10800 with init_devices(): node = SECoPNodeDevice('localhost:10800') # The device tree is now automatically built from the node description Key Concepts ------------ SECoP Nodes and Modules ~~~~~~~~~~~~~~~~~~~~~~~ A **SECoP node** represents a complete hardware device or service. Each node contains one or more **modules**, which are individual functional units (e.g., a temperature controller, a pressure sensor). SECoPNodeDevice ~~~~~~~~~~~~~~~ The :class:`~secop_ophyd.SECoPDevices.SECoPNodeDevice` class is the main entry point for creating ophyd-async devices from SECoP nodes. It: - Connects to a SECoP node via IP address and port - Automatically builds the device tree from the node's description - Creates ophyd-async signals and devices for all parameters and modules - Exposes SECoP commands as Bluesky plan methods Dynamic Device Generation ~~~~~~~~~~~~~~~~~~~~~~~~~~ Unlike most other ophyd devices that must be statically declared, SECoP-Ophyd devices are **dynamically generated** at connection time. This means: - No manual device class definition is needed - The device structure matches the structure defined in the SEC node - Changes to the SECoP node are automatically reflected However, for better development experience with type hints and autocompletion, you can generate static class files (see :doc:`tutorial`). Next Steps ---------- - Follow the :doc:`tutorial` for a complete walkthrough - Read the :doc:`user_guide` for detailed usage patterns - Check the :doc:`reference` for API documentation