X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=bayesian.cpp;h=a4229c6b3d331ca5a04ee49ac2385b2965963421;hb=7a7870ab773b993d8d1fd89703b1df3beb47f8d4;hp=00467ff0feb0a5df82314685520943376582278e;hpb=17aafaea968f87e581297063b16695ad515bea53;p=mothur.git diff --git a/bayesian.cpp b/bayesian.cpp index 00467ff..a4229c6 100644 --- a/bayesian.cpp +++ b/bayesian.cpp @@ -216,17 +216,11 @@ string Bayesian::getTaxonomy(Sequence* seq) { /**************************************************************************************************/ string Bayesian::bootstrapResults(vector kmers, int tax, int numToSelect) { try { - - //taxConfidenceScore.clear(); //clear out previous seqs scores - vector< map > confidenceScores; //you need the added vector level of confusion to account for the level that name is seen since they can be the same - //map of classification to confidence for all areas seen - //ie. Bacteria;Alphaproteobacteria;Rhizobiales;Azorhizobium_et_rel.;Methylobacterium_et_rel.;Bosea; - //ie. Bacteria -> 100, Alphaproteobacteria -> 100, Rhizobiales -> 87, Azorhizobium_et_rel. -> 78, Methylobacterium_et_rel. -> 70, Bosea -> 50 - confidenceScores.resize(100); //if you have more than 100 levels of classification... - - map::iterator itBoot; - map::iterator itBoot2; + map confidenceScores; + + map::iterator itBoot; + map::iterator itBoot2; map::iterator itConvert; for (int i = 0; i < iters; i++) { @@ -248,14 +242,15 @@ string Bayesian::bootstrapResults(vector kmers, int tax, int numToSelect) { //add to confidence results while (taxonomy.level != 0) { //while you are not at the root - itBoot2 = confidenceScores[taxonomy.level].find(taxonomy.name); //is this a classification we already have a count on + itBoot2 = confidenceScores.find(newTax); //is this a classification we already have a count on - if (itBoot2 == confidenceScores[taxonomy.level].end()) { //not already in confidence scores - confidenceScores[taxonomy.level][taxonomy.name] = 1; + if (itBoot2 == confidenceScores.end()) { //not already in confidence scores + confidenceScores[newTax] = 1; }else{ - confidenceScores[taxonomy.level][taxonomy.name]++; + confidenceScores[newTax]++; } - + + newTax = taxonomy.parent; taxonomy = phyloTree->get(taxonomy.parent); } @@ -263,15 +258,17 @@ string Bayesian::bootstrapResults(vector kmers, int tax, int numToSelect) { string confidenceTax = ""; simpleTax = ""; + + int seqTaxIndex = tax; TaxNode seqTax = phyloTree->get(tax); while (seqTax.level != 0) { //while you are not at the root - itBoot2 = confidenceScores[seqTax.level].find(seqTax.name); //is this a classification we already have a count on + itBoot2 = confidenceScores.find(seqTaxIndex); //is this a classification we already have a count on int confidence = 0; - if (itBoot2 != confidenceScores[seqTax.level].end()) { //not already in confidence scores - confidence = confidenceScores[seqTax.level][seqTax.name]; + if (itBoot2 != confidenceScores.end()) { //already in confidence scores + confidence = confidenceScores[seqTaxIndex]; } if (((confidence/(float)iters) * 100) >= confidenceThreshold) { @@ -279,6 +276,7 @@ string Bayesian::bootstrapResults(vector kmers, int tax, int numToSelect) { simpleTax = seqTax.name + ";" + simpleTax; } + seqTaxIndex = seqTax.parent; seqTax = phyloTree->get(seqTax.parent); }