EDM4hep Discussion
Zoom
EDM4hep Live Notes
==================
Date: July 8, 2025
Indico: https://indico.cern.ch/event/1567048/
Connected: Leonhard, Andre, Juan, Tao, Thomas
Apologies:
### Upcoming workshops / conferences
https://github.com/orgs/key4hep/projects/4/views/1
## Progress and discussion
## Podio
* https://github.com/AIDASoft/podio/pulls
* https://github.com/AIDASoft/podio/issues
* https://github.com/orgs/AIDASoft/projects/2/views/1
### Merged PRs
* Make PODIO_GENERATE_DICTIONARY a thin wrapper around REFLEX_GENERATE_DICTIONARY [#807](https://github.com/AIDASoft/podio/pull/807)
* Allow calling finish() multiple times, with no effect after the first [#798](https://github.com/AIDASoft/podio/pull/786)
* Introduce a FrameData concept [#786](https://github.com/AIDASoft/podio/pull/786)
* Change the default setting of the generic writer to RNTuple when `PODIO_DEFAULT_WRITE_RNTUPLE` is set [#784](https://github.com/AIDASoft/podio/pull/784)
* Smaller fixes for CI and minor issues
* Add ROOT_INCLUDE_PATH from the environment to the tests [#788](https://github.com/AIDASoft/podio/pull/788)
* Workaround the Julia isues that we observe in CI [#791](https://github.com/AIDASoft/podio/pull/791)
* Use python packages from the Key4hep stack in the pre-commit workflow [#789](https://github.com/AIDASoft/podio/pull/789)
* Switch back to docker runtime for CI [#802](https://github.com/AIDASoft/podio/pull/802)
* Fix deprecation warning by updating hook version [#804](https://github.com/AIDASoft/podio/pull/804)
* Add missing override to the destructor of UserDataCollection and LinkCollectionImpl [#785](https://github.com/AIDASoft/podio/pull/785)
### Schema evolution
* Probably need to revisit this with some non-trivial time investment
* Not all advertised features working yet
* Current working model doesn't seem to allow to properly "intercept" ROOT changes before we would even be able to do manual schema evolution
* Several PRs & issues related:
* https://github.com/AIDASoft/podio/issues/800 (reproducer: https://github.com/AIDASoft/podio/pull/801)
* https://github.com/AIDASoft/podio/issues/795 (fixed by: https://github.com/AIDASoft/podio/pull/799)
* https://github.com/AIDASoft/podio/issues/796
* https://github.com/AIDASoft/podio/pull/797
* https://github.com/AIDASoft/podio/pull/803
### Make [] return an immutable object in Python
* https://github.com/AIDASoft/podio/issues/794
* https://github.com/AIDASoft/podio/pull/806
* Pythonizations only half a solution, because you can access collections without loading the pythonizations via e.g. `import edm4hep`
* Implementation in C++ throws `std::out_of_bounds` instead of `IndexError`
* Raising `IndexError` from c++ doesn't work on LCG stacks and Key4hep release. No clear reason why
* Not working == not raising the error at all(!) but gives you an empty object
* No change in behavior, because previously pythonizations were loaded always when writing files
* Probably not possible to have pythonizations automatically loaded (e.g. by providing them centrally in podio). Would always need an explicit `import podio` ...
### Add a workaround for avoiding opening every library in LD_LIBRARY_PATH (part 2)
* https://github.com/AIDASoft/podio/pull/808
* Apparently different behaviors when running locally, vs. when running against CVMFS(? at least when using LCG or Key4hep releases)
* [ ] Implement test for this. Needs `strace` in CI images
### Simplify constructors by using member initializers
* https://github.com/AIDASoft/podio/pull/808
* [ ] Clarify if `std::make_unique<std::mutex>` works now for `nvcc`
### Lack of collection ownership in Python allows reusing collections from an existing frame
* https://github.com/AIDASoft/podio/issues/805
* [ ] Check in C++ for consistency even though not necessary or put it into the python bindings that we already have?
* Could make it possible to discover whether a collection has been moved from with the new flag that we would need for this
### Make it possible to get the collection for an object
* https://github.com/AIDASoft/podio/pull/782
* Sparked by the discusssion at last Key4hep meeting
* Main idea: Hide the ObjectID, but offer the actually desired functionality
## EDM4hep
* https://github.com/key4hep/EDM4hep/pulls
* https://github.com/key4hep/EDM4hep/issues
* https://github.com/orgs/key4hep/projects/5
### Merged PRs
* Add a `stepLength` member to `CaloHitContribution` [#432](https://github.com/key4hep/EDM4hep/issues/432)
### [WiP] Replace the spin by a helicity property for the MCParticle
* https://github.com/key4hep/EDM4hep/pull/404
* Debugging special schema evolution that ideally stores `spin.z` into `helicty`
* [x] Do we want / need this? -> Yes, at least would be worthwile to see if schema evolution can deal with this
* It seemingly can't (see above)
* Quite a few existing LCIO files with `spin`, but could be absorved in the LCIO to EDM4hep converter
* [ ] Are there existing EDM4hep files with this?
* [ ] Need to check where this breaks downstream
* `9` as default value for "unset", why?
* Historically what some generators have been using
* **Main question: wait for podio schema evolution to be able to do this and delay EDM4hep 1.0 or do this now and fix schema evolution later?**
## Converter & MarlinWrapper
## AoB
* Iterating over collection in python gives you a mutable object instead of an immutable one.
* `clone` doesn't work correctly on mutable objects -> relations are not OK in python on cloned objects (fixed for mutable here: https://github.com/AIDASoft/podio/pull/583)
* [ ] Juan will open issue with more details
* Thomas on leave until Aug 11
## Next meeting:
* Pick up after summer (planning for Aug 19, TBC)