X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=rarefactcommand.cpp;h=82ff7faef0d8886d21fc6b642f34c88c1b143ea1;hb=e98d56be8369a799e61a411bc13d3bd1fa3451e5;hp=47d55a0f07459c4128ed737f420c102ae42ea791;hpb=43ed0accfbc2852849e104ff7eccdd2c42acd4ec;p=mothur.git diff --git a/rarefactcommand.cpp b/rarefactcommand.cpp index 47d55a0..82ff7fa 100644 --- a/rarefactcommand.cpp +++ b/rarefactcommand.cpp @@ -351,7 +351,7 @@ int RareFactCommand::execute(){ rDisplays.push_back(new RareDisplay(new NSeqs(), new ThreeColumnFile(fileNameRoot+"r_nseqs"))); outputNames.push_back(fileNameRoot+"r_nseqs"); outputTypes["r_nseqs"].push_back(fileNameRoot+"r_nseqs"); } - file2Group[outputNames.size()-1] = groups[p]; + if (inputFileNames.size() > 1) { file2Group[outputNames.size()-1] = groups[p]; } } } @@ -473,7 +473,7 @@ vector RareFactCommand::createGroupFile(vector& outputNames, map vector newFileNames; //find different types of files - map > typesFiles; + map > typesFiles; for (int i = 0; i < outputNames.size(); i++) { string extension = m->getExtension(outputNames[i]); @@ -484,8 +484,15 @@ vector RareFactCommand::createGroupFile(vector& outputNames, map string newLine = labels.substr(0, labels.find_first_of('\t')); newLine += "\tGroup" + labels.substr(labels.find_first_of('\t')); - - typesFiles[extension].push_back(outputNames[i]+"_"+file2Group[i]); + + map >::iterator itfind = typesFiles.find(extension); + if (itfind != typesFiles.end()) { + (itfind->second)[outputNames[i]] = file2Group[i]; + }else { + map temp; + temp[outputNames[i]] = file2Group[i]; + typesFiles[extension] = temp; + } string combineFileName = outputDir + m->getRootName(m->getSimpleName(sharedfile)) + "groups" + extension; @@ -499,24 +506,23 @@ vector RareFactCommand::createGroupFile(vector& outputNames, map //for each type create a combo file map lineToNumber; - for (map >::iterator it = typesFiles.begin(); it != typesFiles.end(); it++) { + for (map >::iterator it = typesFiles.begin(); it != typesFiles.end(); it++) { ofstream out; string combineFileName = outputDir + m->getRootName(m->getSimpleName(sharedfile)) + "groups" + it->first; m->openOutputFileAppend(combineFileName, out); newFileNames.push_back(combineFileName); - - vector thisTypesFiles = it->second; + map thisTypesFiles = it->second; //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::iterator itFileNameGroup = thisTypesFiles.begin(); itFileNameGroup != thisTypesFiles.end(); itFileNameGroup++) { + string thisfilename = itFileNameGroup->first; + string group = itFileNameGroup->second; + ifstream temp; m->openInputFile(thisfilename, temp); @@ -524,15 +530,6 @@ vector RareFactCommand::createGroupFile(vector& outputNames, map m->getline(temp); m->gobble(temp); vector thisFilesLines; - //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; @@ -548,11 +545,10 @@ vector RareFactCommand::createGroupFile(vector& outputNames, map count++; thisFilesLines.push_back(thisLine); - m->gobble(temp); } - files[thisTypesFiles[i]] = thisFilesLines; + files[thisfilename] = thisFilesLines; //save longest file for below if (maxLines < thisFilesLines.size()) { maxLines = thisFilesLines.size(); } @@ -566,17 +562,18 @@ vector RareFactCommand::createGroupFile(vector& outputNames, map for (int k = 1; k < maxLines; k++) { //grab data for each group - for (int i=0; i::iterator itFileNameGroup = thisTypesFiles.begin(); itFileNameGroup != thisTypesFiles.end(); itFileNameGroup++) { + + string thisfilename = itFileNameGroup->first; map::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]; + if (k < files[thisfilename].size()) { + string line = files[thisfilename][k]; output = line.substr(0, line.find_first_of('\t')); - output += '\t' + files[thisTypesFiles[i]][0] + '\t' + line.substr(line.find_first_of('\t')); + output += '\t' + files[thisfilename][0] + '\t' + line.substr(line.find_first_of('\t')); }else{ - output += '\t' + files[thisTypesFiles[i]][0] + '\t'; + output += '\t' + files[thisfilename][0] + '\t'; for (int h = 0; h < numColumns; h++) { output += "NA\t"; }