static unsigned int convert_distribution(unsigned int i, vp9_tree tree, unsigned int branch_ct[][2], const unsigned int num_events[]) { unsigned int left, right; if (tree[i] <= 0) left = num_events[-tree[i]]; else left = convert_distribution(tree[i], tree, branch_ct, num_events); if (tree[i + 1] <= 0) right = num_events[-tree[i + 1]]; else right = convert_distribution(tree[i + 1], tree, branch_ct, num_events); branch_ct[i >> 1][0] = left; branch_ct[i >> 1][1] = right; return left + right; }
/*METHOD: Evaluate the kraken database file*/ void evaluate_kfile(string k_file, string o_file, const taxonomy *my_taxonomy, const map<int, taxonomy *> *taxid2node, const map<string, int> seqid2taxid, const int kmer_len, const int read_len){ /*Read the file and get maps: * map of number seqid to the kmer distribution * map of number seqid to taxid */ map<int, string> id2kmers; map<int, int> id2taxid; map<int, string> id2seqid; map<int, string> id2tandl; int num_reads = read_kfile(k_file, &seqid2taxid, &id2seqid, &id2kmers, &id2taxid, &id2tandl); /*For each seqid, in parallel, convert kmer distribution to read distribution*/ convert_distribution(o_file, num_reads, &id2seqid, &id2kmers, &id2taxid, &id2tandl, my_taxonomy, taxid2node, kmer_len, read_len); }
void vp9_tree_probs_from_distribution(vp9_tree tree, unsigned int branch_ct[][2], const unsigned int num_events[]) { convert_distribution(0, tree, branch_ct, num_events); }