A library to benchmark various jet algorithms for HEP physics
All algorithms use double precision and rapidity-phi space to define distances. The directories to perform benchmarks are organized as following:
fastjet - the official FastJet implementation
ktjet - Original KtJet (C++) benchmark code. Works in the anti-KT mode
nlojet - implementation of kT-jets from NLOjet++
jetn2_java - Java implementation of the jet algorithm by I.Pogrebnyak using the N*N FastJet approach.
scjet_cpp - An alternative (traditional) implementation of kT-jet / anti-kT (N*N*N)
scjet_java - implementation of the SCJet jet algorithm in Java.
benchmark - compare FastJet and SCJet implementations using the same input.
All algorithms run the anti-kT jet algorithm. One can also run the standard kT and Cambridge/Aachen jet algorithms.
FastJet and KtJet C++ codes used by this library are taken from the orinal FastJet and KtJet web pages. JetN2 is a light-weight implementation of the anti-kT algorithms for jet validation used by the HepSim Monte Carlo database. More details can be found in HePhysics package. The algorithm was implemented by I.Pogrebnyak in https://github.com/ivankp/javaN2jet. The Java implementation of SCJet and JetN2 is available from the SCaVis data-analysis program.
The benchmarks have been done on Xeon(R) CPU E5520 @ 2.27GHz using the input file with 1000 particles (data/single-event.dat) for a 100 pp collision event (ttbar, pT>8 TeV). The processing time:
- fastjet - 3 msec
- jetn2_java - 15 msec using FastJet N** approach
- scjet_cpp - 105 msec (fast N^2 mode) or 990 msec (the standard N^3 mode)
- scjet_java - 103 msec (after multiple runs, fast mode)
- nlojet - ? (failed). Used by NLOjet++
- ktjet - 370 msec
- pgjet_cpp - 4756 ms msec (no cache, using std::set)
In summary: fastjet is about a factor 30 faster than scjet_cpp (seeded).
The Java implementation (scjet_java) is as fast as the C++ version when using more than one run
over events (first run is a factor 4 slower than for the C++ version due to the JIT compilation).
Other similar algorithms are slower. When using the kT mode, the fast mode is disabled
and scjet_java has the same speed as ktjet.
There are some differences in the output jets between different implementations.
There is no difference between scjet_cpp, and fastjet implementations.
For the seeded option,
differences can be at the level of 2% for transverse momentum of very soft jets.
The difference between nlojet and fastjet is also at the level of a few percents.
No difference is found between fastjet and ktjet implementations.
Read "README" files in each directory to see how to run each benchmark. Makefile files are included inside each directory.
S.Chekanov (ANL) I.Pogrebnyak (MSU/ANL)
Feb. 2015