MuonInterSectGeometry - Cache the chambers in conditions data
Hi everybody,
I noticed that the MuonInterSectSvc, which is used during the hole search of the Mdt segments, creates a TrkDriftCircleMath::MdtChamberGeometry
object at every call. The construction of such an object is not really cheap, as it resolves the detector elements down to the tube elements, i.e. it creates around 100 tube objects internally. The problem is that the hole search is performed at multiple places of the code, in particular, at the hole calculation during the segment finding & at the hole recovery of MS, MSOE, ME & combined track. In other words, the same chamber is created again & again in a short time period. That's is quite a waste of CPU resources, if we consider that the geometry only changes if the alignment is updated.
This MR turns the MuonInterSectSvc
into a conditions algorithm that caches all the TrkDriftCircleMath::MdtChamberGeometry
objects underneath the MuonIntersectGeoData
. This object is updated every time the Mdt conditions or the alignment change. The former change defines the dead elements during the data taking. The MuonIntersectGeoData
is retrieved by the clients downstream that no longer need to rely directly on the MuonReadoutGeometry or the Mdt conditions data.
I've profiled the CPU and found a reduction in the footprint of MuonSegmentTagging
by 8%. This will improve further in a follow-up MR as the segment maker creates a second set of MdtChamberGeometry
objects used for segment finding itself. However, these have a slightly different reference point and such a change requires more physics output checks.
Addresses ATLASRECTS-6898