Thomas 2 سال پیش
والد
کامیت
103f3dd6d3
1فایلهای تغییر یافته به همراه22 افزوده شده و 11 حذف شده
  1. 22 11
      src/lib.rs

+ 22 - 11
src/lib.rs

@@ -64,6 +64,12 @@ impl fmt::Display for ContigRef {
                 format!("{}<->{}", mapping_to_string(a), mappings_to_string(v))
             }
             ContigRef::Ambigous(v) => format!("{}", mappings_to_string(v)),
+            ContigRef::ChimericTriple((a, b, c)) => format!(
+                "{}<->{}<->{}",
+                mapping_to_string(a),
+                mapping_to_string(b),
+                mapping_to_string(c)
+            ),
         };
         fmt.write_str(&str).unwrap();
 
@@ -78,15 +84,15 @@ impl ContigRef {
             ContigRef::Unique(_) => None,
             ContigRef::Chimeric((a, b)) => {
                 if a.target_name == b.target_name {
-                    let chr = a.target_name.clone().unwrap_or(uk);
+                    let chr = a.target_name.clone().unwrap_or(uk.clone());
                     let del_start = a.target_end;
                     let del_end = b.target_start;
                     let hgvs = format!("{chr}:{del_start}_{del_end}");
                     Some(hgvs)
                 } else {
-                    let a_chr = a.target_name.clone().unwrap_or(uk);
+                    let a_chr = a.target_name.clone().unwrap_or(uk.clone());
                     let a_bp = a.target_end;
-                    let b_chr = b.target_name.clone().unwrap_or(uk);
+                    let b_chr = b.target_name.clone().unwrap_or(uk.clone());
                     let b_bp = b.target_end;
                     let hgvs = format!("{a_chr}:{a_bp}delins[{b_chr}:{b_bp}]");
                     Some(hgvs)
@@ -102,27 +108,27 @@ impl ContigRef {
                 let (bp_a_1, bp_a_2) = if a.query_end <= b.query_end {
                     // TODO add inserted nt
                     (
-                        (a.target_name.clone().unwrap_or(uk), a.target_end),
-                        (b.target_name.clone().unwrap_or(uk), b.target_start),
+                        (a.target_name.clone().unwrap_or(uk.clone()), a.target_end),
+                        (b.target_name.clone().unwrap_or(uk.clone()), b.target_start),
                     )
                 } else {
                     let diff = a.query_end - b.query_start;
                     (
-                        (a.target_name.clone().unwrap_or(uk), a.target_end),
-                        (b.target_name.clone().unwrap_or(uk), b.target_start + diff),
+                        (a.target_name.clone().unwrap_or(uk.clone()), a.target_end),
+                        (b.target_name.clone().unwrap_or(uk.clone()), b.target_start + diff),
                     )
                 };
                 let (bp_b_1, bp_b_2) = if b.query_end <= c.query_end {
                     // TODO add inserted nt
                     (
-                        (b.target_name.clone().unwrap_or(uk), b.target_end),
-                        (c.target_name.clone().unwrap_or(uk), c.target_start),
+                        (b.target_name.clone().unwrap_or(uk.clone()), b.target_end),
+                        (c.target_name.clone().unwrap_or(uk.clone()), c.target_start),
                     )
                 } else {
                     let diff = b.query_end - c.query_start;
                     (
-                        (b.target_name.clone().unwrap_or(uk), b.target_end),
-                        (c.target_name.clone().unwrap_or(uk), c.target_start + diff),
+                        (b.target_name.clone().unwrap_or(uk.clone()), b.target_end),
+                        (c.target_name.clone().unwrap_or(uk.clone()), c.target_start + diff),
                     )
                 };
                 if bp_a_1.0 == bp_b_2.0 {
@@ -197,6 +203,11 @@ pub fn get_ref_pos(mappings: Vec<Mapping>) -> Result<ContigRef> {
             }
             if first.len() == 1 && last.len() == 1 {
                 if grouped.len() == 1 {
+                    return Ok(ContigRef::ChimericTriple((
+                        first.get(0).unwrap().clone(),
+                        grouped.get(0).unwrap().get(0).unwrap().clone(),
+                        last.get(0).unwrap().clone(),
+                    )));
                 } else {
                     return Ok(ContigRef::ChimericMultiple((
                         first.get(0).unwrap().clone(),