% insert theory as a whole
% input is a list with [1-[...],2-[...] ...]

/*
insertTheories([],Tree,Tree).
insertTheories([EI-OneEITRecord|All_T_Records],TreeSoFar,Tree):-
	insertOneEI_Ts(OneEITRecord,EI,TreeSoFar,NTreeSoFar),
	insertTheories(All_T_Records,NTreeSoFar,Tree).


insertOneEI_Ts([],EI,Tree,Tree).
insertOneEI_Ts([Length-TI|TIs],EI,TreeSoFar,Tree):-
	(rb_lookup(TI,EI_List,TreeSoFar)->
		%TI is there-> previous example, or the same example
		(append(Pre,[{EI,Length0}|Post],EI_List)->
			(Length < Length0 ->
				append(Pre,[{EI,Length}|Post],NewEI_List),
				rb_update(TreeSoFar,TI,NewEI_List,NTreeSoFar);
				NTreeSoFar=TreeSoFar
			);
			rb_update(TreeSoFar,TI,[{EI,Length}|EI_List],NTreeSoFar)
		);
				
		rb_insert(TreeSoFar,TI,[{EI,Length}],NTreeSoFar)
	),	
	insertOneEI_Ts(TIs,EI,NTreeSoFar,Tree).
*/







% decompose the theory into clauses, and insert clauses
insertTheories([],Tree,Tree).
insertTheories([EI-OneEITRecord|All_T_Records],TreeSoFar,Tree):-
	insertOneEI_Ts(OneEITRecord,EI,TreeSoFar,NTreeSoFar),
	insertTheories(All_T_Records,NTreeSoFar,Tree).



insertOneEI_Ts([],EI,Tree,Tree).
insertOneEI_Ts([TI|TIs],EI,TreeSoFar,Tree):-
	insertClas(TI,EI,TreeSoFar,NTreeSoFar),
	insertOneEI_Ts(TIs,EI,NTreeSoFar,Tree).

insertClas([],EI,Tree,Tree).
insertClas([ClaI|ClaIs],EI,TreeSoFar,Tree):-
	(rb_lookup(ClaI,EI_List,TreeSoFar)->
		%ClaI is there-> previous example, or the same example
		(append(Pre,[EI|Post],EI_List)->
			NTreeSoFar=TreeSoFar;
			rb_update(TreeSoFar,ClaI,[EI|EI_List],NTreeSoFar)
		);
				
		rb_insert(TreeSoFar,ClaI,[EI],NTreeSoFar)
	),	
	insertClas(ClaIs,EI,NTreeSoFar,Tree).


scoreCountedT(T,ScoredT):-
		T=[enzyme_state-{Sign,EC_Number,Change}]-CoveredEI,
		length(CoveredEI,Coverage),
		Score0 is Coverage*Sign,
		Score0=Score,%divide_by_length(LengthedEI,Score0,Score),
		ScoredT= Coverage-Score-T.

