X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=pcrseqscommand.h;h=03092bca2a70da8428e77f5599e6ab200c2b8960;hb=9aa36ad8297141ef9fcab04fea10e96d2fed26fe;hp=07ca8d5e8ed486af362933896725cb48c28b3df2;hpb=a33a385cc5b7481488f92f794425f01fbf40a543;p=mothur.git diff --git a/pcrseqscommand.h b/pcrseqscommand.h index 07ca8d5..03092bc 100644 --- a/pcrseqscommand.h +++ b/pcrseqscommand.h @@ -43,7 +43,7 @@ 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; @@ -79,11 +79,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 +94,7 @@ struct pcrData { revPrimer = rpr; nomatch = nm; keepprimer = kp; + keepdots = kd; start = st; end = en; length = l; @@ -216,8 +217,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 +293,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 +314,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(start); + currSeq.filterFromPos(end); + }else { + string seqString = currSeq.getAligned().substr(0, end); + seqString = seqString.substr(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(end); } + else { + string seqString = currSeq.getAligned().substr(0, end); + currSeq.setAligned(seqString); + } + } + } + if (pDataArray->start != -1) { + if (pDataArray->keepdots) { currSeq.filterToPos(start); } + else { + string seqString = currSeq.getAligned().substr(start); + currSeq.setAligned(seqString); } } + } }