Skip to content

API Reference

Full API documentation is generated from source code using cargo doc.

Generating Documentation

cd escapepod-rs
cargo doc --open --no-deps

This opens the documentation in your browser.

Crate Structure

The workspace is split into five crates:

Crate Role
escapepod-pod5 POD5 format I/O (reader, writer, VBZ, footer, block-level merge/filter/subset)
escapepod-signal Signal algorithms (DTW, resquiggle, segmentation); re-exports the full escapepod-pod5 surface
escapepod-demux WarpDemuX-compatible barcode demultiplexing (DTW + SVM classifier, optional CNN adapter detection and GPU acceleration)
escapepod-cli The escpod CLI binary (default cli feature) plus an optional umbrella library (imported as escapepod_cli) re-exporting the layers below
escapepod-python pyo3 bindings

escapepod-pod5

Format I/O.

Main types: Reader, Writer, WriterOptions, ReadData, RunInfoData, EndReason, Error.

Modules: reader, writer, compression (VBZ / SVB16 / ZSTD), footer (FlatBuffer), schema (Arrow schemas), types, merge, operations::{filter, repack, subset}.

escapepod-signal

Signal-processing algorithms, layered on top of escapepod-pod5 (which it re-exports).

Modules: dtw (distance, fingerprint, kernel, optional cuda), segmentation (LLR, t-test, normalize), resquiggle (banded DP).

escapepod-demux

Barcode demultiplexing. Separate crate; included in the default CLI build (it adds no third-party dependencies), and available to library consumers via --features demux.

Modules: model (JSON loaders), classify (per-read and batched GPU), svm (RBF kernel + Platt scaling), probability, train (feature train), adapter_cnn (feature cnn-detect).

escapepod

The escpod binary, built by the default cli feature — so cargo install --git https://github.com/rnabioco/escapepod-rs ships the tool. The same crate doubles as an umbrella library: default-features = false plus pod5 / signal / demux re-exports the corresponding layer (e.g. escapepod_cli::signal) without the CLI's dependency tree. Stable commands (built with cli): summary, view, inspect, merge, filter, bam-filter, subset. Experimental commands live behind Cargo features — see below.

Quick Reference

Opening Files

1
2
3
use escapepod_signal::Reader;

let reader = Reader::open("file.pod5")?;

Creating Files

1
2
3
use escapepod_signal::{Writer, WriterOptions};

let writer = Writer::create("output.pod5", WriterOptions::default())?;

Read Iteration

1
2
3
for read in reader.reads()? {
    println!("{}: {} samples", read.read_id, read.num_samples);
}

Signal Access

1
let signal: Vec<i16> = reader.get_signal(&read)?;

Run Info

1
2
let run_info = reader.get_run_info(read.run_info_index)?;
println!("Sample rate: {} Hz", run_info.sample_rate);

Writing Reads

1
2
3
writer.add_run_info(run_info)?;
writer.add_read(read_data, &signal)?;
writer.finish()?;

Error Handling

1
2
3
4
5
6
7
8
use escapepod_signal::Error;

match result {
    Ok(value) => { /* success */ }
    Err(Error::Io(e)) => eprintln!("I/O: {}", e),
    Err(Error::InvalidSignature) => eprintln!("Invalid file"),
    Err(e) => eprintln!("Error: {}", e),
}

Feature Flags

escapepod

Feature Effect
cli (default) Builds the escpod binary and its CLI dependencies; implies signal
pod5 / signal / demux Library re-exports of each layer (for default-features = false consumers)
experimental Unlocks repack, resquiggle, index
demux Unlocks the demux subcommand tree (detect / fingerprint / classify / split / train)
train Implies demux; adds demux train-svm (linfa-svm)
gpu Implies demux; batched GPU DTW for classify / train-svm (CUDA driver + libnvrtc at runtime)
cnn-detect Implies demux; ADAPTed-style CNN adapter detection (bring-your-own ONNX model; weights are CC BY-NC 4.0 and not bundled)

escapepod-demux

Feature Effect
train DtwSvmModel training via linfa-svm
gpu Routes to escapepod-signal's CUDA DTW kernel
cnn-detect ADAPTed-style CNN adapter detection via tract-onnx

The CLI features forward to the matching demux features, so building the CLI with --features gpu transitively enables demux's gpu feature.

Dependencies

escapepod-pod5

Crate Purpose
arrow Arrow IPC format
flatbuffers Footer serialization
zstd ZSTD compression
memmap2 Memory-mapped files
uuid UUID handling
thiserror Error derive

escapepod-signal

Crate Purpose
escapepod-pod5 Re-exported as pod5
ndarray Array operations
rand, flate2 Resquiggle internals

escapepod-demux

Crate Purpose
escapepod-pod5, escapepod-signal Format I/O + DTW
ndarray Feature vectors
serde, serde_json Model JSON
linfa, linfa-svm SVM training (feature train)
tract-onnx CNN adapter detection (feature cnn-detect)

escapepod (cli feature)

Crate Purpose
clap Argument parsing
rayon Parallel processing
noodles-bam, noodles-sam BAM integration
tabled Table formatting

Minimum Supported Rust Version

Rust 1.95 or later is required (tracked in [workspace.package].rust-version).