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