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"
28 //**********************************************************************************************************************
30 SummaryCommand::SummaryCommand(){
32 globaldata = GlobalData::getInstance();
33 validCalculator = new ValidCalculators();
36 for (i=0; i<globaldata->Estimators.size(); i++) {
37 if (validCalculator->isValidCalculator("summary", globaldata->Estimators[i]) == true) {
38 if(globaldata->Estimators[i] == "sobs"){
39 sumCalculators.push_back(new Sobs());
40 }else if(globaldata->Estimators[i] == "chao"){
41 sumCalculators.push_back(new Chao1());
42 }else if(globaldata->Estimators[i] == "coverage"){
43 sumCalculators.push_back(new Coverage());
44 }else if(globaldata->Estimators[i] == "geometric"){
45 sumCalculators.push_back(new Geom());
46 }else if(globaldata->Estimators[i] == "logseries"){
47 sumCalculators.push_back(new LogSD());
48 }else if(globaldata->Estimators[i] == "qstat"){
49 sumCalculators.push_back(new QStat());
50 }else if(globaldata->Estimators[i] == "bergerparker"){
51 sumCalculators.push_back(new BergerParker());
52 }else if(globaldata->Estimators[i] == "bstick"){
53 sumCalculators.push_back(new BStick());
54 }else if(globaldata->Estimators[i] == "ace"){
55 convert(globaldata->getAbund(), abund);
58 sumCalculators.push_back(new Ace(abund));
59 }else if(globaldata->Estimators[i] == "jack"){
60 sumCalculators.push_back(new Jackknife());
61 }else if(globaldata->Estimators[i] == "shannon"){
62 sumCalculators.push_back(new Shannon());
63 }else if(globaldata->Estimators[i] == "npshannon"){
64 sumCalculators.push_back(new NPShannon());
65 }else if(globaldata->Estimators[i] == "simpson"){
66 sumCalculators.push_back(new Simpson());
67 }else if(globaldata->Estimators[i] == "bootstrap"){
68 sumCalculators.push_back(new Bootstrap());
69 }else if (globaldata->Estimators[i] == "nseqs") {
70 sumCalculators.push_back(new NSeqs());
71 }else if (globaldata->Estimators[i] == "goodscoverage") {
72 sumCalculators.push_back(new GoodsCoverage());
77 //reset calc for next command
78 globaldata->setCalc("");
82 cout << "Standard Error: " << e.what() << " has occurred in the SummaryCommand class Function SummaryCommand. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
86 cout << "An unknown error has occurred in the SummaryCommand class function SummaryCommand. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
90 //**********************************************************************************************************************
92 SummaryCommand::~SummaryCommand(){
98 //**********************************************************************************************************************
100 int SummaryCommand::execute(){
103 //if the users entered no valid calculators don't execute command
104 if (sumCalculators.size() == 0) { return 0; }
106 outputFileName = ((getRootName(globaldata->inputFileName)) + "summary");
107 openOutputFile(outputFileName, outputFileHandle);
108 outputFileHandle << "label";
110 read = new ReadOTUFile(globaldata->inputFileName);
111 read->read(&*globaldata);
113 for(int i=0;i<sumCalculators.size();i++){
114 if(sumCalculators[i]->getCols() == 1){
115 outputFileHandle << '\t' << sumCalculators[i]->getName();
118 outputFileHandle << '\t' << sumCalculators[i]->getName() << "\t" << sumCalculators[i]->getName() << "_lci\t" << sumCalculators[i]->getName() << "_hci";
121 outputFileHandle << endl;
123 sabund = globaldata->sabund;
124 input = globaldata->ginput;
126 while(sabund != NULL){
128 if(globaldata->allLines == 1 || globaldata->lines.count(count) == 1 || globaldata->labels.count(sabund->getLabel()) == 1){
130 cout << sabund->getLabel() << '\t' << count << endl;
132 outputFileHandle << sabund->getLabel();
133 for(int i=0;i<sumCalculators.size();i++){
134 vector<double> data = sumCalculators[i]->getValues(sabund);
135 outputFileHandle << '\t';
136 sumCalculators[i]->print(outputFileHandle);
139 outputFileHandle << endl;
141 sabund = input->getSAbundVector();
147 catch(exception& e) {
148 cout << "Standard Error: " << e.what() << " has occurred in the SummaryCommand class Function execute. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
152 cout << "An unknown error has occurred in the SummaryCommand class function execute. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
157 //**********************************************************************************************************************