ATLAS Offline Software
ActsMaterialMapping.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
7 // ATHENA
8 #include "Acts/Surfaces/PerigeeSurface.hpp"
9 #include "Acts/Utilities/Logger.hpp"
11 #include "GaudiKernel/EventContext.h"
12 #include "GaudiKernel/ISvcLocator.h"
13 
14 // ACTS
15 #include "Acts/Propagator/detail/SteppingLogger.hpp"
16 #include "Acts/Utilities/Helpers.hpp"
17 #include "Acts/Definitions/Units.hpp"
18 
19 // PACKAGE
20 #include "ActsInterop/Logger.h"
28 
29 // STL
30 #include <fstream>
31 #include <string>
32 
33 //TEST
34 #include "Acts/EventData/TrackParameters.hpp"
35 #include "Acts/Propagator/Navigator.hpp"
36 #include "Acts/Propagator/Propagator.hpp"
37 #include "Acts/Propagator/StandardAborters.hpp"
38 #include "Acts/Propagator/StraightLineStepper.hpp"
39 
41  ATH_MSG_DEBUG(name() << "::" << __FUNCTION__);
42 
43  if(!m_mapSurfaces && !m_mapVolumes){
44  ATH_MSG_ERROR("No element to map onto defined.");
45  return StatusCode::FAILURE;
46  }
50  if(m_mapSurfaces){
51  ATH_CHECK(m_surfaceMappingTool.retrieve() );
52  m_mappingState = m_surfaceMappingTool->mappingState();
53  }
54  if(m_mapVolumes){
55  ATH_CHECK(m_volumeMappingTool.retrieve() );
56  m_mappingStateVol = m_volumeMappingTool->mappingState();
57  }
60  return StatusCode::SUCCESS;
61 }
62 
64  ATH_MSG_DEBUG(name() << "::" << __FUNCTION__);
65  const EventContext& ctx = Gaudi::Hive::currentContext();
67 
68  if (materialStepCollection.isValid() and not materialStepCollection->empty()) {
69  Acts::RecordedMaterialTrack mTrack = m_materialStepConverterTool->convertToMaterialTrack(*materialStepCollection);
70 
71  if(m_mapSurfaces){
72  auto context = m_trackingGeometryTool->getNominalGeometryContext().context();
73  std::reference_wrapper<const Acts::GeometryContext> geoContext(context);
74  m_mappingState.geoContext = geoContext;
75  m_surfaceMappingTool->mapper()->mapMaterialTrack(m_mappingState, mTrack);
76  }
77  if(m_mapVolumes){
78  auto context = m_trackingGeometryTool->getNominalGeometryContext().context();
79  std::reference_wrapper<const Acts::GeometryContext> geoContext(context);
80  m_mappingStateVol.geoContext = geoContext;
81  m_volumeMappingTool->mapper()->mapMaterialTrack(m_mappingStateVol, mTrack);
82  }
83  m_materialTrackWriterSvc->write(mTrack);
84  }
85  return StatusCode::SUCCESS;
86 }
87 
89  ATH_MSG_DEBUG(name() << "::" << __FUNCTION__);
90  Acts::DetectorMaterialMaps detectorMaterial;
91 
92  // Finalize all the maps using the cached state
94  m_surfaceMappingTool->mapper()->finalizeMaps(m_mappingState);
95  m_volumeMappingTool->mapper()->finalizeMaps(m_mappingStateVol);
96  // Loop over the state, and collect the maps for surfaces
97  for (auto& [key, value] : m_mappingState.surfaceMaterial) {
98  detectorMaterial.first.insert({key, std::move(value)});
99  }
100  // Loop over the state, and collect the maps for volumes
101  for (auto& [key, value] : m_mappingStateVol.volumeMaterial) {
102  detectorMaterial.second.insert({key, std::move(value)});
103  }
104  }
105  else{
106  if(m_mapSurfaces){
107  m_surfaceMappingTool->mapper()->finalizeMaps(m_mappingState);
108  // Loop over the state, and collect the maps for surfaces
109  for (auto& [key, value] : m_mappingState.surfaceMaterial) {
110  detectorMaterial.first.insert({key, std::move(value)});
111  }
112  // Loop over the state, and collect the maps for volumes
113  for (auto& [key, value] : m_mappingState.volumeMaterial) {
114  detectorMaterial.second.insert({key, std::move(value)});
115  }
116  }
117  if(m_mapVolumes){
118  m_volumeMappingTool->mapper()->finalizeMaps(m_mappingStateVol);
119  // Loop over the state, and collect the maps for surfaces
120  for (auto& [key, value] : m_mappingStateVol.surfaceMaterial) {
121  detectorMaterial.first.insert({key, std::move(value)});
122  }
123  // Loop over the state, and collect the maps for volumes
124  for (auto& [key, value] : m_mappingStateVol.volumeMaterial) {
125  detectorMaterial.second.insert({key, std::move(value)});
126  }
127  }
128  }
129 
130  auto context = m_trackingGeometryTool->getNominalGeometryContext();
131  m_materialJsonWriterTool->write(context, detectorMaterial);
132 
133  return StatusCode::SUCCESS;
134 
135 }
IActsSurfaceMappingTool.h
IActsVolumeMappingTool.h
ActsMaterialMapping::m_materialStepConverterTool
ToolHandle< IActsMaterialStepConverterTool > m_materialStepConverterTool
Definition: ActsMaterialMapping.h:64
ActsGeometryContext.h
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:67
ActsMaterialMapping::finalize
virtual StatusCode finalize() override
Definition: ActsMaterialMapping.cxx:88
ActsMaterialMapping::m_materialJsonWriterTool
ToolHandle< IActsMaterialJsonWriterTool > m_materialJsonWriterTool
Definition: ActsMaterialMapping.h:68
Acts::RecordedMaterialTrack
std::pair< std::pair< Acts::Vector3, Acts::Vector3 >, RecordedMaterial > RecordedMaterialTrack
Recorded material track.
Definition: ActsExtrapolationAlg.cxx:43
ActsMaterialMapping::m_volumeMappingTool
ToolHandle< IActsVolumeMappingTool > m_volumeMappingTool
Definition: ActsMaterialMapping.h:67
athena.value
value
Definition: athena.py:124
ActsMaterialMapping::initialize
virtual StatusCode initialize() override
Definition: ActsMaterialMapping.cxx:40
Acts::DetectorMaterialMaps
std::pair< SurfaceMaterialMap, VolumeMaterialMap > DetectorMaterialMaps
Definition: ActsMaterialMapping.h:42
ActsMaterialMapping.h
IActsMaterialStepConverterTool.h
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
ActsMaterialMapping::m_trackingGeometryTool
PublicToolHandle< ActsTrk::ITrackingGeometryTool > m_trackingGeometryTool
Definition: ActsMaterialMapping.h:61
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
ActsMaterialMapping::m_mapVolumes
Gaudi::Property< bool > m_mapVolumes
Definition: ActsMaterialMapping.h:63
ActsMaterialMapping::m_surfaceMappingTool
ToolHandle< IActsSurfaceMappingTool > m_surfaceMappingTool
Definition: ActsMaterialMapping.h:66
IActsPropStepRootWriterSvc.h
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
ActsMaterialMapping::m_mappingState
Acts::SurfaceMaterialMapper::State m_mappingState
Definition: ActsMaterialMapping.h:72
ActsMaterialMapping::m_inputMaterialStepCollection
SG::ReadHandleKey< Trk::MaterialStepCollection > m_inputMaterialStepCollection
Definition: ActsMaterialMapping.h:65
ActsMaterialMapping::m_mapSurfaces
Gaudi::Property< bool > m_mapSurfaces
Definition: ActsMaterialMapping.h:62
ActsMaterialMapping::m_mappingStateVol
Acts::VolumeMaterialMapper::State m_mappingStateVol
Definition: ActsMaterialMapping.h:73
ActsMaterialMapping::m_materialTrackWriterSvc
ServiceHandle< IActsMaterialTrackWriterSvc > m_materialTrackWriterSvc
Definition: ActsMaterialMapping.h:60
IActsMaterialJsonWriterTool.h
ITrackingGeometryTool.h
ActsMaterialMapping::execute
virtual StatusCode execute() override
Definition: ActsMaterialMapping.cxx:63
Logger.h
IActsMaterialTrackWriterSvc.h
DataVector::empty
bool empty() const noexcept
Returns true if the collection is empty.
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37