|
@@ -277,7 +277,7 @@ impl SequencesGraph {
|
|
|
|
|
|
|
|
for i in 0..max_len {
|
|
for i in 0..max_len {
|
|
|
let mut acc: Vec<u8> = Vec::new();
|
|
let mut acc: Vec<u8> = Vec::new();
|
|
|
- let atcg = vec![b"A"[0], b"T"[0], b"C"[0], b"G"[0]];
|
|
|
|
|
|
|
+ let atcg = vec![b'A', b'T', b'C', b'G'];
|
|
|
let mut n_atcg = [0; 4];
|
|
let mut n_atcg = [0; 4];
|
|
|
|
|
|
|
|
ov.iter().for_each(|s|{
|
|
ov.iter().for_each(|s|{
|
|
@@ -292,7 +292,7 @@ impl SequencesGraph {
|
|
|
});
|
|
});
|
|
|
let n_base: usize = n_atcg.iter().sum();
|
|
let n_base: usize = n_atcg.iter().sum();
|
|
|
let max_base = n_atcg.iter().max().unwrap();
|
|
let max_base = n_atcg.iter().max().unwrap();
|
|
|
- let mut base = b"N"[0];
|
|
|
|
|
|
|
+ let mut base = b'N';
|
|
|
if *max_base as f32 / n_base as f32 > 0.5 {
|
|
if *max_base as f32 / n_base as f32 > 0.5 {
|
|
|
n_atcg.iter().enumerate().for_each(|(pos, n)| if n == max_base { base = atcg[pos] });
|
|
n_atcg.iter().enumerate().for_each(|(pos, n)| if n == max_base { base = atcg[pos] });
|
|
|
}
|
|
}
|
|
@@ -404,6 +404,8 @@ impl NeoContig {
|
|
|
"POS", "MAPQ", "CIGAR", "RNEXT", "PNEXT", "TLEN", "SEQ",
|
|
"POS", "MAPQ", "CIGAR", "RNEXT", "PNEXT", "TLEN", "SEQ",
|
|
|
"QUAL", "ALN"];
|
|
"QUAL", "ALN"];
|
|
|
|
|
|
|
|
|
|
+ println!("BWA exec");
|
|
|
|
|
+ println!(" {}", format!("\">sequence_{}\n{}\"", self.name.to_string(), self.contig));
|
|
|
let stdout = cmd!("echo", "-e", format!("\">sequence_{}\n{}\"", self.name.to_string(), self.contig))
|
|
let stdout = cmd!("echo", "-e", format!("\">sequence_{}\n{}\"", self.name.to_string(), self.contig))
|
|
|
.pipe(cmd!("bwa", "mem", fasta_ref_path, "-"))
|
|
.pipe(cmd!("bwa", "mem", fasta_ref_path, "-"))
|
|
|
.stdout_capture()
|
|
.stdout_capture()
|
|
@@ -463,14 +465,18 @@ impl NeoContig {
|
|
|
let mut filtered_ref: Vec<u8> = self.alignments[0].ref_sequence
|
|
let mut filtered_ref: Vec<u8> = self.alignments[0].ref_sequence
|
|
|
.as_bytes()
|
|
.as_bytes()
|
|
|
.iter().enumerate()
|
|
.iter().enumerate()
|
|
|
- .filter(|(i, _)| ref_cigar[*i] == b"M"[0])
|
|
|
|
|
|
|
+ .filter(|(i, _)| ref_cigar[*i] == b'M')
|
|
|
.map(|(_, c)| *c)
|
|
.map(|(_, c)| *c)
|
|
|
.collect();
|
|
.collect();
|
|
|
|
|
+
|
|
|
l.append(&mut filtered_ref);
|
|
l.append(&mut filtered_ref);
|
|
|
lines.push(l);
|
|
lines.push(l);
|
|
|
|
|
|
|
|
// match pipes
|
|
// match pipes
|
|
|
- let mut match_pipes = self.alignments[0].ref_cigar.as_bytes().iter().filter(|c| **c == b"M"[0]).map(|_| b"|"[0])
|
|
|
|
|
|
|
+ let mut match_pipes = self.alignments[0].ref_cigar
|
|
|
|
|
+ .as_bytes().iter()
|
|
|
|
|
+ .filter(|c| **c == b'M')
|
|
|
|
|
+ .map(|_| b'|')
|
|
|
.collect::<Vec<u8>>();
|
|
.collect::<Vec<u8>>();
|
|
|
|
|
|
|
|
let mut l = ref_spaces.clone();
|
|
let mut l = ref_spaces.clone();
|
|
@@ -540,7 +546,7 @@ impl NeoContig {
|
|
|
let mut filtered_ref: Vec<u8> = self.alignments[1].ref_sequence
|
|
let mut filtered_ref: Vec<u8> = self.alignments[1].ref_sequence
|
|
|
.as_bytes()
|
|
.as_bytes()
|
|
|
.iter().enumerate()
|
|
.iter().enumerate()
|
|
|
- .filter(|(i, _)| ref_cigar[*i] == b"M"[0])
|
|
|
|
|
|
|
+ .filter(|(i, _)| ref_cigar[*i] == b'M')
|
|
|
.map(|(_, c)| *c)
|
|
.map(|(_, c)| *c)
|
|
|
.collect();
|
|
.collect();
|
|
|
l.append(&mut filtered_ref);
|
|
l.append(&mut filtered_ref);
|
|
@@ -584,12 +590,12 @@ fn is_reverse (flag: i32) -> bool {
|
|
|
fn matched_range (cigar: &str, flag: &i32, matched_seq: &mut str) -> (Range<usize>, Range<usize>, String) {
|
|
fn matched_range (cigar: &str, flag: &i32, matched_seq: &mut str) -> (Range<usize>, Range<usize>, String) {
|
|
|
let mut n_head_to_rm = 0;
|
|
let mut n_head_to_rm = 0;
|
|
|
for c in matched_seq.as_bytes().to_vec().iter() {
|
|
for c in matched_seq.as_bytes().to_vec().iter() {
|
|
|
- if *c == b"N"[0] { n_head_to_rm += 1 } else { break; }
|
|
|
|
|
|
|
+ if *c == b'N' { n_head_to_rm += 1 } else { break; }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
let mut n_trail_to_rm = 0;
|
|
let mut n_trail_to_rm = 0;
|
|
|
for c in matched_seq.as_bytes().to_vec().iter().rev() {
|
|
for c in matched_seq.as_bytes().to_vec().iter().rev() {
|
|
|
- if *c == b"N"[0] { n_trail_to_rm += 1 } else { break; }
|
|
|
|
|
|
|
+ if *c == b'N' { n_trail_to_rm += 1 } else { break; }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
let all_op = vec!["M", "I", "D", "N", "S", "=", "X", "H", "P"];
|
|
let all_op = vec!["M", "I", "D", "N", "S", "=", "X", "H", "P"];
|