7 #include "GaudiKernel/MsgStream.h"
13 , ISvcLocator* pSvcLocator )
15 , m_detManager(nullptr)
37 return StatusCode::SUCCESS;
44 const EventContext& ctx = Gaudi::Hive::currentContext();
47 if (writeHandleDetElCont.isValid()) {
48 ATH_MSG_DEBUG(
"CondHandle " << writeHandleDetElCont.fullKey() <<
" is already valid."
49 <<
". In theory this should not be called, but may happen"
50 <<
" if multiple concurrent events are being processed out of order.");
51 return StatusCode::SUCCESS;
54 std::unique_ptr<SG::WriteCondHandle<GeoAlignmentStore>> writeHandleAlignStore{};
56 writeHandleAlignStore = std::make_unique<SG::WriteCondHandle<GeoAlignmentStore>>(
m_writeKeyAlignStore, ctx);
57 if (writeHandleAlignStore->isValid()) {
58 ATH_MSG_DEBUG(
"CondHandle " << writeHandleAlignStore->fullKey() <<
" is already valid."
59 <<
". In theory this should not be called, but may happen"
60 <<
" if multiple concurrent events are being processed out of order.");
61 return StatusCode::SUCCESS;
66 std::unique_ptr<GeoAlignmentStore> writeCdoAlignStore{std::make_unique<GeoAlignmentStore>()};
73 if (unAlignedColl==
nullptr) {
74 ATH_MSG_FATAL(
"Null pointer is returned by getDetectorElementCollection()");
75 return StatusCode::FAILURE;
85 if(readCdoDynamicGlobal==
nullptr) {
86 ATH_MSG_ERROR(
"Null pointer to the read conditions object: Dynamic Global");
87 return StatusCode::FAILURE;
91 if (writeHandleAlignStore) writeHandleAlignStore->addDependency(readHandleDynamicGlobal);
92 writeHandleDetElCont.addDependency(readHandleDynamicGlobal);
98 if(readCdoDynamicRegular==
nullptr) {
99 ATH_MSG_ERROR(
"Null pointer to the read conditions object: Dynamic Regular");
100 return StatusCode::FAILURE;
104 if (writeHandleAlignStore) writeHandleAlignStore->addDependency(readHandleDynamicRegular);
105 writeHandleDetElCont.addDependency(readHandleDynamicRegular);
112 if(readCdoRegular==
nullptr) {
113 ATH_MSG_ERROR(
"Null pointer to the read conditions object: Regular");
114 return StatusCode::FAILURE;
118 if (writeHandleAlignStore) writeHandleAlignStore->addDependency(readHandleRegular);
119 writeHandleDetElCont.addDependency(readHandleRegular);
123 if(
m_detManager->
align(readCdoContainer, writeCdoAlignStore.get()).isFailure()) {
125 return StatusCode::FAILURE;
129 if (alignedColl==
nullptr) {
130 ATH_MSG_FATAL(
"Null pointer is returned by getDetectorElementCollection()");
131 return StatusCode::FAILURE;
135 std::unique_ptr<InDetDD::TRT_DetElementContainer> writeCdoDetElCont{std::make_unique<InDetDD::TRT_DetElementContainer>()};
138 std::map<const InDetDD::TRT_EndcapElement*, InDetDD::TRT_EndcapElement*> oldToNewECMap;
139 std::map<const InDetDD::TRT_BarrelElement*, InDetDD::TRT_BarrelElement*> oldToNewBAMap;
141 oldToNewECMap[
nullptr] =
nullptr;
142 oldToNewBAMap[
nullptr] =
nullptr;
152 oldToNewECMap[oldEl_Endcap] = newEl;
153 writeCdoDetElCont->addEndcapElement(newEl);
158 oldToNewBAMap[oldEl_Barrel] = newEl;
159 writeCdoDetElCont->addBarrelElement(newEl);
162 return StatusCode::FAILURE;
167 for (
auto pairOfEl : oldToNewECMap) {
168 if (!pairOfEl.first)
continue;
169 pairOfEl.second->setNextInZ(oldToNewECMap[pairOfEl.first->nextInZ()]);
170 pairOfEl.second->setPreviousInZ(oldToNewECMap[pairOfEl.first->previousInZ()]);
172 for (
auto pairOfEl : oldToNewBAMap) {
173 if (!pairOfEl.first)
continue;
174 pairOfEl.second->setNextInR(oldToNewBAMap[pairOfEl.first->nextInR()]);
175 pairOfEl.second->setPreviousInR(oldToNewBAMap[pairOfEl.first->previousInR()]);
176 pairOfEl.second->setNextInPhi(oldToNewBAMap[pairOfEl.first->nextInPhi()]);
177 pairOfEl.second->setPreviousInPhi(oldToNewBAMap[pairOfEl.first->previousInPhi()]);
182 newEl->updateAllCaches();
186 const std::size_t writeHandleDetElContSize{writeCdoDetElCont->getElements()->size()};
191 if (writeHandleAlignStore !=
nullptr) {
192 if(writeHandleAlignStore->record(std::move(writeCdoAlignStore)).isFailure()) {
193 ATH_MSG_ERROR(
"Could not record GeoAlignmentStore " << writeHandleAlignStore->key()
194 <<
" with EventRange " << writeHandleAlignStore->getRange()
195 <<
" into Conditions Store");
196 return StatusCode::FAILURE;
198 ATH_MSG_INFO(
"recorded new CDO " << writeHandleAlignStore->key() <<
" with range "
199 << writeHandleAlignStore->getRange() <<
" into Conditions Store");
202 if (writeHandleDetElCont.record(std::move(writeCdoDetElCont)).isFailure()) {
203 ATH_MSG_FATAL(
"Could not record " << writeHandleDetElCont.key()
204 <<
" with EventRange " << writeHandleDetElCont.getRange()
205 <<
" into Conditions Store");
206 return StatusCode::FAILURE;
208 ATH_MSG_INFO(
"recorded new CDO " << writeHandleDetElCont.key() <<
" with range "
209 << writeHandleDetElCont.getRange() <<
" with size of " << writeHandleDetElContSize <<
" into Conditions Store");
211 return StatusCode::SUCCESS;