else if(rndPreviousDist<cutoff){
printData(toString(rndPreviousDist, length-1));
}
-
+
+ //delete globaldata's copy of the sparsematrix and listvector to free up memory
+ SparseMatrix* clearM = NULL;
+ globaldata->setSparseMatrix(clearM);
+ ListVector* clearL = NULL;
+ globaldata->setListVector(clearL);
+
+
//saves .list file so you can do the collect, rarefaction and summary commands without doing a read.list
if (globaldata->getFormat() == "phylip") { globaldata->setPhylipFile(""); }
else if (globaldata->getFormat() == "column") { globaldata->setColumnFile(""); }
}
//are you trying to cluster before you have read something
- if ((commandName == "cluster") && (globaldata->getSparseMatrix() == NULL) ||
- (commandName == "cluster") && (globaldata->getListVector() == NULL)) {
+ if (((commandName == "cluster") && (globaldata->getSparseMatrix() == NULL)) ||
+ ((commandName == "cluster") && (globaldata->getListVector() == NULL))) {
cout << "Before you use the cluster command, you first need to read in a distance matrix." << endl;
errorFree = false;
}
numNodes = T->getNumNodes();
numLeaves = T->getNumLeaves();
- readTreeString();
+ readTreeString();
+
//save trees for later commands
globaldata->gTree.push_back(T);
gobble(filehandle);
numLeaves = T->getNumLeaves();
//read tree info
- readTreeString();
+ readTreeString();
+
//save trees for later commands
globaldata->gTree.push_back(T);
}
}
-
}
catch(exception& e) {
cout << "Standard Error: " << e.what() << " has occurred in the ReadNewickTree class Function read. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
T->tree[n].setParent(-1);
if(lc!=-1){ T->tree[lc].setParent(n); }
if(rc!=-1){ T->tree[rc].setParent(n); }
+ cout << "new loop "<< endl;
}
}
//adds sequence names that are not in group file to the "xxx" group
if(n1 == -1) {
cerr << "Name: " << name << " not found in your groupfile and it will be ignored. \n";
+
globaldata->gTreemap->namesOfSeqs.push_back(name);
globaldata->gTreemap->treemap[name].groupname = "xxx";
globaldata->gTreemap->treemap[name].vectorIndex = (globaldata->gTreemap->namesOfSeqs.size() - 1);
//find index in tree of name
n1 = T->getIndex(name);
group = "xxx";
+ numLeaves++;
+ numNodes = 2*numLeaves - 1;
+ T->resetTree();
}
T->tree[n1].setGroup(group);
-
+ T->printTree();
T->tree[n1].setChildren(-1,-1);
if(blen == 1){
class ReadNewickTree : public ReadTree {
public:
- ReadNewickTree(string file) : treeFile(file) { openInputFile(file, filehandle); }
+ ReadNewickTree(string file) : treeFile(file) { openInputFile(file, filehandle); }
~ReadNewickTree() {};
void read();
for (int i = 0; i < T.size(); i++) {
T[i]->assembleTree();
}
-
+T[0]->createNewickFile("treeout");
return 0;
}
catch(exception& e) {
if (i <= (numLeaves-1)) {
tree[i].setName(globaldata->gTreemap->namesOfSeqs[i]);
tree[i].setGroup(globaldata->gTreemap->getGroup(globaldata->gTreemap->namesOfSeqs[i]));
- //the node knows its index
- tree[i].setIndex(i);
//set pcount and pGroup for groupname to 1.
tree[i].pcount[globaldata->gTreemap->getGroup(globaldata->gTreemap->namesOfSeqs[i])] = 1;
tree[i].pGroups[globaldata->gTreemap->getGroup(globaldata->gTreemap->namesOfSeqs[i])] = 1;
}else if (i > (numLeaves-1)) {
tree[i].setName("");
tree[i].setGroup("");
- //the node knows its index
- tree[i].setIndex(i);
}
}
}
}
/*****************************************************************/
+void Tree::resetTree(){
+try {
+ numLeaves = globaldata->gTreemap->getNumSeqs();
+ numNodes = 2*numLeaves - 1;
+
+ tree.resize(numNodes);
+ //initialize tree with correct number of nodes, name and group info.
+ for (int i = 0; i < numNodes; i++) {
+ //initialize leaf nodes
+ if (i <= (numLeaves-1)) {
+ tree[i].setName(globaldata->gTreemap->namesOfSeqs[i]);
+ tree[i].setGroup(globaldata->gTreemap->getGroup(globaldata->gTreemap->namesOfSeqs[i]));
+ //set pcount and pGroup for groupname to 1.
+ tree[i].pcount[globaldata->gTreemap->getGroup(globaldata->gTreemap->namesOfSeqs[i])] = 1;
+ tree[i].pGroups[globaldata->gTreemap->getGroup(globaldata->gTreemap->namesOfSeqs[i])] = 1;
+ //Treemap knows name, group and index to speed up search
+ globaldata->gTreemap->setIndex(globaldata->gTreemap->namesOfSeqs[i], i);
+
+ //intialize non leaf nodes
+ }else if (i > (numLeaves-1)) {
+ tree[i].setName("");
+ tree[i].setGroup("");
+ }
+ }
+ }
+ catch(exception& e) {
+ cout << "Standard Error: " << e.what() << " has occurred in the Tree class Function resetTree. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
+ exit(1);
+ }
+ catch(...) {
+ cout << "An unknown error has occurred in the Tree class function resetTree. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
+ exit(1);
+ }
+
+}
+/*****************************************************************/
int Tree::getIndex(string searchName) {
try {
//Treemap knows name, group and index to speed up search
try {
int lc = tree[i].getLChild();
int rc = tree[i].getRChild();
-
+cout << i << lc << rc << endl;
//set parsimony groups to left child
map<string,int> parsimony = tree[lc].pGroups;
void getCopy(Tree*); //makes tree a copy of the one passed in.
+ void resetTree(); //this is needed to allow user to omit names from the group file
void assembleRandomTree();
void assembleRandomUnifracTree(vector<string>);
void assembleRandomUnifracTree(string, string);
int TreeMap::getNumGroups() {
- return seqsPerGroup.size();
+ return namesOfGroups.size();
}
/************************************************************/
setGroups(); //sets users groups to analyze
convert(globaldata->getIters(), iters); //how many random trees to generate
unweighted = new Unweighted(tmap);
- counter = 0;
}
catch(exception& e) {
//get pscores for users trees
for (int i = 0; i < T.size(); i++) {
+ counter = 0;
unweightedFile = globaldata->getTreeFile() + toString(i+1) + ".unweighted";
unweightedFileout = globaldata->getTreeFile() + "temp." + toString(i+1) + ".unweighted";
//column headers
//get unweighted for users tree
rscoreFreq.resize(numComp);
rCumul.resize(numComp);
- validScores.resize(numComp);
utreeScores.resize(numComp);
UWScoreSig.resize(numComp);
//output scores for each combination
for(int k = 0; k < numComp; k++) {
- //add users score to valid scores
- validScores[k][userData[k]] = userData[k];
-
//saves users score
utreeScores[k].push_back(userData[k]);
}
}
//add randoms score to validscores
- validScores[k][randomData[k]] = randomData[k];
+ validScores[randomData[k]] = randomData[k];
}
}
for(int a = 0; a < numComp; a++) {
float rcumul = 1.0000;
//this loop fills the cumulative maps and put 0.0000 in the score freq map to make it easier to print.
- for (it = validScores[a].begin(); it != validScores[a].end(); it++) {
+ for (it = validScores.begin(); it != validScores.end(); it++) {
//make rscoreFreq map and rCumul
it2 = rscoreFreq[a].find(it->first);
rCumul[a][it->first] = rcumul;
for(int a = 0; a < numComp; a++) {
initFile(groupComb[a]);
//print each line
- for (it = validScores[a].begin(); it != validScores[a].end(); it++) {
+ for (it = validScores.begin(); it != validScores.end(); it++) {
data.push_back(it->first); data.push_back(rscoreFreq[a][it->first]); data.push_back(rCumul[a][it->first]);
output(data);
data.clear();