-
Notifications
You must be signed in to change notification settings - Fork 0
BioFastq-A v2.3.0 #14
Changelogv2.3.0 2026年05月18日Summaryv2.3.0 is the biggest release since the initial Rust write. Every analysis that takes extra CPU is now offset by the new parallel pipeline — experimental benchmarks show v2.3.0 is faster than v2.2.0 on identical hardware despite computing significantly more statistics. New FeaturesPer-Position Quality BoxplotsThe quality chart now shows the full Q25/median/Q75 band per position in addition to the mean line. This makes it immediately obvious whether a position has a tight quality distribution or a fat tail of bad reads. Per-Read GC DistributionA histogram of per-read GC% across all reads. Bimodal distributions flag contamination; a sharp spike flags adapter dimer; a broad flat distribution flags PCR over-amplification. Quality-vs-Length Scatter (Long-Read Mode)For ONT/PacBio data ( Long-Read / ONT Support (
|
| Change | Effect |
|---|---|
Vec<Vec<u8>> → Vec<[u8;50]> for overrep sampling |
Eliminates 200K heap allocs per file; rayon reduce becomes memcpy instead of HashMap merge |
qual_hist_by_pos [u64;43] → [u32;43] |
Halves working set from ~52 KB to ~26 KB; active region fits in L1 cache |
| Split combined quality loop into two passes | Allows LLVM to auto-vectorise the sequential pass; scatter pass runs independently |
Result on 1M ×ばつ 150 bp benchmark (8 threads):
| Version | Throughput |
|---|---|
| v2.2.0 (main) | ~295 MB/s |
| v2.3.0 (this release) | ~308 MB/s |
v2.3.0 computes more statistics and is still ~4% faster.
What BioFastq-A Does That Others Don't
| Feature | BioFastq-A | FastQC | fastp | MultiQC |
|---|---|---|---|---|
| Single native binary (no JVM, no Python) | ✓ | ✗ | ✓ | ✗ |
| mmap zero-copy I/O pipeline | ✓ | ✗ | ✗ | ✗ |
| Per-position Q25/median/Q75 boxplot | ✓ | ✓ | ✗ | ✗ |
| Per-read GC histogram | ✓ | ✓ | partial | ✗ |
| Quality-vs-length scatter (long read) | ✓ | ✗ | ✗ | ✗ |
| Long-read / ONT mode (N50, N90) | ✓ | ✗ | ✗ | ✗ |
| Two-file comparison report | ✓ | ✗ | ✗ | ✓ |
| Auto trimming parameter suggestions | ✓ | ✗ | ✗ | ✗ |
| Sliding-window quality trimming | ✓ | ✗ | ✓ | ✗ |
| Poly-G / poly-X trimming | ✓ | ✗ | ✓ | ✗ |
| Built-in adapter library | ✓ | ✓ | ✓ | ✗ |
| Paired-end support | ✓ | ✓ | ✓ | ✗ |
| HyperLogLog deduplication estimate | ✓ | ✗ | ✗ | ✗ |
| JSON + HTML output | ✓ | ✗ | ✓ | ✓ |
| Bioconda package | ✓ | ✓ | ✓ | ✓ |
Bug Fixes
- Fixed
cut_tailedge case where reads shorter than the trim window produced an off-by-one in the output length calculation - Fixed N90 threshold precision: was using integer division for the cumulative length threshold; now uses exact u64 arithmetic
Installation
# Bioconda conda install -c bioconda biofastq-a # Build from source cargo install --path .
Have fun using!
by Dila Deniz
This discussion was created from the release BioFastq-A v2.3.0.