#noodles #bam #bioinformatics

noodles-bam

Binary Alignment/Map (BAM) format reader and writer

27 breaking releases

new 0.28.0 Mar 14, 2023
0.26.0 Feb 3, 2023
0.25.1 Nov 29, 2022
0.20.0 Jul 5, 2022
0.2.1 Jul 30, 2021

#83 in Science

Download history 77/week @ 2022-11-28 71/week @ 2022-12-05 116/week @ 2022-12-12 90/week @ 2022-12-19 173/week @ 2022-12-26 94/week @ 2023-01-02 144/week @ 2023-01-09 84/week @ 2023-01-16 197/week @ 2023-01-23 235/week @ 2023-01-30 144/week @ 2023-02-06 455/week @ 2023-02-13 253/week @ 2023-02-20 240/week @ 2023-02-27 132/week @ 2023-03-06 206/week @ 2023-03-13

911 downloads per month
Used in 9 crates (3 directly)

MIT license

1MB
21K SLoC

noodles-bam handles the reading and writing of the BAM (Binary Alignment/Map) file format.

The BAM format contains the same information as SAM (Sequence Alignment/Map), namely a SAM header and a list of records.

Examples

Read all records

# use std::{fs::File, io};
use noodles_bam as bam;

let mut reader = File::open("sample.bam").map(bam::Reader::new)?;
let header = reader.read_header()?.parse()?;
reader.read_reference_sequences()?;

for result in reader.records(&header) {
    let record = result?;
    println!("{:?}", record);
}
# Ok::<(), Box<dyn std::error::Error>>(())

Query records

Querying allows filtering records by region. It requires an associated BAM index (BAI).

# use std::fs::File;
use noodles_bam::{self as bam, bai};
use noodles_core::Region;
use noodles_sam as sam;

let mut reader = File::open("sample.bam").map(bam::Reader::new)?;
let header = reader.read_header()?.parse()?;

let index = bai::read("sample.bam.bai")?;
let region = "sq0:5-8".parse()?;
let query = reader.query(&header, &index, &region)?;

for result in query {
    let record = result?;
    println!("{:?}", record);
}
# Ok::<(), Box<dyn std::error::Error>>(())

Dependencies

~1.8–7MB
~105K SLoC