MCPcopy Create free account
hub / github.com/BirolLab/abyss / QCSpacedSeedsPatterns

Function QCSpacedSeedsPatterns

RResolver/BloomFilters.cpp:51–137  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

49}
50
51void
52QCSpacedSeedsPatterns(const std::vector<std::string>& patterns)
53{
54 int k = patterns[0].size();
55
56 for (const auto& pattern : patterns) {
57 int patternBasesCovered = k;
58 bool hasZero = false;
59 for (const char c : pattern) {
60 if (c == '0') {
61 hasZero = true;
62 patternBasesCovered--;
63 break;
64 }
65 }
66 if (opt::verbose && !hasZero) {
67 std::cerr << "A spaced seed has no zeros!\n";
68 }
69 if (opt::verbose && (patternBasesCovered < k * SPACED_SEEDS_QC_MIN_BASES_PATTERN)) {
70 std::cerr << "A spaced seed pattern does not cover enough bases!\n";
71 }
72 }
73
74 const auto combinations = genCombinations(SPACED_SEEDS_COUNT, SPACED_SEEDS_MIN_HITS);
75 std::string overallErrorCoverage(k, '1');
76 int overallErrorsCovered = 0;
77 std::string overall_base_coverage(k, '0');
78 int overallBasesCovered = 0;
79 std::string worstCombinationCoverage(k, '1');
80 int worstCombinationBasesCovered = k;
81
82 for (auto combination : combinations) {
83 std::string combinationCoverage(k, '0');
84 int combinationBasesCovered = 0;
85 for (auto index : combination) {
86 const auto& pattern = patterns[index];
87 for (unsigned i = 0; i < pattern.size(); i++) {
88 if (pattern[i] == '1' && combinationCoverage[i] != '1') {
89 combinationCoverage[i] = '1';
90 combinationBasesCovered++;
91 }
92 }
93 }
94 if (combinationBasesCovered < worstCombinationBasesCovered) {
95 worstCombinationCoverage = combinationCoverage;
96 worstCombinationBasesCovered = combinationBasesCovered;
97 }
98 if (opt::verbose && (combinationBasesCovered <
99 combinationCoverage.size() * SPACED_SEEDS_QC_MIN_BASES_COMBINATION)) {
100 std::cerr << "A spaced seed combination does not cover enough bases!\n";
101 }
102
103 for (unsigned i = 0; i < combinationCoverage.size(); i++) {
104 if (combinationCoverage[i] == '0') {
105 if (overallErrorCoverage[i] != '0') {
106 overallErrorCoverage[i] = '0';
107 overallErrorsCovered++;
108 }

Callers 1

buildFiltersFunction · 0.85

Calls 2

genCombinationsFunction · 0.85
sizeMethod · 0.45

Tested by

no test coverage detected