]> git.donarmstrong.com Git - mothur.git/blobdiff - mothurout.cpp
working on pam
[mothur.git] / mothurout.cpp
index 3d4504daf761d625ffedd1e11749aa567ca9327b..0f24cb2dc362c679dd16ed0eb7c50444f07e7a6e 100644 (file)
@@ -779,6 +779,8 @@ string MothurOut::getPathName(string longName){
 bool MothurOut::dirCheck(string& dirName){
        try {
         
+        if (dirName == "") { return false; }
+        
         string tag = "";
         #ifdef USE_MPI
             int pid; 
@@ -797,7 +799,7 @@ bool MothurOut::dirCheck(string& dirName){
 
         //test to make sure directory exists
         dirName = getFullPathName(dirName);
-        string outTemp = dirName + tag + "temp";
+        string outTemp = dirName + tag + "temp"+ toString(time(NULL));
         ofstream out;
         out.open(outTemp.c_str(), ios::trunc);
         if(!out) {
@@ -1140,6 +1142,105 @@ int MothurOut::openInputFile(string fileName, ifstream& fileHandle){
                exit(1);
        }       
 }
+/***********************************************************************/
+int MothurOut::openInputFileBinary(string fileName, ifstream& fileHandle){
+       try {
+        
+               //get full path name
+               string completeFileName = getFullPathName(fileName);
+#if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) || (__linux__) || (__unix__) || (__unix)
+#ifdef USE_COMPRESSION
+        // check for gzipped or bzipped file
+        if (endsWith(completeFileName, ".gz") || endsWith(completeFileName, ".bz2")) {
+            string tempName = string(tmpnam(0));
+            mkfifo(tempName.c_str(), 0666);
+            int fork_result = fork();
+            if (fork_result < 0) {
+                cerr << "Error forking.\n";
+                exit(1);
+            } else if (fork_result == 0) {
+                string command = (endsWith(completeFileName, ".gz") ? "zcat " : "bzcat ") + completeFileName + string(" > ") + tempName;
+                cerr << "Decompressing " << completeFileName << " via temporary named pipe " << tempName << "\n";
+                system(command.c_str());
+                cerr << "Done decompressing " << completeFileName << "\n";
+                mothurRemove(tempName);
+                exit(EXIT_SUCCESS);
+            } else {
+                cerr << "waiting on child process " << fork_result << "\n";
+                completeFileName = tempName;
+            }
+        }
+#endif
+#endif
+        
+               fileHandle.open(completeFileName.c_str(), ios::binary);
+               if(!fileHandle) {
+                       mothurOut("[ERROR]: Could not open " + completeFileName); mothurOutEndLine();
+                       return 1;
+               }
+               else {
+                       //check for blank file
+                       gobble(fileHandle);
+                       if (fileHandle.eof()) { mothurOut("[ERROR]: " + completeFileName + " is blank. Please correct."); mothurOutEndLine();  }
+                       
+                       return 0;
+               }
+       }
+       catch(exception& e) {
+               errorOut(e, "MothurOut", "openInputFileBinary");
+               exit(1);
+       }       
+}
+/***********************************************************************/
+int MothurOut::openInputFileBinary(string fileName, ifstream& fileHandle, string noerror){
+       try {
+        
+               //get full path name
+               string completeFileName = getFullPathName(fileName);
+#if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) || (__linux__) || (__unix__) || (__unix)
+#ifdef USE_COMPRESSION
+        // check for gzipped or bzipped file
+        if (endsWith(completeFileName, ".gz") || endsWith(completeFileName, ".bz2")) {
+            string tempName = string(tmpnam(0));
+            mkfifo(tempName.c_str(), 0666);
+            int fork_result = fork();
+            if (fork_result < 0) {
+                cerr << "Error forking.\n";
+                exit(1);
+            } else if (fork_result == 0) {
+                string command = (endsWith(completeFileName, ".gz") ? "zcat " : "bzcat ") + completeFileName + string(" > ") + tempName;
+                cerr << "Decompressing " << completeFileName << " via temporary named pipe " << tempName << "\n";
+                system(command.c_str());
+                cerr << "Done decompressing " << completeFileName << "\n";
+                mothurRemove(tempName);
+                exit(EXIT_SUCCESS);
+            } else {
+                cerr << "waiting on child process " << fork_result << "\n";
+                completeFileName = tempName;
+            }
+        }
+#endif
+#endif
+        
+               fileHandle.open(completeFileName.c_str(), ios::binary);
+               if(!fileHandle) {
+                       //mothurOut("[ERROR]: Could not open " + completeFileName); mothurOutEndLine();
+                       return 1;
+               }
+               else {
+                       //check for blank file
+                       gobble(fileHandle);
+                       //if (fileHandle.eof()) { mothurOut("[ERROR]: " + completeFileName + " is blank. Please correct."); mothurOutEndLine();  }
+                       
+                       return 0;
+               }
+       }
+       catch(exception& e) {
+               errorOut(e, "MothurOut", "openInputFileBinary - no error");
+               exit(1);
+       }
+}
+
 /***********************************************************************/
 
 int MothurOut::renameFile(string oldName, string newName){
@@ -1289,6 +1390,36 @@ int MothurOut::appendFiles(string temp, string filename) {
                exit(1);
        }       
 }
+/**************************************************************************************************/
+int MothurOut::appendBinaryFiles(string temp, string filename) {
+       try{
+               ofstream output;
+               ifstream input;
+        
+               //open output file in append mode
+               openOutputFileBinaryAppend(filename, output);
+               int ableToOpen = openInputFileBinary(temp, input, "no error");
+               
+               if (ableToOpen == 0) { //you opened it
+            
+            char buffer[4096];
+            while (!input.eof()) {
+                input.read(buffer, 4096);
+                output.write(buffer, input.gcount());
+            }
+                       input.close();
+               }
+               
+               output.close();
+               
+               return ableToOpen;
+       }
+       catch(exception& e) {
+               errorOut(e, "MothurOut", "appendBinaryFiles");
+               exit(1);
+       }       
+}
+
 /**************************************************************************************************/
 int MothurOut::appendFilesWithoutHeaders(string temp, string filename) {
        try{
@@ -3013,6 +3144,64 @@ void MothurOut::getNumSeqs(ifstream& file, int& numSeqs){
        }       
 }
 /***********************************************************************/
+bool MothurOut::checkLocations(string& filename, string inputDir){
+       try {
+               filename = getFullPathName(filename);
+        
+        int ableToOpen;
+        ifstream in;
+        ableToOpen = openInputFile(filename, in, "noerror");
+        in.close();
+        
+        //if you can't open it, try input location
+        if (ableToOpen == 1) {
+            if (inputDir != "") { //default path is set
+                string tryPath = inputDir + getSimpleName(filename);
+                mothurOut("Unable to open " + filename + ". Trying input directory " + tryPath); mothurOutEndLine();
+                ifstream in2;
+                ableToOpen = openInputFile(tryPath, in2, "noerror");
+                in2.close();
+                filename = tryPath;
+            }
+        }
+        
+        //if you can't open it, try default location
+        if (ableToOpen == 1) {
+            if (getDefaultPath() != "") { //default path is set
+                string tryPath = getDefaultPath() + getSimpleName(filename);
+                mothurOut("Unable to open " + filename + ". Trying default " + tryPath); mothurOutEndLine();
+                ifstream in2;
+                ableToOpen = openInputFile(tryPath, in2, "noerror");
+                in2.close();
+                filename = tryPath;
+            }
+        }
+        
+        //if you can't open it its not in current working directory or inputDir, try mothur excutable location
+        if (ableToOpen == 1) {
+            string exepath = argv;
+            string tempPath = exepath;
+            for (int i = 0; i < exepath.length(); i++) { tempPath[i] = tolower(exepath[i]); }
+            exepath = exepath.substr(0, (tempPath.find_last_of('m')));
+            
+            string tryPath = getFullPathName(exepath) + getSimpleName(filename);
+            mothurOut("Unable to open " + filename + ". Trying mothur's executable location " + tryPath); mothurOutEndLine();
+            ifstream in2;
+            ableToOpen = openInputFile(tryPath, in2, "noerror");
+            in2.close();
+            filename = tryPath;
+        }
+        
+        if (ableToOpen == 1) { mothurOut("Unable to open " + filename + "."); mothurOutEndLine(); return false;  }
+        
+        return true;
+       }
+       catch(exception& e) {
+               errorOut(e, "MothurOut", "checkLocations");
+               exit(1);
+       }
+}
+/***********************************************************************/
 
 //This function parses the estimator options and puts them in a vector
 void MothurOut::splitAtChar(string& estim, vector<string>& container, char symbol) {