From 1b0bddfbf4ac5df7e2dad03c8a5350e71b052f78 Mon Sep 17 00:00:00 2001 From: westcott Date: Fri, 23 Dec 2011 16:24:19 +0000 Subject: [PATCH] changed rarefaction.single output --- getgroupscommand.cpp | 10 +++----- mothurout.cpp | 20 +++++++++++++++ mothurout.h | 1 + rarefactcommand.cpp | 54 +++++++++++++++++++++++++++++------------ rarefactcommand.h | 2 +- removegroupscommand.cpp | 10 +++----- 6 files changed, 67 insertions(+), 30 deletions(-) diff --git a/getgroupscommand.cpp b/getgroupscommand.cpp index e533bc4..0c42b7d 100644 --- a/getgroupscommand.cpp +++ b/getgroupscommand.cpp @@ -190,13 +190,9 @@ GetGroupsCommand::GetGroupsCommand(string option) { else { m->setNameFile(namefile); } groupfile = validParameter.validFile(parameters, "group", true); - if (groupfile == "not open") { abort = true; } - else if (groupfile == "not found") { - //if there is a current group file, use it - groupfile = m->getGroupFile(); - if (groupfile != "") { m->mothurOut("Using " + groupfile + " as input file for the group parameter."); m->mothurOutEndLine(); } - else { m->mothurOut("You have no current groupfile and the group parameter is required."); m->mothurOutEndLine(); abort = true; } - }else { m->setGroupFile(groupfile); } + if (groupfile == "not open") { groupfile = ""; abort = true; } + else if (groupfile == "not found") { groupfile = ""; } + else { m->setGroupFile(groupfile); } listfile = validParameter.validFile(parameters, "list", true); if (listfile == "not open") { abort = true; } diff --git a/mothurout.cpp b/mothurout.cpp index 001e8c4..c58e634 100644 --- a/mothurout.cpp +++ b/mothurout.cpp @@ -1477,6 +1477,26 @@ int MothurOut::getNumNames(string names){ } /***********************************************************************/ +int MothurOut::getNumChar(string line, char c){ + try { + int count = 0; + + if(line != ""){ + for(int i=0;icontrol_pressed) { return 0; } + map nameMap; for (int p = 0; p < inputFileNames.size(); p++) { string fileNameRoot = outputDir + m->getRootName(m->getSimpleName(inputFileNames[p])); @@ -295,6 +296,7 @@ int RareFactCommand::execute(){ if (inputFileNames.size() > 1) { m->mothurOutEndLine(); m->mothurOut("Processing group " + groups[p]); m->mothurOutEndLine(); m->mothurOutEndLine(); + nameMap[fileNameRoot] = groups[p]; } int i; ValidCalculators validCalculator; @@ -448,7 +450,7 @@ int RareFactCommand::execute(){ if (m->control_pressed) { for (int i = 0; i < outputNames.size(); i++) { m->mothurRemove(outputNames[i]); } return 0; } //create summary file containing all the groups data for each label - this function just combines the info from the files already created. - if ((sharedfile != "") && (groupMode)) { outputNames = createGroupFile(outputNames); } + if ((sharedfile != "") && (groupMode)) { outputNames = createGroupFile(outputNames, nameMap); } if (m->control_pressed) { for (int i = 0; i < outputNames.size(); i++) { m->mothurRemove(outputNames[i]); } return 0; } @@ -465,7 +467,7 @@ int RareFactCommand::execute(){ } } //********************************************************************************************************************** -vector RareFactCommand::createGroupFile(vector& outputNames) { +vector RareFactCommand::createGroupFile(vector& outputNames, map nameMap) { try { vector newFileNames; @@ -496,6 +498,7 @@ vector RareFactCommand::createGroupFile(vector& outputNames) { } //for each type create a combo file + map lineToNumber; for (map >::iterator it = typesFiles.begin(); it != typesFiles.end(); it++) { ofstream out; @@ -508,6 +511,7 @@ vector RareFactCommand::createGroupFile(vector& outputNames) { //open each type summary file map > files; //maps file name to lines in file int maxLines = 0; + int numColumns = 0; for (int i=0; i RareFactCommand::createGroupFile(vector& outputNames) { m->getline(temp); m->gobble(temp); vector thisFilesLines; - string group = m->getRootName(thisTypesFiles[i]); - group = group.substr(0, group.length()-1); - group = group.substr(group.find_last_of('.')+1); + string fileNameRoot = m->getRootName(thisTypesFiles[i]); + map::iterator itName = nameMap.find(fileNameRoot); + string group = ""; + if (itName != nameMap.end()) { + group = itName->second; + }else { + group = "not found" + i; + m->mothurOut("[ERROR]: can't parse filename."); m->mothurOutEndLine(); + } thisFilesLines.push_back(group); + int count = 1; while (!temp.eof()){ string thisLine = m->getline(temp); - + + string numSampled = thisLine.substr(0, thisLine.find_first_of('\t')); + int num = 0; + convert(numSampled, num); + numColumns = m->getNumChar(thisLine, '\t'); + lineToNumber[count] = num; + count++; + thisFilesLines.push_back(thisLine); m->gobble(temp); @@ -547,15 +565,21 @@ vector RareFactCommand::createGroupFile(vector& outputNames) { //grab data for each group for (int i=0; i::iterator itLine = lineToNumber.find(k); + if (itLine != lineToNumber.end()) { + string output = toString(itLine->second); + if (k < files[thisTypesFiles[i]].size()) { + string line = files[thisTypesFiles[i]][k]; + output = line.substr(0, line.find_first_of('\t')); + output += '\t' + files[thisTypesFiles[i]][0] + '\t' + line.substr(line.find_first_of('\t')); + }else{ + output += '\t' + files[thisTypesFiles[i]][0] + '\t'; + for (int h = 0; h < numColumns; h++) { + output += "NA\t"; + } + } + out << output << endl; + }else { m->mothurOut("[ERROR]: parsing results, cant find " + toString(k)); m->mothurOutEndLine(); } } } diff --git a/rarefactcommand.h b/rarefactcommand.h index 3628892..72d2415 100644 --- a/rarefactcommand.h +++ b/rarefactcommand.h @@ -51,7 +51,7 @@ private: string outputDir; vector parseSharedFile(string); - vector createGroupFile(vector&); + vector createGroupFile(vector&, map); }; #endif diff --git a/removegroupscommand.cpp b/removegroupscommand.cpp index 6ec0fcd..e5a3bb2 100644 --- a/removegroupscommand.cpp +++ b/removegroupscommand.cpp @@ -191,13 +191,9 @@ RemoveGroupsCommand::RemoveGroupsCommand(string option) { else { m->setNameFile(namefile); } groupfile = validParameter.validFile(parameters, "group", true); - if (groupfile == "not open") { abort = true; } - else if (groupfile == "not found") { - //if there is a current group file, use it - groupfile = m->getGroupFile(); - if (groupfile != "") { m->mothurOut("Using " + groupfile + " as input file for the group parameter."); m->mothurOutEndLine(); } - else { m->mothurOut("You have no current groupfile and the group parameter is required."); m->mothurOutEndLine(); abort = true; } - }else { m->setGroupFile(groupfile); } + if (groupfile == "not open") { groupfile = ""; abort = true; } + else if (groupfile == "not found") { groupfile = ""; } + else { m->setGroupFile(groupfile); } listfile = validParameter.validFile(parameters, "list", true); if (listfile == "not open") { listfile = ""; abort = true; } -- 2.39.2