]> git.donarmstrong.com Git - mothur.git/blob - venncommand.cpp
changed all shared commands so that they read the shared file generated by the read...
[mothur.git] / venncommand.cpp
1 /*
2  *  venncommand.cpp
3  *  Mothur
4  *
5  *  Created by Sarah Westcott on 3/30/09.
6  *  Copyright 2009 Schloss Lab UMASS Amherst. All rights reserved.
7  *
8  */
9
10 #include "venncommand.h"
11 #include "ace.h"
12 #include "sobs.h"
13 #include "chao1.h"
14 //#include "jackknife.h"
15 #include "sharedsobscollectsummary.h"
16 #include "sharedchao1.h"
17 #include "sharedace.h"
18
19
20 //**********************************************************************************************************************
21
22 VennCommand::VennCommand(){
23         try {
24                 globaldata = GlobalData::getInstance();
25                 format = globaldata->getFormat();
26                 validCalculator = new ValidCalculators();
27                 
28                 int i;
29                 
30                 if (format == "list") {
31                         for (i=0; i<globaldata->Estimators.size(); i++) {
32                                 if (validCalculator->isValidCalculator("vennsingle", globaldata->Estimators[i]) == true) { 
33                                         if (globaldata->Estimators[i] == "sobs") { 
34                                                 vennCalculators.push_back(new Sobs());
35                                         }else if (globaldata->Estimators[i] == "chao") { 
36                                                 vennCalculators.push_back(new Chao1());
37                                         }else if (globaldata->Estimators[i] == "ace") {
38                                                 convert(globaldata->getAbund(), abund);
39                                                 if(abund < 5)
40                                                         abund = 10;
41                                                 vennCalculators.push_back(new Ace(abund));
42                                         //}else if (globaldata->Estimators[i] == "jack") {      
43                                                 //vennCalculators.push_back(new Jackknife());
44                                         }
45                                 }
46                         }
47                 }else {
48                         for (i=0; i<globaldata->Estimators.size(); i++) {
49                                 if (validCalculator->isValidCalculator("vennshared", globaldata->Estimators[i]) == true) { 
50                                         if (globaldata->Estimators[i] == "sharedsobs") { 
51                                                 vennCalculators.push_back(new SharedSobsCS());
52                                         }else if (globaldata->Estimators[i] == "sharedchao") { 
53                                                 vennCalculators.push_back(new SharedChao1());
54                                         }else if (globaldata->Estimators[i] == "sharedace") { 
55                                                 vennCalculators.push_back(new SharedAce());
56                                         }
57                                 }
58                         }
59                 }
60                 
61                 venn = new Venn();
62                 
63                 //reset calc for next command
64                 globaldata->setCalc("");
65
66                 
67         }
68         catch(exception& e) {
69                 cout << "Standard Error: " << e.what() << " has occurred in the VennCommand class Function VennCommand. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
70                 exit(1);
71         }
72         catch(...) {
73                 cout << "An unknown error has occurred in the VennCommand class function VennCommand. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
74                 exit(1);
75         }       
76 }
77 //**********************************************************************************************************************
78
79 VennCommand::~VennCommand(){
80         delete input;
81         delete read;
82         delete venn;
83 }
84
85 //**********************************************************************************************************************
86
87 int VennCommand::execute(){
88         try {
89                 int count = 1;  
90                 
91                 //if the users entered no valid calculators don't execute command
92                 if (vennCalculators.size() == 0) { return 0; }
93                 
94                 if (format == "sharedfile") {
95                         //you have groups
96                         read = new ReadOTUFile(globaldata->inputFileName);      
97                         read->read(&*globaldata); 
98                         
99                         input = globaldata->ginput;
100                         lookup = input->getSharedRAbundVectors();
101                 }else if (format == "list") {
102                         //you are using just a list file and have only one group
103                         read = new ReadOTUFile(globaldata->inputFileName);      
104                         read->read(&*globaldata); 
105                 
106                         sabund = globaldata->sabund;
107                         input = globaldata->ginput;
108                 }
109
110                 
111                 if (format != "list") { 
112                         
113                         while(lookup[0] != NULL){
114                 
115                                 if(globaldata->allLines == 1 || globaldata->lines.count(count) == 1 || globaldata->labels.count(lookup[0]->getLabel()) == 1){                   
116         
117                                         cout << lookup[0]->getLabel() << '\t' << count << endl;
118                                         
119                                         if (lookup.size() > 4) {
120                                                 cout << "Error: Too many groups chosen.  You may use up to 4 groups with the venn command.  I will use the first four groups in your groupfile." << endl;
121                                                 for (int i = lookup.size(); i > 3; i--) { delete lookup[i]; lookup.pop_back(); }
122                                         }
123                                         
124                                         //util->getSharedVectors(globaldata->Groups, lookup, order);  //fills group vectors from order vector.
125                                         venn->getPic(lookup, vennCalculators);
126                                 }
127                                                 
128                                 //get next line to process
129                                 lookup = input->getSharedRAbundVectors();
130                                 count++;
131                         }
132                         
133                         //reset groups parameter
134                         globaldata->Groups.clear();  
135                         
136                 }else{
137                 
138                         while(sabund != NULL){
139                 
140                                 if(globaldata->allLines == 1 || globaldata->lines.count(count) == 1 || globaldata->labels.count(sabund->getLabel()) == 1){                      
141         
142                                         cout << sabund->getLabel() << '\t' << count << endl;
143                                         venn->getPic(sabund, vennCalculators);
144                                 }
145                                 
146                                 sabund = input->getSAbundVector();
147                                 count++;
148                         }
149                 }
150                 
151                 globaldata->setGroups("");
152                 return 0;
153         }
154         catch(exception& e) {
155                 cout << "Standard Error: " << e.what() << " has occurred in the VennCommand class Function execute. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
156                 exit(1);
157         }
158         catch(...) {
159                 cout << "An unknown error has occurred in the VennCommand class function execute. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
160                 exit(1);
161         }               
162 }
163
164 //**********************************************************************************************************************