ATLAS Offline Software
Public Member Functions | Private Member Functions | Private Attributes | List of all members
ActsTrackingGeometrySvc Class Reference

#include <ActsTrackingGeometrySvc.h>

Inheritance diagram for ActsTrackingGeometrySvc:
Collaboration diagram for ActsTrackingGeometrySvc:

Public Member Functions

StatusCode initialize () override
 
 ActsTrackingGeometrySvc (const std::string &name, ISvcLocator *pSvcLocator)
 
std::shared_ptr< const Acts::TrackingGeometry > trackingGeometry () override
 
unsigned int populateAlignmentStore (ActsTrk::DetectorAlignStore &store) const override
 
const ActsTrk::GeometryContextgetNominalContext () const override
 

Private Member Functions

ActsLayerBuilder::Config makeLayerBuilderConfig (const InDetDD::InDetDetectorManager *manager)
 
std::shared_ptr< const Acts::ILayerBuilder > makeStrawLayerBuilder (const InDetDD::InDetDetectorManager *manager)
 
std::shared_ptr< const Acts::ILayerBuilder > makeHGTDLayerBuilder (const HGTD_DetectorManager *manager)
 
std::shared_ptr< Acts::TrackingVolume > makeSCTTRTAssembly (const Acts::GeometryContext &gctx, const Acts::ILayerBuilder &sct_lb, const Acts::ILayerBuilder &trt_lb, const Acts::CylinderVolumeHelper &cvh, const std::shared_ptr< const Acts::TrackingVolume > &pixel)
 
Acts::CylinderVolumeBuilder::Config makeBeamPipeConfig (std::shared_ptr< const Acts::CylinderVolumeHelper > cvh) const
 
bool runConsistencyChecks () const
 

Private Attributes

ServiceHandle< StoreGateSvcm_detStore
 
const InDetDD::SiDetectorManagerp_pixelManager {nullptr}
 
const InDetDD::SiDetectorManagerp_SCTManager {nullptr}
 
const InDetDD::TRT_DetectorManagerp_TRTManager {nullptr}
 
const InDetDD::SiDetectorManagerp_ITkPixelManager {nullptr}
 
const InDetDD::SiDetectorManagerp_ITkStripManager {nullptr}
 
const BeamPipeDetectorManagerp_beamPipeMgr {nullptr}
 
const HGTD_DetectorManagerp_HGTDManager {nullptr}
 
std::shared_ptr< ActsElementVectorm_elementStore {nullptr}
 
std::shared_ptr< const Acts::TrackingGeometry > m_trackingGeometry {nullptr}
 
const TRT_IDm_TRT_idHelper {nullptr}
 
const HGTD_IDm_HGTD_idHelper {nullptr}
 
ActsTrk::GeometryContext m_nominalContext {}
 
Gaudi::Property< bool > m_useMaterialMap {this, "UseMaterialMap", false, ""}
 
Gaudi::Property< bool > m_objDebugOutput {this, "ObjDebugOutput", false, ""}
 
Gaudi::Property< std::string > m_materialMapInputFileBase {this, "MaterialMapInputFile", "", ""}
 
Gaudi::Property< std::string > m_materialMapCalibFolder {this, "MaterialMapCalibFolder", ".", ""}
 
Gaudi::Property< bool > m_buildBeamPipe {this, "BuildBeamPipe", false, ""}
 
Gaudi::Property< std::vector< size_t > > m_barrelMaterialBins {this, "BarrelMaterialBins", {10, 10}}
 
Gaudi::Property< std::vector< size_t > > m_endcapMaterialBins {this, "EndcapMaterialBins", {5, 20}}
 
Gaudi::Property< std::vector< std::string > > m_buildSubdetectors {this, "BuildSubDetectors", {"Pixel", "SCT", "TRT", "Calo", "HGTD", "Muon"}}
 
Gaudi::Property< std::vector< float > > m_passiveITkInnerPixelBarrelLayerRadii {this, "PassiveITkInnerPixelBarrelLayerRadii", {}}
 the specifications for building additional passive cylinders in the barrel region: for each cylinder you want to specify radius, half length in z and thickness More...
 
Gaudi::Property< std::vector< float > > m_passiveITkInnerPixelBarrelLayerHalflengthZ {this, "PassiveITkInnerPixelBarrelLayerHalflengthZ", {}}
 
Gaudi::Property< std::vector< float > > m_passiveITkInnerPixelBarrelLayerThickness {this, "PassiveITkInnerPixelBarrelLayerThickness", {}}
 
Gaudi::Property< std::vector< float > > m_passiveITkOuterPixelBarrelLayerRadii {this, "PassiveITkOuterPixelBarrelLayerRadii", {}}
 
Gaudi::Property< std::vector< float > > m_passiveITkOuterPixelBarrelLayerHalflengthZ {this, "PassiveITkOuterPixelBarrelLayerHalflengthZ", {}}
 
Gaudi::Property< std::vector< float > > m_passiveITkOuterPixelBarrelLayerThickness {this, "PassiveITkOuterPixelBarrelLayerThickness", {}}
 
Gaudi::Property< std::vector< float > > m_passiveITkStripBarrelLayerRadii {this, "PassiveITkStripBarrelLayerRadii", {}}
 
Gaudi::Property< std::vector< float > > m_passiveITkStripBarrelLayerHalflengthZ {this, "PassiveITkStripBarrelLayerHalflengthZ", {}}
 
Gaudi::Property< std::vector< float > > m_passiveITkStripBarrelLayerThickness {this, "PassiveITkStripBarrelLayerThickness", {}}
 
BooleanProperty m_runConsistencyChecks
 
StringProperty m_consistencyCheckOutput
 
Gaudi::Property< size_t > m_consistencyCheckPoints
 
ToolHandle< IActsTrackingVolumeBuilderm_caloVolumeBuilder {this, "CaloVolumeBuilder", ""}
 
ToolHandle< IActsTrackingVolumeBuilderm_msVolumeBuilder {this, "MSVolumeBuilder", ""}
 
ToolHandleArray< ActsTrk::IBlueprintNodeBuilderm_blueprintNodeBuilders {this, "BlueprintNodeBuilders", {}}
 
Gaudi::Property< std::vector< unsigned int > > m_subDetNoAlignProp {this, "NotAlignDetectors", {}}
 Define the subdetectors for which the tracking geometry does not expect a valid alignment store. More...
 
std::set< ActsTrk::DetectorTypem_subDetNoAlign {}
 
Gaudi::Property< bool > m_useBlueprint {this, "UseBlueprint", false, "Use the new Blueprint API for geometry construction"}
 
Gaudi::Property< std::string > m_blueprintGraphviz
 
Gaudi::Property< bool > m_doEndcapLayerMerging {this, "DoEndcapLayerMerging", true, "Merge overlapping endcap layers in z"}
 
Gaudi::Property< double > m_numberOfBinsFactor {this, "NumberOfBinsFactor", 5.0}
 controls how many bins are created for the sensitive surface grid. More...
 
Gaudi::Property< double > m_numberOfInnermostLayerBinsFactor {this, "NumberOfInnermostLayerBinsFactor",2.0}
 Special treatment for the innermost pixel layer to have more control on bin size to account for shallow angle tracks. More...
 

Detailed Description

Definition at line 55 of file ActsTrackingGeometrySvc.h.

Constructor & Destructor Documentation

◆ ActsTrackingGeometrySvc()

ActsTrackingGeometrySvc::ActsTrackingGeometrySvc ( const std::string &  name,
ISvcLocator *  pSvcLocator 
)

Definition at line 69 of file ActsTrackingGeometrySvc.cxx.

71  : base_class(name, svc),
72  m_detStore("StoreGateSvc/DetectorStore", name),
73  m_elementStore (std::make_shared<ActsElementVector>())
74 {
75 }

Member Function Documentation

◆ getNominalContext()

const GeometryContext & ActsTrackingGeometrySvc::getNominalContext ( ) const
override

Definition at line 1138 of file ActsTrackingGeometrySvc.cxx.

1138 { return m_nominalContext; }

◆ initialize()

StatusCode ActsTrackingGeometrySvc::initialize ( )
override

Definition at line 77 of file ActsTrackingGeometrySvc.cxx.

77  {
78  ATH_MSG_INFO(name() << " is initializing");
79  for (unsigned int skipAlign : m_subDetNoAlignProp) {
80  try {
81  m_subDetNoAlign.insert(static_cast<DetectorType>(skipAlign));
82  } catch (...) {
83  ATH_MSG_FATAL("Failed to interpret " << m_subDetNoAlignProp << " as ActsDetectorElements");
84  return StatusCode::FAILURE;
85  }
86  }
87  ATH_CHECK(m_caloVolumeBuilder.retrieve(EnableTool{!m_caloVolumeBuilder.empty()}));
88  ATH_CHECK(m_msVolumeBuilder.retrieve(EnableTool{!m_msVolumeBuilder.empty()}));
89 
90 
91  // FIXME: ActsCaloTrackingVolumeBuilder holds ReadHandle to
92  // CaloDetDescrManager. Hopefully this service is never called before that
93  // object is available.
94  m_autoRetrieveTools = false;
95  m_checkToolDeps = false;
96 
97  ATH_MSG_INFO("ACTS version is: v"
98  << Acts::VersionMajor << "." << Acts::VersionMinor << "."
99  << Acts::VersionPatch << " [" << Acts::CommitHash.value_or("unknown hash") << "]");
100 
101  // load which subdetectors to build from property
102  std::set<std::string> buildSubdet(m_buildSubdetectors.begin(),
103  m_buildSubdetectors.end());
104  ATH_MSG_INFO("Configured to build " << buildSubdet.size()
105  << " subdetectors:");
106  for (const auto &s : buildSubdet) {
107  ATH_MSG_INFO(" - " << s);
108  }
109 
110  ATH_MSG_DEBUG("Loading detector manager(s)");
111  if (buildSubdet.find("Pixel") != buildSubdet.end()) {
112  ATH_CHECK(m_detStore->retrieve(p_pixelManager, "Pixel"));
113  }
114  if (buildSubdet.find("SCT") != buildSubdet.end()) {
115  ATH_CHECK(m_detStore->retrieve(p_SCTManager, "SCT"));
116  }
117  if (buildSubdet.find("TRT") != buildSubdet.end()) {
118  ATH_CHECK(m_detStore->retrieve(p_TRTManager, "TRT"));
119  ATH_CHECK(m_detStore->retrieve(m_TRT_idHelper, "TRT_ID"));
120  }
121  if (buildSubdet.find("ITkPixel") != buildSubdet.end()) {
122  ATH_CHECK(m_detStore->retrieve(p_ITkPixelManager, "ITkPixel"));
123  }
124  if (buildSubdet.find("ITkStrip") != buildSubdet.end()) {
125  ATH_CHECK(m_detStore->retrieve(p_ITkStripManager, "ITkStrip"));
126  }
127  if (buildSubdet.find("HGTD") != buildSubdet.end()) {
128  ATH_CHECK(m_detStore->retrieve(p_HGTDManager, "HGTD"));
129  ATH_CHECK(m_detStore->retrieve(m_HGTD_idHelper, "HGTD_ID"));
130  }
131 
132  if(m_buildBeamPipe) {
133  ATH_CHECK(m_detStore->retrieve(p_beamPipeMgr, "BeamPipe"));
134  }
135 
136  // Consistency check on the size vectors for passive layers
139  ATH_MSG_FATAL("Consistency check for ITk inner pixel barrel passive layer construction failed. Please check your inputs! ");
140  return StatusCode::FAILURE;
141  }
142 
145  ATH_MSG_FATAL("Consistency check for ITk outer pixel barrel passive layer construction failed. Please check your inputs! ");
146  return StatusCode::FAILURE;
147  }
148 
151  ATH_MSG_FATAL("Consistency check for ITk strip barrel passive layer construction failed. Please check your inputs! ");
152  return StatusCode::FAILURE;
153  }
154 
155  if (m_useBlueprint) {
156 
157 
158  ATH_MSG_INFO("Using Blueprint API for geometry construction");
159  std::set<std::string> buildSubdet(m_buildSubdetectors.begin(),
160  m_buildSubdetectors.end());
161 
163 
164  using enum Acts::AxisDirection;
165 
166  std::vector<ActsTrk::IBlueprintNodeBuilder*> ptrBuilders;
168  std::back_inserter(ptrBuilders),
169  [](ToolHandle<ActsTrk::IBlueprintNodeBuilder>& b) { return b.get(); });
170 
171  auto logger = makeActsAthenaLogger(this, std::string("Blueprint"), std::string("ActsTGSvc"));
172 
173  Acts::Experimental::Blueprint::Config cfg;
174  cfg.envelope[AxisZ] = {20_mm, 20_mm};
175  cfg.envelope[AxisR] = {0_mm, 20_mm};
176 
177  auto blueprint = std::make_unique<Acts::Experimental::Blueprint>(cfg);
178 
179  auto& root = blueprint->addCylinderContainer("Detector", AxisZ);
180  //The starting top node
181  std::shared_ptr<Acts::Experimental::BlueprintNode> currentTop{nullptr};
182 
183  for (auto& builder : ptrBuilders) {
184  currentTop = builder->buildBlueprintNode(getNominalContext().context(), std::move(currentTop));
185 
186  }
187 
188  root.addChild(std::move(currentTop));
189 
190  m_trackingGeometry = blueprint->construct(
191  {}, getNominalContext().context(), *logger->clone(std::nullopt, Acts::Logging::DEBUG));
192 
193  if (m_objDebugOutput) {
194  Acts::ObjVisualization3D vis;
195  m_trackingGeometry->visualize(vis, getNominalContext().context(), {.visible = false},
196  {.visible = false}, {.visible = true});
197  vis.write("blueprint_sensitive.obj");
198  vis.clear();
199 
200  m_trackingGeometry->visualize(vis, getNominalContext().context(), {.visible = true},
201  {.visible = false}, {.visible = false});
202  vis.write("blueprint_volume.obj");
203  vis.clear();
204 
205  m_trackingGeometry->visualize(vis, getNominalContext().context(), {.visible = false},
206  {.visible = true}, {.visible = false});
207  vis.write("blueprint_portals.obj");
208 
209 
210  }
211 
212  return StatusCode::SUCCESS;
213  }
214 
215  ATH_MSG_DEBUG("Setting up ACTS geometry helpers");
216 
217  Acts::LayerArrayCreator::Config lacCfg;
218  auto layerArrayCreator = std::make_shared<const Acts::LayerArrayCreator>(
219  lacCfg, makeActsAthenaLogger(this, std::string("LayArrCrtr"), std::string("ActsTGSvc")));
220 
221  Acts::TrackingVolumeArrayCreator::Config tvcCfg;
222  auto trackingVolumeArrayCreator =
223  std::make_shared<const Acts::TrackingVolumeArrayCreator>(
224  tvcCfg, makeActsAthenaLogger(this, std::string("TrkVolArrCrtr"), std::string("ActsTGSvc")));
225 
226  Acts::CylinderVolumeHelper::Config cvhConfig;
227  cvhConfig.layerArrayCreator = layerArrayCreator;
228  cvhConfig.trackingVolumeArrayCreator = trackingVolumeArrayCreator;
229 
230  auto cylinderVolumeHelper =
231  std::make_shared<const Acts::CylinderVolumeHelper>(
232  cvhConfig, makeActsAthenaLogger(this, std::string("CylVolHlpr"), std::string("ActsTGSvc")));
233 
234  Acts::TrackingGeometryBuilder::Config tgbConfig;
235  tgbConfig.trackingVolumeHelper = cylinderVolumeHelper;
236 
237  if (m_useMaterialMap) {
238  std::shared_ptr<const Acts::IMaterialDecorator> matDeco = nullptr;
239 
240  std::string matFileFullPath = PathResolverFindCalibFile(m_materialMapCalibFolder.value()+"/"+m_materialMapInputFileBase.value());
241  if (matFileFullPath.empty()) {
242  ATH_MSG_ERROR( "Material Map Input File " << m_materialMapCalibFolder.value() << "/" << m_materialMapInputFileBase.value() << " not found.");
243  return StatusCode::FAILURE;
244  }
245  ATH_MSG_INFO("Configured to use material input: " << matFileFullPath);
246 
247  if (matFileFullPath.find(".json") != std::string::npos) {
248  // Set up the converter first
249  Acts::MaterialMapJsonConverter::Config jsonGeoConvConfig;
250  // Set up the json-based decorator
251  matDeco = std::make_shared<const Acts::JsonMaterialDecorator>(
252  jsonGeoConvConfig, matFileFullPath, ActsTrk::actsLevelVector(msg().level()));
253  }
254  tgbConfig.materialDecorator = matDeco;
255  }
256 
257  std::array<double, 2> sctECEnvelopeZ{20_mm, 20_mm};
258 
259  try {
260  // BeamPipe
261  if(m_buildBeamPipe) {
262  tgbConfig.trackingVolumeBuilders.push_back([&](const auto &gctx,
263  const auto &inner,
264  const auto &) {
265 
266  Acts::CylinderVolumeBuilder::Config bpvConfig =
267  makeBeamPipeConfig(cylinderVolumeHelper);
268 
269  Acts::CylinderVolumeBuilder beamPipeVolumeBuilder {
270  bpvConfig, makeActsAthenaLogger(this, std::string("BPVolBldr"), std::string("ActsTGSvc"))};
271 
272  return beamPipeVolumeBuilder.trackingVolume(gctx, inner);
273  });
274  }
275 
276 
277 
278  // PIXEL
279  if (buildSubdet.count("Pixel") > 0) {
280  tgbConfig.trackingVolumeBuilders.push_back([&](const auto &gctx,
281  const auto &inner,
282  const auto &) {
285  auto lb = std::make_shared<ActsLayerBuilder>(
286  cfg, makeActsAthenaLogger(this, std::string("PixelGMSLayBldr"), std::string("ActsTGSvc")));
287  Acts::CylinderVolumeBuilder::Config cvbConfig;
288  cvbConfig.layerEnvelopeR = {3_mm, 3_mm};
289  cvbConfig.layerEnvelopeZ = 1_mm;
290  cvbConfig.trackingVolumeHelper = cylinderVolumeHelper;
291  cvbConfig.volumeName = "Pixel";
292  cvbConfig.layerBuilder = lb;
293  cvbConfig.buildToRadiusZero = !m_buildBeamPipe;
294 
295  Acts::CylinderVolumeBuilder cvb(
296  cvbConfig, makeActsAthenaLogger(this, std::string("CylVolBldr"), std::string("ActsTGSvc")));
297 
298  return cvb.trackingVolume(gctx, inner);
299  });
300  }
301 
302  // ITK PIXEL
303  if (buildSubdet.count("ITkPixel") > 0) {
304  tgbConfig.trackingVolumeBuilders.push_back(
305  [&](const auto &gctx, const auto &inner, const auto &) {
308  cfg.objDebugOutput = m_objDebugOutput;
309  cfg.doEndcapLayerMerging = true;
310  cfg.passiveBarrelLayerRadii = m_passiveITkInnerPixelBarrelLayerRadii;
311  cfg.passiveBarrelLayerHalflengthZ = m_passiveITkInnerPixelBarrelLayerHalflengthZ;
312  cfg.passiveBarrelLayerThickness = m_passiveITkInnerPixelBarrelLayerThickness;
313  auto lb = std::make_shared<ActsLayerBuilder>(
314  cfg, makeActsAthenaLogger(this, std::string("ITkPxInLb"), std::string("ActsTGSvc")));
315 
316  Acts::CylinderVolumeBuilder::Config cvbConfig;
317  cvbConfig.layerEnvelopeR = {5_mm, 5_mm};
318  cvbConfig.layerEnvelopeZ = 1_mm;
319  cvbConfig.trackingVolumeHelper = cylinderVolumeHelper;
320  cvbConfig.volumeName = "ITkPixelInner";
321  cvbConfig.layerBuilder = lb;
322  cvbConfig.buildToRadiusZero = !m_buildBeamPipe;
323 
324  Acts::CylinderVolumeBuilder cvb(
325  cvbConfig,
326  makeActsAthenaLogger(this, std::string("CylVolBldr"), std::string("ActsTGSvc")));
327 
328  return cvb.trackingVolume(gctx, inner);
329  });
330 
331  tgbConfig.trackingVolumeBuilders.push_back(
332  [&](const auto &gctx, const auto &inner, const auto &) {
335  cfg.objDebugOutput = m_objDebugOutput;
336  cfg.doEndcapLayerMerging = false;
337  cfg.passiveBarrelLayerRadii = m_passiveITkOuterPixelBarrelLayerRadii;
338  cfg.passiveBarrelLayerHalflengthZ = m_passiveITkOuterPixelBarrelLayerHalflengthZ;
339  cfg.passiveBarrelLayerThickness = m_passiveITkOuterPixelBarrelLayerThickness;
340  auto lb = std::make_shared<ActsLayerBuilder>(
341  cfg, makeActsAthenaLogger(this, std::string("ITkPxOtLb"), std::string("ActsTGSvc")));
342 
343  Acts::CylinderVolumeBuilder::Config cvbConfig;
344  cvbConfig.layerEnvelopeR = {5_mm, 5_mm};
345  cvbConfig.layerEnvelopeZ = 1_mm;
346  cvbConfig.trackingVolumeHelper = cylinderVolumeHelper;
347  cvbConfig.volumeName = "ITkPixelOuter";
348  cvbConfig.layerBuilder = lb;
349  cvbConfig.buildToRadiusZero = false;
350  cvbConfig.checkRingLayout = true;
351  cvbConfig.ringTolerance = 10_mm;
352 
353  Acts::CylinderVolumeBuilder cvb(
354  cvbConfig,
355  makeActsAthenaLogger(this, std::string("CylVolBldr"), std::string("ActsTGSvc")));
356 
357  return cvb.trackingVolume(gctx, inner);
358  });
359  }
360 
361  // ITK STRIP
362  if (buildSubdet.count("ITkStrip") > 0) {
363  tgbConfig.trackingVolumeBuilders.push_back(
364  [&](const auto &gctx, const auto &inner, const auto &) {
367  cfg.objDebugOutput = m_objDebugOutput;
368  cfg.passiveBarrelLayerRadii = m_passiveITkStripBarrelLayerRadii;
369  cfg.passiveBarrelLayerHalflengthZ = m_passiveITkStripBarrelLayerHalflengthZ;
370  cfg.passiveBarrelLayerThickness = m_passiveITkStripBarrelLayerThickness;
371  auto lb = std::make_shared<ActsLayerBuilder>(
372  cfg, makeActsAthenaLogger(this, std::string("ITkStripLB"), std::string("ActsTGSvc")));
373 
374  Acts::CylinderVolumeBuilder::Config cvbConfig;
375  cvbConfig.layerEnvelopeR = {5_mm, 5_mm};
376  cvbConfig.layerEnvelopeZ = 1_mm;
377  cvbConfig.trackingVolumeHelper = cylinderVolumeHelper;
378  cvbConfig.volumeName = "ITkStrip";
379  cvbConfig.layerBuilder = lb;
380  cvbConfig.buildToRadiusZero =
381  buildSubdet.count("ITkPixel") == 0 && !m_buildBeamPipe;
382 
383  Acts::CylinderVolumeBuilder cvb(
384  cvbConfig,
385  makeActsAthenaLogger(this, std::string("CylVolBldr"), std::string("ActsTGSvc")));
386 
387  return cvb.trackingVolume(gctx, inner);
388  });
389  }
390 
391  bool buildSCT = buildSubdet.count("SCT") > 0;
392  bool buildTRT = buildSubdet.count("TRT") > 0;
393 
394  if (buildSCT && buildTRT) {
395  // building both we need to take care
396  tgbConfig.trackingVolumeBuilders.push_back(
397  [&](const auto &gctx, const auto &inner, const auto &) {
400  cfg.endcapEnvelopeZ = sctECEnvelopeZ;
401  auto sct_lb = std::make_shared<ActsLayerBuilder>(
402  cfg, makeActsAthenaLogger(this, std::string("SCTGMSLayBldr"), std::string("ActsTGSvc")));
403 
404  auto trt_lb = makeStrawLayerBuilder(p_TRTManager);
405 
406  return makeSCTTRTAssembly(gctx, *sct_lb, *trt_lb,
407  *cylinderVolumeHelper, inner);
408  });
409 
410  } else if (buildSCT) {
411  tgbConfig.trackingVolumeBuilders.push_back(
412  [&](const auto &gctx, const auto &inner, const auto &) {
413  auto lbCfg = makeLayerBuilderConfig(p_SCTManager);
414  lbCfg.mode = ActsLayerBuilder::Mode::SCT;
415  lbCfg.endcapEnvelopeZ = sctECEnvelopeZ;
416  auto lb = std::make_shared<ActsLayerBuilder>(
417  lbCfg,
418  makeActsAthenaLogger(this, std::string("SCTGMSLayBldr"), std::string("ActsTGSvc")));
419 
420  Acts::CylinderVolumeBuilder::Config cvbConfig;
421  cvbConfig.layerEnvelopeR = {5_mm, 5_mm};
422  cvbConfig.layerEnvelopeZ = 2_mm;
423  cvbConfig.trackingVolumeHelper = cylinderVolumeHelper;
424  cvbConfig.volumeName = "SCT";
425  cvbConfig.layerBuilder = lb;
426  cvbConfig.buildToRadiusZero = false;
427 
428  Acts::CylinderVolumeBuilder cvb(
429  cvbConfig,
430  makeActsAthenaLogger(this, std::string("SCTCylVolBldr"), std::string("ActsTGSvc")));
431 
432  return cvb.trackingVolume(gctx, inner);
433  });
434  } else if (buildTRT) {
435  tgbConfig.trackingVolumeBuilders.push_back(
436  [&](const auto &gctx, const auto &inner, const auto &) {
438  Acts::CylinderVolumeBuilder::Config cvbConfig;
439  cvbConfig.layerEnvelopeR = {5_mm, 5_mm};
440  cvbConfig.layerEnvelopeZ = 2_mm;
441  cvbConfig.trackingVolumeHelper = cylinderVolumeHelper;
442  cvbConfig.volumeName = "TRT";
443  cvbConfig.layerBuilder = lb;
444  cvbConfig.buildToRadiusZero = false;
445 
446  Acts::CylinderVolumeBuilder cvb(
447  cvbConfig,
448  makeActsAthenaLogger(this, std::string("TRTCylVolBldr"), std::string("ActsTGSvc")));
449 
450  return cvb.trackingVolume(gctx, inner);
451  });
452  }
453 
454  //HGTD
455  if(buildSubdet.count("HGTD") > 0) {
456  tgbConfig.trackingVolumeBuilders.push_back(
457  [&](const auto &gctx, const auto &inner, const auto &) {
458  auto lb = makeHGTDLayerBuilder(p_HGTDManager); //using ActsHGTDLayerBuilder
459  Acts::CylinderVolumeBuilder::Config cvbConfig;
460  cvbConfig.layerEnvelopeR = {5_mm, 5_mm};
461  cvbConfig.layerEnvelopeZ = 1_mm;
462  cvbConfig.trackingVolumeHelper = cylinderVolumeHelper;
463  cvbConfig.volumeName = "HGTD";
464  cvbConfig.layerBuilder = lb;
465  cvbConfig.buildToRadiusZero = false;
466 
467  Acts::CylinderVolumeBuilder cvb(
468  cvbConfig,
469  makeActsAthenaLogger(this, std::string("HGTDCylVolBldr"), std::string("ActsTGSvc")));
470 
471  return cvb.trackingVolume(gctx, inner);
472  });
473  }
474 
475  // Calo
476  if (m_caloVolumeBuilder.isEnabled()) {
477  tgbConfig.trackingVolumeBuilders.push_back(
478  [&](const auto &gctx, const auto &inner, const auto &) {
479  return m_caloVolumeBuilder->trackingVolume(gctx, inner, nullptr);
480  });
481  }
482 
483  if (m_msVolumeBuilder.isEnabled()){
484  tgbConfig.trackingVolumeBuilders.push_back(
485  [&](const auto &gctx, const auto &inner, const auto &) {
486  return m_msVolumeBuilder->trackingVolume(gctx, inner, nullptr);
487  });
488  }
489  } catch (const std::exception &e) {
490  ATH_MSG_ERROR("Encountered error when building Acts tracking geometry");
491  ATH_MSG_ERROR(e.what());
492  return StatusCode::FAILURE;
493  }
494 
495  auto trackingGeometryBuilder =
496  std::make_shared<const Acts::TrackingGeometryBuilder>(
497  tgbConfig, makeActsAthenaLogger(this, std::string("TrkGeomBldr"), std::string("ActsTGSvc")));
498 
499  ATH_MSG_VERBOSE("Begin building process");
501  trackingGeometryBuilder->trackingGeometry(getNominalContext().context());
502  ATH_MSG_VERBOSE("Building process completed");
503 
504  if (!m_trackingGeometry) {
505  ATH_MSG_ERROR("No ACTS tracking geometry was built. Cannot proceeed");
506  return StatusCode::FAILURE;
507  }
508 
509 
511  ATH_MSG_INFO("Running extra consistency check! (this is SLOW)");
512  if(!runConsistencyChecks()) {
513  ATH_MSG_ERROR("Consistency check has failed! Geometry is not consistent");
514  return StatusCode::FAILURE;
515  }
516  }
517 
518  ATH_MSG_INFO("Acts TrackingGeometry construction completed");
519 
520  return StatusCode::SUCCESS;
521 }

◆ makeBeamPipeConfig()

Acts::CylinderVolumeBuilder::Config ActsTrackingGeometrySvc::makeBeamPipeConfig ( std::shared_ptr< const Acts::CylinderVolumeHelper >  cvh) const
private

Definition at line 1141 of file ActsTrackingGeometrySvc.cxx.

1142  {
1143 
1144  // adapted from InnerDetector/InDetDetDescr/InDetTrackingGeometry/src/BeamPipeBuilder.cxx
1145 
1146  PVConstLink beamPipeTopVolume = p_beamPipeMgr->getTreeTop(0);
1147 
1148  if (p_beamPipeMgr->getNumTreeTops() == 1){
1149  beamPipeTopVolume = p_beamPipeMgr->getTreeTop(0)->getChildVol(0)->getChildVol(0);
1150  }
1151 
1152  Acts::Transform3 beamPipeTransform;
1153  beamPipeTransform.setIdentity();
1154 
1155  beamPipeTransform = Acts::Translation3(beamPipeTopVolume->getX().translation());
1156 
1157  double beamPipeRadius = 20;
1158 
1159  const GeoLogVol* beamPipeLogVolume = beamPipeTopVolume->getLogVol();
1160  const GeoTube* beamPipeTube = nullptr;
1161 
1162 
1163  if (beamPipeLogVolume == nullptr) {
1164  ATH_MSG_ERROR("Beam pip volume has no log volume");
1165  throw std::runtime_error("Beam pip volume has no log volume");
1166  }
1167  // get the geoShape and translate
1168  beamPipeTube = dynamic_cast<const GeoTube*>(beamPipeLogVolume->getShape());
1169  if (beamPipeTube == nullptr){
1170  ATH_MSG_ERROR("BeamPipeLogVolume was not of type GeoTube");
1171  throw std::runtime_error{"BeamPipeLogVolume was not of type GeoTube"};
1172  }
1173 
1174  for(unsigned int i=0;i<beamPipeTopVolume->getNChildVols();i++) {
1175 
1176  if(beamPipeTopVolume->getNameOfChildVol(i) == "SectionC03"){
1177 
1178  PVConstLink childTopVolume = beamPipeTopVolume->getChildVol(i);
1179  const GeoLogVol* childLogVolume = childTopVolume->getLogVol();
1180  const GeoTube* childTube = nullptr;
1181 
1182  if (childLogVolume){
1183  childTube = dynamic_cast<const GeoTube*>(childLogVolume->getShape());
1184  if (childTube){
1185  beamPipeRadius = 0.5 * (childTube->getRMax()+childTube->getRMin());
1186  }
1187  }
1188 
1189  break; // Exit loop after SectionC03 is found
1190  }
1191 
1192  } // Loop over child volumes
1193 
1194  ATH_MSG_VERBOSE("BeamPipe constructed from Database: translation (yes) - radius "
1195  << ( beamPipeTube ? "(yes)" : "(no)") << " - r = " << beamPipeRadius );
1196 
1197  ATH_MSG_VERBOSE("BeamPipe shift estimated as : " << Amg::toString(beamPipeTransform.translation()));
1198 
1199  Acts::CylinderVolumeBuilder::Config cfg;
1200 
1201  Acts::PassiveLayerBuilder::Config bplConfig;
1202  bplConfig.layerIdentification = "BeamPipe";
1203  bplConfig.centralLayerRadii = {beamPipeRadius * 1_mm};
1204  bplConfig.centralLayerHalflengthZ = {3000_mm};
1205  bplConfig.centralLayerThickness = {1_mm};
1206  auto beamPipeBuilder = std::make_shared<const Acts::PassiveLayerBuilder>(
1207  bplConfig, makeActsAthenaLogger(this, std::string("BPLayBldr"), std::string("ActsTGSvc")));
1208 
1209  // create the volume for the beam pipe
1210  cfg.trackingVolumeHelper = cvh;
1211  cfg.volumeName = "BeamPipe";
1212  cfg.layerBuilder = beamPipeBuilder;
1213  cfg.layerEnvelopeR = {1_mm, 1_mm};
1214  cfg.buildToRadiusZero = true;
1215 
1216  return cfg;
1217 }

◆ makeHGTDLayerBuilder()

std::shared_ptr< const Acts::ILayerBuilder > ActsTrackingGeometrySvc::makeHGTDLayerBuilder ( const HGTD_DetectorManager manager)
private

Definition at line 788 of file ActsTrackingGeometrySvc.cxx.

789  {
790 
791  std::string managerName = manager->getName();
792  auto matcher = [](const Acts::GeometryContext & /*gctx*/,
793  Acts::AxisDirection /*aDir*/, const Acts::Surface * /*aS*/,
794  const Acts::Surface *
795  /*bS*/) -> bool { return false; };
796 
797  Acts::SurfaceArrayCreator::Config sacCfg;
798  sacCfg.surfaceMatcher = matcher;
799  sacCfg.doPhiBinningOptimization = false;
800 
801  auto surfaceArrayCreator = std::make_shared<Acts::SurfaceArrayCreator>(
802  sacCfg,
803  makeActsAthenaLogger(this, managerName + "SrfArrCrtr", std::string("ActsTGSvc")));
804  Acts::LayerCreator::Config lcCfg;
805  lcCfg.surfaceArrayCreator = surfaceArrayCreator;
806  auto layerCreator = std::make_shared<Acts::LayerCreator>(
807  lcCfg, makeActsAthenaLogger(this, managerName + "LayCrtr", std::string("ActsTGSvc")));
808 
810  cfg.mng = static_cast<const HGTD_DetectorManager *>(manager);
811  cfg.elementStore = m_elementStore;
812  cfg.layerCreator = layerCreator;
813  cfg.idHelper = m_HGTD_idHelper;
814  cfg.numberOfBinsFactor = m_numberOfBinsFactor;
815  return std::make_shared<const ActsHGTDLayerBuilder>(
816  cfg, makeActsAthenaLogger(this, managerName + "GMSLayBldr", std::string("ActsTGSvc")));
817 }

◆ makeLayerBuilderConfig()

ActsLayerBuilder::Config ActsTrackingGeometrySvc::makeLayerBuilderConfig ( const InDetDD::InDetDetectorManager manager)
private

Definition at line 819 of file ActsTrackingGeometrySvc.cxx.

820  {
821  using enum Acts::AxisDirection;
822 
823  std::string managerName = manager->getName();
824 
825  std::shared_ptr<const Acts::ILayerBuilder> gmLayerBuilder;
826  auto matcher = [](const Acts::GeometryContext & /*gctx*/,
827  Acts::AxisDirection aDir, const Acts::Surface *aS,
828  const Acts::Surface *bS) -> bool {
829  auto a = dynamic_cast<const ActsDetectorElement *>(
830  aS->associatedDetectorElement());
831  auto b = dynamic_cast<const ActsDetectorElement *>(
832  bS->associatedDetectorElement());
833  if ((not a) or (not b)) {
834  throw std::runtime_error(
835  "Cast of surface associated element to ActsDetectorElement failed "
836  "in ActsTrackingGeometrySvc::makeVolumeBuilder");
837  }
838 
839  IdentityHelper idA = a->identityHelper();
840  IdentityHelper idB = b->identityHelper();
841 
842  // check if same bec
843  // can't be same if not
844  if (idA.bec() != idB.bec())
845  return false;
846 
847  if (aDir == AxisPhi) {
848  // std::cout << idA.phi_module() << " <-> " << idB.phi_module() <<
849  // std::endl;
850  return idA.phi_module() == idB.phi_module();
851  }
852 
853  if (aDir == AxisZ) {
854  return (idA.eta_module() == idB.eta_module()) &&
855  (idA.layer_disk() == idB.layer_disk()) && (idA.bec() == idB.bec());
856  }
857 
858  if (aDir == AxisR) {
859  return (idA.eta_module() == idB.eta_module()) &&
860  (idA.layer_disk() == idB.layer_disk()) && (idB.bec() == idA.bec());
861  }
862 
863  return false;
864  };
865 
866  Acts::SurfaceArrayCreator::Config sacCfg;
867  sacCfg.surfaceMatcher = matcher;
868 
869  auto surfaceArrayCreator = std::make_shared<Acts::SurfaceArrayCreator>(
870  sacCfg,
871  makeActsAthenaLogger(this, managerName + "SrfArrCrtr", std::string("ActsTGSvc")));
872  Acts::LayerCreator::Config lcCfg;
873  lcCfg.surfaceArrayCreator = surfaceArrayCreator;
874  auto layerCreator = std::make_shared<Acts::LayerCreator>(
875  lcCfg, makeActsAthenaLogger(this, managerName + "LayCrtr", std::string("ActsTGSvc")));
876 
878  cfg.surfaceMatcher = matcher;
879 
880  // set bins from configuration
881  if (m_barrelMaterialBins.size() != 2) {
882  throw std::invalid_argument("Number of barrel material bin counts != 2");
883  }
884  std::vector<size_t> brlBins(m_barrelMaterialBins);
885  cfg.barrelMaterialBins = {brlBins.at(0), brlBins.at(1)};
886 
887  if (m_endcapMaterialBins.size() != 2) {
888  throw std::invalid_argument("Number of endcap material bin counts != 2");
889  }
890  std::vector<size_t> ecBins(m_endcapMaterialBins);
891  cfg.endcapMaterialBins = {ecBins.at(0), ecBins.at(1)};
892 
893  cfg.mng = static_cast<const InDetDD::SiDetectorManager *>(manager);
894  // use class member element store
895  cfg.elementStore = m_elementStore;
896  cfg.layerCreator = layerCreator;
897 
898  cfg.numberOfBinsFactor = m_numberOfBinsFactor;
899  cfg.numberOfInnermostLayerBinsFactor = m_numberOfInnermostLayerBinsFactor;
900 
901  // gmLayerBuilder = std::make_shared<const ActsLayerBuilder>(
902  // cfg, makeActsAthenaLogger(this, managerName + "GMLayBldr",
903  // "ActsTGSvc"));
904 
905  // return gmLayerBuilder;
906  return cfg;
907 }

◆ makeSCTTRTAssembly()

std::shared_ptr< Acts::TrackingVolume > ActsTrackingGeometrySvc::makeSCTTRTAssembly ( const Acts::GeometryContext &  gctx,
const Acts::ILayerBuilder &  sct_lb,
const Acts::ILayerBuilder &  trt_lb,
const Acts::CylinderVolumeHelper &  cvh,
const std::shared_ptr< const Acts::TrackingVolume > &  pixel 
)
private

Definition at line 910 of file ActsTrackingGeometrySvc.cxx.

913  {
914  ATH_MSG_VERBOSE("Building SCT+TRT assembly");
915 
916  Acts::CylinderVolumeBuilder::Config cvbCfg;
917  Acts::CylinderVolumeBuilder cvb(
918  cvbCfg, makeActsAthenaLogger(this, std::string("SCTTRTCVB"), std::string("ActsTGSvc")));
919 
920  ATH_MSG_VERBOSE("Making SCT negative layers: ");
921  Acts::VolumeConfig sctNegEC =
922  cvb.analyzeContent(gctx, sct_lb.negativeLayers(gctx), {});
923  ATH_MSG_VERBOSE("Making SCT positive layers: ");
924  Acts::VolumeConfig sctPosEC =
925  cvb.analyzeContent(gctx, sct_lb.positiveLayers(gctx), {});
926  ATH_MSG_VERBOSE("Making SCT central layers: ");
927  Acts::VolumeConfig sctBrl =
928  cvb.analyzeContent(gctx, sct_lb.centralLayers(gctx), {});
929 
930  ATH_MSG_VERBOSE("Making TRT negative layers: ");
931  Acts::VolumeConfig trtNegEC =
932  cvb.analyzeContent(gctx, trt_lb.negativeLayers(gctx), {});
933  ATH_MSG_VERBOSE("Making TRT positive layers: ");
934  Acts::VolumeConfig trtPosEC =
935  cvb.analyzeContent(gctx, trt_lb.positiveLayers(gctx), {});
936  ATH_MSG_VERBOSE("Making TRT central layers: ");
937  Acts::VolumeConfig trtBrl =
938  cvb.analyzeContent(gctx, trt_lb.centralLayers(gctx), {});
939 
940  // synchronize trt
941 
942  double absZMinEC = std::min(std::abs(trtNegEC.zMax), std::abs(trtPosEC.zMin));
943  double absZMaxEC = std::max(std::abs(trtNegEC.zMin), std::abs(trtPosEC.zMax));
944 
945  trtNegEC.zMin = -absZMaxEC;
946  trtNegEC.zMax = -absZMinEC;
947  trtPosEC.zMin = absZMinEC;
948  trtPosEC.zMax = absZMaxEC;
949 
950  using CVBBV = Acts::CylinderVolumeBounds::BoundValues;
951 
952  // if pixel is present, shrink SCT volumes in R
953  bool isSCTSmallerInZ = false;
954  if (pixel) {
955  ATH_MSG_VERBOSE("Shrinking SCT in R (and maybe in increase size in Z) to fit around Pixel");
956  auto pixelBounds = dynamic_cast<const Acts::CylinderVolumeBounds *>(
957  &pixel->volumeBounds());
958  double sctNegECzMin = std::min(sctNegEC.zMin, -pixelBounds->get(CVBBV::eHalfLengthZ));
959  double sctPosECzMax = std::max(sctPosEC.zMax, pixelBounds->get(CVBBV::eHalfLengthZ));
960 
961  ATH_MSG_VERBOSE("- SCT +-EC.rMin: " << sctNegEC.rMin << " -> " << pixelBounds->get(CVBBV::eMaxR));
962  ATH_MSG_VERBOSE("- SCT BRL.rMin: " << sctBrl.rMin << " -> " << pixelBounds->get(CVBBV::eMaxR));
963  ATH_MSG_VERBOSE("- SCT EC.zMin: " << sctNegEC.zMin << " -> " << sctNegECzMin);
964  ATH_MSG_VERBOSE("- SCT EC.zMax: " << sctPosEC.zMax << " -> " << sctPosECzMax);
965 
966  sctNegEC.rMin = pixelBounds->get(CVBBV::eMaxR);
967  sctPosEC.rMin = pixelBounds->get(CVBBV::eMaxR);
968  sctBrl.rMin = pixelBounds->get(CVBBV::eMaxR);
969 
970  isSCTSmallerInZ = sctPosEC.zMax < pixelBounds->get(CVBBV::eHalfLengthZ);
971 
972  sctNegEC.zMin = sctNegECzMin;
973  sctPosEC.zMax = sctPosECzMax;
974 
975 
976  } else {
977  ATH_MSG_VERBOSE("Pixel is not configured, not wrapping");
978  }
979 
980  ATH_MSG_VERBOSE("SCT Volume Configuration:");
981  ATH_MSG_VERBOSE("- SCT::NegativeEndcap: " << sctNegEC.layers.size()
982  << " layers, "
983  << sctNegEC.toString());
984  ATH_MSG_VERBOSE("- SCT::Barrel: " << sctBrl.layers.size() << " layers, "
985  << sctBrl.toString());
986  ATH_MSG_VERBOSE("- SCT::PositiveEncap: " << sctPosEC.layers.size()
987  << " layers, "
988  << sctPosEC.toString());
989 
990  ATH_MSG_VERBOSE("TRT Volume Configuration:");
991  ATH_MSG_VERBOSE("- TRT::NegativeEndcap: " << trtNegEC.layers.size()
992  << " layers, "
993  << trtNegEC.toString());
994  ATH_MSG_VERBOSE("- TRT::Barrel: " << trtBrl.layers.size() << " layers, "
995  << trtBrl.toString());
996  ATH_MSG_VERBOSE("- TRT::PositiveEncap: " << trtPosEC.layers.size()
997  << " layers, "
998  << trtPosEC.toString());
999 
1000  // harmonize SCT BRL <-> EC, normally the CVB does this, but we're skipping
1001  // that
1002  sctBrl.zMax = (sctBrl.zMax + sctPosEC.zMin) / 2.;
1003  sctBrl.zMin = -sctBrl.zMax;
1004 
1005  // and now harmonize everything
1006  // inflate TRT Barrel to match SCT
1007  trtBrl.zMin = sctBrl.zMin;
1008  trtBrl.zMax = sctBrl.zMax;
1009 
1010  // extend TRT endcaps outwards z so they match SCT
1011  trtNegEC.zMin = sctNegEC.zMin;
1012  trtPosEC.zMax = sctPosEC.zMax;
1013 
1014  // extend endcap in z so it touches barrel
1015  trtNegEC.zMax = trtBrl.zMin;
1016  sctNegEC.zMax = trtBrl.zMin;
1017  trtPosEC.zMin = trtBrl.zMax;
1018  sctPosEC.zMin = trtBrl.zMax;
1019 
1020  // extend SCT in R so they touch TRT barel
1021  sctBrl.rMax = trtBrl.rMin;
1022  sctNegEC.rMax = trtNegEC.rMin;
1023  sctPosEC.rMax = trtPosEC.rMin;
1024 
1025  // extend TRT endcaps in r to that of Barrel
1026  trtNegEC.rMax = trtBrl.rMax;
1027  trtPosEC.rMax = trtBrl.rMax;
1028 
1029  ATH_MSG_VERBOSE("Dimensions after synchronization between SCT and TRT");
1030  ATH_MSG_VERBOSE("SCT Volume Configuration:");
1031  ATH_MSG_VERBOSE("- SCT::NegativeEndcap: " << sctNegEC.layers.size()
1032  << " layers, "
1033  << sctNegEC.toString());
1034  ATH_MSG_VERBOSE("- SCT::Barrel: " << sctBrl.layers.size() << " layers, "
1035  << sctBrl.toString());
1036  ATH_MSG_VERBOSE("- SCT::PositiveEncap: " << sctPosEC.layers.size()
1037  << " layers, "
1038  << sctPosEC.toString());
1039 
1040  ATH_MSG_VERBOSE("TRT Volume Configuration:");
1041  ATH_MSG_VERBOSE("- TRT::NegativeEndcap: " << trtNegEC.layers.size()
1042  << " layers, "
1043  << trtNegEC.toString());
1044  ATH_MSG_VERBOSE("- TRT::Barrel: " << trtBrl.layers.size() << " layers, "
1045  << trtBrl.toString());
1046  ATH_MSG_VERBOSE("- TRT::PositiveEncap: " << trtPosEC.layers.size()
1047  << " layers, "
1048  << trtPosEC.toString());
1049 
1050  auto makeTVol = [&](const auto &vConf, const auto &name) {
1051  return cvh.createTrackingVolume(gctx, vConf.layers, {},
1052  nullptr, // no material
1053  vConf.rMin, vConf.rMax, vConf.zMin,
1054  vConf.zMax, name);
1055  };
1056 
1057  // now turn them into actual TrackingVolumes
1058  auto tvSctNegEC = makeTVol(sctNegEC, "SCT::NegativeEndcap");
1059  auto tvSctBrl = makeTVol(sctBrl, "SCT::Barrel");
1060  auto tvSctPosEC = makeTVol(sctPosEC, "SCT::PositiveEndcap");
1061 
1062  auto tvTrtNegEC = makeTVol(trtNegEC, "TRT::NegativeEndcap");
1063  auto tvTrtBrl = makeTVol(trtBrl, "TRT::Barrel");
1064  auto tvTrtPosEC = makeTVol(trtPosEC, "TRT::PositiveEndcap");
1065 
1066  // combine the endcaps and the barrels, respetively
1067  auto negEC =
1068  cvh.createContainerTrackingVolume(gctx, {tvSctNegEC, tvTrtNegEC});
1069  auto posEC =
1070  cvh.createContainerTrackingVolume(gctx, {tvSctPosEC, tvTrtPosEC});
1071  auto barrel = cvh.createContainerTrackingVolume(gctx, {tvSctBrl, tvTrtBrl});
1072 
1073  // and now combine all of those into one container for the assembly
1074 
1075  auto container =
1076  cvh.createContainerTrackingVolume(gctx, {negEC, barrel, posEC});
1077 
1078  // if pixel is present, add positive and negative gap volumes so we can wrap
1079  // it all
1080  if (pixel) {
1081  auto containerBounds = dynamic_cast<const Acts::CylinderVolumeBounds *>(
1082  &container->volumeBounds());
1083  auto pixelBounds = dynamic_cast<const Acts::CylinderVolumeBounds *>(
1084  &pixel->volumeBounds());
1085  std::vector<std::shared_ptr<Acts::TrackingVolume>> noVolumes;
1086 
1087  if(!isSCTSmallerInZ) {
1088  // pixel is smaller in z, need gap volumes
1089  auto posGap = cvh.createGapTrackingVolume(
1090  gctx, noVolumes,
1091  nullptr, // no material,
1092  pixelBounds->get(CVBBV::eMinR), pixelBounds->get(CVBBV::eMaxR),
1093  pixelBounds->get(CVBBV::eHalfLengthZ),
1094  containerBounds->get(CVBBV::eHalfLengthZ),
1095  0, // material layers,
1096  true, // cylinder
1097  "Pixel::PositiveGap");
1098  auto negGap = cvh.createGapTrackingVolume(
1099  gctx, noVolumes,
1100  nullptr, // no material,
1101  pixelBounds->get(CVBBV::eMinR), pixelBounds->get(CVBBV::eMaxR),
1102  -containerBounds->get(CVBBV::eHalfLengthZ),
1103  -pixelBounds->get(CVBBV::eHalfLengthZ),
1104  0, // material layers,
1105  true, // cylinder
1106  "Pixel::NegativeGap");
1107 
1108  auto pixelContainer =
1109  cvh.createContainerTrackingVolume(gctx, {negGap, pixel, posGap});
1110  // and now create one container that contains Pixel+SCT+TRT
1111  container =
1112  cvh.createContainerTrackingVolume(gctx, {pixelContainer, container});
1113  }
1114  else {
1115  // wrap the pixel directly
1116  container =
1117  cvh.createContainerTrackingVolume(gctx, {pixel, container});
1118  }
1119 
1120  }
1121 
1122  return container;
1123 }

◆ makeStrawLayerBuilder()

std::shared_ptr< const Acts::ILayerBuilder > ActsTrackingGeometrySvc::makeStrawLayerBuilder ( const InDetDD::InDetDetectorManager manager)
private

Definition at line 757 of file ActsTrackingGeometrySvc.cxx.

758  {
759 
760  std::string managerName = manager->getName();
761  auto matcher = [](const Acts::GeometryContext & /*gctx*/,
762  Acts::AxisDirection /*aDir*/, const Acts::Surface * /*aS*/,
763  const Acts::Surface *
764  /*bS*/) -> bool { return false; };
765 
766  Acts::SurfaceArrayCreator::Config sacCfg;
767  sacCfg.surfaceMatcher = matcher;
768  sacCfg.doPhiBinningOptimization = false;
769 
770  auto surfaceArrayCreator = std::make_shared<Acts::SurfaceArrayCreator>(
771  sacCfg,
772  makeActsAthenaLogger(this, managerName + "SrfArrCrtr", std::string("ActsTGSvc")));
773  Acts::LayerCreator::Config lcCfg;
774  lcCfg.surfaceArrayCreator = surfaceArrayCreator;
775  auto layerCreator = std::make_shared<Acts::LayerCreator>(
776  lcCfg, makeActsAthenaLogger(this, managerName + "LayCrtr", std::string("ActsTGSvc")));
777 
779  cfg.mng = static_cast<const InDetDD::TRT_DetectorManager *>(manager);
780  cfg.elementStore = m_elementStore;
781  cfg.layerCreator = layerCreator;
782  cfg.idHelper = m_TRT_idHelper;
783  return std::make_shared<const ActsStrawLayerBuilder>(
784  cfg, makeActsAthenaLogger(this, managerName + "GMSLayBldr", std::string("ActsTGSvc")));
785 }

◆ populateAlignmentStore()

unsigned int ActsTrackingGeometrySvc::populateAlignmentStore ( ActsTrk::DetectorAlignStore store) const
override

Definition at line 1125 of file ActsTrackingGeometrySvc.cxx.

1125  {
1126  ATH_MSG_DEBUG("Populate the alignment store with all detector elements");
1127  unsigned int nElements = 0;
1128  m_trackingGeometry->visitSurfaces([&store, &nElements](const Acts::Surface *srf) {
1129  const auto *detElem = dynamic_cast<const IDetectorElement *>(srf->associatedDetectorElement());
1130  if (!detElem) {
1131  return;
1132  }
1133  nElements += detElem->storeAlignedTransforms(store);
1134  });
1135  ATH_MSG_DEBUG("Populated with " << nElements << " elements");
1136  return nElements;
1137 }

◆ runConsistencyChecks()

bool ActsTrackingGeometrySvc::runConsistencyChecks ( ) const
private

Definition at line 523 of file ActsTrackingGeometrySvc.cxx.

523  {
524  bool result = true;
525 
526  std::vector<Acts::Vector2> localPoints;
527  localPoints.reserve(m_consistencyCheckPoints);
528  std::mt19937 gen;
529  std::uniform_real_distribution<> dist(0.0, 1.0);
530 
531  std::optional<std::ofstream> os;
532  if(!m_consistencyCheckOutput.empty()){
533  os = std::ofstream{m_consistencyCheckOutput};
534  if(!os->good()) {
535  throw std::runtime_error{"Failed to open consistency check output file"};
536  }
537  }
538 
539  if(os) {
540  (*os) << "geo_id,vol_id,lay_id,sen_id,type,acts_loc0,acts_loc1,acts_inside,trk_loc0,trk_loc1,trk_inside,x,y,z,g2l_loc0,g2l_loc1,trk_x,trk_y,trk_z" << std::endl;
541  }
542  for(size_t i=0;i<m_consistencyCheckPoints;i++) {
543  localPoints.emplace_back(dist(gen), dist(gen));
544  }
545 
546  Acts::GeometryContext gctx = getNominalContext().context();
547 
548  size_t nTotalSensors = 0;
549  std::array<size_t,3> nInconsistent{0,0,0};
550  size_t nMismatchedCenters = 0;
551  size_t nMismatchedNormals = 0;
552 
553  // Comparison of Eigen vectors, similar to a.isApprox(b), but use absolute comparison to also work with zero vectors.
554  // All values will be mm or radians, so 1e-5 is a reasonable precision.
555  auto isApprox = [](auto& a, auto& b) -> bool {
556  return ((a - b).array().abs() < 1e-5).all();
557  };
558 
559  m_trackingGeometry->visitSurfaces([&](const Acts::Surface *surface) {
560  nTotalSensors++;
561 
562  const auto* actsDetElem = dynamic_cast<const ActsDetectorElement*>(surface->associatedDetectorElement());
563  if(actsDetElem == nullptr) {
564  ATH_MSG_ERROR("Invalid detector element found");
565  result = false;
566  return;
567  }
568  const auto* siDetElem = dynamic_cast<const InDetDD::SiDetectorElement*>(actsDetElem->upstreamDetectorElement());
569  if(siDetElem == nullptr) {
570  return;
571  }
572 
573  const auto* regSurface = dynamic_cast<const Acts::RegularSurface*>(surface);
574  const auto& trkSurface = siDetElem->surface();
575  if(regSurface == nullptr) {
576  ATH_MSG_ERROR("Invalid surface found");
577  result = false;
578  return;
579  }
580 
581  Acts::Vector3 center{regSurface->center(gctx)};
582  Amg::Vector3D trkCenter{trkSurface.center()};
583  if (/* auto *b = */ dynamic_cast<const Acts::AnnulusBounds *>(&surface->bounds()))
584  {
585  // // Acts::AnnulusBounds defines center() as center of whole disc, so get it from the bounds
586  // Acts::Vector2 locCenter{0.5 * (b->rMin() + b->rMax()), 0.5 * (b->phiMin() + b->phiMax())};
587  // center = surface->localToGlobal(gctx, locCenter, Acts::Vector3::Zero());
588  center.head<2>() = trkCenter.head<2>(); // that doesn't (quite) work for xy, so just pass that check
589  }
590 
591  if(!isApprox(trkCenter, center)) {
592  std::string trkName;
593  if (auto idHelper = siDetElem->getIdHelper())
594  {
595  trkName = idHelper->show_to_string(siDetElem->identify());
596  }
597  ATH_MSG_WARNING("Acts surface "
598  << surface->geometryId()
599  << " center (" << center[0] << ',' << center[1] << ',' << center[2]
600  << ") does not match Trk surface " << trkName
601  << " center (" << trkCenter[0] << ',' << trkCenter[1] << ',' << trkCenter[2] << ')');
602  nMismatchedCenters++;
603  result = false;
604  }
605 
606  const auto* lineSurface = dynamic_cast<const Acts::LineSurface*>(surface);
607  if(lineSurface == nullptr) {
608  Acts::Vector3 norm{regSurface->normal(gctx, regSurface->center(gctx))};
609  Amg::Vector3D trkNorm{trkSurface.normal()};
610  if(!isApprox(trkNorm, norm)) {
611  std::string trkName;
612  if (auto idHelper = siDetElem->getIdHelper())
613  {
614  trkName = idHelper->show_to_string(siDetElem->identify());
615  }
616  ATH_MSG_WARNING("Acts surface "
617  << surface->geometryId()
618  << " normal (" << norm[0] << ',' << norm[1] << ',' << norm[2]
619  << ") does not match Trk surface " << trkName
620  << " normal (" << trkNorm[0] << ',' << trkNorm[1] << ',' << trkNorm[2] << ')');
621  nMismatchedNormals++;
622  result = false;
623  }
624  }
625 
626  auto doPoints = [&](unsigned int type, const Acts::Vector2& loc) -> std::array<bool,3> {
627  Acts::Vector3 glb = surface->localToGlobal(gctx, loc, Acts::Vector3::Zero());
628 
631  Acts::Vector2 locg2l = Acts::Vector2::Zero();
632  bool locg2lOk = false;
633  auto locTrkRes = trkSurface.globalToLocal(glb);
634  if (locTrkRes) {
635  locTrk = locTrkRes.value();
636  glbTrk = trkSurface.localToGlobal(locTrk);
637 
638  auto locg2lRes = surface->globalToLocal(gctx, glbTrk, Acts::Vector3::Zero());
639  if (locg2lRes.ok()) {
640  locg2lOk = true;
641  locg2l = locg2lRes.value();
642  }
643  }
644 
645  auto gId = surface->geometryId();
646  if(os) {
647  (*os) << gId.value()
648  << "," << gId.volume()
649  << "," << gId.layer()
650  << "," << gId.sensitive()
651  << "," << type
652  << "," << loc[0]
653  << "," << loc[1]
654  << "," << surface->insideBounds(loc)
655  << "," << locTrk[0]
656  << "," << locTrk[1]
657  << "," << trkSurface.insideBounds(locTrk)
658  << "," << glb[0]
659  << "," << glb[1]
660  << "," << glb[2]
661  << "," << locg2l[0]
662  << "," << locg2l[1]
663  << "," << glbTrk[0]
664  << "," << glbTrk[1]
665  << "," << glbTrk[2]
666  << std::endl;
667  }
668 
669  return {surface->insideBounds(loc) == trkSurface.insideBounds(locTrk),
670  locg2lOk ? isApprox(loc, locg2l) : true,
671  locTrkRes ? isApprox(glb, glbTrk) : true};
672  };
673 
674 
675  constexpr double envelope = 10.0 * Acts::UnitConstants::mm;
676 
677  std::array<bool,3> allOk{true,true,true};
678  if(const auto* bounds = dynamic_cast<const Acts::PlanarBounds*>(&surface->bounds()); bounds) {
679  ATH_MSG_VERBOSE("Planar bounds");
680 
681  const Acts::RectangleBounds& boundingBox = bounds->boundingBox();
682  Acts::Vector2 min = boundingBox.min().array() - envelope;
683  Acts::Vector2 max = boundingBox.max().array() + envelope;
684  Acts::Vector2 diag = max - min;
685 
686  for(const auto& testPoint : localPoints) {
687  Acts::Vector2 loc = min.array() + (testPoint.array() * diag.array());
688  auto pointOk = doPoints(0, loc);
689  for (size_t i=0; i<pointOk.size(); ++i) {
690  if (!pointOk[i]) {
691  result = false;
692  allOk[i] = false;
693  }
694  }
695  }
696 
697  }
698  else if(const auto* bounds = dynamic_cast<const Acts::AnnulusBounds*>(&surface->bounds()); bounds) {
699  ATH_MSG_VERBOSE("Annulus bounds");
700 
701  // custom bounding box algo
702  std::vector<Acts::Vector2> vertices = bounds->vertices(5); // 5 segments on the radial edges
704  Acts::Vector2 max{std::numeric_limits<double>::lowest(), std::numeric_limits<double>::lowest()};
705  for (const auto& vtx : vertices) {
706  min = min.array().min(vtx.array());
707  max = max.array().max(vtx.array());
708  }
709  min.array() -= envelope;
710  max.array() += envelope;
711  Acts::Vector2 diag = max - min;
712 
713  for(const auto& testPoint : localPoints) {
714  Acts::Vector2 locXY = min.array() + (testPoint.array() * diag.array());
715  Acts::Vector2 locPC = dynamic_cast<const Acts::DiscSurface&>(*surface).localCartesianToPolar(locXY);
716 
717  auto pointOk = doPoints(1, locPC);
718  for (size_t i=0; i<pointOk.size(); ++i) {
719  if (!pointOk[i]) {
720  result = false;
721  allOk[i] = false;
722  }
723  }
724  }
725 
726  }
727  else {
728  result = false;
729  }
730 
731  for (size_t i=0; i<allOk.size(); ++i) {
732  if (!allOk[i]) {
733  ++nInconsistent[i];
734  }
735  }
736 
737  });
738 
739  ATH_MSG_INFO("Total number of sensors : " << nTotalSensors);
740  ATH_MSG_INFO("Number of sensors with mismatched centers : " << nMismatchedCenters);
741  ATH_MSG_INFO("Number of sensors with mismatched normals : " << nMismatchedNormals);
742  ATH_MSG_INFO("Number of sensors with inconsistent inside: " << nInconsistent[0]);
743  ATH_MSG_INFO("Number of sensors with inconsistent g2l : " << nInconsistent[1]);
744  ATH_MSG_INFO("Number of sensors with inconsistent l2g : " << nInconsistent[2]);
745 
746  return result;
747 }

◆ trackingGeometry()

std::shared_ptr< const Acts::TrackingGeometry > ActsTrackingGeometrySvc::trackingGeometry ( )
override

Definition at line 750 of file ActsTrackingGeometrySvc.cxx.

750  {
751 
752  ATH_MSG_VERBOSE("Retrieving tracking geometry");
753  return m_trackingGeometry;
754 }

Member Data Documentation

◆ m_barrelMaterialBins

Gaudi::Property<std::vector<size_t> > ActsTrackingGeometrySvc::m_barrelMaterialBins {this, "BarrelMaterialBins", {10, 10}}
private

Definition at line 112 of file ActsTrackingGeometrySvc.h.

◆ m_blueprintGraphviz

Gaudi::Property<std::string> ActsTrackingGeometrySvc::m_blueprintGraphviz
private
Initial value:
{this, "BlueprintGraphviz",
"", "Write the blueprint graph to a file. No file will be written if empty"}

Definition at line 153 of file ActsTrackingGeometrySvc.h.

◆ m_blueprintNodeBuilders

ToolHandleArray<ActsTrk::IBlueprintNodeBuilder> ActsTrackingGeometrySvc::m_blueprintNodeBuilders {this, "BlueprintNodeBuilders", {}}
private

Definition at line 145 of file ActsTrackingGeometrySvc.h.

◆ m_buildBeamPipe

Gaudi::Property<bool> ActsTrackingGeometrySvc::m_buildBeamPipe {this, "BuildBeamPipe", false, ""}
private

Definition at line 110 of file ActsTrackingGeometrySvc.h.

◆ m_buildSubdetectors

Gaudi::Property<std::vector<std::string> > ActsTrackingGeometrySvc::m_buildSubdetectors {this, "BuildSubDetectors", {"Pixel", "SCT", "TRT", "Calo", "HGTD", "Muon"}}
private

Definition at line 114 of file ActsTrackingGeometrySvc.h.

◆ m_caloVolumeBuilder

ToolHandle<IActsTrackingVolumeBuilder> ActsTrackingGeometrySvc::m_caloVolumeBuilder {this, "CaloVolumeBuilder", ""}
private

Definition at line 141 of file ActsTrackingGeometrySvc.h.

◆ m_consistencyCheckOutput

StringProperty ActsTrackingGeometrySvc::m_consistencyCheckOutput
private
Initial value:
{this, "ConsistencyCheckOutput",
"", "Output file for geometry debugging, will not write if empty",}

Definition at line 135 of file ActsTrackingGeometrySvc.h.

◆ m_consistencyCheckPoints

Gaudi::Property<size_t> ActsTrackingGeometrySvc::m_consistencyCheckPoints
private
Initial value:
{this, "ConsistencyCheckPoints",
1000, "number of random points for consistency check"}

Definition at line 138 of file ActsTrackingGeometrySvc.h.

◆ m_detStore

ServiceHandle<StoreGateSvc> ActsTrackingGeometrySvc::m_detStore
private

Definition at line 89 of file ActsTrackingGeometrySvc.h.

◆ m_doEndcapLayerMerging

Gaudi::Property<bool> ActsTrackingGeometrySvc::m_doEndcapLayerMerging {this, "DoEndcapLayerMerging", true, "Merge overlapping endcap layers in z"}
private

Definition at line 155 of file ActsTrackingGeometrySvc.h.

◆ m_elementStore

std::shared_ptr<ActsElementVector> ActsTrackingGeometrySvc::m_elementStore {nullptr}
private

Definition at line 98 of file ActsTrackingGeometrySvc.h.

◆ m_endcapMaterialBins

Gaudi::Property<std::vector<size_t> > ActsTrackingGeometrySvc::m_endcapMaterialBins {this, "EndcapMaterialBins", {5, 20}}
private

Definition at line 113 of file ActsTrackingGeometrySvc.h.

◆ m_HGTD_idHelper

const HGTD_ID* ActsTrackingGeometrySvc::m_HGTD_idHelper {nullptr}
private

Definition at line 102 of file ActsTrackingGeometrySvc.h.

◆ m_materialMapCalibFolder

Gaudi::Property<std::string> ActsTrackingGeometrySvc::m_materialMapCalibFolder {this, "MaterialMapCalibFolder", ".", ""}
private

Definition at line 109 of file ActsTrackingGeometrySvc.h.

◆ m_materialMapInputFileBase

Gaudi::Property<std::string> ActsTrackingGeometrySvc::m_materialMapInputFileBase {this, "MaterialMapInputFile", "", ""}
private

Definition at line 108 of file ActsTrackingGeometrySvc.h.

◆ m_msVolumeBuilder

ToolHandle<IActsTrackingVolumeBuilder> ActsTrackingGeometrySvc::m_msVolumeBuilder {this, "MSVolumeBuilder", ""}
private

Definition at line 143 of file ActsTrackingGeometrySvc.h.

◆ m_nominalContext

ActsTrk::GeometryContext ActsTrackingGeometrySvc::m_nominalContext {}
private

Definition at line 104 of file ActsTrackingGeometrySvc.h.

◆ m_numberOfBinsFactor

Gaudi::Property<double> ActsTrackingGeometrySvc::m_numberOfBinsFactor {this, "NumberOfBinsFactor", 5.0}
private

controls how many bins are created for the sensitive surface grid.

1 results in the same number of bins as there are surfaces per layer in each dimension. using a higher number will reduce the number of surfaces per bin, thus speeding up navigation, but increasing memory consumption.

Definition at line 160 of file ActsTrackingGeometrySvc.h.

◆ m_numberOfInnermostLayerBinsFactor

Gaudi::Property<double> ActsTrackingGeometrySvc::m_numberOfInnermostLayerBinsFactor {this, "NumberOfInnermostLayerBinsFactor",2.0}
private

Special treatment for the innermost pixel layer to have more control on bin size to account for shallow angle tracks.

Definition at line 163 of file ActsTrackingGeometrySvc.h.

◆ m_objDebugOutput

Gaudi::Property<bool> ActsTrackingGeometrySvc::m_objDebugOutput {this, "ObjDebugOutput", false, ""}
private

Definition at line 107 of file ActsTrackingGeometrySvc.h.

◆ m_passiveITkInnerPixelBarrelLayerHalflengthZ

Gaudi::Property<std::vector<float> > ActsTrackingGeometrySvc::m_passiveITkInnerPixelBarrelLayerHalflengthZ {this, "PassiveITkInnerPixelBarrelLayerHalflengthZ", {}}
private

Definition at line 121 of file ActsTrackingGeometrySvc.h.

◆ m_passiveITkInnerPixelBarrelLayerRadii

Gaudi::Property<std::vector<float> > ActsTrackingGeometrySvc::m_passiveITkInnerPixelBarrelLayerRadii {this, "PassiveITkInnerPixelBarrelLayerRadii", {}}
private

the specifications for building additional passive cylinders in the barrel region: for each cylinder you want to specify radius, half length in z and thickness

Definition at line 120 of file ActsTrackingGeometrySvc.h.

◆ m_passiveITkInnerPixelBarrelLayerThickness

Gaudi::Property<std::vector<float> > ActsTrackingGeometrySvc::m_passiveITkInnerPixelBarrelLayerThickness {this, "PassiveITkInnerPixelBarrelLayerThickness", {}}
private

Definition at line 122 of file ActsTrackingGeometrySvc.h.

◆ m_passiveITkOuterPixelBarrelLayerHalflengthZ

Gaudi::Property<std::vector<float> > ActsTrackingGeometrySvc::m_passiveITkOuterPixelBarrelLayerHalflengthZ {this, "PassiveITkOuterPixelBarrelLayerHalflengthZ", {}}
private

Definition at line 125 of file ActsTrackingGeometrySvc.h.

◆ m_passiveITkOuterPixelBarrelLayerRadii

Gaudi::Property<std::vector<float> > ActsTrackingGeometrySvc::m_passiveITkOuterPixelBarrelLayerRadii {this, "PassiveITkOuterPixelBarrelLayerRadii", {}}
private

Definition at line 124 of file ActsTrackingGeometrySvc.h.

◆ m_passiveITkOuterPixelBarrelLayerThickness

Gaudi::Property<std::vector<float> > ActsTrackingGeometrySvc::m_passiveITkOuterPixelBarrelLayerThickness {this, "PassiveITkOuterPixelBarrelLayerThickness", {}}
private

Definition at line 126 of file ActsTrackingGeometrySvc.h.

◆ m_passiveITkStripBarrelLayerHalflengthZ

Gaudi::Property<std::vector<float> > ActsTrackingGeometrySvc::m_passiveITkStripBarrelLayerHalflengthZ {this, "PassiveITkStripBarrelLayerHalflengthZ", {}}
private

Definition at line 129 of file ActsTrackingGeometrySvc.h.

◆ m_passiveITkStripBarrelLayerRadii

Gaudi::Property<std::vector<float> > ActsTrackingGeometrySvc::m_passiveITkStripBarrelLayerRadii {this, "PassiveITkStripBarrelLayerRadii", {}}
private

Definition at line 128 of file ActsTrackingGeometrySvc.h.

◆ m_passiveITkStripBarrelLayerThickness

Gaudi::Property<std::vector<float> > ActsTrackingGeometrySvc::m_passiveITkStripBarrelLayerThickness {this, "PassiveITkStripBarrelLayerThickness", {}}
private

Definition at line 130 of file ActsTrackingGeometrySvc.h.

◆ m_runConsistencyChecks

BooleanProperty ActsTrackingGeometrySvc::m_runConsistencyChecks
private
Initial value:
{this, "RunConsistencyChecks",
false, "Run extra consistency checks w.r.t to Trk::. This is SLOW!"}

Definition at line 132 of file ActsTrackingGeometrySvc.h.

◆ m_subDetNoAlign

std::set<ActsTrk::DetectorType> ActsTrackingGeometrySvc::m_subDetNoAlign {}
private

Definition at line 150 of file ActsTrackingGeometrySvc.h.

◆ m_subDetNoAlignProp

Gaudi::Property<std::vector<unsigned int> > ActsTrackingGeometrySvc::m_subDetNoAlignProp {this, "NotAlignDetectors", {}}
private

Define the subdetectors for which the tracking geometry does not expect a valid alignment store.

Definition at line 149 of file ActsTrackingGeometrySvc.h.

◆ m_trackingGeometry

std::shared_ptr<const Acts::TrackingGeometry> ActsTrackingGeometrySvc::m_trackingGeometry {nullptr}
private

Definition at line 99 of file ActsTrackingGeometrySvc.h.

◆ m_TRT_idHelper

const TRT_ID* ActsTrackingGeometrySvc::m_TRT_idHelper {nullptr}
private

Definition at line 101 of file ActsTrackingGeometrySvc.h.

◆ m_useBlueprint

Gaudi::Property<bool> ActsTrackingGeometrySvc::m_useBlueprint {this, "UseBlueprint", false, "Use the new Blueprint API for geometry construction"}
private

Definition at line 152 of file ActsTrackingGeometrySvc.h.

◆ m_useMaterialMap

Gaudi::Property<bool> ActsTrackingGeometrySvc::m_useMaterialMap {this, "UseMaterialMap", false, ""}
private

Definition at line 106 of file ActsTrackingGeometrySvc.h.

◆ p_beamPipeMgr

const BeamPipeDetectorManager* ActsTrackingGeometrySvc::p_beamPipeMgr {nullptr}
private

Definition at line 95 of file ActsTrackingGeometrySvc.h.

◆ p_HGTDManager

const HGTD_DetectorManager* ActsTrackingGeometrySvc::p_HGTDManager {nullptr}
private

Definition at line 96 of file ActsTrackingGeometrySvc.h.

◆ p_ITkPixelManager

const InDetDD::SiDetectorManager* ActsTrackingGeometrySvc::p_ITkPixelManager {nullptr}
private

Definition at line 93 of file ActsTrackingGeometrySvc.h.

◆ p_ITkStripManager

const InDetDD::SiDetectorManager* ActsTrackingGeometrySvc::p_ITkStripManager {nullptr}
private

Definition at line 94 of file ActsTrackingGeometrySvc.h.

◆ p_pixelManager

const InDetDD::SiDetectorManager* ActsTrackingGeometrySvc::p_pixelManager {nullptr}
private

Definition at line 90 of file ActsTrackingGeometrySvc.h.

◆ p_SCTManager

const InDetDD::SiDetectorManager* ActsTrackingGeometrySvc::p_SCTManager {nullptr}
private

Definition at line 91 of file ActsTrackingGeometrySvc.h.

◆ p_TRTManager

const InDetDD::TRT_DetectorManager* ActsTrackingGeometrySvc::p_TRTManager {nullptr}
private

Definition at line 92 of file ActsTrackingGeometrySvc.h.


The documentation for this class was generated from the following files:
ActsTrackingGeometrySvc::makeBeamPipeConfig
Acts::CylinderVolumeBuilder::Config makeBeamPipeConfig(std::shared_ptr< const Acts::CylinderVolumeHelper > cvh) const
Definition: ActsTrackingGeometrySvc.cxx:1141
IdentityHelper::phi_module
int phi_module() const
Definition: IdentityHelper.cxx:61
AllowedVariables::e
e
Definition: AsgElectronSelectorTool.cxx:37
SGTest::store
TestStore store
Definition: TestStore.cxx:23
PlotCalibFromCool.norm
norm
Definition: PlotCalibFromCool.py:100
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
ActsTrackingGeometrySvc::m_runConsistencyChecks
BooleanProperty m_runConsistencyChecks
Definition: ActsTrackingGeometrySvc.h:132
get_generator_info.result
result
Definition: get_generator_info.py:21
python.SystemOfUnits.mm
float mm
Definition: SystemOfUnits.py:98
ActsLayerBuilder::Mode::ITkPixelOuter
@ ITkPixelOuter
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
ActsTrackingGeometrySvc::m_passiveITkStripBarrelLayerHalflengthZ
Gaudi::Property< std::vector< float > > m_passiveITkStripBarrelLayerHalflengthZ
Definition: ActsTrackingGeometrySvc.h:129
ActsTrackingGeometrySvc::m_consistencyCheckOutput
StringProperty m_consistencyCheckOutput
Definition: ActsTrackingGeometrySvc.h:135
ActsLayerBuilder::Mode::ITkPixelInner
@ ITkPixelInner
ActsTrk::DetectorType
DetectorType
Simple enum to Identify the Type of the ACTS sub detector.
Definition: GeometryDefs.h:17
ActsTrackingGeometrySvc::m_numberOfInnermostLayerBinsFactor
Gaudi::Property< double > m_numberOfInnermostLayerBinsFactor
Special treatment for the innermost pixel layer to have more control on bin size to account for shall...
Definition: ActsTrackingGeometrySvc.h:163
ActsTrackingGeometrySvc::m_numberOfBinsFactor
Gaudi::Property< double > m_numberOfBinsFactor
controls how many bins are created for the sensitive surface grid.
Definition: ActsTrackingGeometrySvc.h:160
Amg::Vector2D
Eigen::Matrix< double, 2, 1 > Vector2D
Definition: GeoPrimitives.h:48
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
min
constexpr double min()
Definition: ap_fixedTest.cxx:26
ActsTrackingGeometrySvc::m_barrelMaterialBins
Gaudi::Property< std::vector< size_t > > m_barrelMaterialBins
Definition: ActsTrackingGeometrySvc.h:112
ActsHGTDLayerBuilder::Config
Definition: ActsHGTDLayerBuilder.h:45
IdentityHelper::layer_disk
int layer_disk() const
Definition: IdentityHelper.cxx:49
BeamPipeDetectorManager::getNumTreeTops
virtual unsigned int getNumTreeTops() const
Definition: BeamPipeDetectorManager.cxx:15
InDetDD::SolidStateDetectorElementBase::surface
Trk::Surface & surface()
Element Surface.
ActsTrackingGeometrySvc::runConsistencyChecks
bool runConsistencyChecks() const
Definition: ActsTrackingGeometrySvc.cxx:523
ActsTrk::actsLevelVector
Acts::Logging::Level actsLevelVector(MSG::Level lvl)
Definition: LoggerUtils.cxx:9
sendEI_SPB.root
root
Definition: sendEI_SPB.py:34
ActsStrawLayerBuilder::Config
Definition: ActsStrawLayerBuilder.h:40
ActsTrackingGeometrySvc::m_consistencyCheckPoints
Gaudi::Property< size_t > m_consistencyCheckPoints
Definition: ActsTrackingGeometrySvc.h:138
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
ActsTrackingGeometrySvc::m_detStore
ServiceHandle< StoreGateSvc > m_detStore
Definition: ActsTrackingGeometrySvc.h:89
ActsTrackingGeometrySvc::p_ITkPixelManager
const InDetDD::SiDetectorManager * p_ITkPixelManager
Definition: ActsTrackingGeometrySvc.h:93
BeamPipeDetectorManager::getTreeTop
virtual PVConstLink getTreeTop(unsigned int i) const
Definition: BeamPipeDetectorManager.cxx:20
ActsLayerBuilder::Config
Definition: ActsLayerBuilder.h:51
python.CaloAddPedShiftConfig.type
type
Definition: CaloAddPedShiftConfig.py:42
ActsTrackingGeometrySvc::p_beamPipeMgr
const BeamPipeDetectorManager * p_beamPipeMgr
Definition: ActsTrackingGeometrySvc.h:95
ActsTrackingGeometrySvc::m_caloVolumeBuilder
ToolHandle< IActsTrackingVolumeBuilder > m_caloVolumeBuilder
Definition: ActsTrackingGeometrySvc.h:141
ActsLayerBuilder::Mode::Pixel
@ Pixel
master.gen
gen
Definition: master.py:32
python.iconfTool.models.loaders.level
level
Definition: loaders.py:20
ActsTrackingGeometrySvc::getNominalContext
const ActsTrk::GeometryContext & getNominalContext() const override
Definition: ActsTrackingGeometrySvc.cxx:1138
ActsTrackingGeometrySvc::p_TRTManager
const InDetDD::TRT_DetectorManager * p_TRTManager
Definition: ActsTrackingGeometrySvc.h:92
makeActsAthenaLogger
std::unique_ptr< const Acts::Logger > makeActsAthenaLogger(IMessageSvc *svc, const std::string &name, int level, std::optional< std::string > parent_name)
Definition: Tracking/Acts/ActsInterop/src/Logger.cxx:64
ActsTrackingGeometrySvc::p_HGTDManager
const HGTD_DetectorManager * p_HGTDManager
Definition: ActsTrackingGeometrySvc.h:96
ActsTrackingGeometrySvc::m_msVolumeBuilder
ToolHandle< IActsTrackingVolumeBuilder > m_msVolumeBuilder
Definition: ActsTrackingGeometrySvc.h:143
ActsLayerBuilder::Mode::ITkStrip
@ ITkStrip
Amg::toString
std::string toString(const Translation3D &translation, int precision=4)
GeoPrimitvesToStringConverter.
Definition: GeoPrimitivesToStringConverter.h:40
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
python.BunchSpacingUtils.lb
lb
Definition: BunchSpacingUtils.py:86
ActsTrackingGeometrySvc::m_blueprintNodeBuilders
ToolHandleArray< ActsTrk::IBlueprintNodeBuilder > m_blueprintNodeBuilders
Definition: ActsTrackingGeometrySvc.h:145
lumiFormat.i
int i
Definition: lumiFormat.py:85
ActsTrackingGeometrySvc::m_elementStore
std::shared_ptr< ActsElementVector > m_elementStore
Definition: ActsTrackingGeometrySvc.h:98
ActsTrackingGeometrySvc::m_materialMapInputFileBase
Gaudi::Property< std::string > m_materialMapInputFileBase
Definition: ActsTrackingGeometrySvc.h:108
createSimpleDistributions.builder
builder
Definition: createSimpleDistributions.py:51
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
ActsTrackingGeometrySvc::m_useBlueprint
Gaudi::Property< bool > m_useBlueprint
Definition: ActsTrackingGeometrySvc.h:152
ActsTrackingGeometrySvc::p_pixelManager
const InDetDD::SiDetectorManager * p_pixelManager
Definition: ActsTrackingGeometrySvc.h:90
calibdata.exception
exception
Definition: calibdata.py:495
ActsTrackingGeometrySvc::p_SCTManager
const InDetDD::SiDetectorManager * p_SCTManager
Definition: ActsTrackingGeometrySvc.h:91
Amg::transform
Amg::Vector3D transform(Amg::Vector3D &v, Amg::Transform3D &tr)
Transform a point from a Trasformation3D.
Definition: GeoPrimitivesHelpers.h:156
ActsTrackingGeometrySvc::m_buildBeamPipe
Gaudi::Property< bool > m_buildBeamPipe
Definition: ActsTrackingGeometrySvc.h:110
ActsTrackingGeometrySvc::m_passiveITkStripBarrelLayerRadii
Gaudi::Property< std::vector< float > > m_passiveITkStripBarrelLayerRadii
Definition: ActsTrackingGeometrySvc.h:128
ActsTrackingGeometrySvc::m_passiveITkOuterPixelBarrelLayerRadii
Gaudi::Property< std::vector< float > > m_passiveITkOuterPixelBarrelLayerRadii
Definition: ActsTrackingGeometrySvc.h:124
ActsTrackingGeometrySvc::makeLayerBuilderConfig
ActsLayerBuilder::Config makeLayerBuilderConfig(const InDetDD::InDetDetectorManager *manager)
Definition: ActsTrackingGeometrySvc.cxx:819
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
ActsDetectorElement
Definition: ActsDetectorElement.h:44
Handler::svc
AthROOTErrorHandlerSvc * svc
Definition: AthROOTErrorHandlerSvc.cxx:10
ActsTrk::IDetectorElement
Base class interface for the actual readout elements.
Definition: IDetectorElement.h:43
ActsTrk::IDetectorElement::storeAlignedTransforms
virtual unsigned int storeAlignedTransforms(const ActsTrk::DetectorAlignStore &store) const =0
Caches the aligned transformation in the provided store. Returns the number of cached elements.
ActsTrackingGeometrySvc::m_endcapMaterialBins
Gaudi::Property< std::vector< size_t > > m_endcapMaterialBins
Definition: ActsTrackingGeometrySvc.h:113
ReadFromCoolCompare.os
os
Definition: ReadFromCoolCompare.py:231
ActsTrackingGeometrySvc::m_materialMapCalibFolder
Gaudi::Property< std::string > m_materialMapCalibFolder
Definition: ActsTrackingGeometrySvc.h:109
ActsTrackingGeometrySvc::m_passiveITkInnerPixelBarrelLayerThickness
Gaudi::Property< std::vector< float > > m_passiveITkInnerPixelBarrelLayerThickness
Definition: ActsTrackingGeometrySvc.h:122
IdentityHelper::eta_module
int eta_module() const
Definition: IdentityHelper.cxx:73
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:76
ActsTrackingGeometrySvc::m_passiveITkStripBarrelLayerThickness
Gaudi::Property< std::vector< float > > m_passiveITkStripBarrelLayerThickness
Definition: ActsTrackingGeometrySvc.h:130
ActsTrackingGeometrySvc::makeSCTTRTAssembly
std::shared_ptr< Acts::TrackingVolume > makeSCTTRTAssembly(const Acts::GeometryContext &gctx, const Acts::ILayerBuilder &sct_lb, const Acts::ILayerBuilder &trt_lb, const Acts::CylinderVolumeHelper &cvh, const std::shared_ptr< const Acts::TrackingVolume > &pixel)
Definition: ActsTrackingGeometrySvc.cxx:910
InDetDD::SiDetectorElement
Definition: SiDetectorElement.h:109
WriteCaloSwCorrections.cfg
cfg
Definition: WriteCaloSwCorrections.py:23
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
Cut::all
@ all
Definition: SUSYToolsAlg.cxx:67
ActsTrackingGeometrySvc::p_ITkStripManager
const InDetDD::SiDetectorManager * p_ITkStripManager
Definition: ActsTrackingGeometrySvc.h:94
CVBBV
Acts::CylinderVolumeBounds::BoundValues CVBBV
Definition: ActsCaloTrackingVolumeBuilder.cxx:31
PathResolverFindCalibFile
std::string PathResolverFindCalibFile(const std::string &logical_file_name)
Definition: PathResolver.cxx:321
ActsTrackingGeometrySvc::m_passiveITkOuterPixelBarrelLayerHalflengthZ
Gaudi::Property< std::vector< float > > m_passiveITkOuterPixelBarrelLayerHalflengthZ
Definition: ActsTrackingGeometrySvc.h:125
IdentityHelper::bec
int bec() const
Definition: IdentityHelper.cxx:37
InDetDD::TRT_DetectorManager
The Detector Manager for all TRT Detector elements, it acts as the interface to the detector elements...
Definition: TRT_DetectorManager.h:63
a
TList * a
Definition: liststreamerinfos.cxx:10
ActsTrackingGeometrySvc::m_subDetNoAlign
std::set< ActsTrk::DetectorType > m_subDetNoAlign
Definition: ActsTrackingGeometrySvc.h:150
ActsTrackingGeometrySvc::m_passiveITkOuterPixelBarrelLayerThickness
Gaudi::Property< std::vector< float > > m_passiveITkOuterPixelBarrelLayerThickness
Definition: ActsTrackingGeometrySvc.h:126
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
DEBUG
#define DEBUG
Definition: page_access.h:11
DetectorZone::barrel
@ barrel
InDetDD::SiDetectorManager
Definition: SiDetectorManager.h:60
HGTD_DetectorManager
Definition: HGTD_DetectorManager.h:33
python.SystemOfUnits.s
float s
Definition: SystemOfUnits.py:147
ActsTrackingGeometrySvc::makeStrawLayerBuilder
std::shared_ptr< const Acts::ILayerBuilder > makeStrawLayerBuilder(const InDetDD::InDetDetectorManager *manager)
Definition: ActsTrackingGeometrySvc.cxx:757
python.Logging.manager
manager
Definition: PhysicsAnalysis/D3PDTools/AnaAlgorithm/python/Logging.py:92
ActsTrackingGeometrySvc::m_useMaterialMap
Gaudi::Property< bool > m_useMaterialMap
Definition: ActsTrackingGeometrySvc.h:106
ActsTrackingGeometrySvc::m_trackingGeometry
std::shared_ptr< const Acts::TrackingGeometry > m_trackingGeometry
Definition: ActsTrackingGeometrySvc.h:99
DataPrepToActsConfig.pixelContainer
pixelContainer
Definition: DataPrepToActsConfig.py:9
ActsTrackingGeometrySvc::makeHGTDLayerBuilder
std::shared_ptr< const Acts::ILayerBuilder > makeHGTDLayerBuilder(const HGTD_DetectorManager *manager)
Definition: ActsTrackingGeometrySvc.cxx:788
ActsTrackingGeometrySvc::m_buildSubdetectors
Gaudi::Property< std::vector< std::string > > m_buildSubdetectors
Definition: ActsTrackingGeometrySvc.h:114
IdentityHelper
Definition: IdentityHelper.h:14
ActsTrackingGeometrySvc::m_TRT_idHelper
const TRT_ID * m_TRT_idHelper
Definition: ActsTrackingGeometrySvc.h:101
ActsTrackingGeometrySvc::m_HGTD_idHelper
const HGTD_ID * m_HGTD_idHelper
Definition: ActsTrackingGeometrySvc.h:102
ActsTrackingGeometrySvc::m_passiveITkInnerPixelBarrelLayerRadii
Gaudi::Property< std::vector< float > > m_passiveITkInnerPixelBarrelLayerRadii
the specifications for building additional passive cylinders in the barrel region: for each cylinder ...
Definition: ActsTrackingGeometrySvc.h:120
python.AutoConfigFlags.msg
msg
Definition: AutoConfigFlags.py:7
ActsTrackingGeometrySvc::m_subDetNoAlignProp
Gaudi::Property< std::vector< unsigned int > > m_subDetNoAlignProp
Define the subdetectors for which the tracking geometry does not expect a valid alignment store.
Definition: ActsTrackingGeometrySvc.h:149
ActsTrackingGeometrySvc::m_objDebugOutput
Gaudi::Property< bool > m_objDebugOutput
Definition: ActsTrackingGeometrySvc.h:107
python.iconfTool.gui.pad.logger
logger
Definition: pad.py:14
SiliconTech::pixel
@ pixel
ActsTrackingGeometrySvc::m_nominalContext
ActsTrk::GeometryContext m_nominalContext
Definition: ActsTrackingGeometrySvc.h:104
generate::Zero
void Zero(TH1D *hin)
Definition: generate.cxx:32
ActsLayerBuilder::Mode::SCT
@ SCT
ActsTrackingGeometrySvc::m_passiveITkInnerPixelBarrelLayerHalflengthZ
Gaudi::Property< std::vector< float > > m_passiveITkInnerPixelBarrelLayerHalflengthZ
Definition: ActsTrackingGeometrySvc.h:121
ActsTrk::GeometryContext::context
Acts::GeometryContext context() const
Definition: GeometryContext.h:46