// the coeffient is 2. Note: we only set the coeffient in f2 values.
//create and initialize trees to 0.
- initialTree(numGroups);
+ initialTree(numGroups);
- //loop through vectors calculating the f11, f1A, f2A, f1B, f2B, S12 values
for (int i = 0; i < shared[0]->size(); i++) {
//get bin values and calc shared
bool sharedByAll = true;
}
}
-
+
//calculate chao1, (numleaves-1) because numleaves contains the ++ values.
- bool bias;
+ bool bias = false;
for(int i=0;i<numLeaves;i++){
- if (f2leaves[i]->lvalue == 0) { bias = true;}// break;}
+ if (f2leaves[i]->lvalue == 0 || f2leaves[i]->rvalue == 0) { bias = true;}// break;}
}
if(bias){
if (i != (numLeaves-1)) {
rightvalue = (float)(f1leaves[i]->rvalue * (f1leaves[i]->rvalue - 1)) / (float)((pow(2, (float)f2leaves[i]->rcoef)) * (f2leaves[i]->rvalue + 1));
}else{
+ //add in sobs
rightvalue = (float)(f1leaves[i]->rvalue);
}
Chao += leftvalue + rightvalue;
if (i != (numLeaves-1)) {
rightvalue = (float)(f1leaves[i]->rvalue * f1leaves[i]->rvalue) / (float)((pow(2, (float)f2leaves[i]->rcoef)) * f2leaves[i]->rvalue);
}else{
+ //add in sobs
rightvalue = (float)(f1leaves[i]->rvalue);
}
Chao += leftvalue + rightvalue;
delete f2leaves[i];
}
-
+
data[0] = Chao;
return data;
}
catch(exception& e) {
- errorOut(e, "SharedChao1", "getValues");
+ m->errorOut(e, "SharedChao1", "getValues");
exit(1);
}
}
f1leaves.resize(numNodes);
f2leaves.resize(numNodes);
-
+
//initialize leaf values
for (int i = 0; i < numLeaves; i++) {
- f1leaves[i] = new IntNode;
- f1leaves[i]->lvalue = 0;
- f1leaves[i]->rvalue = 0;
- f1leaves[i]->left = NULL;
- f1leaves[i]->right = NULL;
-
- f2leaves[i] = new IntNode;
- f2leaves[i]->lvalue = 0;
- f2leaves[i]->rvalue = 0;
- f2leaves[i]->left = NULL;
- f2leaves[i]->right = NULL;
+ f1leaves[i] = new IntNode(0, 0, NULL, NULL);
+ f2leaves[i] = new IntNode(0, 0, NULL, NULL);
}
//set pointers to children
for (int j = numLeaves; j < numNodes; j++) {
- f1leaves[j] = new IntNode;
+ f1leaves[j] = new IntNode();
f1leaves[j]->left = f1leaves[countleft];
f1leaves[j]->right = f1leaves[countright];
- f2leaves[j] = new IntNode;
+ f2leaves[j] = new IntNode();
f2leaves[j]->left = f2leaves[countleft];
f2leaves[j]->right =f2leaves[countright];
-
+
countleft = countleft + 2;
countright = countright + 2;
}
//point to root
f1root = f1leaves[numNodes-1];
-
+
//point to root
f2root = f2leaves[numNodes-1];
setCoef(f2root, 0);
}
catch(exception& e) {
- errorOut(e, "SharedChao1", "initialTree");
+ if ((toString(e.what()) == "vector::_M_fill_insert") || (toString(e.what()) == "St9bad_alloc")) { m->mothurOut("You are using " + toString(n) + " groups which creates 2^" + toString(n+1) + " nodes. Try reducing the number of groups you selected. "); m->mothurOutEndLine(); exit(1); }
+ m->errorOut(e, "SharedChao1", "initialTree");
exit(1);
}
}
updateBranchf2(f2root, bin, 0);
}
catch(exception& e) {
- errorOut(e, "SharedChao1", "updateTree");
+ m->errorOut(e, "SharedChao1", "updateTree");
exit(1);
}
}
}
}
catch(exception& e) {
- errorOut(e, "SharedChao1", "updateBranchf1");
+ m->errorOut(e, "SharedChao1", "updateBranchf1");
exit(1);
}
}
}
}
catch(exception& e) {
- errorOut(e, "SharedChao1", "updateBranchf2");
+ m->errorOut(e, "SharedChao1", "updateBranchf2");
exit(1);
}
}
}
}
catch(exception& e) {
- errorOut(e, "SharedChao1", "setCoef");
+ m->errorOut(e, "SharedChao1", "setCoef");
exit(1);
}
}
//for debugging purposes
void SharedChao1::printTree() {
- mothurOut("F1 leaves"); mothurOutEndLine();
+ m->mothurOut("F1 leaves"); m->mothurOutEndLine();
printBranch(f1root);
- mothurOut("F2 leaves"); mothurOutEndLine();
+ m->mothurOut("F2 leaves"); m->mothurOutEndLine();
printBranch(f2root);
printBranch(node->left);
printBranch(node->right);
}else { //you are a leaf
- mothurOut(toString(node->lvalue)); mothurOutEndLine();
- mothurOut(toString(node->rvalue)); mothurOutEndLine();
+ m->mothurOut(toString(node->lvalue)); m->mothurOutEndLine();
+ m->mothurOut(toString(node->rvalue)); m->mothurOutEndLine();
}
}
catch(exception& e) {
- errorOut(e, "SharedChao1", "printBranch");
+ m->errorOut(e, "SharedChao1", "printBranch");
exit(1);
}
}