Hello,
I am reading a TTree in pyroot (arborescence attached). I can access all class members which return a constant without problem but I am having issues while accessing a class member that returns a cpp std:: vector. It gives me a segmentation fault (see below).
Here is a code snippet:
rootfile=ROOT.TFile(filename)
mc_particle= rootfile.Get('MCParticle')
pixel_charge= rootfile.Get('PixelCharge')
prop_charge= rootfile.Get('PropagatedCharge')
pixel_hit= rootfile.Get('PixelHit')
mc_particle.Print()
for iev in range(0, pixel_hit.GetEntries()):
pixel_hit.GetEntry(iev)
pixel_charge.GetEntry(iev)
mc_particle.GetEntry(iev)
pixel_charge_branch= pixel_charge.detector
pixel_hit_branch= pixel_hit.detector
mc_particle_branch= mc_particle.detector
for mc_part in mc_particle_branch:
print "part:", mc_part.getParticleID()
for pix_charge in pixel_charge_branch:
print "charge:", pix_charge.getCharge()
for pix_hit in pixel_hit_branch:
print "hit",pix_hit.getSignal() #this works and returns what is expected
print "local center:",pix_hit.getPixel().getLocalCenter().x() # this also
print type(pix_hit.getMCParticles()) # this seg faults (output below)
#also tried e.g pix_hit.getMCParticles().getParticleID() # this seg faults (output below)
and part of the output is below. As you can see hit and local center are printed out without problem but I get a crash when accessing getMCParticles which returns a std::vector. This getMCParticles method is understood and exists (if I try to access e.g pix_hit.getMCSometthing_not_exsiting it simply gives me an error).
Thanks a lot,
Sebastien
******************************************************************************
*Tree :MCParticle: Tree of MCParticle *
*Entries : 5000 : Total = 2130296 bytes File Size = 363848 *
* : : Tree compression factor = 5.87 *
******************************************************************************
*Br 0 :detector : vector<allpix::MCParticle*> *
*Entries : 5000 : Total Size= 2129857 bytes File Size = 362730 *
*Baskets : 68 : Basket Size= 32000 bytes Compression= 5.87 *
*............................................................................*
<class 'ROOT.TTree'>
5000
5000
5000
part: 22
part: 11
charge: 1066
hit 1066.0
local center: 0.0
*** Break *** segmentation violation
[/usr/lib/system/libsystem_platform.dylib] _sigtramp (no debug info)
[<unknown binary>] (no debug info)
[/Applications/root_v6.10.08/lib/libPyROOT.so] Cppyy::CallO(long, void*, void*, long) (no debug info)
[/Applications/root_v6.10.08/lib/libPyROOT.so] PyROOT::TCppObjectByValueExecutor::Execute(long, void*, PyROOT::TCallContext*) (no debug info)
[/Applications/root_v6.10.08/lib/libPyROOT.so] PyROOT::TMethodHolder::CallFast(void*, long, PyROOT::TCallContext*) (no debug info)
[/Applications/root_v6.10.08/lib/libPyROOT.so] PyROOT::TMethodHolder::CallSafe(void*, long, PyROOT::TCallContext*) (no debug info)
[/Applications/root_v6.10.08/lib/libPyROOT.so] PyROOT::TMethodHolder::Execute(void*, long, PyROOT::TCallContext*) (no debug info)
[/Applications/root_v6.10.08/lib/libPyROOT.so] PyROOT::TMethodHolder::Call(PyROOT::ObjectProxy*&, _object*, _object*, PyROOT::TCallContext*) (no debug info)
[/Applications/root_v6.10.08/lib/libPyROOT.so] PyROOT::(anonymous namespace)::mp_call(PyROOT::MethodProxy*, _object*, _object*) (no debug info)
[/System/Library/Frameworks/Python.framework/Versions/2.7/Python] PyObject_Call (no debug info)
[/System/Library/Frameworks/Python.framework/Versions/2.7/Python] PyEval_EvalFrameEx (no debug info)
[/System/Library/Frameworks/Python.framework/Versions/2.7/Python] PyEval_EvalCodeEx (no debug info)
[/System/Library/Frameworks/Python.framework/Versions/2.7/Python] PyEval_EvalCode (no debug info)
[/System/Library/Frameworks/Python.framework/Versions/2.7/Python] (no debug info)
[/System/Library/Frameworks/Python.framework/Versions/2.7/Python] PyRun_FileExFlags (no debug info)
[/System/Library/Frameworks/Python.framework/Versions/2.7/Python] PyRun_SimpleFileExFlags (no debug info)
[/System/Library/Frameworks/Python.framework/Versions/2.7/Python] Py_Main (no debug info)
[/usr/lib/system/libdyld.dylib] start (no debug info)
[<unknown binary>] (no debug info)
Traceback (most recent call last):
File "GetAPDataFile.py", line 89, in <module>
print type(ROOT.std(pix_hit.getMCParticles()))
SystemError: vector<const allpix::MCParticle*> allpix::PixelHit::getMCParticles() =>
problem in C++; program state has been reset
ROOT Version: v6-10-08
_Platform:_MAC OS 10.13
Compiler: clang