... | ... |
@@ -1,6 +1,7 @@ |
1 | 1 |
#include "GapsRunner.h" |
2 | 2 |
#include "math/SIMD.h" |
3 | 3 |
#include "math/Random.h" |
4 |
+#include "GapsAssert.h" |
|
4 | 5 |
#include <algorithm> |
5 | 6 |
|
6 | 7 |
#ifdef __GAPS_OPENMP__ |
... | ... |
@@ -13,6 +14,7 @@ |
13 | 14 |
// samples gene names as well |
14 | 15 |
static std::vector< std::vector<unsigned> > sampleIndices(unsigned n, unsigned nSets) |
15 | 16 |
{ |
17 |
+ unsigned setSize = (int) (n - 1) / (nSets - 1); |
|
16 | 18 |
std::vector< std::vector<unsigned> > sampleIndices; |
17 | 19 |
std::vector<unsigned> toBeSampled; |
18 | 20 |
for (unsigned i = 1; i < n; ++i) |
... | ... |
@@ -20,15 +22,14 @@ static std::vector< std::vector<unsigned> > sampleIndices(unsigned n, unsigned n |
20 | 22 |
toBeSampled.push_back(i); |
21 | 23 |
} |
22 | 24 |
|
23 |
- for (unsigned i = 0; i < (n - 1); ++i) |
|
25 |
+ for (unsigned i = 0; i < (nSets - 1); ++i) |
|
24 | 26 |
{ |
25 |
- sampleIndices.push_back(gaps::random::sample(toBeSampled, (int) (n - 1) / (nSets - 1))); |
|
27 |
+ sampleIndices.push_back(gaps::random::sample(toBeSampled, setSize)); |
|
26 | 28 |
} |
27 | 29 |
|
28 |
- if (!toBeSampled.empty()) |
|
29 |
- { |
|
30 |
- sampleIndices.push_back(toBeSampled); |
|
31 |
- } |
|
30 |
+ GAPS_ASSERT(!toBeSampled.empty()); |
|
31 |
+ |
|
32 |
+ sampleIndices.push_back(toBeSampled); |
|
32 | 33 |
|
33 | 34 |
return sampleIndices; |
34 | 35 |
|
... | ... |
@@ -185,12 +185,12 @@ std::vector<unsigned> sample(std::vector<unsigned> &elements, unsigned n) { |
185 | 185 |
std::vector<unsigned> sampleVect; |
186 | 186 |
for (unsigned i = 0; i < n; ++i) |
187 | 187 |
{ |
188 |
- if (elements.empty()) { |
|
189 |
- break; |
|
190 |
- } |
|
188 |
+ GAPS_ASSERT(n <= elements.size()); |
|
191 | 189 |
unsigned sampleIndex = gaps::random::uniform64(0, elements.size()); |
192 | 190 |
sampleVect.push_back(elements.at(sampleIndex)); |
193 |
- elements.erase(std::remove(elements.begin(), elements.end(), elements.at(sampleIndex)), elements.end()); |
|
191 |
+ |
|
192 |
+ elements[sampleIndex] = elements.back(); |
|
193 |
+ elements.pop_back(); |
|
194 | 194 |
} |
195 | 195 |
return sampleVect; |
196 | 196 |
|