// Attempt to resolve a predicted overlap between s1 and s2 // Returns true if there overlap was found and the overhang of s2 is placed in outString bool ScaffoldRecord::overlapResolve(const ResolveParams& params, const std::string& s1, const std::string& s2, const ScaffoldLink& link, std::string& outString) const { // Attempt to find an overlap between these sequences int expectedOverlap = -1 * link.distance; // If the maximum overlap was not set, set it to the expected overlap * 3 stddev int upperBound = 0; if(params.maxOverlap == -1) upperBound = static_cast<int>(expectedOverlap + 3.0f * link.stdDev); else upperBound = params.maxOverlap; // Calculate the best match Match match; bool overlapFound = OverlapTools::boundedOverlapDP(s1, s2, params.minOverlap, upperBound, params.maxErrorRate, match); if(overlapFound) { SeqCoord overlapCoord = match.coord[1]; SeqCoord overhangCoord = overlapCoord.complement(); outString = overhangCoord.getSubstring(s2); return true; } else { return false; } }
// Attempt to resolve a predicted overlap between s1 and s2 // Returns true if there overlap was found and the overhang of s2 is placed in outString bool ScaffoldRecord::overlapResolve(const ResolveParams& params, const std::string& s1, const std::string& s2, const ScaffoldLink& link, std::string& outString) const { // Attempt to find an overlap between these sequences int expectedOverlap = -1 * link.distance; #ifdef DEBUGRESOLVE std::cout << "Attempting overlap resolve of link to " << link.endpointID << " expected distance: " << link.distance << " orientation: " << link.edgeData.getComp() << "\n"; #endif // If the maximum overlap was not set, set it to the expected overlap * 3 stddev int upperBound = 0; if(params.maxOverlap == -1) upperBound = static_cast<int>(expectedOverlap + 3.0f * link.stdDev); else upperBound = params.maxOverlap; // Calculate the best match Match match; bool overlapFound = OverlapTools::boundedOverlapDP(s1, s2, params.minOverlap, upperBound, params.maxErrorRate, match); if(overlapFound) { #ifdef DEBUGRESOLVE std::cout << "Overlap found, length: " << match.coord[1].length() << "\n"; #endif SeqCoord overlapCoord = match.coord[1]; SeqCoord overhangCoord = overlapCoord.complement(); outString = overhangCoord.getSubstring(s2); return true; } else { return false; } }