(String outFastaPath)
| 4058 | } |
| 4059 | |
| 4060 | public boolean layoutBackbones(String outFastaPath) throws IOException { |
| 4061 | HashSet<String> containedSet = populateGraphFromOverlaps(); |
| 4062 | |
| 4063 | if (!containedSet.isEmpty()) { |
| 4064 | printMessage("contained reads: " + NumberFormat.getInstance().format(containedSet.size())); |
| 4065 | } |
| 4066 | |
| 4067 | Set<String> vertexSet = graph.vertexSet(); |
| 4068 | if (!vertexSet.isEmpty()) { |
| 4069 | int numDovetailReads = vertexSet.size(); |
| 4070 | if (!stranded) { |
| 4071 | numDovetailReads = numDovetailReads/2; |
| 4072 | } |
| 4073 | printMessage("dovetail reads: " + NumberFormat.getInstance().format(numDovetailReads)); |
| 4074 | } |
| 4075 | |
| 4076 | Set<OverlapEdge> edgeSet = graph.edgeSet(); |
| 4077 | |
| 4078 | if (edgeSet.size() > 1) { |
| 4079 | printMessage("G: |V|=" + NumberFormat.getInstance().format(vertexSet.size()) + " |E|=" + NumberFormat.getInstance().format(edgeSet.size())); |
| 4080 | |
| 4081 | // ArrayDeque<String> redundantNodeNames = removeRedundantNodes(); |
| 4082 | // for (String n : redundantNodeNames) { |
| 4083 | // containedSet.add(getVertexName(n)); |
| 4084 | // } |
| 4085 | // |
| 4086 | // printGraph(); |
| 4087 | // numEdges = graph.edgeSet().size(); |
| 4088 | // System.out.println("G: |V|=" + NumberFormat.getInstance().format(graph.vertexSet().size()) + " |E|=" + NumberFormat.getInstance().format(numEdges)); |
| 4089 | |
| 4090 | resolveJunctions(); |
| 4091 | printMessage("G: |V|=" + NumberFormat.getInstance().format(vertexSet.size()) + " |E|=" + NumberFormat.getInstance().format(edgeSet.size())); |
| 4092 | } |
| 4093 | |
| 4094 | // extract read sequences |
| 4095 | int numVertexReads = vertexSet.size(); |
| 4096 | if (!stranded) { |
| 4097 | numVertexReads = numVertexReads/2; |
| 4098 | } |
| 4099 | |
| 4100 | HashMap<String, BitSequence> dovetailReadSeqs = new HashMap<>(numVertexReads); |
| 4101 | FastaReader fr = new FastaReader(seqFastaPath); |
| 4102 | FastaWriter fw = new FastaWriter(outFastaPath, false); |
| 4103 | long seqID = 0; |
| 4104 | long originalNumSeq = 0; |
| 4105 | while (fr.hasNext()) { |
| 4106 | ++originalNumSeq; |
| 4107 | String[] nameSeq = fr.nextWithName(); |
| 4108 | String name = nameSeq[0]; |
| 4109 | if (vertexSet.contains(name + '+')) { |
| 4110 | dovetailReadSeqs.put(name, new BitSequence(nameSeq[1])); |
| 4111 | } |
| 4112 | else if (!containedSet.contains(name)) { |
| 4113 | // this sequence either contains shorter sequences or it has no overlaps with others |
| 4114 | fw.write(Long.toString(++seqID), nameSeq[1]); |
| 4115 | } |
| 4116 | } |
| 4117 | fr.close(); |
no test coverage detected