int main(int argc, char **args) { Forwarder f; size_t alphabet_size = 3; f.read_seq_directory("sequences", alphabet_size); f.write_to_directory("example_out"); Matrix pi, A, B; read_HMM(pi, A, B, "example.hmm"); std::cout << "log-likelihood: " << f.forward(pi, A, B) << std::endl; // std::cout << "log-likelihood: " << f.pthread_forward(pi, A, B) << std::endl; // parallelized on the lengths of the sequences // std::cout << "log-likelihood: " << f.mr_pthread_forward(pi, A, B) << std::endl; // parallelized version on the number of sequences return 0; }
void test_forwarder_multiple_seqs() { Forwarder forwarder; Matrix pi, A, B; size_t no_states, alphabet_size; std::cout << "Testing forwarder with multiple sequences: "; std::cout.flush(); read_HMM(pi, A, B, "../test_data/multiple_seqs.hmm"); no_states = pi.get_height(); alphabet_size = B.get_width(); forwarder.read_seq_directory("../test_data/seqs_directory", alphabet_size, no_states, 50); assertClose(forwarder.forward(pi, A, B), -52287.6, "Forwarder: Difference in loglikelihood:", 0.0001); assertClose(forwarder.pthread_forward(pi, A, B), -52287.6, "pthread_forward: Difference in loglikelihood:", 0.0001); assertClose(forwarder.mr_pthread_forward(pi, A, B), -52287.6, "mr_pthread_forward: Difference in loglikelihood:", 0.0001); std::cout << "ok." << std::endl; }
void test_forwarder_long_sequence(const std::string &hmmFilename, const std::string &seqFilename, double expected_ll) { Matrix pi, A, B; size_t no_states, alphabet_size; std::cout << "Testing " << hmmFilename << " " << seqFilename << ": "; std::cout.flush(); read_HMM(pi, A, B, hmmFilename); no_states = pi.get_height(); alphabet_size = B.get_width(); Forwarder forwarder; forwarder.read_seq(seqFilename, alphabet_size, 500); SimpleForwarder s_forwarder(seqFilename); assertClose(forwarder.forward(pi, A, B), expected_ll, "Forwarder: Difference in likelihood log likelihood:", 0.0001); assertClose(forwarder.pthread_forward(pi, A, B), expected_ll, "pthread_forward: Difference in likelihood log likelihood:", 0.0001); assertClose(s_forwarder.forward(pi, A, B), expected_ll, "s_forward: Difference in log likelihood:", 0.0001); std::cout << "ok." << std::endl; }
int main(int argc, char **args) { Forwarder f; size_t alphabet_size = 3; f.read_seq("example.seq", alphabet_size); f.write_to_directory("example_out"); Matrix pi, A, B; read_HMM(pi, A, B, "example.hmm"); std::cout << "log-likelihood: " << f.forward(pi, A, B) << std::endl; // std::cout << "log-likelihood: " << f.pthread_forward(pi, A, B) << std::endl; # parallelized version std::vector<unsigned> pd_path; Matrix pd_table; posterior_decoding("example.seq", pi, A, B, pd_path, pd_table); std::cout << "posterior path[0:10]: "; for(size_t i = 0; i < 10; ++i) std::cout << pd_path[i] << " "; std::cout << std::endl; std::cout << "posterior table column 0 - 9: " << std::endl; for(size_t r = 0; r < 2; ++r) { for(size_t c = 0; c < 10; ++c) { std::cout << pd_table(r, c) << "\t"; } std::cout << std::endl; } std::vector<unsigned> viterbi_path; double viterbi_ll = viterbi("example.seq", pi, A, B, viterbi_path); std::cout << "viterbi loglikelihood: " << viterbi_ll << std::endl; std::cout << "viterbi path[0:10]: "; for(size_t i = 0; i < 10; ++i) std::cout << viterbi_path[i] << " "; std::cout << std::endl; return 0; }