| 
									
										
										
										
											2011-05-01 22:58:35 +01:00
										 |  |  | #!/usr/bin/yap -L -- | 
					
						
							|  |  |  | #. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | :- initialization(main). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | :- ensure_loaded(library('clpbn/viterbi')). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | :- use_module(fasta, | 
					
						
							| 
									
										
										
										
											2012-12-19 18:22:47 +00:00
										 |  |  | 		[fa2atoms/3]). | 
					
						
							| 
									
										
										
										
											2011-05-01 22:58:35 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | :- use_module(library(lists), | 
					
						
							| 
									
										
										
										
											2012-12-19 18:22:47 +00:00
										 |  |  | 		[nth/3, | 
					
						
							|  |  |  | 		 append/3 | 
					
						
							|  |  |  | 		]). | 
					
						
							| 
									
										
										
										
											2011-05-01 22:58:35 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | :- [plan7]. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | :- ['globin.yap']. | 
					
						
							|  |  |  | %:- ['hmmer_b.1.18.1.yap']. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | :- dynamic len/1, emission/2. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | main :- | 
					
						
							|  |  |  | 	unix(argv([Sequence])), | 
					
						
							|  |  |  | 	fa2atoms(Sequence, L, [a]), | 
					
						
							|  |  |  | 	run_model([a|L],_Trace). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | artemia :- | 
					
						
							|  |  |  | 	fa2atoms('Artemia.fa', L, [a]), | 
					
						
							|  |  |  | 	run_model([a|L],_Trace). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | % given a string, construct a model | 
					
						
							|  |  |  | run_model(String,Trace) :- | 
					
						
							|  |  |  | 	viterbi(s(0,_),t(_,_),String,Trace), | 
					
						
							|  |  |  | 	out(Trace,String). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | write_keys([]). | 
					
						
							|  |  |  | write_keys([V|Vars0]) :- | 
					
						
							|  |  |  | 	clpbn:get_atts(V,[key(K)]), !, | 
					
						
							|  |  |  | 	write(K), nl, | 
					
						
							|  |  |  | 	write_keys(Vars0). | 
					
						
							|  |  |  | write_keys([_|Vars0]) :- | 
					
						
							|  |  |  | 	write(no_key),nl, | 
					
						
							|  |  |  | 	write_keys(Vars0). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | convert2emissions([],_). | 
					
						
							|  |  |  | convert2emissions([E|String],I0) :- | 
					
						
							|  |  |  | 	I is I0+1, | 
					
						
							|  |  |  | 	assert(emission(I,E)), | 
					
						
							|  |  |  | 	convert2emissions(String, I). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | out([],_). | 
					
						
							|  |  |  | out([State|Trace],String) :- | 
					
						
							|  |  |  | 	out_state(State,String,RString), | 
					
						
							|  |  |  | 	out(Trace,RString). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | out_state(s(_),String,String). | 
					
						
							|  |  |  | out_state(n(_),[_|String],String). | 
					
						
							|  |  |  | out_state(j(_),[_|String],String). | 
					
						
							|  |  |  | out_state(c(_),[_|String],String). | 
					
						
							|  |  |  | out_state(t(_),String,String). | 
					
						
							|  |  |  | out_state(b(Pos),String,String) :- | 
					
						
							|  |  |  | 	format('START MATCH at ~d~n', [Pos]). | 
					
						
							|  |  |  | out_state(d(_,State),String,String) :- | 
					
						
							|  |  |  | 	find_consensus(State,Consensus), | 
					
						
							|  |  |  | 	format('     -~a~n', [Consensus]). | 
					
						
							|  |  |  | out_state(i(_,_),[Code|String],String) :- | 
					
						
							|  |  |  | 	to_upper(Code,UCode), | 
					
						
							|  |  |  | 	format('    ~a+~n', [UCode]). | 
					
						
							|  |  |  | out_state(m(_,State),[Code|String],String) :- | 
					
						
							|  |  |  | 	to_upper(Code,UCode), | 
					
						
							|  |  |  | 	find_consensus(State,Consensus), | 
					
						
							|  |  |  | 	find_match_type(State,Code,Consensus,MatchType), | 
					
						
							|  |  |  | 	format('    ~a~a~a~n', [UCode,MatchType,Consensus]). | 
					
						
							|  |  |  | out_state(e(Pos),String,String) :- | 
					
						
							|  |  |  | 	format('END MATCH at ~d~n', [Pos]). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | to_upper(A,U) :- | 
					
						
							|  |  |  | 	atom_codes(A,[C]), | 
					
						
							|  |  |  | 	( C =< "A", C>="Z" -> | 
					
						
							|  |  |  | 	  U = A | 
					
						
							|  |  |  | 	; | 
					
						
							|  |  |  | 	  NC is C + ("A"-"a"), | 
					
						
							|  |  |  | 	  atom_codes(U,[NC]) | 
					
						
							|  |  |  | 	). | 
					
						
							|  |  |  | find_consensus(State,Consensus) :- | 
					
						
							|  |  |  | 	consensus(State,I), | 
					
						
							|  |  |  | 	hmm_domain(Type), | 
					
						
							|  |  |  | 	domain_vals(Type,Vals), | 
					
						
							|  |  |  | 	arg(I, Vals, Consensus). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | find_match_type(_,Code,Code,'=') :- !. | 
					
						
							|  |  |  | find_match_type(State,Code,_,'^') :- | 
					
						
							|  |  |  | 	me_cpt(State,Probs,_,_), | 
					
						
							|  |  |  | 	hmm_domain(Type), | 
					
						
							|  |  |  | 	domain_vals(Type,Vals), | 
					
						
							|  |  |  | 	find_prob_for_code(Vals,Code,Probs,Prob), | 
					
						
							|  |  |  | 	Prob >= 0, !. | 
					
						
							|  |  |  | find_match_type(_,_,_,' '). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | find_prob_for_code(Vals,Code,Probs,Prob) :- | 
					
						
							|  |  |  | 	Vals =.. [_|L], | 
					
						
							|  |  |  | 	once(nth(I,L,Code)), | 
					
						
							|  |  |  | 	arg(I,Probs,Prob). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | domain_vals(aminoacids,domain(a,  c,  d,  e,  f,  g,  h,  i,  k,  l,  m,  n,  p,  q,  r,  s,  t,  v,  w,  y)). | 
					
						
							|  |  |  | domain_vals(bool,domain(t,f)). | 
					
						
							|  |  |  | domain_vals(bases,domain(a,c,g,t)). | 
					
						
							|  |  |  | domain_vals([A|B],Domain) :- | 
					
						
							|  |  |  | 	Domain =.. [domain,A|B]. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | start(S) :- | 
					
						
							|  |  |  | 	s_state(0,S). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | end(Items,E) :- | 
					
						
							|  |  |  | 	t_state(Items,E). | 
					
						
							|  |  |  | 
 |