Skip to content
Snippets Groups Projects
Commit 1938bc4b authored by Walter Lampl's avatar Walter Lampl
Browse files

Merge branch 'leak.TileTrackingGeometry-20201221' into 'master'

TileTrackingGeometry: Fix leaks.

See merge request atlas/athena!39351
parents c6ff9460 2f938d9d
No related branches found
No related tags found
No related merge requests found
......@@ -11,7 +11,7 @@ atlas_add_component( TileTrackingGeometry
src/*.cxx
src/components/*.cxx
INCLUDE_DIRS ${GEOMODELCORE_INCLUDE_DIRS}
LINK_LIBRARIES ${GEOMODELCORE_LIBRARIES} AthenaBaseComps GaudiKernel TrkDetDescrInterfaces CaloDetDescrLib StoreGateLib TileDetDescr TrkDetDescrGeoModelCnv TrkDetDescrUtils TrkGeometry TrkSurfaces TrkVolumes CaloTrackingGeometryLib )
LINK_LIBRARIES ${GEOMODELCORE_LIBRARIES} AthenaBaseComps GaudiKernel TrkDetDescrInterfaces CaloDetDescrLib StoreGateLib TileDetDescr TrkDetDescrGeoModelCnv TrkDetDescrUtils TrkGeometry TrkSurfaces TrkVolumes CaloTrackingGeometryLib CxxUtils )
# Install files from the package:
atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} )
......@@ -12,11 +12,15 @@
// Gaudi
#include "AthenaBaseComps/AthAlgTool.h"
#include "GaudiKernel/ToolHandle.h"
#include "CxxUtils/checker_macros.h"
// Trk
#include "TrkDetDescrInterfaces/ITrackingVolumeBuilder.h"
#include "CaloTrackingGeometry/ICaloSurfaceBuilder.h"
#include "TrkGeometry/Material.h"
// STL
#include <vector>
#include <memory>
#include <mutex>
class TileDetDescrManager;
class CaloDetDescrManager;
......@@ -70,6 +74,8 @@ namespace Tile {
void printInfo(GeoPVConstLink pv) const;
void printChildren(GeoPVConstLink pv, int igen, Amg::Transform3D trIn) const;
void throwIntoGarbage (std::unique_ptr<Trk::Material> mat) const;
const TileDetDescrManager* m_tileMgr; //!< Calo DetDescrMgr
std::string m_tileMgrLocation; //!< Location of the CaloDetDescrMgr
......@@ -84,6 +90,8 @@ namespace Tile {
bool m_forceSymmetry; //!< forces volume symmetry between negative/positive part
mutable std::mutex m_garbageMutex;
mutable std::vector<std::unique_ptr<Trk::Material> > m_garbage ATLAS_THREAD_SAFE;
};
} // end of namespace
......
......@@ -185,8 +185,8 @@ const std::vector<const Trk::TrackingVolume*>* Tile::TileVolumeBuilder::tracking
std::vector<std::pair<const Trk::Surface*,const Trk::Surface*> > exitSurf = m_surfBuilder->exitSurfaces();
// averaged material properties
const Trk::Material* barrelProperties = new Trk::Material(22.7, 212., 45.8, 21.4, 0.0062);
const Trk::Material* extendedBarrelProperties = new Trk::Material(22.7, 210., 45.8, 21.4, 0.0062);
auto barrelProperties = std::make_unique<Trk::Material>(22.7, 212., 45.8, 21.4, 0.0062);
auto extendedBarrelProperties = std::make_unique<Trk::Material>(22.7, 210., 45.8, 21.4, 0.0062);
// material properties with layer encoding - to be defined later
const Trk::BinnedMaterial* barrelMaterialBinned = 0;
const Trk::BinnedMaterial* extendedMaterialBinned = 0;
......@@ -201,10 +201,10 @@ const std::vector<const Trk::TrackingVolume*>* Tile::TileVolumeBuilder::tracking
// layer material can be adjusted here
std::vector<Trk::IdentifiedMaterial> matTB;
int baseID = Trk::GeometrySignature(Trk::Calo)*1000 + 12;
matTB.emplace_back(barrelProperties,0);
matTB.emplace_back(barrelProperties,baseID);
matTB.emplace_back(barrelProperties,baseID+1);
matTB.emplace_back(barrelProperties,baseID+2);
matTB.emplace_back(barrelProperties.get(),0);
matTB.emplace_back(barrelProperties.get(),baseID);
matTB.emplace_back(barrelProperties.get(),baseID+1);
matTB.emplace_back(barrelProperties.get(),baseID+2);
// material index
std::vector<size_t> ltb{0,1,2,3};
......@@ -212,10 +212,10 @@ const std::vector<const Trk::TrackingVolume*>* Tile::TileVolumeBuilder::tracking
// layer material can be adjusted here
std::vector<Trk::IdentifiedMaterial> matETB;
baseID = Trk::GeometrySignature(Trk::Calo)*1000 + 18;
matETB.emplace_back(extendedBarrelProperties,0);
matETB.emplace_back(extendedBarrelProperties,baseID);
matETB.emplace_back(extendedBarrelProperties,baseID+1);
matETB.emplace_back(extendedBarrelProperties,baseID+2);
matETB.emplace_back(extendedBarrelProperties.get(),0);
matETB.emplace_back(extendedBarrelProperties.get(),baseID);
matETB.emplace_back(extendedBarrelProperties.get(),baseID+1);
matETB.emplace_back(extendedBarrelProperties.get(),baseID+2);
// layer material can be adjusted here
//Trk::MaterialProperties barrelFingerGapProperties = Trk::MaterialProperties(1., 130./0.35, 0.003*pow(0.35,3),30.);
......@@ -292,7 +292,7 @@ const std::vector<const Trk::TrackingVolume*>* Tile::TileVolumeBuilder::tracking
steps.push_back(depth);
Trk::BinUtility* rBU = new Trk::BinUtility(steps, Trk::open, Trk::binR);
barrelMaterialBinned = new Trk::BinnedMaterial(barrelProperties,rBU,ltb,matTB);
barrelMaterialBinned = new Trk::BinnedMaterial(barrelProperties.get(),rBU,ltb,matTB);
tileBarrel = new Trk::AlignableTrackingVolume(0,align,
tileBarrelBounds,
......@@ -356,7 +356,7 @@ const std::vector<const Trk::TrackingVolume*>* Tile::TileVolumeBuilder::tracking
steps.push_back(tileExtendedBounds->outerRadius());
Trk::BinUtility* eBU = new Trk::BinUtility(steps, Trk::open, Trk::binR);
extendedMaterialBinned = new Trk::BinnedMaterial(extendedBarrelProperties,eBU,ltb,matETB);
extendedMaterialBinned = new Trk::BinnedMaterial(extendedBarrelProperties.get(),eBU,ltb,matETB);
tileExtendedTrackingVolume = new Trk::AlignableTrackingVolume(new Amg::Transform3D(Amg::Translation3D(childPosition)),
align,
......@@ -381,7 +381,7 @@ const std::vector<const Trk::TrackingVolume*>* Tile::TileVolumeBuilder::tracking
steps.push_back(tileExtendedBounds->outerRadius());
Trk::BinUtility* eBU = new Trk::BinUtility(steps, Trk::open, Trk::binR);
extendedMaterialBinned = new Trk::BinnedMaterial(extendedBarrelProperties,eBU,ltb,matETB);
extendedMaterialBinned = new Trk::BinnedMaterial(extendedBarrelProperties.get(),eBU,ltb,matETB);
tileExtendedTrackingVolume = new Trk::AlignableTrackingVolume(new Amg::Transform3D(Amg::Translation3D(childPosition)),
align,
......@@ -441,9 +441,9 @@ const std::vector<const Trk::TrackingVolume*>* Tile::TileVolumeBuilder::tracking
std::vector<Trk::IdentifiedMaterial> matITC;
// layer material can be adjusted here
baseID = Trk::GeometrySignature(Trk::Calo)*1000;
matITC.emplace_back(barrelProperties,baseID+15);
matITC.emplace_back(barrelProperties,baseID+16);
matITC.emplace_back(barrelProperties,baseID+17);
matITC.emplace_back(barrelProperties.get(),baseID+15);
matITC.emplace_back(barrelProperties.get(),baseID+16);
matITC.emplace_back(barrelProperties.get(),baseID+17);
// ITCPlug1
double p1Z = 0.5*(plug1Z-plug1hZ+tileExtZ);
......@@ -462,8 +462,8 @@ const std::vector<const Trk::TrackingVolume*>* Tile::TileVolumeBuilder::tracking
std::vector<float> bpsteps{float(plug1R), float(tileBarrelBounds->outerRadius())};
Trk::BinUtility* rBU = new Trk::BinUtility(bpsteps, Trk::open, Trk::binR);
Trk::BinUtility* rBUc = rBU->clone();
const Trk::BinnedMaterial* plug1MatPos = new Trk::BinnedMaterial(barrelProperties,rBU,dummylay,matITC);
const Trk::BinnedMaterial* plug1MatNeg = new Trk::BinnedMaterial(barrelProperties,rBUc,dummylay,matITC);
const Trk::BinnedMaterial* plug1MatPos = new Trk::BinnedMaterial(barrelProperties.get(),rBU,dummylay,matITC);
const Trk::BinnedMaterial* plug1MatNeg = new Trk::BinnedMaterial(barrelProperties.get(),rBUc,dummylay,matITC);
Amg::Transform3D* align=0;
......@@ -497,8 +497,8 @@ const std::vector<const Trk::TrackingVolume*>* Tile::TileVolumeBuilder::tracking
std::vector<float> p2steps{float(plug2R), float(plug1R)};
Trk::BinUtility* p2BU = new Trk::BinUtility(p2steps, Trk::open, Trk::binR);
Trk::BinUtility* p2BUc = p2BU->clone();
const Trk::BinnedMaterial* plug2MatPos = new Trk::BinnedMaterial(barrelProperties,p2BU,p2lay,matITC);
const Trk::BinnedMaterial* plug2MatNeg = new Trk::BinnedMaterial(barrelProperties,p2BUc,p2lay,matITC);
const Trk::BinnedMaterial* plug2MatPos = new Trk::BinnedMaterial(barrelProperties.get(),p2BU,p2lay,matITC);
const Trk::BinnedMaterial* plug2MatNeg = new Trk::BinnedMaterial(barrelProperties.get(),p2BUc,p2lay,matITC);
Trk::AlignableTrackingVolume* itcPlug2Pos = new Trk::AlignableTrackingVolume(itcP2PosTransform, align,
itcPlug2Bounds,
......@@ -530,7 +530,7 @@ const std::vector<const Trk::TrackingVolume*>* Tile::TileVolumeBuilder::tracking
std::vector<size_t> glay(1,2);
std::vector<float> gsteps{float(gapi-gapBounds->halflengthZ()), float(gapi+gapBounds->halflengthZ())};
Trk::BinUtility* gp = new Trk::BinUtility(gsteps, Trk::open, Trk::binZ);
const Trk::BinnedMaterial* gpMat = new Trk::BinnedMaterial(barrelProperties,gp,glay,matITC);
const Trk::BinnedMaterial* gpMat = new Trk::BinnedMaterial(barrelProperties.get(),gp,glay,matITC);
Trk::AlignableTrackingVolume* gapPos = new Trk::AlignableTrackingVolume(gapPosTransform, align,
gapBounds,
......@@ -540,7 +540,7 @@ const std::vector<const Trk::TrackingVolume*>* Tile::TileVolumeBuilder::tracking
std::vector<float> nsteps{float(-gapi-gapBounds->halflengthZ()), float(-gapi+gapBounds->halflengthZ())};
Trk::BinUtility* gn = new Trk::BinUtility(nsteps, Trk::open, Trk::binZ);
const Trk::BinnedMaterial* gnMat = new Trk::BinnedMaterial(barrelProperties,gn,glay,matITC);
const Trk::BinnedMaterial* gnMat = new Trk::BinnedMaterial(barrelProperties.get(),gn,glay,matITC);
Trk::AlignableTrackingVolume* gapNeg = new Trk::AlignableTrackingVolume(gapNegTransform, align,
gapBounds->clone(),
......@@ -795,6 +795,9 @@ const std::vector<const Trk::TrackingVolume*>* Tile::TileVolumeBuilder::tracking
printCheckResult(msg(MSG::DEBUG), tileGirder);
} // end of detailed output
throwIntoGarbage (std::move (barrelProperties));
throwIntoGarbage (std::move (extendedBarrelProperties));
return tileTrackingVolumes;
}
......@@ -857,3 +860,10 @@ void Tile::TileVolumeBuilder::printChildren(const PVConstLink pv,int igen, Amg::
}
}
void Tile::TileVolumeBuilder::throwIntoGarbage (std::unique_ptr<Trk::Material> mat) const
{
std::scoped_lock lock (m_garbageMutex);
m_garbage.push_back (std::move (mat));
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment