Dear ROOTers,
I’m developing a reconstruction code with a ROOT user defined event class.
I have the need to nest TClonesArray in this way:
[code]class MyEvent : public TObject {
public:
[…]
ClassDef (MyEvent, 1)
private:
MySubEvent se;
[…] // other similar subevent classes
};
class MySubEvent : public TObject {
public:
MySubEvent() { fragments = new TClonesArray(“MyFragment”); }
[…]
ClassDef (MySubEvent, 1)
private:
TClonesArray *fragments;
[…]
};
class MyFragment : public TObject {
public:
MyFragment() { hits = new TClonesArray(“MyHit”); }
[…]
ClassDef (MyFragment, 1)
private:
TClonesArray *hits;
[…] // more simple variables
};
class MyHit : public TObject {
[…] // only simple stuff here
ClassDef (MyHit, 1)
};[/code]
My problem is that when I add the innermost TClonesArray* I get a segmentation violation at the TTree::Branch().
This is my gdb output:
code where
#0 0x40c995e5 in TBranchElement::TBranchElement(char const*, TStreamerInfo*, int, char*, int, int, int) () from /cern/root/lib/libTree.so
#1 0x40c9e533 in TBranchElement::Unroll(char const*, TClass*, TClass*, int, int, int) () from /cern/root/lib/libTree.so
#2 0x40c9988c in TBranchElement::TBranchElement(char const*, TStreamerInfo*, int, char*, int, int, int) () from /cern/root/lib/libTree.so
#3 0x40c9e533 in TBranchElement::Unroll(char const*, TClass*, TClass*, int, int, int) () from /cern/root/lib/libTree.so
#4 0x40c99936 in TBranchElement::TBranchElement(char const*, TStreamerInfo*, int, char*, int, int, int) () from /cern/root/lib/libTree.so
#5 0x40cb4403 in TTree::Bronch(char const*, char const*, void*, int, int) ()
from /cern/root/lib/libTree.so
#6 0x40cb3275 in TTree::Branch(char const*, char const*, void*, int, int) ()
from /cern/root/lib/libTree.so
#7 0x080d2e99 in bx_event_writer::begin() (this=0x890a030) at bx_writer.cc:73
#8 0x080b82df in bx_base_module::framework_begin(bx_base_module::module_role)
(this=0x890a030, role=writer) at bx_base_module.cc:60
#9 0x080b25ae in bx_base_module::begin_operation::operator()(bx_base_module*)
(this=0xbffff1ec, t=0x890a030) at bx_base_module.hh:107
#10 0x080b2324 in bx_base_module::begin_operation std::for_each<__gnu_cxx::__normal_iterator<bx_base_module**, std::vector<bx_base_module*, std::allocator<bx_base_module*> > >, bx_base_module::begin_operation>(__gnu_cxx::__normal_iterator<bx_base_module**, std::vector<bx_base_module*, std::allocator<bx_base_module*> > >, __gnu_cxx::__normal_iterator<bx_base_module**, std::vector<bx_base_module*, std::allocator<bx_base_module*> > >, bx_base_module::begin_operation) (__first=
{<iteratorstd::random_access_iterator_tag,bx_base_module*,int,bx_base_module**,bx_base_module*&> = {}, _M_current = 0x8903e00}, __last=
{<iteratorstd::random_access_iterator_tag,bx_base_module*,int,bx_base_module**,bx_base_module*&> = {}, _M_current = 0x8903e04}, __f=
{i_role = writer}) at stl_algo.h:157
#11 0x080b1d25 in bx_reco_framework::run() (this=0xbffff3b0)
at bx_reco_framework.cc:48
#12 0x080b188d in main (argc=1, argv=0xbffff414) at main.cc:16
#13 0x41297c57 in __libc_start_main () from /lib/i686/libc.so.6
[/code]
Is it a known limitation or am I doing something wrong?
Thanks a lot, bye
Davide