#!/bin/bash
#
# Copyright (c) 2011, Intel Corporation.
# All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
# DESCRIPTION
# This script operates on the .dat file generated by bb-matrix.sh. It tolerates
# the header by skipping the first line, but error messages and bad data records
# need to be removed first. It will generate three views of the plot, and leave
# an interactive view open for further analysis.
#
# AUTHORS
# Darren Hart <dvhart@linux.intel.com>
#

# Setup the defaults
DATFILE="bb-matrix.dat"
XLABEL="BB_NUMBER_THREADS"
YLABEL="PARALLEL_MAKE"
FIELD=3
DEF_TITLE="Elapsed Time (seconds)"
PM3D_FRAGMENT="unset surface; set pm3d at s hidden3d 100"
SIZE="640,480"

function usage {
CMD=$(basename $0)
cat <<EOM
Usage: $CMD [-d datfile] [-f field] [-h] [-t title] [-w]
  -d datfile    The data file generated by bb-matrix.sh (default: $DATFILE)
  -f field      The field index to plot as the Z axis from the data file
                (default: $FIELD, "$DEF_TITLE")
  -h            Display this help message
  -s W,H        PNG and window size in pixels (default: $SIZE)
  -t title      The title to display, should describe the field (-f) and units
                (default: "$DEF_TITLE")
  -w            Render the plot as wireframe with a 2D colormap projected on the
                XY plane rather than as the texture for the surface
EOM
}

# Parse and validate arguments
while getopts "d:f:hs:t:w" OPT; do
	case $OPT in
	d)
		DATFILE="$OPTARG"
		;;
	f)
		FIELD="$OPTARG"
		;;
	h)
		usage
		exit 0
		;;
	s)
		SIZE="$OPTARG"
		;;
	t)
		TITLE="$OPTARG"
		;;
	w)
		PM3D_FRAGMENT="set pm3d at b"
		W="-w"
		;;
	*)
		usage
		exit 1
		;;
	esac
done

# Ensure the data file exists
if [ ! -f "$DATFILE" ]; then
	echo "ERROR: $DATFILE does not exist"
	usage
	exit 1
fi
PLOT_BASENAME=${DATFILE%.*}-f$FIELD$W

# Set a sane title
# TODO: parse the header and define titles for each format parameter for TIME(1)
if [ -z "$TITLE" ]; then
	if [ ! "$FIELD" == "3" ]; then
		TITLE="Field $FIELD"
	else
		TITLE="$DEF_TITLE"
	fi
fi

# Determine the dgrid3d mesh dimensions size
MIN=$(tail -n +2 "$DATFILE" | cut -d ' ' -f 1 | sed 's/^0*//' | sort -n | uniq | head -n1)
MAX=$(tail -n +2 "$DATFILE" | cut -d ' ' -f 1 | sed 's/^0*//' | sort -n | uniq | tail -n1)
BB_CNT=$[${MAX} - $MIN + 1]
MIN=$(tail -n +2 "$DATFILE" | cut -d ' ' -f 2 | sed 's/^0*//' | sort -n | uniq | head -n1)
MAX=$(tail -n +2 "$DATFILE" | cut -d ' ' -f 2 | sed 's/^0*//' | sort -n | uniq | tail -n1)
PM_CNT=$[${MAX} - $MIN + 1]


(cat <<EOF
set title "$TITLE"
set xlabel "$XLABEL"
set ylabel "$YLABEL"
set style line 100 lt 5 lw 1.5
$PM3D_FRAGMENT
set dgrid3d $PM_CNT,$BB_CNT splines
set ticslevel 0.2

set term png size $SIZE
set output "$PLOT_BASENAME.png"
splot "$DATFILE" every ::1 using 1:2:$FIELD with lines ls 100

set view 90,0
set output "$PLOT_BASENAME-bb.png"
replot

set view 90,90
set output "$PLOT_BASENAME-pm.png"
replot

set view 60,30
set term wxt size $SIZE
replot
EOF
) | gnuplot --persist
