ATLAS Offline Software
Loading...
Searching...
No Matches
GeometryBuilderCond.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// GeometryBuilderCond.cxx, (c) ATLAS Detector software
8
9// Trk include
19
20#ifdef TRKDETDESCR_MEMUSAGE
21#include <unistd.h>
22#endif
23
24// Amg
26// STD
27#include <map>
28//Athena
30// Gaudi
31#include "GaudiKernel/MsgStream.h"
32#include "GaudiKernel/SystemOfUnits.h"
33
34
35// constructor
36Trk::GeometryBuilderCond::GeometryBuilderCond(const std::string& t, const std::string& n, const IInterface* p)
37: AthAlgTool(t,n,p),
39#ifdef TRKDETDESCR_MEMUSAGE
40 m_memoryLogger(),
41#endif
42 m_createWorld(true),
46 m_trackingVolumeArrayCreator("Trk::TrackingVolumeArrayCreator/TrackingVolumeArrayCreator"),
47 m_trackingVolumeHelper("Trk::TrackingVolumeHelper/TrackingVolumeHelper"),
55 m_compactify(true),
57{
58 declareInterface<IGeometryBuilderCond>(this);
59 // by hand declarations
60 declareProperty("CreateWorldManually", m_createWorld);
61 declareProperty("NavigationLevel", m_navigationLevel);
62 // (1) dimension & material
63 declareProperty("WorldDimension", m_worldDimension);
64 declareProperty("WorldMaterialProperties", m_worldMaterialProperties);
65 // tool declarations ----------------------------------------------------------------
66 declareProperty("TrackingVolumeArrayCreator", m_trackingVolumeArrayCreator);
67 declareProperty("TrackingVolumeHelper", m_trackingVolumeHelper);
68 declareProperty("InDetTrackingGeometryBuilder", m_inDetGeometryBuilderCond);
69 declareProperty("HGTD_TrackingGeometryBuilder", m_hgtdGeometryBuilderCond);
70 declareProperty("CaloTrackingGeometryBuilder", m_caloGeometryBuilderCond);
71 declareProperty("MuonTrackingGeometryBuilder", m_muonGeometryBuilderCond);
72 // optimize layer dimension & memory usage -------------------------------
73 declareProperty("Compactify", m_compactify );
74 declareProperty("SynchronizeLayers", m_synchronizeLayers );
75}
76
77// destructor
79= default;
80
81
82// Athena standard methods
83// initialize
85{
86
87 // Retrieve the volume array creator ----------------------------------------------------
89
90 // Retrieve the tracking volume helper --------------------------------------------------
92 // Geometries =============================================================================
93 // (I) Inner Detector ---------------------------------------------------------------------
94 if (!m_inDetGeometryBuilderCond.empty()) {
96 }
97 // (H) High Granularity Timing Detector ----------------------------------------------------
98 if(!m_hgtdGeometryBuilderCond.empty()) {
99 if (m_hgtdGeometryBuilderCond.retrieve().isFailure()) {
100 ATH_MSG_FATAL("Failed to retrieve tool " << m_hgtdGeometryBuilderCond );
101 return StatusCode::FAILURE;
102 } else
103 ATH_MSG_INFO( "Retrieved tool " << m_hgtdGeometryBuilderCond );
104 }
105 // (C) Calorimeter --------------------------------------------------------------------------
106 if (!m_caloGeometryBuilderCond.empty()) {
108 }
109 // (M) Muon System -------------------------------------------------------------------------
110 if (!m_muonGeometryBuilderCond.empty()) {
112 }
113
114 // if no world dimensions are declared, take default ones
115 if (m_worldDimension.empty())
116 m_worldDimension = std::vector<double>{0.*Gaudi::Units::meter, 10.*Gaudi::Units::meter, 15.*Gaudi::Units::meter};
117
118 // if no world materials are declared, take default ones - set vacuum
119 if (m_worldMaterialProperties.size() < 5)
120 m_worldMaterialProperties = std::vector<double>{10.e10,10.e10,1e-10, 0., 0.};
121
127
128 ATH_MSG_DEBUG( " initialize() successful" );
129
130 return StatusCode::SUCCESS;
131}
132
133std::unique_ptr< Trk::TrackingGeometry>
135 Trk::TrackingVolume* /*tVol*/,
137{
138
139 // the geometry to be constructed
140 std::unique_ptr<Trk::TrackingGeometry> tGeometry;
142
143 ATH_MSG_VERBOSE( "Configured to only create world TrackingVolume." );
144
145 auto worldBounds = std::make_shared<Trk::CylinderVolumeBounds>(m_worldDimension[0],
148
149 Trk::TrackingVolume* worldVolume = new Trk::TrackingVolume(nullptr,
150 worldBounds,
152 nullptr,
153 nullptr,
154 "EmptyWorldVolume");
155 // create a new geometry
156 tGeometry = std::make_unique<Trk::TrackingGeometry>(worldVolume);
157 } else
158 tGeometry = atlasTrackingGeometry(ctx, whandle);
159 // sign it before you return anything
160 tGeometry->sign(geometrySignature());
161 return tGeometry;
162}
163
164
165std::unique_ptr<Trk::TrackingGeometry>
168{
169 // the return geometry
170 std::unique_ptr<Trk::TrackingGeometry> atlasTrackingGeometry;
171
172 // A ------------- INNER DETECTOR SECTION --------------------------------------------------------------------------------
173 // get the Inner Detector and/or HGTD and/or Calorimeter trackingGeometry
174
175 // the volumes to be given to higher level tracking geometry builders
176 Trk::TrackingVolume* inDetVolume = nullptr;
177 Trk::TrackingVolume* hgtdVolume = nullptr;
178 Trk::TrackingVolume* caloVolume = nullptr;
179
180 // mark the highest volume
181 Trk::TrackingVolume* highestVolume = nullptr;
182
183#ifdef TRKDETDESCR_MEMUSAGE
184 m_memoryLogger.refresh(getpid());
185 ATH_MSG_INFO( "[ memory usage ] Start of TrackingGeometry building: " );
186 ATH_MSG_INFO( m_memoryLogger );
187#endif
188
189 // ========================== INNER DETECTOR PART =================================================
190 if (!m_inDetGeometryBuilderCond.empty()) {
191 // debug output
192 ATH_MSG_VERBOSE( "ID Tracking Geometry is going to be built." );
193 // build the geometry
194 std::unique_ptr<Trk::TrackingGeometry> inDetTrackingGeometry =
195 m_inDetGeometryBuilderCond->trackingGeometry(ctx, nullptr, whandle);
196 // check
197 if (inDetTrackingGeometry) {
198 // sign it
199 inDetTrackingGeometry->sign(m_inDetGeometryBuilderCond->geometrySignature());
200 // check whether the world has to be created or not
202 // checkout the highest InDet volume
203 inDetVolume = inDetTrackingGeometry->checkoutHighestTrackingVolume();
204 // assign it as the highest volume
205 highestVolume = inDetVolume;
206 } else // -> Take the exit and return ID stand alone
207 atlasTrackingGeometry = std::move(inDetTrackingGeometry);
208 }
209
210#ifdef TRKDETDESCR_MEMUSAGE
211 m_memoryLogger.refresh(getpid());
212 ATH_MSG_INFO( "[ memory usage ] After InDet TrackingGeometry building: " );
213 ATH_MSG_INFO( m_memoryLogger );
214#endif
215
216 }
217
218 // ========================== HGTD PART =================================================
219 // if a HGTD Geometry Builder is present -> wrap it around the ID
220 if (!m_hgtdGeometryBuilderCond.empty()) {
221 if (inDetVolume)
222 ATH_MSG_VERBOSE( "HGTD Tracking Geometry is going to be built with enclosed ID." );
223 else
224 ATH_MSG_VERBOSE( "HGTD Tracking Geometry is going to be built stand-alone." );
225 // get the InnerDetector TrackingGeometry
226 std::unique_ptr<Trk::TrackingGeometry> hgtdTrackingGeometry =
227 m_hgtdGeometryBuilderCond->trackingGeometry(ctx, inDetVolume, whandle);
228 // if you have to create world or there is a Calo/Muon geometry builder ...
229 if (hgtdTrackingGeometry) {
230 // sign it
231 hgtdTrackingGeometry->sign(m_hgtdGeometryBuilderCond->geometrySignature());
233 // check out the highest Calo volume
234 hgtdVolume = hgtdTrackingGeometry->checkoutHighestTrackingVolume();
235 // assign it as the highest volume (overwrite ID)
236 highestVolume = hgtdVolume;
237 } else // -> Take the exit and return HGTD back
238 atlasTrackingGeometry = std::move(hgtdTrackingGeometry);
239 }
240
241#ifdef TRKDETDESCR_MEMUSAGE
242 m_memoryLogger.refresh(getpid());
243 ATH_MSG_INFO( "[ memory usage ] After Calo TrackingGeometry building: " );
244 ATH_MSG_INFO( m_memoryLogger );
245#endif
246
247 }
248
249 // ========================== CALORIMETER PART =================================================
250 // if a Calo Geometry Builder is present -> wrap it around the ID or HGTD
251 if (!m_caloGeometryBuilderCond.empty()) {
252 std::string enclosed = "stand-alone.";
253 if (inDetVolume and hgtdVolume)
254 enclosed = "with encloded ID/HGTD.";
255 else if (inDetVolume or hgtdVolume)
256 enclosed = (inDetVolume) ? "with encloded ID." : "with encloded HGTD.";
257 ATH_MSG_VERBOSE( "Calorimeter Tracking Geometry is going to be built "<< enclosed );
258
259 // get the InnerDetector TrackingGeometry or the HGTD tracking geometry
260 std::unique_ptr<Trk::TrackingGeometry> caloTrackingGeometry;
261 if (inDetVolume and not hgtdVolume)
262 caloTrackingGeometry = m_caloGeometryBuilderCond->trackingGeometry(ctx, inDetVolume, whandle);
263 else
264 caloTrackingGeometry = m_caloGeometryBuilderCond->trackingGeometry(ctx, hgtdVolume, whandle);
265 // if you have to create world or there is a Muon geometry builder ...
266 if (caloTrackingGeometry) {
267 // sign it
268 caloTrackingGeometry->sign(m_caloGeometryBuilderCond->geometrySignature());
270 // check out the highest Calo volume
271 caloVolume = caloTrackingGeometry->checkoutHighestTrackingVolume();
272 // assign it as the highest volume (overwrite ID)
273 highestVolume = caloVolume;
274 } else // -> Take the exit and return Calo back
275 atlasTrackingGeometry = std::move(caloTrackingGeometry);
276 }
277
278#ifdef TRKDETDESCR_MEMUSAGE
279 m_memoryLogger.refresh(getpid());
280 ATH_MSG_INFO( "[ memory usage ] After Calo TrackingGeometry building: " );
281 ATH_MSG_INFO( m_memoryLogger );
282#endif
283
284 }
285
286 // ========================== MUON SYSTEM PART =================================================
287 // if Muon Geometry Builder is present -> wrap either ID or Calo
288 if (!m_muonGeometryBuilderCond.empty()) {
289 std::string enclosed = "stand-alone.";
290 if (inDetVolume and hgtdVolume and caloVolume )
291 enclosed = "with encloded ID/HGTD/Calo.";
292 else if (inDetVolume or hgtdVolume or caloVolume) {
293 if (inDetVolume) {
294 if (hgtdVolume)
295 enclosed = "with encloded ID/HGTD";
296 else if (caloVolume)
297 enclosed = "with encloded ID/Calo";
298 else
299 enclosed = "with encloded ID";
300 } else if (hgtdVolume) {
301 if (caloVolume)
302 enclosed = "with encloded HGTD/Calo";
303 else
304 enclosed = "with encloded HGTD";
305 } else {
306 enclosed = "with encloded Calo";
307 }
308 }
309 ATH_MSG_VERBOSE( "Muon System Tracking Geometry is going to be built "<< enclosed );
310
311 // there's nothing outside the muons -- wrap the calo or the HGTD if one or both of them exist
312 if (inDetVolume and not hgtdVolume and not caloVolume)
313 atlasTrackingGeometry = m_muonGeometryBuilderCond->trackingGeometry(ctx, inDetVolume, whandle);
314 else if (hgtdVolume and not caloVolume)
315 atlasTrackingGeometry = m_muonGeometryBuilderCond->trackingGeometry(ctx, hgtdVolume, whandle);
316 else
317 atlasTrackingGeometry = m_muonGeometryBuilderCond->trackingGeometry(ctx, caloVolume, whandle);
318
319 // sign it
321 atlasTrackingGeometry->sign(m_muonGeometryBuilderCond->geometrySignature());
322
323#ifdef TRKDETDESCR_MEMUSAGE
324 m_memoryLogger.refresh(getpid());
325 ATH_MSG_INFO( "[ memory usage ] After Muon TrackingGeometry building: " );
326 ATH_MSG_INFO( m_memoryLogger );
327#endif
328
329 // ========================== WRAPPING SECTION FOR ID/CALO ====================================
330 } else if (m_createWorld && highestVolume) {
331 // wrapping and world creation has been switched on
332 ATH_MSG_VERBOSE( "Enclosing world is going to be built for: " << highestVolume->volumeName() );
333 // get the glue volumes
334 Trk::GlueVolumesDescriptor& innerGlueVolumes = highestVolume->glueVolumesDescriptor();
335 // some screen output
336 ATH_MSG_VERBOSE( "Retrieved with following glue volumes: " << innerGlueVolumes );
337 // at negative face
338 const std::vector<Trk::TrackingVolume*>& innerNegativeFaceVolumes = innerGlueVolumes.glueVolumes(Trk::negativeFaceXY);
339 // at cylinder cover
340 const std::vector<Trk::TrackingVolume*>& innerCentralFaceVolumes = innerGlueVolumes.glueVolumes(Trk::cylinderCover);
341 // at positive face
342 const std::vector<Trk::TrackingVolume*>& innerPositiveFaceVolumes = innerGlueVolumes.glueVolumes(Trk::positiveFaceXY);
343
344 // get the dimensions
345 // cast them to CylinderVolumeBounds
346 const Trk::CylinderVolumeBounds* innerVolumeBounds = dynamic_cast<const Trk::CylinderVolumeBounds*>(&(highestVolume->volumeBounds()));
347 if (!innerVolumeBounds) ATH_MSG_WARNING( "atlasTrackingGeometry() ... dynamic cast to innerVolumeBounds failed!" );
348 double innerVolumeOuterR = innerVolumeBounds ? innerVolumeBounds->outerRadius() : 0;
349 double innerVolumeHalflengthZ = innerVolumeBounds ? innerVolumeBounds->halflengthZ() : 0;
350 // Hierarchy after enclosing
351 //
352 // AtlasWorldVolume:
353 // AtlasInnerCylinder
354 // AtlasInnerNegativeSector
355 // InnerEnclosedVolume (can be ID/Calo)
356 // AtlasOuterNegativeSector
357 // AtlasOuterTube
358 // B -------------- BUILD WORLD AROUND for ID stand alone applications
359
360 double innerCylinderSectorHalflengthZ = 0.5*(m_worldDimension[2] - innerVolumeHalflengthZ);
361 auto innerCylinderSectorBounds = std::make_shared<Trk::CylinderVolumeBounds>(0., innerVolumeOuterR, innerCylinderSectorHalflengthZ);
362
363 double innerCylinderSectorPositionZ = fabs(m_worldDimension[2]-innerCylinderSectorHalflengthZ);
364
365 // the AtlasInnerNegativeSector
366 auto atlasInnerNegativeSectorTransf = std::make_unique<Amg::Transform3D>(Amg::Translation3D(0.,0.,-innerCylinderSectorPositionZ));
367 Trk::TrackingVolume* atlasInnerNegativeSector = new Trk::TrackingVolume(
368 std::move(atlasInnerNegativeSectorTransf),
369 innerCylinderSectorBounds,
371 nullptr,
372 nullptr,
373 "AtlasInnerNegativeSector");
374
375 // the AtlasInnerPositiveSector
376 auto atlasInnerPositiveSectorTransf = std::make_unique<Amg::Transform3D>(Amg::Translation3D(0.,0.,innerCylinderSectorPositionZ));
377 Trk::TrackingVolume* atlasInnerPositiveSector = new Trk::TrackingVolume(
378 std::move(atlasInnerPositiveSectorTransf),
379 std::make_shared<Trk::CylinderVolumeBounds>(*innerCylinderSectorBounds),
381 nullptr,
382 nullptr,
383 "AtlasInnerPositiveSector");
384
385 ATH_MSG_VERBOSE( "Inner Negative/Positive Sectors built successfully." );
386
387 // create the subvolume Array
388 auto atlasInnerSectorVolumes = std::vector<Trk::TrackingVolume*>{atlasInnerNegativeSector,highestVolume,atlasInnerPositiveSector};
389
390 ATH_MSG_VERBOSE( "Create the Atlas Inner Sector volumes. " );
391 std::unique_ptr<Trk::BinnedArray<Trk::TrackingVolume>> atlasInnerSectorVolumeArray = m_trackingVolumeArrayCreator ?
392 m_trackingVolumeArrayCreator->cylinderVolumesArrayInZ(atlasInnerSectorVolumes) : nullptr;
393
394
395 // Atlas inner Sector bounds
396 auto innerSectorBounds =
397 std::make_shared<Trk::CylinderVolumeBounds>(0., innerVolumeOuterR, m_worldDimension[2]);
398 // build the Tracking volumes
399 Trk::TrackingVolume* atlasInnerSector = new Trk::TrackingVolume(nullptr,
400 innerSectorBounds,
402 nullptr,
403 std::move(atlasInnerSectorVolumeArray),
404 "AtlasInnerSector");
405
406 // Atlas outer Sector
407 auto outerSectorBounds =
408 std::make_shared<Trk::CylinderVolumeBounds>(innerVolumeOuterR, m_worldDimension[1], m_worldDimension[2]);
409 Trk::TrackingVolume* atlasOuterSector = new Trk::TrackingVolume(nullptr,
410 outerSectorBounds,
412 nullptr,
413 nullptr,
414 "AtlasOuterSector");
415
416 ATH_MSG_VERBOSE( "Atlas Inner/Outer Sectors built successfully." );
417
418 // create the array of Inner and Outer sector
419 auto atlasVolumes = std::vector<Trk::TrackingVolume*>{atlasInnerSector, atlasOuterSector};
420
421 std::unique_ptr<Trk::BinnedArray<Trk::TrackingVolume>> atlasVolumeArray = m_trackingVolumeArrayCreator ?
422 m_trackingVolumeArrayCreator->cylinderVolumesArrayInR(atlasVolumes) : nullptr;
423
424 // create the Atlas volume bounds
425 auto atlasBounds = std::make_shared<Trk::CylinderVolumeBounds>(0., m_worldDimension[1], m_worldDimension[2]);
426
427 // create the Atlas TrackingVolume
428 Trk::TrackingVolume* atlasVolume = new Trk::TrackingVolume(nullptr,
429 atlasBounds,
431 nullptr,
432 std::move(atlasVolumeArray),
433 "Atlas");
434
435 ATH_MSG_VERBOSE( "Atlas Tracking World volume built successfully." );
436
437
438 // glue the inner sector to be complete
439 m_trackingVolumeHelper->glueTrackingVolumes( *atlasInnerNegativeSector, Trk::positiveFaceXY,
440 innerNegativeFaceVolumes, Trk::negativeFaceXY );
441
442 m_trackingVolumeHelper->glueTrackingVolumes( *atlasInnerPositiveSector, Trk::negativeFaceXY,
443 innerPositiveFaceVolumes, Trk::positiveFaceXY );
444
445 ATH_MSG_VERBOSE( "Atlas Inner Sector glued successfully together." );
446
447 // iterators to the face volumes
448 auto volIter = innerCentralFaceVolumes.begin();
449 auto volIterEnd = innerCentralFaceVolumes.end();
450
451 // glue outer and inner sector together
452 std::vector<Trk::TrackingVolume*> atlasInnerOuterVolumes;
453 atlasInnerOuterVolumes.push_back(atlasInnerNegativeSector);
454 for ( ; volIter != volIterEnd; ++volIter)
455 if (*volIter) atlasInnerOuterVolumes.push_back(*volIter);
456 atlasInnerOuterVolumes.push_back(atlasInnerPositiveSector);
457
458 m_trackingVolumeHelper->glueTrackingVolumes(*atlasOuterSector, Trk::tubeInnerCover,
459 atlasInnerOuterVolumes, Trk::tubeOuterCover);
460
461 ATH_MSG_VERBOSE( "Atlas Inner/Outer Sector glued successfully together." );
462
463 // job done -> create the TrackingGeometry
464 atlasTrackingGeometry = std::make_unique<Trk::TrackingGeometry>(atlasVolume);
465
466 // detailed information about this tracking geometry
467 ATH_MSG_VERBOSE( "Atlas TrackingGeometry built with following parameters : ");
468 //ATH_MSG_VERBOSE( " - TrackingVolume containers : " << atlasTrackingGeometry->numberOfContainerVolumes() );
469 //ATH_MSG_VERBOSE( " - TrackingVolume at navigation level : " << atlasTrackingGeometry->numberOfContainerVolumes() );
470 //ATH_MSG_VERBOSE( " - Contained static layers : " << atlasTrackingGeometry->boundaryLayers().size());
471 ATH_MSG_VERBOSE( " - Unique material layers on boundaries : " << atlasTrackingGeometry->boundaryLayers().size());
472
473#ifdef TRKDETDESCR_MEMUSAGE
474 m_memoryLogger.refresh(getpid());
475 ATH_MSG_INFO( "[ memory usage ] After Outer Sector TrackingGeometry building: " );
476 ATH_MSG_INFO( m_memoryLogger );
477#endif
478
479 }
480
482 if (m_navigationLevel < 3)
484 }
485 else ATH_MSG_WARNING( "atlasTrackingGeometry() ... atlasTrackingGeometry = 0, could not call registerNavigationLevel and propagateMagneticFieldProperties" );
486
487#ifdef TRKDETDESCR_MEMUSAGE
488 m_memoryLogger.refresh(getpid());
489 ATH_MSG_INFO( "[ memory usage ] End of TrackingGeometry building: " );
490 ATH_MSG_INFO( m_memoryLogger );
491#endif
492
493 // synchronize the layers
495 if (m_synchronizeLayers) atlasTrackingGeometry->synchronizeLayers(msg());
496
497 // compactify if configured to do so
498 if (m_compactify) atlasTrackingGeometry->compactify(msg());
499 }
501}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_FATAL(x)
#define ATH_MSG_INFO(x)
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
AthAlgTool(const std::string &type, const std::string &name, const IInterface *parent)
Constructor with parameters:
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
Bounds for a cylindrical Volume, the decomposeToSurfaces method creates a vector of up to 6 surfaces:
double halflengthZ() const
This method returns the halflengthZ.
double outerRadius() const
This method returns the outer radius.
int m_navigationLevel
NavigationLevel.
virtual std::unique_ptr< Trk::TrackingGeometry > trackingGeometry(const EventContext &ctx, Trk::TrackingVolume *tVol, SG::WriteCondHandle< TrackingGeometry > &whandle) const override
TrackingGeometry Interface method - optionally a pointer to Bounds Interface marked as not thread saf...
ToolHandle< IGeometryBuilderCond > m_muonGeometryBuilderCond
GeometryBuilderCond for the Muon System.
ToolHandle< ITrackingVolumeHelper > m_trackingVolumeHelper
Helper Tool to create TrackingVolumes.
Material m_worldMaterial
the world material
ToolHandle< IGeometryBuilderCond > m_caloGeometryBuilderCond
GeometryBuilderCond for the Calorimeters.
ToolHandle< IGeometryBuilderCond > m_inDetGeometryBuilderCond
GeometryBuilderCond for the InnerDetector.
bool m_muonGeometry
GeometryBuilderCond for the Muon System.
std::vector< double > m_worldMaterialProperties
The material properties of the created world.
ToolHandle< IGeometryBuilderCond > m_hgtdGeometryBuilderCond
switch on TrackingGeometry for HGTD
std::unique_ptr< Trk::TrackingGeometry > atlasTrackingGeometry(const EventContext &ctx, SG::WriteCondHandle< TrackingGeometry > &whandle) const
TrackingGeometry for ATLAS setup.
bool m_createWorld
Boolean Switch to create World manually.
std::vector< double > m_worldDimension
The dimensions of the manually created world.
ToolHandle< ITrackingVolumeArrayCreator > m_trackingVolumeArrayCreator
Helper Tool to create TrackingVolume Arrays.
bool m_synchronizeLayers
synchronize contained layer dimensions to volumes
virtual ~GeometryBuilderCond()
Destructor.
virtual StatusCode initialize() override
AlgTool initialize method.
virtual GeometrySignature geometrySignature() const override
The unique signature.
GeometryBuilderCond(const std::string &, const std::string &, const IInterface *)
Constructor.
bool m_compactify
optimize event memory usage: register all surfaces with TG
bool m_caloGeometry
switch on TrackingGeometry for the Calorimeters
Descriptor class to hold GlueVolumes of a TrackingGeometry object.
const std::vector< TrackingVolume * > & glueVolumes(BoundarySurfaceFace)
retrieve them again
A common object to be contained by.
Definition Material.h:117
Full Volume description used in Tracking, it inherits from Volume to get the geometrical structure,...
const std::string & volumeName() const
Returns the VolumeName - for debug reason, might be depreciated later.
GlueVolumesDescriptor & glueVolumesDescriptor()
const VolumeBounds & volumeBounds() const
returns the volumeBounds()
Definition Volume.h:96
Eigen::Translation< double, 3 > Translation3D
NavigationLevel
destinguishes an association TrackingGeometry with one for global search
MsgStream & msg
Definition testRead.cxx:32