Skip to content

Latest commit

 

History

History
82 lines (66 loc) · 3.86 KB

File metadata and controls

82 lines (66 loc) · 3.86 KB

Changelog

All notable changes to SNPick are documented here. The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

1.0.2 - 2026-07-18

Added

Filtering & selection

  • Per-site filtering: --max-missing, --mac, --maf, --min-samples, --max-alleles. Filtered sites stay variable (never re-enter fconst), so ASC correction remains valid.
  • --keep-samples / --exclude-samples (comma-separated IDs or @file) subset the panel before the scan, so fconst is recomputed for the retained samples.
  • --mask <BED> (and --mask-ref) excludes regions from both the output and fconst.

Coordinates & references

  • --reference <ID> chooses the REF/polarity sequence and the VCF ##reference.
  • --ref-coords writes VCF POS as ungapped reference positions.
  • --sites-output <TSV> maps each site's alignment column to its reference position.

I/O & formats

  • Transparent gzip/bgzip input, plus stdin (-f -) and stdout (-o -) streaming.
  • --format {fasta,phylip,nexus} for the reduced alignment.
  • --stats-json <FILE> (or -) writes a typed JSON run summary with the fconst array.

Robustness & QC

  • --dry-run (stats only) and --check (composition audit) exit without writing.
  • --on-invalid {ignore,warn,error} guards against non-nucleotide input.
  • --iupac-mode resolve optionally resolves IUPAC codes to their bases.
  • Empty/duplicate sequence IDs are rejected (--allow-dup-ids to permit).
  • -v/-vv diagnostics; distinct exit codes (2 bad input, 1 I/O).

Threading & VCF

  • -t, --threads <N> pins the Rayon thread pool (deterministic wall-clock; output is unaffected by thread count).
  • --chrom <NAME> sets the VCF CHROM / ##contig name (default 1).
  • -q, --quiet silences the [snpick] progress logs (errors still print).
  • A valid header-only VCF is written when --vcf is requested but there are no variable sites, so pipelines declaring the .vcf output no longer break.

Packaging

  • Published as a reusable Rust library crate, with Python (pyo3/maturin) and WebAssembly bindings, and Docker/Apptainer container recipes.

Fixed

  • Silent SNP loss when a single-line FASTA record contained a blank line: such records were read with misaligned byte offsets. They now use the newline-skipping scanner.
  • Gap reference bases produced an invalid VCF REF of - under --include-gaps; the REF is now rendered as N (a valid VCF base). ALT gaps stay * (the snp-sites convention), so REF and ALT gap encodings differ by design.
  • All-gap columns were tallied in no category under --include-gaps, breaking the reported variable + constant + ambiguous == length invariant.
  • Bare output filenames (-o snps.fasta, no directory) were rejected during path resolution, breaking the documented quickstart.
  • The release workflow's "tag already exists" guard was never read, so merges without a version bump re-published over existing tags.
  • The README's pre-built binary download command pointed at an asset name the release never publishes (404).

Performance

  • VCF data rows are assembled in a reused byte buffer instead of one formatted write per genotype field — a large speedup on many-sample inputs. Output is byte-identical.

1.0.1 - 2026-03-31

  • First Bioconda release.
  • Cross-platform Build & Release CI workflow (Linux/macOS, x86_64/aarch64).
  • README overhaul and benchmarks.

1.0.0 - 2024-11-16

  • Initial release: zero-copy memory-mapped extraction of variable sites from FASTA alignments, optional VCF v4.2 output, and ASC fconst reporting.