]> git.donarmstrong.com Git - mothur.git/blobdiff - mothurout.cpp
1.21.0
[mothur.git] / mothurout.cpp
index c2ef698db8ed4d9c0769fcd4295a27a886c65bfc..367f5d12fc0555833061fb3d3dcabb4581006e64 100644 (file)
@@ -247,6 +247,53 @@ void MothurOut::mothurOutEndLine() {
        }
 }
 /*********************************************************************************************/
+void MothurOut::mothurOut(string output, ofstream& outputFile) {
+       try {
+               
+#ifdef USE_MPI
+               int pid;
+               MPI_Comm_rank(MPI_COMM_WORLD, &pid); 
+               
+               if (pid == 0) { //only one process should output to screen
+#endif
+                       
+                       cout << output;
+                       out << output;
+                       outputFile << output;
+                       
+#ifdef USE_MPI
+               }
+#endif
+       }
+       catch(exception& e) {
+               errorOut(e, "MothurOut", "MothurOut");
+               exit(1);
+       }
+}
+/*********************************************************************************************/
+void MothurOut::mothurOutEndLine(ofstream& outputFile) {
+       try {
+#ifdef USE_MPI
+               int pid;
+               MPI_Comm_rank(MPI_COMM_WORLD, &pid); 
+               
+               if (pid == 0) { //only one process should output to screen
+#endif
+                       
+                       cout << endl;
+                       out << endl;
+                       outputFile << endl;
+                       
+#ifdef USE_MPI
+               }
+#endif
+       }
+       catch(exception& e) {
+               errorOut(e, "MothurOut", "MothurOutEndLine");
+               exit(1);
+       }
+}
+/*********************************************************************************************/
 void MothurOut::mothurOutJustToLog(string output) {
        try {
                #ifdef USE_MPI
@@ -515,6 +562,21 @@ string MothurOut::getSimpleName(string longName){
 
 /***********************************************************************/
 
+int MothurOut::getRandomIndex(int highest){
+       try {
+               
+               int random = (int) ((float)(highest+1) * (float)(rand()) / ((float)RAND_MAX+1.0));
+               
+               return random;
+       }
+       catch(exception& e) {
+               errorOut(e, "MothurOut", "getRandomIndex");
+               exit(1);
+       }       
+       
+}
+/**********************************************************************/
+
 string MothurOut::getPathName(string longName){
        try {
                string rootPathName = longName;
@@ -749,7 +811,7 @@ int MothurOut::openInputFile(string fileName, ifstream& fileHandle, string m){
           cerr << "Decompressing " << completeFileName << " via temporary named pipe " << tempName << "\n";
           system(command.c_str());
           cerr << "Done decompressing " << completeFileName << "\n";
-          remove(tempName.c_str());
+          mothurRemove(tempName);
           exit(EXIT_SUCCESS);
         } else {
           cerr << "waiting on child process " << fork_result << "\n";
@@ -795,7 +857,7 @@ int MothurOut::openInputFile(string fileName, ifstream& fileHandle){
       cerr << "Decompressing " << completeFileName << " via temporary named pipe " << tempName << "\n";
       system(command.c_str());
       cerr << "Done decompressing " << completeFileName << "\n";
-      remove(tempName.c_str());
+      mothurRemove(tempName);
       exit(EXIT_SUCCESS);
     } else {
       cerr << "waiting on child process " << fork_result << "\n";
@@ -840,7 +902,7 @@ int MothurOut::renameFile(string oldName, string newName){
                string command = "mv " + oldName + " " + newName;
                system(command.c_str());
        #else
-               remove(newName.c_str());
+               m->mothurRemove(newName);
                int renameOk = rename(oldName.c_str(), newName.c_str());
        #endif
                return 0;
@@ -976,8 +1038,8 @@ string MothurOut::sortFile(string distFile, string outputDir){
                        output.close();
                
                        //remove temp files
-                       remove(tempDistFile.c_str());
-                       remove(tempOutfile.c_str());
+                       mothurRemove(tempDistFile);
+                       mothurRemove(tempOutfile);
                #endif
                
                return outfile;
@@ -1154,7 +1216,43 @@ vector<unsigned long int> MothurOut::divideFile(string filename, int& proc) {
                exit(1);
        }
 }
-
+/**************************************************************************************************/
+int MothurOut::divideFile(string filename, int& proc, vector<string>& files) {
+       try{
+               
+               vector<unsigned long int> filePos = divideFile(filename, proc);
+               
+               for (int i = 0; i < (filePos.size()-1); i++) {
+                       
+                       //read file chunk
+                       ifstream in;
+                       openInputFile(filename, in);
+                       in.seekg(filePos[i]);
+                       unsigned long int size = filePos[(i+1)] - filePos[i];
+                       char* chunk = new char[size];
+                       in.read(chunk, size);
+                       in.close();
+                       
+                       //open new file
+                       string fileChunkName = filename + "." + toString(i) + ".tmp";
+                       ofstream out; 
+                       openOutputFile(fileChunkName, out);
+                       
+                       out << chunk << endl;
+                       out.close();
+                       delete[] chunk;
+                       
+                       //save name
+                       files.push_back(fileChunkName);
+               }
+                               
+               return 0;
+       }
+       catch(exception& e) {
+               errorOut(e, "MothurOut", "divideFile");
+               exit(1);
+       }
+}
 /***********************************************************************/
 
 bool MothurOut::isTrue(string f){
@@ -1193,6 +1291,33 @@ float MothurOut::ceilDist(float dist, int precision){
                exit(1);
        }
 }
+/**********************************************************************************************************************/
+int MothurOut::readNames(string namefile, map<string, string>& nameMap) { 
+       try {
+               
+               //open input file
+               ifstream in;
+               openInputFile(namefile, in);
+               
+               while (!in.eof()) {
+                       if (control_pressed) { break; }
+                       
+                       string firstCol, secondCol;
+                       in >> firstCol >> secondCol; gobble(in);
+                       
+                       nameMap[firstCol] = secondCol;
+               }
+               in.close();
+               
+               return 0;
+               
+       }
+       catch(exception& e) {
+               errorOut(e, "MothurOut", "readNames");
+               exit(1);
+       }
+}
+
 /**********************************************************************************************************************/
 map<string, int> MothurOut::readNames(string namefile) { 
        try {
@@ -1282,7 +1407,18 @@ int MothurOut::getNumNames(string names){
                exit(1);
        }
 }
+/***********************************************************************/
 
+void MothurOut::mothurRemove(string filename){
+       try {
+               filename = getFullPathName(filename);
+               remove(filename.c_str());
+       }
+       catch(exception& e) {
+               errorOut(e, "MothurOut", "mothurRemove");
+               exit(1);
+       }
+}
 /**************************************************************************************************/
 
 vector<vector<double> > MothurOut::binomial(int maxOrder){