#!/bin/bash

set -e

declare -a toclean
cleanup() {
    test ${#toclean[@]} -gt 0 && rm -f "${toclean[@]}"
}
trap cleanup EXIT

tmpA=$(mktemp)
toclean+=( $tmpA )
tmpB=$(mktemp)
toclean+=( $tmpB )

debug=0
if [ "$1" = "-d" ]; then
    debug=1
    shift
fi

if_debug() {
    [ $debug = 1 ] && eval "$@"
}

RE=${1:-_R[1N]_}

grep -e "$RE" alldata > $tmpA

for type in {I,R}{1,N}; do
    for ratio in 10:1 1:1 1:10; do
        for platf in cluster grid; do
            for topo in line torus hcube; do
                < $tmpA awk \
                    -v re="^results_${type}_${ratio}/plat_${platf}[0-9]+/topo_${topo}" \
'
$0 ~ re {
    split($1, cfg, "/");
    platf=cfg[2];
    algo=cfg[4];
    size=substr(platf, match(platf, "[0-9]"));
    idle=$4;
    conv_avg=$5;
    conv_max=$6;
    if (conv_max > 0.0)
        print algo, size, idle, conv_avg, conv_max;
}
' \
                | sort -k1,1r -k2,2n \
                | awk \
'
{
    if (NR == 1) {
        printf("%s\n", $1);
    } else if ($1 != prev) {
        printf("\n\n%s\n", $1);
    }
    prev=$1;
    $1="";
    print;
}
' \
                > $tmpB
                title="results_${type}_${ratio}/plat_${platf}/topo_${topo}"
                if [ ! -s $tmpB ]; then
                    if_debug echo "... skip: $title"
                    continue
                fi
                echo "===[ $title ]==="
                if_debug cat $tmpB
                nb=$(expr $(grep -c ^algo $tmpB) - 1) || true
if true; then
                ### show conv max
                gnuplot \
                    -e "set title '$title'" \
                    -e "plot
for [i=0:$nb] '$tmpB' index i using 1:4 with linespoint ls i+1 title column(1)" \
                    -e "pause mouse"
else
                ### all idle avg; conv avg; conv max
                gnuplot \
                    -e "set title '$title'" \
                    -e "plot
for [i=0:$nb] '$tmpB' index i using 1:4 with linespoint ls i+1 title column(1),
for [i=0:$nb] '$tmpB' index i using 1:3 with linespoint ls i+1 notitle,
for [i=0:$nb] '$tmpB' index i using 1:2 with linespoint ls i+1 notitle" \
                    -e "pause mouse"
fi
            done
        done
    done
done