Skip to content

feat: STARlong binary + long-read window-coverage filter#116

Open
BenjaminDEMAILLE wants to merge 3 commits into
scverse:mainfrom
BenjaminDEMAILLE:bd/starlong
Open

feat: STARlong binary + long-read window-coverage filter#116
BenjaminDEMAILLE wants to merge 3 commits into
scverse:mainfrom
BenjaminDEMAILLE:bd/starlong

Conversation

@BenjaminDEMAILLE

Copy link
Copy Markdown
Contributor

Summary

  • Add rustar-aligner-long binary (STAR's STARlong: identical CLI, forces the chaining-DP long-read stitcher via Parameters::long_read, matching how native STAR selects it by binary rather than a flag).
  • Wire params.long_read through stitch_seeds_with_jdb_debug into a new window_read_coverage (ReadAlign_stitchPieces.cpp's WC accumulation, faithful to upstream's rLast=0 under-count for a seed starting at read position 0) and gate the winReadCoverageRelativeMin/winReadCoverageBasesMin cluster filter on long_read, since standard STAR does not filter clusters by seed coverage.
  • Themed split of the original bundled WASP+everything PR, per docs-old/dev/porting-from-star-rs.md.

Test plan

  • cargo build / test / clippy -D warnings / fmt --check all green

BenjaminDEMAILLE and others added 3 commits July 23, 2026 20:00
CI's clippy advanced to 1.97 (new lints fail the `-D warnings` gate) and rustsec
flagged several advisories in the dependency tree. Both block all PRs.

Clippy:
- src/index/suffix_array.rs: assert!(x == 0) -> assert_eq! (manual_assert_eq)
- src/io/sam.rs, tests/alignment_features.rs: byte-slice literals -> byte
  strings, e.g. [b'S', b'M'] -> *b"SM" (byte_char_slices)
- src/quant/transcriptome.rs: if-let/else-return-None -> `?` (question_mark)

Security audit (Cargo.lock only, no manifest change):
- memmap2 0.9.10 -> 0.9.11 (RUSTSEC-2026-0186, out-of-bounds pointer offset)
- crossbeam-epoch 0.9.18 -> 0.9.20 (RUSTSEC-2026-0204, invalid pointer deref)
- anyhow 1.0.102 -> 1.0.104 (RUSTSEC-2026-0190, unsound downcast_mut)

No behavioural change. Unblocks CI for open and future PRs.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add LICENSES/STAR_RS_LICENSE (STAR-rs MIT notice, Copyright (c) 2026 Benjamin
Demaille) and note it in LICENSES/README.md, for attribution of modules ported
from STAR-rs. STAR-rs is dual MIT-OR-Apache; ported code is taken under its MIT
option, compatible with this repo's MIT license.

Add docs-old/dev/porting-from-star-rs.md documenting the STAR-rs to
rustar-aligner type/module mapping, the licensing and cellranger reference-only
caveat, the determinism decision (adopt STAR-rs's thread-invariant, no-rand
model), and how to validate ports against native STAR via the existing test/
harness with DIVERGENCES.md as the acceptance spec.

This is the base of a series of themed, dependency-stacked PRs bringing the
STAR-rs feature surface (WASP, clipping, signal tracks, genome transforms,
STARlong, STARsolo, ...) into rustar-aligner.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add rustar-aligner-long binary (STAR's STARlong: identical CLI, forces the
chaining-DP long-read stitcher via Parameters::long_read, matching how native
STAR selects it by binary rather than a flag).

Wire params.long_read through stitch_seeds_with_jdb_debug into a new
window_read_coverage (ReadAlign_stitchPieces.cpp's WC accumulation, faithful
to upstream's rLast=0 under-count for a seed starting at read position 0) and
gate the winReadCoverageRelativeMin/winReadCoverageBasesMin cluster filter on
long_read, since standard STAR does not filter clusters by seed coverage.

Refactor stitch_seeds_core's preamble into prepare_stitch_input, shared with
the (upcoming) STARlong chaining-DP stitcher stitch_seeds_long_read.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant