X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=sharedcommand.cpp;h=4b35138998b13bfe181c743bdfd50e4f64f60752;hb=e911fa88572a16ef40e0b51fb132ab6e02370797;hp=42601f48ead5e872d000e35c9b64852ddccd5eb8;hpb=b7cce6e0a45013919e76a266533fcca4052cf157;p=mothur.git diff --git a/sharedcommand.cpp b/sharedcommand.cpp index 42601f4..4b35138 100644 --- a/sharedcommand.cpp +++ b/sharedcommand.cpp @@ -20,22 +20,36 @@ SharedCommand::SharedCommand(){ filename = getRootName(filename); filename = filename + "shared"; openOutputFile(filename, out); + + groupMap = globaldata->gGroupmap; + + //fill filehandles with neccessary ofstreams + int i; + ofstream* temp; + for (i=0; igetNumGroups(); i++) { + temp = new ofstream; + filehandles[groupMap->namesOfGroups[i]] = temp; + } + + //set fileroot + fileroot = getRootName(globaldata->getListFile()); + + //clears file before we start to write to it below + for (int i=0; igetNumGroups(); i++) { + remove((fileroot + groupMap->namesOfGroups[i] + ".rabund").c_str()); + } + } catch(exception& e) { - cout << "Standard Error: " << e.what() << " has occurred in the SharedCommand class Function SharedCommand. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; + errorOut(e, "SharedCommand", "SharedCommand"); exit(1); } - catch(...) { - cout << "An unknown error has occurred in the SharedCommand class function SharedCommand. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; - exit(1); - } - } //********************************************************************************************************************** int SharedCommand::execute(){ try { - globaldata = GlobalData::getInstance(); + //lookup.clear(); int count = 1; string errorOff = "no error"; @@ -46,114 +60,120 @@ int SharedCommand::execute(){ input = globaldata->ginput; SharedList = globaldata->gSharedList; - SharedListVector* lastList = SharedList; - //lookup = SharedList->getSharedRAbundVector(); - //vector lastLookup = lookup; - + string lastLabel = SharedList->getLabel(); + vector lookup; + //if the users enters label "0.06" and there is no "0.06" in their file use the next lowest label. set processedLabels; set userLabels = globaldata->labels; set userLines = globaldata->lines; - shared = new Shared(); while((SharedList != NULL) && ((globaldata->allLines == 1) || (userLabels.size() != 0) || (userLines.size() != 0))) { if(globaldata->allLines == 1 || globaldata->lines.count(count) == 1 || globaldata->labels.count(SharedList->getLabel()) == 1){ - shared->getSharedVectors(SharedList); //fills sharedGroups with new info and updates sharedVector - printSharedData(); //prints info to the .shared file + lookup = SharedList->getSharedRAbundVector(); + mothurOut(lookup[0]->getLabel()); mothurOutEndLine(); + + printSharedData(lookup); //prints info to the .shared file + for (int i = 0; i < lookup.size(); i++) { delete lookup[i]; } processedLabels.insert(SharedList->getLabel()); userLabels.erase(SharedList->getLabel()); userLines.erase(count); } - if ((anyLabelsToProcess(SharedList->getLabel(), userLabels, errorOff) == true) && (processedLabels.count(lastList->getLabel()) != 1)) { - shared->getSharedVectors(lastList); //fills sharedGroups with new info and updates sharedVector - printSharedData(); //prints info to the .shared file - - processedLabels.insert(lastList->getLabel()); - userLabels.erase(lastList->getLabel()); + if ((anyLabelsToProcess(SharedList->getLabel(), userLabels, errorOff) == true) && (processedLabels.count(lastLabel) != 1)) { + delete SharedList; + SharedList = input->getSharedListVector(lastLabel); //get new list vector to process + + lookup = SharedList->getSharedRAbundVector(); + mothurOut(lookup[0]->getLabel()); mothurOutEndLine(); + + printSharedData(lookup); //prints info to the .shared file + for (int i = 0; i < lookup.size(); i++) { delete lookup[i]; } + + processedLabels.insert(SharedList->getLabel()); + userLabels.erase(SharedList->getLabel()); } - if (count != 1) { delete lastList; } - lastList = SharedList; + + lastLabel = SharedList->getLabel(); + + delete SharedList; SharedList = input->getSharedListVector(); //get new list vector to process - count++; - //if (count != 1) { for (int i = 0; i < lastLookup.size(); i++) { delete lastLookup[i]; } } - //lastLookup = lookup; - //if (SharedList != NULL) { lookup = SharedList->getSharedRAbundVector(); } + count++; } //output error messages about any remaining user labels set::iterator it; bool needToRun = false; for (it = userLabels.begin(); it != userLabels.end(); it++) { - //cout << "Your file does not include the label "<< *it; - if (processedLabels.count(lastList->getLabel()) != 1) { - //cout << ". I will use " << lastList->getLabel() << "." << endl; + if (processedLabels.count(lastLabel) != 1) { needToRun = true; - }else { - //cout << ". Please refer to " << lastList->getLabel() << "." << endl; } } //run last line if you need to if (needToRun == true) { - shared->getSharedVectors(lastList); //fills sharedGroups with new info and updates sharedVector - printSharedData(); //prints info to the .shared file + if (SharedList != NULL) { delete SharedList; } + SharedList = input->getSharedListVector(lastLabel); //get new list vector to process + + lookup = SharedList->getSharedRAbundVector(); + mothurOut(lookup[0]->getLabel()); mothurOutEndLine(); + + printSharedData(lookup); //prints info to the .shared file + for (int i = 0; i < lookup.size(); i++) { delete lookup[i]; } + delete SharedList; } - delete lastList; globaldata->gSharedList = NULL; - delete shared; + globaldata->gSharedList = NULL; + delete read; + out.close(); + for (it3 = filehandles.begin(); it3 != filehandles.end(); it3++) { + delete it3->second; + } + + return 0; } catch(exception& e) { - cout << "Standard Error: " << e.what() << " has occurred in the SharedCommand class Function execute. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; + errorOut(e, "SharedCommand", "execute"); exit(1); } - catch(...) { - cout << "An unknown error has occurred in the SharedCommand class function execute. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; - exit(1); - } - } //********************************************************************************************************************** -void SharedCommand::printSharedData() { +void SharedCommand::printSharedData(vector thislookup) { try { - - ///for (int i = 0; i < thislookup.size(); i++) { - // out << thislookup[i]->getLabel() << '\t' << thislookup[i]->getGroup() << '\t'; -//cout << thislookup[i]->getLabel() << '\t' << thislookup[i]->getGroup() << endl; - // thislookup[i]->print(out); - // } - //prints out horizontally - for (it = shared->sharedGroups.begin(); it != shared->sharedGroups.end(); it++) { - out << it->second->getLabel() << "\t" << it->first << "\t"; //prints out label and groupname - it->second->print(out); // prints sharedrabundvector + + //initialize bin values + for (int i = 0; i < thislookup.size(); i++) { + out << thislookup[i]->getLabel() << '\t' << thislookup[i]->getGroup() << '\t'; + thislookup[i]->print(out); + + RAbundVector rav = thislookup[i]->getRAbundVector(); + openOutputFileAppend(fileroot + thislookup[i]->getGroup() + ".rabund", *(filehandles[thislookup[i]->getGroup()])); + rav.print(*(filehandles[thislookup[i]->getGroup()])); + (*(filehandles[thislookup[i]->getGroup()])).close(); } + } catch(exception& e) { - cout << "Standard Error: " << e.what() << " has occurred in the SharedCommand class Function printSharedData. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; + errorOut(e, "SharedCommand", "printSharedData"); exit(1); } - catch(...) { - cout << "An unknown error has occurred in the SharedCommand class function printSharedData. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; - exit(1); - } - } //********************************************************************************************************************** SharedCommand::~SharedCommand(){ //delete list; - delete read; + }