transivent
transivent is a Python library for detecting and analysing transient events (~spikes) in time-series data. It provides a flexible and configurable pipeline for processing waveform data, identifying events based on signal-to-noise ratio, and visualizing the results. The library is designed to handle large files efficiently through chunked processing.
Additionally, transivent includes tools for diffusion analysis of detected events, including Mean Square Displacement (MSD) calculation, autocorrelation analysis, and statistical visualization.
Brutalist Philosophy: Simple, composable building blocks. Use detect() for custom data or detect_from_wfm() for Wfm files. All underlying components are available for advanced users. No unnecessary abstractions.
Quick Start
For Custom Time-Series Data
import numpy as np
from transivent import detect
# Load your data (CSV, NumPy, HDF5, etc.)
t = np.linspace(0, 1, 100000) # Time in seconds
x = np.random.randn(100000) * 0.1 # Signal
# Detect events
results = detect(
t, x,
name="My Data",
detection_snr=3.0,
signal_polarity=-1, # -1 for negative spikes, +1 for positive
)
# Access results
events = results["events"]
print(f"Found {len(events)} events")
For Wfm Files (proprietary format with XML sidecar)
from transivent import detect_from_wfm
# Detect events in Wfm file
results = detect_from_wfm(
name="data.Wfm.bin",
sampling_interval=5e-7, # seconds
data_path="/path/to/data/",
target_sampling_interval=5e-6, # Optional: downsample to 200 kHz
detection_snr=3.0,
)
New in v2.1.0: Use target_sampling_interval to downsample oversampled data before detection. This improves SNR and processing speed for high-frequency data.
events = results["events"] print(f"Found {len(events)} events")
## Advanced Usage
For advanced workflows, individual building blocks are available in submodules. The `detect()` function internally uses these components:
```python
from transivent.analysis import (
calculate_initial_background,
calculate_clean_background,
detect_initial_events,
detect_final_events,
estimate_noise,
)
# Use these functions to build custom pipelines
For diffusion analysis:
from transivent.diffusion import (
extract_event_waveforms,
calculate_msd_parallel,
calculate_acf,
fit_diffusion_linear,
)
# After detecting events with detect()...
results = detect(t, x)
events = results["events"]
bg_clean = results["bg_clean"]
waveforms = extract_event_waveforms(t, x, events, bg_clean=bg_clean)
# ... continue with diffusion analysis
Public API
The main entry points are detect() and detect_from_wfm(). For full API documentation, consult the docstrings in the source code or the type hints in src/transivent/__init__.py.
Building blocks and advanced functions are available in submodules:
- transivent.analysis - Background estimation, noise analysis, event detection
- transivent.event_detector - Low-level detection algorithms
- transivent.diffusion - Diffusion analysis tools (optional)
- transivent.io - File I/O utilities
Examples
The repository includes several example scripts demonstrating different use cases:
example_quick_start.py- Quick introduction to bothdetect()anddetect_from_wfm()example.py- Complete workflow for processing Wfm files with XML sidecarsexample_custom_data.py- Demonstrates using transivent with any time-series data (CSV, NumPy arrays, etc.)example_diffusion.py- Complete diffusion analysis workflow with visualization
Each example is self-contained and can be run directly to see the library in action.
Migration from v1.0.0
If you're upgrading from v1.0.0, here's how to update your code:
v1.0.0 → v2.0.0 Mapping
Old:
from transivent import process_file
process_file(
name="data.Wfm.bin",
sampling_interval=5e-7,
data_path="/path/to/data/",
detection_snr=3.0,
show_plots=True,
)
New:
from transivent import detect_from_wfm
results = detect_from_wfm(
name="data.Wfm.bin",
sampling_interval=5e-7,
data_path="/path/to/data/",
detection_snr=3.0,
save_plots=True,
)
events = results["events"] # Now you get results back!
Key Changes
| v1.0.0 | v2.0.0 | Notes |
|---|---|---|
process_file() |
detect_from_wfm() |
For Wfm files only |
| No custom data support | detect() |
New entry point for any data |
| No return value (void) | Returns dict | All results in one place |
| 37 public functions | 8 public functions | Much simpler API |
| Plot on disk only | Plot in memory + disk | Access via results["plot"] |
| Internal functions exposed | Submodules for building blocks | transivent.analysis, transivent.diffusion |
Building Blocks
If you were using internal functions like calculate_initial_background, they're still available but now in submodules:
# Old (no longer in main API)
from transivent import calculate_initial_background
# New
from transivent.analysis import calculate_initial_background
