File: test-compare.sh

package info (click to toggle)
fastjet 3.0.6+dfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 9,404 kB
  • ctags: 3,770
  • sloc: cpp: 21,498; sh: 10,546; fortran: 673; makefile: 527; ansic: 131
file content (196 lines) | stat: -rwxr-xr-x 8,680 bytes parent folder | download | duplicates (3)
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 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,2.0@single-ee-event.dat eegenkt,1.0@single-ee-event.dat eegenkt,0.0@single-ee-event.dat eegenkt,-1.0@single-ee-event.dat"
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 "strategy" >> 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 eecambridge@single-ee-event.dat:eecambridge eecambridge,-ycut,0.01@single-ee-event.dat:eecambridge jade,-excly,0.01@single-ee-event.dat: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