Skip to main content

An unofficial Python package 🐍📦 to interface with Teledyne LeCroy oscilloscopes and read binary trace files (.trc)

Project description

lecroyscope

PyPI version Build and Test PyPI - Python Version

🤔 What is this?

This is an unofficial Python package to interface with Teledyne LeCroy oscilloscopes and read binary trace files (*.trc).

The parsing of trc files is based on the lecroy-reader project.

⚠️ Disclaimer

The features of this package are based on my needs at the time of writing. I have done very limited testing, using a single oscilloscope and a few trace files.

If you use this package, it is very possible you find a bug or some oversight. You are encouraged to make a pull request or to create an issue to report a bug, to request additional features or to suggest improvements.

⚙️ Installation

Installation via pip is supported. To install the latest published version, run:

pip install lecroyscope

To install the package from source, including test dependencies, clone the repository and run:

pip install .[test]

👨‍💻 Usage

📖 Reading binary trace files (*.trc)

from lecroyscope import Trace

trace = Trace("path/to/trace.trc")

Trace file header information can be accessed via the header attribute:

header = trace.header

# properties can be accessed directly
print("Instrument name: ", header.instrument_name)

# or as python dict
print("Instrument name: ", header["instrument_name"])

# header can also be converted into a python dict
header_dict = dict(header)
print("Header keys: ", list(header_dict.keys()))

The trace data can be accessed via the time(x) and voltage(y) attributes:

# time values
time = trace.time  # trace.x is an alias for trace.time

# channel voltage values
voltage = trace.voltage  # trace.y is an alias for trace.voltage

📟 Acquisition with LeCroy oscilloscope

import lecroyscope

scope = lecroyscope.Scope("192.168.1.10")  # IP address of the scope

# print some info
print(f"Scope ID: {scope.id}")

# change to "Sequence" mode with 200 segments
scope.sample_mode = "Sequence"
scope.num_segments = 200
print(f"Sample mode: '{scope.sample_mode}' with {scope.num_segments} segments")

# acquire data with a single trigger, timout (fail) after 60 seconds
scope.acquire(timeout=60)

# Read channel 2 and 3 traces
# The data in the scope won't change until next acquisition
trace_channel2: lecroyscope.Trace = scope.read(2)
trace_channel3: lecroyscope.Trace = scope.read(3)

# Alternatively, it is recommended to use the TraceGroup class for reading multiple channels from the same trigger
trace_group: lecroyscope.TraceGroup = scope.read(2, 3)
trace_channel2 = trace_group[2]
trace_channel3 = trace_group[3]
time = trace_group.time  # time values are the same for all traces

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

lecroyscope-1.0.0.tar.gz (194.4 kB view hashes)

Uploaded Source

Built Distribution

lecroyscope-1.0.0-py3-none-any.whl (13.1 kB view hashes)

Uploaded Python 3

Supported by

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