2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
4 #ifndef ActsGeoUtils_TransformCache_ICC
5 #define ActsGeoUtils_TransformCache_ICC
7 #include <CxxUtils/inline_hints.h>
11 inline const Amg::Transform3D& TransformCache::getTransform(const ActsTrk::DetectorAlignStore* alignStore) const {
12 /// Valid alignment store is given -> Take the transformation from the cache there
14 const Amg::Transform3D* cache = alignStore->trackingAlignment->getTransform(m_clientNo);
15 if (cache) return *cache;
16 const Amg::Transform3D& trf{alignStore->trackingAlignment->setTransform(m_clientNo, fetchTransform(alignStore))};
17 /// If an external alignment store is presented release the nominal transformation
18 releaseNominalCache();
21 /// Fall back solution to go onto the nominal cache
23 std::unique_lock guard{m_mutex};
24 m_nomCache.set(std::make_unique<Amg::Transform3D>(fetchTransform(alignStore)));
27 std::shared_lock guard{m_mutex};
30 inline IdentifierHash TransformCache::hash() const { return m_hash; }
31 #ifndef SIMULATIONBASE
33 inline const Amg::Transform3D& TransformCache::transform(const Acts::GeometryContext& anygctx) const {
34 const ActsGeometryContext* gctx = anygctx.get<const ActsGeometryContext*>();
35 // unpack the alignment store from the context
36 return getTransform(gctx->getStore(m_type).get());
42 template<typename CachingDetectorEle>
43 TransformCacheDetEle<CachingDetectorEle>::TransformCacheDetEle(const IdentifierHash& hash,
44 const CachingDetectorEle* parentEle):
45 TransformCache(hash, parentEle->detectorType()),
46 m_parent{parentEle} {}
47 template<typename CachingDetectorEle>
48 const IDetectorElement* TransformCacheDetEle<CachingDetectorEle>::parent() const {
51 template <typename CachingDetectorEle>
52 Identifier TransformCacheDetEle<CachingDetectorEle>::identify() const {
53 return parent()->identify();