X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=pcrseqscommand.h;h=d35850ce74296fa4f4471927817becd21145dbee;hb=cc19310422f125d6628980bd1148e1e816792382;hp=07ca8d5e8ed486af362933896725cb48c28b3df2;hpb=57b3c96832667c1b70d4d526331f52e3d49e8237;p=mothur.git diff --git a/pcrseqscommand.h b/pcrseqscommand.h index 07ca8d5..d35850c 100644 --- a/pcrseqscommand.h +++ b/pcrseqscommand.h @@ -15,6 +15,7 @@ #include "trimoligos.h" #include "alignment.hpp" #include "needlemanoverlap.hpp" +#include "counttable.h" class PcrSeqsCommand : public Command { public: @@ -25,6 +26,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 +45,9 @@ private: vector lines; bool getOligos(vector >&, vector >&, vector >&); - bool abort, keepprimer; - string fastafile, oligosfile, taxfile, groupfile, namefile, ecolifile, outputDir, nomatch; - int start, end, pdiffs, processors, length; + bool abort, keepprimer, keepdots; + string fastafile, oligosfile, taxfile, groupfile, namefile, countfile, ecolifile, outputDir, nomatch; + int start, end, processors, length; vector revPrimer, outputNames; vector primers; @@ -54,6 +56,7 @@ private: int readName(set&); int readGroup(set); int readTax(set); + int readCount(set); bool readOligos(); bool readEcoli(); int driverPcr(string, string, string, set&, linePair); @@ -79,11 +82,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 +97,7 @@ struct pcrData { revPrimer = rpr; nomatch = nm; keepprimer = kp; + keepdots = kd; start = st; end = en; length = l; @@ -216,8 +220,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 +296,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 +317,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); } } + } }