X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=pcrseqscommand.h;h=baeca4eedc66ac9aa38acaa4b7d65bfebca56410;hb=f06b339c5fc4b6d1b9d2a08fe16bf7670bf7aeb4;hp=07ca8d5e8ed486af362933896725cb48c28b3df2;hpb=57b3c96832667c1b70d4d526331f52e3d49e8237;p=mothur.git diff --git a/pcrseqscommand.h b/pcrseqscommand.h index 07ca8d5..baeca4e 100644 --- a/pcrseqscommand.h +++ b/pcrseqscommand.h @@ -25,6 +25,7 @@ public: vector setParameters(); string getCommandName() { return "pcr.seqs"; } string getCommandCategory() { return "Sequence Processing"; } + string getOutputFileNameTag(string, string); string getHelpString(); string getCitation() { return "http://www.mothur.org/wiki/Pcr.seqs"; } string getDescription() { return "pcr.seqs"; } @@ -43,9 +44,9 @@ private: vector lines; bool getOligos(vector >&, vector >&, vector >&); - bool abort, keepprimer; + bool abort, keepprimer, keepdots; string fastafile, oligosfile, taxfile, groupfile, namefile, ecolifile, outputDir, nomatch; - int start, end, pdiffs, processors, length; + int start, end, processors, length; vector revPrimer, outputNames; vector primers; @@ -79,11 +80,11 @@ struct pcrData { vector primers; vector revPrimer; set badSeqNames; - bool keepprimer; + bool keepprimer, keepdots; pcrData(){} - pcrData(string f, string gf, string bfn, MothurOut* mout, string ol, string ec, vector pr, vector rpr, string nm, bool kp, int st, int en, int l, unsigned long long fst, unsigned long long fen) { + pcrData(string f, string gf, string bfn, MothurOut* mout, string ol, string ec, vector pr, vector rpr, string nm, bool kp, bool kd, int st, int en, int l, unsigned long long fst, unsigned long long fen) { filename = f; goodFasta = gf; badFasta = bfn; @@ -94,6 +95,7 @@ struct pcrData { revPrimer = rpr; nomatch = nm; keepprimer = kp; + keepdots = kd; start = st; end = en; length = l; @@ -216,8 +218,14 @@ static DWORD WINAPI MyPcrThreadFunction(LPVOID lpParam){ else{ //are you aligned if (aligned) { - if (!pDataArray->keepprimer) { currSeq.padToPos(mapAligned[primerEnd]); } - else { currSeq.padToPos(mapAligned[primerStart]); } + if (!pDataArray->keepprimer) { + if (pDataArray->keepdots) { currSeq.filterToPos(mapAligned[primerEnd]); } + else { currSeq.setAligned(currSeq.getAligned().substr(mapAligned[primerEnd])); } + } + else { + if (pDataArray->keepdots) { currSeq.filterToPos(mapAligned[primerStart]); } + else { currSeq.setAligned(currSeq.getAligned().substr(mapAligned[primerStart])); } + } }else { if (!pDataArray->keepprimer) { currSeq.setAligned(currSeq.getUnaligned().substr(primerEnd)); } else { currSeq.setAligned(currSeq.getUnaligned().substr(primerStart)); } @@ -286,9 +294,14 @@ static DWORD WINAPI MyPcrThreadFunction(LPVOID lpParam){ else{ //are you aligned if (aligned) { - if (!pDataArray->keepprimer) { currSeq.padFromPos(mapAligned[primerStart]); } - else { currSeq.padFromPos(mapAligned[primerEnd]); } - } + if (!pDataArray->keepprimer) { + if (pDataArray->keepdots) { currSeq.filterFromPos(mapAligned[primerStart]); } + else { currSeq.setAligned(currSeq.getAligned().substr(0, mapAligned[primerStart])); } + } + else { + if (pDataArray->keepdots) { currSeq.filterFromPos(mapAligned[primerEnd]); } + else { currSeq.setAligned(currSeq.getAligned().substr(0, mapAligned[primerEnd])); } + } } else { if (!pDataArray->keepprimer) { currSeq.setAligned(currSeq.getUnaligned().substr(0, primerStart)); } else { currSeq.setAligned(currSeq.getUnaligned().substr(0, primerEnd)); } @@ -302,21 +315,38 @@ static DWORD WINAPI MyPcrThreadFunction(LPVOID lpParam){ else if (currSeq.getAligned().length() != pDataArray->length) { pDataArray->m->mothurOut("[ERROR]: seqs are not the same length as ecoli seq. When using ecoli option your sequences must be aligned and the same length as the ecoli sequence.\n"); pDataArray->m->control_pressed = true; break; }else { - currSeq.padToPos(pDataArray->start); - currSeq.padFromPos(pDataArray->end); + if (pDataArray->keepdots) { + currSeq.filterToPos(pDataArray->start); + currSeq.filterFromPos(pDataArray->end); + }else { + string seqString = currSeq.getAligned().substr(0, pDataArray->end); + seqString = seqString.substr(pDataArray->start); + currSeq.setAligned(seqString); + } } }else{ //using start and end to trim //make sure the seqs are aligned lengths.insert(currSeq.getAligned().length()); if (lengths.size() > 1) { pDataArray->m->mothurOut("[ERROR]: seqs are not aligned. When using start and end your sequences must be aligned.\n"); pDataArray->m->control_pressed = true; break; } else { - if (pDataArray->start != -1) { currSeq.padToPos(pDataArray->start); } if (pDataArray->end != -1) { if (pDataArray->end > currSeq.getAligned().length()) { pDataArray->m->mothurOut("[ERROR]: end is longer than your sequence length, aborting.\n"); pDataArray->m->control_pressed = true; break; } else { - currSeq.padFromPos(pDataArray->end); + if (pDataArray->keepdots) { currSeq.filterFromPos(pDataArray->end); } + else { + string seqString = currSeq.getAligned().substr(0, pDataArray->end); + currSeq.setAligned(seqString); + } + } + } + if (pDataArray->start != -1) { + if (pDataArray->keepdots) { currSeq.filterToPos(pDataArray->start); } + else { + string seqString = currSeq.getAligned().substr(pDataArray->start); + currSeq.setAligned(seqString); } } + } }