]> git.donarmstrong.com Git - mothur.git/blob - getgroupcommand.cpp
removed read.dist, read.otu, read.tree and globaldata. added current to defaults...
[mothur.git] / getgroupcommand.cpp
1 /*
2  *  getgroupcommand.cpp
3  *  Mothur
4  *
5  *  Created by Thomas Ryabin on 2/2/09.
6  *  Copyright 2009 Schloss Lab UMASS Amherst. All rights reserved.
7  *
8  */
9
10 #include "getgroupcommand.h"
11
12 //**********************************************************************************************************************
13 vector<string> GetgroupCommand::setParameters(){        
14         try {
15                 CommandParameter pshared("shared", "InputTypes", "", "current", "none", "none", "none",false,true); parameters.push_back(pshared);
16                 CommandParameter pinputdir("inputdir", "String", "", "", "", "", "",false,false); parameters.push_back(pinputdir);
17                 CommandParameter poutputdir("outputdir", "String", "", "", "", "", "",false,false); parameters.push_back(poutputdir);
18                 
19                 vector<string> myArray;
20                 for (int i = 0; i < parameters.size(); i++) {   myArray.push_back(parameters[i].name);          }
21                 return myArray;
22         }
23         catch(exception& e) {
24                 m->errorOut(e, "GetgroupCommand", "setParameters");
25                 exit(1);
26         }
27 }
28 //**********************************************************************************************************************
29 string GetgroupCommand::getHelpString(){        
30         try {
31                 string helpString = "";
32                 helpString += "The get.group command parameter is shared and it's required if you have no valid current file.\n";
33                 //m->mothurOut("The get.group command outputs a .bootGroups file to you can use in addition to the tree file generated by the bootstrap.shared command to run the consensus command.\n");
34                 helpString += "You may not use any parameters with the get.group command.\n";
35                 helpString += "The get.group command should be in the following format: \n";
36                 helpString += "get.group()\n";
37                 helpString += "Example get.group().\n";
38                 return helpString;
39         }
40         catch(exception& e) {
41                 m->errorOut(e, "GetgroupCommand", "getHelpString");
42                 exit(1);
43         }
44 }
45 //**********************************************************************************************************************
46 GetgroupCommand::GetgroupCommand(){     
47         try {
48                 abort = true; calledHelp = true; 
49                 setParameters();
50                 vector<string> tempOutNames;
51                 outputTypes["bootgroup"] = tempOutNames;
52         }
53         catch(exception& e) {
54                 m->errorOut(e, "GetgroupCommand", "GetgroupCommand");
55                 exit(1);
56         }
57 }
58 //**********************************************************************************************************************
59 GetgroupCommand::GetgroupCommand(string option)  {
60         try {
61                 abort = false; calledHelp = false;   
62                 
63                 //allow user to run help
64                 if(option == "help") { help(); abort = true; calledHelp = true; }
65                 
66                 else {
67                         //valid paramters for this command
68                         string Array[] =  {"outputdir","inputdir"};
69                         vector<string> myArray (Array, Array+(sizeof(Array)/sizeof(string)));
70                         
71                         OptionParser parser(option);
72                         map<string,string> parameters = parser.getParameters();
73                         map<string,string>::iterator it;
74                         
75                         ValidParameters validParameter;
76                         //check to make sure all parameters are valid for command
77                         for (it = parameters.begin(); it != parameters.end(); it++) { 
78                                 if (validParameter.isValidParameter(it->first, myArray, it->second) != true) {  abort = true;  }
79                         }
80                         
81                         //initialize outputTypes
82                         vector<string> tempOutNames;
83                         outputTypes["bootgroup"] = tempOutNames;
84                         
85                         //if the user changes the input directory command factory will send this info to us in the output parameter 
86                         string inputDir = validParameter.validFile(parameters, "inputdir", false);              
87                         if (inputDir == "not found"){   inputDir = "";          }
88                         else {
89                                 string path;
90                                 it = parameters.find("shared");
91                                 //user has given a template file
92                                 if(it != parameters.end()){ 
93                                         path = m->hasPath(it->second);
94                                         //if the user has not given a path then, add inputdir. else leave path alone.
95                                         if (path == "") {       parameters["shared"] = inputDir + it->second;           }
96                                 }
97                         }
98                         
99                         //get shared file
100                         sharedfile = validParameter.validFile(parameters, "shared", true);
101                         if (sharedfile == "not open") { sharedfile = ""; abort = true; }        
102                         else if (sharedfile == "not found") { 
103                                 //if there is a current shared file, use it
104                                 sharedfile = m->getSharedFile(); 
105                                 if (sharedfile != "") { m->mothurOut("Using " + sharedfile + " as input file for the shared parameter."); m->mothurOutEndLine(); }
106                                 else {  m->mothurOut("You have no current sharedfile and the shared parameter is required."); m->mothurOutEndLine(); abort = true; }
107                         }
108                         
109                         
110                         //if the user changes the output directory command factory will send this info to us in the output parameter 
111                         outputDir = validParameter.validFile(parameters, "outputdir", false);           if (outputDir == "not found"){  outputDir = m->hasPath(sharedfile);             }
112                 }
113         }
114         catch(exception& e) {
115                 m->errorOut(e, "GetgroupCommand", "GetgroupCommand");
116                 exit(1);
117         }
118 }
119 //**********************************************************************************************************************
120
121 int GetgroupCommand::execute(){
122         try {
123         
124                 if (abort == true) { if (calledHelp) { return 0; }  return 2;   }
125                 
126                 //open shared file
127                 m->openInputFile(sharedfile, in);
128                         
129                 //open output file
130                 outputFile = outputDir + m->getRootName(m->getSimpleName(sharedfile)) + "bootGroups";
131                 m->openOutputFile(outputFile, out);
132                         
133                 int num, inputData, count;
134                 count = 0;  
135                 string holdLabel, nextLabel, groupN, label;
136                 
137                 //read in first row since you know there is at least 1 group.
138                 in >> label >> groupN >> num;
139                 holdLabel = label;
140                 
141                 //output first group
142                 m->mothurOut(groupN); m->mothurOutEndLine();
143                 out << groupN << '\t' << groupN << endl;        
144                         
145                 //get rest of line
146                 for(int i=0;i<num;i++){
147                         in >> inputData;
148                 }
149                 
150                 if (m->control_pressed) { outputTypes.clear(); in.close();  out.close(); remove(outputFile.c_str());   return 0; }
151
152                 if (in.eof() != true) { in >> nextLabel; }
153                 
154                 //read the rest of the groups info in
155                 while ((nextLabel == holdLabel) && (in.eof() != true)) {
156                         if (m->control_pressed) {  outputTypes.clear(); in.close();  out.close(); remove(outputFile.c_str());   return 0; }
157                         
158                         in >> groupN >> num;
159                         count++;
160                         
161                         //output next group
162                         m->mothurOut(groupN); m->mothurOutEndLine();
163                         out << groupN << '\t' << groupN << endl;                                
164                         
165                         //fill vector.  
166                         for(int i=0;i<num;i++){
167                                 in >> inputData;
168                         }
169                         
170                         if (in.eof() != true) { in >> nextLabel; }
171                 }
172                 
173                 in.close();
174                 out.close();
175                 
176                 if (m->control_pressed) {  remove(outputFile.c_str());   return 0; }
177                 
178                 m->mothurOutEndLine();
179                 m->mothurOut("Output File Name: "); m->mothurOutEndLine();
180                 m->mothurOut(outputFile); m->mothurOutEndLine();        outputNames.push_back(outputFile); outputTypes["bootgroup"].push_back(outputFile);
181                 m->mothurOutEndLine();
182                 
183                 return 0;       
184         }
185
186         catch(exception& e) {
187                 m->errorOut(e, "GetgroupCommand", "execute");
188                 exit(1);
189         }
190 }
191
192