X-Git-Url: https://git.donarmstrong.com/?p=mothur.git;a=blobdiff_plain;f=tree.cpp;h=44ecadd534b60d60b602d9e052259ac69709f9d3;hp=ed652508ef2e6b049c183777ae5eecab42100d97;hb=72e0be6b9c80009d4dbee24e8d690ad9514dc6fb;hpb=94d43af803e4be78b2ba8049669504e854ad13be diff --git a/tree.cpp b/tree.cpp index ed65250..44ecadd 100644 --- a/tree.cpp +++ b/tree.cpp @@ -588,18 +588,11 @@ int Tree::populateNewTree(vector& oldtree, int node, int& index) { } } /*****************************************************************/ -void Tree::getCopy(Tree* copy, map nameMap, vector namesToInclude) { +void Tree::getCopy(Tree* copy, map nameMap) { try { //for each node in the tree copy its info for (int i = 0; i < numNodes; i++) { - //copy name - tree[i].setName(copy->tree[i].getName()); - - //copy group - vector temp; - tree[i].setGroup(temp); - //copy branch length tree[i].setBranchLength(copy->tree[i].getBranchLength()); @@ -608,93 +601,9 @@ void Tree::getCopy(Tree* copy, map nameMap, vector names //copy children tree[i].setChildren(copy->tree[i].getLChild(), copy->tree[i].getRChild()); - - //copy index in node and tmap - tree[i].setIndex(copy->tree[i].getIndex()); - setIndex(copy->tree[i].getName(), getIndex(copy->tree[i].getName())); - - //copy pGroups - tree[i].pGroups.clear(); - - //copy pcount - tree[i].pcount.clear(); - } + } - groupNodeInfo.clear(); - - //now lets change prune the seqs not in namesToInclude by setting their group to "doNotIncludeMe" - for (int i = 0; i < numLeaves; i++) { - - if (m->control_pressed) { break; } - - string name = tree[i].getName(); - - map::iterator itNames = nameMap.find(name); - - if (itNames == nameMap.end()) { m->mothurOut(name + " is not in your name file, please correct."); m->mothurOutEndLine(); exit(1); } - else { - vector dupNames; - m->splitAtComma(nameMap[name], dupNames); - - map::iterator itCounts; - int maxPars = 1; - set groupsAddedForThisNode; - for (int j = 0; j < dupNames.size(); j++) { - - string group = tmap->getGroup(dupNames[j]); - bool includeMe = m->inUsersGroups(dupNames[j], namesToInclude); - - if (!includeMe && (group != "doNotIncludeMe")) { m->mothurOut("[ERROR] : creating subtree in copy.\n"); m->control_pressed = true; } - else if (!includeMe) { - if (groupsAddedForThisNode.count(group) == 0) { groupNodeInfo[group].push_back(i); groupsAddedForThisNode.insert(group); } //if you have not already added this node for this group, then add it - - //update pcounts - itCounts = tree[i].pcount.find(group); - if (itCounts == tree[i].pcount.end()) { //new group, add it - tree[i].pcount[group] = 1; - }else { - tree[i].pcount[group]++; - } - - //update pgroups - itCounts = tree[i].pGroups.find(group); - if (itCounts == tree[i].pGroups.end()) { //new group, add it - tree[i].pGroups[group] = 1; - }else{ - tree[i].pGroups[group]++; - } - - //keep highest group - if(tree[i].pGroups[group] > maxPars){ - maxPars = tree[i].pGroups[group]; - } - } - }//end for - - if (maxPars > 1) { //then we have some more dominant groups - //erase all the groups that are less than maxPars because you found a more dominant group. - for(it=tree[i].pGroups.begin();it!=tree[i].pGroups.end();){ - if(it->second < maxPars){ - tree[i].pGroups.erase(it++); - }else { it++; } - } - //set one remaining groups to 1 - for(it=tree[i].pGroups.begin();it!=tree[i].pGroups.end();it++){ - tree[i].pGroups[it->first] = 1; - } - }//end if - - //update groups to reflect all the groups this node represents - vector nodeGroups; - map::iterator itGroups; - for (itGroups = tree[i].pcount.begin(); itGroups != tree[i].pcount.end(); itGroups++) { - nodeGroups.push_back(itGroups->first); - } - tree[i].setGroup(nodeGroups); - - }//end else - }//end for - + if (nameMap.size() != 0) { addNamesToCounts(nameMap); } //build the pGroups in non leaf nodes to be used in the parsimony calcs. for (int i = numLeaves; i < numNodes; i++) {