X-Git-Url: https://git.donarmstrong.com/?p=mothur.git;a=blobdiff_plain;f=venn.cpp;h=66dbb8eac3ee13c069b85374503dd87cc0ae538f;hp=82020d46a18de0cb4ad4959498f3cbee1ddfe4a2;hb=1a20e24ee786195ab0e1cccd4f5aede7a88f3f4e;hpb=d2fc851cdaf57874b3ac8261b220fad35750daad diff --git a/venn.cpp b/venn.cpp index 82020d4..66dbb8e 100644 --- a/venn.cpp +++ b/venn.cpp @@ -11,59 +11,77 @@ #include "ace.h" #include "sobs.h" #include "chao1.h" +#include "nseqs.h" #include "sharedchao1.h" #include "sharedsobscollectsummary.h" //********************************************************************************************************************** -Venn::Venn(){ +Venn::Venn(string o, bool n, string f, int fs, bool so) : outputDir(o), nseqs(n), inputfile(f), fontSize(fs), sharedOtus(so) { try { - globaldata = GlobalData::getInstance(); - + m = MothurOut::getInstance(); } catch(exception& e) { - errorOut(e, "Venn", "Venn"); + m->errorOut(e, "Venn", "Venn"); exit(1); } } //********************************************************************************************************************** -void Venn::getPic(SAbundVector* sabund, vector vCalcs) { +vector Venn::getPic(SAbundVector* sabund, vector vCalcs) { try { - + + vector outputNames; + for(int i=0;iinputFileName + ".venn." + sabund->getLabel() + vCalcs[i]->getName() + ".svg"; - openOutputFile(filenamesvg, outsvg); + string filenamesvg = outputDir + m->getRootName(m->getSimpleName(inputfile)) + "." + sabund->getLabel() + "." + vCalcs[i]->getName() + ".svg"; + outputNames.push_back(filenamesvg); + m->openOutputFile(filenamesvg, outsvg); + + if (m->control_pressed) { outsvg.close(); return outputNames; } vector data = vCalcs[i]->getValues(sabund); + int width = 1500; + int height = 1500; + //svg image - outsvg << "\n"; + outsvg << "\n"; outsvg << "\n"; - outsvg << ""; - outsvg << "Venn Diagram at distance " + sabund->getLabel() + "\n"; - outsvg << ""; - outsvg << "" + toString(data[0]) + "\n"; + outsvg << ""; + outsvg << "Venn Diagram at distance " + sabund->getLabel() + "\n"; + outsvg << ""; + outsvg << "" + toString(data[0]) + "\n"; if (data.size() == 3) { - outsvg << "The lower bound of the confidence interval is " + toString(data[1]) + "\n"; - outsvg << "The upper bound of the confidence interval is " + toString(data[2]) + "\n"; + outsvg << "The lower bound of the confidence interval is " + toString(data[1]) + "\n"; + outsvg << "The upper bound of the confidence interval is " + toString(data[2]) + "\n"; + } + + if (nseqs) { + outsvg << "The number of sequences represented is " + toString(sabund->getNumSeqs()) + "\n"; } outsvg << "\n\n"; outsvg.close(); } + + return outputNames; } catch(exception& e) { - errorOut(e, "Venn", "getPic"); + m->errorOut(e, "Venn", "getPic"); exit(1); } } //********************************************************************************************************************** -void Venn::getPic(vector lookup, vector vCalcs) { +vector Venn::getPic(vector lookup, vector vCalcs) { try { - + vector subset; + vector outputNames; + + int width = 1500; + int height = 1500; /******************* 1 Group **************************/ if (lookup.size() == 1) { @@ -73,9 +91,12 @@ void Venn::getPic(vector lookup, vector vCalcs //make a file for each calculator for(int i=0;iinputFileName) + lookup[0]->getLabel() + ".venn." + vCalcs[i]->getName() + ".svg"; - openOutputFile(filenamesvg, outsvg); - + string filenamesvg = outputDir + m->getRootName(m->getSimpleName(inputfile)) + lookup[0]->getLabel() + "." + vCalcs[i]->getName() + "." + lookup[0]->getGroup() + ".svg"; + outputNames.push_back(filenamesvg); + m->openOutputFile(filenamesvg, outsvg); + + if (m->control_pressed) { outsvg.close(); return outputNames; } + //in essence you want to run it like a single if (vCalcs[i]->getName() == "sharedsobs") { singleCalc = new Sobs(); @@ -88,20 +109,24 @@ void Venn::getPic(vector lookup, vector vCalcs vector data = singleCalc->getValues(sabund); //svg image - outsvg << "\n"; + outsvg << "\n"; outsvg << "\n"; - outsvg << ""; - outsvg << "Venn Diagram at distance " + lookup[0]->getLabel() + "\n"; - outsvg << ""; - outsvg << "getGroup().length() / 2)) + "\" y=\"165\">" + lookup[0]->getGroup() + "\n"; - outsvg << "" + toString(data[0]) + "\n"; + outsvg << ""; + outsvg << "Venn Diagram at distance " + lookup[0]->getLabel() + "\n"; + outsvg << ""; + outsvg << "getGroup().length() / 2)) + "\" y=\"" + toString(int(0.24 * height)) + "\">" + lookup[0]->getGroup() + "\n"; + outsvg << "" + toString(data[0]) + "\n"; if (data.size() == 3) { - outsvg << "The lower bound of the confidence interval is " + toString(data[1]) + "\n"; - outsvg << "The upper bound of the confidence interval is " + toString(data[2]) + "\n"; + outsvg << "The lower bound of the confidence interval is " + toString(data[1]) + "\n"; + outsvg << "The upper bound of the confidence interval is " + toString(data[2]) + "\n"; } - + + if (nseqs) { + outsvg << "The number of sequences represented is " + toString(sabund->getNumSeqs()) + "\n"; + } + outsvg << "\n\n"; outsvg.close(); delete singleCalc; @@ -122,20 +147,53 @@ void Venn::getPic(vector lookup, vector vCalcs //make a file for each calculator for(int i=0;iinputFileName) + lookup[0]->getLabel() + ".venn." + vCalcs[i]->getName() + ".svg"; - openOutputFile(filenamesvg, outsvg); + string filenamesvg = outputDir + m->getRootName(m->getSimpleName(inputfile)) + lookup[0]->getLabel() + "." + vCalcs[i]->getName() + "." + lookup[0]->getGroup() + "-" + lookup[1]->getGroup() + ".svg"; + + outputNames.push_back(filenamesvg); + m->openOutputFile(filenamesvg, outsvg); + + if (m->control_pressed) { outsvg.close(); return outputNames; } //get estimates for sharedAB - vector shared = vCalcs[i]->getValues(subset); + vector labels; + vector shared = vCalcs[i]->getValues(subset, labels); //in essence you want to run it like a single if (vCalcs[i]->getName() == "sharedsobs") { singleCalc = new Sobs(); + if (sharedOtus && (labels.size() != 0)) { + string filenameShared = outputDir + m->getRootName(m->getSimpleName(inputfile)) + lookup[0]->getLabel() + "." + vCalcs[i]->getName() + ".sharedotus"; + + outputNames.push_back(filenameShared); + ofstream outShared; + m->openOutputFile(filenameShared, outShared); + outShared << "Groups\tNumShared\tOTULabels\n"; + outShared << lookup[0]->getGroup() + "-" + lookup[1]->getGroup() << '\t' << labels.size() << '\t'; + for (int k = 0; k < labels.size()-1; k++) { + outShared << labels[k] << ","; + } + if (labels.size() != 0) { outShared << labels[labels.size()-1]; } + outShared << endl; + outShared.close(); + } }else if (vCalcs[i]->getName() == "sharedchao") { singleCalc = new Chao1(); - }//else if (vCalcs[i]->getName() == "sharedace") { - //singleCalc = new Ace(10); - //} + } + + int sharedVal, numSeqsA, numSeqsB, uniqSeqsToA, uniqSeqsToB; + if (nseqs) { + NSeqs* nseqsCalc = new NSeqs(); + vector data = nseqsCalc->getValues(lookup); + cout << data[0] << '\t' << data[1] << endl; + sharedVal = data[0] + data[1]; + numSeqsA = sabundA->getNumSeqs(); + numSeqsB = sabundB->getNumSeqs(); + uniqSeqsToA = numSeqsA-data[0]; + uniqSeqsToB = numSeqsB-data[1]; + + delete nseqsCalc; + } + //get estimates for numA vector numA = singleCalc->getValues(sabundA); @@ -144,32 +202,41 @@ void Venn::getPic(vector lookup, vector vCalcs vector numB = singleCalc->getValues(sabundB); //image window - outsvg << "\n"; + outsvg << "\n"; outsvg << "\n"; //draw circles - outsvg << ""; - outsvg << "Venn Diagram at distance " + lookup[0]->getLabel() + "\n"; - outsvg << ""; - outsvg << ""; - outsvg << "" + toString(numA[0] - shared[0]) + "\n"; - outsvg << "" + toString(numB[0] - shared[0]) + "\n"; - outsvg << "getGroup().length() / 2)) + "\" y=\"175\">" + lookup[0]->getGroup() + "\n"; - outsvg << "getGroup().length() / 2)) + "\" y=\"175\">" + lookup[1]->getGroup() + "\n"; - outsvg << "" + toString(shared[0]) + "\n"; - outsvg << "The number of species in group " + lookup[0]->getGroup() + " is " + toString(numA[0]); + outsvg << ""; + outsvg << "Venn Diagram at distance " + lookup[0]->getLabel() + "\n"; + outsvg << ""; + outsvg << ""; + outsvg << "" + toString(numA[0] - shared[0]) + "\n"; + outsvg << "" + toString(numB[0] - shared[0]) + "\n"; + outsvg << "getGroup().length() / 2)) + "\" y=\"" + toString(int(0.25 * height)) + "\">" + lookup[0]->getGroup() + "\n"; + outsvg << "getGroup().length() / 2)) + "\" y=\"" + toString(int(0.25 * height)) + "\">" + lookup[1]->getGroup() + "\n"; + outsvg << "" + toString(shared[0]) + "\n"; + outsvg << "The number of species in group " + lookup[0]->getGroup() + " is " + toString(numA[0]); if (numA.size() == 3) { - outsvg << " the lci is " + toString(numA[1]) + " and the hci is " + toString(numA[2]) + "\n"; - }else { outsvg << "\n"; } + outsvg << " the lci is " + toString(numA[1]) + " and the hci is " + toString(numA[2]); + } + if (nseqs) { outsvg << ", and the number of squences is " + toString(numSeqsA) + "; " + toString(uniqSeqsToA) + " sequences are not shared"; } + outsvg << "\n"; - outsvg << "The number of species in group " + lookup[1]->getGroup() + " is " + toString(numB[0]); + outsvg << "The number of species in group " + lookup[1]->getGroup() + " is " + toString(numB[0]); if (numB.size() == 3) { - outsvg << " the lci is " + toString(numB[1]) + " and the hci is " + toString(numB[2]) + "\n"; - }else { outsvg << "\n"; } + outsvg << " the lci is " + toString(numB[1]) + " and the hci is " + toString(numB[2]); + } + if (nseqs) { outsvg << ", and the number of squences is " + toString(numSeqsB) + "; " + toString(uniqSeqsToB) + " sequences are not shared"; } + outsvg << "\n"; - outsvg << "The number of sepecies shared between groups " + lookup[0]->getGroup() + " and " + lookup[1]->getGroup() + " is " + toString(shared[0]) + "\n"; - outsvg << "Percentage of species that are shared in groups " + lookup[0]->getGroup() + " and " + lookup[1]->getGroup() + " is " + toString((shared[0] / (float)(numA[0] + numB[0] - shared[0]))) + "\n"; - outsvg << "The total richness for all groups is " + toString((float)(numA[0] + numB[0] - shared[0])) + "\n"; + outsvg << "The number of sepecies shared between groups " + lookup[0]->getGroup() + " and " + lookup[1]->getGroup() + " is " + toString(shared[0]); + if (nseqs) { outsvg << ", and the number of squences is " + toString(sharedVal) + "; " + toString((sharedVal / (float)(numSeqsA + numSeqsB))*100) + "% of these sequences are shared"; } + outsvg << "\n"; + + outsvg << "Percentage of species that are shared in groups " + lookup[0]->getGroup() + " and " + lookup[1]->getGroup() + " is " + toString((shared[0] / (float)(numA[0] + numB[0] - shared[0]))*100) + "\n"; + + outsvg << "The total richness for all groups is " + toString((float)(numA[0] + numB[0] - shared[0]))+ "\n";; + //close file outsvg << "\n\n"; @@ -179,6 +246,11 @@ void Venn::getPic(vector lookup, vector vCalcs /******************* 3 Groups **************************/ }else if (lookup.size() == 3) { + + height = 1600; + int windowSize = height; + + //get sabund vector pointers so you can use the single calculators //one for each group SAbundVector sA, sB, sC; @@ -190,9 +262,42 @@ void Venn::getPic(vector lookup, vector vCalcs //make a file for each calculator for(int i=0;iinputFileName) + lookup[0]->getLabel() + ".venn." + vCalcs[i]->getName() + ".svg"; - openOutputFile(filenamesvg, outsvg); + string filenamesvg = outputDir + m->getRootName(m->getSimpleName(inputfile)) + lookup[0]->getLabel() + "." + vCalcs[i]->getName() + "." + lookup[0]->getGroup() + "-" + lookup[1]->getGroup() + "-" + lookup[2]->getGroup() + ".svg"; + + outputNames.push_back(filenamesvg); + m->openOutputFile(filenamesvg, outsvg); + + if (m->control_pressed) { outsvg.close(); return outputNames; } + + int sharedVal, sharedABVal, sharedACVal, sharedBCVal, numSeqsA, numSeqsB, numSeqsC, uniqSeqsToA, uniqSeqsToB, uniqSeqsToC; + + if (nseqs) { + NSeqs* nseqsCalc = new NSeqs(); + vector sharedData = nseqsCalc->getValues(lookup); + + vector mysubset; mysubset.push_back(lookup[0]); mysubset.push_back(lookup[1]); + vector sharedAB = nseqsCalc->getValues(mysubset); + + mysubset.clear(); mysubset.push_back(lookup[0]); mysubset.push_back(lookup[2]); + vector sharedAC = nseqsCalc->getValues(mysubset); + + mysubset.clear(); mysubset.push_back(lookup[1]); mysubset.push_back(lookup[2]); + vector sharedBC = nseqsCalc->getValues(mysubset); + + sharedVal = sharedData[0] + sharedData[1] + sharedData[2]; + sharedABVal = sharedAB[0] + sharedAB[1]; + sharedACVal = sharedAC[0] + sharedAC[1]; + sharedBCVal = sharedBC[0] + sharedBC[1]; + numSeqsA = sabundA->getNumSeqs(); + numSeqsB = sabundB->getNumSeqs(); + numSeqsC = sabundC->getNumSeqs(); + uniqSeqsToA = numSeqsA-sharedData[0]; + uniqSeqsToB = numSeqsC-sharedData[1]; + uniqSeqsToC = numSeqsB-sharedData[1]; + + delete nseqsCalc; + } + if (vCalcs[i]->getName() == "sharedace") { @@ -232,7 +337,7 @@ void Venn::getPic(vector lookup, vector vCalcs //merge BC and estimate with shared with A SharedRAbundVector* merge = new SharedRAbundVector(); for (int j = 0; j < lookup[1]->size(); j++) { - merge->push_back((lookup[1]->getAbundance(j) + lookup[2]->getAbundance(j)), j, ""); + merge->push_back((lookup[1]->getAbundance(j) + lookup[2]->getAbundance(j)), ""); } subset.clear(); @@ -243,7 +348,7 @@ void Venn::getPic(vector lookup, vector vCalcs //merge AC and estimate with shared with B merge = new SharedRAbundVector(); for (int j = 0; j < lookup[0]->size(); j++) { - merge->push_back((lookup[0]->getAbundance(j) + lookup[2]->getAbundance(j)), j, ""); + merge->push_back((lookup[0]->getAbundance(j) + lookup[2]->getAbundance(j)), ""); } subset.clear(); @@ -254,7 +359,7 @@ void Venn::getPic(vector lookup, vector vCalcs //merge AB and estimate with shared with C merge = new SharedRAbundVector(); for (int j = 0; j < lookup[0]->size(); j++) { - merge->push_back((lookup[0]->getAbundance(j) + lookup[1]->getAbundance(j)), j, ""); + merge->push_back((lookup[0]->getAbundance(j) + lookup[1]->getAbundance(j)), ""); } subset.clear(); @@ -284,56 +389,79 @@ void Venn::getPic(vector lookup, vector vCalcs } //image window - outsvg << "\n"; + outsvg << "\n"; outsvg << "\n"; //draw circles - outsvg << ""; - outsvg << "Venn Diagram at distance " + lookup[0]->getLabel() + "\n"; - outsvg << ""; - outsvg << ""; - outsvg << ""; + outsvg << ""; + outsvg << "Venn Diagram at distance " + lookup[0]->getLabel() + "\n"; + outsvg << ""; + outsvg << ""; + outsvg << ""; //place labels within overlaps - outsvg << "" + toString(numA[0]-sharedAwithBC[0]) + "\n"; - outsvg << "getGroup().length() / 2)) + "\" y=\"150\">" + lookup[0]->getGroup() + "\n"; - outsvg << "" + toString(sharedAB[0] - sharedABC) + "\n"; - outsvg << "" + toString(numB[0]-sharedBwithAC[0]) + "\n"; - outsvg << "getGroup().length() / 2)) + "\" y=\"150\">" + lookup[1]->getGroup() + "\n"; - outsvg << "" + toString(sharedAC[0] - sharedABC) + "\n"; - outsvg << "" + toString(numC[0]-sharedCwithAB[0]) + "\n"; - outsvg << "getGroup().length() / 2)) + "\" y=\"410\">" + lookup[2]->getGroup() + "\n"; - outsvg << "" + toString(sharedBC[0] - sharedABC) + "\n"; - outsvg << "" + toString(sharedABC) + "\n"; + outsvg << "" + toString(numA[0]-sharedAwithBC[0]) + "\n"; + outsvg << "getGroup().length() / 2)) + "\" y=\"" + toString(int(0.19 * height)) + "\">" + lookup[0]->getGroup() + "\n"; + outsvg << "" + toString(sharedAB[0] - sharedABC) + "\n"; + outsvg << "" + toString(numB[0]-sharedBwithAC[0]) + "\n"; + outsvg << "getGroup().length() / 2)) + "\" y=\"" + toString(int(0.19 * height)) + "\">" + lookup[1]->getGroup() + "\n"; + outsvg << "" + toString(sharedAC[0] - sharedABC) + "\n"; + outsvg << "" + toString(numC[0]-sharedCwithAB[0]) + "\n"; + outsvg << "getGroup().length() / 2)) + "\" y=\"" + toString(int(0.52 * height)) + "\">" + lookup[2]->getGroup() + "\n"; + outsvg << "" + toString(sharedBC[0] - sharedABC) + "\n"; + outsvg << "" + toString(sharedABC) + "\n"; - outsvg << "The number of species shared between groups " + lookup[0]->getGroup() + " and " + lookup[1]->getGroup() + " is " + toString(sharedAB[0]) + "\n"; - outsvg << "The number of species shared between groups " + lookup[0]->getGroup() + " and " + lookup[2]->getGroup() + " is " + toString(sharedAC[0]) + "\n"; - outsvg << "The number of species shared between groups " + lookup[1]->getGroup() + " and " + lookup[2]->getGroup() + " is " + toString(sharedBC[0]) + "\n"; - outsvg << "The number of species shared between groups " + lookup[0]->getGroup() + " and combined groups " + lookup[1]->getGroup() + lookup[2]->getGroup() + " is " + toString(sharedAwithBC[0]) + "\n"; - outsvg << "The number of species shared between groups " + lookup[1]->getGroup() + " and combined groups " + lookup[0]->getGroup() + lookup[2]->getGroup() + " is " + toString(sharedBwithAC[0]) + "\n"; - outsvg << "The number of species shared between groups " + lookup[2]->getGroup() + " and combined groups " + lookup[0]->getGroup() + lookup[1]->getGroup() + " is " + toString(sharedCwithAB[0]) + "\n"; - outsvg << "The number of species in group " + lookup[0]->getGroup() + " is " + toString(numA[0]); + outsvg << "The number of species shared between groups " + lookup[0]->getGroup() + " and " + lookup[1]->getGroup() + " is " + toString(sharedAB[0]); + if (nseqs) { outsvg << ", and the number of squences is " + toString(sharedABVal); } + outsvg << "\n"; + outsvg << "The number of species shared between groups " + lookup[0]->getGroup() + " and " + lookup[2]->getGroup() + " is " + toString(sharedAC[0]); + if (nseqs) { outsvg << ", and the number of squences is " + toString(sharedACVal); } + outsvg << "\n"; + outsvg << "The number of species shared between groups " + lookup[1]->getGroup() + " and " + lookup[2]->getGroup() + " is " + toString(sharedBC[0]); + if (nseqs) { outsvg << ", and the number of squences is " + toString(sharedBCVal); } + outsvg << "\n"; + outsvg << "The number of species shared between groups " + lookup[0]->getGroup() + " and combined groups " + lookup[1]->getGroup() + lookup[2]->getGroup() + " is " + toString(sharedAwithBC[0]) + "\n"; + outsvg << "The number of species shared between groups " + lookup[1]->getGroup() + " and combined groups " + lookup[0]->getGroup() + lookup[2]->getGroup() + " is " + toString(sharedBwithAC[0]) + "\n"; + outsvg << "The number of species shared between groups " + lookup[2]->getGroup() + " and combined groups " + lookup[0]->getGroup() + lookup[1]->getGroup() + " is " + toString(sharedCwithAB[0]) + "\n"; + outsvg << "The number of species in group " + lookup[0]->getGroup() + " is " + toString(numA[0]); if (numA.size() == 3) { - outsvg << " the lci is " + toString(numA[1]) + " and the hci is " + toString(numA[2]) + "\n"; - }else { outsvg << "\n"; } + outsvg << " the lci is " + toString(numA[1]) + " and the hci is " + toString(numA[2]); + } + if (nseqs) { outsvg << ", and the number of squences is " + toString(numSeqsA) + "; " + toString(uniqSeqsToA) + " sequences are not shared"; } + outsvg << "\n"; - outsvg << "The number of species in group " + lookup[1]->getGroup() + " is " + toString(numB[0]); + outsvg << "The number of species in group " + lookup[1]->getGroup() + " is " + toString(numB[0]); if (numB.size() == 3) { - outsvg << " the lci is " + toString(numB[1]) + " and the hci is " + toString(numB[2]) + "\n"; - }else { outsvg << "\n"; } + outsvg << " the lci is " + toString(numB[1]) + " and the hci is " + toString(numB[2]); + } + if (nseqs) { outsvg << ", and the number of squences is " + toString(numSeqsB) + "; " + toString(uniqSeqsToB) + " sequences are not shared"; } + outsvg << "\n"; - outsvg << "The number of species in group " + lookup[2]->getGroup() + " is " + toString(numC[0]); + outsvg << "The number of species in group " + lookup[2]->getGroup() + " is " + toString(numC[0]); if (numC.size() == 3) { - outsvg << " the lci is " + toString(numC[1]) + " and the hci is " + toString(numC[2]) + "\n"; - }else { outsvg << "\n"; } + outsvg << " the lci is " + toString(numC[1]) + " and the hci is " + toString(numC[2]); + } + if (nseqs) { outsvg << ", and the number of squences is " + toString(numSeqsC) + "; " + toString(uniqSeqsToC) + " sequences are not shared"; } + outsvg << "\n"; - outsvg << "The total richness of all the groups is " + toString(numA[0] + numB[0] + numC[0] - sharedAB[0] - sharedAC[0] - sharedBC[0] + sharedABC) + "\n"; - outsvg << "The total shared richness is " + toString(sharedABC) + "\n"; + outsvg << "The total richness of all the groups is " + toString(numA[0] + numB[0] + numC[0] - sharedAB[0] - sharedAC[0] - sharedBC[0] + sharedABC) + "\n"; + outsvg << "The total shared richness is " + toString(sharedABC); + if (nseqs) { outsvg << ", and the number of squences is " + toString(sharedVal); } + outsvg << "\n"; delete singleCalc; }else { //sharedchao and sharedsobs are multigroup + ofstream outShared; + if (sharedOtus && (vCalcs[i]->getName() == "sharedsobs")) { + string filenameShared = outputDir + m->getRootName(m->getSimpleName(inputfile)) + lookup[0]->getLabel() + "." + vCalcs[i]->getName() + ".sharedotus"; + + outputNames.push_back(filenameShared); + + m->openOutputFile(filenameShared, outShared); + outShared << "Groups\tNumShared\tOTULabels\n"; + } vector subset; //get estimates for numA @@ -352,67 +480,115 @@ void Venn::getPic(vector lookup, vector vCalcs subset.clear(); subset.push_back(lookup[0]); subset.push_back(lookup[1]); - vector sharedab = vCalcs[i]->getValues(subset); + vector labels; + vector sharedab = vCalcs[i]->getValues(subset, labels); + if (sharedOtus && (vCalcs[i]->getName() == "sharedsobs") && (labels.size() != 0)) { + outShared << lookup[0]->getGroup() + "-" + lookup[1]->getGroup() << '\t' << labels.size() << '\t'; + for (int k = 0; k < labels.size()-1; k++) { + outShared << labels[k] << ","; + } + if (labels.size() != 0) { outShared << labels[labels.size()-1]; } + outShared << endl; + } subset.clear(); subset.push_back(lookup[0]); subset.push_back(lookup[2]); - vector sharedac = vCalcs[i]->getValues(subset); + vector sharedac = vCalcs[i]->getValues(subset, labels); + if (sharedOtus && (vCalcs[i]->getName() == "sharedsobs") && (labels.size() != 0)) { + outShared << lookup[0]->getGroup() + "-" + lookup[2]->getGroup() << '\t'<< labels.size() << '\t'; + for (int k = 0; k < labels.size()-1; k++) { + outShared << labels[k] << ","; + } + if (labels.size() != 0) { outShared << labels[labels.size()-1]; } + outShared << endl; + } subset.clear(); subset.push_back(lookup[1]); subset.push_back(lookup[2]); - vector sharedbc = vCalcs[i]->getValues(subset); + vector sharedbc = vCalcs[i]->getValues(subset, labels); + if (sharedOtus && (vCalcs[i]->getName() == "sharedsobs") && (labels.size() != 0)) { + outShared << lookup[1]->getGroup() + "-" + lookup[2]->getGroup() << '\t'<< labels.size() << '\t'; + for (int k = 0; k < labels.size()-1; k++) { + outShared << labels[k] << ","; + } + if (labels.size() != 0) { outShared << labels[labels.size()-1]; } + outShared << endl; + } + subset.clear(); subset.push_back(lookup[0]); subset.push_back(lookup[1]); subset.push_back(lookup[2]); - vector sharedabc = vCalcs[i]->getValues(subset); + vector sharedabc = vCalcs[i]->getValues(subset, labels); + if (sharedOtus && (vCalcs[i]->getName() == "sharedsobs") && (labels.size() != 0)) { + outShared << lookup[0]->getGroup() + "-" + lookup[1]->getGroup() + "-" + lookup[2]->getGroup() << '\t'<< labels.size() << '\t'; + for (int k = 0; k < labels.size()-1; k++) { + outShared << labels[k] << ","; + } + if (labels.size() != 0) { outShared << labels[labels.size()-1]; } + outShared << endl; + outShared.close(); + } //image window - outsvg << "\n"; + outsvg << "\n"; outsvg << "\n"; //draw circles - outsvg << ""; - outsvg << "Venn Diagram at distance " + lookup[0]->getLabel() + "\n"; - outsvg << ""; - outsvg << ""; - outsvg << ""; + outsvg << ""; + outsvg << "Venn Diagram at distance " + lookup[0]->getLabel() + "\n"; + outsvg << ""; + outsvg << ""; + outsvg << ""; //place labels within overlaps - outsvg << "" + toString(numA[0]-sharedab[0]-sharedac[0]+sharedabc[0]) + "\n"; - outsvg << "getGroup().length() / 2)) + "\" y=\"150\">" + lookup[0]->getGroup() + "\n"; - outsvg << "" + toString(sharedab[0] - sharedabc[0]) + "\n"; - outsvg << "" + toString(numB[0]-sharedab[0]-sharedbc[0]+sharedabc[0]) + "\n"; - outsvg << "getGroup().length() / 2)) + "\" y=\"150\">" + lookup[1]->getGroup() + "\n"; - outsvg << "" + toString(sharedac[0] - sharedabc[0]) + "\n"; - outsvg << "" + toString(numC[0]-sharedac[0]-sharedbc[0]+sharedabc[0]) + "\n"; - outsvg << "getGroup().length() / 2)) + "\" y=\"410\">" + lookup[2]->getGroup() + "\n"; - outsvg << "" + toString(sharedbc[0] - sharedabc[0]) + "\n"; - outsvg << "" + toString(sharedabc[0]) + "\n"; + outsvg << "" + toString(numA[0]-sharedab[0]-sharedac[0]+sharedabc[0]) + "\n"; + outsvg << "getGroup().length() / 2)) + "\" y=\"" + toString(int(0.19 * height)) + "\">" + lookup[0]->getGroup() + "\n"; + outsvg << "" + toString(sharedab[0] - sharedabc[0]) + "\n"; + outsvg << "" + toString(numB[0]-sharedab[0]-sharedbc[0]+sharedabc[0]) + "\n"; + outsvg << "getGroup().length() / 2)) + "\" y=\"" + toString(int(0.19 * height)) + "\">" + lookup[1]->getGroup() + "\n"; + outsvg << "" + toString(sharedac[0] - sharedabc[0]) + "\n"; + outsvg << "" + toString(numC[0]-sharedac[0]-sharedbc[0]+sharedabc[0]) + "\n"; + outsvg << "getGroup().length() / 2)) + "\" y=\"" + toString(int(0.51 * height)) + "\">" + lookup[2]->getGroup() + "\n"; + outsvg << "" + toString(sharedbc[0] - sharedabc[0]) + "\n"; + outsvg << "" + toString(sharedabc[0]) + "\n"; - outsvg << "The number of species shared between groups " + lookup[0]->getGroup() + " and " + lookup[1]->getGroup() + " is " + toString(sharedab[0]) + "\n"; - outsvg << "The number of species shared between groups " + lookup[0]->getGroup() + " and " + lookup[2]->getGroup() + " is " + toString(sharedac[0]) + "\n"; - outsvg << "The number of species shared between groups " + lookup[1]->getGroup() + " and " + lookup[2]->getGroup() + " is " + toString(sharedbc[0]) + "\n"; - outsvg << "The number of species in group " + lookup[0]->getGroup() + " is " + toString(numA[0]); + outsvg << "The number of species shared between groups " + lookup[0]->getGroup() + " and " + lookup[1]->getGroup() + " is " + toString(sharedab[0]); + if (nseqs) { outsvg << ", and the number of squences is " + toString(sharedABVal); } + outsvg << "\n"; + outsvg << "The number of species shared between groups " + lookup[0]->getGroup() + " and " + lookup[2]->getGroup() + " is " + toString(sharedac[0]); + if (nseqs) { outsvg << ", and the number of squences is " + toString(sharedACVal); } + outsvg << "\n"; + outsvg << "The number of species shared between groups " + lookup[1]->getGroup() + " and " + lookup[2]->getGroup() + " is " + toString(sharedbc[0]); + if (nseqs) { outsvg << ", and the number of squences is " + toString(sharedBCVal); } + outsvg << "\n"; + + outsvg << "The number of species in group " + lookup[0]->getGroup() + " is " + toString(numA[0]); if (numA.size() == 3) { - outsvg << " the lci is " + toString(numA[1]) + " and the hci is " + toString(numA[2]) + "\n"; - }else { outsvg << "\n"; } + outsvg << " the lci is " + toString(numA[1]) + " and the hci is " + toString(numA[2]); + } + if (nseqs) { outsvg << ", and the number of squences is " + toString(numSeqsA); } + outsvg << "\n"; - outsvg << "The number of species in group " + lookup[1]->getGroup() + " is " + toString(numB[0]); + outsvg << "The number of species in group " + lookup[1]->getGroup() + " is " + toString(numB[0]); if (numB.size() == 3) { - outsvg << " the lci is " + toString(numB[1]) + " and the hci is " + toString(numB[2]) + "\n"; - }else { outsvg << "\n"; } - - outsvg << "The number of species in group " + lookup[2]->getGroup() + " is " + toString(numC[0]); + outsvg << " the lci is " + toString(numB[1]) + " and the hci is " + toString(numB[2]); + } + if (nseqs) { outsvg << ", and the number of squences is " + toString(numSeqsB); } + outsvg << "\n"; + + outsvg << "The number of species in group " + lookup[2]->getGroup() + " is " + toString(numC[0]); if (numC.size() == 3) { - outsvg << " the lci is " + toString(numC[1]) + " and the hci is " + toString(numC[2]) + "\n"; - }else { outsvg << "\n"; } - - outsvg << "The total richness of all the groups is " + toString(numA[0] + numB[0] + numC[0] - sharedab[0] - sharedac[0] - sharedbc[0] + sharedabc[0]) + "\n"; - outsvg << "The total shared richness is " + toString(sharedabc[0]) + "\n"; + outsvg << " the lci is " + toString(numC[1]) + " and the hci is " + toString(numC[2]); + } + if (nseqs) { outsvg << ", and the number of squences is " + toString(numSeqsC); } + outsvg << "\n"; + outsvg << "The total richness of all the groups is " + toString(numA[0] + numB[0] + numC[0] - sharedab[0] - sharedac[0] - sharedbc[0] + sharedabc[0]) + "\n"; + outsvg << "The total shared richness is " + toString(sharedabc[0]); + if (nseqs) { outsvg << ", and the number of squences is " + toString(sharedVal); } + outsvg << "\n"; } - //close file outsvg << "\n\n"; @@ -424,6 +600,11 @@ void Venn::getPic(vector lookup, vector vCalcs /******************* 4 Groups **************************/ }else if (lookup.size() == 4) { + + height = 1600; + + int windowSize = height; + //calc the shared otu float sharedABCD = 0; float numA = 0; float numB = 0; float numC = 0; float numD = 0; @@ -444,12 +625,14 @@ void Venn::getPic(vector lookup, vector vCalcs //make a file for each calculator for(int i=0;igetName() != "sharedsobs") && (vCalcs[i]->getName() != "sharedchao")) { mothurOut(vCalcs[i]->getName() + " is not a valid calculator with four groups. It will be disregarded. "); mothurOutEndLine(); } + if ((vCalcs[i]->getName() != "sharedsobs") && (vCalcs[i]->getName() != "sharedchao")) { m->mothurOut(vCalcs[i]->getName() + " is not a valid calculator with four groups. It will be disregarded. "); m->mothurOutEndLine(); } else{ - string filenamesvg = getRootName(globaldata->inputFileName) + lookup[0]->getLabel() + ".venn." + vCalcs[i]->getName() + ".svg"; - openOutputFile(filenamesvg, outsvg); + string filenamesvg = outputDir + m->getRootName(m->getSimpleName(inputfile)) + lookup[0]->getLabel() + "." + vCalcs[i]->getName() + "." + lookup[0]->getGroup() + "-" + lookup[1]->getGroup() + "-" + lookup[2]->getGroup() + "-" + lookup[3]->getGroup() + ".svg"; + outputNames.push_back(filenamesvg); + m->openOutputFile(filenamesvg, outsvg); - + if (m->control_pressed) { outsvg.close(); return outputNames; } + //in essence you want to run it like a single if (vCalcs[i]->getName() == "sharedsobs") { singleCalc = new Sobs(); @@ -474,89 +657,270 @@ void Venn::getPic(vector lookup, vector vCalcs data = singleCalc->getValues(sabundD); numD = data[0]; //cout << "num d = " << numD << endl; + + ofstream outShared; + if (sharedOtus && (vCalcs[i]->getName() == "sharedsobs")) { + string filenameShared = outputDir + m->getRootName(m->getSimpleName(inputfile)) + lookup[0]->getLabel() + "." + vCalcs[i]->getName() + ".sharedotus"; + + outputNames.push_back(filenameShared); + + m->openOutputFile(filenameShared, outShared); + outShared << "Groups\tNumShared\tOTULabels\n"; + } //get estimates for pairs subset.clear(); + vector labels; subset.push_back(lookup[0]); subset.push_back(lookup[1]); - data = vCalcs[i]->getValues(subset); + data = vCalcs[i]->getValues(subset, labels); sharedAB = data[0]; + if (sharedOtus && (vCalcs[i]->getName() == "sharedsobs") && (labels.size() != 0)) { + outShared << lookup[0]->getGroup() + "-" + lookup[1]->getGroup() << '\t'<< labels.size() << '\t'; + for (int k = 0; k < labels.size()-1; k++) { + outShared << labels[k] << ","; + } + if (labels.size() != 0) { outShared << labels[labels.size()-1]; } + outShared << endl; + } //cout << "num ab = " << sharedAB << endl; subset.clear(); subset.push_back(lookup[0]); subset.push_back(lookup[2]); - data = vCalcs[i]->getValues(subset); + data = vCalcs[i]->getValues(subset, labels); sharedAC = data[0]; + if (sharedOtus && (vCalcs[i]->getName() == "sharedsobs") && (labels.size() != 0)) { + outShared << lookup[0]->getGroup() + "-" + lookup[2]->getGroup() << '\t'<< labels.size() << '\t'; + for (int k = 0; k < labels.size()-1; k++) { + outShared << labels[k] << ","; + } + if (labels.size() != 0) { outShared << labels[labels.size()-1]; } + outShared << endl; + } //cout << "num ac = " << sharedAC << endl; subset.clear(); subset.push_back(lookup[0]); subset.push_back(lookup[3]); - data = vCalcs[i]->getValues(subset); + data = vCalcs[i]->getValues(subset, labels); sharedAD = data[0]; + if (sharedOtus && (vCalcs[i]->getName() == "sharedsobs") && (labels.size() != 0)) { + outShared << lookup[0]->getGroup() + "-" + lookup[3]->getGroup() << '\t'<< labels.size() << '\t'; + for (int k = 0; k < labels.size()-1; k++) { + outShared << labels[k] << ","; + } + if (labels.size() != 0) { outShared << labels[labels.size()-1]; } + outShared << endl; + } //cout << "num ad = " << sharedAD << endl; subset.clear(); subset.push_back(lookup[1]); subset.push_back(lookup[2]); - data = vCalcs[i]->getValues(subset); + data = vCalcs[i]->getValues(subset, labels); sharedBC = data[0]; + if (sharedOtus && (vCalcs[i]->getName() == "sharedsobs") && (labels.size() != 0)) { + outShared << lookup[1]->getGroup() + "-" + lookup[2]->getGroup() << '\t'<< labels.size() << '\t'; + for (int k = 0; k < labels.size()-1; k++) { + outShared << labels[k] << ","; + } + if (labels.size() != 0) { outShared << labels[labels.size()-1]; } + outShared << endl; + } //cout << "num bc = " << sharedBC << endl; subset.clear(); subset.push_back(lookup[1]); subset.push_back(lookup[3]); - data = vCalcs[i]->getValues(subset); + data = vCalcs[i]->getValues(subset, labels); sharedBD = data[0]; + if (sharedOtus && (vCalcs[i]->getName() == "sharedsobs") && (labels.size() != 0)) { + outShared << lookup[1]->getGroup() + "-" + lookup[3]->getGroup() << '\t'<< labels.size() << '\t'; + for (int k = 0; k < labels.size()-1; k++) { + outShared << labels[k] << ","; + } + if (labels.size() != 0) { outShared << labels[labels.size()-1]; } + outShared << endl; + } //cout << "num bd = " << sharedBD << endl; subset.clear(); subset.push_back(lookup[2]); subset.push_back(lookup[3]); - data = vCalcs[i]->getValues(subset); + data = vCalcs[i]->getValues(subset, labels); sharedCD = data[0]; + if (sharedOtus && (vCalcs[i]->getName() == "sharedsobs") && (labels.size() != 0)) { + outShared << lookup[2]->getGroup() + "-" + lookup[3]->getGroup() << '\t'<< labels.size() << '\t'; + for (int k = 0; k < labels.size()-1; k++) { + outShared << labels[k] << ","; + } + if (labels.size() != 0) { outShared << labels[labels.size()-1]; } + outShared << endl; + } //cout << "num cd = " << sharedCD << endl; //get estimates for combos of 3 subset.clear(); subset.push_back(lookup[0]); subset.push_back(lookup[1]); subset.push_back(lookup[2]); - data = vCalcs[i]->getValues(subset); + data = vCalcs[i]->getValues(subset, labels); sharedABC = data[0]; + if (sharedOtus && (vCalcs[i]->getName() == "sharedsobs") && (labels.size() != 0)) { + outShared << lookup[0]->getGroup() + "-" + lookup[1]->getGroup()+ "-" + lookup[2]->getGroup()<< '\t'<< labels.size() << '\t'; + for (int k = 0; k < labels.size()-1; k++) { + outShared << labels[k] << ","; + } + if (labels.size() != 0) { outShared << labels[labels.size()-1]; } + outShared << endl; + } //cout << "num abc = " << sharedABC << endl; subset.clear(); subset.push_back(lookup[0]); subset.push_back(lookup[2]); subset.push_back(lookup[3]); - data = vCalcs[i]->getValues(subset); + data = vCalcs[i]->getValues(subset, labels); sharedACD = data[0]; + if (sharedOtus && (vCalcs[i]->getName() == "sharedsobs") && (labels.size() != 0)) { + outShared << lookup[0]->getGroup() + "-" + lookup[2]->getGroup()+ "-" + lookup[3]->getGroup()<< '\t'<< labels.size() << '\t'; + for (int k = 0; k < labels.size()-1; k++) { + outShared << labels[k] << ","; + } + if (labels.size() != 0) { outShared << labels[labels.size()-1]; } + outShared << endl; + } //cout << "num acd = " << sharedACD << endl; subset.clear(); subset.push_back(lookup[1]); subset.push_back(lookup[2]); subset.push_back(lookup[3]); - data = vCalcs[i]->getValues(subset); + data = vCalcs[i]->getValues(subset,labels); sharedBCD = data[0]; + if (sharedOtus && (vCalcs[i]->getName() == "sharedsobs") && (labels.size() != 0)) { + outShared << lookup[1]->getGroup() + "-" + lookup[2]->getGroup()+ "-" + lookup[3]->getGroup()<< '\t'<< labels.size() << '\t'; + for (int k = 0; k < labels.size()-1; k++) { + outShared << labels[k] << ","; + } + outShared << labels[labels.size()-1]; + outShared << endl; + } //cout << "num bcd = " << sharedBCD << endl; subset.clear(); subset.push_back(lookup[0]); subset.push_back(lookup[1]); subset.push_back(lookup[3]); - data = vCalcs[i]->getValues(subset); + data = vCalcs[i]->getValues(subset, labels); sharedABD = data[0]; + if (sharedOtus && (vCalcs[i]->getName() == "sharedsobs") && (labels.size() != 0)) { + outShared << lookup[0]->getGroup() + "-" + lookup[1]->getGroup()+ "-" + lookup[3]->getGroup()<< '\t'<< labels.size() << '\t'; + for (int k = 0; k < labels.size()-1; k++) { + outShared << labels[k] << ","; + } + outShared << labels[labels.size()-1]; + outShared << endl; + } //cout << "num abd = " << sharedABD << endl; //get estimate for all four - data = vCalcs[i]->getValues(lookup); + data = vCalcs[i]->getValues(lookup, labels); sharedABCD = data[0]; + if (sharedOtus && (vCalcs[i]->getName() == "sharedsobs") && (labels.size() != 0)) { + outShared << lookup[0]->getGroup() + "-" + lookup[1]->getGroup() + "-" + lookup[2]->getGroup()+ "-" + lookup[3]->getGroup()<< '\t'<< labels.size() << '\t'; + for (int k = 0; k < labels.size()-1; k++) { + outShared << labels[k] << ","; + } + if (labels.size() != 0) { outShared << labels[labels.size()-1]; } + outShared << endl; + outShared.close(); + } //cout << "num abcd = " << sharedABCD << endl << endl; - - + int sharedVal, sharedABCVal, sharedABDVal, sharedACDVal, sharedBCDVal, sharedABVal, sharedACVal, sharedADVal, sharedBCVal, sharedBDVal, sharedCDVal, numSeqsA, numSeqsB, numSeqsC, numSeqsD; + + if (nseqs) { + NSeqs* nseqsCalc = new NSeqs(); + vector sharedData = nseqsCalc->getValues(lookup); + + vector mysubset; mysubset.push_back(lookup[0]); mysubset.push_back(lookup[1]); + vector sharedAB = nseqsCalc->getValues(mysubset); + + mysubset.clear(); mysubset.push_back(lookup[0]); mysubset.push_back(lookup[2]); + vector sharedAC = nseqsCalc->getValues(mysubset); + + mysubset.clear(); mysubset.push_back(lookup[0]); mysubset.push_back(lookup[3]); + vector sharedAD = nseqsCalc->getValues(mysubset); + + mysubset.clear(); mysubset.push_back(lookup[1]); mysubset.push_back(lookup[2]); + vector sharedBC = nseqsCalc->getValues(mysubset); + + mysubset.clear(); mysubset.push_back(lookup[1]); mysubset.push_back(lookup[3]); + vector sharedBD = nseqsCalc->getValues(mysubset); + + mysubset.clear(); mysubset.push_back(lookup[2]); mysubset.push_back(lookup[3]); + vector sharedCD = nseqsCalc->getValues(mysubset); + + mysubset.clear(); mysubset.push_back(lookup[0]); mysubset.push_back(lookup[1]); mysubset.push_back(lookup[2]); + vector sharedABC = nseqsCalc->getValues(mysubset); + + mysubset.clear(); mysubset.push_back(lookup[0]); mysubset.push_back(lookup[1]); mysubset.push_back(lookup[3]); + vector sharedABD = nseqsCalc->getValues(mysubset); + + mysubset.clear(); mysubset.push_back(lookup[0]); mysubset.push_back(lookup[2]); mysubset.push_back(lookup[3]); + vector sharedACD = nseqsCalc->getValues(mysubset); + + mysubset.clear(); mysubset.push_back(lookup[1]); mysubset.push_back(lookup[2]); mysubset.push_back(lookup[3]); + vector sharedBCD = nseqsCalc->getValues(mysubset); + + sharedVal = sharedData[0] + sharedData[1] + sharedData[2] + sharedData[3]; + sharedABCVal = sharedABC[0] + sharedABC[1] + sharedABC[2]; + sharedABDVal = sharedABD[0] + sharedABD[1] + sharedABD[2]; + sharedACDVal = sharedACD[0] + sharedACD[1] + sharedACD[2]; + sharedBCDVal = sharedBCD[0] + sharedBCD[1] + sharedBCD[2]; + sharedABVal = sharedAB[0] + sharedAB[1]; + sharedACVal = sharedAC[0] + sharedAC[1]; + sharedADVal = sharedAD[0] + sharedAD[1]; + sharedBCVal = sharedBC[0] + sharedBC[1]; + sharedBDVal = sharedBD[0] + sharedBD[1]; + sharedCDVal = sharedCD[0] + sharedCD[1]; + numSeqsA = sabundA->getNumSeqs(); + numSeqsB = sabundB->getNumSeqs(); + numSeqsC = sabundC->getNumSeqs(); + numSeqsD = sabundD->getNumSeqs(); + + delete nseqsCalc; + } + //image window - outsvg << "\n"; + outsvg << "\n"; outsvg << "\n"; - outsvg << ""; - outsvg << "Venn Diagram at distance " + lookup[0]->getLabel() + "\n"; + outsvg << ""; + outsvg << "Venn Diagram at distance " + lookup[0]->getLabel() + "\n"; - outsvg << "The number of species in group " + lookup[0]->getGroup() + " is " + toString(numA) + "\n"; - outsvg << "The number of species in group " + lookup[1]->getGroup() + " is " + toString(numB) + "\n"; - outsvg << "The number of species in group " + lookup[2]->getGroup() + " is " + toString(numC) + "\n"; - outsvg << "The number of species in group " + lookup[3]->getGroup() + " is " + toString(numD) + "\n"; + outsvg << "The number of species in group " + lookup[0]->getGroup() + " is " + toString(numA); + if (nseqs) { outsvg << ", and the number of squences is " + toString(numSeqsA); } + outsvg << "\n"; + outsvg << "The number of species in group " + lookup[1]->getGroup() + " is " + toString(numB); + if (nseqs) { outsvg << ", and the number of squences is " + toString(numSeqsB); } + outsvg << "\n"; + outsvg << "The number of species in group " + lookup[2]->getGroup() + " is " + toString(numC); + if (nseqs) { outsvg << ", and the number of squences is " + toString(numSeqsC); } + outsvg << "\n"; + outsvg << "The number of species in group " + lookup[3]->getGroup() + " is " + toString(numD); + if (nseqs) { outsvg << ", and the number of squences is " + toString(numSeqsD); } + outsvg << "\n"; - outsvg << "The number of species shared between groups " + lookup[0]->getGroup() + " and " + lookup[1]->getGroup() + " is " + toString(sharedAB) + "\n"; - outsvg << "The number of species shared between groups " + lookup[0]->getGroup() + " and " + lookup[2]->getGroup() + " is " + toString(sharedAC) + "\n"; - outsvg << "The number of species shared between groups " + lookup[0]->getGroup() + " and " + lookup[3]->getGroup() + " is " + toString(sharedAD) + "\n"; - outsvg << "The number of species shared between groups " + lookup[1]->getGroup() + " and " + lookup[2]->getGroup() + " is " + toString(sharedBC) + "\n"; - outsvg << "The number of species shared between groups " + lookup[1]->getGroup() + " and " + lookup[3]->getGroup() + " is " + toString(sharedBD) + "\n"; - outsvg << "The number of species shared between groups " + lookup[2]->getGroup() + " and " + lookup[3]->getGroup() + " is " + toString(sharedCD) + "\n"; + outsvg << "The number of species shared between groups " + lookup[0]->getGroup() + " and " + lookup[1]->getGroup() + " is " + toString(sharedAB); + if (nseqs) { outsvg << ", and the number of squences is " + toString(sharedABVal); } + outsvg << "\n"; + outsvg << "The number of species shared between groups " + lookup[0]->getGroup() + " and " + lookup[2]->getGroup() + " is " + toString(sharedAC); + if (nseqs) { outsvg << ", and the number of squences is " + toString(sharedACVal); } + outsvg << "\n"; + outsvg << "The number of species shared between groups " + lookup[0]->getGroup() + " and " + lookup[3]->getGroup() + " is " + toString(sharedAD); + if (nseqs) { outsvg << ", and the number of squences is " + toString(sharedADVal); } + outsvg << "\n"; + outsvg << "The number of species shared between groups " + lookup[1]->getGroup() + " and " + lookup[2]->getGroup() + " is " + toString(sharedBC); + if (nseqs) { outsvg << ", and the number of squences is " + toString(sharedBCVal); } + outsvg << "\n"; + outsvg << "The number of species shared between groups " + lookup[1]->getGroup() + " and " + lookup[3]->getGroup() + " is " + toString(sharedBD); + if (nseqs) { outsvg << ", and the number of squences is " + toString(sharedBDVal); } + outsvg << "\n"; + outsvg << "The number of species shared between groups " + lookup[2]->getGroup() + " and " + lookup[3]->getGroup() + " is " + toString(sharedCD); + if (nseqs) { outsvg << ", and the number of squences is " + toString(sharedCDVal); } + outsvg << "\n"; - outsvg << "The number of species shared between groups " + lookup[0]->getGroup() + ", " + lookup[1]->getGroup() + " and " + lookup[2]->getGroup() + " is " + toString(sharedABC) + "\n"; - outsvg << "The number of species shared between groups " + lookup[0]->getGroup() + ", " + lookup[1]->getGroup() + " and " + lookup[3]->getGroup() + " is " + toString(sharedABD) + "\n"; - outsvg << "The number of species shared between groups " + lookup[0]->getGroup() + ", " + lookup[2]->getGroup() + " and " + lookup[3]->getGroup() + " is " + toString(sharedACD) + "\n"; - outsvg << "The number of species shared between groups " + lookup[1]->getGroup() + ", " + lookup[2]->getGroup() + " and " + lookup[3]->getGroup() + " is " + toString(sharedBCD) + "\n"; + outsvg << "The number of species shared between groups " + lookup[0]->getGroup() + ", " + lookup[1]->getGroup() + " and " + lookup[2]->getGroup() + " is " + toString(sharedABC); + if (nseqs) { outsvg << ", and the number of squences is " + toString(sharedABCVal); } + outsvg << "\n"; + outsvg << "The number of species shared between groups " + lookup[0]->getGroup() + ", " + lookup[1]->getGroup() + " and " + lookup[3]->getGroup() + " is " + toString(sharedABD); + if (nseqs) { outsvg << ", and the number of squences is " + toString(sharedABDVal); } + outsvg << "\n"; + outsvg << "The number of species shared between groups " + lookup[0]->getGroup() + ", " + lookup[2]->getGroup() + " and " + lookup[3]->getGroup() + " is " + toString(sharedACD); + if (nseqs) { outsvg << ", and the number of squences is " + toString(sharedACDVal); } + outsvg << "\n"; + outsvg << "The number of species shared between groups " + lookup[1]->getGroup() + ", " + lookup[2]->getGroup() + " and " + lookup[3]->getGroup() + " is " + toString(sharedBCD); + if (nseqs) { outsvg << ", and the number of squences is " + toString(sharedBCDVal); } + outsvg << "\n"; //make adjustments sharedABC = sharedABC - sharedABCD; @@ -585,39 +949,38 @@ void Venn::getPic(vector lookup, vector vCalcs //cout << "num d = " << numD << endl; //draw circles - outsvg << "\n "; - outsvg << "\n "; - outsvg << "\n "; - outsvg << "\n "; + outsvg << "\n "; + outsvg << "\n "; + outsvg << "\n "; + outsvg << "\n "; //A = red, B = green, C = blue, D = yellow //place labels within overlaps - outsvg << "" + toString(numA) + "\n"; - outsvg << "getGroup().length() / 2)) + "\" y=\"90\">" + lookup[0]->getGroup() + "\n"; - outsvg << "" + toString(sharedAB) + "\n"; - outsvg << "" + toString(numB) + "\n"; - outsvg << "getGroup().length() / 2)) + "\" y=\"90\">" + lookup[1]->getGroup() + "\n"; - outsvg << "" + toString(sharedAC) + "\n"; - outsvg << "" + toString(numC) + "\n"; - outsvg << "getGroup().length() / 2)) + "\" y=\"210\">" + lookup[2]->getGroup() + "\n"; - outsvg << "" + toString(sharedBD) + "\n"; - outsvg << "" + toString(numD) + "\n"; - outsvg << "getGroup().length() / 2)) + "\" y=\"210\">" + lookup[3]->getGroup() + "\n"; - outsvg << "" + toString(sharedAD) + "\n"; - outsvg << "" + toString(sharedBC) + "\n"; - outsvg << "" + toString(sharedCD) + "\n"; - outsvg << "" + toString(sharedABD) + "\n"; - outsvg << "" + toString(sharedBCD) + "\n"; - outsvg << "" + toString(sharedACD) + "\n"; - outsvg << "" + toString(sharedABC) + "\n"; - outsvg << "" + toString(sharedABCD) + "\n"; - + outsvg << "" + toString(numA) + "\n"; + outsvg << "getGroup().length() / 2)) + "\" y=\"" + toString(int(0.11 * height)) + "\">" + lookup[0]->getGroup() + "\n"; + outsvg << "" + toString(sharedAB) + "\n"; + outsvg << "" + toString(numB) + "\n"; + outsvg << "getGroup().length() / 2)) + "\" y=\"" + toString(int(0.11 * height)) + "\">" + lookup[1]->getGroup() + "\n"; + outsvg << "" + toString(sharedAC) + "\n"; + outsvg << "" + toString(numC) + "\n"; + outsvg << "getGroup().length() / 2)) + "\" y=\"" + toString(int(0.26 * height)) + "\">" + lookup[2]->getGroup() + "\n"; + outsvg << "" + toString(sharedBD) + "\n"; + outsvg << "" + toString(numD) + "\n"; + outsvg << "getGroup().length() / 2)) + "\" y=\"" + toString(int(0.26 * height)) + "\">" + lookup[3]->getGroup() + "\n"; + outsvg << "" + toString(sharedAD) + "\n"; + outsvg << "" + toString(sharedBC) + "\n"; + outsvg << "" + toString(sharedCD) + "\n"; + outsvg << "" + toString(sharedABD) + "\n"; + outsvg << "" + toString(sharedBCD) + "\n"; + outsvg << "" + toString(sharedACD) + "\n"; + outsvg << "" + toString(sharedABC) + "\n"; + outsvg << "" + toString(sharedABCD) + "\n"; - - outsvg << "The total richness of all the groups is " + toString((float)(numA + numB + numC + numD + sharedAB + sharedAC + sharedAD + sharedBC + sharedBD + sharedCD + sharedABC + sharedABD + sharedACD + sharedBCD + sharedABCD)) + "\n"; + outsvg << "The total richness of all the groups is " + toString((float)(numA + numB + numC + numD + sharedAB + sharedAC + sharedAD + sharedBC + sharedBD + sharedCD + sharedABC + sharedABD + sharedACD + sharedBCD + sharedABCD)); + if (nseqs) { outsvg << ", and the number of squences in the otus shared by all groups is " + toString(sharedVal); } + outsvg << "\n"; - outsvg << "\n\n"; outsvg.close(); delete singleCalc; @@ -625,9 +988,11 @@ void Venn::getPic(vector lookup, vector vCalcs } } + return outputNames; + } catch(exception& e) { - errorOut(e, "Venn", "getPic"); + m->errorOut(e, "Venn", "getPic"); exit(1); } }