5 * Created by Sarah Westcott on 1/2/09.
6 * Copyright 2009 Schloss Lab UMASS Amherst. All rights reserved.
10 #include "parselistcommand.h"
12 //**********************************************************************************************************************
13 ParseListCommand::ParseListCommand(){
15 globaldata = GlobalData::getInstance();
17 //read in group map info.
18 groupMap = new GroupMap(globaldata->getGroupFile());
21 //fill filehandles with neccessary ofstreams
24 for (i=0; i<groupMap->getNumGroups(); i++) {
26 filehandles[groupMap->namesOfGroups[i]] = temp;
30 if(globaldata->getFileRoot() != ""){
31 fileroot = globaldata->getFileRoot();
34 fileroot = getRootName(globaldata->getDistFile());
37 //open output list files
38 for (i=0; i<groupMap->getNumGroups(); i++) {//opens an output file for each group
39 openOutputFile(fileroot + groupMap->namesOfGroups[i] + ".list", *(filehandles[groupMap->namesOfGroups[i]]));
43 cout << "Standard Error: " << e.what() << " has occurred in the ParseListCommand class Function ParseListCommand. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
47 cout << "An unknown error has occurred in the ParseListCommand class function ParseListCommand. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
51 /***********************************************************************/
52 void ParseListCommand::parse(int index) {
54 string prefix, suffix, groupsName;
55 suffix = list->get(index);
57 while (suffix.find_first_of(',') != -1) {//while you still have sequences
58 prefix = suffix.substr(0,suffix.find_first_of(','));
59 if ((suffix.find_first_of(',')+1) <= suffix.length()) { //checks to make sure you don't have comma at end of string
60 suffix = suffix.substr(suffix.find_first_of(',')+1, suffix.length());
63 groupsName = groupMap->getGroup(prefix);
64 if (groupsName != "not found") {
65 listGroups[groupsName] = listGroups[groupsName] + "," + prefix; //adds prefix to the correct group.
67 cerr << "Error: Sequence '" << prefix << "' was not found in the group file, please correct\n";
71 //save last name after comma
72 groupsName = groupMap->getGroup(suffix);
73 if (groupsName != "not found") {
74 listGroups[groupsName] = listGroups[groupsName] + "," + suffix; //adds prefix to the correct group.
76 cerr << "Error: Sequence '" << suffix << "' was not found in the group file, please correct\n";
80 cout << "Standard Error: " << e.what() << " has occurred in the ParseListCommand class Function parse. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
84 cout << "An unknown error has occurred in the ParseListCommand class function parse. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
89 //**********************************************************************************************************************
91 int ParseListCommand::execute(){
93 globaldata = GlobalData::getInstance();
96 read = new ReadPhilFile(globaldata->inputFileName);
97 read->read(&*globaldata);
98 input = globaldata->ginput;
99 //list = input->getListVector();
100 list = globaldata->glist;
102 //read in group map info.
103 groupMap = new GroupMap(globaldata->getGroupFile());
108 //create new list vectors to fill with parsed data
109 for (i=0; i<groupMap->getNumGroups(); i++) {
110 groupOfLists[groupMap->namesOfGroups[i]] = new ListVector();
113 //parses and sets each groups listvector
115 label = list->getLabel();
116 for(i=0; i<list->size(); i++) {
117 parse(i); //parses data[i] list of sequence names
118 for (it=listGroups.begin(); it != listGroups.end(); it++) { //loop through map and set new list vectors
120 seq = seq.substr(1, seq.length()); //rips off extra comma
121 groupOfLists[it->first]->push_back(seq); //sets new listvector for each group
125 //prints each new list file
126 for (i=0; i<groupMap->getNumGroups(); i++) {
127 groupOfLists[groupMap->namesOfGroups[i]]->setLabel(label);
128 groupOfLists[groupMap->namesOfGroups[i]]->print(*(filehandles[groupMap->namesOfGroups[i]]));
129 groupOfLists[groupMap->namesOfGroups[i]]->clear();
131 list = input->getListVector();
135 catch(exception& e) {
136 cout << "Standard Error: " << e.what() << " has occurred in the ParseListCommand class Function execute. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
140 cout << "An unknown error has occurred in the ParseListCommand class function execute. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
145 //**********************************************************************************************************************
147 ParseListCommand::~ParseListCommand(){
153 //**********************************************************************************************************************