X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=refchimeratest.cpp;fp=refchimeratest.cpp;h=2f397e8f71ec0b8a1d47338b1f12cfc552642ed2;hb=0caf3fbabaa3ece404f8ce77f4c883dc5b1bf1dc;hp=0000000000000000000000000000000000000000;hpb=1b73ff67c83892a025e597dabd9df6fe7b58206a;p=mothur.git diff --git a/refchimeratest.cpp b/refchimeratest.cpp new file mode 100644 index 0000000..2f397e8 --- /dev/null +++ b/refchimeratest.cpp @@ -0,0 +1,294 @@ +/* + * 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){ + + m = MothurOut::getInstance(); + + numRefSeqs = refs.size(); + + referenceSeqs.resize(numRefSeqs); + referenceNames.resize(numRefSeqs); + for(int i=0;ierrorOut(e, "RefChimeraTest", "execute"); + exit(1); + } +} +//*************************************************************************************************************** + +int RefChimeraTest::analyzeQuery(string queryName, string querySeq, ofstream& chimeraReportFile){ + + vector > left(numRefSeqs); + vector singleLeft, bestLeft; + vector singleRight, bestRight; + + vector > right(numRefSeqs); + for(int i=0;i= 3){// || (minMismatchToChimera == 0 && bestSequenceMismatch != 0)){ + + nMera = 2; + chimeraRefSeq = stitchBimera(leftParentBi, rightParentBi, breakPointBi); + +// minMismatchToTrimera = getTrimera(left, right, leftParentTri, middleParentTri, rightParentTri, breakPointTriA, breakPointTriB, singleLeft, bestLeft, singleRight, bestRight); +// +// if(minMismatchToChimera - minMismatchToTrimera <= 3){ +// nMera = 2; +// chimeraRefSeq = stitchBimera(leftParentBi, rightParentBi, breakPointBi); +// } +// else{ +// nMera = 3; +// chimeraRefSeq = stitchTrimera(leftParentTri, middleParentTri, rightParentTri, breakPointTriA, breakPointTriB); +// } + + } + else{ + nMera = 1; + chimeraRefSeq = referenceSeqs[bestMatch]; + } + + + double distToChimera = calcDistToChimera(querySeq, chimeraRefSeq); + +// double loonIndex = calcLoonIndex(querySeq, referenceSeqs[leftParentBi], referenceSeqs[rightParentBi], breakPointBi, binMatrix); + + chimeraReportFile << queryName << '\t' << referenceNames[bestMatch] << '\t' << bestSequenceMismatch << '\t'; + chimeraReportFile << referenceNames[leftParentBi] << ',' << referenceNames[rightParentBi] << '\t' << breakPointBi << '\t'; + chimeraReportFile << minMismatchToChimera << '\t'; + +// if(nMera == 1){ +// chimeraReportFile << "NA" << '\t' << "NA" << '\t' << "NA"; +// } +// else{ +// chimeraReportFile << referenceNames[leftParentTri] << ',' << referenceNames[middleParentTri] << ',' << referenceNames[rightParentTri] << '\t' << breakPointTriA << ',' << breakPointTriB << '\t' << minMismatchToTrimera; +// } + + chimeraReportFile << '\t' << distToChimera << '\t' << nMera << endl; + + return nMera; +} + +/**************************************************************************************************/ + +int RefChimeraTest::getMismatches(string& querySeq, vector >& left, vector >& right, int& bestRefSeq){ + + int bestSequenceMismatch = MAXINT; + + for(int i=0;i=0;l--){ +// if(querySeq[l] != '.' && querySeq[l] != referenceSeqs[i][l]){ + if(querySeq[l] != '.' && referenceSeqs[i][l] != '.' && querySeq[l] != referenceSeqs[i][l] && referenceSeqs[i][l] != 'N'){ + 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