From 231fcbb83f049c059d493f228c88722839a46c82 Mon Sep 17 00:00:00 2001 From: Andre Sailer <andre.philippe.sailer@cern.ch> Date: Thu, 9 Feb 2017 18:15:03 +0100 Subject: [PATCH] Add static accessor for volumeManager and replace calling of DD4hepVolumeManager with it --- DDCore/include/DD4hep/VolumeManager.h | 3 +++ DDCore/src/VolumeManager.cpp | 7 +++++++ DDG4/scripts/dumpDDG4.C | 2 +- DDRec/src/IDDecoder.cpp | 7 +------ DDRec/src/SurfaceHelper.cpp | 9 +-------- 5 files changed, 13 insertions(+), 15 deletions(-) diff --git a/DDCore/include/DD4hep/VolumeManager.h b/DDCore/include/DD4hep/VolumeManager.h index 25be5c340..d2d39c8e7 100644 --- a/DDCore/include/DD4hep/VolumeManager.h +++ b/DDCore/include/DD4hep/VolumeManager.h @@ -123,6 +123,9 @@ namespace DD4hep { /// Initializing constructor for subdetector volume managers. VolumeManager(DetElement subdetector, Readout ro); + /// static accessor calling DD4hepVolumeManagerPlugin if necessary + static VolumeManager getVolumeManager(LCDD& lcdd); + /// Assignment operator VolumeManager& operator=(const VolumeManager& m) { if ( this != &m ) m_element = m.m_element; diff --git a/DDCore/src/VolumeManager.cpp b/DDCore/src/VolumeManager.cpp index c2dcb5da3..36c70d1cf 100644 --- a/DDCore/src/VolumeManager.cpp +++ b/DDCore/src/VolumeManager.cpp @@ -470,6 +470,13 @@ VolumeManager::VolumeManager(DetElement sub_detector, Readout ro) { assign(obj_ptr, sub_detector.name(), "VolumeManager"); } +VolumeManager VolumeManager::getVolumeManager(LCDD& lcdd) { + if( not lcdd.volumeManager().isValid() ) { + lcdd.apply("DD4hepVolumeManager", 0, 0); + } + return lcdd.volumeManager(); +} + /// Add a new Volume manager section according to a new subdetector VolumeManager VolumeManager::addSubdetector(DetElement det, Readout ro) { if (isValid()) { diff --git a/DDG4/scripts/dumpDDG4.C b/DDG4/scripts/dumpDDG4.C index b76e3e103..f681542a6 100644 --- a/DDG4/scripts/dumpDDG4.C +++ b/DDG4/scripts/dumpDDG4.C @@ -216,7 +216,7 @@ int dumpddg4_load_geometry(const char* fname) { gSystem->Load("libDDG4Plugins"); LCDD& lcdd = LCDD::getInstance(); lcdd.fromXML(fname); - lcdd.apply("DD4hepVolumeManager",0,(char**)0); + VolumeManager::getVolumeManager(); } return 1; } diff --git a/DDRec/src/IDDecoder.cpp b/DDRec/src/IDDecoder.cpp index 07165a4b3..93c07fd5e 100644 --- a/DDRec/src/IDDecoder.cpp +++ b/DDRec/src/IDDecoder.cpp @@ -32,12 +32,7 @@ IDDecoder& IDDecoder::getInstance() { /// Default constructor IDDecoder::IDDecoder() { LCDD& lcdd = LCDD::getInstance(); - _volumeManager = lcdd.volumeManager(); - if (not _volumeManager.isValid()) { - lcdd.apply("DD4hepVolumeManager",0,0); - _volumeManager = lcdd.volumeManager(); - } - _tgeoMgr = lcdd.world().volume()->GetGeoManager(); + _volumeManager = VolumeManager::getVolumeManager(lcdd); } /** diff --git a/DDRec/src/SurfaceHelper.cpp b/DDRec/src/SurfaceHelper.cpp index e172813d6..a838003de 100644 --- a/DDRec/src/SurfaceHelper.cpp +++ b/DDRec/src/SurfaceHelper.cpp @@ -27,15 +27,8 @@ namespace DD4hep { // have to populate the volume manager once in order to have // the volumeIDs attached to the DetElements LCDD& lcdd = LCDD::getInstance(); - VolumeManager volMgr = lcdd.volumeManager(); - if(not volMgr.isValid()) { - // VolumeManager initialised by DD4hepVolumeManager plugin - lcdd.apply("DD4hepVolumeManager",0,0); - volMgr = lcdd.volumeManager(); - } - + VolumeManager volMgr = VolumeManager::getVolumeManager(lcdd); - //------------------ breadth first tree traversal --------- std::list< DetElement > dets ; std::list< DetElement > daugs ; -- GitLab