//***************************************************************************************************************
-RefChimeraTest::RefChimeraTest(vector<Sequence>& refs){
+RefChimeraTest::RefChimeraTest(vector<Sequence>& refs, bool aligned) : aligned(aligned){
m = MothurOut::getInstance();
alignLength = referenceSeqs[0].length();
-
}
//***************************************************************************************************************
int leftParentBi, rightParentBi, breakPointBi;
int minMismatchToChimera = getChimera(left, right, leftParentBi, rightParentBi, breakPointBi, singleLeft, bestLeft, singleRight, bestRight);
-// int minMismatchToTrimera = MAXINT;
-// int leftParentTri, middleParentTri, rightParentTri, breakPointTriA, breakPointTriB;
-
int nMera = 0;
string chimeraRefSeq = "";
if(bestSequenceMismatch - minMismatchToChimera >= 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;
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;
+ chimeraReportFile << '\t' << distToChimera << '\t' << nMera << endl;
return nMera;
}
int lDiffs = 0;
for(int l=0;l<alignLength;l++){
-// if(querySeq[l] != '.' && querySeq[l] != referenceSeqs[i][l]){
-
if(querySeq[l] != '.' && referenceSeqs[i][l] != '.' && querySeq[l] != referenceSeqs[i][l] && referenceSeqs[i][l] != 'N'){
lDiffs++;
}
int rDiffs = 0;
int index = 0;
for(int l=alignLength-1;l>=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++;
}
class RefChimeraTest {
public:
- RefChimeraTest(vector<Sequence>&);
+ RefChimeraTest(vector<Sequence>&, bool);
int printHeader(ofstream&);
int analyzeQuery(string, string, ofstream&);
int getClosestRefIndex();
int alignLength;
int bestMatch;
//ofstream chimeraReportFile;
-
+ bool aligned;
+
MothurOut* m;
};
CommandParameter pname("name", "InputTypes", "", "", "none", "none", "none","",false,false); parameters.push_back(pname);
CommandParameter pignorechimeras("ignorechimeras", "Boolean", "", "T", "", "", "","",false,false); parameters.push_back(pignorechimeras);
CommandParameter pthreshold("threshold", "Number", "", "1.0", "", "", "","",false,false); parameters.push_back(pthreshold);
+ CommandParameter paligned("aligned", "Boolean", "T", "", "", "", "","",false,false); parameters.push_back(paligned);
CommandParameter pprocessors("processors", "Number", "", "1", "", "", "","",false,false,true); parameters.push_back(pprocessors);
CommandParameter psave("save", "Boolean", "", "F", "", "", "","",false,false); parameters.push_back(psave);
CommandParameter pinputdir("inputdir", "String", "", "", "", "", "","",false,false); parameters.push_back(pinputdir);
// ...at some point should added some additional type checking...
temp = validParameter.validFile(parameters, "threshold", false); if (temp == "not found") { temp = "1.00"; }
m->mothurConvert(temp, threshold);
+
+ temp = validParameter.validFile(parameters, "aligned", true); if (temp == "not found"){ temp = "t"; }
+ aligned = m->isTrue(temp);
+// rdb->aligned = aligned; #do we need these lines for aligned?
+// if (aligned) { //clear out old references
+// rdb->clearMemory();
+// }
temp = validParameter.validFile(parameters, "save", false); if (temp == "not found"){ temp = "f"; }
save = m->isTrue(temp);
ofstream outChimeraReport;
m->openOutputFile(chimeraOutputFileName, outChimeraReport);
- RefChimeraTest chimeraTest(referenceSeqs);
- if (line.start == 0) { chimeraTest.printHeader(outChimeraReport); }
+
+ RefChimeraTest chimeraTest(referenceSeqs, aligned);
+
+ if (line.start == 0) { chimeraTest.printHeader(outChimeraReport); }
ofstream errorSummaryFile;
m->openOutputFile(summaryFileName, errorSummaryFile);
string queryFileName, referenceFileName, qualFileName, reportFileName, namesFileName, outputDir;
double threshold;
- bool ignoreChimeras, save;
+ bool ignoreChimeras, save, aligned;
int numRefs, processors;
int maxLength, totalBases, totalMatches;
//ofstream errorSummaryFile, errorSeqFile;