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.1.tar.gz (20.3 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.1-py3-none-any.whl (21.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: spexread-0.2.1.tar.gz
  • Upload date:
  • Size: 20.3 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.1.tar.gz
Algorithm Hash digest
SHA256 f63ff48344efcc31f5e0ec1166f4e2a48a5d23f5a60fb75b982ac76af702d242
MD5 1d5b24c15ec1435c5b5526384bf04cf2
BLAKE2b-256 5d9306cf7d66f0101cbef726e373b012816a9ed04744ed6f4003186635488fcc

See more details on using hashes here.

Provenance

The following attestation bundles were made for spexread-0.2.1.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.1-py3-none-any.whl.

File metadata

  • Download URL: spexread-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 21.0 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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 3ef9f9340b3bf48e27cec7935bbe3203bfff441e418ce67aa8811a70e844a348
MD5 8f02afe1a0128eb7de97d068d1db1942
BLAKE2b-256 a2b4a90be39e3e7450705c94487b4f63c44f7b85d93b86221cd761bcbeca1107

See more details on using hashes here.

Provenance

The following attestation bundles were made for spexread-0.2.1-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