# bigbed - a bigbed crate for Rust ## Background The BigBed file format is the binary, randomly accessible of the popular BED file format. The BED-like files are tab-delimited files that store genomic data in the following manner: ``` chrom start stop chr1 100 1000 chr1 3000 3200 chr2 200 230 ``` For more information on these file formats, consult [the UCSC Genome Browser's page on the subject](https://genome.ucsc.edu/FAQ/FAQformat.html#format1). For more information on the BigBed format, please refer to the 2010 paper from Kent et al., *BigWig and BigBed: enabling browsing of large distributed datasets* (doi: [10.1093/bioinformatics/btq351](https://dx.doi.org/10.1093%2Fbioinformatics%2Fbtq351)). This repository contains code for both a Rust crate for dealing with BigBed files and a cross-platform version of `bigBedToBed`-the utility provided by Kent et al. that converts BigBed files to BED files. ## Requirements This project relies on functions in the Rust `std` crate version 1.32 or higher. (You can check your version of rustc / cargo with `cargo --version`.) If you have not updated to at least version 1.32, run `rustup` like so: ``` rustup update ``` If you did not install Rust through rustup (i.e. you installed Rust via a package manager), I recommend removing your current installation and installing via `rustup`. If you don't have `rustup`, you can consult [the Rust website](https://www.rust-lang.org/tools/install). ### Note to Windows Users Windows users may experience an error along the lines of > error: linker `link.exe` not found If that is the case, make sure that you have all the correct build tools installed. (Consult this issue: [https://github.com/rust-lang/rust/issues/43039]() for more instructions.) ## Getting Started This crate features two main components: - a library for manipulating BigBed files - an example binary (`rbb`) that replicates the functionality of UCSC's `bigBedToBed` ### Building the library To build the `bigbed` library with full optimizations, run the following command: ``` cargo build --release ``` All library files will be located in `target/release`. ### Building the example binary To build the example binary (with full optimizations), run the following command: ``` cargo build --features binary --release --bin rbb ``` The `rbb` binary will be available in `target/release/rbb`. (Note: Windows users may find the executable named `rbb.exe` instead of just `rbb`.) ## Testing ### Testing with built-in testcases This crate includes built-in testcases to ensure that all functions are running properly. To run these testcases, execute the following command: ``` cargo test ``` ### Testing wth provided test files This repository includes several corresponding BED and bigbed files. For instance, the files `test/beds/long.bed` and `test/bigbeds/long.bb` contain the same data, but in BED and BigBed formats, respectively. To run a manual test, execute the following commands: ```sh # build the binary and run on long.bed cargo run --features=binary test/bigbeds/long.bb test-long.bed # compare test output to expected output # this should produce no output if the program works diff -q test-long.bed test/beds/long.bed ``` You can repeat this process with other provided files in `test/` or with files of your own. ## License This crate is licensed under GPL-3.0. Please see the [LICENSE](./LICENSE) for details.