#!/usr/bin/perl

$progname = $0;
$progname =~ s~.*/~~;

if ($#ARGV != 1) {
    die <<"EOT";

Usage: $progname vectorfile indexfile

Example:

    mds -K 3 diffile > tmp.vec
    cluster -wm diffile | clgroup -i -n 8 > tmp.idx
    $progname tmp.vec tmp.idx > tmp
    maprgb configfile tmp > map.ps

EOT
}

open (IN, "<$ARGV[1]") or die "\nOpening file \"$ARGV[1]\": $!\n\n";
while (<IN>) {
    if (/^\s*(\d+)\s+\"(.*)\"/) {
	$grp{$2} = $1;
    } elsif (/^\s*(\d+)\s+(.*?)\s*$/) {
	$grp{$2} = $1;
    }
}
close IN;

open (IN, "<$ARGV[0]") or die "\nOpening file \"$ARGV[0]\": $!\n\n";
while (<IN>) {
    next if (/^\s*\#/ || /^\s*$/);
    $dim = int($_);
    if ($dim < 1 || $dim > 3) {
	die "\n$progname: invalid number of dimensions in file \"$ARGV[0]\": $dim\n\n";
    }
    last;
}
while (<IN>) {
    next if (/^\s*\#/ || /^\s*$/);
    if (/^\s*\"(.*)\"/) {
	$idx = $grp{$1};
    } else {
	/^\s*(.*?)\s*$/;
	$idx = $grp{$1};
    }
    $n[$idx]++;
    while (<IN>) {
	next if (/^\s*\#/ || /^\s*$/);
	$red[$idx] += $_;
	last;
    }
    if ($dim > 1) {
	while (<IN>) {
	    next if (/^\s*\#/ || /^\s*$/);
	    $green[$idx] += $_;
	    last;
	}
    }
    if ($dim > 2) {
	while (<IN>) {
	    next if (/^\s*\#/ || /^\s*$/);
	    $blue[$idx] += $_;
	    last;
	}
    }
}
close IN;

print "$dim\n";
foreach $lbl (sort keys %grp) {
    print "$lbl\n";
    $idx = $grp{$lbl};
    print (($red[$idx] / $n[$idx]) . "\n");
    print (($green[$idx] / $n[$idx]) . "\n") if ($dim > 1);
    print (($blue[$idx] / $n[$idx]) . "\n") if ($dim > 2);
}
