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