EDM4hep Discussion
Zoom
EDM4hep Live Notes
==================
Date: May 27, 2025
Indico: https://indico.cern.ch/event/1552759/
Connected: Andre, Mateusz, Birgit, Brieuc, Leonhard, Juan, Tao, Thomas
Apologies: Frank
### Upcoming workshops / conferences
https://github.com/orgs/key4hep/projects/4/views/1
## Progress and discussion
### Brief FCC week report
* Packed agenda, only one parallel SW session. Focussed on reconstruction & geometry
* No dedicated Key4hep talk
* Several talks mentioning Key4hep
### ParticleID conversion and ObjectIDs
* See presentations
* concern for new service: Partially by-pass Gaudi service and collection handling
* Makes it possible to get "arbitrary" collections
* Might break in the future if new / other ways of passing data among algorithms are added to Gaudi
* In principle already possible now with EDM4hep (e.g. getting Tracks from ReconstructedParticle)
* How long to keep full compatibility between LCIO & EDM4hep
* Considerable amount of person power spent so far
* Definitely for EDM4hep v1.0
* Make service private? Is it possible?
* Move to MarlinWrapper?
* Need to keep the collection ID assignment in FWCore
## Podio
* https://github.com/AIDASoft/podio/pulls
* https://github.com/AIDASoft/podio/issues
* https://github.com/orgs/AIDASoft/projects/2/views/1
### Merged PRs
* Fix unity builds with SIO enabled by giving a variable different names [#781](https://github.com/AIDASoft/podio/pull/781)
* Add a workaround for avoiding opening every library in LD_LIBRARY_PATH [#775](https://github.com/AIDASoft/podio/pull/775)
* Read the collection information from structs starting with version 1.2.999 [#780](https://github.com/AIDASoft/podio/pull/780)
* Formalize common interface collections with a concept [#758](https://github.com/AIDASoft/podio/pull/758)
* Enable building the DataSource for sanitizers CI workflows [#779](https://github.com/AIDASoft/podio/pull/779)
* Clean up the ROOT readers and writers [#777](https://github.com/AIDASoft/podio/pull/777)
### Tag v01-03
### Intra-frame parallelism and reproducible ordering
* https://github.com/AIDASoft/podio/issues/778
* Use case(?) from EIC
* Not yet clear how to best deal with this
* Generate content based comparison operators?
* Adding a dedicated `sort` method to collections?
* Very similar functionality could be done with constructing from sorted range
### 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
* Bump the required version of podio to 1.3 [#430](https://github.com/key4hep/EDM4hep/pull/430)
* update ci build badge in readme [#429](https://github.com/key4hep/EDM4hep/pull/429)
### New tag v00-99-02
* Backwards compatible to v00-99-01
### Pointer persistency in EDM4hep
* https://github.com/key4hep/EDM4hep/issues/418
* Interplay, e.g. with Pandora that expects a pointer
* Pandora is not touching this, just using this to transport information along
* E.g. could be `std::any` and Handle is kept alive because `std::any` is constructed by value (via new member)
* Need to have a way for EDM4hep
* Current workarounds would require filling a temporary vector to keep pointers to handles alive
* No really user friendly way at the moment
* Do we need a nice way? Should only appear in few central places
* [x] Document workaround with vector
* [ ] Point uses to issue and make them indicate they use this
* [ ] Decide on number of actual users whether it's worth the effort to do a "proper solution"
### [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
* 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
## Converter & MarlinWrapper
### New nuances in keeping LCIO and EDM4hep event cotent consistent
* https://github.com/key4hep/k4MarlinWrapper/issues/235
* https://github.com/key4hep/k4MarlinWrapper/pull/236
* Attaching ParticleID objects to ReconstructedParticles (EDM4hep to LCIO) uses ObjectID (mainly collection ID) for looking up names
* Collections that are created in function algorithms do not have a collection ID assigned
* See: https://github.com/key4hep/k4FWCore/issues/311
* Workaround using the wrapper internal name mapping not as straight forward as initially thought
* Does assigning collection id outside of a Frame break a contract?
* Can no longer check whether a collection belongs to a Frame.
* ObjectIDs main purpose is persistency. Should probably considered an implementation detail
* Insertion into the TES or the Frame is an implementation detail as well (ownership hand-off is the defining feature)
* Algorithm behavior might depend on whether it's called standalone or within Gaudi
* Should collection / object id be non-public?
* Definitely need to document what are the things that can be depended on and which ones don't
* Expose it only for infrastructure / "expert" code that actually needs it
* What about maps going from object to collection, e.g. for filtering on range of objects from different collections. (Actual use case?)
* [x] Check if MarlinWrapper issues can be solved differently
* **No, not really**
* But we can hide the ObjectID
* New proposal: https://github.com/key4hep/k4FWCore/pull/312
## AoB
- New tags for release
- [ ] k4geo
- [ ] k4rectracker
- [ ] k4reccalorimeter
- [x] ddfastshowerml (Thomas)
- [ ] k4marlinwrapper
## Next meeting:
* June 10, 09:00 CET