Python API for THzDAQ laboratory instruments
Project description
thzdaqapi
Профессиональная Python-библиотека для управления лабораторными THzDAQ-устройствами.
Репозиторий содержит:
- runtime API (
src/thzdaqapi), - документацию по каждому девайсу,
- тесты,
- CI/CD,
- pre-commit конфигурацию для автопроверки и автоформатирования.
Что внутри
- Полное API-референс-описание сигнатур: docs/api-reference.md
- Подробные device guides:
Установка
Runtime
uv pip install thzdaqapi
Разработка
uv sync --extra dev
Быстрый старт (правильный порядок)
from thzdaqapi.RohdeSchwarz.vna import VNABlock
# 1) Инициализация
vna = VNABlock(host="169.254.106.189", port=5025)
# 2) Проверка связи
print(vna.idn())
assert vna.test()
# 3) Настройка
vna.set_sweep(801)
vna.set_start_frequency(2e9)
vna.set_stop_frequency(12e9)
# 4) Получение данных
payload = vna.get_data()
print(payload.keys())
Рекомендуемый шаблон для любого девайса:
- Создать экземпляр класса с правильными
host/port/gpib/adapter. - Выполнить
idn()и/илиtest(). - Применить
set_*параметры. - Считать
get_*/measure_*/fetch(). - Явно закрыть соединение (
close()/disconnect()), если метод доступен.
Архитектура и адаптеры
Транспортный слой
Большинство устройств работают через базовый инструментальный слой и адаптеры из thzdaqapi.adapters.
Поддерживаемые типы адаптеров в thzdaqapi.settings:
SOCKETSOCKET_SINGLEPROLOGIX_ETHERNETPROLOGIX_USBHTTPSERIAL
Сопоставление тип -> класс задаётся в ADAPTERS.
Конфигурация
- Общие константы/транспорты:
thzdaqapi.settings - Дефолты IP/портов задаются прямо в
__init__конкретных классов устройств - Параметры Pfeiffer:
thzdaqapi.Pfeiffer.parameters(PFEIFFER_PARAMETERS)
Инициализация устройств: что важно
1) Проверяйте параметры подключения
host: IP прибора или Prologix.port: TCP-порт прибора (или COM-порт для serial-классов).gpib: адрес прибора на GPIB-шине (если нужен).adapter: транспорт (SOCKET,PROLOGIX_ETHERNET,HTTPи т.д.).
2) Запускайте в безопасной последовательности
Для источников/генераторов:
- Отключённый output.
- Установка диапазонов/лимитов.
- Установка целевых значений.
- Включение output.
3) Всегда валидируйте ответ
- Для методов, возвращающих числа/словарь, проверяйте диапазон и тип.
- Для сетевых/serial нестабильностей используйте retry-логику уровня сценария.
Паттерны работы с методами
Группа set_*
- Изменяют состояние прибора.
- Часто не возвращают значение (
None) или возвращают сырую строку статуса.
Группа get_*
- Возвращают текущее значение с устройства.
- Тип зависит от конкретного метода (
float,int,str,dict,tuple).
Группа measure_* / fetch()
- Возвращают результат измерения.
- Для плавающих интерфейсов рекомендуется повторная валидация значения.
Очень важные best practices
- Не делайте резких шагов напряжения/тока/мощности.
- На старте работайте с минимальными уровнями.
- Для моторов/чоппера сначала проверяйте нулевую/опорную позицию (
set_origin(),align*()). - Для vacuum/pump устройств учитывайте задержки между командами.
- Логируйте все команды в критических экспериментах.
Подробные документы по девайсам
Каждый файл в docs/devices/*.md включает:
- сигнатуру
__init__, - параметры и defaults,
- таблицу публичных методов,
- сценарий эксплуатации,
- рабочие примеры,
- рекомендации по диагностике.
Если нужна вся поверхность API в одном месте — используйте docs/api-reference.md.
Типизация и IDE-подсказки
Типы указаны прямо в исходниках (.py) — без *.pyi.
Это означает:
- IDE автодополнение читает фактические сигнатуры из runtime-кода,
- меньше риска рассинхрона между реализацией и документацией,
- легче поддерживать при рефакторинге.
Локальная проверка качества
uv sync --extra dev
uv run ruff check src tests
uv run ruff format src tests
uv run pytest -q
Pre-commit (автоформат и проверки перед commit)
uv sync --extra dev
uv run pre-commit install
uv run pre-commit run --all-files
Что запускается:
check-merge-conflictend-of-file-fixertrailing-whitespacecheck-yamlcheck-tomlruff --fixruff format
CI/CD
Workflow-файлы:
.github/workflows/ci.yml— линт + тесты на push/PR.github/workflows/publish-pypi.yml— публикация в PyPI (release/manual)
Публикация в PyPI
Рекомендуемый сценарий:
- Настроить Trusted Publishing (OIDC) в PyPI.
- Создать GitHub Release.
- Workflow соберёт и опубликует пакет.
Альтернатива: токен через PYPI_API_TOKEN (секрет репозитория).
Частые проблемы и решения
Прибор не отвечает
- Проверьте кабель/порт/IP.
- Проверьте, что порт не занят другим процессом.
- Проверьте firewall и маршрутизацию.
Ответ парсится с ошибкой
- Убедитесь, что модель прибора совпадает с драйвером.
- Проверьте версию прошивки.
- Снимите сырые ответы и сравните с ожидаемым форматом.
Нестабильные измерения
- Увеличьте таймауты/паузы.
- Добавьте повторные запросы и медиану по нескольким чтениям.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file thzdaqapi-0.1.0.tar.gz.
File metadata
- Download URL: thzdaqapi-0.1.0.tar.gz
- Upload date:
- Size: 55.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
697ce3093a2e57ad5a8e02397048e8b65e6d0c8dbcf7ba6051227d9755117fff
|
|
| MD5 |
404c2cfed05f9ceb01a394efa0b3ed54
|
|
| BLAKE2b-256 |
ea4ef18c28d947e94c4474661ad6cb22bdde79d911788893ced62a2ec1647839
|
File details
Details for the file thzdaqapi-0.1.0-py3-none-any.whl.
File metadata
- Download URL: thzdaqapi-0.1.0-py3-none-any.whl
- Upload date:
- Size: 62.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f938254dfd1e565a661a80beea96e0d2ef2441a0e15266b4c3fb1f8323a05cc0
|
|
| MD5 |
9fd712360691a203fd2d6a8f1b979a8e
|
|
| BLAKE2b-256 |
7f5db1d62185b9e20c04432a539630bb8e2683b51118c738f597c918b4e7ae25
|