53 template <
typename AlignerType,
typename PipelineType>
71 const PipelineType _pipeline,
72 const AlignerType _aligner,
74 base_type( _pipeline, _aligner, _params ) {}
101 context->sink.invalidate();
112 const uint32 a_len = a_read_range.y - a_read_range.x;
117 const uint32 o_len = o_read_range.y - o_read_range.x;
130 a_optimal_score + o_optimal_score );
132 int32 target_mate_score = target_pair_score - anchor_score;
141 target_mate_score =
nvbio::max( target_mate_score, o_worst_score );
147 #if DP_REPORT_MULTIPLE
148 context->sink.set_min_score( context->min_score );
152 if (context->min_score > o_optimal_score)
171 context->read_rc = !o_fw;
172 context->read_id = read_id;
173 context->read_range = o_read_range;
177 const uint32 o_gapped_len = o_len + max_ref_gaps;
184 context->genome_end =
nvbio::min( context->genome_end, max_end );
191 context->genome_begin =
nvbio::max( context->genome_begin, min_begin );
208 (context->genome_begin == context->genome_end);
223 #if DP_REPORT_MULTIPLE
225 uint32 best_idx1, best_idx2;
227 sink.
best2( best_idx1, best_idx2, (context->read_range.y - context->read_range.x) / 2u );
237 const uint32 genome_sink2 = 0u;
246 NVBIO_CUDA_DEBUG_PRINT_IF(
base_type::m_params.debug.show_score( context->read_id, (sink.
score >= context->min_score) ),
"score opposite: %d (min[%d], mate[%u], rc[%u], pos[%u:%u], [qid %u])\n", sink.
score, context->min_score,
base_type::m_pipeline.anchor ? 0u : 1u, context->read_rc, context->genome_begin, context->genome_end, i );
253 template <
typename aligner_type,
typename pipeline_type>
255 const pipeline_type& pipeline,
256 const aligner_type aligner,
269 batch.
enact( stream, pipeline.dp_buffer_size, pipeline.dp_buffer );