'horiba-sdk' is a package that provides source code for the development with Horiba devices
Project description
HORIBA Python SDK
⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️
[!WARNING]
This SDK is under development and not yet released.
[!IMPORTANT]
For this python code to work, the SDK from Horiba has to be purchased, installed and licensed. The code in this repo and the SDK are under development and not yet released for public use!
⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️
📦 About this repository
horiba-sdk is a package that provides source code for the development of custom applications that include interaction with Horiba devices, namely monochromators and multichannel detectors (e.g. CCD cameras).
Future versions of this package will include access to more devices. The SDK exists for several programming languages:
☑️ Prerequisites
To use this package, the following conditions must be met:
-
Python
>=3.9is installed -
ICL.exe installed as part of the
Horiba SDK, licensed and activated. The Horiba SDK can be purchased by contacting the Horiba Support and sending a message to theScientificbusiness segment, specifyingno divisionand selecting thesalesdepartment -
To make sure that the USB devices do not get disconnected, uncheck the following boxes in the properties
🛠️ Getting Started
Video of the steps below
-
(Optional but recommended) Work in a virtual environment:
Navigate to the (empty) project folder you want to work and run:
python -m venv .
Activate the virtual environment:
Windows
.\Scripts\activate
Unix
source ./bin/activate
Note: do deactivate it, simply run
deactivate. -
Install the sdk:
pip install horiba-sdk
or install with
Poetrypoetry add horiba-sdk
-
Create a file named
center_scan.pyand copy-paste the content ofexamples/asynchronous_examples/center_scan.py -
Install the required library for plotting the graph in the example:
pip install matplotlib
or install with
Poetrypoetry add matplotlib
-
Run the example with:
python center_scan.py
🔗 Examples
Getting Started
The files in the folder examples/asynchronous_examples/ can be used as a starting point for a custom application.
Tests
The files in the folder tests/test_single_devices can be used to explore further functionality.
Asynchronous vs Synchronous Examples
This SDK is based on Websocket communication. The nature of this communication is asynchronous by its design.
The way this SDK uses websockets is to send requests to the underlying instrument control layer (ICL) and get a (nearly immediate) reply back.
This is true even for commands that longer to execute, e.g. to move the mono or to acquire data from the CCD. The way this is handled is by sending an acknowledgement back that the command is received and being processed. The user has then to inquire if mono_isBusy to see when the hardware is free to receive the next command.
That means that every async function can be awaited immediately and handled just like any other function.
To learn more about async and await, check out this introduction or take a deeper dive here.
🏗️ Architecture
The functionality is distributed over two parts, the instrument control layer (ICL) and the github source code. This split is shown in the following image:
The ICL itself is sold and distributed by Horiba. The source code to communicate with the ICL and drive the instruments is located in this repo for Python, but can be also found for C#, C++ and LabVIEW as described above.
The communication between SDK and ICL is websocket based. I.e. in essence the ICL is steered by a command and control pattern where commands and their replies are JSON commands.
👩💻 First steps as contributor
Clone and set up the repo
- Clone the repo:
git clone https://github.com/HORIBAEzSpecSDK/horiba-python-sdk.git
cd horiba-python-sdk
- If you don't have
Poetryinstalled run:
make poetry-download
- Initialize poetry and install
pre-commithooks:
make install
make pre-commit-install
- Run the codestyle:
make codestyle
- To push local changes to the remote repository, run:
git add .
git commit -m "feat: add new feature xyz"
git push
Poetry
Want to know more about Poetry? Check its documentation.
Details about Poetry
Poetry's commands are very intuitive and easy to learn, like:
poetry add numpy@latestpoetry run pytestpoetry publish --build
etc
Building and releasing your package
Building a new version of the application contains steps:
-
Bump the version of your package
poetry version <version>. You can pass the new version explicitly, or a rule such asmajor,minor, orpatch. For more details, refer to the Semantic Versions standard. -
Update the
CHANGELOG.mdwithgit-changelog -B auto -Tio CHANGELOG.md -
Make a commit to
GitHub. -
Create a tag and push it. The release is automatically triggered on tag push:
git tag vX.Y.Z # where the version MUST match the one you indicated before git push --tags
Makefile usage
Makefile contains a lot of functions for faster development.
1. Installation of Poetry
To download and install Poetry run:
make poetry-download
To uninstall
make poetry-remove
2. Install all dependencies and pre-commit hooks
Install requirements:
make install
Pre-commit hooks could be installed after git init via
make pre-commit-install
3. Codestyle
Automatic formatting uses pyupgrade, isort and black.
make codestyle
# or use synonym
make formatting
Codestyle checks only, without rewriting files:
make check-codestyle
Note:
check-codestyleusesisort,blackanddarglintlibrary
Update all dev libraries to the latest version using one comand
make update-dev-deps
4. Code security
make check-safety
This command launches Poetry integrity checks as well as identifies security issues with Safety and Bandit.
make check-safety
5. Type checks
Run mypy static type checker
make mypy
6. Tests with coverage badges
Run pytest
Unix:
make test
Windows:
poetry run pytest -c pyproject.toml --cov-report=html --cov=horiba_sdk tests/
For the hardware tests run the following:
Windows:
$env:HAS_HARDWARE="true"
# If you want a remote ICL be used for the tests
# $env:TEST_ICL_IP="192.168.21.24"
# $env:TEST_ICL_PORT="1234"
poetry run pytest -c pyproject.toml --cov-report=html --cov=horiba_sdk tests/
Unix:
HAS_HARDWARE="true"
# If you want a remote ICL be used for the tests
# TEST_ICL_IP="192.168.21.24"
# TEST_ICL_PORT="1234"
make test
7. All linters
Of course there is a command to rule run all linters in one:
make lint
the same as:
make test
make check-codestyle
make mypy
make check-safety
8. Docker
make docker-build
which is equivalent to:
make docker-build VERSION=latest
Remove docker image with
make docker-remove
More information about docker.
9. Cleanup
Delete pycache files
make pycache-remove
Remove package build
make build-remove
Delete .DS_STORE files
make dsstore-remove
Remove .mypycache
make mypycache-remove
Or to remove all above run:
make cleanup
📚 Documentation
The latest documentation can be found at
horiba-python-sdk.readthedocs.io.
In order to build it locally, run the following in the docs/ folder:
make html
The documentation will then be built under docs/build/html/.
Documentation is built each time a commit is pushed on main or for pull
requests. When release tags are created in the repo, readthedocs will also tag
the documentation accordingly
🛡 License
This project is licensed under the terms of the MIT license. See LICENSE for more details.
📃 Citation
@misc{horiba-python-sdk,
author = {ZühlkeEngineering},
title = {'horiba-python-sdk' is a package that provides source code for the development with Horiba devices},
year = {2023},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\url{https://github.com/HORIBAEzSpecSDK/horiba-python-sdk}}
}
Credits 
This project was generated with python-package-template
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 horiba_sdk-0.5.4.tar.gz.
File metadata
- Download URL: horiba_sdk-0.5.4.tar.gz
- Upload date:
- Size: 53.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.0.1 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2238fbecd1d6aa6f0a610f973eb429d2e57ad51d5fa7483c5b5052597219b86a
|
|
| MD5 |
baabf6b9026a4af958ed66a6419627f4
|
|
| BLAKE2b-256 |
0cf4addaa0e5f1fc7070a9e5bdc0609d659ceb1759f5b903c31d82f88347a5a4
|
Provenance
The following attestation bundles were made for horiba_sdk-0.5.4.tar.gz:
Publisher:
release-on-tag.yml on HORIBAEzSpecSDK/python-sdk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
horiba_sdk-0.5.4.tar.gz -
Subject digest:
2238fbecd1d6aa6f0a610f973eb429d2e57ad51d5fa7483c5b5052597219b86a - Sigstore transparency entry: 155187589
- Sigstore integration time:
-
Permalink:
HORIBAEzSpecSDK/python-sdk@0280ab362a416c8b696bb863dd47825d2727fdaa -
Branch / Tag:
refs/tags/v0.5.4 - Owner: https://github.com/HORIBAEzSpecSDK
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-on-tag.yml@0280ab362a416c8b696bb863dd47825d2727fdaa -
Trigger Event:
push
-
Statement type:
File details
Details for the file horiba_sdk-0.5.4-py3-none-any.whl.
File metadata
- Download URL: horiba_sdk-0.5.4-py3-none-any.whl
- Upload date:
- Size: 65.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.0.1 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ad827ab9aad33ab3dd2002c627376cc120ca7a988898e2ace3aadda9570c12bd
|
|
| MD5 |
d631b3c4c3d41f080dc7b15305228dd2
|
|
| BLAKE2b-256 |
c155574ad9b3cea182ff349177ebaf220368455f0cd88e3277cbeb9b7f891416
|
Provenance
The following attestation bundles were made for horiba_sdk-0.5.4-py3-none-any.whl:
Publisher:
release-on-tag.yml on HORIBAEzSpecSDK/python-sdk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
horiba_sdk-0.5.4-py3-none-any.whl -
Subject digest:
ad827ab9aad33ab3dd2002c627376cc120ca7a988898e2ace3aadda9570c12bd - Sigstore transparency entry: 155187591
- Sigstore integration time:
-
Permalink:
HORIBAEzSpecSDK/python-sdk@0280ab362a416c8b696bb863dd47825d2727fdaa -
Branch / Tag:
refs/tags/v0.5.4 - Owner: https://github.com/HORIBAEzSpecSDK
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-on-tag.yml@0280ab362a416c8b696bb863dd47825d2727fdaa -
Trigger Event:
push
-
Statement type: