Skip to content

Commit bcc0d61

Browse files
author
Brian Ondov
committed
support for billions of references
1 parent 9dc52dd commit bcc0d61

5 files changed

Lines changed: 32 additions & 30 deletions

File tree

src/mash/CommandDistance.cpp

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ int CommandDistance::run() const
200200

201201
sketch.initFromSequence(refArgVector, parameters);
202202

203-
for ( int i = 0; i < sketch.getReferenceCount(); i++ )
203+
for ( uint64_t i = 0; i < sketch.getReferenceCount(); i++ )
204204
{
205205
uint64_t length = sketch.getReference(i).length;
206206

@@ -336,16 +336,16 @@ int CommandDistance::run() const
336336

337337
void CommandDistance::writeOutput(CompareOutput * output, bool table) const
338338
{
339-
int refCount = output->sketchRef.getReferenceCount();
339+
uint64_t refCount = output->sketchRef.getReferenceCount();
340340

341-
for ( int i = 0; i < output->sketchQuery->getReferenceCount(); i++ )
341+
for ( uint64_t i = 0; i < output->sketchQuery->getReferenceCount(); i++ )
342342
{
343343
if ( table )
344344
{
345345
cout << output->sketchQuery->getReference(i).name;
346346
}
347347

348-
for ( int j = 0; j < refCount; j++ )
348+
for ( uint64_t j = 0; j < refCount; j++ )
349349
{
350350
const CompareOutput::PairOutput & pair = output->pairs.at(i * refCount + j);
351351

@@ -390,17 +390,17 @@ CommandDistance::CompareOutput * compare(CommandDistance::CompareInput * data)
390390
sketchQuery->initFromSequence(fileVector, data->parameters);
391391
}
392392

393-
int sketchSize = sketchQuery->getMinHashesPerWindow() < sketchRef.getMinHashesPerWindow() ?
393+
uint64_t sketchSize = sketchQuery->getMinHashesPerWindow() < sketchRef.getMinHashesPerWindow() ?
394394
sketchQuery->getMinHashesPerWindow() :
395395
sketchRef.getMinHashesPerWindow();
396396

397397
output->pairs.resize(sketchRef.getReferenceCount() * sketchQuery->getReferenceCount());
398398

399-
for ( int i = 0; i < sketchQuery->getReferenceCount(); i++ )
399+
for ( uint64_t i = 0; i < sketchQuery->getReferenceCount(); i++ )
400400
{
401-
for ( int j = 0; j < sketchRef.getReferenceCount(); j++ )
401+
for ( uint64_t j = 0; j < sketchRef.getReferenceCount(); j++ )
402402
{
403-
int pairIndex = i * sketchRef.getReferenceCount() + j;
403+
uint64_t pairIndex = i * sketchRef.getReferenceCount() + j;
404404

405405
compareSketches(output->pairs[pairIndex], sketchRef.getReference(j), sketchQuery->getReference(i), sketchSize, sketchRef.getKmerSize(), sketchRef.getKmerSpace(), data->maxDistance, data->maxPValue);
406406
}
@@ -409,12 +409,12 @@ CommandDistance::CompareOutput * compare(CommandDistance::CompareInput * data)
409409
return output;
410410
}
411411

412-
void compareSketches(CommandDistance::CompareOutput::PairOutput & output, const Sketch::Reference & refRef, const Sketch::Reference & refQry, int sketchSize, int kmerSize, double kmerSpace, double maxDistance, double maxPValue)
412+
void compareSketches(CommandDistance::CompareOutput::PairOutput & output, const Sketch::Reference & refRef, const Sketch::Reference & refQry, uint64_t sketchSize, int kmerSize, double kmerSpace, double maxDistance, double maxPValue)
413413
{
414-
int i = 0;
415-
int j = 0;
416-
int common = 0;
417-
int denom = 0;
414+
uint64_t i = 0;
415+
uint64_t j = 0;
416+
uint64_t common = 0;
417+
uint64_t denom = 0;
418418
const HashList & hashesSortedRef = refRef.hashesSorted;
419419
const HashList & hashesSortedQry = refQry.hashesSorted;
420420

@@ -495,7 +495,7 @@ void compareSketches(CommandDistance::CompareOutput::PairOutput & output, const
495495
output.pass = true;
496496
}
497497

498-
double pValue(uint32_t x, uint64_t lengthRef, uint64_t lengthQuery, double kmerSpace, uint32_t sketchSize)
498+
double pValue(uint64_t x, uint64_t lengthRef, uint64_t lengthQuery, double kmerSpace, uint64_t sketchSize)
499499
{
500500
if ( x == 0 )
501501
{

src/mash/CommandDistance.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,8 @@ class CommandDistance : public Command
5050

5151
struct PairOutput
5252
{
53-
int numer;
54-
int denom;
53+
uint64_t numer;
54+
uint64_t denom;
5555
double distance;
5656
double pValue;
5757
bool pass;
@@ -73,7 +73,7 @@ class CommandDistance : public Command
7373
};
7474

7575
CommandDistance::CompareOutput * compare(CommandDistance::CompareInput * data);
76-
void compareSketches(CommandDistance::CompareOutput::PairOutput & output, const Sketch::Reference & refRef, const Sketch::Reference & refQry, int sketchSize, int kmerSize, double kmerSpace, double maxDistance, double maxPValue);
77-
double pValue(uint32_t x, uint64_t lengthRef, uint64_t lengthQuery, double kmerSpace, uint32_t sketchSize);
76+
void compareSketches(CommandDistance::CompareOutput::PairOutput & output, const Sketch::Reference & refRef, const Sketch::Reference & refQry, uint64_t sketchSize, int kmerSize, double kmerSpace, double maxDistance, double maxPValue);
77+
double pValue(uint64_t x, uint64_t lengthRef, uint64_t lengthQuery, double kmerSpace, uint64_t sketchSize);
7878

7979
#endif

src/mash/CommandInfo.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ int CommandInfo::run() const
6161
columns[2].push_back("ID");
6262
columns[3].push_back("Comment");
6363

64-
for ( int i = 0; i < sketch.getReferenceCount(); i++ )
64+
for ( uint64_t i = 0; i < sketch.getReferenceCount(); i++ )
6565
{
6666
const Sketch::Reference & ref = sketch.getReference(i);
6767

src/mash/Sketch.cpp

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -105,11 +105,11 @@ int Sketch::initFromCapnp(const char * file, bool headerOnly, bool append)
105105

106106
capnp::List<capnp::MinHash::ReferenceList::Reference>::Reader referencesReader = referenceListReader.getReferences();
107107

108-
int referencesOffset = append ? references.size() : 0;
108+
uint64_t referencesOffset = append ? references.size() : 0;
109109

110110
references.resize(referencesOffset + referencesReader.size());
111111

112-
for ( int i = 0; i < referencesReader.size(); i++ )
112+
for ( uint64_t i = 0; i < referencesReader.size(); i++ )
113113
{
114114
capnp::MinHash::ReferenceList::Reference::Reader referenceReader = referencesReader[i];
115115

@@ -135,7 +135,7 @@ int Sketch::initFromCapnp(const char * file, bool headerOnly, bool append)
135135

136136
reference.hashesSorted.resize(hashesReader.size());
137137

138-
for ( int j = 0; j < hashesReader.size(); j++ )
138+
for ( uint64_t j = 0; j < hashesReader.size(); j++ )
139139
{
140140
reference.hashesSorted.set64(j, hashesReader[j]);
141141
}
@@ -146,7 +146,7 @@ int Sketch::initFromCapnp(const char * file, bool headerOnly, bool append)
146146

147147
reference.hashesSorted.resize(hashesReader.size());
148148

149-
for ( int j = 0; j < hashesReader.size(); j++ )
149+
for ( uint64_t j = 0; j < hashesReader.size(); j++ )
150150
{
151151
reference.hashesSorted.set32(j, hashesReader[j]);
152152
}
@@ -158,30 +158,32 @@ int Sketch::initFromCapnp(const char * file, bool headerOnly, bool append)
158158

159159
positionHashesByReference.resize(references.size());
160160

161-
for ( int i = 0; i < lociReader.size(); i++ )
161+
for ( uint64_t i = 0; i < lociReader.size(); i++ )
162162
{
163163
capnp::MinHash::LocusList::Locus::Reader locusReader = lociReader[i];
164164
//cout << locusReader.getHash() << '\t' << locusReader.getSequence() << '\t' << locusReader.getPosition() << endl;
165165
positionHashesByReference[locusReader.getSequence() + referencesOffset].push_back(PositionHash(locusReader.getPosition(), locusReader.getHash64()));
166166
}
167167

168-
//cout << endl << "References:" << endl << endl;
168+
/*
169+
cout << endl << "References:" << endl << endl;
169170
170171
vector< vector<string> > columns(3);
171172
172173
columns[0].push_back("ID");
173174
columns[1].push_back("Length");
174175
columns[2].push_back("Name/Comment");
175176
176-
for ( int i = 0; i < references.size(); i++ )
177+
for ( uint64_t i = 0; i < references.size(); i++ )
177178
{
178179
columns[0].push_back(to_string(i));
179180
columns[1].push_back(to_string(references[i].length));
180181
columns[2].push_back(references[i].name + " " + references[i].comment);
181182
}
182183
183-
//printColumns(columns);
184-
//cout << endl;
184+
printColumns(columns);
185+
cout << endl;
186+
*/
185187

186188
/*
187189
printf("\nCombined hash table:\n");

src/mash/Sketch.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,8 +125,8 @@ class Sketch
125125
float getMinHashesPerWindow() const {return parameters.minHashesPerWindow;}
126126
int getMinKmerSize(int reference) const;
127127
double getRandomKmerChance(int reference) const;
128-
const Reference & getReference(int index) const {return references.at(index);}
129-
int getReferenceCount() const {return references.size();}
128+
const Reference & getReference(uint64_t index) const {return references.at(index);}
129+
uint64_t getReferenceCount() const {return references.size();}
130130
int getReferenceIndex(std::string id) const;
131131
int getKmerSize() const {return parameters.kmerSize;}
132132
double getKmerSpace() const {return kmerSpace;}

0 commit comments

Comments
 (0)