]> git.donarmstrong.com Git - mothur.git/blob - getgroupcommand.cpp
changes while setting up test files
[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                         vector<string> myArray = setParameters();
68                         
69                         OptionParser parser(option);
70                         map<string,string> parameters = parser.getParameters();
71                         map<string,string>::iterator it;
72                         
73                         ValidParameters validParameter;
74                         //check to make sure all parameters are valid for command
75                         for (it = parameters.begin(); it != parameters.end(); it++) { 
76                                 if (validParameter.isValidParameter(it->first, myArray, it->second) != true) {  abort = true;  }
77                         }
78                         
79                         //initialize outputTypes
80                         vector<string> tempOutNames;
81                         outputTypes["bootgroup"] = tempOutNames;
82                         
83                         //if the user changes the input directory command factory will send this info to us in the output parameter 
84                         string inputDir = validParameter.validFile(parameters, "inputdir", false);              
85                         if (inputDir == "not found"){   inputDir = "";          }
86                         else {
87                                 string path;
88                                 it = parameters.find("shared");
89                                 //user has given a template file
90                                 if(it != parameters.end()){ 
91                                         path = m->hasPath(it->second);
92                                         //if the user has not given a path then, add inputdir. else leave path alone.
93                                         if (path == "") {       parameters["shared"] = inputDir + it->second;           }
94                                 }
95                         }
96                         
97                         //get shared file
98                         sharedfile = validParameter.validFile(parameters, "shared", true);
99                         if (sharedfile == "not open") { sharedfile = ""; abort = true; }        
100                         else if (sharedfile == "not found") { 
101                                 //if there is a current shared file, use it
102                                 sharedfile = m->getSharedFile(); 
103                                 if (sharedfile != "") { m->mothurOut("Using " + sharedfile + " as input file for the shared parameter."); m->mothurOutEndLine(); }
104                                 else {  m->mothurOut("You have no current sharedfile and the shared parameter is required."); m->mothurOutEndLine(); abort = true; }
105                         }
106                         
107                         
108                         //if the user changes the output directory command factory will send this info to us in the output parameter 
109                         outputDir = validParameter.validFile(parameters, "outputdir", false);           if (outputDir == "not found"){  outputDir = m->hasPath(sharedfile);             }
110                 }
111         }
112         catch(exception& e) {
113                 m->errorOut(e, "GetgroupCommand", "GetgroupCommand");
114                 exit(1);
115         }
116 }
117 //**********************************************************************************************************************
118
119 int GetgroupCommand::execute(){
120         try {
121         
122                 if (abort == true) { if (calledHelp) { return 0; }  return 2;   }
123                 
124                 //open shared file
125                 m->openInputFile(sharedfile, in);
126                         
127                 //open output file
128                 outputFile = outputDir + m->getRootName(m->getSimpleName(sharedfile)) + "bootGroups";
129                 m->openOutputFile(outputFile, out);
130                         
131                 int num, inputData, count;
132                 count = 0;  
133                 string holdLabel, nextLabel, groupN, label;
134                 
135                 //read in first row since you know there is at least 1 group.
136                 in >> label >> groupN >> num;
137                 holdLabel = label;
138                 
139                 //output first group
140                 m->mothurOut(groupN); m->mothurOutEndLine();
141                 out << groupN << '\t' << groupN << endl;        
142                         
143                 //get rest of line
144                 for(int i=0;i<num;i++){
145                         in >> inputData;
146                 }
147                 
148                 if (m->control_pressed) { outputTypes.clear(); in.close();  out.close(); remove(outputFile.c_str());   return 0; }
149
150                 if (in.eof() != true) { in >> nextLabel; }
151                 
152                 //read the rest of the groups info in
153                 while ((nextLabel == holdLabel) && (in.eof() != true)) {
154                         if (m->control_pressed) {  outputTypes.clear(); in.close();  out.close(); remove(outputFile.c_str());   return 0; }
155                         
156                         in >> groupN >> num;
157                         count++;
158                         
159                         //output next group
160                         m->mothurOut(groupN); m->mothurOutEndLine();
161                         out << groupN << '\t' << groupN << endl;                                
162                         
163                         //fill vector.  
164                         for(int i=0;i<num;i++){
165                                 in >> inputData;
166                         }
167                         
168                         if (in.eof() != true) { in >> nextLabel; }
169                 }
170                 
171                 in.close();
172                 out.close();
173                 
174                 if (m->control_pressed) {  remove(outputFile.c_str());   return 0; }
175                 
176                 m->mothurOutEndLine();
177                 m->mothurOut("Output File Name: "); m->mothurOutEndLine();
178                 m->mothurOut(outputFile); m->mothurOutEndLine();        outputNames.push_back(outputFile); outputTypes["bootgroup"].push_back(outputFile);
179                 m->mothurOutEndLine();
180                 
181                 return 0;       
182         }
183
184         catch(exception& e) {
185                 m->errorOut(e, "GetgroupCommand", "execute");
186                 exit(1);
187         }
188 }
189
190