X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=venn.cpp;fp=venn.cpp;h=0000000000000000000000000000000000000000;hb=4a877efa127e56e81a21f53cfdbbfd3bfbe8c4ff;hp=32ebb3c9c8b4f96b0ad556450e9505f08dc2546d;hpb=a6cf29fa4dac0909c7582cb1094151d34093ee76;p=mothur.git diff --git a/venn.cpp b/venn.cpp deleted file mode 100644 index 32ebb3c..0000000 --- a/venn.cpp +++ /dev/null @@ -1,842 +0,0 @@ -/* - * venn.cpp - * Mothur - * - * Created by Sarah Westcott on 3/30/09. - * Copyright 2009 Schloss Lab UMASS Amherst. All rights reserved. - * - */ - -#include "venn.h" -#include "ace.h" -#include "sobs.h" -#include "chao1.h" -#include "nseqs.h" -#include "sharedchao1.h" -#include "sharedsobscollectsummary.h" - - -//********************************************************************************************************************** -Venn::Venn(string o, bool n, string f, int fs) : outputDir(o), nseqs(n), inputfile(f), fontSize(fs) { - try { - m = MothurOut::getInstance(); - } - catch(exception& e) { - m->errorOut(e, "Venn", "Venn"); - exit(1); - } -} -//********************************************************************************************************************** -vector Venn::getPic(SAbundVector* sabund, vector vCalcs) { - try { - - vector outputNames; - - for(int i=0;igetRootName(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 << ""; - 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"; - } - - if (nseqs) { - outsvg << "The number of sequences represented is " + toString(sabund->getNumSeqs()) + "\n"; - } - - outsvg << "\n\n"; - outsvg.close(); - } - - return outputNames; - } - catch(exception& e) { - m->errorOut(e, "Venn", "getPic"); - exit(1); - } -} -//********************************************************************************************************************** -vector Venn::getPic(vector lookup, vector vCalcs) { - try { - - vector subset; - vector outputNames; - - int width = 1500; - int height = 1500; - - /******************* 1 Group **************************/ - if (lookup.size() == 1) { - - SAbundVector s; - s = lookup[0]->getSAbundVector(); SAbundVector* sabund = &s; - - //make a file for each calculator - for(int i=0;igetRootName(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(); - }else if (vCalcs[i]->getName() == "sharedchao") { - singleCalc = new Chao1(); - }else if (vCalcs[i]->getName() == "sharedace") { - singleCalc = new Ace(10); - } - - vector data = singleCalc->getValues(sabund); - - //svg image - outsvg << "\n"; - outsvg << "\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"; - } - - if (nseqs) { - outsvg << "The number of sequences represented is " + toString(sabund->getNumSeqs()) + "\n"; - } - - outsvg << "\n\n"; - outsvg.close(); - delete singleCalc; - - } - /******************* 2 Groups **************************/ - - }else if (lookup.size() == 2) { - //get sabund vector pointers so you can use the single calculators - //one for each group - SAbundVector sA, sB; - SAbundVector* sabundA; SAbundVector* sabundB; - sabundA = new SAbundVector(lookup[0]->getSAbundVector());// sabundA = &sA; - sabundB = new SAbundVector(lookup[1]->getSAbundVector());// sabundB = &sB; - - subset.clear(); - subset.push_back(lookup[0]); subset.push_back(lookup[1]); - - //make a file for each calculator - for(int i=0;igetRootName(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); - - //in essence you want to run it like a single - if (vCalcs[i]->getName() == "sharedsobs") { - singleCalc = new Sobs(); - }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); - - //get estimates for numB - vector numB = singleCalc->getValues(sabundB); - - //image window - 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=\"" + 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]); - } - 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]); - if (numB.size() == 3) { - 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]); - 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"; - outsvg.close(); - delete singleCalc; - } - /******************* 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; - SAbundVector* sabundA; SAbundVector* sabundB; SAbundVector* sabundC; - sA = lookup[0]->getSAbundVector(); sabundA = &sA; - sB = lookup[1]->getSAbundVector(); sabundB = &sB; - sC = lookup[2]->getSAbundVector(); sabundC = &sC; - - //make a file for each calculator - for(int i=0;igetRootName(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") { - - singleCalc = new Ace(10); - - //get estimates for numA - vector numA = singleCalc->getValues(sabundA); - - //get estimates for numB - vector numB = singleCalc->getValues(sabundB); - - //get estimates for numC - vector numC = singleCalc->getValues(sabundC); - - - //get estimates for sharedAB, sharedAC and sharedBC - subset.clear(); - subset.push_back(lookup[0]); subset.push_back(lookup[1]); - vector sharedAB = vCalcs[i]->getValues(subset); - - subset.clear(); - subset.push_back(lookup[0]); subset.push_back(lookup[2]); - vector sharedAC = vCalcs[i]->getValues(subset); - - subset.clear(); - subset.push_back(lookup[1]); subset.push_back(lookup[2]); - vector sharedBC = vCalcs[i]->getValues(subset); - - vector sharedAwithBC; - vector sharedBwithAC; - vector sharedCwithAB; - - //find possible sharedABC values - float sharedABC1 = 0.0; float sharedABC2 = 0.0; float sharedABC3 = 0.0; float sharedABC = 0.0; - - if (vCalcs[i]->getMultiple() == false) { - //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)), ""); - } - - subset.clear(); - subset.push_back(lookup[0]); subset.push_back(merge); - sharedAwithBC = vCalcs[i]->getValues(subset); - - delete merge; - //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)), ""); - } - - subset.clear(); - subset.push_back(merge); subset.push_back(lookup[1]); - sharedBwithAC = vCalcs[i]->getValues(subset); - - delete merge; - //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)), ""); - } - - subset.clear(); - subset.push_back(lookup[2]); subset.push_back(merge); - sharedCwithAB = vCalcs[i]->getValues(subset); - delete merge; - - sharedABC1 = sharedAB[0] + sharedAC[0] - sharedAwithBC[0]; - sharedABC2 = sharedAB[0] + sharedBC[0] - sharedBwithAC[0]; - sharedABC3 = sharedAC[0] + sharedBC[0] - sharedCwithAB[0]; - - //if any of the possible m's are - throw them out - if (sharedABC1 < 0.00001) { sharedABC1 = 0; } - if (sharedABC2 < 0.00001) { sharedABC2 = 0; } - if (sharedABC3 < 0.00001) { sharedABC3 = 0; } - - //sharedABC is the minimum of the 3 possibilities - if ((sharedABC1 < sharedABC2) && (sharedABC1 < sharedABC3)) { sharedABC = sharedABC1; } - else if ((sharedABC2 < sharedABC1) && (sharedABC2 < sharedABC3)) { sharedABC = sharedABC2; } - else if ((sharedABC3 < sharedABC1) && (sharedABC3 < sharedABC2)) { sharedABC = sharedABC3; } - }else{ - vector data = vCalcs[i]->getValues(lookup); - sharedABC = data[0]; - sharedAwithBC.push_back(sharedAB[0] + sharedAC[0] - sharedABC); - sharedBwithAC.push_back(sharedAB[0] + sharedBC[0] - sharedABC); - sharedCwithAB.push_back(sharedAC[0] + sharedBC[0] - sharedABC); - } - - //image window - outsvg << "\n"; - outsvg << "\n"; - - //draw circles - 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=\"" + 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]); - 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]); - } - 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]); - if (numB.size() == 3) { - 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]); - if (numC.size() == 3) { - 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); - if (nseqs) { outsvg << ", and the number of squences is " + toString(sharedVal); } - outsvg << "\n"; - - delete singleCalc; - - }else { //sharedchao and sharedsobs are multigroup - - vector subset; - - //get estimates for numA - subset.push_back(lookup[0]); - vector numA = vCalcs[i]->getValues(subset); - - //get estimates for numB - subset.clear(); - subset.push_back(lookup[1]); - vector numB = vCalcs[i]->getValues(subset); - - //get estimates for numC - subset.clear(); - subset.push_back(lookup[2]); - vector numC = vCalcs[i]->getValues(subset); - - subset.clear(); - subset.push_back(lookup[0]); subset.push_back(lookup[1]); - vector sharedab = vCalcs[i]->getValues(subset); - - subset.clear(); - subset.push_back(lookup[0]); subset.push_back(lookup[2]); - vector sharedac = vCalcs[i]->getValues(subset); - - subset.clear(); - subset.push_back(lookup[1]); subset.push_back(lookup[2]); - vector sharedbc = vCalcs[i]->getValues(subset); - - subset.clear(); - subset.push_back(lookup[0]); subset.push_back(lookup[1]); subset.push_back(lookup[2]); - vector sharedabc = vCalcs[i]->getValues(subset); - - //image window - outsvg << "\n"; - outsvg << "\n"; - - //draw circles - 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=\"" + 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]); - 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]); - } - 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]); - if (numB.size() == 3) { - 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]); - } - 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"; - outsvg.close(); - - - } - - /******************* 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; - float sharedAB = 0; float sharedAC = 0; float sharedBC = 0; float sharedAD = 0; float sharedBD = 0; float sharedCD = 0; - float sharedABC = 0; float sharedACD = 0; float sharedBCD = 0; float sharedABD = 0; - vector data; - //get sabund vector pointers so you can use the single calculators - //one for each group - SAbundVector sA, sB, sC, sD; - SAbundVector* sabundA; SAbundVector* sabundB; SAbundVector* sabundC; SAbundVector* sabundD; - sA = lookup[0]->getSAbundVector(); sabundA = &sA; - sB = lookup[1]->getSAbundVector(); sabundB = &sB; - sC = lookup[2]->getSAbundVector(); sabundC = &sC; - sD = lookup[3]->getSAbundVector(); sabundD = &sD; - - //A = red, B = green, C = blue, D = yellow - - //make a file for each calculator - for(int i=0;igetName() != "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 = 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(); - }else if (vCalcs[i]->getName() == "sharedchao") { - singleCalc = new Chao1(); - } - - //get estimates for numA - data = singleCalc->getValues(sabundA); - numA = data[0]; - //cout << "num a = " << numA << endl; - - //get estimates for numB - data = singleCalc->getValues(sabundB); - numB = data[0]; - //cout << "num b = " << numB << endl; - //get estimates for numC - data = singleCalc->getValues(sabundC); - numC = data[0]; - //cout << "num c = " << numC << endl; - //get estimates for numD - data = singleCalc->getValues(sabundD); - numD = data[0]; -//cout << "num d = " << numD << endl; - - //get estimates for pairs - subset.clear(); - subset.push_back(lookup[0]); subset.push_back(lookup[1]); - data = vCalcs[i]->getValues(subset); - sharedAB = data[0]; - //cout << "num ab = " << sharedAB << endl; - subset.clear(); - subset.push_back(lookup[0]); subset.push_back(lookup[2]); - data = vCalcs[i]->getValues(subset); - sharedAC = data[0]; - //cout << "num ac = " << sharedAC << endl; - subset.clear(); - subset.push_back(lookup[0]); subset.push_back(lookup[3]); - data = vCalcs[i]->getValues(subset); - sharedAD = data[0]; - //cout << "num ad = " << sharedAD << endl; - subset.clear(); - subset.push_back(lookup[1]); subset.push_back(lookup[2]); - data = vCalcs[i]->getValues(subset); - sharedBC = data[0]; - //cout << "num bc = " << sharedBC << endl; - subset.clear(); - subset.push_back(lookup[1]); subset.push_back(lookup[3]); - data = vCalcs[i]->getValues(subset); - sharedBD = data[0]; - //cout << "num bd = " << sharedBD << endl; - subset.clear(); - subset.push_back(lookup[2]); subset.push_back(lookup[3]); - data = vCalcs[i]->getValues(subset); - sharedCD = data[0]; - - //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); - sharedABC = data[0]; - //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); - sharedACD = data[0]; - //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); - sharedBCD = data[0]; - //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); - sharedABD = data[0]; -//cout << "num abd = " << sharedABD << endl; - //get estimate for all four - data = vCalcs[i]->getValues(lookup); - sharedABCD = data[0]; - //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 << ""; - outsvg << "Venn Diagram at distance " + lookup[0]->getLabel() + "\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); - 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); - 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; - //cout << "num abc = " << sharedABC << endl; - sharedABD = sharedABD - sharedABCD; - //cout << "num abd = " << sharedABD << endl; - sharedACD = sharedACD - sharedABCD; - //cout << "num acd = " << sharedACD << endl; - sharedBCD = sharedBCD - sharedABCD; - //cout << "num bcd = " << sharedBCD << endl; - - sharedAB = sharedAB - sharedABC - sharedABCD - sharedABD; //cout << "num ab = " << sharedAB << endl; - sharedAC = sharedAC - sharedABC - sharedABCD - sharedACD; //cout << "num ac = " << sharedAC << endl; - sharedAD = sharedAD - sharedABD - sharedABCD - sharedACD; //cout << "num ad = " << sharedAD << endl; - sharedBC = sharedBC - sharedABC - sharedABCD - sharedBCD; //cout << "num bc = " << sharedBC << endl; - sharedBD = sharedBD - sharedABD - sharedABCD - sharedBCD; // cout << "num bd = " << sharedBD << endl; - sharedCD = sharedCD - sharedACD - sharedABCD - sharedBCD; //cout << "num cd = " << sharedCD << endl; - - numA = numA - sharedAB - sharedAC - sharedAD - sharedABCD - sharedABC - sharedACD - sharedABD; - //cout << "num a = " << numA << endl; - numB = numB - sharedAB - sharedBC - sharedBD - sharedABCD - sharedABC - sharedABD - sharedBCD; - //cout << "num b = " << numB << endl; - numC = numC - sharedAC - sharedBC - sharedCD - sharedABCD - sharedABC - sharedACD - sharedBCD; - //cout << "num c = " << numC << endl; - numD = numD - sharedAD - sharedBD - sharedCD - sharedABCD - sharedBCD - sharedACD - sharedABD; - //cout << "num d = " << numD << endl; - - //draw circles - 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=\"" + 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)); - 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; - } - } - } - - return outputNames; - - } - catch(exception& e) { - m->errorOut(e, "Venn", "getPic"); - exit(1); - } -} - -