// Check that all the strings in the vector align to the same coordinates // of the passed in sequence bool HapgenUtil::checkAlignmentsAreConsistent(const std::string& refString, const StringVector& queries) { if(queries.empty()) return true; // Perform local alignments of each query to the refString LocalAlignmentResultVector alignments; for(size_t i = 0; i < queries.size(); ++i) alignments.push_back(StdAlnTools::localAlignment(refString, queries[i])); size_t i = 0; for(size_t j = 1; j < alignments.size(); ++j) { if(alignments[i].targetStartIndex != alignments[j].targetStartIndex || alignments[j].targetEndIndex != alignments[j].targetEndIndex) { std::cerr << "Warning: inconsistent alignments found for haplotype realignment\n"; std::cerr << "A[" << i << "]: " << alignments[i] << "\n"; std::cerr << "A[" << j << "]: " << alignments[j] << "\n"; return false; } } return true; }
// Align a bunch of reads locally to a sequence LocalAlignmentResultVector HapgenUtil::alignReadsLocally(const std::string& target, const SeqItemVector& reads) { LocalAlignmentResultVector results; for(size_t i = 0; i < reads.size(); ++i) { LocalAlignmentResult fwdAR = StdAlnTools::localAlignment(target, reads[i].seq.toString()); LocalAlignmentResult rcAR = StdAlnTools::localAlignment(target, reverseComplement(reads[i].seq.toString())); results.push_back(fwdAR.score > rcAR.score ? fwdAR : rcAR); } return results; }