5 * Created by Sarah Westcott on 1/2/09.
6 * Copyright 2009 Schloss Lab UMASS Amherst. All rights reserved.
10 #include "summarycommand.h"
15 #include "bootstrap.h"
17 #include "npshannon.h"
19 #include "jackknife.h"
23 #include "bergerparker.h"
25 #include "goodscoverage.h"
31 //**********************************************************************************************************************
33 SummaryCommand::SummaryCommand(){
35 globaldata = GlobalData::getInstance();
36 validCalculator = new ValidCalculators();
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);
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));
89 //reset calc for next command
90 globaldata->setCalc("");
94 cout << "Standard Error: " << e.what() << " has occurred in the SummaryCommand class Function SummaryCommand. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
98 cout << "An unknown error has occurred in the SummaryCommand class function SummaryCommand. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
102 //**********************************************************************************************************************
104 SummaryCommand::~SummaryCommand(){
110 //**********************************************************************************************************************
112 int SummaryCommand::execute(){
115 //if the users entered no valid calculators don't execute command
116 if (sumCalculators.size() == 0) { return 0; }
118 outputFileName = ((getRootName(globaldata->inputFileName)) + "summary");
119 openOutputFile(outputFileName, outputFileHandle);
120 outputFileHandle << "label";
122 read = new ReadOTUFile(globaldata->inputFileName);
123 read->read(&*globaldata);
125 for(int i=0;i<sumCalculators.size();i++){
126 if(sumCalculators[i]->getCols() == 1){
127 outputFileHandle << '\t' << sumCalculators[i]->getName();
130 outputFileHandle << '\t' << sumCalculators[i]->getName() << "\t" << sumCalculators[i]->getName() << "_lci\t" << sumCalculators[i]->getName() << "_hci";
133 outputFileHandle << endl;
135 sabund = globaldata->sabund;
136 input = globaldata->ginput;
138 while(sabund != NULL){
140 if(globaldata->allLines == 1 || globaldata->lines.count(count) == 1 || globaldata->labels.count(sabund->getLabel()) == 1){
142 cout << sabund->getLabel() << '\t' << count << endl;
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);
151 outputFileHandle << endl;
153 sabund = input->getSAbundVector();
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";
164 cout << "An unknown error has occurred in the SummaryCommand class function execute. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
169 //**********************************************************************************************************************