X-Git-Url: https://git.donarmstrong.com/?p=mothur.git;a=blobdiff_plain;f=pcrseqscommand.h;h=ad69961b80fb43bad986000cabb2efae71fcfe92;hp=ba9062437d78df8aa337bc5948b603b1acf8e351;hb=fefd5ee1517abd3bc38b469cb2dffc85a1571c7e;hpb=aca78ed4a47dff8672ea8fd93cef0dfbaf0f7495 diff --git a/pcrseqscommand.h b/pcrseqscommand.h index ba90624..ad69961 100644 --- a/pcrseqscommand.h +++ b/pcrseqscommand.h @@ -16,6 +16,7 @@ #include "alignment.hpp" #include "needlemanoverlap.hpp" #include "counttable.h" +#include "oligos.h" class PcrSeqsCommand : public Command { public: @@ -45,25 +46,23 @@ private: }; vector lines; - bool getOligos(vector >&, vector >&, vector >&); - bool abort, keepprimer, keepdots, fileAligned; + bool abort, keepprimer, keepdots, fileAligned, pairedOligos; string fastafile, oligosfile, taxfile, groupfile, namefile, countfile, ecolifile, outputDir, nomatch; - int start, end, processors, length, pdiffs; + int start, end, processors, length, pdiffs, numFPrimers, numRPrimers; + Oligos oligos; - vector revPrimer, outputNames; - map primers; + vector outputNames; int writeAccnos(set); int readName(set&); int readGroup(set); int readTax(set); int readCount(set); - bool readOligos(); + int readOligos(); bool readEcoli(); int driverPcr(string, string, string, string, set&, linePair, int&, bool&); int createProcesses(string, string, string, set&); bool isAligned(string, map&); - string reverseOligo(string); int adjustDots(string, string, int, int); }; @@ -79,22 +78,17 @@ struct pcrData { unsigned long long fend; int count, start, end, length, pdiffs, pstart, pend; MothurOut* m; - map primers; - vector revPrimer; set badSeqNames; bool keepprimer, keepdots, fileAligned, adjustNeeded; - pcrData(){} - pcrData(string f, string gf, string bfn, string loc, MothurOut* mout, string ol, string ec, map pr, vector rpr, string nm, bool kp, bool kd, int st, int en, int l, int pd, unsigned long long fst, unsigned long long fen) { + pcrData(string f, string gf, string bfn, string loc, MothurOut* mout, string ol, string ec, string nm, bool kp, bool kd, int st, int en, int l, int pd, unsigned long long fst, unsigned long long fen) { filename = f; goodFasta = gf; badFasta = bfn; m = mout; oligosfile = ol; ecolifile = ec; - primers = pr; - revPrimer = rpr; nomatch = nm; keepprimer = kp; keepdots = kd; @@ -144,7 +138,26 @@ static DWORD WINAPI MyPcrThreadFunction(LPVOID lpParam){ map faked; set locations; //locations = beginning locations - TrimOligos trim(pDataArray->pdiffs, 0, pDataArray->primers, faked, pDataArray->revPrimer); + Oligos oligos(pDataArray->oligosfile); + int numFPrimers, numRPrimers; + map primers; + map barcodes; //not used + vector revPrimer; + if (oligos.hasPairedBarcodes()) { + numFPrimers = oligos.getPairedPrimers().size(); + map primerPairs = oligos.getPairedPrimers(); + for (map::iterator it = primerPairs.begin(); it != primerPairs.end(); it++) { + primers[(it->second).forward] = it->first; + revPrimer.push_back((it->second).reverse); + } + }else { + numFPrimers = oligos.getPrimers().size(); + primers = oligos.getPrimers(); + revPrimer = oligos.getReversePrimers(); + } + numRPrimers = oligos.getReversePrimers().size(); + + TrimOligos trim(pDataArray->pdiffs, 0, primers, barcodes, revPrimer); for(int i = 0; i < pDataArray->fend; i++){ //end is the number of sequences to process pDataArray->count++; @@ -179,7 +192,7 @@ static DWORD WINAPI MyPcrThreadFunction(LPVOID lpParam){ /////////////////////////////////////////////////////////////// //process primers - if (pDataArray->primers.size() != 0) { + if (numFPrimers != 0) { int primerStart = 0; int primerEnd = 0; bool good = trim.findForward(currSeq, primerStart, primerEnd); @@ -224,7 +237,7 @@ static DWORD WINAPI MyPcrThreadFunction(LPVOID lpParam){ } //process reverse primers - if (pDataArray->revPrimer.size() != 0) { + if (numRPrimers != 0) { int primerStart = 0; int primerEnd = 0; bool good = trim.findReverse(currSeq, primerStart, primerEnd); @@ -327,7 +340,7 @@ static DWORD WINAPI MyPcrThreadFunction(LPVOID lpParam){ if (pDataArray->fileAligned && !pDataArray->keepdots) { //print out smallest start value and largest end value if (locations.size() > 1) { pDataArray->adjustNeeded = true; } - if (pDataArray->primers.size() != 0) { set::iterator it = locations.begin(); pDataArray->pstart = *it; } + if (numFPrimers != 0) { set::iterator it = locations.begin(); pDataArray->pstart = *it; } } return 0;