Skip to main content

A module for reading Princeton Instruments SPE files (version 2.x and 3.0) captured by WinSpec or LightField

Project description

spexread

DOI GitHub License GitHub Workflow Status build GitHub Workflow Status docs PyPI - Version PyPI - Python versions PyPI - Downloads Ruff Hatch project

A package for reading Princeton Instruments SPE files captured by WinSpec (version 2.x) or LightField(version 3.0).

It relies on xarray to handle the many different possible image shapes, ROIs, etc. that can be stored in an SPE file and reads them into a single xarray.Dataset, or a list of xarray.DataArrays.

Important metadata for both format versions is parsed and validated to a consistent schema using pydantic and stored in the attrs attribute of the dataset.

This has a number of key benefits:

  • Data is described and indexed as a function of dimensions or coordinates.

  • Access per-frame tracking information such as exposure_time or gate_width trivially (when stored, SPE v3.0 only) as coordinates of your data, alongside the core dimension x,y and frame.

  • The xarray.Dataset supports multiple regions of interest (ROI's) that can be accessed like a python dict.

    • You can handle files in the same way, regardless of amount of ROI's.
  • Metadata remains closely associated with the data and can be easily accessed.

[!IMPORTANT] spexread is functional, but some features and metadata that you use may be missing. Please file an issue and provide a sample file to add support for them. Found a bug? Please raise an issue as well!

Installing

spexread can be installed easily with pip, from PyPI:

pip install spexread

To install the latest version from GitHub, you can run the following command:

pip install git+https://github.com/AntoineTUE/spexread

Example usage

The example below demonstrates how to plot a kinetic series.

In LightField it is possible to acquire a kinetic series with varying gate width and gate delay, which can be stored to the file.

You can change the frame coordinate with e.g. gate_width in this example, to plot as a function of this coordinate.

from spexread import read_spe_file
from spexread.data_models import SPEType
from pathlib import Path
import matplotlib.pyplot as plt

# read data as a xarray.Dataset
data = read_spe_file(Path("./my_data.spe"))
print(data.coords._names) # lists available coordinate names

# plot spectra
plt.figure()
for name,roi in data.items():
    roi.mean(['frame','y']).plot(x='wavelength', label=name)

# Plot trends over time. You can replace `frame` with e.g. `gate_width` as well.
plt.figure()
for name,roi in data.items():
    roi.mean(['y','x']).plot(x='frame',label=name)

# easily convert to numpy arrays if needed, other formats possible as well, see xarray docs.
image = data['ROI 0'].mean('frame').to_numpy()
plt.figure()
plt.imshow(image)

# Convert the SPE metadata to a SPEType pydantic model, allowing attribute access
metadata = SPEType.model_validate(data.attrs)
print(metadata.GeneralInfo)
print(metadata.Calibrations.WavelengthCalib)
print(metadata.Calibrations.WavelengthCalib.wavelength)

License

spexread is licensed under the MIT license.

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

spexread-0.2.2.tar.gz (20.5 kB view details)

Uploaded Source

Built Distribution

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

spexread-0.2.2-py3-none-any.whl (21.1 kB view details)

Uploaded Python 3

File details

Details for the file spexread-0.2.2.tar.gz.

File metadata

  • Download URL: spexread-0.2.2.tar.gz
  • Upload date:
  • Size: 20.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for spexread-0.2.2.tar.gz
Algorithm Hash digest
SHA256 7ab325ae56636e00836ab6d4808c7467100ce66f1e372b7934c9de4b78e2543c
MD5 9e112d6b2b8341acdb56c7a13f8f9a5b
BLAKE2b-256 b3fa18ec4930b29f8e9d0589acbd52825b78350c5d355d61b53b26e71cb9dcfe

See more details on using hashes here.

Provenance

The following attestation bundles were made for spexread-0.2.2.tar.gz:

Publisher: build.yml on AntoineTUE/spexread

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file spexread-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: spexread-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 21.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for spexread-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 ef4ec60d7b74b50b2639e109672756f0b2d13241f7520a95f1b3c8a582a5f6e8
MD5 8ab65f40776f06880fa762a974b14208
BLAKE2b-256 fd20eae7cc5ea2f7c1c50d06274e7db97816532cb489c0a292dffb9d089ad5cb

See more details on using hashes here.

Provenance

The following attestation bundles were made for spexread-0.2.2-py3-none-any.whl:

Publisher: build.yml on AntoineTUE/spexread

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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