2 usage () { cat <<END >&2; exit 1 \
4 usage: ./speeds-analyse <train>
5 reads: <train>-*.speeds
6 writes: <train>.speeds.ps
7 writes: <train>.speeds.record
14 case "$1" in -*) usage ;; esac
26 for f in address length nondetfore nondetrear acceltime deceltime; do
27 # [mm] [mm] [mm] [ms] [ms]
29 if [ "x$v" = x ]; then echo >&2 "missing $train $f"; exit 1; fi
32 for f in $train-*.speeds; do
34 if head -1 $f | grep '^[A-Za-z]' >/dev/null; then
35 this="$this using 2:3"
38 perl -pe 's/^[A-Za-z]\w*//' $f >>$o.all.tmp
43 set terminal postscript
46 set output '$o.ps.tmp'
47 set ylabel "speed [m/s]"
48 set xlabel "nmra speed step 1..126"
49 plot '$o.all.tmp' smooth sbezier notitle $each
52 ed -s $o.ps.tmp <<END >/dev/null
59 sort -rnu $train.speeds.all.tmp |head -1 |awk '{print $1}'
60 case "${PIPESTATUS[*]}" in "0 0 0" | "141 0 0");;
61 *) echo >&2 "? ${PIPESTATUS[*]}"; exit 127;; esac
69 set output '$o.table.tmp'
70 plot '$o.all.tmp' smooth sbezier
73 perl <$o.table.tmp >$o.record.tmp -ne '
80 next if m/^\#/; next unless m/\S/;
81 die unless m/^\s*(\d+)\s+([0-9.]+)\s/;
82 ($step,$speed) = ($1,$2);
83 die "$step $nxt" unless $step==$nxt;
84 if ($speed < $max) { push @decreases, $step; $speed= $max; }
85 $speed[$step]= $speed;
89 warn "warning: '$train': decreases at steps @decreases\n"
92 warn "warning: '$train': expected 126 steps, found $steps\n"
94 print "train '$train' is '$address'".
96 "+'$(( $length - $nondetfore - $nondetrear ))'".
100 my ($step,$wholetime) = @_;
101 return 0 if $step<0 || $step>=$steps;
102 return $wholetime * 1000.0 *
103 ($speed[$step+1] - $speed[$step]) / $max;
105 for ($step=0; $step<$nxt; $step++) {
106 printf "train %s step %d=%d %d/%d\n",
107 "'$train'", $step, $speed[$step]*1e6,
108 calcwait($step-1,'$acceltime'),
109 calcwait($step,'$deceltime')
112 STDOUT->error and die $!;
113 print "end\n" or die $!;
119 for f in ps record; do
120 mv -f $o.$f.tmp $o.$f