From 5e5253ff472de3c6349e562d2580873287be0c65 Mon Sep 17 00:00:00 2001 From: pschloss Date: Thu, 3 Feb 2011 12:29:43 +0000 Subject: [PATCH] true chimera testing using reference sequences --- refchimeratest.cpp | 276 +++++++++++++++++++++++++++++++++++++++++++++ refchimeratest.h | 40 +++++++ 2 files changed, 316 insertions(+) create mode 100644 refchimeratest.cpp create mode 100644 refchimeratest.h diff --git a/refchimeratest.cpp b/refchimeratest.cpp new file mode 100644 index 0000000..246d439 --- /dev/null +++ b/refchimeratest.cpp @@ -0,0 +1,276 @@ +/* + * refchimeratest.cpp + * Mothur + * + * Created by Pat Schloss on 1/31/11. + * Copyright 2011 Schloss Lab. All rights reserved. + * + */ + +#include "refchimeratest.h" +#include "mothur.h" + +int MAXINT = numeric_limits::max(); + +//*************************************************************************************************************** + +RefChimeraTest::RefChimeraTest(vector& refs, string chimeraReportFileName){ + + m = MothurOut::getInstance(); + + m->openOutputFile(chimeraReportFileName, chimeraReportFile); + numRefSeqs = refs.size(); + + referenceSeqs.resize(numRefSeqs); + referenceNames.resize(numRefSeqs); + for(int i=0;i > left(numRefSeqs); + vector singleLeft, bestLeft; + vector singleRight, bestRight; + + vector > right(numRefSeqs); + for(int i=0;i >& left, vector >& right, int& bestRefSeq){ + + int bestSequenceMismatch = MAXINT; + + for(int i=0;i=0;l--){ + if(querySeq[l] != '.' && querySeq[l] != referenceSeqs[i][l]){ + rDiffs++; + } + right[i][index++] = rDiffs; + } + if(lDiffs < bestSequenceMismatch){ + bestSequenceMismatch = lDiffs; + bestRefSeq = i; + } + } + return bestSequenceMismatch; +} + +/**************************************************************************************************/ + +int RefChimeraTest::getChimera(vector >& left, vector >& right, int& leftParent, int& rightParent, int& breakPoint, vector& singleLeft, vector& bestLeft, vector& singleRight, vector& bestRight){ + + singleLeft.resize(alignLength, MAXINT); + bestLeft.resize(alignLength, -1); + + for(int l=0;l >& left, vector >& right, int& leftParent, int& middleParent, int& rightParent, int& breakPointA, int& breakPointB, vector& singleLeft, vector& bestLeft, vector& singleRight, vector& bestRight){ + + int bestTrimeraMismatches = MAXINT; + + leftParent = -1; + middleParent = -1; + rightParent = -1; + + breakPointA = -1; + breakPointB = -1; + + vector > minDelta(alignLength); + vector > minDeltaSeq(alignLength); + + for(int i=0;i&, string); + int analyzeQuery(string, string); + int getClosestRefIndex(); +private: + int getMismatches(string&, vector >&, vector >&, int&); + int getChimera(vector >&, vector >&, int&, int&, int&, vector&, vector&, vector&, vector&); + int getTrimera(vector >&, vector >&, int&, int&, int&, int&, int&, vector&, vector&, vector&, vector&); + string stitchBimera(int, int, int); + string stitchTrimera(int, int, int, int, int); + double calcDistToChimera(string&, string&); + + vector referenceSeqs; + vector referenceNames; + int numRefSeqs; + int alignLength; + int bestMatch; + ofstream chimeraReportFile; + + MothurOut* m; +}; + +#endif -- 2.39.2