#!/opt/local/bin/swipl -f


go :- 


	run(X,Report0), 
	maplist(report,Report0,Report),
	print([who=X|Report]),
	nl,
	fail.
go :- halt.

report(X/N0,X=N) :- N is round(N0*100).
report(X=N,X=N).

calc(Pos,Neg,Prec,Recall, Pf,Acc) :-
	Pf      is Pos/Neg * (1-Prec)/Prec * Recall, 
	D       is Recall * Pos,
	C       is Pf * Neg,
	A       is C*(1/Pf - 1),
	Acc     is (A+D)/(Neg + Pos). 

% [prec/Prec1,pf/0.806013, pd/10.0]
% [pf/1.61203, pd/20.0]
% [pf/2.41804, pd/30.0]
% [pf/3.22405, pd/40.0]
% [pf/4.03007, pd/50.0]
% [pf/4.83608, pd/60.0]
% [pf/5.64209, pd/70.0]
% [pf/6.44811, pd/80.0]
% [pf/7.25412, pd/90.0]
% [pf/8.06013, pd/100]

run(atwel,[prec/Prec,neg=Neg,pos=Pos,pf/Pf,pd/Recall,acc/Acc]) :-
	nl,
	member(Prec,[0.88,0.82,0.73]),
	N   = 5990, 
	Neg = 4881, 
	Pos is (N-Neg), 
	member(Recall,[0.65,0.7,0.75,0.8,0.85,0.9]), 
	calc(Pos,Neg,Prec,Recall,Pf,Acc).

run(delong,[prec/Prec,neg=Neg,pos=Pos,pf/Pf,pd/Recall,acc/Acc]) :-
	nl,
	Neg is 500,
	Pos is 500,
	member(Prec,[0.57,0.58,0.59]),
	member(Recall,[0.65,0.7,0.75,0.8,0.85,0.9]), 
	calc(Pos,Neg,Prec,Recall,Pf,Acc).

run(pittman,[prec/Prec,neg=Neg,pos=Pos,pf/Pf,pd/Recall,acc/Acc]) :-
	nl,
	N   = 21136,
        Neg = 17139,
        Pos = (N - Neg),
	member(Prec,[0.44,0.49,0.54,0.59,0.63]),
        between(1, 20, Recall1),
        Recall is 5*Recall1 /100,
	calc(Pos,Neg,Prec,Recall,Pf,Acc),
	0.78  =< Acc,
	Acc =< 0.81.

run(cm1Raw,[prec/Prec,neg=Neg,pos=Pos,pf/Pf,pd/Recall,acc/Acc]) :-
	nl,
	N=506,
	Pos is 0.1*506,
	Neg is N - Pos,
	Nums1 = [0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9],
	Nums = [0.5,0.6,0.7,0.8,0.9],
	member(Prec,Nums1),
	member(Recall,Nums),
	calc(Pos,Neg,Prec,Recall,Pf,Acc).

adam :- 
	adam1(Thing,N,PosP),
	adam2(N,PosP,Report0), 
	maplist(report,Report0,Report),
	print([who=Thing|Report]),
	nl,
	fail.
adam :- halt.

adam2(N,PosP,[prec/Prec,neg=Neg,pos=Pos,pf/Pf,pd/Recall,acc/Acc]) :-
	nl,
	Pos is PosP*N,
	Neg is N - Pos,
	Nums = [0.2,0.4,0.6,0.8],
	member(Prec,Nums),
	member(Recall,Nums),
	calc(Pos,Neg,Prec,Recall,Pf,Acc).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
adam1(cm1Raw,506,0.09).
adam1(cm1Dense,301,81/301).


:- adam.
