120 std::unique_ptr<Trk::TrackingGeometry> inDetTrackingGeometry =
nullptr;
121 std::unique_ptr<Trk::TrackingGeometry> caloTrackingGeometry =
nullptr;
130#ifdef TRKDETDESCR_MEMUSAGE
131 m_memoryLogger.refresh(getpid());
132 ATH_MSG_INFO(
"[ memory usage ] Start of TrackingGeometry building: " );
143 if (inDetTrackingGeometry) {
149 inDetVolume = inDetTrackingGeometry->checkoutHighestTrackingVolume();
151 highestVolume = inDetVolume;
156#ifdef TRKDETDESCR_MEMUSAGE
157 m_memoryLogger.refresh(getpid());
158 ATH_MSG_INFO(
"[ memory usage ] After InDet TrackingGeometry building: " );
168 ATH_MSG_VERBOSE(
"Calorimeter Tracking Geometry is going to be built with enclosed ID." );
170 ATH_MSG_VERBOSE(
"Calorimeter Tracking Geometry is going to be built stand-alone." );
174 if (caloTrackingGeometry) {
179 caloVolume = caloTrackingGeometry->checkoutHighestTrackingVolume();
181 highestVolume = caloVolume;
186#ifdef TRKDETDESCR_MEMUSAGE
187 m_memoryLogger.refresh(getpid());
188 ATH_MSG_INFO(
"[ memory usage ] After Calo TrackingGeometry building: " );
198 std::string enclosed =
"stand-alone.";
199 if (inDetVolume && caloVolume)
200 enclosed =
"with encloded ID/Calo.";
201 else if (inDetVolume || caloVolume)
202 enclosed = (inDetVolume) ?
"with encloded ID." :
"with encloded Calo.";
203 ATH_MSG_VERBOSE(
"Muon System Tracking Geometry is going to be built "<< enclosed );
205 if (inDetVolume && !caloVolume)
214#ifdef TRKDETDESCR_MEMUSAGE
215 m_memoryLogger.refresh(getpid());
216 ATH_MSG_INFO(
"[ memory usage ] After Muon TrackingGeometry building: " );
227 ATH_MSG_VERBOSE(
"Retrieved with following glue volumes: " << innerGlueVolumes );
238 if (!innerVolumeBounds)
ATH_MSG_WARNING(
"atlasTrackingGeometry() ... dynamic cast to innerVolumeBounds failed!" );
239 double innerVolumeOuterR = innerVolumeBounds ? innerVolumeBounds->
outerRadius() : 0;
240 double innerVolumeHalflengthZ = innerVolumeBounds ? innerVolumeBounds->
halflengthZ() : 0;
251 double innerCylinderSectorHalflengthZ = 0.5*(
m_worldDimension[2] - innerVolumeHalflengthZ);
252 auto innerCylinderSectorBounds =
253 std::make_shared<Trk::CylinderVolumeBounds>(0., innerVolumeOuterR, innerCylinderSectorHalflengthZ);
255 double innerCylinderSectorPositionZ = fabs(
m_worldDimension[2]-innerCylinderSectorHalflengthZ);
258 auto atlasInnerNegativeSectorTransf = std::make_unique<Amg::Transform3D>(
Amg::Translation3D(0.,0.,-innerCylinderSectorPositionZ));
260 std::move(atlasInnerNegativeSectorTransf),
261 std::make_shared<Trk::CylinderVolumeBounds>(*innerCylinderSectorBounds),
265 "AtlasInnerNegativeSector");
268 auto atlasInnerPositiveSectorTransf = std::make_unique<Amg::Transform3D>(
Amg::Translation3D(0.,0.,innerCylinderSectorPositionZ));
270 std::move(atlasInnerPositiveSectorTransf),
271 std::move(innerCylinderSectorBounds),
275 "AtlasInnerPositiveSector");
277 ATH_MSG_VERBOSE(
"Inner Negative/Positive Sectors built successfully." );
280 auto atlasInnerSectorVolumes = std::vector<Trk::TrackingVolume*>{atlasInnerNegativeSector,highestVolume,atlasInnerPositiveSector};
283 std::unique_ptr<Trk::BinnedArray<Trk::TrackingVolume>>
284 atlasInnerSectorVolumeArray =
290 auto innerSectorBounds =
291 std::make_shared<Trk::CylinderVolumeBounds>(0., innerVolumeOuterR,
m_worldDimension[2]);
294 std::move(innerSectorBounds),
297 std::move(atlasInnerSectorVolumeArray),
301 auto outerSectorBounds =
304 std::move(outerSectorBounds),
313 auto atlasVolumes = std::vector<Trk::TrackingVolume*>{atlasInnerSector, atlasOuterSector};
315 std::unique_ptr<Trk::BinnedArray<Trk::TrackingVolume>>
326 std::move(atlasBounds),
329 std::move(atlasVolumeArray),
345 auto volIter = innerCentralFaceVolumes.begin();
346 auto volIterEnd = innerCentralFaceVolumes.end();
349 std::vector<Trk::TrackingVolume*> atlasInnerOuterVolumes;
350 atlasInnerOuterVolumes.push_back(atlasInnerNegativeSector);
351 for (; volIter != volIterEnd; ++volIter) {
353 atlasInnerOuterVolumes.push_back(*volIter);
356 atlasInnerOuterVolumes.push_back(atlasInnerPositiveSector);
361 ATH_MSG_VERBOSE(
"Atlas Inner/Outer Sector glued successfully together." );
367 ATH_MSG_VERBOSE(
"Atlas TrackingGeometry built with following parameters : ");
373#ifdef TRKDETDESCR_MEMUSAGE
374 m_memoryLogger.refresh(getpid());
375 ATH_MSG_INFO(
"[ memory usage ] After Outer Sector TrackingGeometry building: " );
385 else ATH_MSG_WARNING(
"atlasTrackingGeometry() ... atlasTrackingGeometry = 0, could not call registerNavigationLevel and propagateMagneticFieldProperties" );
387#ifdef TRKDETDESCR_MEMUSAGE
388 m_memoryLogger.refresh(getpid());
389 ATH_MSG_INFO(
"[ memory usage ] End of TrackingGeometry building: " );