183#ifdef TRKDETDESCR_MEMUSAGE
184 m_memoryLogger.refresh(getpid());
185 ATH_MSG_INFO(
"[ memory usage ] Start of TrackingGeometry building: " );
194 std::unique_ptr<Trk::TrackingGeometry> inDetTrackingGeometry =
197 if (inDetTrackingGeometry) {
203 inDetVolume = inDetTrackingGeometry->checkoutHighestTrackingVolume();
205 highestVolume = inDetVolume;
210#ifdef TRKDETDESCR_MEMUSAGE
211 m_memoryLogger.refresh(getpid());
212 ATH_MSG_INFO(
"[ memory usage ] After InDet TrackingGeometry building: " );
222 ATH_MSG_VERBOSE(
"HGTD Tracking Geometry is going to be built with enclosed ID." );
224 ATH_MSG_VERBOSE(
"HGTD Tracking Geometry is going to be built stand-alone." );
226 std::unique_ptr<Trk::TrackingGeometry> hgtdTrackingGeometry =
229 if (hgtdTrackingGeometry) {
234 hgtdVolume = hgtdTrackingGeometry->checkoutHighestTrackingVolume();
236 highestVolume = hgtdVolume;
241#ifdef TRKDETDESCR_MEMUSAGE
242 m_memoryLogger.refresh(getpid());
243 ATH_MSG_INFO(
"[ memory usage ] After Calo TrackingGeometry building: " );
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 );
260 std::unique_ptr<Trk::TrackingGeometry> caloTrackingGeometry;
261 if (inDetVolume and not hgtdVolume)
266 if (caloTrackingGeometry) {
271 caloVolume = caloTrackingGeometry->checkoutHighestTrackingVolume();
273 highestVolume = caloVolume;
278#ifdef TRKDETDESCR_MEMUSAGE
279 m_memoryLogger.refresh(getpid());
280 ATH_MSG_INFO(
"[ memory usage ] After Calo TrackingGeometry building: " );
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) {
295 enclosed =
"with encloded ID/HGTD";
297 enclosed =
"with encloded ID/Calo";
299 enclosed =
"with encloded ID";
300 }
else if (hgtdVolume) {
302 enclosed =
"with encloded HGTD/Calo";
304 enclosed =
"with encloded HGTD";
306 enclosed =
"with encloded Calo";
309 ATH_MSG_VERBOSE(
"Muon System Tracking Geometry is going to be built "<< enclosed );
312 if (inDetVolume and not hgtdVolume and not caloVolume)
314 else if (hgtdVolume and not caloVolume)
323#ifdef TRKDETDESCR_MEMUSAGE
324 m_memoryLogger.refresh(getpid());
325 ATH_MSG_INFO(
"[ memory usage ] After Muon TrackingGeometry building: " );
336 ATH_MSG_VERBOSE(
"Retrieved with following glue volumes: " << innerGlueVolumes );
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;
360 double innerCylinderSectorHalflengthZ = 0.5*(
m_worldDimension[2] - innerVolumeHalflengthZ);
361 auto innerCylinderSectorBounds = std::make_shared<Trk::CylinderVolumeBounds>(0., innerVolumeOuterR, innerCylinderSectorHalflengthZ);
363 double innerCylinderSectorPositionZ = fabs(
m_worldDimension[2]-innerCylinderSectorHalflengthZ);
366 auto atlasInnerNegativeSectorTransf = std::make_unique<Amg::Transform3D>(
Amg::Translation3D(0.,0.,-innerCylinderSectorPositionZ));
368 std::move(atlasInnerNegativeSectorTransf),
369 innerCylinderSectorBounds,
373 "AtlasInnerNegativeSector");
376 auto atlasInnerPositiveSectorTransf = std::make_unique<Amg::Transform3D>(
Amg::Translation3D(0.,0.,innerCylinderSectorPositionZ));
378 std::move(atlasInnerPositiveSectorTransf),
379 std::make_shared<Trk::CylinderVolumeBounds>(*innerCylinderSectorBounds),
383 "AtlasInnerPositiveSector");
385 ATH_MSG_VERBOSE(
"Inner Negative/Positive Sectors built successfully." );
388 auto atlasInnerSectorVolumes = std::vector<Trk::TrackingVolume*>{atlasInnerNegativeSector,highestVolume,atlasInnerPositiveSector};
396 auto innerSectorBounds =
397 std::make_shared<Trk::CylinderVolumeBounds>(0., innerVolumeOuterR,
m_worldDimension[2]);
403 std::move(atlasInnerSectorVolumeArray),
407 auto outerSectorBounds =
419 auto atlasVolumes = std::vector<Trk::TrackingVolume*>{atlasInnerSector, atlasOuterSector};
432 std::move(atlasVolumeArray),
448 auto volIter = innerCentralFaceVolumes.begin();
449 auto volIterEnd = innerCentralFaceVolumes.end();
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);
461 ATH_MSG_VERBOSE(
"Atlas Inner/Outer Sector glued successfully together." );
467 ATH_MSG_VERBOSE(
"Atlas TrackingGeometry built with following parameters : ");
473#ifdef TRKDETDESCR_MEMUSAGE
474 m_memoryLogger.refresh(getpid());
475 ATH_MSG_INFO(
"[ memory usage ] After Outer Sector TrackingGeometry building: " );
485 else ATH_MSG_WARNING(
"atlasTrackingGeometry() ... atlasTrackingGeometry = 0, could not call registerNavigationLevel and propagateMagneticFieldProperties" );
487#ifdef TRKDETDESCR_MEMUSAGE
488 m_memoryLogger.refresh(getpid());
489 ATH_MSG_INFO(
"[ memory usage ] End of TrackingGeometry building: " );