25 std::unique_ptr<const Acts::Logger>
logger)
37 std::lock_guard lock{m_iovMutex};
41 ACTS_VERBOSE(
"IOV handling in thread " << std::this_thread::get_id() <<
".");
42 ACTS_VERBOSE(
"IOV resolved to " << iov <<
" - from event "
47 if (
m_cfg.randomNumberSvc !=
nullptr) {
48 if (
auto it = m_activeIovs.find(iov);
it != m_activeIovs.end()) {
50 it->second->lastAccessed = m_eventsSeen;
56 std::make_unique<ExternallyAlignedDetectorElement::AlignmentStore>();
57 alignmentStore->lastAccessed = m_eventsSeen;
61 <<
", emulate new alignment.");
66 alignmentStore->transforms = m_nominalStore;
67 for (
auto& tForm : alignmentStore->transforms) {
69 applyTransform(tForm,
m_cfg, rng, iov);
72 auto [insertIterator, inserted] =
73 m_activeIovs.emplace(iov,
std::move(alignmentStore));
74 assert(inserted &&
"Expected IOV to be created in map, but wasn't");
83 if (
m_cfg.doGarbageCollection) {
84 for (
auto it = m_activeIovs.begin();
it != m_activeIovs.end();) {
86 if (m_eventsSeen -
status->lastAccessed >
m_cfg.flushSize) {
87 ACTS_DEBUG(
"IOV " << iov <<
" has not been accessed in the last "
88 <<
m_cfg.flushSize <<
" events, clearing");
89 it = m_activeIovs.erase(
it);
102 size_t nTransforms = 0;
103 tGeometry.
visitSurfaces([&nTransforms](
const auto*) { ++nTransforms; });
109 std::vector<Acts::Transform3> aStore(nTransforms,
110 Acts::Transform3::Identity());
112 auto fillTransforms = [&aStore, &nominalCtx](
const auto*
surface) ->
void {
113 auto alignableElement =
115 surface->associatedDetectorElement());
116 aStore[alignableElement->identifier()] =
surface->transform(nominalCtx);