159 std::unique_ptr<Trk::TrackingGeometry> inDetTrackingGeometry =
nullptr;
160 std::unique_ptr<Trk::TrackingGeometry> caloTrackingGeometry =
nullptr;
169#ifdef TRKDETDESCR_MEMUSAGE
170 m_memoryLogger.refresh(getpid());
171 ATH_MSG_INFO(
"[ memory usage ] Start of TrackingGeometry building: " );
182 if (inDetTrackingGeometry) {
188 inDetVolume = inDetTrackingGeometry->checkoutHighestTrackingVolume();
190 highestVolume = inDetVolume;
195#ifdef TRKDETDESCR_MEMUSAGE
196 m_memoryLogger.refresh(getpid());
197 ATH_MSG_INFO(
"[ memory usage ] After InDet TrackingGeometry building: " );
207 ATH_MSG_VERBOSE(
"Calorimeter Tracking Geometry is going to be built with enclosed ID." );
209 ATH_MSG_VERBOSE(
"Calorimeter Tracking Geometry is going to be built stand-alone." );
213 if (caloTrackingGeometry) {
218 caloVolume = caloTrackingGeometry->checkoutHighestTrackingVolume();
220 highestVolume = caloVolume;
225#ifdef TRKDETDESCR_MEMUSAGE
226 m_memoryLogger.refresh(getpid());
227 ATH_MSG_INFO(
"[ memory usage ] After Calo TrackingGeometry building: " );
237 std::string enclosed =
"stand-alone.";
238 if (inDetVolume && caloVolume)
239 enclosed =
"with encloded ID/Calo.";
240 else if (inDetVolume || caloVolume)
241 enclosed = (inDetVolume) ?
"with encloded ID." :
"with encloded Calo.";
242 ATH_MSG_VERBOSE(
"Muon System Tracking Geometry is going to be built "<< enclosed );
244 if (inDetVolume && !caloVolume)
253#ifdef TRKDETDESCR_MEMUSAGE
254 m_memoryLogger.refresh(getpid());
255 ATH_MSG_INFO(
"[ memory usage ] After Muon TrackingGeometry building: " );
266 ATH_MSG_VERBOSE(
"Retrieved with following glue volumes: " << innerGlueVolumes );
277 if (!innerVolumeBounds)
ATH_MSG_WARNING(
"atlasTrackingGeometry() ... dynamic cast to innerVolumeBounds failed!" );
278 double innerVolumeOuterR = innerVolumeBounds ? innerVolumeBounds->
outerRadius() : 0;
279 double innerVolumeHalflengthZ = innerVolumeBounds ? innerVolumeBounds->
halflengthZ() : 0;
290 double innerCylinderSectorHalflengthZ = 0.5*(
m_worldDimension[2] - innerVolumeHalflengthZ);
291 auto innerCylinderSectorBounds =
292 std::make_shared<Trk::CylinderVolumeBounds>(0., innerVolumeOuterR, innerCylinderSectorHalflengthZ);
294 double innerCylinderSectorPositionZ = fabs(
m_worldDimension[2]-innerCylinderSectorHalflengthZ);
297 auto atlasInnerNegativeSectorTransf = std::make_unique<Amg::Transform3D>(
Amg::Translation3D(0.,0.,-innerCylinderSectorPositionZ));
299 std::move(atlasInnerNegativeSectorTransf),
300 std::make_shared<Trk::CylinderVolumeBounds>(*innerCylinderSectorBounds),
304 "AtlasInnerNegativeSector");
307 auto atlasInnerPositiveSectorTransf = std::make_unique<Amg::Transform3D>(
Amg::Translation3D(0.,0.,innerCylinderSectorPositionZ));
309 std::move(atlasInnerPositiveSectorTransf),
310 std::move(innerCylinderSectorBounds),
314 "AtlasInnerPositiveSector");
316 ATH_MSG_VERBOSE(
"Inner Negative/Positive Sectors built successfully." );
319 auto atlasInnerSectorVolumes = std::vector<Trk::TrackingVolume*>{atlasInnerNegativeSector,highestVolume,atlasInnerPositiveSector};
322 std::unique_ptr<Trk::BinnedArray<Trk::TrackingVolume>>
323 atlasInnerSectorVolumeArray =
329 auto innerSectorBounds =
330 std::make_shared<Trk::CylinderVolumeBounds>(0., innerVolumeOuterR,
m_worldDimension[2]);
333 std::move(innerSectorBounds),
336 std::move(atlasInnerSectorVolumeArray),
340 auto outerSectorBounds =
343 std::move(outerSectorBounds),
352 auto atlasVolumes = std::vector<Trk::TrackingVolume*>{atlasInnerSector, atlasOuterSector};
354 std::unique_ptr<Trk::BinnedArray<Trk::TrackingVolume>>
365 std::move(atlasBounds),
368 std::move(atlasVolumeArray),
384 auto volIter = innerCentralFaceVolumes.begin();
385 auto volIterEnd = innerCentralFaceVolumes.end();
388 std::vector<Trk::TrackingVolume*> atlasInnerOuterVolumes;
389 atlasInnerOuterVolumes.push_back(atlasInnerNegativeSector);
390 for (; volIter != volIterEnd; ++volIter) {
392 atlasInnerOuterVolumes.push_back(*volIter);
395 atlasInnerOuterVolumes.push_back(atlasInnerPositiveSector);
400 ATH_MSG_VERBOSE(
"Atlas Inner/Outer Sector glued successfully together." );
406 ATH_MSG_VERBOSE(
"Atlas TrackingGeometry built with following parameters : ");
412#ifdef TRKDETDESCR_MEMUSAGE
413 m_memoryLogger.refresh(getpid());
414 ATH_MSG_INFO(
"[ memory usage ] After Outer Sector TrackingGeometry building: " );
424 else ATH_MSG_WARNING(
"atlasTrackingGeometry() ... atlasTrackingGeometry = 0, could not call registerNavigationLevel and propagateMagneticFieldProperties" );
426#ifdef TRKDETDESCR_MEMUSAGE
427 m_memoryLogger.refresh(getpid());
428 ATH_MSG_INFO(
"[ memory usage ] End of TrackingGeometry building: " );