Skip to content

--compression-level 0 silently produces level-1 BAM on unified-pipeline commands #360

Closed

Description

@nh13

Description

--compression-level 0 should produce uncompressed BGZF (matching samtools view -0), but behavior diverges by writer backend:

  • bam_io::make_bgzf_writer (correct, downsample, sort merge output): produces uncompressed BAM via noodles_bgzf::CompressionLevel::NONE.
  • simulate::parallel_gzip_writer: forwards 0 to libdeflater.
  • fgumi-bgzf::InlineBgzfCompressor::new (unified-pipeline commands — extract, zipper, simplex, duplex, codec, filter, clip, review, group, dedup, sort worker chunks): silently clamp(1, 12)s to level 1.

Cause: crates/fgumi-bgzf/src/writer.rs:80 clamps to [1, 12] instead of [0, 12]. Compounded by src/lib/commands/common.rs:425 declaring the flag without a value_parser range and documenting it as 1-12, so 0 (and >12) are unvalidated.

Fix:

  1. InlineBgzfCompressor::new: drop .clamp(1, 12), accept 0..=12, update doc.
  2. CompressionOptions: add value_parser!(u32).range(0..=12), update doc to 0-12 and note 0 = uncompressed.
  3. Integration test: extract --compression-level 0 output should be noticeably larger than --compression-level 1.

Version

0.2.0

Reproduction steps

fgumi extract ... --output out.l0.bam --compression-level 0
fgumi extract ... --output out.l1.bam --compression-level 1
ls -l out.l0.bam out.l1.bam   # expect out.l0 >> out.l1; actual: ~equal

OS

Not OS-specific.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions