#!/usr/local/bin/perl

# run_cla_c50boost
# by Johann Petrak (OeFAI)

$pgmversion = '$Revision: 3.0.2.1 $';
$pgmdate    = '$Date: 2002/08/24 07:22:42 $';
$rcsid      = '$Id: run_cla_c50boost,v 3.0.2.1 2002/08/24 07:22:42 johann Exp $';
$dummy      = '$';   # just here to satisfy the dumb emacs fontifyer

use vars qw($pgmname $pgmpath $trainargs %k $args 
	    $testargs  $predfile  $filestem);
use Getopt::Long;
use File::Basename;
$pgmname = $0;$pgmpath = dirname($pgmname);
push(@INC,$pgmpath);
require run_lib;
require config;
beginLA("c50boost",$pgmversion); 


# ARGGGGGHHH: we need to temporarily rename the test file to
# prevent c5.0 from running the testing step automatically
rename "$filestem.test", "$filestem.tmptest" ||
  exitErr("Problem renaming $filestem.test to $filestem.tmptest: $!\n");
startCMD("c5.0 -b -f $filestem $args $trainargs");
# Skip everything until "Evaluation on" 
while (defined($_=getLine())) {
  if (/^Evaluation on /) {
    last;
  }
}
# add up the sizes of all trees
my $addmode = 0;
my $tmpsize = 0;
while (defined($_=getLine())) {
  if (/^Evaluation on test set/) {
    last; # avoid to accidently take test set values
  }
  if (/^\s*Trial\s+Decision/) {
    $addmode = 1;
  }  
  if ($addmode && /^\s*[0-9]+\s+([0-9]+)/) {
    $tmpsize += $1;
  }
  if ($addmode && /^\s*boost/) {
    /\(([^%]+)%\)/;
    $k{"Resubsterror"} = $1 / 100;
    $k{"Size"} = $tmpsize;
    $addmode = 0;
  }
}
while (defined($_=getLine())) { } # skip any test set stuff
$k{"Traintime"} = stopCMD();

# rename back to original name
rename "$filestem.tmptest", "$filestem.test" ||
  exitErr("Problem renaming $filestem.tmptest to $filestem.test: $!\n");

startCMD("c5test -b -f $filestem -p $predfile $args $testargs");
while (defined($_=getLine())) {
  if (/^Error rate:\s+([0-9\.]+)/) {
    $k{"Error"} = $1;
  }
}
$k{"Testtime"} = stopCMD();

rmFile("$filestem.tmp");
rmFile("$filestem.tree");

endLA();
