ATLAS Offline Software
StagedTrackingGeometryBuilderCond.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
24 //Gaudi
25 #include "GaudiKernel/SystemOfUnits.h"
26 #include <iterator> //std::advance
27 
28 // constructor
29 InDet::StagedTrackingGeometryBuilderCond::StagedTrackingGeometryBuilderCond(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 //FIXME: ctx, tVolPair not used yet, range not created
54 std::unique_ptr<Trk::TrackingGeometry>
56 (const EventContext& ctx,
57  Trk::TrackingVolume* /*tVol*/,
59 {
60  // only one assumption:
61  // layer builders are ordered in increasing r
62  ATH_MSG_DEBUG( "[ Start building the ID TrackingGeometry. ]");
63  ATH_MSG_DEBUG( "[ STEP 0 ] : Getting overal dimensions from DetectorEnvelope service." );
64 
66  // The Overall Geometry
67 
68  // get the dimensions from the envelope service
69  const RZPairVector& envelopeDefs = m_enclosingEnvelopeSvc->getInDetRZBoundary();
70  ATH_MSG_VERBOSE(" -> retrieved Inner Detector envelope definitions at size " << envelopeDefs.size());
71  double envelopeVolumeRadius = envelopeDefs[1].first;
72  double envelopeVolumeHalfZ = fabs(envelopeDefs[1].second);
73 
74  if (m_removeHGTD) {
75  // If running with the HGTD, we don't want to include its volume
76  // as it will be included in another tracking geometry.
77  // re-evaluating the ID envelope dimension
78  envelopeVolumeHalfZ = m_zMinHGTD;
79  }
80 
81  ATH_MSG_VERBOSE(" -> envelope R/Z defined as : " << envelopeVolumeRadius << " / " << envelopeVolumeHalfZ );
82 
83  ATH_MSG_DEBUG( "[ STEP 1 ] : Getting overall dimensions from the different layer builders." );
84  size_t ilS = 0;
85  double maximumLayerExtendZ = 0.;
86  double maximumLayerRadius = 0.;
87  std::vector<InDet::LayerSetup> layerSetups;
88  for ( const auto& lProvider : m_layerProviders){
89  // screen output
90  ATH_MSG_DEBUG( "[ LayerBuilder : '" << lProvider->identification() << "' ] being processed. " );
91  // retrieve the layers
92  std::vector<Trk::Layer*> centralLayers = lProvider->centralLayers(ctx, whandle);
93  std::pair<const std::vector<Trk::Layer*>, const std::vector<Trk::Layer*> > endcapLayersPair = lProvider->endcapLayer(ctx, whandle);
94  ATH_MSG_INFO(" -> retrieved " << centralLayers.size() << " central layers.");
95  ATH_MSG_INFO(" -> retrieved " << endcapLayersPair.second.size() << " layers on negative side.");
96  ATH_MSG_INFO(" -> retrieved " << endcapLayersPair.first.size() << " layers on positive side.");
97  // getting the Layer setup from parsing the builder output
98  InDet::LayerSetup lSetup =
99  estimateLayerSetup(lProvider->identification(),
100  ilS,
101  endcapLayersPair.second,
102  centralLayers,
103  endcapLayersPair.first,
104  envelopeVolumeRadius,
105  envelopeVolumeHalfZ);
106  // get the maxima - for R and Z
107  takeBigger(maximumLayerRadius, lSetup.rMax);
108  takeBigger(maximumLayerExtendZ, lSetup.zMax);
109  //layer setups for the second run
110  layerSetups.push_back(lSetup);
111  // increase counter
112  ++ilS;
113  }
114  ATH_MSG_VERBOSE(" -> layer max R/Z defined as : " << maximumLayerRadius << " / " << maximumLayerExtendZ );
115  return trackingGeometryImpl(layerSetups, maximumLayerExtendZ,
116  maximumLayerRadius, envelopeVolumeHalfZ,
117  envelopeVolumeRadius);
118 }
119 
120 
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
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
StagedTrackingGeometryBuilderCond.h
RZPairVector
std::vector< RZPair > RZPairVector
Definition: RZPair.h:18
InDet::StagedTrackingGeometryBuilderCond::StagedTrackingGeometryBuilderCond
StagedTrackingGeometryBuilderCond(const std::string &, const std::string &, const IInterface *)
Constructor.
Definition: StagedTrackingGeometryBuilderCond.cxx:29
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::StagedTrackingGeometryBuilderCond::initialize
virtual StatusCode initialize() override final
AlgTool initialize method.
Definition: StagedTrackingGeometryBuilderCond.cxx:38
CylinderLayer.h
InDet::StagedTrackingGeometryBuilderImpl::initialize
virtual StatusCode initialize() override
AlgTool initialize method.
Definition: StagedTrackingGeometryBuilderImpl.cxx:38
IOVInfiniteRange.h
SiDetectorElement.h
TrackingVolume.h
InDet::StagedTrackingGeometryBuilderCond::trackingGeometry
virtual std::unique_ptr< Trk::TrackingGeometry > trackingGeometry(const EventContext &ctx, Trk::TrackingVolume *tVol, SG::WriteCondHandle< Trk::TrackingGeometry > &whandle) const override final
TrackingGeometry Interface methods.
Definition: StagedTrackingGeometryBuilderCond.cxx:56
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
InDet::StagedTrackingGeometryBuilderCond::m_layerProviders
ToolHandleArray< Trk::ILayerProviderCond > m_layerProviders
Helper Tools for the Layer creation, includes beam pipe builder.
Definition: StagedTrackingGeometryBuilderCond.h:68
SG::WriteCondHandle
Definition: WriteCondHandle.h:26
Material.h