]> git.donarmstrong.com Git - mothur.git/blob - raredisplay.cpp
added logfile feature
[mothur.git] / raredisplay.cpp
1 /*
2  *  raredisplay.cpp
3  *  Dotur
4  *
5  *  Created by Sarah Westcott on 11/18/08.
6  *  Copyright 2008 Schloss Lab UMASS Amherst. All rights reserved.
7  *
8  */
9
10 #include "raredisplay.h"
11
12 /***********************************************************************/
13
14 void RareDisplay::init(string label){
15         try {
16                 this->label = label;
17                 if(nIters != 1){
18                         tempInFile.clear();
19                         openOutputFile(tempOutName, tempOutFile);
20                         openInputFile(tempInName, tempInFile);
21                 }
22                 else{
23                         openOutputFile(tempOutName, tempOutFile);
24                 }
25         }
26         catch(exception& e) {
27                 errorOut(e, "RareDisplay", "init");
28                 exit(1);
29         }
30 }
31
32 /***********************************************************************/
33
34 void RareDisplay::update(SAbundVector* rank){
35         try {
36                 int newNSeqs = rank->getNumSeqs();
37                 vector<double> data = estimate->getValues(rank);
38
39                 if(nIters != 1){
40
41                         double oldNSeqs, oldMean, oldVar;
42                 
43                         tempInFile >> oldNSeqs >> oldMean >> oldVar;
44                 
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 );
50
51                         tempOutFile << newNSeqs << '\t' << newMean << '\t' << newVar << endl;
52                 }
53                 else{
54                         tempOutFile << newNSeqs << '\t' << data[0] << '\t' << 0 << endl;
55                 }
56         }
57         catch(exception& e) {
58                 errorOut(e, "RareDisplay", "update");
59                 exit(1);
60         }
61 }
62
63 /***********************************************************************/
64 void RareDisplay::update(vector<SharedRAbundVector*> shared, int numSeqs, int numGroupComb) {
65         try {
66                 vector<double> data = estimate->getValues(shared); 
67                 double newNSeqs = data[0];
68                 
69                 if(nIters != 1){
70                         double oldNSeqs, oldMean, oldVar;
71                 
72                         tempInFile >> oldNSeqs >> oldMean >> oldVar;
73                 
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 );
79
80                         tempOutFile << newNSeqs << '\t' << newMean << '\t' << newVar << endl;
81                 }
82                 else{
83                         tempOutFile << newNSeqs << '\t' << data[0] << '\t' << 0 << endl;
84                 }
85         }
86         catch(exception& e) {
87                 errorOut(e, "RareDisplay", "update");
88                 exit(1);
89         }
90 }
91
92 /***********************************************************************/
93
94 void RareDisplay::reset(){
95         try {
96                 if(nIters != 1){
97                         tempOutFile.close();
98                         tempInFile.close();
99                 }
100                 else{
101                         tempOutFile.close();
102                 }
103         
104                 nIters++;
105         
106                 remove(tempInName.c_str());
107                 renameOk = rename(tempOutName.c_str(), tempInName.c_str());     
108                 
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(); }
111         }
112         catch(exception& e) {
113                 errorOut(e, "RareDisplay", "reset");
114                 exit(1);
115         }
116 }
117
118 /***********************************************************************/
119
120 void RareDisplay::close(){
121         try {
122                 
123                 output->initFile(label);
124         
125                 openInputFile(tempInName, tempInFile);
126         
127                 while(!tempInFile.eof()){
128                         int nSeqs;
129                         tempInFile >> nSeqs;
130                 
131                         vector<double> data(3,0);
132                         double variance = 0;
133                 
134                         tempInFile >> data[0];
135                         tempInFile >> variance;
136                 
137                         double ci = 1.96 * pow(variance, 0.5);
138                         data[1] = data[0] - ci;
139                         data[2] = data[0] + ci;
140                 
141                         output->output(nSeqs, data);
142                 
143                         gobble(tempInFile);
144                 }
145                 tempInFile.close();
146         
147                 remove(tempInName.c_str());
148                 remove(tempOutName.c_str());
149                 
150                 nIters = 1;
151                 output->resetFile();
152         }
153         catch(exception& e) {
154                 errorOut(e, "RareDisplay", "close");
155                 exit(1);
156         }
157 }
158
159 /***********************************************************************/
160