|
| 1 | +--- |
| 2 | +title: Julia Interfaces to HepMC3 |
| 3 | +layout: gsoc_proposal |
| 4 | +project: JuliaHEP |
| 5 | +year: 2025 |
| 6 | +organization: |
| 7 | + - CERN |
| 8 | +difficulty: medium |
| 9 | +duration: 175 |
| 10 | +mentor_avail: June-July- August |
| 11 | +--- |
| 12 | + |
| 13 | +## Description |
| 14 | + |
| 15 | +In high-energy physics experiments at [CERN](https://home.cern/) it is necessary to simulate physics events in order to compare predicted observations with those that the LHC experiments actually observe. A key piece of the software chain used to do that is the [HepMC3](https://arxiv.org/abs/1912.08005) event record library, which encodes the output from physics event generators in a standard way, so that they can be used by downstream detector simulation and analysis codes. |
| 16 | + |
| 17 | +There is now [increasing interest](https://doi.org/10.1007/s41781-023-00104-x) in using [Julia](https://julialang.org/) as a language for HEP software, as it combines the ease of programming in interactive languages, e.g., Python, with the speed of compiled language, such as C++. As part of building up the ecosystem of supporting packages for Julia in high-energy physics, developing interfaces to read, manipulated and write HepMC3 event records in Julia is the aim of this project. |
| 18 | + |
| 19 | +## Task ideas |
| 20 | + |
| 21 | +This project would develop a wrapper library for [HepMC3](https://gitlab.cern.ch/hepmc/HepMC3) allowing the HepMC3 data objects and methods, in C++, to be called from Julia. |
| 22 | + |
| 23 | +It would utilise the general underlying wrapper interfaces in [CxxWrap](https://github.com/JuliaInterop/CxxWrap.jl) and the automated wrapper code generator [WrapIt!](https://github.com/grasph/wrapit) to allow for as easy and maintainable an interface as possible. |
| 24 | + |
| 25 | +A key outcome would be a set of unit tests and examples, based on the HepMC3 ones, demonstrating how to use the library and proving that the code is correct. |
| 26 | + |
| 27 | +## Expected results and milestones |
| 28 | + |
| 29 | +- Reading of HepMC3 event files |
| 30 | + - Particularly the ASCII format will be targeted first |
| 31 | +- Access to event data structures |
| 32 | + - Access to particle properties |
| 33 | + - Navigation of the event and the vertices between parent and child particles |
| 34 | + - Access to run information |
| 35 | +- Update of HepMC3 data structures |
| 36 | +- Creation of new HepMC3 events |
| 37 | +- Re-serialisation of these events to file |
| 38 | + - Initially ASCII |
| 39 | +- Documentation and examples on how to use the Julia interfaces |
| 40 | +- HepMC3.jl package registered in the Julia general registry |
| 41 | +- Extension of serialisation to ROOT format (stretch goal) |
| 42 | + |
| 43 | +## Requirements |
| 44 | + |
| 45 | +- Programming experience in C++ |
| 46 | +- Prior experience in Julia (very advantageous) |
| 47 | +- A background understanding of high-energy physics (advantageous) |
| 48 | + |
| 49 | +## Evaluation Exercise |
| 50 | + |
| 51 | +TBD |
| 52 | + |
| 53 | +## Mentors |
| 54 | + |
| 55 | +- **[Graeme Stewart ](mailto:[email protected])** |
| 56 | +- [Mateusz Fila ](mailto:[email protected]) |
| 57 | + |
| 58 | +## Links |
| 59 | + |
| 60 | +- [Julia Programming Language](https://julialang.org/) |
| 61 | +- [JuliaHEP HSF Group](https://hepsoftwarefoundation.org/workinggroups/juliahep.html) |
| 62 | +- [HepMC3 Repository](https://gitlab.cern.ch/hepmc/HepMC3) |
| 63 | +- [CxxWrap](https://github.com/JuliaInterop/CxxWrap.jl) |
| 64 | +- [WrapIt!](https://github.com/grasph/wrapit) |
0 commit comments