
/*
catalyzed_by_ECclass(ReactionID,EC_Number):-
	setof(EC_Num,
		EnzID^(catalyzed_by(ReactionID,EnzID,'IMPD'),
		part_of_catalyzing_class(EnzID,EnzClassID,'IMPD'),
		concept_accession(EnzClassID,'EC',EC_Num,false)),
	EC_Nums),
	member(EC_Number,EC_Nums).
*/


:-['day14_1500_kegg_no_equ.xml_modified.pl'].
:-['kegg_rno.pl'].
:-use_module(library(lists)).
:-use_module(library(terms)).
:- use_module(library(apply_macros)).
%:-['geneData.pl'].


forAll(P,Q):- \+ (P, \+Q).


mapGeneToEC(GeneID0,EC_number):-
	gene0(GeneID0,GeneDescription,_,_,_),	
	name(GeneDescription,GeneDescription_ASCIIcode),			name('(EC:', [S1,S2,S3,S4]),
	name(')',[EngSign]),
	append(Pre,[S1,S2,S3,S4|RestCode],GeneDescription_ASCIIcode),
	append(EC_numberCode,[EngSign|_],RestCode),
	name(EC_number,EC_numberCode).


translate_into_ECNumber(GeneID,EC_number,Change):-
	mapGeneToEC(GeneID,EC_number),!.
	%portray_clause(geneData(EC_number,Change)).

translate_into_ECNumber(GeneID0,EC_number,Change):-
	match(GeneID0,GeneID),
	is_encoded_by(ProteinID,GeneID,'IMPD'),
	is_a(EnzID,ProteinID,'IMPD'),
	part_of_catalyzing_class(EnzID,EnzClassID,'IMPD'),
	concept_accession(EnzClassID,'EC',EC_number,false).
	%portray_clause(geneData(EC_number,Change)).	

translate_into_ECNumber(GeneID0,[],Change):-
	Foo=0.









/*
geData(GeneName,Change):-
	relation_day14_1500mg(is_related_to,ProbeID,GeneID,Change,false),
	gene(GeneID,GeneDescription,_,_,_),
	concept_name(GeneID,GeneName,_).
*/

/* output middle geData, the description is used for linking
:-
tell('geneData.pl'),
forAll(geData(GeneDescription,Change),(portray_clause(geData(GeneDescription,Change)))),
told.
*/

c:-forAll(geData(GeneName,Change),check(GeneName)).


check(GeneName):-
	%(gene(GeneID,GeneDescription,_,_,_)->
	(concept_name(GeneID,GeneName,_)->
		write('********'),nl;
		portray_clause(GeneID),write
	).











/************** Mapping by name ***************/

match(GeneID0,GeneID):-
	concept_name0(GeneID0,GeneName,true),
	concept_name(GeneID,GeneName,true).

% there are same description, but different ID
%match(GeneID0,GeneID):-
%	gene0(GeneID0,GeneDescription,_,_,_),
%	gene(GeneID,GeneDescription,_,_,_).

match(GeneID0,GeneID):-
	concept_accession0(GeneID0,_,GeneName,false),
	concept_accession(GeneID,_,GeneName,false).


checkA(GeneID0):-
	(match(GeneID0,GeneID)->
		Foo=1; %write('********'),nl;
		gene0(GeneID0,GeneDescription,_,_,_),
		portray_clause(GeneID0),write(GeneDescription)
	).


translate(GeneID0,Change):-
	(match(GeneID0,GeneID)->
		portray_clause(day14_geneData(GeneID,Change));
		Foo=0
	).





:-
findall(GeneID-Change,relation_day14_1500mg(is_related_to,ProbeID,GeneID,Change,false),GE_data),
maplist(batchTranslateGEData,GE_data,NewGE_data0),
remove_duplicates(NewGE_data0,NewGE_data),
length(NewGE_data0,K0),
length(NewGE_data,K), write({K0,K}).

batchTranslateGEData(GeneID0-Change,GeneID-Change):-
	

%generateGeneData:-
:-
tell('geneData0pl'),
%forAll(relation_day14_1500mg(is_related_to,ProbeID,GeneID,Change,false),translate_into_ECNumber(GeneID,Change)),

told.
