The Julia provides a combination of speed, interoperability, ease of use, and flexibility that makes it a very interesting choice for High Energy Physics (HEP) research. It can provide HEP researchers with the high-performance computing capabilities of C++, while still offering the ease of use of high-level languages, making it a powerful tool for HEP research. If the HEP community was adopting Julia as the main programming language, it could immediately benefit from the re-use of many existing software in the Julia ecosystem (more than 8000 packages) facilitated by the multi-dispatch feature of the language. But, the community has a number of key large software packages written in C++ that would need to interfaced to in order to provide the HEP specific functionality. The development effort invested in these packages is very large, counted on several hundred of person-years, and we need to preserve this investment.
For example, Geant4 is a widely used C++ library in HEP research for simulating the interaction of elementary particles in matter. Interfacing Julia with the Geant4 library can provide HEP researchers with a convenient way to use the capabilities of Geant4 in their Julia code. Similarly with ROOT, which is a widely used C++ data analysis framework in HEP research. These are in general large software projects with hundreds of C++ classes, unfortunately without a clear separation of a public API and its internal implementation, therefore any wrapping or binding solution based for example on C++Wrap.jl would need to be highly automated to generate the wrapper code of these many classes. Initial solutions for this automation exist (e.g. WrapIt) but would need to be fully tested and eventually extended to support all the C++ constructs used in these packages. The automation uses the LLVM compiler infrastructure to interpret the C++ code and generate the bindings.
The task of this project is the implementation, as automated as possible, of Julia bindings of common C++ HEP packages such as Geant4 and ROOT, in view to make available these packages within the Julia ecosystem and to evaluate their usability and performance. Quite deep knowledge of C++ would be beneficial for understanding the interfaces of these packages, however knowledge of particle physics is not required.
The expected result is a genuine Julia package that provides the functionality of either Geant4 or ROOT to the Julia ecosystem, and this is done in a very sustainable manner to follow the evolution of these packages with minimal effort by automating the wrapper generation as much as possible.