void read_HMM_spec(size_t &no_states, size_t &alphabet_size, std::istream &in) { read_token_or_exit(in, "no_states"); no_states = read_or_exit<size_t>(in, "number of states"); read_token_or_exit(in, "alphabet_size"); alphabet_size = read_or_exit<size_t>(in, "number of observables"); }
void Forwarder::read_data_structure_from_stream(std::ifstream &in) { read_token_or_exit(in, "orig_alphabet_size"); orig_alphabet_size = read_or_exit<size_t>(in, "original alphabet size"); read_token_or_exit(in, "orig_seq_length"); orig_seq_length = read_or_exit<size_t>(in, "original alphabet size"); read_token_or_exit(in, "nStates2alphabet_size"); while(!read_token_or_tell(in, "symbol2pair")) { size_t no_states = read_or_exit<size_t>(in, "no_states"); nStates2alphabet_size[no_states] = read_or_exit<size_t>(in, "alphabet_size"); } for(size_t i = orig_alphabet_size; i < nStates2alphabet_size.begin()->second; ++i) { unsigned pair_symbol = read_or_exit<unsigned>(in, "pair symbol"); unsigned left_symbol = read_or_exit<unsigned>(in, "left symbol"); unsigned right_symbol = read_or_exit<unsigned>(in, "right symbol"); symbol2pair[pair_symbol] = s_pair(left_symbol, right_symbol); } }
void read_HMM(Matrix &result_pi, Matrix &result_A, Matrix &result_B, std::istream &in) { size_t no_states; size_t alphabet_size; read_HMM_spec(no_states, alphabet_size, in); read_token_or_exit(in, "pi"); result_pi.reset(no_states, 1); for(size_t i = 0; i < no_states; ++i) result_pi(i, 0) = read_or_exit<double>(in, "initial probability"); read_token_or_exit(in, "A"); result_A.reset(no_states, no_states); for(size_t from = 0; from < no_states; ++from) { for(size_t to = 0; to < no_states; ++to) result_A(from, to) = read_or_exit<double>(in, "transition probability"); } read_token_or_exit(in, "B"); result_B.reset(no_states, alphabet_size); for(size_t i = 0; i < no_states; ++i) { for(size_t ob = 0; ob < alphabet_size; ++ob) result_B(i, ob) = read_or_exit<double>(in, "emission probability"); } }