Thomas 2 years ago
parent
commit
9a50df7d0a
1 changed files with 52 additions and 0 deletions
  1. 52 0
      src/lib.rs

+ 52 - 0
src/lib.rs

@@ -572,6 +572,58 @@ impl NeoContig {
             println!("{}", String::from_utf8_lossy(&line));
         }
     }
+    
+    pub fn get_hgvs(self, centromere_pos: Vec<(String, i64)>) -> Option<String> {
+        fn get_hgvs_part(aln: Sam, centro_pos: i64) -> String {
+            let mut part = "".to_string();
+            if aln.ref_pos < centro_pos {
+                part = format!(
+                    "pter_{}{}",
+                    aln.ref_pos,
+                    if aln.ref_range.start < aln.ref_range.end { "" } else { "inv" },
+                )
+            } else {
+                part = format!(
+                    "{}_qter{}",
+                    aln.ref_pos,
+                    if aln.ref_range.start < aln.ref_range.end { "" } else { "inv" },
+                )
+            }
+            part
+        }
+        
+        // only if chimeric 
+        let mut res = None;
+        if self.alignments.len() == 2 {
+            let mut a_part = "".to_string();
+            let mut b_part = "".to_string();
+
+            centromere_pos.iter().for_each(|(contig, pos)| {
+                if *contig == self.alignments[0].ref_name {
+                    a_part = get_hgvs_part(self.alignments[0].clone(), *pos);
+                }
+                if *contig == self.alignments[1].ref_name {
+                    b_part = get_hgvs_part(self.alignments[1].clone(), *pos);
+                }
+            });
+
+            let mut added_nt = self.alignments[0].sequence[
+                self.alignments[0].query_range.end..(self.alignments[1].query_range.start - 1)
+            ].to_string();
+
+            if added_nt.len() > 0 { added_nt.push(';'); }
+
+            res = Some(format!(
+                "{}:g.{}[{}{}:g.{}]",
+                self.alignments[0].ref_name,
+                a_part,
+                added_nt,
+                self.alignments[1].ref_name,
+                b_part
+            ));
+        }
+        res
+    }
 }
 pub struct Fasta {
     fa: IndexedFasta