(BloomFilterDeBruijnGraph graph,
ArrayList<Kmer> leftKmers,
ArrayList<Kmer> rightKmers,
int bound,
int lookahead,
float maxCovGradient,
int maxTipLen,
int maxIndelLen,
float minPercentIdentity,
float minKmerCov)
| 890 | } |
| 891 | |
| 892 | public static ArrayList<Kmer> join(BloomFilterDeBruijnGraph graph, |
| 893 | ArrayList<Kmer> leftKmers, |
| 894 | ArrayList<Kmer> rightKmers, |
| 895 | int bound, |
| 896 | int lookahead, |
| 897 | float maxCovGradient, |
| 898 | int maxTipLen, |
| 899 | int maxIndelLen, |
| 900 | float minPercentIdentity, |
| 901 | float minKmerCov) { |
| 902 | int k = graph.getK(); |
| 903 | int numHash = graph.getMaxNumHash(); |
| 904 | //int pkd = graph.getReadPairedKmerDistance(); |
| 905 | |
| 906 | HashSet<Kmer> leftKmersSet = new HashSet<>(leftKmers); |
| 907 | HashSet<Kmer> rightKmersSet = new HashSet<>(rightKmers); |
| 908 | |
| 909 | |
| 910 | Kmer right = rightKmers.get(0); |
| 911 | |
| 912 | float leftCoverageThreshold = Math.max(minKmerCov, getMinimumKmerCoverage(leftKmers) * maxCovGradient); |
| 913 | |
| 914 | ArrayList<Kmer> leftPath = new ArrayList<>(leftKmers); |
| 915 | |
| 916 | int maxSize = bound + leftPath.size(); |
| 917 | while (leftPath.size() < maxSize) { |
| 918 | ArrayDeque<Kmer> neighbors = leftPath.get(leftPath.size()-1).getSuccessors(k, numHash, graph, minKmerCov); |
| 919 | |
| 920 | // filter by coverage |
| 921 | if (neighbors.isEmpty()) { |
| 922 | break; |
| 923 | } |
| 924 | else { |
| 925 | Kmer best = null; |
| 926 | |
| 927 | if (neighbors.size() == 1) { |
| 928 | best = neighbors.pop(); |
| 929 | leftCoverageThreshold = Math.max(minKmerCov, Math.min(leftCoverageThreshold, best.count*maxCovGradient)); |
| 930 | } |
| 931 | else { |
| 932 | Iterator<Kmer> itr = neighbors.iterator(); |
| 933 | while (itr.hasNext()) { |
| 934 | if (itr.next().count < leftCoverageThreshold) { |
| 935 | itr.remove(); |
| 936 | } |
| 937 | } |
| 938 | |
| 939 | if (neighbors.size() == 1) { |
| 940 | best = neighbors.pop(); |
| 941 | leftCoverageThreshold = Math.max(minKmerCov, Math.min(leftCoverageThreshold, best.count*maxCovGradient)); |
| 942 | } |
| 943 | } |
| 944 | |
| 945 | if (best != null) { |
| 946 | if (rightKmersSet.contains(best)) { |
| 947 | if (best.equals(right)) { |
| 948 | leftPath.addAll(rightKmers); |
| 949 | return leftPath; |
no test coverage detected