Skip to content

Update all clients to work with the new transient version of the HepMcParticleLink class

The changes in this merge request migrate Athena to use the new transient HepMcParticleLink version and write out the HepMcParticleLink_p2 version by default. (This merge request follows on from !20197 (merged). These changes are based on athenaprivate1!16561.)

There was a weakness in old HepMcParticleLink that it could only point to one McEventCollection. Hard-scatter and pile-up HepMC::GenEvent objects were all stored in the same McEventCollection. The HepMcParticleLink attempted to identify a specfic HepMC::GenParticle using the barcode and event number. Due to the fact that the hard-scatter and pile-up events are from different samples it was perfectly possible for a pile-up HepMC::GenEvent to have the same event number as the hard-scatter HepMC::GenEvent. In such cases HepMcParticleLink would loop through the HepMC::GenEvent objects in the McEventCollection and link to first the HepMC::GenParticle with the matching barcode that it found, leading to incorrect links. Not much of an issue for standard production without pile-up truth, but crippling if pile-up truth was being used as the input for Truth-seeded tracking... The solution is to have one McEventCollection per input dataset (i.e. one for each of the hard-scatter, low pT minbias, high pT minbias etc.). In standard production everything looks the same, but when pile-up truth is being saved then we would have three McEventCollections typically. The new HepMcParticleLink constructor now takes an optional argument to point it to the correct McEventCollection.

This merge request updates the transient HepMcParticleLink code to enable it to point at multiple McEventCollections.

This merge request also tweaks the HepMcParticleLink::eventIndex() method such that it now returns the event number of the linked HepMC::GenEvent. The old behaviour was that it would return the position of the linked HepMC::GenEvent in the vector of HepMC::GenEvent objects owned by the linked McEventCollection. The there is an optional argument of the constructor where it can be specified whether the event number or the position in the McEventCollection is being supplied.

The output root files should be directly comparable due as the persistent versions should be the same. The only change in sim/digi/reco output that is expected is in leaves holding m_partLink.m_mcEvtIndex. As the m_mcEvtIndex variable changes from representing the position of the linked HepMC::GenEvent in the vector of HepMC::GenEvent objects owned by the linked McEventCollection to being the event number of the linked HepMC::GenEvent.

Summary talk from SPOT#8 here:

Edited by John Derek Chapman

Merge request reports