X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=chimeraperseuscommand.cpp;h=e3691e8b942c2f34da91cec14691e717d5c16c1a;hb=0cefb55a2616975bd4a144fc345693695ffc9bb6;hp=8eaf536040a5703bbd7d9f4b93329f79cf6c6830;hpb=0ca63a8165baa0afa459e644ebe140ba496d5ba0;p=mothur.git diff --git a/chimeraperseuscommand.cpp b/chimeraperseuscommand.cpp index 8eaf536..e3691e8 100644 --- a/chimeraperseuscommand.cpp +++ b/chimeraperseuscommand.cpp @@ -58,6 +58,27 @@ string ChimeraPerseusCommand::getHelpString(){ } } //********************************************************************************************************************** +string ChimeraPerseusCommand::getOutputFileNameTag(string type, string inputName=""){ + try { + string outputFileName = ""; + map >::iterator it; + + //is this a type this command creates + it = outputTypes.find(type); + if (it == outputTypes.end()) { m->mothurOut("[ERROR]: this command doesn't create a " + type + " output file.\n"); } + else { + if (type == "chimera") { outputFileName = "perseus.chimeras"; } + else if (type == "accnos") { outputFileName = "perseus.accnos"; } + else { m->mothurOut("[ERROR]: No definition for type " + type + " output file tag.\n"); m->control_pressed = true; } + } + return outputFileName; + } + catch(exception& e) { + m->errorOut(e, "ChimeraPerseusCommand", "getOutputFileNameTag"); + exit(1); + } +} +//********************************************************************************************************************** ChimeraPerseusCommand::ChimeraPerseusCommand(){ try { abort = true; calledHelp = true; @@ -376,8 +397,9 @@ int ChimeraPerseusCommand::execute(){ int start = time(NULL); if (outputDir == "") { outputDir = m->hasPath(fastaFileNames[s]); }//if user entered a file with a path then preserve it - string outputFileName = outputDir + m->getRootName(m->getSimpleName(fastaFileNames[s])) + "perseus.chimera"; - string accnosFileName = outputDir + m->getRootName(m->getSimpleName(fastaFileNames[s])) + "perseus.accnos"; + string outputFileName = outputDir + m->getRootName(m->getSimpleName(fastaFileNames[s])) + getOutputFileNameTag("chimera"); + string accnosFileName = outputDir + m->getRootName(m->getSimpleName(fastaFileNames[s])) + getOutputFileNameTag("accnos"); + //string newFasta = m->getRootName(fastaFileNames[s]) + "temp"; //you provided a groupfile @@ -466,14 +488,15 @@ string ChimeraPerseusCommand::getNamesFile(string& inputFile){ string inputString = "fasta=" + inputFile; m->mothurOut("/******************************************/"); m->mothurOutEndLine(); m->mothurOut("Running command: unique.seqs(" + inputString + ")"); m->mothurOutEndLine(); - + m->mothurCalling = true; + Command* uniqueCommand = new DeconvoluteCommand(inputString); uniqueCommand->execute(); map > filenames = uniqueCommand->getOutputFiles(); delete uniqueCommand; - + m->mothurCalling = false; m->mothurOut("/******************************************/"); m->mothurOutEndLine(); nameFile = filenames["name"][0]; @@ -533,6 +556,7 @@ vector ChimeraPerseusCommand::loadSequences(SequenceParser& parser, str vector sequences; bool error = false; + alignLength = 0; for (int i = 0; i < thisGroupsSeqs.size(); i++) { @@ -543,6 +567,7 @@ vector ChimeraPerseusCommand::loadSequences(SequenceParser& parser, str else { int num = m->getNumNames(it->second); sequences.push_back(seqData(thisGroupsSeqs[i].getName(), thisGroupsSeqs[i].getUnaligned(), num)); + if (thisGroupsSeqs[i].getUnaligned().length() > alignLength) { alignLength = thisGroupsSeqs[i].getUnaligned().length(); } } } @@ -570,7 +595,8 @@ vector ChimeraPerseusCommand::readFiles(string inputFile, string name){ bool error = false; ifstream in; m->openInputFile(inputFile, in); - + alignLength = 0; + while (!in.eof()) { if (m->control_pressed) { in.close(); return sequences; } @@ -581,6 +607,7 @@ vector ChimeraPerseusCommand::readFiles(string inputFile, string name){ if (it == nameMap.end()) { error = true; m->mothurOut("[ERROR]: " + temp.getName() + " is in your fasta file and not in your namefile, please correct."); m->mothurOutEndLine(); } else { sequences.push_back(seqData(temp.getName(), temp.getUnaligned(), it->second)); + if (temp.getUnaligned().length() > alignLength) { alignLength = temp.getUnaligned().length(); } } } in.close(); @@ -625,7 +652,7 @@ int ChimeraPerseusCommand::driver(string chimeraFileName, vector& seque } int numSeqs = sequences.size(); - int alignLength = sequences[0].sequence.size(); + //int alignLength = sequences[0].sequence.size(); ofstream chimeraFile; ofstream accnosFile; @@ -641,7 +668,7 @@ int ChimeraPerseusCommand::driver(string chimeraFileName, vector& seque for(int i=0;icontrol_pressed) { chimeraFile.close(); m->mothurRemove(chimeraFileName); accnosFile.close(); m->mothurRemove(accnosFileName); return 0; } - + vector restricted = chimeras; vector > leftDiffs(numSeqs); @@ -662,7 +689,9 @@ int ChimeraPerseusCommand::driver(string chimeraFileName, vector& seque string dummyA, dummyB; - if(comparisons >= 2){ + if (sequences[i].sequence.size() < 3) { + chimeraFile << i << '\t' << sequences[i].seqName << "\t0\t0\tNull\t0\t0\t0\tNull\tNull\t0.0\t0.0\t0.0\t0\t0\t0\t0.0\t0.0\tgood" << endl; + }else if(comparisons >= 2){ minMismatchToChimera = myPerseus.getChimera(sequences, leftDiffs, rightDiffs, leftParentBi, rightParentBi, breakPointBi, singleLeft, bestLeft, singleRight, bestRight, restricted); if (m->control_pressed) { chimeraFile.close(); m->mothurRemove(chimeraFileName); accnosFile.close(); m->mothurRemove(accnosFileName); return 0; } @@ -762,7 +791,7 @@ int ChimeraPerseusCommand::createProcessesGroups(SequenceParser& parser, string lines.push_back(linePair(startIndex, endIndex)); } -#if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) +#if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) || (__linux__) || (__unix__) || (__unix) //loop through and create all the processes you want while (process != processors) {