POD5 Format Overview¶
POD5 is the successor to FAST5 for storing Oxford Nanopore sequencing data. It uses Apache Arrow IPC (Feather V2) for efficient columnar storage with custom signal compression.
Design Goals¶
- Efficient access - Columnar format enables reading specific fields without loading entire reads
- Compact storage - VBZ compression achieves 60-80% reduction in signal data size
- Batch processing - Data organized in batches for parallel processing
- Self-describing - Schema embedded in file, extensible metadata
File Structure¶
A POD5 file contains:
- Signature - Magic bytes identifying the file format
- Signal Table - Compressed raw signal data (Arrow IPC)
- Run Info Table - Sequencing run metadata (Arrow IPC)
- Reads Table - Read records with references to signal (Arrow IPC)
- Footer - FlatBuffer with table locations and metadata
See Container Structure for detailed layout.
Data Tables¶
Reads Table¶
One row per read containing:
| Field | Type | Description |
|---|---|---|
| read_id | UUID | Unique identifier |
| channel | u16 | Channel number |
| well | u8 | Well (1-4) |
| read_number | u32 | Sequential number |
| start_sample | u64 | Start position |
| num_samples | u64 | Signal length |
| median_before | f32 | Pre-read current |
| calibration_offset | f32 | ADC offset |
| calibration_scale | f32 | ADC scale |
| end_reason | enum | Why read ended |
| signal | List |
Signal row indices |
| run_info | u32 | Run info index |
Signal Table¶
Compressed signal chunks:
| Field | Type | Description |
|---|---|---|
| signal | VBZ binary | Compressed signal data |
| samples | u32 | Number of samples |
Run Info Table¶
One row per unique acquisition:
| Field | Type | Description |
|---|---|---|
| acquisition_id | string | Unique run ID |
| acquisition_start_time | i64 | Start timestamp (ms) |
| sample_rate | u16 | Sampling rate (Hz) |
| adc_min | i16 | ADC minimum |
| adc_max | i16 | ADC maximum |
| context_tags | Map | Key-value metadata |
| tracking_id | Map | Tracking metadata |
Signal Compression¶
Signal data uses the VBZ codec:
- Delta encoding - Store differences between samples
- Zigzag encoding - Map signed to unsigned integers
- SVB16 - Variable-length encoding (1-2 bytes per value)
- ZSTD - Final compression
See Compression for algorithm details.
Signal Analysis Algorithms¶
For barcode demultiplexing and signal analysis, see Segmentation Algorithms:
- LLR boundary detection - Find adapter regions using log-likelihood ratio
- T-test segmentation - Extract fingerprints from signal segments
- DTW classification - Dynamic time warping for barcode matching
Arrow Extension Types¶
POD5 uses custom Arrow extension types:
| Type | Base Type | Description |
|---|---|---|
minknow.uuid |
FixedSizeBinary(16) | UUID storage |
minknow.vbz |
LargeBinary | VBZ compressed data |
Version History¶
| Version | Changes |
|---|---|
| 0 | Initial format |
| 1 | Added open_pore_level field |
| 2 | Modified signal chunking |
| 3 | Added predicted_scaling fields |
| 4 | Current version |
Comparison with FAST5¶
| Aspect | FAST5 | POD5 |
|---|---|---|
| Container | HDF5 | Arrow IPC |
| Compression | gzip/VBZ | VBZ only |
| Access pattern | Row-oriented | Columnar |
| Metadata | HDF5 attributes | FlatBuffer |
| File size | Baseline | ~30% smaller |
| Read speed | Slower | 2-10x faster |