BDIR =			/usr/local/utils/nbu
GRAPH =			/n/pun/1/backup-graph

GETDATA =		$(BDIR)/getdata
GNUPLOT =		gnuplot
PRINTER =		np
PSMERGE =		$(GRAPH/merge-ps-files
MKGR =			$(GRAPH)/mkgr
MAKE =			make -f $(GRAPH)/Makefile
MERGE =			$(GRAPH)/Do-merged
RECENT =		$(GRAPH)/Do-recent
HOSTS =			$(GRAPH)/Do-hosts

# Where the graph stuff goes
CURRENTDIR =		$(GRAPH)/Current
MERGEDDIR =		$(GRAPH)/Merged
RECENTDIR =		$(GRAPH)/Recent

all:	current merged recent

current:
	cd $(CURRENTDIR) ; rm -f *.gp *.ps ; $(GETDATA) ; $(MAKE) graphs

merged:
	$(MERGE)
	cd $(MERGEDDIR) ; rm -f *.gp *.ps ; $(MAKE) graphs

recent:
	$(RECENT)
	cd $(RECENTDIR) ; rm -f *.gp *.ps ; $(MAKE) graphs

#
# Make the graphs - gnuplot graph 
# files for each graph, postscript for printing.
#
# graphs are named by what the Y axis is (runtime, runsize) and what 
# the X axis represents (relative ranking, tape ID, etc).  So 
# "runtime-rank" is a graph of run times (durations) plotted by 
# relative ranking (greatest to least).
#
graphs:	runtime-rank			runtime-rank-level0	\
	runtime-rank-level2		runtime-rank-level9	\
	runtime-rank-lines					\
	runtime-runid			runsize-rank		\
	runsize-rank-level0		runsize-rank-level2	\
	runsize-rank-level9		runsize-rank-lines	\
	runsize-runid						\
	make-hosts			uses-tape

#
# Print the postscript output.
#
# merge-ps-files merges a bunch of single page postscript files into
# one.  up takes a postscript file and rescales and shuffles pages to 
# fit several on a piece of paper.  In this case, 6.
#
print:
	$(PSMERGE) *.ps | /usr/unsup/bin/up -n 6up | lpr -P $(PRINTER)

#
# Trigger to clean things up
#
clean:
	rm -f .maketime* *.dat *.ps *.gp *raw *.size-date

#
# Individual graphs...
#
make-hosts:
	$(HOSTS)

runtime-rank:		rank-duration-level0.dat \
			rank-duration-level2.dat \
			rank-duration-level9.dat
	$(MKGR) -P -y 8 "Run duration" "Rank" "Duration (hours)" 		\
		rank-duration-level0.dat	"level 0"	imp	1	\
		rank-duration-level2.dat	"level 2"	imp	2	\
		rank-duration-level9.dat	"level 9"	imp	8	\
		> runtime-rank.gp
	$(MKGR) -p runtime-rank.ps -y 8 "Run duration" "Rank" "Duration (hours)"\
		rank-duration-level0.dat	"level 0"	imp	1	\
		rank-duration-level2.dat	"level 2"	imp	2	\
		rank-duration-level9.dat	"level 9"	imp	8	\
		| $(GNUPLOT)

runtime-rank-level0:	duration-level0.dat
	$(MKGR) -P -y 8 "Duration of level 0 runs sorted by length" "Rank"	\
		"Duration (hours)"						\
		duration-level0.dat		""		imp	1	\
		> runtime-rank-level0.gp
	$(MKGR) -p runtime-rank-level0.ps -y 8					\
		"Duration of level 0 runs sorted by length" "Rank" "Duration (hours)"\
		duration-level0.dat		""		imp	1	\
		| $(GNUPLOT)

runtime-rank-level2:	duration-level2.dat
	$(MKGR) -P -y 8 "Duration of level 2 runs sorted by length" "Rank"	\
		"Duration (hours)"						\
		duration-level2.dat		""		imp	2	\
		> runtime-rank-level2.gp
	$(MKGR) -p runtime-rank-level2.ps -y 8 					\
		"Duration of level 2 runs sorted by length" "Rank"		\
		"Duration (hours)"						\
		duration-level2.dat		""		imp	2	\
		| $(GNUPLOT)

runtime-rank-level9:	duration-level9.dat
	$(MKGR) -P -y 8 "Duration of level 9 runs sorted by length" "Rank"	\
		"Duration (hours)"						\
		duration-level9.dat		""		imp	8	\
		> runtime-rank-level9.gp
	$(MKGR) -p runtime-rank-level9.ps -y 8					\
		"Duration of level 9 runs sorted by length" "Rank"		\
		"Duration (hours)"						\
		duration-level9.dat		""		imp	8	\
		| $(GNUPLOT)

runtime-rank-lines:	duration-level0.dat \
			duration-level2.dat \
			duration-level9.dat
	$(MKGR) -P -y 8 "Duration" "Rank" "Duration (hours)"			\
		duration-level0.dat		"level 0"	lines	1	\
		duration-level2.dat		"level 2"	lines	2	\
		duration-level9.dat		"level 9"	lines	8	\
		> runtime-rank-lines.gp
	$(MKGR) -p runtime-rank-lines.ps -y 8					\
		"Duration" "Rank" "Duration (hours)"				\
		duration-level0.dat		"level 0"	lines	1	\
		duration-level2.dat		"level 2"	lines	2	\
		duration-level9.dat		"level 9"	lines	8	\
		| $(GNUPLOT)

runsize-runid:		runid-size-level0.dat \
			runid-size-level2.dat \
			runid-size-level9.dat
	$(MKGR) -P -z "Run size by Run ID" "Run ID" "Size (kilobytes)"		\
		runid-size-level0.dat		"level 0"	imp	1	\
		runid-size-level2.dat		"level 2"	imp	2	\
		runid-size-level9.dat		"level 9"	imp	8	\
		> runsize-runid.gp
	$(MKGR) -p runsize-runid.ps -z 						\
		"Run size by Run ID" "Run ID" "Size (kilobytes)"		\
		runid-size-level0.dat		"level 0"	imp	1	\
		runid-size-level2.dat		"level 2"	imp	2	\
		runid-size-level9.dat		"level 9"	imp	8	\
		| $(GNUPLOT)

runsize-rank:		rank-size-level0.dat \
			rank-size-level2.dat \
			rank-size-level9.dat
	$(MKGR) -P -z "Run size" "Rank" "Size (kilobytes)"			\
		rank-size-level0.dat		"level 0"	imp	1	\
		rank-size-level2.dat		"level 2"	imp	2	\
		rank-size-level9.dat		"level 9"	imp	8	\
		> runsize-rank.gp
	$(MKGR) -p runsize-rank.ps -z 						\
		"Run size" "Rank" "Size (kilobytes)"				\
		rank-size-level0.dat		"level 0"	imp	1	\
		rank-size-level2.dat		"level 2"	imp	2	\
		rank-size-level9.dat		"level 9"	imp	8	\
		| $(GNUPLOT)

runsize-rank-level0:	size-level0.dat
	$(MKGR) -P -y 2.5E+6 "Size of level 0 runs sorted by size" "Rank"	\
		"Size (kilobytes)"						\
		size-level0.dat			""		imp	1	\
		> runsize-rank-level0.gp
	$(MKGR) -p runsize-rank-level0.ps -y 2.5E+6 				\
		"Size of level 0 runs sorted by size" "Rank"			\
		"Size (kilobytes)"						\
		size-level0.dat			""		imp	1	\
		| $(GNUPLOT)

runsize-rank-level2:	size-level2.dat
	$(MKGR) -P -y 2.5E+6 "Size of level 2 runs sorted by size" "Rank"	\
		"Size (kilobytes)"						\
		size-level2.dat			""		imp	2	\
		> runsize-rank-level2.gp
	$(MKGR) -p runsize-rank-level2.ps -y 2.5E+6 				\
		"Size of level 2 runs sorted by size" "Rank"			\
		"Size (kilobytes)"						\
		size-level2.dat			""		imp	2	\
		| $(GNUPLOT)

runsize-rank-level9:	size-level9.dat
	$(MKGR) -P -y 2.5E+6 "Size of level 9 runs sorted by size" "Rank"	\
		"Size (kilobytes)"						\
		size-level9.dat			""		imp	8	\
		> runsize-rank-level9.gp
	$(MKGR) -p runsize-rank-level9.ps -y 2.5E+6 				\
		"Size of level 9 runs sorted by size" "Rank"			\
		"Size (kilobytes)"						\
		size-level9.dat			""		imp	8	\
		| $(GNUPLOT)

runsize-rank-lines:	size-level0.dat \
			size-level2.dat \
			size-level9.dat
	$(MKGR) -P -y 2.5E+6  "Run size" "Rank" "Size (kilobytes)"		\
		size-level0.dat			"level 0"	lines	1	\
		size-level2.dat			"level 2"	lines	2	\
		size-level9.dat			"level 9"	lines	8	\
		> runsize-rank-lines.gp
	$(MKGR) -p runsize-rank-lines.ps -y 2.5E+6  				\
		"Run size" "Rank" "Size (kilobytes)"				\
		size-level0.dat			"level 0"	lines	1	\
		size-level2.dat			"level 2"	lines	2	\
		size-level9.dat			"level 9"	lines	8	\
		| $(GNUPLOT)

runtime-runid:		runid-duration-level0.dat \
			runid-duration-level2.dat \
			runid-duration-level9.dat
	$(MKGR) -P -z "Run duration by Run ID" "Run ID" "Duration (hours)"	\
		runid-duration-level0.dat	"level 0"	imp	1	\
		runid-duration-level2.dat	"level 2"	imp	2	\
		runid-duration-level9.dat	"level 9"	imp	8	\
		> runtime-runid.gp
	$(MKGR) -p runtime-runid.ps -z 						\
		"Run duration by Run ID" "Run ID" "Duration (hours)"		\
		runid-duration-level0.dat	"level 0"	imp	1	\
		runid-duration-level2.dat	"level 2"	imp	2	\
		runid-duration-level9.dat	"level 9"	imp	8	\
		| $(GNUPLOT)

uses-tape:		tape-uses.dat
	$(MKGR) -P -z "Number of uses by rank" "Rank" "Number of Uses"		\
		tape-uses.dat			""		imp	1	\
		> uses-tape.gp
	$(MKGR) -p uses-tape.ps -z 						\
		"Number of uses by rank" "Rank" "Number of Uses"		\
		tape-uses.dat			""		imp	1	\
		| $(GNUPLOT)
	
#
# How to make the various data files.
#

tape.raw:		
run.raw:		

rank-run-chain-level-time-duration.dat:	run.raw
	sort +4 -n -r < run.raw | awk '{print $$1, $$2, $$3, $$4, $$5}' | cat -n > rank-run-chain-level-time-duration.dat

rank-duration-level0.dat:	rank-run-chain-level-time-duration.dat
	awk '$$4 == 0 { print $$1 " " $$6 / (60 * 60) }' < rank-run-chain-level-time-duration.dat > $@

rank-duration-level2.dat:	rank-run-chain-level-time-duration.dat
	awk '$$4 == 2 { print $$1 " " $$6 / (60 * 60) }' < rank-run-chain-level-time-duration.dat > $@

rank-duration-level9.dat:	rank-run-chain-level-time-duration.dat
	awk '$$4 == 9 { print $$1 " " $$6 / (60 * 60) }' < rank-run-chain-level-time-duration.dat > $@

duration-level0.dat:		rank-duration-level0.dat
	awk '{print $$2}' < rank-duration-level0.dat | cat -n > $@

duration-level2.dat:		rank-duration-level2.dat
	awk '{print $$2}' < rank-duration-level2.dat | cat -n > $@

duration-level9.dat:		rank-duration-level9.dat
	awk '{print $$2}' < rank-duration-level9.dat | cat -n > $@

runid-duration-level0.dat:	rank-run-chain-level-time-duration.dat
	awk '$$4 == 0 { print $$2 " " $$6 / (60 * 60) }' < rank-run-chain-level-time-duration.dat > $@

runid-duration-level2.dat:	rank-run-chain-level-time-duration.dat
	awk '$$4 == 2 { print $$2 " " $$6 / (60 * 60) }' < rank-run-chain-level-time-duration.dat > $@

runid-duration-level9.dat:	rank-run-chain-level-time-duration.dat
	awk '$$4 == 9 { print $$2 " " $$6 / (60 * 60) }' < rank-run-chain-level-time-duration.dat > $@

rank-run-chain-level-time-size.dat:	run.raw
	sort +5 -n -r < run.raw | awk '{ print $$1, $$2, $$3, $$4, $$6}' | cat -n > $@

rank-size-level0.dat:		rank-run-chain-level-time-size.dat
	awk '$$4 == 0 { print $$1 " " $$6 }' < rank-run-chain-level-time-size.dat > $@

rank-size-level2.dat:		rank-run-chain-level-time-size.dat
	awk '$$4 == 2 { print $$1 " " $$6 }' < rank-run-chain-level-time-size.dat > $@

rank-size-level9.dat:		rank-run-chain-level-time-size.dat
	awk '$$4 == 9 { print $$1 " " $$6 }' < rank-run-chain-level-time-size.dat > $@

size-level0.dat:		rank-size-level0.dat
	awk '{print $$2}' < rank-size-level0.dat | cat -n > $@

size-level2.dat:		rank-size-level2.dat
	awk '{print $$2}' < rank-size-level2.dat | cat -n > $@

size-level9.dat:		rank-size-level9.dat
	awk '{print $$2}' < rank-size-level9.dat | cat -n > $@

tape-uses.dat:			tape.raw
	awk '{print $$2}' < tape.raw | sort -n -r > $@

runid-size-level0.dat:	rank-run-chain-level-time-size.dat
	awk '$$4 == 0 { print $$2 " " $$6 }' < rank-run-chain-level-time-size.dat > $@

runid-size-level2.dat:	rank-run-chain-level-time-size.dat
	awk '$$4 == 2 { print $$2 " " $$6 }' < rank-run-chain-level-time-size.dat > $@

runid-size-level9.dat:	rank-run-chain-level-time-size.dat
	awk '$$4 == 9 { print $$2 " " $$6 }' < rank-run-chain-level-time-size.dat > $@
