Geometry/PyROOT/ TGeoVolume::Draw / problem in C++; program state has been reset

Hi,

I am trying to develop an interface for my python program and i face the problem below :

*** Break *** segmentation violation
 Generating stack trace...
 0x00007f8aa2fbc3c6 in TGeoPainter::PaintVolume(TGeoVolume*, char const*, TGeoMatrix*) + 0x456 from /usr/lib/root/libGeomPainter.so
 0x00007f8aa2fba5f3 in TGeoPainter::Paint(char const*) + 0xd3 from /usr/lib/root/libGeomPainter.so
 0x00007f8aa2fb7863 in TGeoPainter::DrawVolume(TGeoVolume*, char const*) + 0x143 from /usr/lib/root/libGeomPainter.so
 0x00007f8ab4105fe3 in FastCall(long, void*, void*, void*) + 0xa73 from /usr/lib/root/libPyROOT.so
 0x00007f8ab4109541 in PyROOT::TVoidExecutor::Execute(long, void*, PyROOT::TCallContext*) + 0x71 from /usr/lib/root/libPyROOT.so
 0x00007f8ab412cb76 in PyROOT::TMethodHolder::CallSafe(void*, long, PyROOT::TCallContext*) + 0x86 from /usr/lib/root/libPyROOT.so
 0x00007f8ab412c6ea in PyROOT::TMethodHolder::Execute(void*, long, PyROOT::TCallContext*) + 0x3a from /usr/lib/root/libPyROOT.so
 0x00007f8ab412aab2 in PyROOT::TMethodHolder::Call(PyROOT::ObjectProxy*&, _object*, _object*, PyROOT::TCallContext*) + 0x102 from /usr/lib/root/libPyROOT.so
 0x00007f8ab410fa10 in <unknown> from /usr/lib/root/libPyROOT.so
 0x00007f8ab517cbf4 in _PyObject_FastCallDict + 0x94 from /usr/lib/libpython3.6m.so.1.0
 0x00007f8ab51b995d in <unknown> from /usr/lib/libpython3.6m.so.1.0
 0x00007f8ab51572ea in _PyEval_EvalFrameDefault + 0x2fa from /usr/lib/libpython3.6m.so.1.0
 0x00007f8ab51b934a in <unknown> from /usr/lib/libpython3.6m.so.1.0
 0x00007f8ab51b98ee in <unknown> from /usr/lib/libpython3.6m.so.1.0
 0x00007f8ab51572ea in _PyEval_EvalFrameDefault + 0x2fa from /usr/lib/libpython3.6m.so.1.0
 0x00007f8ab51b9da7 in PyEval_EvalCodeEx + 0x2e7 from /usr/lib/libpython3.6m.so.1.0
 0x00007f8ab5156feb in PyEval_EvalCode + 0x1b from /usr/lib/libpython3.6m.so.1.0
 0x00007f8ab5228682 in <unknown> from /usr/lib/libpython3.6m.so.1.0
 0x00007f8ab522acdd in PyRun_FileExFlags + 0x9d from /usr/lib/libpython3.6m.so.1.0
 0x00007f8ab522aec7 in PyRun_SimpleFileExFlags + 0x1b7 from /usr/lib/libpython3.6m.so.1.0
 0x00007f8ab5220e3c in Py_Main + 0x67c from /usr/lib/libpython3.6m.so.1.0
 0x0000560bc9eabcb8 in main + 0x1e8 from /usr/bin/python3.6
 0x00007f8ab55bef6a in __libc_start_main + 0xea from /usr/lib/libc.so.6
 0x0000560bc9eabe2a in _start + 0x2a from /usr/bin/python3.6

 *** Break *** segmentation violation
 Generating stack trace...
 0x00007f8aa2fbc3c6 in TGeoPainter::PaintVolume(TGeoVolume*, char const*, TGeoMatrix*) + 0x456 from /usr/lib/root/libGeomPainter.so
 0x00007f8aa2fba5f3 in TGeoPainter::Paint(char const*) + 0xd3 from /usr/lib/root/libGeomPainter.so
 0x00007f8aa2a93e2c in TPad::PaintModified() + 0x23c from /usr/lib/root/libGpad.so
 0x00007f8aa2a4f226 in TCanvas::Update() + 0x126 from /usr/lib/root/libGpad.so
 0x00007f8a9baf8d48 in TRootCanvas::HandleContainerConfigure(Event_t*) + 0x38 from /usr/lib/root/libGui.so
 0x00007f8a9ba1cb34 in TGFrame::HandleEvent(Event_t*) + 0xf4 from /usr/lib/root/libGui.so
 0x00007f8a9b9c791a in TGClient::HandleEvent(Event_t*) + 0x4a from /usr/lib/root/libGui.so
 0x00007f8a9b9c7c46 in TGClient::ProcessOneEvent() + 0xc6 from /usr/lib/root/libGui.so
 0x00007f8a9b9c7cab in TGClient::HandleInput() + 0x1b from /usr/lib/root/libGui.so
 0x00007f8ab3564b38 in TUnixSystem::DispatchOneEvent(bool) + 0x58 from /usr/lib/root/libCore.so
 0x00007f8ab34a3d72 in TSystem::ProcessEvents() + 0x72 from /usr/lib/root/libCore.so
 0x00007f8ab5d78012 in <unknown function>
 0x00007f8ab4105fe3 in FastCall(long, void*, void*, void*) + 0xa73 from /usr/lib/root/libPyROOT.so
 0x00007f8ab410688d in Cppyy::CallB(long, void*, void*) + 0x2d from /usr/lib/root/libPyROOT.so
 0x00007f8ab4109de9 in PyROOT::TBoolExecutor::Execute(long, void*, PyROOT::TCallContext*) + 0x79 from /usr/lib/root/libPyROOT.so
 0x00007f8ab412cb76 in PyROOT::TMethodHolder::CallSafe(void*, long, PyROOT::TCallContext*) + 0x86 from /usr/lib/root/libPyROOT.so
 0x00007f8ab412c6ea in PyROOT::TMethodHolder::Execute(void*, long, PyROOT::TCallContext*) + 0x3a from /usr/lib/root/libPyROOT.so
 0x00007f8ab412aab2 in PyROOT::TMethodHolder::Call(PyROOT::ObjectProxy*&, _object*, _object*, PyROOT::TCallContext*) + 0x102 from /usr/lib/root/libPyROOT.so
 0x00007f8ab410fa10 in <unknown> from /usr/lib/root/libPyROOT.so
 0x00007f8ab517cbf4 in _PyObject_FastCallDict + 0x94 from /usr/lib/libpython3.6m.so.1.0
 0x00007f8ab51b995d in <unknown> from /usr/lib/libpython3.6m.so.1.0
 0x00007f8ab51572ea in _PyEval_EvalFrameDefault + 0x2fa from /usr/lib/libpython3.6m.so.1.0
 0x00007f8ab51b9da7 in PyEval_EvalCodeEx + 0x2e7 from /usr/lib/libpython3.6m.so.1.0
 0x00007f8ab51f0d96 in <unknown> from /usr/lib/libpython3.6m.so.1.0
 0x00007f8ab517dabb in PyObject_Call + 0x4b from /usr/lib/libpython3.6m.so.1.0
 0x00007f8ab5158891 in _PyEval_EvalFrameDefault + 0x18a1 from /usr/lib/libpython3.6m.so.1.0
 0x00007f8ab51b934a in <unknown> from /usr/lib/libpython3.6m.so.1.0
 0x00007f8ab51b98ee in <unknown> from /usr/lib/libpython3.6m.so.1.0
 0x00007f8ab51572ea in _PyEval_EvalFrameDefault + 0x2fa from /usr/lib/libpython3.6m.so.1.0
 0x00007f8ab51b934a in <unknown> from /usr/lib/libpython3.6m.so.1.0
 0x00007f8ab51b98ee in <unknown> from /usr/lib/libpython3.6m.so.1.0
 0x00007f8ab51572ea in _PyEval_EvalFrameDefault + 0x2fa from /usr/lib/libpython3.6m.so.1.0
 0x00007f8ab51b8dba in _PyFunction_FastCallDict + 0x11a from /usr/lib/libpython3.6m.so.1.0
 0x00007f8ab517cdce in _PyObject_FastCallDict + 0x26e from /usr/lib/libpython3.6m.so.1.0
 0x00007f8ab517d9d1 in _PyObject_Call_Prepend + 0x61 from /usr/lib/libpython3.6m.so.1.0
 0x00007f8ab517dabb in PyObject_Call + 0x4b from /usr/lib/libpython3.6m.so.1.0
 0x00007f8ab521f862 in <unknown> from /usr/lib/libpython3.6m.so.1.0
 0x00007f8ab595c08a in <unknown> from /usr/lib/libpthread.so.0
 0x00007f8ab56941bf in clone at :? from /usr/lib/libc.so.6
Traceback (most recent call last):
  File "/home/johann/home-these/SVN-LPSC/Geometry/src/msfr/jm/geometry/runtest/PyrootToto.py", line 33, in <module>
    pygeom.draw(world)
  File "/home/johann/home-these/SVN-LPSC/Geometry/src/msfr/jm/geometry/runtest/PyrootToto.py", line 26, in draw
    world.Draw()
SystemError: void TGeoVolume::Draw(const char* option = "") =>
    problem in C++; program state has been reset

When the canvas is created i got this kind of message :

Info in <TGeoManager::TGeoManager>: Geometry geoManager, Geometry created
Info in <TGeoManager::SetTopVolume>: Top volume is toto. Master volume is toto
Info in <TGeoNavigator::BuildCache>: --- Maximum geometry depth set to 100
Info in <TGeoManager::CheckGeometry>: Fixing runtime shapes...
Info in <TGeoManager::CheckGeometry>: ...Nothing to fix
TGeoManager::CheckGeometry:0: RuntimeWarning: Volume "toto" has no medium: assigned dummy medium and material
Info in <TGeoManager::CloseGeometry>: Counting nodes...
Info in <TGeoManager::Voxelize>: Voxelizing...
Error in <TGeoVolume::SortNodes>: Bounding box not valid
Error in <TGeoVolume::Voxelize>: Bounding box not valid
Error in <TGeoVolume::FindOverlaps>: Bounding box not valid
Info in <TGeoManager::CloseGeometry>: Building cache...
Info in <TGeoManager::CountLevels>: max level = 1, max placements = 0
Info in <TGeoManager::CloseGeometry>: 1 nodes/ 1 volume UID's in Geometry
Info in <TGeoManager::CloseGeometry>: ----------------modeler ready----------------
Info in <TGeoManager::SetVisLevel>: Automatic visible depth disabled
Info in <TCanvas::MakeDefCanvas>:  created default TCanvas with name c1

It seems there is a problem with bounding box.

I put a minimal working example of my program :

import time
import ROOT 
class PyrootGeometry():

    def __init__(self):
        self.geoManager = ROOT.TGeoManager("geoManager","Geometry")

    def createWorld(self):
        cylinderName = "toto"
        cylinderHalfLength = 2.5
        cylinderRadius = 2.0
        worldShape = ROOT.TGeoTube(0.,cylinderRadius, cylinderHalfLength)
        world = ROOT.TGeoVolume(cylinderName, worldShape)
        return world

    def configureGeoManager(self,world):
        self.geoManager.SetTopVolume(world)
        self.geoManager.CloseGeometry()
        world.SetLineColor(8)
        self.geoManager.SetVisLevel(3)
        self.geoManager.SetVisOption(0)
        self.geoManager.SetTopVisible()

    def draw(self,world):
        world.Draw()
        time.sleep(1000)

if __name__ =='__main__':
    pygeom = PyrootGeometry()
    world = pygeom.createWorld()
    pygeom.configureGeoManager(world)
    pygeom.draw(world)

Can you help me figure out where i did a mistake ?
Thanks
Regards
Johann

Hi Johann,
I can reproduce the problem but I have no clue yet, will let you know…

Best, Andrei

Hi Andrei,
Thank you for your help
Regards
Johann

Hi Johann,

we found a solution for your problem, i.e. the garbage collector of Python deleting your tube.

import time
import ROOT
class PyrootGeometry():
    def __init__(self):
        self.geoManager = ROOT.TGeoManager("geoManager","Geometry")
        self.tube = None

    def createWorld(self):
        cylinderName = "toto"
        cylinderHalfLength = 2.5
        cylinderRadius = 2.0
        self.tube = ROOT.TGeoTube(0.,cylinderRadius, cylinderHalfLength)
        world = ROOT.TGeoVolume(cylinderName, self.tube)
        return world

    def configureGeoManager(self,world):
        self.geoManager.SetTopVolume(world)
        self.geoManager.CloseGeometry()
        world.SetLineColor(8)
        self.geoManager.SetVisLevel(3)
        self.geoManager.SetVisOption(0)
        self.geoManager.SetTopVisible()

    def draw(self,world):
        world.Draw()
        time.sleep(1000)


if __name__ =='__main__':
    pygeom = PyrootGeometry()
    world = pygeom.createWorld()
    pygeom.configureGeoManager(world)
    pygeom.draw(world)

Cheers,
D

1 Like

Hi,
Thank you very much and sorry for this silly error!
Cheers,
Johann

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.