Skip to main content

Python3 library for controlling Alphanov's PDM laser sources.

Project description

PyPDM

Documentation Status

Python3 library for controlling Alphanov's PDM laser sources. Currently supported PDM protocol version is from 3.4 to 3.7. Daisy-chain configuration for multiple devices is supported, so it is possible to use many PDMs with only one serial link.

What's new in 2.0

  • Explicit support for protocol 3.7: software_control_mode and control_mode_selection.
  • Minimum required Python raised to 3.10.

Installation

The library can be installed using pip3:

pip3 install pypdm

Documentation

A quick documentation is available on Read the Docs. A simple usage example is also provided below.

Requirements

This library requires:

  • Python >= 3.10
  • pyserial

Safety

When a PDM object is deleted, the library may try to switch off the laser source for safety. However, you shall not rely on this behavior and always beware of dangers when using laser equipments! Please always wear laser safety goggles or use any appropriate safety equipment to prevent any harmful accident.

Usage example

Basic laser activation in continuous mode

import pypdm

pdm = pypdm.PDM(1, 'COM0')
# Set offset current in mA.
pdm.offset_current = 30
pdm.activation = True
# Apply new settings to the device.
pdm.apply()

Basic laser configuration for pulsed operation

import pypdm

pdm = pypdm.PDM(1, 'COM0')
# Set pulse power to 50%
pdm.current_source = pypdm.CurrentSource.NUMERIC
pdm.current_percentage = 50
pdm.activation = True
# Apply new settings to the device.
pdm.apply()

List of available properties

import pypdm

pdm = pypdm.PDM(1, 'COM0')
print('Mode:', pdm.mode)
print('Synchronization source:', pdm.sync_source)
print('Delay line type:', pdm.delay_line_type)
print('Frequency (Hz):', pdm.frequency)
print('Pulse width (ps):', pdm.pulse_width)
print('Delay (ps):', pdm.delay)
print('Offset current (mA):', pdm.offset_current)
print('Current (%):', pdm.current_percentage)
print('Current (mA):', pdm.current)
print('Temperature (C°):', pdm.temperature)
print('Maximum current (mA):', pdm.maximum_current)
print('Maximum mean current (mA):', pdm.maximum_mean_current)
print('Current source:', pdm.current_source)
print('Interlock status:', pdm.interlock_status)
print('Activation:', pdm.activation)
# Protocol 3.7 only:
print('Software control mode:', pdm.software_control_mode)      # requires protocol 3.7
print('Control mode selection:', pdm.control_mode_selection)    # requires protocol 3.7

Use of two sources in daisy-chain configuration

import pypdm

pdm1 = pypdm.PDM(1, 'COM0')
pdm2 = pypdm.PDM(2, pdm1)

Testing

To test the package with a real device, you can use pytest and enable the "real" tests using the real marker.
Make sure your device is connected (for example, /dev/ttyUSB0 on Linux or COM3 on Windows) and that you have installed the required test dependencies (pytest).

To run all standard tests (not requiring hardware), use:

pytest

To run tests involving a real device, use:

pytest -m real --device /dev/ttyUSB0

Replace /dev/ttyUSB0 with the appropriate serial port for your platform.

The --device parameter specifies the serial port of the device to be used during "real" tests.
Tests marked with @pytest.mark.real will actually access the physical device.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pypdm-2.0.tar.gz (29.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pypdm-2.0-py3-none-any.whl (27.4 kB view details)

Uploaded Python 3

File details

Details for the file pypdm-2.0.tar.gz.

File metadata

  • Download URL: pypdm-2.0.tar.gz
  • Upload date:
  • Size: 29.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.1 CPython/3.13.12 Darwin/25.2.0

File hashes

Hashes for pypdm-2.0.tar.gz
Algorithm Hash digest
SHA256 9eee6f1911b541d1776043624a0340d909ac0db572ce2e776936ddb452a8a049
MD5 36563f0317f03d9db65f4d8af2feb0c8
BLAKE2b-256 38f24b4ea86fb7a1e6dda2b3ac904af59269aec9985fd048d41ed6f6e7277c34

See more details on using hashes here.

File details

Details for the file pypdm-2.0-py3-none-any.whl.

File metadata

  • Download URL: pypdm-2.0-py3-none-any.whl
  • Upload date:
  • Size: 27.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.1 CPython/3.13.12 Darwin/25.2.0

File hashes

Hashes for pypdm-2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 dbe2bb3361227ceae8471906d83c980fad128c5e7be413aef8d5bd9b6f75b584
MD5 f3cb818048b3e7ff215706753519e168
BLAKE2b-256 f08b244d8bbcc345d0f8b713f27fddda8aeb0322df6aeae87348c7538f3e6ae3

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page