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