141#ifdef TRKDETDESCR_MEMUSAGE
142 m_memoryLogger.refresh(getpid());
143 ATH_MSG_INFO(
"[ memory usage ] Start of TrackingGeometry building: " );
152 std::unique_ptr<Trk::TrackingGeometry> inDetTrackingGeometry =
155 if (inDetTrackingGeometry) {
161 inDetVolume = inDetTrackingGeometry->checkoutHighestTrackingVolume();
163 highestVolume = inDetVolume;
168#ifdef TRKDETDESCR_MEMUSAGE
169 m_memoryLogger.refresh(getpid());
170 ATH_MSG_INFO(
"[ memory usage ] After InDet TrackingGeometry building: " );
180 ATH_MSG_VERBOSE(
"HGTD Tracking Geometry is going to be built with enclosed ID." );
182 ATH_MSG_VERBOSE(
"HGTD Tracking Geometry is going to be built stand-alone." );
184 std::unique_ptr<Trk::TrackingGeometry> hgtdTrackingGeometry =
187 if (hgtdTrackingGeometry) {
192 hgtdVolume = hgtdTrackingGeometry->checkoutHighestTrackingVolume();
194 highestVolume = hgtdVolume;
199#ifdef TRKDETDESCR_MEMUSAGE
200 m_memoryLogger.refresh(getpid());
201 ATH_MSG_INFO(
"[ memory usage ] After Calo TrackingGeometry building: " );
210 std::string enclosed =
"stand-alone.";
211 if (inDetVolume and hgtdVolume)
212 enclosed =
"with encloded ID/HGTD.";
213 else if (inDetVolume or hgtdVolume)
214 enclosed = (inDetVolume) ?
"with encloded ID." :
"with encloded HGTD.";
215 ATH_MSG_VERBOSE(
"Calorimeter Tracking Geometry is going to be built "<< enclosed );
218 std::unique_ptr<Trk::TrackingGeometry> caloTrackingGeometry;
219 if (inDetVolume and not hgtdVolume)
224 if (caloTrackingGeometry) {
229 caloVolume = caloTrackingGeometry->checkoutHighestTrackingVolume();
231 highestVolume = caloVolume;
236#ifdef TRKDETDESCR_MEMUSAGE
237 m_memoryLogger.refresh(getpid());
238 ATH_MSG_INFO(
"[ memory usage ] After Calo TrackingGeometry building: " );
247 std::string enclosed =
"stand-alone.";
248 if (inDetVolume and hgtdVolume and caloVolume )
249 enclosed =
"with encloded ID/HGTD/Calo.";
250 else if (inDetVolume or hgtdVolume or caloVolume) {
253 enclosed =
"with encloded ID/HGTD";
255 enclosed =
"with encloded ID/Calo";
257 enclosed =
"with encloded ID";
258 }
else if (hgtdVolume) {
260 enclosed =
"with encloded HGTD/Calo";
262 enclosed =
"with encloded HGTD";
264 enclosed =
"with encloded Calo";
267 ATH_MSG_VERBOSE(
"Muon System Tracking Geometry is going to be built "<< enclosed );
270 if (inDetVolume and not hgtdVolume and not caloVolume)
272 else if (hgtdVolume and not caloVolume)
281#ifdef TRKDETDESCR_MEMUSAGE
282 m_memoryLogger.refresh(getpid());
283 ATH_MSG_INFO(
"[ memory usage ] After Muon TrackingGeometry building: " );
294 ATH_MSG_VERBOSE(
"Retrieved with following glue volumes: " << innerGlueVolumes );
305 if (!innerVolumeBounds)
ATH_MSG_WARNING(
"atlasTrackingGeometry() ... dynamic cast to innerVolumeBounds failed!" );
306 double innerVolumeOuterR = innerVolumeBounds ? innerVolumeBounds->
outerRadius() : 0;
307 double innerVolumeHalflengthZ = innerVolumeBounds ? innerVolumeBounds->
halflengthZ() : 0;
318 double innerCylinderSectorHalflengthZ = 0.5*(
m_worldDimension[2] - innerVolumeHalflengthZ);
319 auto innerCylinderSectorBounds = std::make_shared<Trk::CylinderVolumeBounds>(0., innerVolumeOuterR, innerCylinderSectorHalflengthZ);
321 double innerCylinderSectorPositionZ = fabs(
m_worldDimension[2]-innerCylinderSectorHalflengthZ);
324 auto atlasInnerNegativeSectorTransf = std::make_unique<Amg::Transform3D>(
Amg::Translation3D(0.,0.,-innerCylinderSectorPositionZ));
326 std::move(atlasInnerNegativeSectorTransf),
327 innerCylinderSectorBounds,
331 "AtlasInnerNegativeSector");
334 auto atlasInnerPositiveSectorTransf = std::make_unique<Amg::Transform3D>(
Amg::Translation3D(0.,0.,innerCylinderSectorPositionZ));
336 std::move(atlasInnerPositiveSectorTransf),
337 std::make_shared<Trk::CylinderVolumeBounds>(*innerCylinderSectorBounds),
341 "AtlasInnerPositiveSector");
343 ATH_MSG_VERBOSE(
"Inner Negative/Positive Sectors built successfully." );
346 auto atlasInnerSectorVolumes = std::vector<Trk::TrackingVolume*>{atlasInnerNegativeSector,highestVolume,atlasInnerPositiveSector};
354 auto innerSectorBounds =
355 std::make_shared<Trk::CylinderVolumeBounds>(0., innerVolumeOuterR,
m_worldDimension[2]);
361 std::move(atlasInnerSectorVolumeArray),
365 auto outerSectorBounds =
377 auto atlasVolumes = std::vector<Trk::TrackingVolume*>{atlasInnerSector, atlasOuterSector};
390 std::move(atlasVolumeArray),
406 auto volIter = innerCentralFaceVolumes.begin();
407 auto volIterEnd = innerCentralFaceVolumes.end();
410 std::vector<Trk::TrackingVolume*> atlasInnerOuterVolumes;
411 atlasInnerOuterVolumes.push_back(atlasInnerNegativeSector);
412 for ( ; volIter != volIterEnd; ++volIter)
413 if (*volIter) atlasInnerOuterVolumes.push_back(*volIter);
414 atlasInnerOuterVolumes.push_back(atlasInnerPositiveSector);
419 ATH_MSG_VERBOSE(
"Atlas Inner/Outer Sector glued successfully together." );
425 ATH_MSG_VERBOSE(
"Atlas TrackingGeometry built with following parameters : ");
431#ifdef TRKDETDESCR_MEMUSAGE
432 m_memoryLogger.refresh(getpid());
433 ATH_MSG_INFO(
"[ memory usage ] After Outer Sector TrackingGeometry building: " );
443 else ATH_MSG_WARNING(
"atlasTrackingGeometry() ... atlasTrackingGeometry = 0, could not call registerNavigationLevel and propagateMagneticFieldProperties" );
445#ifdef TRKDETDESCR_MEMUSAGE
446 m_memoryLogger.refresh(getpid());
447 ATH_MSG_INFO(
"[ memory usage ] End of TrackingGeometry building: " );