]> git.donarmstrong.com Git - mothur.git/blobdiff - sequence.cpp
added MPI code, broke up chimera.seqs into 5 separated commands, added parse.sff...
[mothur.git] / sequence.cpp
index 3bd80a87fde16f95d1bf1f8ae9369c0f962eb181..19adf796b5d1d26f3a681144c6c801cdb4b4f63d 100644 (file)
@@ -38,17 +38,12 @@ Sequence::Sequence(string newName, string sequence) {
 Sequence::Sequence(istringstream& fastaString){
        try {
                m = MothurOut::getInstance();
-       int pid;
-       MPI_Comm_rank(MPI_COMM_WORLD, &pid); 
-       cout << pid << " after mothur instance " << &name << endl;
+       
                initialize();
-       cout << "after mothur initialize" << endl;
                fastaString >> name;
-       cout << pid << " after name "  << name << endl;
                name = name.substr(1);
-
                string sequence;
-cout << pid << " name = "  << name << endl;            
+       
                //read comments
                while ((name[0] == '#') && fastaString) { 
                        while (!fastaString.eof())      {       char c = fastaString.get(); if (c == 10 || c == 13){    break;  }       } // get rest of line if there's any crap there
@@ -61,13 +56,11 @@ cout << pid << " name = "  << name << endl;
                                name = "";
                                break;
                        }
-                       cout << pid << "in while comment" << endl;      
                }
-       cout << pid << "after mothur comment" << endl;  
-               while (!fastaString.eof())      {       char c = fastaString.get(); cout << pid << " char = " << int(c) << endl; if (c == 10 || c == 13){       break;  }       } // get rest of line if there's any crap there
-       cout << pid << " after mothur name" << endl;    
+               
+               while (!fastaString.eof())      {       char c = fastaString.get();  if (c == 10 || c == 13){   break;  }       } // get rest of line if there's any crap there
+               
                sequence = getSequenceString(fastaString);              
-       cout << pid << " after mothur sequence" << endl;        
                setAligned(sequence);   
                //setUnaligned removes any gap characters for us                                                
                setUnaligned(sequence);         
@@ -169,11 +162,10 @@ string Sequence::getSequenceString(istringstream& fastaFile) {
        try {
                char letter;
                string sequence = "";   
-int pid;
-MPI_Comm_rank(MPI_COMM_WORLD, &pid);           
+               
                while(!fastaFile.eof()){
                        letter= fastaFile.get();
-       cout << pid << '\t' << letter << endl;
+       
                        if(letter == '>'){
                                fastaFile.putback(letter);
                                break;
@@ -451,5 +443,65 @@ void Sequence::reverseComplement(){
        aligned = temp;
        
 }
-
+#ifdef USE_MPI 
 //********************************************************************************************************************
+int Sequence::MPISend(int receiver) {
+       try {
+               //send name - string
+               int length = name.length();
+               char buf[name.length()];
+               strcpy(buf, name.c_str()); 
+               
+               MPI_Send(&length, 1, MPI_INT, receiver, 2001, MPI_COMM_WORLD); 
+
+               MPI_Send(&buf, length, MPI_CHAR, receiver, 2001, MPI_COMM_WORLD);
+       
+               //send aligned - string
+               length = aligned.length();
+               char buf2[aligned.length()];
+               strcpy(buf2, aligned.c_str()); 
+       
+               MPI_Send(&length, 1, MPI_INT, receiver, 2001, MPI_COMM_WORLD); 
+       
+               MPI_Send(&buf2, length, MPI_CHAR, receiver, 2001, MPI_COMM_WORLD);
+       
+               return 0;
+
+       }
+       catch(exception& e) {
+               m->errorOut(e, "Sequence", "MPISend");
+               exit(1);
+       }
+}
+/**************************************************************************************************/
+int Sequence::MPIRecv(int sender) {
+       try {
+               MPI_Status status;
+       
+               //receive name - string
+               int length;
+               MPI_Recv(&length, 1, MPI_INT, sender, 2001, MPI_COMM_WORLD, &status);
+       
+               char buf[length];
+               MPI_Recv(&buf, length, MPI_CHAR, sender, 2001, MPI_COMM_WORLD, &status);
+               name = buf;
+               
+               //receive aligned - string
+               MPI_Recv(&length, 1, MPI_INT, sender, 2001, MPI_COMM_WORLD, &status);
+       
+               char buf2[length];
+               MPI_Recv(&buf2, length, MPI_CHAR, sender, 2001, MPI_COMM_WORLD, &status);
+               aligned = buf2;
+               
+               setAligned(aligned);
+               
+               return 0;
+
+       }
+       catch(exception& e) {
+               m->errorOut(e, "Sequence", "MPIRecv");
+               exit(1);
+       }
+}
+#endif
+/**************************************************************************************************/