Crates.io | bam |
lib.rs | bam |
version | 0.1.4 |
source | src |
created_at | 2019-08-28 16:13:53.706979 |
updated_at | 2021-04-19 21:13:59.12679 |
description | Crate that allows to read and write BAM, SAM and BGZIP files, written completely in Rust. |
homepage | |
repository | https://gitlab.com/tprodanov/bam |
max_upload_size | |
id | 160448 |
size | 268,976 |
bam is a crate that allows to read and write BAM, SAM and BGZIP files, written completely in Rust.
Having a crate written completely in Rust reduces the number of dependencies and compilation time. Additionally, it removes the need to install additional C libraries.
Errors produced by this crate are more readable and easier to catch and fix on-the-fly.
Currently, there are three readers and two writers:
bam::IndexedReader
- fetches records from
random genomic regions.bam::BamReader
- reads a BAM file consecutively.bam::SamReader
- reads a SAM file consecutively.bam::BamWriter
- writes a BAM file.bam::SamWriter
- writes a SAM file.BAM readers and writers have single-thread and multi-thread modes.
You can construct pileups from all readers using Pileup
.
You can use bgzip
module to interact directly with bgzip files (BGZF).
The crate also allows to conviniently work with SAM/BAM records
and their fields, such as CIGAR
or tags
.
The following code would load BAM file in.bam
and its index in.bam.bai
, take all records
from 3:600001-700000
and print them on the stdout.
extern crate bam;
use std::io;
use bam::RecordWriter;
fn main() {
let mut reader = bam::IndexedReader::from_path("in.bam").unwrap();
let output = io::BufWriter::new(io::stdout());
let mut writer = bam::SamWriter::build()
.write_header(false)
.from_stream(output, reader.header().clone()).unwrap();
for record in reader.fetch(&bam::Region::new(2, 600_000, 700_000)).unwrap() {
let record = record.unwrap();
writer.write(&record).unwrap();
}
}
You can find more detailed usage here.
You can find changelog here.
Please submit issues here or send them to
timofey.prodanov[at]gmail.com
.