-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathplot.sh
executable file
·109 lines (93 loc) · 3.72 KB
/
plot.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#! /bin/sh
usr=$(cat user.txt)
eval $(cat ./score.txt | head -1 | awk '{ print "y1min="$2; print "y2max="$3 }')
eval $(cat ./score.txt | tail -1 | awk '{ print "y1max="$2; print "y2min="$3 }')
#firstline=$(cat ./score.txt | head -1)
#y1min=$(echo $firstline | awk '{ print $2 }')
#y2max=$(echo $firstline | awk '{ print $3 }')
#lastline=$(cat ./score.txt | tail -1)
#y1max=$(echo $lastline | awk '{ print $2 }')
#y2min=$(echo $lastline | awk '{ print $3 }')
echo "y1 range [$y1min,$y1max], y2 range [$y2max,$y2min]"
gnuplot -e "usr='$usr'" -e "y1range='$(($y1max-$y1min))'" -e "y2range='$(($y2max-$y2min))'" ./drawinone.plt
# clear log to get generated values
rm fit.log 2>/dev/null
gnuplot -e "usr='$usr'" -e "y1min='$y1min'" -e "y1max='$y1max'" -e "y2min='$y2min'" -e "y2max='$y2max'" ./fit.plt
#if [ $# -gt 0 ]; then
# # collect fit parameters
# # variable 'line' contains line number of the marker, we will got parameters after this line (line+2..line+4)
# # jump empty line by condition '!NF'
# awk -v line=$(awk '/Final set of parameters/{print NR}' fit.log) '{if(NR>line+1 && NR<line+6){if(!NF)next;print $3}}' fit.log | tr "\n" "\t" >> fit.data
# echo "" >> fit.data
#fi
if [ $# -gt 0 ]; then
# don't know how to print out parameter (a,b,c,f,g,m,n) from gnuplot script, so here extract them from fit.log (that's why we clear fit.log before calling fit.plt)
eval $(sed -n '/[abcfgmn] *=.*/p' fit.log | awk '{print $1,$2,$3+0}' | sed 's/ //g')
# after that line, a/b/c/f/g/m/n takes effect, now calculate predicating values
# predicate x*2, round result to integer
xval=$(($y1max*2))
eval $(awk -v a=$a -v b=$b -v c=$c -v f=$f -v g=$g -v m=$m -v n=$n -v xval=$xval 'BEGIN { print "y1="int(a*xval*xval+b*xval+c+0.5); print "y2="int(f/xval+g+0.5); print "y3="int(m*log(xval)+n+0.5) }')
# dump results to data files
echo "$xval $y1" >> predicate_binomial.data
echo "$xval $y2" >> predicate_reciprocal.data
echo "$xval $y3" >> predicate_logarithm.data
else
# draw predicate with current
# before plot, we need create data for merged-predicate curve
paste predicate_reciprocal.data predicate_logarithm.data > predicate_merged.data
# unset arr_rec
# unset arr_log
# rm predicate_merged.data
# for line in `cat predicate_reciprocal.data`
# do
# arr_rec[${#arr_rec[@]}]="$line"
# done
# for line in `cat predicate_logarithm.data`
# do
# arr_log[${#arr_log[@]}]="$line"
# done
#
# if [ ${#arr_rec[@]} -ne ${#arr_log[@]} ]; then
# echo "WARNING: predicate_reciprocal.data [${#arr_rec[@]}] != predicate_logarithm.data [${#arr_log[@]}]"
# fi
# n=0
# while [ $n -lt ${#arr_rec[@]} ];
# do
# line="${arr_rec[$n]} "$(echo ${arr_log[$n]} | awk '{print $2}')
# echo "$line" >> predicate_merged.data
# done
gnuplot -e "usr='$usr'" -e "y1min='$y1min'" -e "y1max='$y1max'" -e "y2min='$y2min'" -e "y2max='$y2max'" ./predicate.plt
# for centos
type eog > /dev/null 2>&1
if [ $? -eq 0 ]; then
eog draw.png &
eog fit.png &
eog predicate.png &
exit 0
fi
# for raspberry pi (has open but do nothing, put this setting before open)
type xdg-open > /dev/null 2>&1
if [ $? -eq 0 ]; then
xdg-open draw.png &
xdg-open fit.png &
xdg-open predicate.png &
exit 0
fi
# for mac
type open > /dev/null 2>&1
if [ $? -eq 0 ]; then
open draw.png &
open fit.png &
open predicate.png &
exit 0
fi
# for windows msys2
type mspaint > /dev/null 2>&1
if [ $? -eq 0 ]; then
mspaint draw.png &
mspaint fit.png &
mspaint predicate.png &
exit 0
fi
fi
exit 1