Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/jackh726/bigtools

A high-performance BigWig and BigBed library in Rust
https://github.com/jackh726/bigtools

bigbed bigwig rust

Last synced: about 2 months ago
JSON representation

A high-performance BigWig and BigBed library in Rust

Awesome Lists containing this project

README

        

# Bigtools

[![License](https://img.shields.io/badge/license-MIT-green)](https://github.com/jackh726/bigtools/blob/master/LICENSE)
[![Paper](https://img.shields.io/badge/DOI-10.1093%2Fbioinformatics%2Fbtae350-blue)](https://doi.org/10.1093/bioinformatics/btae350)
[![Zenodo](https://zenodo.org/badge/DOI/10.5281/zenodo.10606493.svg)](https://doi.org/10.5281/zenodo.10606493)


Rust, CLI


crates.io


bigtools on Bioconda


Rust Docs




Python


PyPI


pybigtools on Bioconda


Python Docs


Bigtools is a library and associated tools for reading and writing bigwig and bigbed files.

The primary goals of the project are to be
- Performant
- Extensible
- Modern

### Performant

Bigtools uses `async/await` internally to allow for efficient, multi-core computation when possible. In addition, tools are optimized for minimal memory usage. See [Benchmarks] for more details.

### Extensible

Bigtools is designed to be as modular as possible. This, in addition to the safety and reliability of Rust, allows both flexibility and correctness as a library. In addition, its extremely easy to quickly create new tools or binaries. A number of binaries are available that parallel related existing binaries from [UCSC](https://hgdownload.soe.ucsc.edu/admin/exe/), with drop-in compatibility for the most common flags.

### Modern

Bigtools is written in Rust and published to `crates.io`, so binaries can be installed with `cargo install bigtools` or it can be used as a library by simply including it in your `cargo.toml`.

## Library

To use `bigtools` in your Rust project, add `bigtools` to your `Cargo.toml` or run:

```sh
cargo add bigtools
```

See the `bigtools` 🦀 [Documentation](https://docs.rs/bigtools).

### Example

```rust,norun
use bigtools::bbiread::BigWigRead;

let mut reader = BigWigRead::open("test.bigWig").unwrap();
let chr1 = reader.get_interval("chr1", 0, 10000).unwrap();
for interval in chr1 {
println!("{:?}", interval);
}
```

## Binaries

The `bigtools` CLI binaries can be installed through [crates.io](https://crates.io/crates/bigtools) or [conda](https://anaconda.org/bioconda/bigtools/).

```sh
cargo install bigtools
```

```sh
conda install -c bioconda bigtools
```

Additionally, pre-built binaries can be downloaded through [Github releases](https://github.com/jackh726/bigtools/releases).

The following binaries are available:

|binary|description|
| ---- | ----- |
|bigtools|Provides access to multiple subcommands, including all below|
|bedgraphtobigwig|Writes a bigWig from a given bedGraph file|
|bedtobigbed|Writes a bigBed from a given bed file|
|bigbedinfo|Shows info about a provided bigBed|
|bigbedtobed|Writes a bed from the data in a bigBed|
|bigwigaverageoverbed|Calculate statistics over the regions of a bed file using values from a bigWig|
|bigwiginfo|Shows info about a provided bigWig|
|bigwigmerge|Merges multiple bigWigs, outputting to either a new bigWig or a bedGraph|
|bigwigtobedgraph|Writes a bedGraph from the data in a bigWig|
|bigwigvaluesoverbed|Get the per-base values from a bigWig over the regions of a bed file using values|

Renaming the `bigtools` binary to any of the subcommands (case-insensitive) allows you to run that subcommand directly.

## Python wrapper

The `pybigtools` package is a Python wrapper written using [`PyO3`](https://pyo3.rs/). It can be installed or used as a dependency either through [PyPI](https://pypi.org/project/pybigtools/) or [conda](https://anaconda.org/bioconda/pybigtools/).

```sh
pip install pybigtools
```

```sh
conda install -c bioconda pybigtools
```

See the `pybigtools` 🐍 [API Documentation](https://bigtools.readthedocs.io/en/latest).

## How to build from source

In order to build the bigtools binaries, you can run

```
cargo build --release
```

and the binaries can be found in `target/release/`.

Otherwise, you can install the binaries from source by running

```
cargo install --path bigtools/
```

Building the python wheels for pybigtools requires [maturin](https://pypi.org/project/maturin/). To build the pybigtools wheel for installation (and install), you can run

```
maturin build --release -m pybigtools/Cargo.toml
pip install target/wheels/pybigtools*.whl
```

or

```
maturin develop --release -m pybigtools/Cargo.toml
```

## Benchmarks
[Benchmarks]: #Benchmarks

Benchmarks are included in the `./bench` directory. They require `python` to run.

Multiple tools are compared against the comparable UCSC tools. For completeness, both single-threaded and multi-threaded (when available) benchmarks are included. Multiple different configuration options are benchmarked across multiple replicates, but a summar is available in the table below:

## How to cite

This repository contains contains a `CITATION.cff` file with citation information. Github allows you to get a citation in either APA or BibTeX format; this is available in "Cite this repository" under About.