(String outFastaPath)
| 3347 | } |
| 3348 | |
| 3349 | public void extractSimplePaths(String outFastaPath) throws IOException { |
| 3350 | HashSet<String> containedSet = populateGraphFromOverlaps(); |
| 3351 | |
| 3352 | Timer timer = new Timer(); |
| 3353 | |
| 3354 | if (!containedSet.isEmpty()) { |
| 3355 | printMessage("contained reads: " + NumberFormat.getInstance().format(containedSet.size())); |
| 3356 | } |
| 3357 | |
| 3358 | Set<String> vertexSet = graph.vertexSet(); |
| 3359 | if (!vertexSet.isEmpty()) { |
| 3360 | int numDovetailReads = vertexSet.size(); |
| 3361 | if (!stranded) { |
| 3362 | numDovetailReads /= 2; |
| 3363 | } |
| 3364 | printMessage("dovetail reads: " + NumberFormat.getInstance().format(numDovetailReads)); |
| 3365 | } |
| 3366 | |
| 3367 | Set<OverlapEdge> edgeSet = graph.edgeSet(); |
| 3368 | |
| 3369 | if (edgeSet.size() > 1) { |
| 3370 | //printGraph(); |
| 3371 | printMessage("G: |V|=" + NumberFormat.getInstance().format(vertexSet.size()) + " |E|=" + NumberFormat.getInstance().format(edgeSet.size())); |
| 3372 | |
| 3373 | ArrayDeque<String> removedVertexes = removeRedundantNodes(); |
| 3374 | if (stranded) { |
| 3375 | for (String vid : removedVertexes) { |
| 3376 | containedSet.add(getVertexName(vid)); |
| 3377 | } |
| 3378 | } |
| 3379 | else { |
| 3380 | for (String vid : removedVertexes) { |
| 3381 | if (!graph.containsVertex(getReverseComplementID(vid))) { |
| 3382 | containedSet.add(getVertexName(vid)); |
| 3383 | } |
| 3384 | } |
| 3385 | } |
| 3386 | |
| 3387 | removeTransitiveEdges(); |
| 3388 | |
| 3389 | //printGraph(); |
| 3390 | printMessage("G: |V|=" + NumberFormat.getInstance().format(vertexSet.size()) + " |E|=" + NumberFormat.getInstance().format(edgeSet.size())); |
| 3391 | writeGraph(this.seqFastaPath + ".dot.gz"); |
| 3392 | } |
| 3393 | |
| 3394 | HashMap<String, BitSequence> dovetailReadSeqs = new HashMap<>(vertexSet.size()); |
| 3395 | FastaReader fr = new FastaReader(seqFastaPath); |
| 3396 | FastaWriter fw = new FastaWriter(outFastaPath, false); |
| 3397 | long seqID = 0; |
| 3398 | long originalNumSeq = 0; |
| 3399 | while (fr.hasNext()) { |
| 3400 | ++originalNumSeq; |
| 3401 | String[] nameSeq = fr.nextWithName(); |
| 3402 | String name = nameSeq[0]; |
| 3403 | if (vertexSet.contains(name + '+') || (!stranded && vertexSet.contains(name + '-'))) { |
| 3404 | dovetailReadSeqs.put(name, new BitSequence(nameSeq[1])); |
| 3405 | } |
| 3406 | else if (!containedSet.contains(name)) { |
no test coverage detected