(BloomFilterDeBruijnGraph graph,
ArrayList<Kmer> leftKmers,
ArrayList<Kmer> rightKmers,
int bound,
int lookahead,
float maxCovGradient,
boolean rescue,
float minKmerCov)
| 1147 | } |
| 1148 | |
| 1149 | public static ArrayList<Kmer> getSimilarCoveragePath(BloomFilterDeBruijnGraph graph, |
| 1150 | ArrayList<Kmer> leftKmers, |
| 1151 | ArrayList<Kmer> rightKmers, |
| 1152 | int bound, |
| 1153 | int lookahead, |
| 1154 | float maxCovGradient, |
| 1155 | boolean rescue, |
| 1156 | float minKmerCov) { |
| 1157 | |
| 1158 | HashSet<Kmer> leftKmersSet = new HashSet<>(leftKmers); |
| 1159 | HashSet<Kmer> rightKmersSet = new HashSet<>(rightKmers); |
| 1160 | |
| 1161 | Kmer left = leftKmers.get(leftKmers.size()-1); |
| 1162 | Kmer right = rightKmers.get(0); |
| 1163 | |
| 1164 | float leftCoverageThreshold = getMinimumKmerCoverage(leftKmers) * maxCovGradient; |
| 1165 | float rightCoverageThreshold = getMinimumKmerCoverage(rightKmers) * maxCovGradient; |
| 1166 | |
| 1167 | int k = graph.getK(); |
| 1168 | int numHash = graph.getMaxNumHash(); |
| 1169 | |
| 1170 | HashSet<Kmer> leftPathKmers = new HashSet<>(bound); |
| 1171 | |
| 1172 | /* extend right */ |
| 1173 | ArrayDeque<Kmer> leftPath = new ArrayDeque<>(bound); |
| 1174 | Kmer best; |
| 1175 | ArrayDeque<Kmer> neighbors = new ArrayDeque<>(4); |
| 1176 | |
| 1177 | best = left; |
| 1178 | |
| 1179 | for (int depth=0; depth < bound; ++depth) { |
| 1180 | best.getSuccessors(k, numHash, graph, neighbors, minKmerCov); |
| 1181 | |
| 1182 | if (neighbors.isEmpty()) { |
| 1183 | break; |
| 1184 | } |
| 1185 | else { |
| 1186 | if (neighbors.size() == 1) { |
| 1187 | best = neighbors.pop(); |
| 1188 | } |
| 1189 | else { |
| 1190 | Iterator<Kmer> itr = neighbors.iterator(); |
| 1191 | while (itr.hasNext()) { |
| 1192 | if (itr.next().count < leftCoverageThreshold) { |
| 1193 | itr.remove(); |
| 1194 | } |
| 1195 | } |
| 1196 | |
| 1197 | if (neighbors.isEmpty()) { |
| 1198 | break; |
| 1199 | } |
| 1200 | else if (neighbors.size() == 1) { |
| 1201 | best = neighbors.pop(); |
| 1202 | |
| 1203 | float c = maxCovGradient * best.count; |
| 1204 | if (c < leftCoverageThreshold) { |
| 1205 | leftCoverageThreshold = c; |
| 1206 | } |
nothing calls this directly
no test coverage detected