mirror of
git://projects.qi-hardware.com/wernermisc.git
synced 2024-12-01 06:21:53 +02:00
36b52a976d
Simulation with both -n and -i also doesn't need to read a log file.
89 lines
1.7 KiB
Perl
Executable File
89 lines
1.7 KiB
Perl
Executable File
#!/usr/bin/perl
|
|
|
|
sub usage
|
|
{
|
|
print STDERR "usage: $0 [-s [-n samples] [-i interval]] [log_file]\n";
|
|
exit(1);
|
|
}
|
|
|
|
|
|
while ($ARGV[0] =~ /^-/) {
|
|
$opt = shift @ARGV;
|
|
if ($opt eq "-s") {
|
|
$sim = 1;
|
|
} elsif ($opt eq "-n") {
|
|
$sim_n = shift @ARGV;
|
|
&usage unless defined $sim_n;
|
|
} elsif ($opt eq "-i") {
|
|
$sim_t = shift @ARGV;
|
|
&usage unless defined $sim_t;
|
|
} else {
|
|
&usage;
|
|
}
|
|
}
|
|
|
|
unless ($sim && defined $sim_n && defined $sim_t) {
|
|
$n = 1;
|
|
while (<>) {
|
|
next unless /^=== (\d+) ===/;
|
|
while ($1 != $n) {
|
|
push(@f, $n);
|
|
$n++;
|
|
}
|
|
$n++;
|
|
}
|
|
|
|
$n--;
|
|
$t = int($n/@f+0.5);
|
|
|
|
$last = 0;
|
|
for (@f) {
|
|
push(@d, $_-$last);
|
|
$last = $_;
|
|
}
|
|
}
|
|
|
|
if ($sim) {
|
|
# y = 1-exp(-x/T)
|
|
# 1-y = exp(-x/T)
|
|
# ln(1-y) = -x/T
|
|
# -T*ln(1-y) = x
|
|
|
|
$type = " (SIMULATED)";
|
|
$sim_n = @f unless defined $sim_n;
|
|
$sim_t = $t unless defined $sim_t;
|
|
@d = ();
|
|
for ($i = 0; $i != $sim_n; $i++) {
|
|
push(@d, -$sim_t*log(1-rand));
|
|
}
|
|
}
|
|
|
|
for (@d) {
|
|
$max = $_ if $_ > $max;
|
|
}
|
|
|
|
$cmd = "|gnuplot -e '".
|
|
'set term postscript color eps enhanced solid lw 2 20;'.
|
|
'set output "out.eps";'.
|
|
'set xrange [0:'.$max*1.05.'];'.
|
|
'set yrange [0:'.$max*1.05.'];'.
|
|
'set title "Correlation of time to adjacent corruptions'.$type.'";'.
|
|
'set xlabel "Cycles since previous event";'.
|
|
'set ylabel "Cycles until next event";'.
|
|
'plot "-" with points pt 7 notitle'.
|
|
"'";
|
|
|
|
open(PIPE, $cmd) || die "open: $!";
|
|
undef $last;
|
|
for (@d) {
|
|
print PIPE "$last $_\n" if defined $last;
|
|
$last = $_;
|
|
}
|
|
close(PIPE) || die "close: $!";
|
|
|
|
system("cat out.eps | ".
|
|
"gs -sDEVICE=ppmraw -r100 -sOutputFile=- ".
|
|
"-dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sPAPERSIZE=a4 -q - | ".
|
|
"convert -trim - out.png");
|
|
unlink("out.eps");
|