X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;ds=sidebyside;f=pintail.cpp;h=8a159ca381bd3378ee3f2f63d9dabdc692c1676d;hb=6e81846c8e5b2614f6b06643a9f558fb0e6669fa;hp=84c3219822920e21bc20d89f2fdf6b4f58ead1f3;hpb=fdc1f6eaf544f695fc1511f24bddd7e6069c33ba;p=mothur.git diff --git a/pintail.cpp b/pintail.cpp index 84c3219..8a159ca 100644 --- a/pintail.cpp +++ b/pintail.cpp @@ -183,7 +183,7 @@ int Pintail::doPrep() { if (m->control_pressed) { return 0; } - string outputString = ""; + string outputString = "#" + m->getVersion() + "\n"; //adjust quantiles for (int i = 0; i < quantilesMembers.size(); i++) { @@ -196,20 +196,20 @@ int Pintail::doPrep() { } }else{ - sort(quantilesMembers[i].begin(), quantilesMembers[i].end(), compareQuanMembers); + sort(quantilesMembers[i].begin(), quantilesMembers[i].end()); //save 10% - temp.push_back(quantilesMembers[i][int(quantilesMembers[i].size() * 0.10)].score); + temp.push_back(quantilesMembers[i][int(quantilesMembers[i].size() * 0.10)]); //save 25% - temp.push_back(quantilesMembers[i][int(quantilesMembers[i].size() * 0.25)].score); + temp.push_back(quantilesMembers[i][int(quantilesMembers[i].size() * 0.25)]); //save 50% - temp.push_back(quantilesMembers[i][int(quantilesMembers[i].size() * 0.5)].score); + temp.push_back(quantilesMembers[i][int(quantilesMembers[i].size() * 0.5)]); //save 75% - temp.push_back(quantilesMembers[i][int(quantilesMembers[i].size() * 0.75)].score); + temp.push_back(quantilesMembers[i][int(quantilesMembers[i].size() * 0.75)]); //save 95% - temp.push_back(quantilesMembers[i][int(quantilesMembers[i].size() * 0.95)].score); + temp.push_back(quantilesMembers[i][int(quantilesMembers[i].size() * 0.95)]); //save 99% - temp.push_back(quantilesMembers[i][int(quantilesMembers[i].size() * 0.99)].score); + temp.push_back(quantilesMembers[i][int(quantilesMembers[i].size() * 0.99)]); } @@ -224,6 +224,9 @@ int Pintail::doPrep() { printQuanFile(noOutliers, outputString); + //free memory + quantilesMembers.clear(); + m->mothurOut("Done."); m->mothurOutEndLine(); } @@ -310,11 +313,12 @@ int Pintail::print(MPI_File& out, MPI_File& outAcc) { MPI_Status statusAcc; int length = outAccString.length(); - char buf[length]; - strcpy(buf, outAccString.c_str()); + char* buf = new char[length]; + memcpy(buf, outAccString.c_str(), length); MPI_File_write_shared(outAcc, buf, length, MPI_CHAR, &statusAcc); - + delete buf; + results = true; } outputString += "Observed\t"; @@ -329,10 +333,11 @@ int Pintail::print(MPI_File& out, MPI_File& outAcc) { MPI_Status status; int length = outputString.length(); - char buf2[length]; - strcpy(buf2, outputString.c_str()); + char* buf2 = new char[length]; + memcpy(buf2, outputString.c_str(), length); MPI_File_write_shared(out, buf2, length, MPI_CHAR, &status); + delete buf2; return results; } @@ -424,21 +429,29 @@ vector Pintail::readFreq() { MPI_File inMPI; MPI_Offset size; MPI_Status status; + + //char* inFileName = new char[consfile.length()]; + //memcpy(inFileName, consfile.c_str(), consfile.length()); - char inFileName[consfile.length()]; + char inFileName[1024]; strcpy(inFileName, consfile.c_str()); MPI_File_open(MPI_COMM_WORLD, inFileName, MPI_MODE_RDONLY, MPI_INFO_NULL, &inMPI); MPI_File_get_size(inMPI, &size); + //delete inFileName; - char buffer[size]; + char* buffer = new char[size]; MPI_File_read(inMPI, buffer, size, MPI_CHAR, &status); string tempBuf = buffer; + delete buffer; if (tempBuf.length() > size) { tempBuf = tempBuf.substr(0, size); } istringstream iss (tempBuf,istringstream::in); + //read version + string line = getline(iss); gobble(iss); + while(!iss.eof()) { iss >> pos >> num; @@ -462,6 +475,9 @@ vector Pintail::readFreq() { ifstream in; openInputFile(consfile, in); + + //read version + string line = getline(in); gobble(in); while(!in.eof()){ @@ -537,7 +553,7 @@ void Pintail::createProcessesQuan() { for (int i = 0; i < quantilesMembers.size(); i++) { out << quantilesMembers[i].size() << '\t'; for (int j = 0; j < quantilesMembers[i].size(); j++) { - out << quantilesMembers[i][j].score << '\t' << quantilesMembers[i][j].member1 << '\t' << quantilesMembers[i][j].member2 << '\t'; + out << quantilesMembers[i][j] << '\t'; } out << endl; } @@ -560,25 +576,23 @@ void Pintail::createProcessesQuan() { string s = toString(processIDS[i]) + ".temp"; openInputFile(s, in); - vector< vector > quan; + vector< vector > quan; quan.resize(100); //get quantiles - for (int m = 0; m < quan.size(); m++) { + for (int h = 0; h < quan.size(); h++) { int num; in >> num; gobble(in); - vector q; float w; int b, n; + vector q; float w; for (int j = 0; j < num; j++) { - in >> w >> b >> n; - - quanMember newMember(w, b, n); - q.push_back(newMember); + in >> w; + q.push_back(w); } - quan[m] = q; + quan[h] = q; gobble(in); } @@ -621,18 +635,27 @@ vector< vector > Pintail::readQuantiles() { MPI_Offset size; MPI_Status status; - char inFileName[quanfile.length()]; + //char* inFileName = new char[quanfile.length()]; + //memcpy(inFileName, quanfile.c_str(), quanfile.length()); + + char inFileName[1024]; strcpy(inFileName, quanfile.c_str()); MPI_File_open(MPI_COMM_WORLD, inFileName, MPI_MODE_RDONLY, MPI_INFO_NULL, &inMPI); MPI_File_get_size(inMPI, &size); + //delete inFileName; - char buffer[size]; + + char* buffer = new char[size]; MPI_File_read(inMPI, buffer, size, MPI_CHAR, &status); string tempBuf = buffer; if (tempBuf.length() > size) { tempBuf = tempBuf.substr(0, size); } istringstream iss (tempBuf,istringstream::in); + delete buffer; + + //read version + string line = getline(iss); gobble(iss); while(!iss.eof()) { iss >> num >> ten >> twentyfive >> fifty >> seventyfive >> ninetyfive >> ninetynine; @@ -657,6 +680,9 @@ vector< vector > Pintail::readQuantiles() { ifstream in; openInputFile(quanfile, in); + + //read version + string line = getline(in); gobble(in); while(!in.eof()){ @@ -700,21 +726,27 @@ void Pintail::printQuanFile(string file, string outputString) { MPI_Comm_rank(MPI_COMM_WORLD, &pid); //find out who we are int outMode=MPI_MODE_CREATE|MPI_MODE_WRONLY; + + //char* FileName = new char[file.length()]; + //memcpy(FileName, file.c_str(), file.length()); - char FileName[file.length()]; + char FileName[1024]; strcpy(FileName, file.c_str()); if (pid == 0) { MPI_File_open(MPI_COMM_SELF, FileName, outMode, MPI_INFO_NULL, &outQuan); //comm, filename, mode, info, filepointer int length = outputString.length(); - char buf[length]; - strcpy(buf, outputString.c_str()); + char* buf = new char[length]; + memcpy(buf, outputString.c_str(), length); MPI_File_write(outQuan, buf, length, MPI_CHAR, &status); - + delete buf; + MPI_File_close(&outQuan); } + + //delete FileName; #else ofstream outQuan; openOutputFile(file, outQuan);