//groups in this combo
groups.push_back(globaldata->Groups[a]); groups.push_back(globaldata->Groups[l]);
- for(int i=t->getNumLeaves();i<t->getNumNodes();i++){
-
- int lc = t->tree[i].getLChild(); //lc = vector index of left child
- int rc = t->tree[i].getRChild(); //rc = vector index of right child
-
- /**********************************************************************/
- //This section adds in all lengths that are non leaf
-
+ for(int i=0;i<t->getNumNodes();i++){
+ if (m->control_pressed) { return data; }
+
copyIpcount = t->tree[i].pcount;
- for (it = copyIpcount.begin(); it != copyIpcount.end(); it++) {
- if (inUsersGroups(it->first, groups) != true) { copyIpcount.erase(it->first); }
+ for (it = copyIpcount.begin(); it != copyIpcount.end();) {
+ if (inUsersGroups(it->first, groups) != true) {
+ copyIpcount.erase(it++);
+ }else { it++; }
}
//if i's children are from the same group then i's pcount size will be 1
//if copyIpcount.size() = 0 they are from a branch that is entirely from a group the user doesn't want
if (copyIpcount.size() == 0) { }
- else if ((t->tree[i].getBranchLength() != -1) && (copyIpcount.size() == 1)) { UniqueBL += t->tree[i].getBranchLength(); }
+ else if ((t->tree[i].getBranchLength() != -1) && (copyIpcount.size() == 1)) { UniqueBL += abs(t->tree[i].getBranchLength()); }
//add i's BL to total if it is from the groups the user wants
if ((t->tree[i].getBranchLength() != -1) && (copyIpcount.size() != 0)) {
- totalBL += t->tree[i].getBranchLength();
- }
-
- /**********************************************************************/
- //This section adds in all lengths that are leaf
-
- //if i's chidren are leaves
- if (t->tree[rc].getRChild() == -1) {
- //if rc is a valid group and rc has a BL
- if ((inUsersGroups(t->tree[rc].getGroup(), groups) == true) && (t->tree[rc].getBranchLength() != -1)) {
- UniqueBL += t->tree[rc].getBranchLength();
- totalBL += t->tree[rc].getBranchLength();
- }
- }
-
- if (t->tree[lc].getLChild() == -1) {
- //if lc is a valid group and lc has a BL
- if ((inUsersGroups(t->tree[lc].getGroup(), groups) == true) && (t->tree[lc].getBranchLength() != -1)) {
- UniqueBL += t->tree[lc].getBranchLength();
- totalBL += t->tree[lc].getBranchLength();
- }
+ totalBL += abs(t->tree[i].getBranchLength());
}
- /**********************************************************************/
}
UW = (UniqueBL / totalBL);
+ //cout << globaldata->Groups[a] << globaldata->Groups[l] << '\t' << UniqueBL << '\t' << totalBL << endl;
if (isnan(UW) || isinf(UW)) { UW = 0; }
if (numGroups == 0) {
//get score for all users groups
for (int i = 0; i < tmap->namesOfGroups.size(); i++) {
- groups.push_back(tmap->namesOfGroups[i]);
+ if (tmap->namesOfGroups[i] != "xxx") {
+ groups.push_back(tmap->namesOfGroups[i]);
+ }
}
}else {
for (int i = 0; i < globaldata->Groups.size(); i++) {
UW = 0.00; //Unweighted Value = UniqueBL / totalBL;
copyIpcount.clear();
- for(int i=t->getNumLeaves();i<t->getNumNodes();i++){
-
- int lc = t->tree[i].getLChild(); //lc = vector index of left child
- int rc = t->tree[i].getRChild(); //rc = vector index of right child
-
- /**********************************************************************/
- //This section adds in all lengths that are non leaf
+ for(int i=0;i<t->getNumNodes();i++){
+ if (m->control_pressed) { return data; }
+
copyIpcount = t->tree[i].pcount;
- for (it = copyIpcount.begin(); it != copyIpcount.end(); it++) {
- if (inUsersGroups(it->first, groups) != true) { copyIpcount.erase(it->first); }
+ for (it = copyIpcount.begin(); it != copyIpcount.end();) {
+ if (inUsersGroups(it->first, groups) != true) {
+ copyIpcount.erase(it++);
+ }else { it++; }
}
//if i's children are from the same group then i's pcount size will be 1
//if copyIpcount.size() = 0 they are from a branch that is entirely from a group the user doesn't want
if (copyIpcount.size() == 0) { }
- else if ((t->tree[i].getBranchLength() != -1) && (copyIpcount.size() == 1)) { UniqueBL += t->tree[i].getBranchLength(); }
+ else if ((t->tree[i].getBranchLength() != -1) && (copyIpcount.size() == 1)) { UniqueBL += abs(t->tree[i].getBranchLength()); }
//add i's BL to total if it is from the groups the user wants
if ((t->tree[i].getBranchLength() != -1) && (copyIpcount.size() != 0)) {
- totalBL += t->tree[i].getBranchLength();
- }
-
- /**********************************************************************/
- //This section adds in all lengths that are leaf
-
- //if i's chidren are leaves
- if (t->tree[rc].getRChild() == -1) {
- //if rc is a valid group and rc has a BL
- if ((inUsersGroups(t->tree[rc].getGroup(), groups) == true) && (t->tree[rc].getBranchLength() != -1)) {
- UniqueBL += t->tree[rc].getBranchLength();
- totalBL += t->tree[rc].getBranchLength();
- }
- }
-
- if (t->tree[lc].getLChild() == -1) {
- //if lc is a valid group and lc has a BL
- if ((inUsersGroups(t->tree[lc].getGroup(), groups) == true) && (t->tree[lc].getBranchLength() != -1)) {
- UniqueBL += t->tree[lc].getBranchLength();
- totalBL += t->tree[lc].getBranchLength();
- }
+ totalBL += abs(t->tree[i].getBranchLength());
}
- /**********************************************************************/
}
UW = (UniqueBL / totalBL);
}
catch(exception& e) {
- cout << "Standard Error: " << e.what() << " has occurred in the Unweighted class Function getValues. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
+ m->errorOut(e, "Unweighted", "getValues");
exit(1);
}
- catch(...) {
- cout << "An unknown error has occurred in the Unweighted class function getValues. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
-
}
/**************************************************************************************************/
//if the users enters no groups then give them the score of all groups
int numGroups = globaldata->Groups.size();
-cout << "NumGroups = " << numGroups << endl;
+
//calculate number of comparsions
int numComp = 0;
for (int r=0; r<numGroups; r++) {
//swap labels in the groups you want to compare
copyTree->assembleRandomUnifracTree(groups[0], groups[1]);
-
-
- for(int i=t->getNumLeaves();i<t->getNumNodes();i++){
-
- int lc = t->tree[i].getLChild(); //lc = vector index of left child
- int rc = t->tree[i].getRChild(); //rc = vector index of right child
-
+
+ if (m->control_pressed) { delete copyTree; return data; }
+
+ //copyTree->createNewickFile("random"+groupA+toString(count));
+
+ for(int i=0;i<copyTree->getNumNodes();i++){
+
+ if (m->control_pressed) { delete copyTree; return data; }
+
/**********************************************************************/
//This section adds in all lengths that are non leaf
-
- copyIpcount = t->tree[i].pcount;
- for (it = copyIpcount.begin(); it != copyIpcount.end(); it++) {
- if (inUsersGroups(it->first, groups) != true) { copyIpcount.erase(it->first); }
+ copyIpcount = copyTree->tree[i].pcount;
+ for (it = copyIpcount.begin(); it != copyIpcount.end();) {
+ if (inUsersGroups(it->first, groups) != true) {
+ copyIpcount.erase(it++);
+ }else { it++; }
}
//if i's children are from the same group then i's pcount size will be 1
//if copyIpcount.size() = 0 they are from a branch that is entirely from a group the user doesn't want
if (copyIpcount.size() == 0) { }
- else if ((t->tree[i].getBranchLength() != -1) && (copyIpcount.size() == 1)) { UniqueBL += t->tree[i].getBranchLength(); }
+ else if ((copyTree->tree[i].getBranchLength() != -1) && (copyIpcount.size() == 1)) { UniqueBL += abs(copyTree->tree[i].getBranchLength()); }
//add i's BL to total if it is from the groups the user wants
- if ((t->tree[i].getBranchLength() != -1) && (copyIpcount.size() != 0)) {
- totalBL += t->tree[i].getBranchLength();
- }
-
- /**********************************************************************/
- //This section adds in all lengths that are leaf
-
- //if i's chidren are leaves
- if (t->tree[rc].getRChild() == -1) {
- //if rc is a valid group and rc has a BL
- if ((inUsersGroups(t->tree[rc].getGroup(), groups) == true) && (t->tree[rc].getBranchLength() != -1)) {
- UniqueBL += t->tree[rc].getBranchLength();
- totalBL += t->tree[rc].getBranchLength();
- }
- }
-
- if (t->tree[lc].getLChild() == -1) {
- //if lc is a valid group and lc has a BL
- if ((inUsersGroups(t->tree[lc].getGroup(), groups) == true) && (t->tree[lc].getBranchLength() != -1)) {
- UniqueBL += t->tree[lc].getBranchLength();
- totalBL += t->tree[lc].getBranchLength();
- }
+ if ((copyTree->tree[i].getBranchLength() != -1) && (copyIpcount.size() != 0)) {
+ totalBL += abs(copyTree->tree[i].getBranchLength());
}
- /**********************************************************************/
}
UW = (UniqueBL / totalBL);
if (numGroups == 0) {
//get score for all users groups
for (int i = 0; i < tmap->namesOfGroups.size(); i++) {
- groups.push_back(tmap->namesOfGroups[i]);
+ if (tmap->namesOfGroups[i] != "xxx") {
+ groups.push_back(tmap->namesOfGroups[i]);
+ }
}
}else {
for (int i = 0; i < globaldata->Groups.size(); i++) {
//swap labels in all the groups you want to compare
copyTree->assembleRandomUnifracTree(groups);
-
- for(int i=t->getNumLeaves();i<t->getNumNodes();i++){
-
- int lc = t->tree[i].getLChild(); //lc = vector index of left child
- int rc = t->tree[i].getRChild(); //rc = vector index of right child
- /**********************************************************************/
- //This section adds in all lengths that are non leaf
-
- copyIpcount = t->tree[i].pcount;
- for (it = copyIpcount.begin(); it != copyIpcount.end(); it++) {
- if (inUsersGroups(it->first, groups) != true) { copyIpcount.erase(it->first); }
+ if (m->control_pressed) { delete copyTree; return data; }
+
+ for(int i=0;i<copyTree->getNumNodes();i++){
+ if (m->control_pressed) { delete copyTree; return data; }
+
+ copyIpcount = copyTree->tree[i].pcount;
+ for (it = copyIpcount.begin(); it != copyIpcount.end();) {
+ if (inUsersGroups(it->first, groups) != true) {
+ copyIpcount.erase(it++);
+ }else { it++; }
}
//if i's children are from the same group then i's pcount size will be 1
//if copyIpcount.size() = 0 they are from a branch that is entirely from a group the user doesn't want
if (copyIpcount.size() == 0) { }
- else if ((t->tree[i].getBranchLength() != -1) && (copyIpcount.size() == 1)) { UniqueBL += t->tree[i].getBranchLength(); }
+ else if ((copyTree->tree[i].getBranchLength() != -1) && (copyIpcount.size() == 1)) { abs(UniqueBL += copyTree->tree[i].getBranchLength()); }
//add i's BL to total if it is from the groups the user wants
- if ((t->tree[i].getBranchLength() != -1) && (copyIpcount.size() != 0)) {
- totalBL += t->tree[i].getBranchLength();
- }
-
- /**********************************************************************/
- //This section adds in all lengths that are leaf
-
- //if i's chidren are leaves
- if (t->tree[rc].getRChild() == -1) {
- //if rc is a valid group and rc has a BL
- if ((inUsersGroups(t->tree[rc].getGroup(), groups) == true) && (t->tree[rc].getBranchLength() != -1)) {
- UniqueBL += t->tree[rc].getBranchLength();
- totalBL += t->tree[rc].getBranchLength();
- }
+ if ((copyTree->tree[i].getBranchLength() != -1) && (copyIpcount.size() != 0)) {
+ totalBL += abs(copyTree->tree[i].getBranchLength());
}
- if (t->tree[lc].getLChild() == -1) {
- //if lc is a valid group and lc has a BL
- if ((inUsersGroups(t->tree[lc].getGroup(), groups) == true) && (t->tree[lc].getBranchLength() != -1)) {
- UniqueBL += t->tree[lc].getBranchLength();
- totalBL += t->tree[lc].getBranchLength();
- }
- }
-
- /**********************************************************************/
}
UW = (UniqueBL / totalBL);
data[count] = UW;
}
-
+
+ delete copyTree;
+
return data;
}
catch(exception& e) {
- cout << "Standard Error: " << e.what() << " has occurred in the Unweighted class Function getValues. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
- catch(...) {
- cout << "An unknown error has occurred in the Unweighted class function getValues. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
+ m->errorOut(e, "Unweighted", "getValues");
exit(1);
}
}