Root needs to be able to store integers instead of pointers.
Need to identify transient and persistent data, and add some integer data members.
If you look at the ASCII I/O, HepMC has always had both persistent and transient data. We just need to leverage this.
It is possible to create transient data on the fly, but this impacts compute time.
Further, pointers to GenParticles, etc. are often passed around.
A user may add particles and/or vertices to any GenEvent at any time.
Instead, we build the transient data when creating the GenEvent, thus adding a fixed amount of compute time and ensuring stable pointers.