X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=bootstrapsharedcommand.cpp;h=e88972cc19aae9c2e21efa665177925c3e86cf46;hb=50ed3b6104d5821d6184f882e1e1423d47dcbf10;hp=56611a8f1e5af0eea6b64eef76e3ec1588b7298f;hpb=154e089bcd37c2c2f773e53ffb88a20170b27037;p=mothur.git diff --git a/bootstrapsharedcommand.cpp b/bootstrapsharedcommand.cpp index 56611a8..e88972c 100644 --- a/bootstrapsharedcommand.cpp +++ b/bootstrapsharedcommand.cpp @@ -17,6 +17,7 @@ #include "sharedthetayc.h" #include "sharedthetan.h" #include "sharedmorisitahorn.h" +#include "sharedbraycurtis.h" //********************************************************************************************************************** @@ -35,7 +36,7 @@ BootSharedCommand::BootSharedCommand(){ if (validCalculator->isValidCalculator("boot", globaldata->Estimators[i]) == true) { if (globaldata->Estimators[i] == "jabund") { treeCalculators.push_back(new JAbund()); - }else if (globaldata->Estimators[i] == "sorensonabund") { + }else if (globaldata->Estimators[i] == "sorabund") { treeCalculators.push_back(new SorAbund()); }else if (globaldata->Estimators[i] == "jclass") { treeCalculators.push_back(new Jclass()); @@ -51,6 +52,8 @@ BootSharedCommand::BootSharedCommand(){ treeCalculators.push_back(new ThetaN()); }else if (globaldata->Estimators[i] == "morisitahorn") { treeCalculators.push_back(new MorHorn()); + }else if (globaldata->Estimators[i] == "braycurtis") { + treeCalculators.push_back(new BrayCurtis()); } } } @@ -88,6 +91,7 @@ int BootSharedCommand::execute(){ try { int count = 1; EstOutput data; + vector subset; //if the users entered no valid calculators don't execute command if (treeCalculators.size() == 0) { return 0; } @@ -160,15 +164,19 @@ int BootSharedCommand::execute(){ for (int k = 0; k < lookup.size(); k++) { // pass cdd each set of groups to commpare for (int l = k; l < lookup.size(); l++) { if (k != l) { //we dont need to similiarity of a groups to itself + subset.clear(); //clear out old pair of sharedrabunds + //add new pair of sharedrabunds + subset.push_back(lookup[k]); subset.push_back(lookup[l]); + //get estimated similarity between 2 groups - data = treeCalculators[i]->getValues(lookup[k], lookup[l]); //saves the calculator outputs + data = treeCalculators[i]->getValues(subset); //saves the calculator outputs //save values in similarity matrix simMatrix[k][l] = data[0]; simMatrix[l][k] = data[0]; } } } - + //creates tree from similarity matrix and write out file createTree(out[i]); } @@ -216,8 +224,8 @@ void BootSharedCommand::createTree(ostream* out){ //do merges and create tree structure by setting parents and children //there are numGroups - 1 merges to do for (int i = 0; i < (numGroups - 1); i++) { - - float largest = 0.0; + + float largest = -1.0; int row, column; //find largest value in sims matrix by searching lower triangle for (int j = 1; j < simMatrix.size(); j++) { @@ -229,7 +237,7 @@ void BootSharedCommand::createTree(ostream* out){ //set non-leaf node info and update leaves to know their parents //non-leaf t->tree[numGroups + i].setChildren(index[row], index[column]); - + //parents t->tree[index[row]].setParent(numGroups + i); t->tree[index[column]].setParent(numGroups + i); @@ -240,36 +248,36 @@ void BootSharedCommand::createTree(ostream* out){ //branchlengths t->tree[index[row]].setBranchLength(blength - t->tree[index[row]].getLengthToLeaves()); t->tree[index[column]].setBranchLength(blength - t->tree[index[column]].getLengthToLeaves()); - + //set your length to leaves to your childs length plus branchlength t->tree[numGroups + i].setLengthToLeaves(t->tree[index[row]].getLengthToLeaves() + t->tree[index[row]].getBranchLength()); - + //update index index[row] = numGroups+i; index[column] = numGroups+i; //zero out highest value that caused the merge. - simMatrix[row][column] = 0.0; - simMatrix[column][row] = 0.0; - + simMatrix[row][column] = -1.0; + simMatrix[column][row] = -1.0; + //merge values in simsMatrix for (int n = 0; n < simMatrix.size(); n++) { //row becomes merge of 2 groups simMatrix[row][n] = (simMatrix[row][n] + simMatrix[column][n]) / 2; simMatrix[n][row] = simMatrix[row][n]; //delete column - simMatrix[column][n] = 0.0; - simMatrix[n][column] = 0.0; + simMatrix[column][n] = -1.0; + simMatrix[n][column] = -1.0; } } - + //assemble tree t->assembleTree(); - + //print newick file t->print(*out); - + //delete tree delete t;