

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



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):-
	mapGeneToEC(GeneID,EC_number),!.
	%portray_clause(geneData(EC_number,Change)).

translate_into_ECNumber(GeneID0,EC_number):-
	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,[]):-
	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.
*/


%:-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,'NC_GE',GeneName,false),
	concept_accession(GeneID,'NC_GE',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
	).


batchTranslateGEData(GeneID0-Change,EC_number-Change):-
	translate_into_ECNumber(GeneID0,EC_number).

/*
:-
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}).
*/


checkMisMathchName(ProbeID,GeneID0):-
	concept_accession0(GeneID0,'NC_GE',GeneName,false),
	
	%concept_name0(GeneID0,GeneName,true),
	%concept_ass
	(concept_accession(GeneID,'NC_GE',GeneName,false)->	%concept_name(GeneID,GeneName,true)->
		Foo=0;
		portray_clause({ProbeID,GeneID0,GeneName})
	).


:-
tell('DismatchName_concept_accession.txt'),
forAll(relation_day14_1500mg(is_related_to,ProbeID,GeneID,Change,false),checkMisMathchName(ProbeID,GeneID)),
told.




