diff --git a/DDCore/include/DD4hep/VolumeManager.h b/DDCore/include/DD4hep/VolumeManager.h index 25be5c3400a56d0575a146c79393960a1bed7aba..d2d39c8e7ba1a00132c07ce77fab5e412cc99abf 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 c2dcb5da32ca5d25f0bcf66f31f249eabd0b6073..36c70d1cf9ffa55b648d20bd54d31c78749fc52a 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 b76e3e1032fd91a6ac31405242a18b4bff1037cd..f681542a6f7eee17f22a12778fa9e21b04daaf48 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 07165a4b3ba2a7abf58de6531bf76e777444979f..93c07fd5ee59590bb9f8256182b028a4165250ae 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 e172813d68874cb62c6a338e478d9cdd21746e3a..a838003de3d8a871fff8e8d1a9149be6f0eb4895 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 ;