//********************************************************************************************************************** int ListSeqsCommand::readFasta(){ try { ifstream in; util.openInputFile(fastafile, in); string name; int count = 1; while(!in.eof()){ if (m->getControl_pressed()) { in.close(); return 0; } Sequence currSeq(in); name = currSeq.getName(); if (name != "") { names.push_back(name); } util.gobble(in); if (m->getDebug()) { count++; m->mothurOut("[DEBUG]: count = " + toString(count) + ", name = " + currSeq.getName() + "\n"); } } in.close(); return 0; } catch(exception& e) { m->errorOut(e, "ListSeqsCommand", "readFasta"); exit(1); } }
//********************************************************************************************************************** int RemoveGroupsCommand::readFasta(){ try { string thisOutputDir = outputDir; if (outputDir == "") { thisOutputDir += m->hasPath(fastafile); } map<string, string> variables; variables["[filename]"] = thisOutputDir + m->getRootName(m->getSimpleName(fastafile)); variables["[extension]"] = m->getExtension(fastafile); string outputFileName = getOutputFileName("fasta", variables); ofstream out; m->openOutputFile(outputFileName, out); ifstream in; m->openInputFile(fastafile, in); string name; bool wroteSomething = false; int removedCount = 0; while(!in.eof()){ if (m->control_pressed) { in.close(); out.close(); m->mothurRemove(outputFileName); return 0; } Sequence currSeq(in); name = currSeq.getName(); if (name != "") { //if this name is in the accnos file if (names.count(name) == 0) { wroteSomething = true; currSeq.printSequence(out); }else { //if you are not in the accnos file check if you are a name that needs to be changed map<string, string>::iterator it = uniqueToRedundant.find(name); if (it != uniqueToRedundant.end()) { wroteSomething = true; currSeq.setName(it->second); currSeq.printSequence(out); }else { removedCount++; } } } m->gobble(in); } in.close(); out.close(); if (wroteSomething == false) { m->mothurOut("Your file contains only sequences from the groups you wish to remove."); m->mothurOutEndLine(); } outputTypes["fasta"].push_back(outputFileName); outputNames.push_back(outputFileName); m->mothurOut("Removed " + toString(removedCount) + " sequences from your fasta file."); m->mothurOutEndLine(); return 0; } catch(exception& e) { m->errorOut(e, "RemoveGroupsCommand", "readFasta"); exit(1); } }
void FastaMap::readFastaFile(string inFastaFile, string oldNameFileName){ //prints data ifstream oldNameFile; util.openInputFile(oldNameFileName, oldNameFile); map<string,string> oldNameMap; map<string, string>::iterator itName; string name, list; while(!oldNameFile.eof()){ if (m->getControl_pressed()) { break; } oldNameFile >> name; util.gobble(oldNameFile); oldNameFile >> list; oldNameMap[name] = list; util.gobble(oldNameFile); } oldNameFile.close(); ifstream inFASTA; util.openInputFile(inFastaFile, inFASTA); string sequence; while(!inFASTA.eof()){ if (m->getControl_pressed()) { break; } Sequence currSeq(inFASTA); name = currSeq.getName(); if (name != "") { sequence = currSeq.getAligned(); itName = seqmap.find(name); if (itName == seqmap.end()) { seqmap[name] = sequence; } else { m->mothurOut("You already have a sequence named " + name + ", sequence names must be unique, please correct."); m->mothurOutEndLine(); } seqmap[name] = sequence; map<string,group>::iterator it = data.find(sequence); if (it == data.end()) { //it's unique. data[sequence].groupname = name; //group name will be the name of the first duplicate sequence found. // data[sequence].groupnumber = 1; data[sequence].names = oldNameMap[name]; }else { // its a duplicate. data[sequence].names += "," + oldNameMap[name]; // data[sequence].groupnumber++; } } util.gobble(inFASTA); } inFASTA.close(); }
//********************************************************************************************************************** int GetSeqsCommand::readFasta(){ try { string thisOutputDir = outputDir; if (outputDir == "") { thisOutputDir += m->hasPath(fastafile); } string outputFileName = thisOutputDir + m->getRootName(m->getSimpleName(fastafile)) + "pick" + m->getExtension(fastafile); ofstream out; m->openOutputFile(outputFileName, out); ifstream in; m->openInputFile(fastafile, in); string name; bool wroteSomething = false; int selectedCount = 0; while(!in.eof()){ if (m->control_pressed) { in.close(); out.close(); m->mothurRemove(outputFileName); return 0; } Sequence currSeq(in); name = currSeq.getName(); if (name != "") { //if this name is in the accnos file if (names.count(name) != 0) { wroteSomething = true; currSeq.printSequence(out); selectedCount++; } } m->gobble(in); } in.close(); out.close(); if (wroteSomething == false) { m->mothurOut("Your file does not contain any sequence from the .accnos file."); m->mothurOutEndLine(); } outputNames.push_back(outputFileName); outputTypes["fasta"].push_back(outputFileName); m->mothurOut("Selected " + toString(selectedCount) + " sequences from your fasta file."); m->mothurOutEndLine(); return 0; } catch(exception& e) { m->errorOut(e, "GetSeqsCommand", "readFasta"); exit(1); } }
void FastaMap::readFastaFile(string inFileName) { try { ifstream in; util.openInputFile(inFileName, in); string name, sequence, line; sequence = ""; string temp; map<string, string>::iterator itName; while(!in.eof()){ if (m->getControl_pressed()) { break; } Sequence currSeq(in); name = currSeq.getName(); if (name != "") { sequence = currSeq.getAligned(); itName = seqmap.find(name); if (itName == seqmap.end()) { seqmap[name] = sequence; } else { m->mothurOut("You already have a sequence named " + name + ", sequence names must be unique, please correct."); m->mothurOutEndLine(); } map<string,group>::iterator it = data.find(sequence); if (it == data.end()) { //it's unique. data[sequence].groupname = name; //group name will be the name of the first duplicate sequence found. // data[sequence].groupnumber = 1; data[sequence].names = name; }else { // its a duplicate. data[sequence].names += "," + name; // data[sequence].groupnumber++; } } util.gobble(in); } in.close(); } catch(exception& e) { m->errorOut(e, "FastaMap", "readFastaFile"); exit(1); } }
//*************************************************************************************************************** void driverDegap(degapData* params){ try{ ifstream inFASTA; params->util.openInputFile(params->filename, inFASTA); inFASTA.seekg(params->start); if (params->start == 0) { params->util.zapGremlins(inFASTA); params->util.gobble(inFASTA); } while(!inFASTA.eof()){ if (params->m->getControl_pressed()) { break; } Sequence currSeq(inFASTA); params->util.gobble(inFASTA); if (currSeq.getName() != "") { params->threadWriter->write(">"+currSeq.getName()+"\n"+currSeq.getUnaligned()+"\n"); params->count++; } //report progress if((params->count) % 1000 == 0){ params->m->mothurOutJustToScreen(toString(params->count) + "\n"); } #if defined NON_WINDOWS unsigned long long pos = inFASTA.tellg(); if ((pos == -1) || (pos >= params->end)) { break; } #else if (params->count == params->end) { break; } #endif } //report progress if((params->count) % 1000 != 0){ params->m->mothurOutJustToScreen(toString(params->count) + "\n"); } inFASTA.close(); } catch(exception& e) { params->m->errorOut(e, "DegapSeqsCommand", "driver"); exit(1); } }
//********************************************************************************************************************** int ListSeqsCommand::readFasta(){ try { ifstream in; m->openInputFile(fastafile, in); string name; //ofstream out; //string newFastaName = outputDir + m->getRootName(m->getSimpleName(fastafile)) + "numsAdded.fasta"; //m->openOutputFile(newFastaName, out); int count = 1; //string lastName = ""; while(!in.eof()){ if (m->control_pressed) { in.close(); return 0; } Sequence currSeq(in); name = currSeq.getName(); if (name != "") { names.push_back(name); } m->gobble(in); if (m->debug) { count++; cout << "[DEBUG]: count = " + toString(count) + ", name = " + currSeq.getName() + "\n"; } } in.close(); //out.close(); return 0; } catch(exception& e) { m->errorOut(e, "ListSeqsCommand", "readFasta"); exit(1); } }
//********************************************************************************************************************** int GetSeqsCommand::readFasta(){ try { string thisOutputDir = outputDir; if (outputDir == "") { thisOutputDir += m->hasPath(fastafile); } map<string, string> variables; variables["[filename]"] = thisOutputDir + m->getRootName(m->getSimpleName(fastafile)); variables["[extension]"] = m->getExtension(fastafile); string outputFileName = getOutputFileName("fasta", variables); ofstream out; m->openOutputFile(outputFileName, out); ifstream in; m->openInputFile(fastafile, in); string name; bool wroteSomething = false; int selectedCount = 0; if (m->debug) { set<string> temp; sanity["fasta"] = temp; } while(!in.eof()){ if (m->control_pressed) { in.close(); out.close(); m->mothurRemove(outputFileName); return 0; } Sequence currSeq(in); name = currSeq.getName(); if (!dups) {//adjust name if needed map<string, string>::iterator it = uniqueMap.find(name); if (it != uniqueMap.end()) { currSeq.setName(it->second); } } name = currSeq.getName(); if (name != "") { //if this name is in the accnos file if (names.count(name) != 0) { wroteSomething = true; currSeq.printSequence(out); selectedCount++; if (m->debug) { sanity["fasta"].insert(name); } } } m->gobble(in); } in.close(); out.close(); if (wroteSomething == false) { m->mothurOut("Your file does not contain any sequence from the .accnos file."); m->mothurOutEndLine(); } outputNames.push_back(outputFileName); outputTypes["fasta"].push_back(outputFileName); m->mothurOut("Selected " + toString(selectedCount) + " sequences from your fasta file."); m->mothurOutEndLine(); return 0; } catch(exception& e) { m->errorOut(e, "GetSeqsCommand", "readFasta"); exit(1); } }
int ReverseSeqsCommand::execute(){ try{ if (abort == true) { if (calledHelp) { return 0; } return 2; } string fastaReverseFileName; if(fastaFileName != ""){ ifstream inFASTA; m->openInputFile(fastaFileName, inFASTA); ofstream outFASTA; string tempOutputDir = outputDir; if (outputDir == "") { tempOutputDir += m->hasPath(fastaFileName); } //if user entered a file with a path then preserve it map<string, string> variables; variables["[filename]"] = tempOutputDir + m->getRootName(m->getSimpleName(fastaFileName)); variables["[extension]"] = m->getExtension(fastaFileName); fastaReverseFileName = getOutputFileName("fasta", variables); m->openOutputFile(fastaReverseFileName, outFASTA); while(!inFASTA.eof()){ if (m->control_pressed) { inFASTA.close(); outFASTA.close(); m->mothurRemove(fastaReverseFileName); return 0; } Sequence currSeq(inFASTA); m->gobble(inFASTA); if (currSeq.getName() != "") { currSeq.reverseComplement(); currSeq.printSequence(outFASTA); } } inFASTA.close(); outFASTA.close(); outputNames.push_back(fastaReverseFileName); outputTypes["fasta"].push_back(fastaReverseFileName); } string qualReverseFileName; if(qualFileName != ""){ QualityScores currQual; ifstream inQual; m->openInputFile(qualFileName, inQual); ofstream outQual; string tempOutputDir = outputDir; if (outputDir == "") { tempOutputDir += m->hasPath(qualFileName); } //if user entered a file with a path then preserve it map<string, string> variables; variables["[filename]"] = tempOutputDir + m->getRootName(m->getSimpleName(qualFileName)); variables["[extension]"] = m->getExtension(qualFileName); string qualReverseFileName = getOutputFileName("qfile", variables); m->openOutputFile(qualReverseFileName, outQual); while(!inQual.eof()){ if (m->control_pressed) { inQual.close(); outQual.close(); m->mothurRemove(qualReverseFileName); return 0; } currQual = QualityScores(inQual); m->gobble(inQual); currQual.flipQScores(); currQual.printQScores(outQual); } inQual.close(); outQual.close(); outputNames.push_back(qualReverseFileName); outputTypes["qfile"].push_back(qualReverseFileName); } if (m->control_pressed) { m->mothurRemove(qualReverseFileName); m->mothurRemove(fastaReverseFileName); return 0; } //set fasta file as new current fastafile string current = ""; itTypes = outputTypes.find("fasta"); if (itTypes != outputTypes.end()) { if ((itTypes->second).size() != 0) { current = (itTypes->second)[0]; m->setFastaFile(current); } } itTypes = outputTypes.find("qfile"); if (itTypes != outputTypes.end()) { if ((itTypes->second).size() != 0) { current = (itTypes->second)[0]; m->setQualFile(current); } } m->mothurOutEndLine(); m->mothurOut("Output File Names: "); m->mothurOutEndLine(); for(int i=0;i<outputNames.size();i++){ m->mothurOut(outputNames[i]); m->mothurOutEndLine(); } return 0; } catch(exception& e) { m->errorOut(e, "ReverseSeqsCommand", "execute"); exit(1); } }