Crate rosalind [] [src]

The rosalind crate provides fuctions to solve probles from Rosalind site.

Counting DNA Nucleotides

Examples

use rosalind::RosalindError::UnknownNucleotide;
use rosalind::dna::*;

let dna = "AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC";
let dna_nucleotides = DNANucleotides {A: 20, C: 12, G: 17, T: 21};
assert_eq!(count_dna_nucleotides(dna).unwrap(), dna_nucleotides);
assert_eq!(dna_nucleotides.to_string(), "20 12 17 21");
assert_eq!(count_dna_nucleotides("\n").unwrap(), DNANucleotides {A: 0, C: 0, G: 0, T: 0});
assert_eq!(count_dna_nucleotides("Z").unwrap_err(), UnknownNucleotide('Z'));

Transcribing DNA into RNA

Examples

use rosalind::RosalindError::UnknownNucleotide;
use rosalind::rna::*;

let dna = "GATGGAACTTGACTACGTAAATT";
assert_eq!(transcribe_dna_into_rna(dna).unwrap(), "GAUGGAACUUGACUACGUAAAUU");
assert_eq!(transcribe_dna_into_rna("\n").unwrap(), "");
assert_eq!(transcribe_dna_into_rna("Z").unwrap_err(), UnknownNucleotide('Z'));

Complementing a Strand of DNA

Examples

use rosalind::RosalindError::UnknownNucleotide;
use rosalind::revc::*;

let dna = "AAAACCCGGT";
assert_eq!(reverse_complement_dna(dna).unwrap(), "ACCGGGTTTT");
assert_eq!(reverse_complement_dna("\n").unwrap(), "");
assert_eq!(reverse_complement_dna("Z").unwrap_err(), UnknownNucleotide('Z'));

Rabbits and Recurrence Relations

Examples

use rosalind::fib::*;
use num::{BigUint};
use num::bigint::{ToBigUint};

let mut expected_relation: BigUint = 19.to_biguint().unwrap();
assert_eq!(recurrence_relation(5, 3).unwrap(), expected_relation);
expected_relation = 4.to_biguint().unwrap();
assert_eq!(recurrence_relation_with_stop(6, 3).unwrap(), expected_relation);

Translating RNA into Protein, Inferring mRNA from Protein, Calculating Protein Mass

Examples

use rosalind::RosalindError::{CodonParseError, UnknownCodon, UnknownAminoAcid};
use rosalind::prot::*;

let rna = "AUGGCCAUGGCGCCCAGAACUGAGAUCAAUAGUACCCGUAUUAACGGGUGA";
assert_eq!(translate_rna_into_protein(rna).unwrap(), "MAMAPRTEINSTRING");
assert_eq!(translate_rna_into_protein("AUGUGA\n").unwrap(), "M");
assert_eq!(translate_rna_into_protein("Z").unwrap_err(), CodonParseError);
assert_eq!(translate_rna_into_protein("ZZZ").unwrap_err(), UnknownCodon("ZZZ".to_string()));

assert_eq!(get_number_of_rna_from_protein("MA").unwrap(), 12);
assert_eq!(get_number_of_rna_from_protein("").unwrap(), 0);
assert_eq!(get_number_of_rna_from_protein("\n").unwrap(), 3);
assert_eq!(get_number_of_rna_from_protein("B").unwrap_err(), UnknownAminoAcid('B'));

assert_eq!(get_protein_mass("SKADYEK\n").unwrap(), 821.392f64);
assert_eq!(get_protein_mass("AB").unwrap_err(), UnknownAminoAcid('B'));

Counting Point Mutations

Examples

use rosalind::RosalindError::HammingStringsLengthError;
use rosalind::hamm::*;

let s = "GAGCCTACTAACGGGAT";
let t = "CATCGTAATGACGGCCT";
assert_eq!(hamming_distance(s, t).unwrap(), 7);
assert_eq!(hamming_distance("G", "").unwrap_err(), HammingStringsLengthError);

Finding a Motif in DNA

Examples

use rosalind::RosalindError::MotifStringsLengthError;
use rosalind::subs::*;

let s = "GATATATGCATATACTT";
let t = "ATAT";
assert_eq!(motif_lookup(s, t).unwrap(), vec![2, 4, 10]);
assert_eq!(motif_lookup(t, s).unwrap_err(), MotifStringsLengthError);

Computing GC Content

Examples

use rosalind::gc::*;

assert_eq!(gc_content("").unwrap(), 0f32);
assert_eq!(gc_content("AGCTATAG").unwrap(), 37.5f32);

let dataset = ">Rosalind_6404
  CCTGCGGAAGATCGGCACTAGAATAGCCAGAACCGTTTCTCTGAGGCTTCCGGCCTTCCC
  TCCCACTAATAATTCTGAGG
  >Rosalind_5959
  CCATCGGTAGCGCATCCTTAGTCCAATTAAGTCCCTATCCAGGCGCTCCGCCGAAGGTCT
  ATATCCATTTGTCAGCAGACACGC
  >Rosalind_0808
  CCACCCTCGTGGTATGGCTAGGCATTCAGGAACCGGAGAACGCTTCAGACCAGCCCGGAC
  TGGGAACCTGCGGGCAGTAGGTGGAAT";

assert_eq!(best_gc_content_in_dataset(dataset).unwrap(),
  GCcontent {string_id: "Rosalind_0808".to_string(), gc_content: 60.919540f32});

Mendel's First Law

Examples

use rosalind::RosalindError::InvalidInputParameters;
use rosalind::iprb::*;

assert_eq!(dominant_allele_probability(0, 1, 1).unwrap_err(), InvalidInputParameters);
assert_eq!(dominant_allele_probability(1, 0, 1).unwrap_err(), InvalidInputParameters);
assert_eq!(dominant_allele_probability(1, 1, 0).unwrap_err(), InvalidInputParameters);

assert_eq!(dominant_allele_probability(2, 2, 2).unwrap(), 0.7833333);

Consensus and Profile

Examples

use rosalind::cons::*;

let prof = Profile {
    A: vec![5, 1, 0, 0, 5, 5, 0, 0],
    C: vec![0, 0, 1, 4, 2, 0, 6, 1],
    G: vec![1, 1, 6, 3, 0, 1, 0, 0],
    T: vec![1, 5, 0, 0, 0, 1, 1, 6],
};

assert_eq!(consensus(prof).unwrap(), "ATGCAACT");

Utilities

Parse FASTA dataset into list of Strings

use rosalind::utils::*;

let fasta_dataset = ">Rosalind_1
    CCTGCGGAAG
    TCCCACTAAT
    >Rosalind_2
    CCATCGGTAG
    ATATCCATTT
    >Rosalind_3
    CCACCCTCGT
    TGGGAACCTG";

let expected_dataset = vec![
    "CCTGCGGAAGTCCCACTAAT",
    "CCATCGGTAGATATCCATTT",
    "CCACCCTCGTTGGGAACCTG",
];

assert_eq!(parse_fasta_dataset(fasta_dataset).unwrap(), expected_dataset);

Modules

cons

Module for Consensus and Profile

constants

Module for constants

dna

Module for Counting DNA Nucleotides

fib

Module for Rabbits and Recurrence Relations, Mortal Fibonacci Rabbits

gc

Module for Computing GC Content

hamm

Module for Counting Point Mutations

iprb

Module for Mendel's First Law

prot

Module for Translating RNA into Protein, Inferring mRNA from Protein, Calculating Protein Mass

revc

Module for Complementing a Strand of DNA

rna

Module for Transcribing DNA into RNA

subs

Module for Finding a Motif in DNA

utils

Module with useful utilities

Enums

RosalindError

Type Definitions

RosalindResult

Unified return type for all modules and methods of rosalind library