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"
26 //**********************************************************************************************************************
28 SummaryCommand::SummaryCommand(){
30 globaldata = GlobalData::getInstance();
31 validCalculator = new ValidCalculators();
34 for (i=0; i<globaldata->Estimators.size(); i++) {
35 if (validCalculator->isValidCalculator("summary", globaldata->Estimators[i]) == true) {
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);
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());
72 //reset calc for next command
73 globaldata->setCalc("");
77 cout << "Standard Error: " << e.what() << " has occurred in the SummaryCommand class Function SummaryCommand. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
81 cout << "An unknown error has occurred in the SummaryCommand class function SummaryCommand. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
85 //**********************************************************************************************************************
87 SummaryCommand::~SummaryCommand(){
93 //**********************************************************************************************************************
95 int SummaryCommand::execute(){
98 //if the users entered no valid calculators don't execute command
99 if (sumCalculators.size() == 0) { return 0; }
101 outputFileName = ((getRootName(globaldata->inputFileName)) + "summary");
102 openOutputFile(outputFileName, outputFileHandle);
103 outputFileHandle << "label";
105 read = new ReadPhilFile(globaldata->inputFileName);
106 read->read(&*globaldata);
108 for(int i=0;i<sumCalculators.size();i++){
109 if(sumCalculators[i]->getCols() == 1){
110 outputFileHandle << '\t' << sumCalculators[i]->getName();
113 outputFileHandle << '\t' << sumCalculators[i]->getName() << "\t" << sumCalculators[i]->getName() << "_lci\t" << sumCalculators[i]->getName() << "_hci";
116 outputFileHandle << endl;
118 sabund = globaldata->sabund;
119 input = globaldata->ginput;
121 while(sabund != NULL){
123 if(globaldata->allLines == 1 || globaldata->lines.count(count) == 1 || globaldata->labels.count(sabund->getLabel()) == 1){
125 cout << sabund->getLabel() << '\t' << count << endl;
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);
134 outputFileHandle << endl;
136 sabund = input->getSAbundVector();
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";
147 cout << "An unknown error has occurred in the SummaryCommand class function execute. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
152 //**********************************************************************************************************************