X-Git-Url: https://git.donarmstrong.com/?p=mothur.git;a=blobdiff_plain;f=trimseqscommand.cpp;h=16d83de2596b9cf84ab4069789917878fa89559e;hp=709202f7d690c17e8a6edb7f5a7812047aec9177;hb=a8e2df1b96a57f5f29576b08361b86a96a8eff4f;hpb=8d341208b0cd0c7a4ff8b77c6b164e06f2f39610 diff --git a/trimseqscommand.cpp b/trimseqscommand.cpp index 709202f..16d83de 100644 --- a/trimseqscommand.cpp +++ b/trimseqscommand.cpp @@ -422,7 +422,7 @@ int TrimSeqsCommand::execute(){ if (countfile != "") { CountTable ct; - ct.readTable(countfile); + ct.readTable(countfile, true); nameCount = ct.getNameMap(); outputNames.push_back(trimCountFile); outputNames.push_back(scrapCountFile); @@ -443,7 +443,9 @@ int TrimSeqsCommand::execute(){ outputNames.push_back(outputGroupFileName); outputTypes["group"].push_back(outputGroupFileName); } } - + + if (!pairedOligos) { if (reorient) { m->mothurOut("[WARNING]: You cannot use reorient without paired barcodes or primers, skipping."); m->mothurOutEndLine(); reorient = false; } } + if (m->control_pressed) { return 0; } //fills lines and qlines @@ -538,7 +540,7 @@ int TrimSeqsCommand::execute(){ if (countfile != "") { //create countfile with group info included CountTable* ct = new CountTable(); - ct->readTable(trimCountFile); + ct->readTable(trimCountFile, true); map justTrimmedNames = ct->getNameMap(); delete ct; @@ -684,16 +686,14 @@ int TrimSeqsCommand::driverCreateTrim(string filename, string qFileName, string //create reoriented primer and barcode pairs map rpairedPrimers, rpairedBarcodes; for (map::iterator it = pairedPrimers.begin(); it != pairedPrimers.end(); it++) { - cout << "primer " << (it->second).forward << '\t' << (it->second).reverse << '\t' << primerNameVector[it->first] << endl; - cout << "rprimer " << trimOligos->reverseOligo((it->second).reverse) << '\t' << (trimOligos->reverseOligo((it->second).forward)) << endl; - oligosPair tempPair(reverseOligo((it->second).reverse), (reverseOligo((it->second).forward))); //reversePrimer, rc ForwardPrimer + oligosPair tempPair(reverseOligo((it->second).reverse), (reverseOligo((it->second).forward))); //reversePrimer, rc ForwardPrimer rpairedPrimers[it->first] = tempPair; + //cout << reverseOligo((it->second).reverse) << '\t' << (reverseOligo((it->second).forward)) << '\t' << primerNameVector[it->first] << endl; } for (map::iterator it = pairedBarcodes.begin(); it != pairedBarcodes.end(); it++) { - cout << "barcode " << (it->second).forward << '\t' << (it->second).reverse << '\t' << barcodeNameVector[it->first] << endl; - cout << "rbarcode " << trimOligos->reverseOligo((it->second).reverse) << '\t' << (trimOligos->reverseOligo((it->second).forward)) << endl; - oligosPair tempPair(reverseOligo((it->second).reverse), (reverseOligo((it->second).forward))); //reverseBarcode, rc ForwardBarcode + oligosPair tempPair(reverseOligo((it->second).reverse), (reverseOligo((it->second).forward))); //reverseBarcode, rc ForwardBarcode rpairedBarcodes[it->first] = tempPair; + //cout << reverseOligo((it->second).reverse) << '\t' << (reverseOligo((it->second).forward)) << '\t' << barcodeNameVector[it->first] << endl; } rtrimOligos = new TrimOligos(pdiffs, bdiffs, 0, 0, rpairedPrimers, rpairedBarcodes); numBarcodes = rpairedBarcodes.size(); } @@ -716,13 +716,15 @@ int TrimSeqsCommand::driverCreateTrim(string filename, string qFileName, string Sequence currSeq(inFASTA); m->gobble(inFASTA); //cout << currSeq.getName() << '\t' << currSeq.getUnaligned().length() << endl; + Sequence savedSeq(currSeq.getName(), currSeq.getAligned()); - QualityScores currQual; + QualityScores currQual; QualityScores savedQual; if(qFileName != ""){ currQual = QualityScores(qFile); m->gobble(qFile); + savedQual.setName(currQual.getName()); savedQual.setScores(currQual.getScores()); //cout << currQual.getName() << endl; } - + string origSeq = currSeq.getUnaligned(); if (origSeq != "") { @@ -738,7 +740,9 @@ int TrimSeqsCommand::driverCreateTrim(string filename, string qFileName, string if(numBarcodes != 0){ success = trimOligos->stripBarcode(currSeq, currQual, barcodeIndex); - if(success > bdiffs) { trashCode += 'b'; } + if(success > bdiffs) { + trashCode += 'b'; + } else{ currentSeqsDiffs += success; } } @@ -751,7 +755,9 @@ int TrimSeqsCommand::driverCreateTrim(string filename, string qFileName, string if(numFPrimers != 0){ success = trimOligos->stripForward(currSeq, currQual, primerIndex, keepforward); - if(success > pdiffs) { trashCode += 'f'; } + if(success > pdiffs) { + trashCode += 'f'; + } else{ currentSeqsDiffs += success; } } @@ -771,17 +777,17 @@ int TrimSeqsCommand::driverCreateTrim(string filename, string qFileName, string int thisPrimerIndex = 0; if(numBarcodes != 0){ - thisSuccess = rtrimOligos->stripBarcode(currSeq, currQual, thisBarcodeIndex); - if(thisSuccess > bdiffs) { thisTrashCode += 'b'; } + thisSuccess = rtrimOligos->stripBarcode(savedSeq, savedQual, thisBarcodeIndex); + if(thisSuccess > bdiffs) { thisTrashCode += "b"; } else{ thisCurrentSeqsDiffs += thisSuccess; } } if(numFPrimers != 0){ - thisSuccess = rtrimOligos->stripForward(currSeq, currQual, thisPrimerIndex, keepforward); - if(thisSuccess > pdiffs) { thisTrashCode += 'f'; } + thisSuccess = rtrimOligos->stripForward(savedSeq, savedQual, thisPrimerIndex, keepforward); + if(thisSuccess > pdiffs) { thisTrashCode += "f"; } else{ thisCurrentSeqsDiffs += thisSuccess; } } - + if (thisCurrentSeqsDiffs > tdiffs) { thisTrashCode += 't'; } if (thisTrashCode == "") { @@ -790,11 +796,13 @@ int TrimSeqsCommand::driverCreateTrim(string filename, string qFileName, string currentSeqsDiffs = thisCurrentSeqsDiffs; barcodeIndex = thisBarcodeIndex; primerIndex = thisPrimerIndex; - currSeq.reverseComplement(); + savedSeq.reverseComplement(); + currSeq.setAligned(savedSeq.getAligned()); if(qFileName != ""){ - currQual.flipQScores(); + savedQual.flipQScores(); + currQual.setScores(savedQual.getScores()); } - } + }else { trashCode += "(" + thisTrashCode + ")"; } } if(keepFirst != 0){ @@ -1383,9 +1391,7 @@ int TrimSeqsCommand::setLines(string filename, string qfilename) { string sname = ""; nameStream >> sname; sname = sname.substr(1); - for (int i = 0; i < sname.length(); i++) { - if (sname[i] == ':') { sname[i] = '_'; m->changedSeqNames = true; } - } + m->checkName(sname); map::iterator it = firstSeqNames.find(sname); @@ -1525,7 +1531,7 @@ bool TrimSeqsCommand::getOligos(vector >& fastaFileNames, vector< // get rest of line in case there is a primer name while (!inOligos.eof()) { char c = inOligos.get(); - if (c == 10 || c == 13){ break; } + if (c == 10 || c == 13 || c == -1){ break; } else if (c == 32 || c == 9){;} //space or tab else { group += c; } } @@ -1555,12 +1561,14 @@ bool TrimSeqsCommand::getOligos(vector >& fastaFileNames, vector< // get rest of line in case there is a primer name while (!inOligos.eof()) { char c = inOligos.get(); - if (c == 10 || c == 13){ break; } + if (c == 10 || c == 13 || c == -1){ break; } else if (c == 32 || c == 9){;} //space or tab else { group += c; } } oligosPair newPrimer(oligo, roligo); + + if (m->debug) { m->mothurOut("[DEBUG]: primer pair " + newPrimer.forward + " " + newPrimer.reverse + ", and group = " + group + ".\n"); } //check for repeat barcodes string tempPair = oligo+roligo; @@ -1588,7 +1596,7 @@ bool TrimSeqsCommand::getOligos(vector >& fastaFileNames, vector< string temp = ""; while (!inOligos.eof()) { char c = inOligos.get(); - if (c == 10 || c == 13){ break; } + if (c == 10 || c == 13 || c == -1){ break; } else if (c == 32 || c == 9){;} //space or tab else { temp += c; } } @@ -1604,7 +1612,8 @@ bool TrimSeqsCommand::getOligos(vector >& fastaFileNames, vector< if(reverseBarcode[i] == 'U') { reverseBarcode[i] = 'T'; } } - oligosPair newPair(oligo, reverseOligo(reverseBarcode)); + reverseBarcode = reverseOligo(reverseBarcode); + oligosPair newPair(oligo, reverseBarcode); if (m->debug) { m->mothurOut("[DEBUG]: barcode pair " + newPair.forward + " " + newPair.reverse + ", and group = " + group + ".\n"); } @@ -1637,10 +1646,10 @@ bool TrimSeqsCommand::getOligos(vector >& fastaFileNames, vector< if (hasPairedBarcodes || hasPrimer) { pairedOligos = true; if ((primers.size() != 0) || (barcodes.size() != 0) || (linker.size() != 0) || (spacer.size() != 0) || (revPrimer.size() != 0)) { m->control_pressed = true; m->mothurOut("[ERROR]: cannot mix paired primers and barcodes with non paired or linkers and spacers, quitting."); m->mothurOutEndLine(); return 0; } - } + }else if (reorient) { m->mothurOut("[Warning]: cannot use checkorient without paired barcodes or primers, ignoring.\n"); m->mothurOutEndLine(); reorient = false; } if(barcodeNameVector.size() == 0 && primerNameVector[0] == ""){ allFiles = 0; } - + //add in potential combos if(barcodeNameVector.size() == 0){ barcodes[""] = 0; @@ -1841,7 +1850,13 @@ bool TrimSeqsCommand::keepFirstTrim(Sequence& sequence, QualityScores& qscores){ if(qscores.getName() != ""){ qscores.trimQScores(-1, keepFirst); } + +// sequence.printSequence(cout);cout << endl; + sequence.trim(keepFirst); + +// sequence.printSequence(cout);cout << endl << endl;; + return success; } catch(exception& e) {