Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/dangreco/jean
Computational biology utility library for Rust featuring sequence alignment, genome annotation, and I/O of biological files
https://github.com/dangreco/jean
bioinformatics biology computational-biology dna genes genetics protein rna
Last synced: 23 days ago
JSON representation
Computational biology utility library for Rust featuring sequence alignment, genome annotation, and I/O of biological files
- Host: GitHub
- URL: https://github.com/dangreco/jean
- Owner: dangreco
- License: other
- Created: 2022-11-29T22:48:21.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2022-12-01T22:42:00.000Z (about 2 years ago)
- Last Synced: 2024-12-09T03:40:51.819Z (27 days ago)
- Topics: bioinformatics, biology, computational-biology, dna, genes, genetics, protein, rna
- Language: Rust
- Homepage:
- Size: 1.96 MB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# jean
jean is a computational biology library written in Rust. It offers
computational biology primitives such as sequences (DNA, RNA, and Protein), bases, amino acids, and codons. Optional features extend the
abilities of jean, such as `io` which allows for reading/writing from/to common biological file formats (e.g. FASTA, GFF3) and `alignment` which allows for aligning sequences.## Getting Started
Add `jean` and any needed features to your Rust project:
```sh
$ cargo add jean # --features io,...
```## Feature Matrix
Feature
Use
Links
io
I/O of common biological file formats (e.g. FASTA, GFF3)
(Documentation)
macros
Macros for creating sequences
(Documentation)
alignment
Sequence alignment tools
(Documentation)
blosum
BLOSUM substitution matrices
(Documentation)
## Examples
### DNA Sequence Alignment
```rust
#[macro_use]
extern crate jean;use jean::{alignment::global::NeedlemanWunsch, blosum::NUC_4_2, dna::Dna};
fn main() -> Result<(), Box> {
let seq1: Dna = dna!("AGACTAGTTAC");
let seq2: Dna = dna!("CGAGACGT");let alignment = NeedlemanWunsch::new()
.matrix(&NUC_4_2)
.gap_penalty(|k| -2 * k)
.align(&seq1, &seq2)?;assert_eq!(alignment.score, 16);
assert_eq!(alignment.a, dna!("--AGACTAGTTAC"));
assert_eq!(alignment.b, dna!("CGAGAC--G-T--"));Ok(())
}
```### DNA -> RNA -> Protein
```rust
#[macro_use]
extern crate jean;use jean::{cut::Cut, dna::Dna, prelude::*, protein::Protein, rna::Rna};
fn main() -> Result<(), Box> {
let cut = Cut::read_file("homo_sapien.cut")?;/* DNA -> RNA -> Protein */
let d: Dna = dna!("AGGCTGGGCACC");
let r: Rna = d.transcribe();
let p: Protein = r.translate(&cut);assert_eq!(p, protein!("RLGT"));
/* ...and back again */
let r_ = p.rev_translate(&cut);
let d_ = r_.rev_transcribe();assert_eq!(d, d_);
Ok(())
}
```