X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=makecontigscommand.h;h=dc094a2b3e951218447927d9ceeb639d8b833f53;hb=8e67e9de1b200106bea5a468ac02125954656499;hp=779d35cb284449293a53b60d8eed83755d08ffc2;hpb=e339f9008daa7d37c9a9034829565620a6abe783;p=mothur.git diff --git a/makecontigscommand.h b/makecontigscommand.h index 779d35c..dc094a2 100644 --- a/makecontigscommand.h +++ b/makecontigscommand.h @@ -41,7 +41,8 @@ public: string getCommandName() { return "make.contigs"; } string getCommandCategory() { return "Sequence Processing"; } //commmand category choices: Sequence Processing, OTU-Based Approaches, Hypothesis Testing, Phylotype Analysis, General, Clustering and Hidden - string getHelpString(); + string getOutputFileNameTag(string, string); + string getHelpString(); string getCitation() { return "http://www.mothur.org/wiki/Make.contigs"; } string getDescription() { return "description"; } @@ -52,7 +53,7 @@ private: bool abort; string outputDir, ffastqfile, rfastqfile, align; float match, misMatch, gapOpen, gapExtend; - int processors, longestBase; + int processors, longestBase, threshold; vector outputNames; fastqRead readFastq(ifstream&); @@ -76,10 +77,10 @@ struct contigsData { vector files; MothurOut* m; float match, misMatch, gapOpen, gapExtend; - int count, threadID; + int count, threshold, threadID; contigsData(){} - contigsData(vector f, string of, string oq, string om, string al, MothurOut* mout, float ma, float misMa, float gapO, float gapE, int tid) { + contigsData(vector f, string of, string oq, string om, string al, MothurOut* mout, float ma, float misMa, float gapO, float gapE, int thr, int tid) { files = f; outputFasta = of; outputQual = oq; @@ -89,6 +90,7 @@ struct contigsData { misMatch = misMa; gapOpen = gapO; gapExtend = gapE; + threshold = thr; align = al; count = 0; threadID = tid; @@ -165,12 +167,16 @@ static DWORD WINAPI MyContigsThreadFunction(LPVOID lpParam){ contig += seq1[i]; contigScores.push_back(scores1[ABaseMap[i]]); if (scores1[ABaseMap[i]] < scores2[BBaseMap[i]]) { contigScores[i] = scores2[BBaseMap[i]]; } - }else if (((seq1[i] == '.') || (seq1[i] == '-')) && ((seq2[i] != '-') && (seq2[i] != '.'))) { //seq1 is a gap and seq2 is a base, choose seq2 - contig += seq2[i]; - contigScores.push_back(scores2[BBaseMap[i]]); - }else if (((seq2[i] == '.') || (seq2[i] == '-')) && ((seq1[i] != '-') && (seq1[i] != '.'))) { //seq2 is a gap and seq1 is a base, choose seq1 - contig += seq1[i]; - contigScores.push_back(scores1[ABaseMap[i]]); + }else if (((seq1[i] == '.') || (seq1[i] == '-')) && ((seq2[i] != '-') && (seq2[i] != '.'))) { //seq1 is a gap and seq2 is a base, choose seq2, unless quality score for base is below threshold. In that case eliminate base + if (scores2[BBaseMap[i]] >= pDataArray->threshold)) { + contig += seq2[i]; + contigScores.push_back(scores2[BBaseMap[i]]); + } + }else if (((seq2[i] == '.') || (seq2[i] == '-')) && ((seq1[i] != '-') && (seq1[i] != '.'))) { //seq2 is a gap and seq1 is a base, choose seq1, unless quality score for base is below threshold. In that case eliminate base + if (scores1[ABaseMap[i]] >= pDataArray->threshold) { + contig += seq1[i]; + contigScores.push_back(scores1[ABaseMap[i]]); + } }else if (((seq1[i] != '-') && (seq1[i] != '.')) && ((seq2[i] != '-') && (seq2[i] != '.'))) { //both bases choose one with better quality char c = seq1[i]; contigScores.push_back(scores1[ABaseMap[i]]);