Skip to content

Commit dfef283

Browse files
Merge pull request #36 from pangenome/fix_target_in_paf_bedpe
Fix target id
2 parents 737ede4 + 2d85d37 commit dfef283

File tree

2 files changed

+17
-15
lines changed

2 files changed

+17
-15
lines changed

src/impg.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,7 @@ impl Impg {
322322
Interval {
323323
first: range_start,
324324
last: range_end,
325-
metadata: 0
325+
metadata: target_id
326326
}
327327
));
328328
if let Some(tree) = self.trees.get(&target_id) {
@@ -346,7 +346,7 @@ impl Impg {
346346
Interval {
347347
first: adjusted_target_start,
348348
last: adjusted_target_end,
349-
metadata: 0
349+
metadata: target_id
350350
}
351351
);
352352
results.push(adjusted_interval);
@@ -375,7 +375,7 @@ impl Impg {
375375
Interval {
376376
first: range_start,
377377
last: range_end,
378-
metadata: 0
378+
metadata: target_id
379379
}
380380
));
381381
// Initialize stack with first query
@@ -393,13 +393,13 @@ impl Impg {
393393
.or_default()
394394
.insert((range_start, range_end));
395395

396-
while let Some((current_target, current_start, current_end)) = stack.pop() {
397-
if let Some(tree) = self.trees.get(&current_target) {
398-
tree.query(current_start, current_end, |interval| {
396+
while let Some((current_target_id, current_target_start, current_target_end)) = stack.pop() {
397+
if let Some(tree) = self.trees.get(&current_target_id) {
398+
tree.query(current_target_start, current_target_end, |interval| {
399399
let metadata = &interval.metadata;
400400
let (adjusted_query_start, adjusted_query_end, adjusted_cigar, adjusted_target_start, adjusted_target_end) =
401401
project_target_range_through_alignment(
402-
(current_start, current_end),
402+
(current_target_start, current_target_end),
403403
(metadata.target_start, metadata.target_end, metadata.query_start, metadata.query_end, metadata.strand),
404404
&metadata.get_cigar_ops(&self.paf_file, self.paf_gzi_index.as_ref())
405405
);
@@ -415,13 +415,13 @@ impl Impg {
415415
Interval {
416416
first: adjusted_target_start,
417417
last: adjusted_target_end,
418-
metadata: 0
418+
metadata: current_target_id
419419
}
420420
);
421421
results.push(adjusted_interval);
422422

423423
// Only add non-overlapping portions to the stack for further exploration
424-
if metadata.query_id != current_target {
424+
if metadata.query_id != current_target_id {
425425
let ranges = visited_ranges.entry(metadata.query_id)
426426
.or_insert_with(|| SortedRanges::new()); // Note the closure here
427427

src/main.rs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ fn main() -> io::Result<()> {
127127

128128
if output_paf {
129129
// Skip the first element (the input range) for PAF
130-
output_results_paf(&impg, results.into_iter().skip(1), &target_name, None);
130+
output_results_paf(&impg, results.into_iter().skip(1), None);
131131
} else {
132132
output_results_bed(&impg, results);
133133
}
@@ -148,9 +148,9 @@ fn main() -> io::Result<()> {
148148
// Skip the first element (the input range) for both PAF and BEDPE
149149
let results_iter = results.into_iter().skip(1);
150150
if output_paf {
151-
output_results_paf(&impg, results_iter, &target_name, name);
151+
output_results_paf(&impg, results_iter, name);
152152
} else {
153-
output_results_bedpe(&impg, results_iter, &target_name, name);
153+
output_results_bedpe(&impg, results_iter, name);
154154
}
155155
}
156156
} else {
@@ -315,12 +315,13 @@ fn output_results_bed(impg: &Impg, results: Vec<AdjustedInterval>) {
315315
}
316316
}
317317

318-
fn output_results_bedpe<I>(impg: &Impg, results: I, target_name: &str, name: Option<String>)
318+
fn output_results_bedpe<I>(impg: &Impg, results: I, name: Option<String>)
319319
where
320320
I: Iterator<Item = AdjustedInterval>
321321
{
322322
for (overlap_query, _, overlap_target) in results {
323323
let query_name = impg.seq_index.get_name(overlap_query.metadata).unwrap();
324+
let target_name = impg.seq_index.get_name(overlap_target.metadata).unwrap();
324325
let (first, last, strand) = if overlap_query.first <= overlap_query.last {
325326
(overlap_query.first, overlap_query.last, '+')
326327
} else {
@@ -333,20 +334,21 @@ where
333334
}
334335
}
335336

336-
fn output_results_paf<I>(impg: &Impg, results: I, target_name: &str, name: Option<String>)
337+
fn output_results_paf<I>(impg: &Impg, results: I, name: Option<String>)
337338
where
338339
I: Iterator<Item = AdjustedInterval>
339340
{
340-
let target_length = impg.seq_index.get_len_from_id(impg.seq_index.get_id(target_name).unwrap()).unwrap();
341341
for (overlap_query, cigar, overlap_target) in results {
342342
let query_name = impg.seq_index.get_name(overlap_query.metadata).unwrap();
343+
let target_name = impg.seq_index.get_name(overlap_target.metadata).unwrap();
343344
let (first, last, strand) = if overlap_query.first <= overlap_query.last {
344345
(overlap_query.first, overlap_query.last, '+')
345346
} else {
346347
(overlap_query.last, overlap_query.first, '-')
347348
};
348349

349350
let query_length = impg.seq_index.get_len_from_id(overlap_query.metadata).unwrap();
351+
let target_length = impg.seq_index.get_len_from_id(overlap_target.metadata).unwrap();
350352

351353
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| {
352354
let len = op.len();

0 commit comments

Comments
 (0)