try {
globaldata = GlobalData::getInstance();
format = globaldata->getFormat();
- util = new SharedUtil();
}
catch(exception& e) {
cout << "Standard Error: " << e.what() << " has occurred in the Venn class Function Venn. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
}
}
//**********************************************************************************************************************
-void Venn::getPic(OrderVector* order, vector<Calculator*> vCalcs) {
+void Venn::getPic(SAbundVector* sabund, vector<Calculator*> vCalcs) {
try {
- SAbundVector s;
- s = order->getSAbundVector(); sabund = &s;
-
+
for(int i=0;i<vCalcs.size();i++){
- string filenamesvg = globaldata->inputFileName + ".venn." + order->getLabel() + vCalcs[i]->getName() + ".svg";
+ string filenamesvg = globaldata->inputFileName + ".venn." + sabund->getLabel() + vCalcs[i]->getName() + ".svg";
openOutputFile(filenamesvg, outsvg);
vector<double> data = vCalcs[i]->getValues(sabund);
outsvg << "<g>\n";
outsvg << "<rect fill=\"white\" stroke=\"white\" x=\"0\" y=\"0\" width=\"700\" height=\"700\"/>";
- outsvg << "<text fill=\"black\" class=\"seri\" x=\"265\" y=\"30\">Venn Diagram at distance " + order->getLabel() + "</text>\n";
+ outsvg << "<text fill=\"black\" class=\"seri\" x=\"265\" y=\"30\">Venn Diagram at distance " + sabund->getLabel() + "</text>\n";
outsvg << "<circle fill=\"red\" opacity=\".5\" stroke=\"black\" cx=\"350\" cy=\"200\" r=\"150\"/>";
outsvg << "<text fill=\"black\" class=\"seri\" x=\"" + toString(343 - ((int)toString(data[0]).length() / 2)) + "\" y=\"195\">" + toString(data[0]) + "</text>\n";
}
}
//**********************************************************************************************************************
-void Venn::getPic(SharedOrderVector* sharedorder, vector<Calculator*> vCalcs) {
+void Venn::getPic(vector<SharedRAbundVector*> lookup, vector<Calculator*> vCalcs) {
try {
- //fills vector of sharedsabunds - lookup
- util->getSharedVectors(globaldata->Groups, lookup, sharedorder); //fills group vectors from order vector.
+ vector<SharedRAbundVector*> subset;
/******************* 1 Group **************************/
if (lookup.size() == 1) {
SAbundVector s;
- s = lookup[0]->getSAbundVector(); sabund = &s;
+ s = lookup[0]->getSAbundVector(); SAbundVector* sabund = &s;
//make a file for each calculator
for(int i=0;i<vCalcs.size();i++){
- string filenamesvg = getRootName(globaldata->inputFileName) + sharedorder->getLabel() + ".venn." + vCalcs[i]->getName() + ".svg";
+ string filenamesvg = getRootName(globaldata->inputFileName) + lookup[0]->getLabel() + ".venn." + vCalcs[i]->getName() + ".svg";
openOutputFile(filenamesvg, outsvg);
//in essence you want to run it like a single
- if (vCalcs[i]->getName() == "SharedSobs") {
- delete vCalcs[i];
- vCalcs[i] = new Sobs();
- }else if (vCalcs[i]->getName() == "SharedChao") {
- delete vCalcs[i];
- vCalcs[i] = new Chao1();
- }else if (vCalcs[i]->getName() == "SharedAce") {
- delete vCalcs[i];
- vCalcs[i] = new Ace(10);
+ 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<double> data = vCalcs[i]->getValues(sabund);
+ vector<double> data = singleCalc->getValues(sabund);
//svg image
outsvg << "<svg width=\"100%\" height=\"100%\" viewBox=\"0 0 700 700\" >\n";
outsvg << "<g>\n";
outsvg << "<rect fill=\"white\" stroke=\"white\" x=\"0\" y=\"0\" width=\"700\" height=\"700\"/>";
- outsvg << "<text fill=\"black\" class=\"seri\" x=\"265\" y=\"30\">Venn Diagram at distance " + sharedorder->getLabel() + "</text>\n";
+ outsvg << "<text fill=\"black\" class=\"seri\" x=\"265\" y=\"30\">Venn Diagram at distance " + lookup[0]->getLabel() + "</text>\n";
outsvg << "<circle fill=\"red\" opacity=\".5\" stroke=\"black\" cx=\"350\" cy=\"200\" r=\"150\"/>";
outsvg << "<text fill=\"black\" class=\"seri\" x=\"" + toString(343 - ((int)lookup[0]->getGroup().length() / 2)) + "\" y=\"165\">" + lookup[0]->getGroup() + "</text>\n";
outsvg << "<text fill=\"black\" class=\"seri\" x=\"" + toString(343 - ((int)toString(data[0]).length() / 2)) + "\" y=\"195\">" + toString(data[0]) + "</text>\n";
outsvg << "</g>\n</svg>\n";
outsvg.close();
+ delete singleCalc;
+
}
/******************* 2 Groups **************************/
//one for each group
SAbundVector sA, sB;
SAbundVector* sabundA; SAbundVector* sabundB;
- sA = lookup[0]->getSAbundVector(); sabundA = &sA;
- sB = lookup[1]->getSAbundVector(); sabundB = &sB;
+ 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;i<vCalcs.size();i++){
- string filenamesvg = getRootName(globaldata->inputFileName) + sharedorder->getLabel() + ".venn." + vCalcs[i]->getName() + ".svg";
+ string filenamesvg = getRootName(globaldata->inputFileName) + lookup[0]->getLabel() + ".venn." + vCalcs[i]->getName() + ".svg";
openOutputFile(filenamesvg, outsvg);
//get estimates for sharedAB
- vector<double> shared = vCalcs[i]->getValues(lookup[0], lookup[1]);
+ vector<double> shared = vCalcs[i]->getValues(subset);
//in essence you want to run it like a single
- if (vCalcs[i]->getName() == "SharedSobs") {
- delete vCalcs[i];
- vCalcs[i] = new Sobs();
- }else if (vCalcs[i]->getName() == "SharedChao") {
- delete vCalcs[i];
- vCalcs[i] = new Chao1();
- }else if (vCalcs[i]->getName() == "SharedAce") {
- delete vCalcs[i];
- vCalcs[i] = new Ace(10);
+ 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);
}
//get estimates for numA
- vector<double> numA = vCalcs[i]->getValues(sabundA);
-
+ vector<double> numA = singleCalc->getValues(sabundA);
+
//get estimates for numB
- vector<double> numB = vCalcs[i]->getValues(sabundB);
-
+ vector<double> numB = singleCalc->getValues(sabundB);
//image window
outsvg << "<svg width=\"100%\" height=\"100%\" viewBox=\"0 0 700 700\" >\n";
//draw circles
outsvg << "<rect fill=\"white\" stroke=\"white\" x=\"0\" y=\"0\" width=\"700\" height=\"700\"/>";
- outsvg << "<text fill=\"black\" class=\"seri\" x=\"265\" y=\"30\">Venn Diagram at distance " + sharedorder->getLabel() + "</text>\n";
+ outsvg << "<text fill=\"black\" class=\"seri\" x=\"265\" y=\"30\">Venn Diagram at distance " + lookup[0]->getLabel() + "</text>\n";
outsvg << "<circle fill=\"rgb(255,0,0)\" opacity=\".3\" stroke=\"black\" cx=\"250\" cy=\"200\" r=\"150\"/>";
outsvg << "<circle fill=\"rgb(0,255,0)\" opacity=\".3\" stroke=\"black\" cx=\"435\" cy=\"200\" r=\"150\"/>";
outsvg << "<text fill=\"black\" class=\"seri\" x=\"" + toString(200 - ((int)toString(numA[0]).length() / 2)) + "\" y=\"195\">" + toString(numA[0] - shared[0]) + "</text>\n";
//close file
outsvg << "</g>\n</svg>\n";
outsvg.close();
-
+ delete sabundA;
+ delete sabundB;
+ delete singleCalc;
}
/******************* 3 Groups **************************/
//make a file for each calculator
for(int i=0;i<vCalcs.size();i++){
- string filenamesvg = getRootName(globaldata->inputFileName) + sharedorder->getLabel() + ".venn." + vCalcs[i]->getName() + ".svg";
+ string filenamesvg = getRootName(globaldata->inputFileName) + lookup[0]->getLabel() + ".venn." + vCalcs[i]->getName() + ".svg";
openOutputFile(filenamesvg, outsvg);
-
+
//get estimates for sharedAB, sharedAC and sharedBC
- vector<double> sharedAB = vCalcs[i]->getValues(lookup[0], lookup[1]);
- vector<double> sharedAC = vCalcs[i]->getValues(lookup[0], lookup[2]);
- vector<double> sharedBC = vCalcs[i]->getValues(lookup[1], lookup[2]);
+ subset.clear();
+ subset.push_back(lookup[0]); subset.push_back(lookup[1]);
+ vector<double> sharedAB = vCalcs[i]->getValues(subset);
+
+ subset.clear();
+ subset.push_back(lookup[0]); subset.push_back(lookup[2]);
+ vector<double> sharedAC = vCalcs[i]->getValues(subset);
+
+ subset.clear();
+ subset.push_back(lookup[1]); subset.push_back(lookup[2]);
+ vector<double> sharedBC = vCalcs[i]->getValues(subset);
//merge BC and estimate with shared with A
SharedRAbundVector* merge = new SharedRAbundVector();
merge->push_back((lookup[1]->getAbundance(j) + lookup[2]->getAbundance(j)), j, "");
}
- vector<double> sharedAwithBC = vCalcs[i]->getValues(lookup[0], merge);
+ subset.clear();
+ subset.push_back(lookup[0]); subset.push_back(merge);
+ vector<double> sharedAwithBC = vCalcs[i]->getValues(subset);
delete merge;
//merge AC and estimate with shared with B
for (int j = 0; j < lookup[0]->size(); j++) {
merge->push_back((lookup[0]->getAbundance(j) + lookup[2]->getAbundance(j)), j, "");
}
-
- vector<double> sharedBwithAC = vCalcs[i]->getValues(lookup[1], merge);
+
+ subset.clear();
+ subset.push_back(merge); subset.push_back(lookup[1]);
+ vector<double> sharedBwithAC = vCalcs[i]->getValues(subset);
delete merge;
//merge AB and estimate with shared with C
merge->push_back((lookup[0]->getAbundance(j) + lookup[1]->getAbundance(j)), j, "");
}
- vector<double> sharedCwithAB = vCalcs[i]->getValues(lookup[2], merge);
-
+ subset.clear();
+ subset.push_back(lookup[2]); subset.push_back(merge);
+ vector<double> sharedCwithAB = vCalcs[i]->getValues(subset);
+ delete merge;
//in essence you want to run it like a single
- if (vCalcs[i]->getName() == "SharedSobs") {
- delete vCalcs[i];
- vCalcs[i] = new Sobs();
- }else if (vCalcs[i]->getName() == "SharedChao") {
- delete vCalcs[i];
- vCalcs[i] = new Chao1();
- }else if (vCalcs[i]->getName() == "SharedAce") {
- delete vCalcs[i];
- vCalcs[i] = new Ace(10);
+ 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);
}
//get estimates for numA
- vector<double> numA = vCalcs[i]->getValues(sabundA);
+ vector<double> numA = singleCalc->getValues(sabundA);
//get estimates for numB
- vector<double> numB = vCalcs[i]->getValues(sabundB);
+ vector<double> numB = singleCalc->getValues(sabundB);
//get estimates for numC
- vector<double> numC = vCalcs[i]->getValues(sabundC);
+ vector<double> numC = singleCalc->getValues(sabundC);
//find possible sharedABC values
float sharedABC1, sharedABC2, sharedABC3, sharedABC;
//draw circles
outsvg << "<rect fill=\"white\" stroke=\"white\" x=\"0\" y=\"0\" width=\"800\" height=\"800\"/>";
- outsvg << "<text fill=\"black\" class=\"seri\" x=\"265\" y=\"30\">Venn Diagram at distance " + sharedorder->getLabel() + "</text>\n";
+ outsvg << "<text fill=\"black\" class=\"seri\" x=\"265\" y=\"30\">Venn Diagram at distance " + lookup[0]->getLabel() + "</text>\n";
outsvg << "<circle fill=\"rgb(255,0,0)\" opacity=\".3\" stroke=\"black\" cx=\"230\" cy=\"200\" r=\"150\"/>";
outsvg << "<circle fill=\"rgb(0,255,0)\" opacity=\".3\" stroke=\"black\" cx=\"455\" cy=\"200\" r=\"150\"/>";
outsvg << "<circle fill=\"rgb(0,0,255)\" opacity=\".3\" stroke=\"black\" cx=\"343\" cy=\"400\" r=\"150\"/>";
-
+//cout << "numA = " << numA[0] << " numB = " << numB[0] << " numC = " << numC[0] << endl;
+//cout << "sharedAB = " << sharedAB[0] << " sharedAC = " << sharedAC[0] << " sharedBC = " << sharedBC[0] << endl;
+//cout << "sharedAwithBC = " << sharedAwithBC[0] << " sharedBwithAC = " << sharedBwithAC[0] << " sharedCwithAB = " << sharedCwithAB[0] << endl;
//place labels within overlaps
outsvg << "<text fill=\"black\" class=\"seri\" x=\"" + toString(200 - ((int)toString(numA[0]-sharedAwithBC[0]).length() / 2)) + "\" y=\"170\">" + toString(numA[0]-sharedAwithBC[0]) + "</text>\n";
outsvg << "<text fill=\"black\" class=\"seri\" x=\"" + toString(200 - ((int)lookup[0]->getGroup().length() / 2)) + "\" y=\"150\">" + lookup[0]->getGroup() + "</text>\n";
//close file
outsvg << "</g>\n</svg>\n";
outsvg.close();
+ delete singleCalc;
}
/******************* 4 Groups **************************/
//A = red, B = green, C = blue, D = yellow
- if ((vCalcs.size() > 1) || (vCalcs[0]->getName() != "SharedSobs")) { cout << "The only calculator able to be used with 4 groups is sharedsobs. I will run that for you. " << endl; }
+ if ((vCalcs.size() > 1) || (vCalcs[0]->getName() != "sharedsobs")) { cout << "The only calculator able to be used with 4 groups is sharedsobs. I will run that for you. " << endl; }
//for each bin
for (int i = 0; i < lookup[0]->size(); i++) {
if ((lookup[0]->getAbundance(i) != 0) && (lookup[1]->getAbundance(i) != 0) && (lookup[2]->getAbundance(i) != 0) && (lookup[3]->getAbundance(i) != 0)) { sharedABCD++; }
}
- string filenamesvg = getRootName(globaldata->inputFileName) + sharedorder->getLabel() + ".venn.SharedSobs.svg";
+ string filenamesvg = getRootName(globaldata->inputFileName) + lookup[0]->getLabel() + ".venn.sharedsobs.svg";
openOutputFile(filenamesvg, outsvg);
//image window
//draw circles
outsvg << "<rect fill=\"white\" stroke=\"white\" x=\"0\" y=\"0\" width=\"700\" height=\"700\"/>";
- outsvg << "<text fill=\"black\" class=\"seri\" x=\"265\" y=\"30\">Venn Diagram at distance " + sharedorder->getLabel() + "</text>\n";
+ outsvg << "<text fill=\"black\" class=\"seri\" x=\"265\" y=\"30\">Venn Diagram at distance " + lookup[0]->getLabel() + "</text>\n";
outsvg << "<ellipse fill=\"red\" stroke=\"black\" opacity=\".35\" transform=\"rotate(-45 355 215) \" cx=\"355\" cy=\"215\" rx=\"200\" ry=\"115\"/>\n ";
outsvg << "<ellipse fill=\"green\" stroke=\"black\" opacity=\".35\" transform=\"rotate(+45 355 215) \" cx=\"355\" cy=\"215\" rx=\"200\" ry=\"115\"/>\n ";
outsvg << "<ellipse fill=\"blue\" stroke=\"black\" opacity=\".35\" transform=\"rotate(-40 440 315) \" cx=\"440\" cy=\"315\" rx=\"200\" ry=\"115\"/>\n ";