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