void DindelUtil::doMultipleReadHaplotypeAlignment(const std::vector<DindelRead> & dReads, const StringVector & haplotypes) { // globally align haplotypes to the first haplotype (arbitrary) assert(haplotypes.size()>0); for (size_t h = 0; h < haplotypes.size(); ++h) { std::cout << "ALIGNING EVERYTHING AGAINST HAPLOTYPE " << h << "\n"; MultipleAlignment ma; const std::string rootSequence = haplotypes[h]; ma.addBaseSequence("root", rootSequence, ""); std::string hid; for(size_t j = 0; j < haplotypes.size(); j++) { std::stringstream ss; if (j!=h) ss << "haplotype-" << j; else ss << "HAPLOTYPE-" << j; SequenceOverlap o = Overlapper::computeOverlap(rootSequence, haplotypes[j]); ma.addOverlap(ss.str(), haplotypes[j], "", o); } for(size_t r = 0; r < dReads.size(); ++r) { std::stringstream ss; if (r<dReads.size()/2) ss << "read-" << r << "(" << dReads[r].getID() << ")"; else ss << "MATE read-" << r; SequenceOverlap o = Overlapper::computeOverlap(rootSequence, dReads[r].getSequence()); ma.addOverlap(ss.str(), dReads[r].getSequence(), "", o); } ma.print(100000); } }
bool OverlapHaplotypeBuilder::buildInitialGraph(const StringVector& reads) { PROFILE_FUNC("OverlapHaplotypeBuilder::buildInitialGraph") // Compute initial ordering of reads based on the position of the // starting kmer sequence. If the starting kmer was corrected out // of a read, it is discarded. StringVector ordered_reads; orderReadsInitial(m_initial_kmer_string, reads, &ordered_reads); if(ordered_reads.size() < m_parameters.minDiscoveryCount) return false; #ifdef SHOW_MULTIPLE_ALIGNMENT //DEBUG print MA MultipleAlignment ma = buildMultipleAlignment(ordered_reads); ma.print(200); #endif // Insert initial reads into graph for(size_t i = 0; i < ordered_reads.size(); ++i) insertVertexIntoGraph("seed-", ordered_reads[i]); return true; }