X-Git-Url: https://git.donarmstrong.com/?p=mothur.git;a=blobdiff_plain;f=raredisplay.cpp;h=6c5a5e5f6d5c22a08d609681d88f5539460881ac;hp=b86312bc4411e8cdd2faca9934aab3abf5c96c52;hb=30b3ffcd1cfd08e7144ae721bb53e27eb3f7a5d1;hpb=6d7408400b6bbdde4173922c5dca528f9f4e0a22 diff --git a/raredisplay.cpp b/raredisplay.cpp index b86312b..6c5a5e5 100644 --- a/raredisplay.cpp +++ b/raredisplay.cpp @@ -14,14 +14,6 @@ void RareDisplay::init(string label){ try { this->label = label; - if(nIters != 1){ - tempInFile.clear(); - openOutputFile(tempOutName, tempOutFile); - openInputFile(tempInName, tempInFile); - } - else{ - openOutputFile(tempOutName, tempOutFile); - } } catch(exception& e) { errorOut(e, "RareDisplay", "init"); @@ -38,20 +30,22 @@ void RareDisplay::update(SAbundVector* rank){ if(nIters != 1){ - double oldNSeqs, oldMean, oldVar; - - tempInFile >> oldNSeqs >> oldMean >> oldVar; - - double oldS = oldVar * ( nIters - 2 ); - double delta = data[0] - oldMean; - double newMean = oldMean + delta / nIters; + double oldS = var[index] * ( nIters - 2 ); + double delta = data[0] - results[index]; + double newMean = results[index] + delta / nIters; double newS = oldS + delta * ( data[0] - newMean ); double newVar = newS / ( nIters - 1 ); - tempOutFile << newNSeqs << '\t' << newMean << '\t' << newVar << endl; + seqs[index] = newNSeqs; + results[index] = newMean; + var[index] = newVar; + + index++; } else{ - tempOutFile << newNSeqs << '\t' << data[0] << '\t' << 0 << endl; + seqs.push_back(newNSeqs); + results.push_back(data[0]); + var.push_back(0.0); } } catch(exception& e) { @@ -67,20 +61,24 @@ void RareDisplay::update(vector shared, int numSeqs, int nu double newNSeqs = data[0]; if(nIters != 1){ - double oldNSeqs, oldMean, oldVar; - tempInFile >> oldNSeqs >> oldMean >> oldVar; - - double oldS = oldVar * ( nIters - 2 ); - double delta = data[0] - oldMean; - double newMean = oldMean + delta / nIters; + double oldS = var[index] * ( nIters - 2 ); + double delta = data[0] - results[index]; + double newMean = results[index] + delta / nIters; double newS = oldS + delta * ( data[0] - newMean ); double newVar = newS / ( nIters - 1 ); - - tempOutFile << newNSeqs << '\t' << newMean << '\t' << newVar << endl; + seqs[index] = newNSeqs; + results[index] = newMean; + var[index] = newVar; + + index++; } else{ - tempOutFile << newNSeqs << '\t' << data[0] << '\t' << 0 << endl; + + seqs.push_back(newNSeqs); + results.push_back(data[0]); + var.push_back(0.0); + } } catch(exception& e) { @@ -93,21 +91,8 @@ void RareDisplay::update(vector shared, int numSeqs, int nu void RareDisplay::reset(){ try { - if(nIters != 1){ - tempOutFile.close(); - tempInFile.close(); - } - else{ - tempOutFile.close(); - } - nIters++; - - remove(tempInName.c_str()); - renameOk = rename(tempOutName.c_str(), tempInName.c_str()); - - //checks to make sure user was able to rename and remove successfully - if (renameOk != 0) { mothurOut("Unable to rename the necessary temp files."); mothurOutEndLine(); } + index = 0; } catch(exception& e) { errorOut(e, "RareDisplay", "reset"); @@ -122,32 +107,27 @@ void RareDisplay::close(){ output->initFile(label); - openInputFile(tempInName, tempInFile); - - while(!tempInFile.eof()){ - int nSeqs; - tempInFile >> nSeqs; + for (int i = 0; i < seqs.size(); i++) { vector data(3,0); - double variance = 0; - - tempInFile >> data[0]; - tempInFile >> variance; - + double variance = var[i]; + + data[0] = results[i]; + double ci = 1.96 * pow(variance, 0.5); data[1] = data[0] - ci; data[2] = data[0] + ci; - output->output(nSeqs, data); - - gobble(tempInFile); + output->output(seqs[i], data); } - tempInFile.close(); - - remove(tempInName.c_str()); - remove(tempOutName.c_str()); nIters = 1; + index = 0; + + seqs.clear(); + results.clear(); + var.clear(); + output->resetFile(); } catch(exception& e) {