# This makefile runs all tests, then it builds the paper

SRC_DIR = src

DATASETS = nr gpcr ic e
METHODS = adjacent
METHODS += adjacent-cheat
METHODS += adjacent-slighter-cheat
#METHODS += adjacent-cheat-tune
SETTINGS = pairs cols
CVTYPES = loo 5fold 10fold

#MATLAB = matlab -r
MATLAB = octave -q --eval

.PHONY: all
#.DELETE_ON_ERROR:

all: raw-cv-results latex-cv-results

#-------------------------------------------------------------------------------
# Calculating raw cross validation results
#-------------------------------------------------------------------------------

results:
	mkdir -p $@

# for each dataset and method, run cross validate in two forms

.PHONY: raw-cv-results
raw-cv-results: results

define RAW_CV_RESULTS_template
raw-cv-results: results/cv-$(1)-$(2)-$(3)-$(4).mat
results/cv-$(1)-$(2)-$(3)-$(4).mat:
	$(MATLAB) "addpath $(SRC_DIR);\
	           results=run_cross_validate('$(4)','$(3)','num_folds','$(1)', 'cv_type','$(2)');\
	           save -v6 $(pwd)$$@ results;\
	           exit"
endef

$(foreach cvtype,$(CVTYPES), \
 $(foreach setting,$(SETTINGS), \
  $(foreach dataset,$(DATASETS), \
   $(foreach method,$(METHODS), \
    $(eval $(call RAW_CV_RESULTS_template,$(cvtype),$(setting),$(dataset),$(method))) \
 ))))

#-------------------------------------------------------------------------------
# Summarize cross validation results
#-------------------------------------------------------------------------------

.PHONY: latex-cv-results

define TABLE_CV_RESULTS_template
latex-cv-results: paper/table-baseline-$(1)-$(2).tex
paper/table-baseline-$(1)-$(2).tex: $(foreach dataset,$(DATASETS),$(foreach method,$(METHODS), results/cv-$(1)-$(2)-$(dataset)-$(method).mat))
paper/table-baseline-$(1)-$(2).tex:
	$(MATLAB) "addpath $(SRC_DIR);\
	           print_cv_results_latex('baseline','setting','$(1)-$(2)','filename','$(pwd)$$@');\
	           exit"
endef

$(foreach cvtype,$(CVTYPES), \
 $(foreach setting,$(SETTINGS), \
  $(eval $(call TABLE_CV_RESULTS_template,$(cvtype),$(setting))) \
 ))

