X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=rarefactcommand.cpp;fp=rarefactcommand.cpp;h=dabcef486ee7541c183fc594f10da9a9f6624561;hb=57b3c96832667c1b70d4d526331f52e3d49e8237;hp=47d55a0f07459c4128ed737f420c102ae42ea791;hpb=17fe3208075e55133789b247c062e6474f7439b0;p=mothur.git diff --git a/rarefactcommand.cpp b/rarefactcommand.cpp index 47d55a0..dabcef4 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,8 @@ vector RareFactCommand::createGroupFile(vector& outputNames, map vector newFileNames; //find different types of files - map > typesFiles; + map > typesFiles; + map temp; for (int i = 0; i < outputNames.size(); i++) { string extension = m->getExtension(outputNames[i]); @@ -485,7 +486,8 @@ vector RareFactCommand::createGroupFile(vector& outputNames, map newLine += "\tGroup" + labels.substr(labels.find_first_of('\t')); - typesFiles[extension].push_back(outputNames[i]+"_"+file2Group[i]); + temp[outputNames[i]] = file2Group[i]; + typesFiles[extension] = temp; string combineFileName = outputDir + m->getRootName(m->getSimpleName(sharedfile)) + "groups" + extension; @@ -499,23 +501,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 = thisTypesFiles[i].substr(0, thisTypesFiles[i].find_last_of('_')); - string group = thisTypesFiles[i].substr(thisTypesFiles[i].find_last_of('_')+1); + string thisfilename = itFileNameGroup->first; + string group = itFileNameGroup->second; ifstream temp; m->openInputFile(thisfilename, temp); @@ -524,15 +526,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; @@ -552,7 +545,7 @@ vector RareFactCommand::createGroupFile(vector& outputNames, map m->gobble(temp); } - files[thisTypesFiles[i]] = thisFilesLines; + files[thisfilename] = thisFilesLines; //save longest file for below if (maxLines < thisFilesLines.size()) { maxLines = thisFilesLines.size(); } @@ -566,17 +559,19 @@ 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"; }