if (countfile != "") {
CountTable ct;
- ct.readTable(countfile);
+ ct.readTable(countfile, true);
nameCount = ct.getNameMap();
outputNames.push_back(trimCountFile);
outputNames.push_back(scrapCountFile);
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
if (countfile != "") { //create countfile with group info included
CountTable* ct = new CountTable();
- ct->readTable(trimCountFile);
+ ct->readTable(trimCountFile, true);
map<string, int> justTrimmedNames = ct->getNameMap();
delete ct;
for (map<int, oligosPair>::iterator it = pairedPrimers.begin(); it != pairedPrimers.end(); it++) {
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<int, oligosPair>::iterator it = pairedBarcodes.begin(); it != pairedBarcodes.end(); it++) {
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();
}
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 != "") {
if(numBarcodes != 0){
success = trimOligos->stripBarcode(currSeq, currQual, barcodeIndex);
- if(success > bdiffs) { trashCode += 'b'; }
+ if(success > bdiffs) {
+ trashCode += 'b';
+ }
else{ currentSeqsDiffs += success; }
}
if(numFPrimers != 0){
success = trimOligos->stripForward(currSeq, currQual, primerIndex, keepforward);
- if(success > pdiffs) { trashCode += 'f'; }
+ if(success > pdiffs) {
+ trashCode += 'f';
+ }
else{ currentSeqsDiffs += success; }
}
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 == "") {
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){
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<string, int>::iterator it = firstSeqNames.find(sname);
// 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; }
}
// 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; }
}
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; }
}
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;
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) {