High-level control software for the NOTT instrument: a PyQt5 desktop application that talks to instrument hardware over OPC UA, logs telemetry to Redis, and provides subsystems for delay lines, shutters, tip/tilt, and the science camera.
- Main dashboard for launching instrument sub-windows and monitoring status
- Delay lines motor control and saved position presets (Redis)
- Shutters and tip/tilt interfaces
- Camera UI (Infratec / acquisition pipeline, ROI tools, pyqtgraph)
- OPC UA client (
asyncua) and optional Redis time series for temperatures, positions, and camera metadata
- Python 3.10+
- Network access to the configured OPC UA server and (if used) Redis
Core dependencies are listed in pyproject.toml (PyQt5, asyncua, numpy, scipy, OpenCV, redis, pyzmq, sympy, matplotlib, pyqtgraph).
Some code paths use additional packages that are not declared in pyproject.toml today, for example Astropy (nottcontrol/config.py, alignment / lucid utilities), pyserial (piezo hardware), scikit-learn (calibration scripts), or lmfit (lucid utilities). Install these only if you use those modules.
From the repository root:
pip install .For day-to-day work on a checkout (editable install, picks up code changes without reinstalling):
pip install -e .Run the application from an environment where the package is installed. The entry script changes the working directory to the nottcontrol package folder so that config.ini and .ui files are found next to nottcontrol/main.py.
Edit nottcontrol/config.ini for your site:
[DEFAULT]opcuaaddress,databaseurl(Redis), frame directories- Sections for delay lines, piezo/tip-tilt, camera, and other subsystems
Alignment and script helpers may read additional config under nottcontrol/script/ and nottcontrol/lucid/cfg/ depending on the feature you use.
After installation:
python -m nottcontrol.mainAlternatively, from the nottcontrol directory (so relative paths resolve as in development):
cd nottcontrol
python main.pyThe main window expects a reachable OPC UA server at startup.
Visible-camera / Arena-based tooling (for example in nottcontrol/lucid/) expects the vendor Arena Python package. Install it separately from Lucid’s distribution hub:
https://thinklucid.com/downloads-hub/
If Arena is not installed, avoid importing or running modules that require arena_api until the SDK is available.
| Path | Role |
|---|---|
nottcontrol/main.py |
Application entry |
nottcontrol/scifygui.py |
Main window and subsystem dialogs |
nottcontrol/components/ |
Motors, shutters, piezo, OPC UA helpers |
nottcontrol/camera/ |
Camera UI and drivers |
nottcontrol/commands/ |
Motor / camera command abstractions |
nottcontrol/script/ |
Acquisition, calibration, cophasing scripts and libraries |
Use branches and pull requests against the upstream repository. Keep config.ini free of site-specific secrets when committing; prefer local overrides or environment-specific copies where appropriate.