+ //get estimates for pairs
+ subset.clear();
+ vector<string> labels;
+ subset.push_back(lookup[0]); subset.push_back(lookup[1]);
+ 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, 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, 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, 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, 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, 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, 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, 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,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, 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, 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<double> sharedData = nseqsCalc->getValues(lookup);
+
+ vector<SharedRAbundVector*> mysubset; mysubset.push_back(lookup[0]); mysubset.push_back(lookup[1]);
+ vector<double> sharedAB = nseqsCalc->getValues(mysubset);
+
+ mysubset.clear(); mysubset.push_back(lookup[0]); mysubset.push_back(lookup[2]);
+ vector<double> sharedAC = nseqsCalc->getValues(mysubset);
+
+ mysubset.clear(); mysubset.push_back(lookup[0]); mysubset.push_back(lookup[3]);
+ vector<double> sharedAD = nseqsCalc->getValues(mysubset);
+
+ mysubset.clear(); mysubset.push_back(lookup[1]); mysubset.push_back(lookup[2]);
+ vector<double> sharedBC = nseqsCalc->getValues(mysubset);
+
+ mysubset.clear(); mysubset.push_back(lookup[1]); mysubset.push_back(lookup[3]);
+ vector<double> sharedBD = nseqsCalc->getValues(mysubset);
+
+ mysubset.clear(); mysubset.push_back(lookup[2]); mysubset.push_back(lookup[3]);
+ vector<double> sharedCD = nseqsCalc->getValues(mysubset);
+
+ mysubset.clear(); mysubset.push_back(lookup[0]); mysubset.push_back(lookup[1]); mysubset.push_back(lookup[2]);
+ vector<double> sharedABC = nseqsCalc->getValues(mysubset);
+
+ mysubset.clear(); mysubset.push_back(lookup[0]); mysubset.push_back(lookup[1]); mysubset.push_back(lookup[3]);
+ vector<double> sharedABD = nseqsCalc->getValues(mysubset);