5 * Created by Sarah Westcott on 11/18/08.
6 * Copyright 2008 Schloss Lab UMASS Amherst. All rights reserved.
10 #include "raredisplay.h"
12 /***********************************************************************/
14 void RareDisplay::init(string label){
19 openOutputFile(tempOutName, tempOutFile);
20 openInputFile(tempInName, tempInFile);
23 openOutputFile(tempOutName, tempOutFile);
27 errorOut(e, "RareDisplay", "init");
32 /***********************************************************************/
34 void RareDisplay::update(SAbundVector* rank){
36 int newNSeqs = rank->getNumSeqs();
37 vector<double> data = estimate->getValues(rank);
41 double oldNSeqs, oldMean, oldVar;
43 tempInFile >> oldNSeqs >> oldMean >> oldVar;
45 double oldS = oldVar * ( nIters - 2 );
46 double delta = data[0] - oldMean;
47 double newMean = oldMean + delta / nIters;
48 double newS = oldS + delta * ( data[0] - newMean );
49 double newVar = newS / ( nIters - 1 );
51 tempOutFile << newNSeqs << '\t' << newMean << '\t' << newVar << endl;
54 tempOutFile << newNSeqs << '\t' << data[0] << '\t' << 0 << endl;
58 errorOut(e, "RareDisplay", "update");
63 /***********************************************************************/
64 void RareDisplay::update(vector<SharedRAbundVector*> shared, int numSeqs, int numGroupComb) {
66 vector<double> data = estimate->getValues(shared);
67 double newNSeqs = data[0];
70 double oldNSeqs, oldMean, oldVar;
72 tempInFile >> oldNSeqs >> oldMean >> oldVar;
74 double oldS = oldVar * ( nIters - 2 );
75 double delta = data[0] - oldMean;
76 double newMean = oldMean + delta / nIters;
77 double newS = oldS + delta * ( data[0] - newMean );
78 double newVar = newS / ( nIters - 1 );
80 tempOutFile << newNSeqs << '\t' << newMean << '\t' << newVar << endl;
83 tempOutFile << newNSeqs << '\t' << data[0] << '\t' << 0 << endl;
87 errorOut(e, "RareDisplay", "update");
92 /***********************************************************************/
94 void RareDisplay::reset(){
106 remove(tempInName.c_str());
107 renameOk = rename(tempOutName.c_str(), tempInName.c_str());
109 //checks to make sure user was able to rename and remove successfully
110 if (renameOk != 0) { mothurOut("Unable to rename the necessary temp files."); mothurOutEndLine(); }
112 catch(exception& e) {
113 errorOut(e, "RareDisplay", "reset");
118 /***********************************************************************/
120 void RareDisplay::close(){
123 output->initFile(label);
125 openInputFile(tempInName, tempInFile);
127 while(!tempInFile.eof()){
131 vector<double> data(3,0);
134 tempInFile >> data[0];
135 tempInFile >> variance;
137 double ci = 1.96 * pow(variance, 0.5);
138 data[1] = data[0] - ci;
139 data[2] = data[0] + ci;
141 output->output(nSeqs, data);
147 remove(tempInName.c_str());
148 remove(tempOutName.c_str());
153 catch(exception& e) {
154 errorOut(e, "RareDisplay", "close");
159 /***********************************************************************/