-
Notifications
You must be signed in to change notification settings - Fork 12
/
test-compare.sh
executable file
·196 lines (174 loc) · 8.52 KB
/
test-compare.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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
#!/bin/bash
# This file aims at comparing the output of the different algorithms
# with the benchmark results stored in test-algorithms-orig.dat
#
# To do that, we'll follow the following recipe:
# - get the list of available algorithms
# Note that at the same time, we'll build the info to clear the
# original output later on
# - run the various algorithms using fastjet_timing_plugins
# send the output to a tmp file
# - clear orig and tmp files
# - compare them
#
# Specific notes:
# - Tested algorithms:
# kt, cam, antikt, ee_kt, ee_cam, ee_antikt,
# siscone, siscone_spheri, jetclu, midpoint, pxcone,
# d0runiicone, trackjet
# - What needs to be cleared in the orig file:
# . the lines starting with "<alg>:" for the algorithms
# that won't be used
# . the lines starting with #
# . the lines containing "version" (version number)
# . the lines containing "strategy" (strategy night differ)
# . the lines containing ":#" (comments for the used algs)
# . the lines containing "SISCone" (version number)
# . the lines containing "CGAL" (not necessarily available)
# - What needs to be cleared in the test file:
# . all comment lined starting with '#'
# . the lines containing "version" (version number)
# . the lines containing "strategy" (strategy night differ)
# . the lines containing "SISCone" (version number)
# . the lines containing "CGAL" (not necessarily available)
# - For native algs, we'll fix the strategy so that the output
# matches (Best could be dangerous in case CGAL gets used)
# - additional things tested: the output of fastjet_example and
# fastjet_areas that will be placed at the beginning of the file
# - for algs that are not in the plugin <Alg>Plugin, specify an
# additional tag using
# <alg>:<plugin_name>
# - additional parameters for 'fastjet_timing_plugins' can be
# specified using ',' to separate them
# - another event file can be specified using @<eventfile>
# important: only the name of teh file has to be specified
# and it has to be in example/data/
#
# if srcdir is not defined, set it to .
# this allows to run outside of make check
if test -z ${srcdir}; then
echo "setting srcdir to ."
srcdir="."
fi
#======================================================================
# first check that the windows include file has the correct
# version number. Strictly speaking not something that
# should be done in make check, but should help guarantee
# that we do not release a copy with the wrong windows version
# number
packname=`grep '^ *AC_INIT' ${srcdir}/configure.ac | sed -e 's/AC_INIT(//' -e 's/\[//g' -e 's/\]//g' -e 's/)//'`
packver=`echo $packname | sed 's/.*,//g'`
winver=`grep FASTJET_PACKAGE_VERSION ${srcdir}/include/fastjet/config_win.h | sed 's/.*VERSION *"//' | sed 's/"//'`
if [[ $winver != $packver ]]; then
echo "ERROR: config_win.h version number not compatible with true version number"
exit 1
fi
#======================================================================
# check that
# fastjet-config --cxxflags --libs
# returns the same as
# fastjet-config --cxxflags; fastjet-config --libs
arguments_full=`./fastjet-config --cxxflags --libs | sed 's/\n/ /'`
arguments_flags=`./fastjet-config --cxxflags | sed 's/\n/ /'`
arguments_libs=`./fastjet-config --libs | sed 's/\n/ /'`
arguments_recon=${arguments_flags}" "${arguments_libs}
if [[ "$arguments_full" != "$arguments_recon" ]]; then
echo "ERROR: fastjet-config --cxxflags --libs does not combine fastjet-config --cxxflags and fastjet-config --libs"
echo " fastjet-config --cxxflags : "$arguments_flags
echo " fastjet-config --libs : "$arguments_libs
echo " fastjet-config --cxxflags --libs: "$arguments_full
exit 1
fi
#======================================================================
# now run the real tests
# first build the list of algs to run
echo -----------------------------------------------------------
echo "Checking which algorithms are available for testing"
echo -----------------------------------------------------------
tested_algs="kt cam antikt genkt,1.0 genkt,0.0 genkt,-1.0 eekt,-excld,[email protected] eegenkt,[email protected] eegenkt,[email protected] eegenkt,[email protected]"
untested_algs=""
Rvalues="0.4 0.7 1.0"
extra_args="-incl 0.0"
echo ":#" > clear_patterns.orig
echo "^#" >> clear_patterns.orig
echo "version" >> clear_patterns.orig
echo "[Ss]trategy" >> clear_patterns.orig
echo "CGAL" >> clear_patterns.orig
echo "SISCone" >> clear_patterns.orig # avoids problems w version numbers
echo "pxcone: +[a-zA-Z*]" >> clear_patterns.orig # special treatment for PxCone whose fortran output
echo "pxcone: *$" >> clear_patterns.orig # occurs in non-predicatble position (flushing issue)
echo "WARNING" >> clear_patterns.orig # occurs in non-predicatble position (flushing issue)
cp clear_patterns.orig clear_patterns.tmp
# note: algs specified as alg:name mean that 'name' has to be checked for the
# availability of 'alg'
for plugin_tag in siscone sisconespheri:siscone jetclu:cdfcones midpoint:cdfcones pxcone d0runiicone trackjet atlascone cmsiterativecone [email protected]:eecambridge eecambridge,-ycut,[email protected]:eecambridge jade,-excly,[email protected]:jade d0runipre96cone:d0runicone d0runicone:d0runicone gridjet ; do
plugin=${plugin_tag%%:*}
tag=${plugin_tag##*:}
tag_upper=`echo ${tag} | tr a-z A-Z`
if [[ -n `grep "define FASTJET_ENABLE_PLUGIN_${tag_upper}" include/fastjet/config_auto.h` ]]; then
tested_algs=${tested_algs}" "${plugin}
else
untested_algs=${untested_algs}" "${plugin}
echo "^${plugin}:" >> clear_patterns.orig
fi
done
# build the output to be compared wityh the original one
## for regenerating the orig output: echo "blahblahthiswillneverhappen" > clear_patterns.tmp
echo -----------------------------------------------------------
echo "Running 'fastjet_example < data/single_event.dat'"
echo -----------------------------------------------------------
example/fastjet_example < ${srcdir}/example/data/single-event.dat | grep -v -E -f clear_patterns.tmp > output.tmp
echo
echo -----------------------------------------------------------
echo "Running 'fastjet_areas < data/single_event.dat'"
echo -----------------------------------------------------------
example/fastjet_areas < ${srcdir}/example/data/single-event.dat | grep -v -E -f clear_patterns.tmp >> output.tmp
# run the algorithms to be tested
echo -----------------------------------------------------------
echo "Running 'fastjet_timing_plugins "${extra_args}" < data/single_event.dat' on all algs"
echo " tested : "${tested_algs}
echo " untested:" ${untested_algs}
echo " R values: "${Rvalues}
echo -----------------------------------------------------------
for alg in ${tested_algs}; do
# check if we have to run on a separate event
# Note that this is specified using @<event_file>
alg_part=${alg%%@*}
if [ "${#alg}" -eq "${#alg_part}" ]; then
event_part="single-event.dat"
else
event_part=${alg##*@}
fi
# additional parameters for 'fastjet_timing_plugins' can be specified using ',' to separate them.
# we thus have to replace ',' by ' ' when we run fastjet_timing_plugins
for R in ${Rvalues}; do
example/fastjet_timing_plugins -${alg_part//,/ } ${extra_args} -r ${R} < ${srcdir}/example/data/${event_part} 2>&1 \
| awk "{print \"${alg}:\"\$0}" \
| grep -v -E -f clear_patterns.tmp \
>> output.tmp
## | awk "{if (\$2 == \"exclusive\"){ exit;}; print \"${alg}:\"\$0}" >> output.tmp
done
done
## for regenerating the orig output: cp output.tmp test-script-output-orig.txt
echo
echo -----------------------------------------------------------
echo "Comparing output from these runs (test-script-output.txt) "
echo "to the expected output (test-script-output-orig.txt)"
echo -----------------------------------------------------------
# clear the original output for comment lines and untested algorithms
grep -v -E -f clear_patterns.orig ${srcdir}/test-script-output-orig.txt > output_orig.tmp
# 4. perform the diff
DIFF=`diff output.tmp output_orig.tmp`
diff output.tmp output_orig.tmp > test-script-output.tmp
# 5. show result
echo "Tested plugins: "${tested_plugins}
if [[ -n $DIFF ]]; then
cat test-script-output.tmp
exit 1;
else
echo Results are identical
rm test-script-output.tmp
rm clear_patterns.orig
rm clear_patterns.tmp
rm output.tmp output_orig.tmp
fi