ATLAS Offline Software
StagedTrackingGeometryBuilder.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 // InDet
9 // Trk Geometry stuff
16 #include "TrkGeometry/Material.h"
17 #include "TrkGeometry/Layer.h"
19 #include "TrkGeometry/DiscLayer.h"
20 #include "TrkSurfaces/DiscBounds.h"
21 // Athena
23 //Gaudi
24 #include "GaudiKernel/SystemOfUnits.h"
25 #include "GaudiKernel/MsgStream.h"
26 #include <iterator> //std::advance
27 
28 // constructor
29 InDet::StagedTrackingGeometryBuilder::StagedTrackingGeometryBuilder(const std::string& t, const std::string& n, const IInterface* p) :
30  base_class(t,n,p)
31 {
32  // layer builders and their configurations
33  declareProperty("LayerBuilders", m_layerProviders);
34 }
35 
36 // Athena standard methods
37 // initialize
39 {
40 
41  // Retrieve the layer builders -----------------------------------------------------------
42  if (m_layerProviders.retrieve().isFailure())
43  {
44  ATH_MSG_FATAL( "Failed to retrieve tool(s) " << m_layerProviders );
45  return StatusCode::FAILURE;
46  } else
47  ATH_MSG_DEBUG( "Retrieved tool " << m_layerProviders );
48 
50 }
51 
52 
53 std::unique_ptr<Trk::TrackingGeometry>
55 (Trk::TrackingVolume*) const
56 {
57  // only one assumption:
58  // layer builders are ordered in increasing r
59  ATH_MSG_DEBUG( "[ Start building the ID TrackingGeometry. ]");
60  ATH_MSG_DEBUG( "[ STEP 0 ] : Getting overal dimensions from DetectorEnvelope service." );
62  // The Overall Geometry
63  // get the dimensions from the envelope service
64  const RZPairVector& envelopeDefs = m_enclosingEnvelopeSvc->getInDetRZBoundary();
65  ATH_MSG_VERBOSE(" -> retrieved Inner Detector envelope definitions at size " << envelopeDefs.size());
66  double envelopeVolumeRadius = envelopeDefs[1].first;
67  double envelopeVolumeHalfZ = fabs(envelopeDefs[1].second);
68  ATH_MSG_VERBOSE(" -> envelope R/Z defined as : " << envelopeVolumeRadius << " / " << envelopeVolumeHalfZ );
69 
70  ATH_MSG_DEBUG( "[ STEP 1 ] : Getting overal dimensions from the different layer builders." );
71  size_t ilS = 0;
72  double maximumLayerExtendZ = 0.;
73  double maximumLayerRadius = 0.;
74  std::vector<InDet::LayerSetup> layerSetups;
75  for ( const auto& lProvider : m_layerProviders){
76  // screen output
77  ATH_MSG_DEBUG( "[ LayerBuilder : '" << lProvider->identification() << "' ] being processed. " );
78  // retrieve the layers
79  std::vector<Trk::Layer*> centralLayers = lProvider->centralLayers();
80  std::pair<const std::vector<Trk::Layer*>, const std::vector<Trk::Layer*> > endcapLayersPair = lProvider->endcapLayer();
81  ATH_MSG_VERBOSE(" -> retrieved " << centralLayers.size() << " central layers.");
82  ATH_MSG_VERBOSE(" -> retrieved " << endcapLayersPair.second.size() << " layers on negative side.");
83  ATH_MSG_VERBOSE(" -> retrieved " << endcapLayersPair.first.size() << " layers on positive side.");
84  // getting the Layer setup from parsing the builder output
85  InDet::LayerSetup lSetup =
86  estimateLayerSetup(lProvider->identification(),
87  ilS,
88  endcapLayersPair.second,
89  centralLayers,
90  endcapLayersPair.first,
91  envelopeVolumeRadius,
92  envelopeVolumeHalfZ);
93  // get the maxima - for R and Z
94  takeBigger(maximumLayerRadius, lSetup.rMax);
95  takeBigger(maximumLayerExtendZ, lSetup.zMax);
96  //layer setups for the second run
97  layerSetups.push_back(lSetup);
98  // increase counter
99  ++ilS;
100  }
101  ATH_MSG_VERBOSE(" -> layer max R/Z defined as : " << maximumLayerRadius << " / " << maximumLayerExtendZ );
102 
103  return trackingGeometryImpl(layerSetups, maximumLayerExtendZ,
104  maximumLayerRadius, envelopeVolumeHalfZ,
105  envelopeVolumeRadius);
106 }
107 
python.SystemOfUnits.second
int second
Definition: SystemOfUnits.py:120
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
InDet::LayerSetup
Definition: StagedTrackingGeometryBuilderImpl.h:45
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
DiscBounds.h
InDet::StagedTrackingGeometryBuilder::trackingGeometry
virtual std::unique_ptr< Trk::TrackingGeometry > trackingGeometry(Trk::TrackingVolume *tvol=0) const override final
TrackingGeometry Interface methods.
Definition: StagedTrackingGeometryBuilder.cxx:55
InDet::StagedTrackingGeometryBuilder::StagedTrackingGeometryBuilder
StagedTrackingGeometryBuilder(const std::string &, const std::string &, const IInterface *)
Constructor.
Definition: StagedTrackingGeometryBuilder.cxx:29
RZPairVector
std::vector< RZPair > RZPairVector
Definition: RZPair.h:18
BinnedArray.h
DiscLayer.h
DiscOverlapDescriptor.h
VolumeBounds.h
BinnedArray1D1D.h
Layer.h
InDet::LayerSetup::rMax
double rMax
Definition: StagedTrackingGeometryBuilderImpl.h:69
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
takeBigger
#define takeBigger(current, test)
Definition: RobustTrackingGeometryBuilderImpl.h:44
CylinderVolumeBounds.h
beamspotman.n
n
Definition: beamspotman.py:731
InDet::LayerSetup::zMax
double zMax
Definition: StagedTrackingGeometryBuilderImpl.h:70
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
InDet::StagedTrackingGeometryBuilder::m_layerProviders
ToolHandleArray< Trk::ILayerProvider > m_layerProviders
Helper Tools for the Layer creation, includes beam pipe builder.
Definition: StagedTrackingGeometryBuilder.h:68
CylinderLayer.h
InDet::StagedTrackingGeometryBuilderImpl::initialize
virtual StatusCode initialize() override
AlgTool initialize method.
Definition: StagedTrackingGeometryBuilderImpl.cxx:38
InDet::StagedTrackingGeometryBuilder::initialize
virtual StatusCode initialize() override final
AlgTool initialize method.
Definition: StagedTrackingGeometryBuilder.cxx:38
SiDetectorElement.h
TrackingVolume.h
StagedTrackingGeometryBuilder.h
declareProperty
#define declareProperty(n, p, h)
Definition: BaseFakeBkgTool.cxx:15
TrackingGeometry.h
checker_macros.h
Define macros for attributes used to control the static checker.
Trk::TrackingVolume
Definition: TrackingVolume.h:121
Material.h