From ad4c62ae0dd9b2ad9c2a89ff6aeaef3f0eadae62 Mon Sep 17 00:00:00 2001 From: AndreaGuarracino Date: Sat, 28 Dec 2024 18:30:52 -0600 Subject: [PATCH] fix target_id --- src/impg.rs | 18 +++++++++--------- src/main.rs | 14 ++++++++------ 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/src/impg.rs b/src/impg.rs index fccb0e2..414b3e2 100644 --- a/src/impg.rs +++ b/src/impg.rs @@ -322,7 +322,7 @@ impl Impg { Interval { first: range_start, last: range_end, - metadata: 0 + metadata: target_id } )); if let Some(tree) = self.trees.get(&target_id) { @@ -346,7 +346,7 @@ impl Impg { Interval { first: adjusted_target_start, last: adjusted_target_end, - metadata: 0 + metadata: target_id } ); results.push(adjusted_interval); @@ -375,7 +375,7 @@ impl Impg { Interval { first: range_start, last: range_end, - metadata: 0 + metadata: target_id } )); // Initialize stack with first query @@ -393,13 +393,13 @@ impl Impg { .or_default() .insert((range_start, range_end)); - while let Some((current_target, current_start, current_end)) = stack.pop() { - if let Some(tree) = self.trees.get(¤t_target) { - tree.query(current_start, current_end, |interval| { + while let Some((current_target_id, current_target_start, current_target_end)) = stack.pop() { + if let Some(tree) = self.trees.get(¤t_target_id) { + tree.query(current_target_start, current_target_end, |interval| { let metadata = &interval.metadata; let (adjusted_query_start, adjusted_query_end, adjusted_cigar, adjusted_target_start, adjusted_target_end) = project_target_range_through_alignment( - (current_start, current_end), + (current_target_start, current_target_end), (metadata.target_start, metadata.target_end, metadata.query_start, metadata.query_end, metadata.strand), &metadata.get_cigar_ops(&self.paf_file, self.paf_gzi_index.as_ref()) ); @@ -415,13 +415,13 @@ impl Impg { Interval { first: adjusted_target_start, last: adjusted_target_end, - metadata: 0 + metadata: current_target_id } ); results.push(adjusted_interval); // Only add non-overlapping portions to the stack for further exploration - if metadata.query_id != current_target { + if metadata.query_id != current_target_id { let ranges = visited_ranges.entry(metadata.query_id) .or_default(); // Note the closure here diff --git a/src/main.rs b/src/main.rs index 1fead22..51b351a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -127,7 +127,7 @@ fn main() -> io::Result<()> { if output_paf { // Skip the first element (the input range) for PAF - output_results_paf(&impg, results.into_iter().skip(1), &target_name, None); + output_results_paf(&impg, results.into_iter().skip(1), None); } else { output_results_bed(&impg, results); } @@ -148,9 +148,9 @@ fn main() -> io::Result<()> { // Skip the first element (the input range) for both PAF and BEDPE let results_iter = results.into_iter().skip(1); if output_paf { - output_results_paf(&impg, results_iter, &target_name, name); + output_results_paf(&impg, results_iter, name); } else { - output_results_bedpe(&impg, results_iter, &target_name, name); + output_results_bedpe(&impg, results_iter, name); } } } else { @@ -315,12 +315,13 @@ fn output_results_bed(impg: &Impg, results: Vec) { } } -fn output_results_bedpe(impg: &Impg, results: I, target_name: &str, name: Option) +fn output_results_bedpe(impg: &Impg, results: I, name: Option) where I: Iterator { for (overlap_query, _, overlap_target) in results { let query_name = impg.seq_index.get_name(overlap_query.metadata).unwrap(); + let target_name = impg.seq_index.get_name(overlap_target.metadata).unwrap(); let (first, last, strand) = if overlap_query.first <= overlap_query.last { (overlap_query.first, overlap_query.last, '+') } else { @@ -333,13 +334,13 @@ where } } -fn output_results_paf(impg: &Impg, results: I, target_name: &str, name: Option) +fn output_results_paf(impg: &Impg, results: I, name: Option) where I: Iterator { - let target_length = impg.seq_index.get_len_from_id(impg.seq_index.get_id(target_name).unwrap()).unwrap(); for (overlap_query, cigar, overlap_target) in results { let query_name = impg.seq_index.get_name(overlap_query.metadata).unwrap(); + let target_name = impg.seq_index.get_name(overlap_target.metadata).unwrap(); let (first, last, strand) = if overlap_query.first <= overlap_query.last { (overlap_query.first, overlap_query.last, '+') } else { @@ -347,6 +348,7 @@ where }; let query_length = impg.seq_index.get_len_from_id(overlap_query.metadata).unwrap(); + let target_length = impg.seq_index.get_len_from_id(overlap_target.metadata).unwrap(); let (matches, mismatches, insertions, inserted_bp, deletions, deleted_bp, block_len) = cigar.iter().fold((0, 0, 0, 0, 0, 0, 0), |(m, mm, i, i_bp, d, d_bp, bl), op| { let len = op.len();