1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
use utils::IntoTextIterator;
fn gcn_content<'a, I: IntoTextIterator<'a>>(sequence: I, step: usize) -> f32 {
let mut l = 0f32;
let mut count = 0.0;
for (i, &n) in sequence.into_iter().enumerate() {
if i % step == 0 {
count += match n {
b'c' | b'g' | b'G' | b'C' => 1f32,
_ => 0f32,
};
}
l = i as f32;
}
count / (l + 1f32)
}
pub fn gc_content<'a, I: IntoTextIterator<'a>>(sequence: I) -> f32 {
gcn_content(sequence, 1usize)
}
pub fn gc3_content<'a, I: IntoTextIterator<'a>>(sequence: I) -> f32 {
gcn_content(sequence, 3usize)
}