]> git.donarmstrong.com Git - mothur.git/blob - summarycommand.cpp
added boneh, efron, and solow calculators
[mothur.git] / summarycommand.cpp
1 /*
2  *  summarycommand.cpp
3  *  Dotur
4  *
5  *  Created by Sarah Westcott on 1/2/09.
6  *  Copyright 2009 Schloss Lab UMASS Amherst. All rights reserved.
7  *
8  */
9
10 #include "summarycommand.h"
11 #include "ace.h"
12 #include "sobs.h"
13 #include "nseqs.h"
14 #include "chao1.h"
15 #include "bootstrap.h"
16 #include "simpson.h"
17 #include "npshannon.h"
18 #include "shannon.h"
19 #include "jackknife.h"
20 #include "geom.h"
21 #include "logsd.h"
22 #include "qstat.h"
23 #include "bergerparker.h"
24 #include "bstick.h"
25 #include "goodscoverage.h"
26 #include "coverage.h"
27 #include "efron.h"
28 #include "boneh.h"
29 #include "solow.h"
30
31 //**********************************************************************************************************************
32
33 SummaryCommand::SummaryCommand(){
34         try {
35                 globaldata = GlobalData::getInstance();
36                 validCalculator = new ValidCalculators();
37                 int i;
38                 
39                 for (i=0; i<globaldata->Estimators.size(); i++) {
40                         if (validCalculator->isValidCalculator("summary", globaldata->Estimators[i]) == true) { 
41                                 if(globaldata->Estimators[i] == "sobs"){
42                                         sumCalculators.push_back(new Sobs());
43                                 }else if(globaldata->Estimators[i] == "chao"){
44                                         sumCalculators.push_back(new Chao1());
45                                 }else if(globaldata->Estimators[i] == "coverage"){
46                                         sumCalculators.push_back(new Coverage());
47                                 }else if(globaldata->Estimators[i] == "geometric"){
48                                         sumCalculators.push_back(new Geom());
49                                 }else if(globaldata->Estimators[i] == "logseries"){
50                                         sumCalculators.push_back(new LogSD());
51                                 }else if(globaldata->Estimators[i] == "qstat"){
52                                         sumCalculators.push_back(new QStat());
53                                 }else if(globaldata->Estimators[i] == "bergerparker"){
54                                         sumCalculators.push_back(new BergerParker());
55                                 }else if(globaldata->Estimators[i] == "bstick"){
56                                         sumCalculators.push_back(new BStick());
57                                 }else if(globaldata->Estimators[i] == "ace"){
58                                         convert(globaldata->getAbund(), abund);
59                                         if(abund < 5)
60                                                 abund = 10;
61                                         sumCalculators.push_back(new Ace(abund));
62                                 }else if(globaldata->Estimators[i] == "jack"){
63                                         sumCalculators.push_back(new Jackknife());
64                                 }else if(globaldata->Estimators[i] == "shannon"){
65                                         sumCalculators.push_back(new Shannon());
66                                 }else if(globaldata->Estimators[i] == "npshannon"){
67                                         sumCalculators.push_back(new NPShannon());
68                                 }else if(globaldata->Estimators[i] == "simpson"){
69                                         sumCalculators.push_back(new Simpson());
70                                 }else if(globaldata->Estimators[i] == "bootstrap"){
71                                         sumCalculators.push_back(new Bootstrap());
72                                 }else if (globaldata->Estimators[i] == "nseqs") { 
73                                         sumCalculators.push_back(new NSeqs());
74                                 }else if (globaldata->Estimators[i] == "goodscoverage") { 
75                                         sumCalculators.push_back(new GoodsCoverage());
76                                 }else if (globaldata->Estimators[i] == "efron") { 
77                                         convert(globaldata->getSize(), size);
78                                         sumCalculators.push_back(new Efron(size));
79                                 }else if (globaldata->Estimators[i] == "boneh") { 
80                                         convert(globaldata->getSize(), size);
81                                         sumCalculators.push_back(new Boneh(size));
82                                 }else if (globaldata->Estimators[i] == "solow") { 
83                                         convert(globaldata->getSize(), size);
84                                         sumCalculators.push_back(new Solow(size));
85                                 }
86                         }
87                 }
88                 
89                 //reset calc for next command
90                 globaldata->setCalc("");
91
92         }
93         catch(exception& e) {
94                 cout << "Standard Error: " << e.what() << " has occurred in the SummaryCommand class Function SummaryCommand. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
95                 exit(1);
96         }
97         catch(...) {
98                 cout << "An unknown error has occurred in the SummaryCommand class function SummaryCommand. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
99                 exit(1);
100         }       
101 }
102 //**********************************************************************************************************************
103
104 SummaryCommand::~SummaryCommand(){
105         delete sabund;
106         delete input;
107         delete read;
108 }
109
110 //**********************************************************************************************************************
111
112 int SummaryCommand::execute(){
113         try {
114         
115                 //if the users entered no valid calculators don't execute command
116                 if (sumCalculators.size() == 0) { return 0; }
117
118                 outputFileName = ((getRootName(globaldata->inputFileName)) + "summary");
119                 openOutputFile(outputFileName, outputFileHandle);
120                 outputFileHandle << "label";
121         
122                 read = new ReadOTUFile(globaldata->inputFileName);      
123                 read->read(&*globaldata); 
124
125                 for(int i=0;i<sumCalculators.size();i++){
126                         if(sumCalculators[i]->getCols() == 1){
127                                 outputFileHandle << '\t' << sumCalculators[i]->getName();
128                         }
129                         else{
130                                 outputFileHandle << '\t' << sumCalculators[i]->getName() << "\t" << sumCalculators[i]->getName() << "_lci\t" << sumCalculators[i]->getName() << "_hci";
131                         }
132                 }
133                 outputFileHandle << endl;
134                 
135                 sabund = globaldata->sabund;
136                 input = globaldata->ginput;
137                 int count = 1;
138                 while(sabund != NULL){
139                 
140                         if(globaldata->allLines == 1 || globaldata->lines.count(count) == 1 || globaldata->labels.count(sabund->getLabel()) == 1){                      
141         
142                                 cout << sabund->getLabel() << '\t' << count << endl;
143                                 
144                                 outputFileHandle << sabund->getLabel();
145                                 for(int i=0;i<sumCalculators.size();i++){
146                                         vector<double> data = sumCalculators[i]->getValues(sabund);
147                                         outputFileHandle << '\t';
148                                         sumCalculators[i]->print(outputFileHandle);
149                                 }
150                                 
151                                 outputFileHandle << endl;
152                         }
153                         sabund = input->getSAbundVector();
154                         count++;
155                 }
156         
157                 return 0;
158         }
159         catch(exception& e) {
160                 cout << "Standard Error: " << e.what() << " has occurred in the SummaryCommand class Function execute. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
161                 exit(1);
162         }
163         catch(...) {
164                 cout << "An unknown error has occurred in the SummaryCommand class function execute. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
165                 exit(1);
166         }               
167 }
168
169 //**********************************************************************************************************************