Precilaser
Python interface for precilaser devices
Implements a python interface using pyserial for 3 Precilaser devices:
- Precilaser Fiber DFB
- Precilaser Amplifier
- Precilaser SHG Amplifier
Installation
pip install precilaser or install directly from source.
This project is managed with uv. For development,
clone the repository and run uv sync to create a virtual environment with all
dependencies (including the test tooling), then uv run pytest to run the tests
and uv build to build the sdist/wheel.
Implemented Functionality
Precilaser Fiber DFB
status
retrieve the laser status, in a dataclass (with some of the boilerplate code removed; seestatus.pyfor more detail):@dataclass class SeedStatus: status_bytes: bytes endian: str temperature_set: float # grating temperature setpoint [C] temperature_act: float # grating temperature [C] temperature_diode: float # [C] current_set: int # [mA] current_act : int # [mA] wavelength: float # [nm] piezo_voltage: float # [V] emission: bool power: int run_hours: int run_minutes: int
temperature_setpoint
get or set the grating temperature in Cpiezo_voltage
get or set the piezo voltage, from 0 V to 5 V_get_serial_wavelength_params
retrieve the parameters required to reconstruct the wavelength from the grating temperaturewavelength
calculate the wavelength from the retrieved parameters and the grating temperature
Precilaser Amplifier
status
retrieve the amplifier status, in a dataclass (with some of the boilerplate code removed; seestatus.pyfor more detail):@dataclass class AmplifierStatus: status_bytes: bytes endian: str stable: bool system_status: SystemStatus driver_unlock: DriverUnlock driver_current: Tuple[float, ...] pd_value: Tuple[int, ...] # internal photodiode values in arb. units pd_status: Tuple[PDStatus, ...] temperatures: Tuple[float] # internal temperatures of amplifier stages etc. @dataclass class SystemStatus: status: int pd_protection: Tuple[bool, ...] temperature_protection: Tuple[bool, ...] fault: bool @dataclass class DriverUnlock: driver_unlock: int driver_enable_control: Tuple[bool, ...] driver_enable_flag: Tuple[bool, ...] interlock: bool # true if the interlock is ok @dataclass class PDStatus: status: int sampling_enable: bool hardware_protection: bool upper_limit_enabled: bool lower_limit_enabled: bool hardware_protection_event: bool upper_limit_event: bool lower_limit_event: bool fault: bool
current
get or set the amplifier current [A]enable()
enable the amplifierdisable()
disable the amplifiersave()save amplifier settings to ROMenable_power_stabilization()
enable power stabilization mode; varies the amplifier current to keep the output power constantdisable_power_stabilization()disable power stabilization mode
Precilaser Amplifier
A subclass of the Amplifier, includes all Amplifier functionality plus additionally:
shg_temperatureget or set the shg crystal temperature [C]
Example
The devices can be used directly or as a context manager; the context manager guarantees the serial port is closed when the block exits.
from precilaser import SHGAmplifier
with SHGAmplifier("COM50", address=0) as amp:
# change the SHG crystal temperature
amp.shg_temperature = 73.15
Or, without the context manager, close the port explicitly when done:
from precilaser import SHGAmplifier
amp = SHGAmplifier("COM50", address=0)
amp.shg_temperature = 73.15
amp.close()
Release files for precilaser 0.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| precilaser-0.2.1.tar.gz | 12.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| precilaser-0.2.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size:27.3 kB
Release files / precilaser-0.2.1.tar.gz
| Download URL | precilaser-0.2.1.tar.gz |
|---|---|
| Size | 12.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e820ebb3bf0a0bc2dfc29a0489f3c3e9e39bf40fc0ea170ef248fe9b02caffc0
|
|
BLAKE2b-256 checksum How to use checksums |
08ec2fc3348cd28f9983dfafc72eb53a4f5648fc182462eb685f137284d9ccc1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.
Transparency logRelease files / precilaser-0.2.1-py3-none-any.whl
| Download URL | precilaser-0.2.1-py3-none-any.whl |
|---|---|
| Size | 14.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1ec1e29aaa28e051444016a9bf7bbfb4d05632b04a3798f5a64a67fcf5009fb2
|
|
BLAKE2b-256 checksum How to use checksums |
8ff8179d88eb792489da562a983b9e7bb9c4eccccaacac99717d2a89874d71b0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.
Transparency log