From b67754a7787da677ed8c63baaa71b8258fc8f3d4 Mon Sep 17 00:00:00 2001 From: Andrea Cracco Date: Fri, 3 Jan 2025 21:31:41 +0100 Subject: [PATCH] Partially fix eulertigs (uncolored only) --- .../src/pipeline/compute_matchtigs.rs | 20 +++++++++++++++---- libs-crates/parallel-processor-rs | 2 +- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/crates/assembler/src/pipeline/compute_matchtigs.rs b/crates/assembler/src/pipeline/compute_matchtigs.rs index 05c1941..edbb403 100644 --- a/crates/assembler/src/pipeline/compute_matchtigs.rs +++ b/crates/assembler/src/pipeline/compute_matchtigs.rs @@ -21,6 +21,7 @@ use libmatchtigs::{ }; use libmatchtigs::{GreedytigAlgorithm, GreedytigAlgorithmConfiguration, TigAlgorithm}; use parallel_processor::phase_times_monitor::PHASES_TIMES_MONITOR; +use std::fmt::Debug; use std::ops::Deref; use std::path::PathBuf; use std::sync::Arc; @@ -37,6 +38,12 @@ struct SequenceHandle( usize, ); +impl Debug for SequenceHandle { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.debug_tuple("SequenceHandle").field(&self.1).finish() + } +} + impl SequenceHandle { fn get_sequence_handle( &self, @@ -69,7 +76,7 @@ impl PartialEq for SequenceHandle { impl Eq for SequenceHandle {} // Declare types for the graph. It may or may not make sense to have this be the same type as the iterator outputs. -#[derive(Clone)] +#[derive(Clone, Debug)] struct UnitigEdgeData { sequence_handle: SequenceHandle, forwards: bool, @@ -451,13 +458,18 @@ pub fn compute_matchtigs_thread< for edge in walk.iter().skip(1) { let edge_data = graph.edge_data(*edge); + if edge_data.is_dummy() { + previous_data = edge_data; + continue; + } + let kmer_offset = if previous_data.is_original() { 0 } else { previous_data.weight() }; - let offset = kmer_offset + k - 1; + let bases_offset = k - 1 - kmer_offset; previous_data = edge_data; @@ -470,7 +482,7 @@ pub fn compute_matchtigs_thread< let next_sequence = handle.0.as_reference(&storage.sequences_buffer); if edge_data.is_forwards() { - read_buffer.extend(next_sequence.as_bases_iter().skip(offset)); + read_buffer.extend(next_sequence.as_bases_iter().skip(bases_offset)); CX::ColorsMergeManagerType::::join_structures::( &mut final_unitig_color, &handle.1, @@ -486,7 +498,7 @@ pub fn compute_matchtigs_thread< read_buffer.extend( next_sequence .as_reverse_complement_bases_iter() - .skip(offset), + .skip(bases_offset), ); CX::ColorsMergeManagerType::::join_structures::( &mut final_unitig_color, diff --git a/libs-crates/parallel-processor-rs b/libs-crates/parallel-processor-rs index ca10db5..feb26ee 160000 --- a/libs-crates/parallel-processor-rs +++ b/libs-crates/parallel-processor-rs @@ -1 +1 @@ -Subproject commit ca10db588b3c7217aa72acf4c54c44e67856aeb7 +Subproject commit feb26ee1c3ed693f40c653889417022d75cdbf75