
CC=g++
OPTIONS=-O3

object_files = CPT.o CPDTree.o BayesNet.o OptionParser.o gaussian.o datafile.o mixture_constraints.o 
unit_tests = test-gaussian test-datafile test-TTest test-GMGenerator
program_files = caf cfv froles genstates grn

all: ${object_files} ${unit_tests} ${program_files}

clean:
	/bin/rm -rf ${object_files} ${unit_tests} grn-tmp.* core 
rm_all:
	/bin/rm -rf ${program_files} ${object_files} ${unit_tests} grn-tmp.* core a.out
transfer:  rm_all
build:  rm_all all

# object files
OptionParser.o:  OptionParser.h OptionParser.cpp
	${CC} ${OPTIONS} -c OptionParser.cpp

CPT.o:	probability.h CPD.h CPT.h CPT.cpp
	${CC} ${OPTIONS} -c CPT.cpp

CPDTree.o:	probability.h CPD.h CPDTree.h CPDTree.cpp
	${CC} ${OPTIONS} -c CPDTree.cpp

BayesNet.o:	probability.h CPD.h BayesNet.h BayesNet.cpp
	${CC} ${OPTIONS} -c BayesNet.cpp

gaussian.o:	gaussian.h gaussian.cpp
	${CC} ${OPTIONS} -c gaussian.cpp

datafile.o:  datafile.h datafile.cpp 
	${CC} ${OPTIONS} -c datafile.cpp

mixture_constraints.o:	mixture_constraints.h mixture_constraints.cpp gaussian.o
	${CC} ${OPTIONS} -c mixture_constraints.cpp
	
# program files

caf: caf.cpp datafile.o OptionParser.o
	${CC} ${OPTIONS} -o caf caf.cpp datafile.o OptionParser.o

cfv: cfv.cpp datafile.o OptionParser.o
	${CC} ${OPTIONS} -o cfv cfv.cpp datafile.o OptionParser.o

froles:	froles.cpp datafile.o OptionParser.o
	${CC} ${OPTIONS} -o froles froles.cpp datafile.o OptionParser.o

genstates:  genstates.cpp datafile.o gaussian.o GMGenerator.h mixture_constraints.o OptionParser.o
	${CC} ${OPTIONS} -o genstates genstates.cpp datafile.o gaussian.o mixture_constraints.o OptionParser.o

grn:  grn.cpp datafile.o gaussian.o BayesNet.o CPT.o CPDTree.o OptionParser.o
	${CC} ${OPTIONS} -o grn grn.cpp gaussian.o datafile.o BayesNet.o CPT.o CPDTree.o OptionParser.o

# unit tests
test-datafile:	test-datafile.cpp datafile.o OptionParser.o gaussian.o
	${CC} ${OPTIONS} -o test-datafile test-datafile.cpp datafile.o OptionParser.o gaussian.o

test-TTest:  test-TTest.cpp TTest.h OptionParser.o gaussian.o
	${CC} ${OPTIONS} -o test-TTest test-TTest.cpp OptionParser.o gaussian.o

test-gaussian:  test-gaussian.cpp gaussian.o OptionParser.o
	${CC} ${OPTIONS} -o test-gaussian test-gaussian.cpp gaussian.o OptionParser.o

test-GMGenerator:  test-GMGenerator.cpp OptionParser.o mixture_constraints.o gaussian.o
	${CC} ${OPTIONS} -o test-GMGenerator test-GMGenerator.cpp OptionParser.o mixture_constraints.o gaussian.o

# run tests (optional)
run-test-grn: grn
	./grn -r input/test/test.roles -c input/test/test.conditions -x input/test/cfv/test.assay.0.trainset -s input/test/cfv/test.assay.0.trainset.states -t input/test/cfv/test.assay.0.testset -d grn-tmp.grn.test.dot -B0 -m1 -v
	dot -Tps grn-tmp.grn.test.dot > grn-tmp.grn.test.ps
	gv grn-tmp.grn.test.ps &

