Re: [Denovoassembler-devel] git diff kmersmatrix branch
Ray -- Parallel genome assemblies for parallel DNA sequencing
Brought to you by:
sebhtml
From: Sébastien B. <se...@bo...> - 2014-02-23 12:29:03
|
Hey Maxime, You did not provide KmersMatrixOwner.h, KmersMatrixOwner.cpp, and changes to the Surveyor Makefile. OTher comments are below. ---------------------------------------- > Date: Sat, 22 Feb 2014 10:03:30 +0000 > From: ma...@de... > To: se...@bo... > Subject: git diff kmersmatrix branch > > diff --git a/code/Surveyor/MatrixOwner.cpp b/code/Surveyor/MatrixOwner.cpp > index ffaae00..47cf84a 100644 > --- a/code/Surveyor/MatrixOwner.cpp > +++ b/code/Surveyor/MatrixOwner.cpp > @@ -65,9 +65,12 @@ void MatrixOwner::receive(Message & message) { > assert(m_parameters != NULL); > assert(m_sampleNames != NULL); > #endif > - > m_mother = source; > > + //open the buffer of the file > + // createKmersMatrixOutputFile(); > + > + > } else if(tag == PUSH_PAYLOAD) { > > SampleIdentifier sample1 = -1; > @@ -89,10 +92,10 @@ void MatrixOwner::receive(Message & message) { > assert(count>= 0); > #endif > > - /* > + > printName(); > - cout << "DEBUG add " << sample1 << " " << sample2 << " " > << count << endl; > -*/ > + // cout << "DEBUG add " << sample1 << " " << sample2 << Commented lines should be removed. > " " << count << endl; > + > m_receivedPayloads ++; > > m_localGramMatrix[sample1][sample2] += count; > @@ -100,14 +103,14 @@ void MatrixOwner::receive(Message & message) { > Message response; > response.setTag(PUSH_PAYLOAD_OK); > send(source, response); > + } > + else if(tag == PUSH_PAYLOAD_END) { Use '} else if (' and not '} else if' This is the coding style of the project. see https://github.com/sebhtml/ray/blob/master/Documentation/CodingStyle.txt * Kernighan and Ritchie style, variant "The One True Brace Style" (1TBS) http://en.wikipedia.org/wiki/Indent_style#Variant:_1TBS (you used K&R Variant: Stroustrup). > > - } else if(tag == PUSH_PAYLOAD_END) { > - > + cout << "PUSH_PAYLOAD_END" <<endl; Remove this debug message. > m_completedStoreActors++; > > if(m_completedStoreActors == getSize()) { > > - > printName(); > cout << "MatrixOwner received " << > m_receivedPayloads << " payloads" << endl; > > @@ -151,10 +154,9 @@ void MatrixOwner::receive(Message & message) { > > > // tell Mother that the matrix is ready now. > - > - Message coolMessage; > - coolMessage.setTag(MATRIX_IS_READY); > - send(m_mother, coolMessage); > + Message coolMessage; > + coolMessage.setTag(GRAM_MATRIX_IS_READY); > + send(m_mother, coolMessage); > > > // clear matrices > @@ -275,3 +277,4 @@ void > MatrixOwner::printLocalGramMatrixWithHash(ostream & stream, map<SampleIdent > stream << endl; > } > } > + > diff --git a/code/Surveyor/MatrixOwner.h b/code/Surveyor/MatrixOwner.h > index ceb17e2..afa9278 100644 > --- a/code/Surveyor/MatrixOwner.h > +++ b/code/Surveyor/MatrixOwner.h > @@ -28,6 +28,7 @@ > > #include <map> > #include <iostream> > +#include <sstream> > using namespace std; > > class MatrixOwner : public Actor { > @@ -62,7 +63,7 @@ public: > PUSH_PAYLOAD, > PUSH_PAYLOAD_OK, > PUSH_PAYLOAD_END, > - MATRIX_IS_READY, > + GRAM_MATRIX_IS_READY, > LAST_TAG > }; > > diff --git a/code/Surveyor/Mother.cpp b/code/Surveyor/Mother.cpp > index 4d2ef9c..103a583 100644 > --- a/code/Surveyor/Mother.cpp > +++ b/code/Surveyor/Mother.cpp > @@ -27,6 +27,7 @@ > #include "GenomeGraphReader.h" > #include "GenomeAssemblyReader.h" > #include "MatrixOwner.h" > +#include "KmersMatrixOwner.h" > > #include <RayPlatform/cryptography/crypto.h> > > @@ -39,11 +40,13 @@ using namespace std; > #define INPUT_TYPE_GRAPH 0 > #define INPUT_TYPE_ASSEMBLY 1 > > - > Mother::Mother() { > > m_coalescenceManager = -1; > m_matrixOwner = -1; > + m_kmersMatrixOwner = -1; > + > + // m_matricesAreReady = true; Remove this commented line. > > m_parameters = NULL; > m_bigMother = -1; > @@ -91,7 +94,7 @@ void Mother::receive(Message & message) { > notifyController(); > } > > - } else if(tag == MERGE) { > + } else if(tag == MERGE_GRAM_MATRIX) { > > int matrixOwner = -1; > memcpy(&matrixOwner, buffer, sizeof(matrixOwner)); > @@ -102,7 +105,7 @@ void Mother::receive(Message & message) { > #endif > > Message theMessage; > - theMessage.setTag(StoreKeeper::MERGE); > + theMessage.setTag(StoreKeeper::MERGE_GRAM_MATRIX); > theMessage.setBuffer(&matrixOwner); > theMessage.setNumberOfBytes(sizeof(matrixOwner)); > > @@ -111,10 +114,33 @@ void Mother::receive(Message & message) { > send(destination, theMessage); > > Message response; > - response.setTag(MERGE_OK); > + response.setTag(MERGE_GRAM_MATRIX_OK); > + send(source, response); > + > + } else if (tag == MERGE_KMERS_MATRIX) { > + > + int kmersMatrixOwner = -1; > + memcpy(&kmersMatrixOwner, buffer, sizeof(kmersMatrixOwner)); > + > +#ifdef CONFIG_ASSERT > + assert(kmersMatrixOwner>= 0); > + assert(m_storeKeepers.size() == 1); > +#endif > + > + Message theMessage; > + theMessage.setTag(StoreKeeper::MERGE_KMERS_MATRIX); The name should be MERGE_KMER_MATRIX and not MERGE_KMERS_MATRIX. > + theMessage.setBuffer(&kmersMatrixOwner); > + theMessage.setNumberOfBytes(sizeof(kmersMatrixOwner)); > + > + int destination = m_storeKeepers[0]; > + > + send(destination, theMessage); > + > + Message response; > + response.setTag(MERGE_KMERS_MATRIX_OK); > send(source, response); > > - } else if(tag == SHUTDOWN) { > + } else if(tag == SHUTDOWN) { > > Message response; > response.setTag(SHUTDOWN_OK); > @@ -122,18 +148,16 @@ void Mother::receive(Message & message) { > > stop(); > > - } else if(tag == StoreKeeper::MERGE_OK) { > + } else if(tag == StoreKeeper::MERGE_GRAM_MATRIX_OK) { > > // TODO: the bug https://github.com/sebhtml/ray/issues/216 > // is caused by the fact that this message is not > // received . > > - /* > - Message newMessage; > - newMessage.setTag(MERGE_OK); > + // Message newMessage; > + // newMessage.setTag(MERGE_OK); > > - send(m_bigMother, newMessage); > - */ > + // send(m_bigMother, newMessage); Remove these commented lines. > > } else if(tag == FINISH_JOB) { > > @@ -153,6 +177,7 @@ void Mother::receive(Message & message) { > > sendToFirstMother(FLUSH_AGGREGATOR, > FLUSH_AGGREGATOR_RETURN); > } > + > } else if(tag == FLUSH_AGGREGATOR) { > > /* > @@ -188,64 +213,52 @@ void Mother::receive(Message & message) { > cout << "DEBUG sending FLUSH_AGGREGATOR_OK to > m_bigMother" << endl; > */ > > - } else if(tag == MatrixOwner::MATRIX_IS_READY) { > + } else if(tag == MatrixOwner::GRAM_MATRIX_IS_READY) { > + > + //TODO : check if all matrices are ready > + if(m_matricesAreReady){ > + sendToFirstMother(SHUTDOWN, SHUTDOWN_OK); > + }else { > + cout << "GRAM_MATRIX_IS_READY" << endl; When an actor speak, you must print its name too in stdout. (with printName()). > + m_matricesAreReady = true; > + } > > - sendToFirstMother(SHUTDOWN, SHUTDOWN_OK); > + } > + else if(tag == KmersMatrixOwner::KMERS_MATRIX_IS_READY) { > + > + cout << "KMERS_MATRIX_IS_READY" << endl; > + if(m_matricesAreReady){ > + sendToFirstMother(SHUTDOWN, SHUTDOWN_OK); > + }else { > + cout << "KMERS_MATRIX_IS_READY" << endl; > + m_matricesAreReady = true; In one comment above, I saw that m_matricesAreReady = false was commented. Check that out. > + } > > } else if(tag == FLUSH_AGGREGATOR_OK) { > > - /* > printName(); > cout << "DEBUG received FLUSH_AGGREGATOR_OK" << endl; > - */ > > m_flushedMothers++; > > if(m_flushedMothers < getSize()) > return; > > - // spawn the MatrixOwner here ! > - > - MatrixOwner * matrixOwner = new MatrixOwner(); > - spawn(matrixOwner); > - > - m_matrixOwner = matrixOwner->getName(); > - > - printName(); > - cout << "Spawned MatrixOwner actor !" << endl; > - > - // tell the StoreKeeper actors to send their stuff to the > - // MatrixOwner actor > - // The Mother of Mother will wait for a signal from > MatrixOwner > - > - Message greetingMessage; > - > - vector<string> * names = & m_sampleNames; > - > - char buffer[32]; > - int offset = 0; > - memcpy(buffer + offset, &m_parameters, > sizeof(m_parameters)); > - offset += sizeof(m_parameters); > - memcpy(buffer + offset, &names, sizeof(names)); > - offset += sizeof(names); > - > - greetingMessage.setBuffer(&buffer); > - greetingMessage.setNumberOfBytes(offset); > - > - greetingMessage.setTag(MatrixOwner::GREETINGS); > - send(m_matrixOwner, greetingMessage); > - > - sendToFirstMother(MERGE, MERGE_OK); > - > + spawnMatrixOwner(); I like that. A method to spawn an actor. Good ! > > } else if(tag == m_responseTag) { > > - > if(m_responseTag == SHUTDOWN_OK) { > > - } else if(m_responseTag == MERGE_OK) { > - > - } else if(m_responseTag == FLUSH_AGGREGATOR_RETURN) { > + } else if(m_responseTag == MERGE_GRAM_MATRIX_OK) { > + // All mothers merged their GRAM MATRIX > + // Spawn KmersMatrixOwner to print > + if(m_motherToKill < getSize() && > m_printKmersMatrix){ > + spawnKmersMatrixOwner(); > + } > + } else if(m_responseTag == MERGE_KMERS_MATRIX_OK) { > + } > + else if(m_responseTag == FLUSH_AGGREGATOR_RETURN) { Again, put closing brace on same line (} else if ( ...) { > > /* > printName(); > @@ -254,9 +267,8 @@ void Mother::receive(Message & message) { > */ > } > > - // every mother was informed. > + // every mother was not informed. Good catch ! > if(m_motherToKill>= getSize()) { > - > sendMessageWithReply(m_motherToKill, m_forwardTag); > m_motherToKill--; > } > @@ -284,11 +296,15 @@ void Mother::sendMessageWithReply(int & actor, int > tag) { > Message message; > message.setTag(tag); > > - if(tag == MERGE) { > + if(tag == MERGE_GRAM_MATRIX) { > message.setBuffer(&m_matrixOwner); > message.setNumberOfBytes(sizeof(m_matrixOwner)); > - > - } else if(tag == FLUSH_AGGREGATOR) { > + } > + else if(tag == MERGE_KMERS_MATRIX) { > + message.setBuffer(&m_kmersMatrixOwner); > + message.setNumberOfBytes(sizeof(m_kmersMatrixOwner)); > + } > + else if(tag == FLUSH_AGGREGATOR) { > > /* > printName(); > @@ -328,6 +344,10 @@ void Mother::stop() { > m_matrixOwner = -1; > } > > + if(m_kmersMatrixOwner>= 0) { > + send(m_kmersMatrixOwner, kill); > + m_kmersMatrixOwner = -1; > + } > > die(); > > @@ -410,39 +430,44 @@ void Mother::startSurveyor() { > > bool isRoot = (getName() % getSize()) == 0; > > - //cout << "DEBUG startSurveyor isRoot" << isRoot << endl; > - > - // get a list of files. > + // Set matricesAreReady to true in case user doesn't want > + // to print out kmers matrix. > + m_matricesAreReady = true; > > vector<string> * commands = m_parameters->getCommands(); > > - > for(int i = 0 ; i < (int) commands->size() ; ++i) { > > string & element = commands->at(i); > > - // DONE: Check bounds for file names > + if (element != "-print-kmers-matrix") { The name should be kmer-matrix, not kmers-matrix. It is like groceries store vs grocery store. > + // DONE: Check bounds for file names > > - map<string,int> fastTable; > + map<string,int> fastTable; > > - fastTable["-read-sample-graph"] = INPUT_TYPE_GRAPH; > - fastTable["-read-sample-assembly"] = INPUT_TYPE_ASSEMBLY; > + fastTable["-read-sample-graph"] = INPUT_TYPE_GRAPH; > + fastTable["-read-sample-assembly"] = > INPUT_TYPE_ASSEMBLY; > > - // Unsupported option > - if(fastTable.count(element) == 0 || i+2> (int) > commands->size()) > - continue; > + // Unsupported option > + if(fastTable.count(element) == 0 || i+2> (int) > commands->size()) > + continue; > > - string sampleName = commands->at(++i); > - string fileName = commands->at(++i); > + string sampleName = commands->at(++i); > + string fileName = commands->at(++i); > > - m_sampleNames.push_back(sampleName); > + m_sampleNames.push_back(sampleName); > > - // DONE implement this m_assemblyFileNames + type > - m_inputFileNames.push_back(fileName); > + // DONE implement this m_assemblyFileNames + type > + m_inputFileNames.push_back(fileName); > > - int type = fastTable[element]; > + int type = fastTable[element]; > > - m_sampleInputTypes.push_back(type); > + m_sampleInputTypes.push_back(type); > + > + } else { > + m_matricesAreReady = false; > + m_printKmersMatrix = true; Question: if m_printKmersMatrix is false, I suppose the code follows the usual path of printing just one matrix, right ? > + } > > } > > @@ -468,6 +493,9 @@ void Mother::startSurveyor() { > > m_storeKeepers.push_back(actor->getName()); > > + actor->setOutputKmersMatrixPath(m_parameters->getPrefix()); The path should be prefix/Surveyor/<whatever the kmer matrix's name is> > + actor->setSamplesSize(m_sampleNames.size()); sample size, not samples size. > + > // tell the CoalescenceManager about the local StoreKeeper > Message dummyMessage; > int localStore = actor->getName(); > @@ -568,6 +596,80 @@ void Mother::spawnReader() { > } > } > > + > +void Mother::spawnMatrixOwner() { > + > + // spawn the MatrixOwner here ! > + MatrixOwner * matrixOwner = new MatrixOwner(); > + spawn(matrixOwner); > + > + m_matrixOwner = matrixOwner->getName(); > + > + printName(); > + cout << "Spawned MatrixOwner actor !" << m_matrixOwner << endl; > + > + // tell the StoreKeeper actors to send their stuff to the > + // MatrixOwner actor > + // The Mother of Mother will wait for a signal from MatrixOwner > + > + Message greetingMessage; > + > + vector<string> * names = & m_sampleNames; > + > + char buffer[32]; > + int offset = 0; > + memcpy(buffer + offset, &m_parameters, sizeof(m_parameters)); > + offset += sizeof(m_parameters); > + memcpy(buffer + offset, &names, sizeof(names)); > + offset += sizeof(names); > + > + greetingMessage.setBuffer(&buffer); > + greetingMessage.setNumberOfBytes(offset); > + > + greetingMessage.setTag(MatrixOwner::GREETINGS); > + send(m_matrixOwner, greetingMessage); > + > + sendToFirstMother(MERGE_GRAM_MATRIX, MERGE_GRAM_MATRIX_OK); > +} > + > +void Mother::spawnKmersMatrixOwner() { > + > + // spawn the MatrixOwner here ! > + KmersMatrixOwner * kmersMatrixOwner = new KmersMatrixOwner(); > + spawn(kmersMatrixOwner); > + > + m_kmersMatrixOwner = kmersMatrixOwner->getName(); > + > + printName(); > + cout << "Spawned KmersMatrixOwner actor !" << > m_kmersMatrixOwner << endl; > + > + // tell the StoreKeeper actors to send their stuff to the > + // KmersMatrixOwner actor > + // The Mother of Mother will wait for a signal from MatrixOwner > + > + Message greetingMessage; > + > + vector<string> * names = & m_sampleNames; > + > + char buffer[32]; > + int offset = 0; > + memcpy(buffer + offset, &m_parameters, sizeof(m_parameters)); > + offset += sizeof(m_parameters); > + memcpy(buffer + offset, &names, sizeof(names)); > + offset += sizeof(names); > + > + greetingMessage.setBuffer(&buffer); > + greetingMessage.setNumberOfBytes(offset); > + > + greetingMessage.setTag(KmersMatrixOwner::GREETINGS); > + send(m_kmersMatrixOwner, greetingMessage); > + > + sendToFirstMother(MERGE_KMERS_MATRIX, MERGE_KMERS_MATRIX_OK); > + > +} > + > + > void Mother::setParameters(Parameters * parameters) { > m_parameters = parameters; > } > + > diff --git a/code/Surveyor/Mother.h b/code/Surveyor/Mother.h > index 092920f..9774c4b 100644 > --- a/code/Surveyor/Mother.h > +++ b/code/Surveyor/Mother.h > @@ -28,6 +28,7 @@ > > #include <vector> > #include <string> > +#include <iostream> > using namespace std; > > /** > @@ -55,9 +56,12 @@ class Mother: public Actor { > private: > > int m_matrixOwner; > + int m_kmersMatrixOwner; > > int m_flushedMothers; > int m_finishedMothers; > + bool m_matricesAreReady; > + bool m_printKmersMatrix; > > Parameters * m_parameters; > > @@ -93,6 +97,13 @@ private: > */ > void sendToFirstMother(int forwardTag, int responseTag); > > + /* int m_kmersMatrixBlocNumber; */ > + void printLocalKmersMatrix(string & kmer, string & > samples_kmers, bool force); > + void createKmersMatrixOutputFile(); > + > + void spawnMatrixOwner(); > + void spawnKmersMatrixOwner(); > + That's a good design -- private methods for private uses. > public: > > Mother(); > @@ -109,8 +120,10 @@ public: > FLUSH_AGGREGATOR, > FLUSH_AGGREGATOR_OK, > FLUSH_AGGREGATOR_RETURN, > - MERGE, > - MERGE_OK, > + MERGE_GRAM_MATRIX, > + MERGE_GRAM_MATRIX_OK, > + MERGE_KMERS_MATRIX, > + MERGE_KMERS_MATRIX_OK, kmer matrix, not kmers matrix. > LAST_TAG, > }; > > diff --git a/code/Surveyor/StoreKeeper.cpp b/code/Surveyor/StoreKeeper.cpp > index 84eef34..492208c 100644 > --- a/code/Surveyor/StoreKeeper.cpp > +++ b/code/Surveyor/StoreKeeper.cpp > @@ -22,10 +22,16 @@ > #include "StoreKeeper.h" > #include "CoalescenceManager.h" > #include "MatrixOwner.h" > +#include "KmersMatrixOwner.h" > > #include <code/VerticesExtractor/Vertex.h> > +#include <RayPlatform/structures/MyHashTableIterator.h> > +#include <RayPlatform/core/OperatingSystem.h> > > #include <iostream> > +#include <sstream> > +#include <iomanip> > +#include <fstream> > using namespace std; > > #include <string.h> > @@ -83,15 +89,21 @@ void StoreKeeper::receive(Message & message) { > > die(); > > - } else if(tag == MERGE) { > + } else if(tag == MERGE_GRAM_MATRIX) { > > > - printName(); > - cout << "DEBUG at MERGE message reception "; > - cout << "(StoreKeeper) received " << m_receivedObjects > << " objects in total"; > - cout << " with " << m_receivedPushes << " push > operations" << endl; > + // printName(); > + // cout << "DEBUG at MERGE_GRAM_MATRIX message reception "; > + // cout << "(StoreKeeper) received " << > m_receivedObjects << " objects in total"; > + // cout << " with " << m_receivedPushes << " push You can remove commented lines. > operations" << endl; > computeLocalGramMatrix(); > > + > + // TODEL Print matrix bloc > + // m_kmersMatrixBlocNumber = 0; > + // printLocalKmersMatrix(); > + You can remove commented lines. > + > m_mother = source; > > memcpy(&m_matrixOwner, buffer, sizeof(m_matrixOwner)); > @@ -108,19 +120,32 @@ void StoreKeeper::receive(Message & message) { > m_iterator2 = m_iterator1->second.begin(); > } > > - /* > - printName(); > - cout << "DEBUG printLocalGramMatrix before first > sendMatrixCell" << endl; > - printLocalGramMatrix(); > - */ > - > + // printName(); > + // cout << "DEBUG printLocalGramMatrix before first > sendMatrixCell" << endl; > + // printLocalGramMatrix(); You can remove commented lines. > sendMatrixCell(); > > } else if(tag == MatrixOwner::PUSH_PAYLOAD_OK) { > - > sendMatrixCell(); > + } else if(tag == MERGE_KMERS_MATRIX) { > + // cout << "DEBUG at MERGE_GRAM_MATRIX message reception "; > + // cout << "(StoreKeeper) received " << > m_receivedObjects << " objects in total"; > + // cout << " with " << m_receivedPushes << " push > operations" << endl; You can remove commented lines. Otherwise, add a "#ifdef DEBUG_SOMETHING_SOMETHING / #endif around that lines". > + > + m_mother = source; > > - } else if(tag == CoalescenceManager::SET_KMER_LENGTH) { > + memcpy(&m_kmersMatrixOwner, buffer, > sizeof(m_kmersMatrixOwner)); > + > + m_hashTableIterator.constructor(&m_hashTable); > + > + sendKmersSamples(); > + } > + else if (tag == KmersMatrixOwner::PUSH_KMER_SAMPLES_END) { > + } > + else if(tag == KmersMatrixOwner::PUSH_KMER_SAMPLES_OK) { > + sendKmersSamples(); > + } > + else if(tag == CoalescenceManager::SET_KMER_LENGTH) { > > int kmerLength = 0; > int position = 0; > @@ -181,8 +206,6 @@ void StoreKeeper::sendMatrixCell() { > message.setNumberOfBytes(offset); > message.setTag(MatrixOwner::PUSH_PAYLOAD); > > - //cout << " DEBUG send PUSH_PAYLOAD to " << > m_matrixOwner << endl; > - > send(m_matrixOwner, message); > > m_iterator2++; > @@ -207,10 +230,7 @@ void StoreKeeper::sendMatrixCell() { > // free memory. > m_localGramMatrix.clear(); > > - /* > printName(); > - cout << "DEBUG send PUSH_PAYLOAD_END to " << m_matrixOwner << endl; > - */ > > Message response; > response.setTag(MatrixOwner::PUSH_PAYLOAD_END); > @@ -236,6 +256,7 @@ void StoreKeeper::configureHashTable() { > ); > > m_configured = true; > + > } > > void StoreKeeper::printColorReport() { > @@ -375,6 +396,7 @@ void StoreKeeper::computeLocalGramMatrix() { > //printLocalGramMatrix(); > } > > + > void StoreKeeper::printLocalGramMatrix() { > > printName(); > @@ -623,3 +645,73 @@ void StoreKeeper::storeData(Vertex & vertex, int & > sample) { > > */ > } > + > + > +void StoreKeeper::setSamplesSize(int sampleSize) { > + m_sampleSize = sampleSize; > +} > + > +void StoreKeeper::setOutputKmersMatrixPath(string pathPrefix) { > + // m_outputKmersMatrixPath = pathPrefix; > + // m_outputKmersMatrixPath += "/KmersMatrixDump/"; > + // createDirectory(m_outputKmersMatrixPath.c_str()); You can remove commented lines. This file could be in prefix/Surveyor/<...> > +} > + > + > +void StoreKeeper::sendKmersSamples() { > + > + char buffer[4000]; For portability, use MAXIMUM_MESSAGE_SIZE_IN_BYTES instead of 4000. > + int bytes = 0; > + > + ExperimentVertex * currentVertex = NULL; > + VirtualKmerColorHandle currentVirtualColor = NULL_VIRTUAL_COLOR; > + > + vector<bool> samplesVector (m_sampleSize, false); > + > + if(m_hashTableIterator.hasNext()){ > + > + // fill(samplesVector.begin(),samplesVector.end(),false); > + You can remove commented lines. > + currentVertex = m_hashTableIterator.next(); > + Kmer kmer = currentVertex->getKey(); > + > + bytes += kmer.dump(buffer); > + > + currentVirtualColor = currentVertex->getVirtualColor(); > + set<PhysicalKmerColor> * samples = > m_colorSet.getPhysicalColors(currentVirtualColor); > + > + for(set<PhysicalKmerColor>:: iterator sampleIterator = > samples->begin(); > + sampleIterator != samples->end(); ++sampleIterator) { > + PhysicalKmerColor value = *sampleIterator; > + samplesVector[value] = true; > + // cout << " " << value; > + } > + > + for (std::vector<bool>::iterator it = > samplesVector.begin(); > + it != samplesVector.end(); ++it) { > + buffer[bytes] = *it; > + bytes++; > + } > + // buffer[bytes] = '\0'; You can remove commented lines. > + } > + > + > + Message message; > + message.setNumberOfBytes(bytes); > + message.setBuffer(buffer); > + > + // message.setTag(MatrixOwner::PUSH_KMERS_SAMPLES); > + if(m_hashTableIterator.hasNext()){ > + message.setTag(KmersMatrixOwner::PUSH_KMER_SAMPLES); > + }else{ > + message.setTag(KmersMatrixOwner::PUSH_KMER_SAMPLES_END); > + } > + > + // Message response; > + // response.setTag(MatrixOwner::PUSH_PAYLOAD_END); > + // send(m_matrixOwner, response); > + > + send(m_kmersMatrixOwner, message); > + > +} > + > diff --git a/code/Surveyor/StoreKeeper.h b/code/Surveyor/StoreKeeper.h > index e44cf98..36adf77 100644 > --- a/code/Surveyor/StoreKeeper.h > +++ b/code/Surveyor/StoreKeeper.h > @@ -34,6 +34,10 @@ > > #include <RayPlatform/actors/Actor.h> > #include <RayPlatform/structures/MyHashTable.h> > +#include <RayPlatform/structures/MyHashTableIterator.h> > + > +#include <iostream> > +#include <sstream> > > /** > * Provides genomic storage. > @@ -55,6 +59,7 @@ private: > > int m_mother; > int m_matrixOwner; > + int m_kmersMatrixOwner; > > bool m_configured; > > @@ -64,6 +69,8 @@ private: > */ > MyHashTable<Kmer,ExperimentVertex> m_hashTable; > > + MyHashTableIterator<Kmer,ExperimentVertex> m_hashTableIterator; > + > int m_kmerLength; > bool m_colorSpaceMode; > > @@ -79,6 +86,13 @@ private: > void printLocalGramMatrix(); > void printColorReport(); > > + /* ostringstream m_currentKmer; */ > + /* ostringstream m_currentSamplesKmers; */ > + int m_sampleSize; > + string m_outputKmersMatrixPath; > + void printLocalKmersMatrix(string & m_kmer, string & > m_samplesKmers); > + void sendKmersSamples(); > + > void sendMatrixCell(); > > public: > @@ -86,14 +100,19 @@ public: > StoreKeeper(); > ~StoreKeeper(); > > + void setOutputKmersMatrixPath(string pathPrefix); > + void setSamplesSize(int sampleSize); > + > void receive(Message & message); > > enum { > FIRST_TAG = 10250, > PUSH_SAMPLE_VERTEX, > PUSH_SAMPLE_VERTEX_OK, > - MERGE, > - MERGE_OK, > + MERGE_GRAM_MATRIX, > + MERGE_GRAM_MATRIX_OK, > + MERGE_KMERS_MATRIX, > + MERGE_KMERS_MATRIX_OK, > LAST_TAG > }; > }; |