Re: TTree with TClonesArray

William J. Deninger (deninger@uiuc.edu)
Sun, 4 Jan 1998 13:39:58 -0600


Hi again,

These classes were in fact compiled. And Test.C was checked both on CInt and
compiled. The outcome is the same. When one uses the class TBranch*
TTree::Branch(Text_t *const name, Text_t* classname, void* addobj, Int_t
bufsize = 32000, Int_t splitlevel = 1)
with the last parameter (the Int_t splitlevel ) = 1, and then TTree::Fill()
is called, a segment violation occurs and ROOT terminates. When splitlevel
= 0, my class is correctly serialized and ROOT doesn't crash. Why might my
simple class example below do that?

If this isn't occurring on anyone's platform, please let me know. Does
anyone have a makefile or debug library so that I can track these things
down myself? I'm running WinNT w/sp3.0 and MSVC v5.0.

William J Deninger
deninger@uiuc.edu

-----Original Message-----
From: Pasha Murat <murat@cdfsga.fnal.gov>
To: William J. Deninger <deninger@uiuc.edu>
Cc: roottalk@hpsalo.CERN.CH <roottalk@hpsalo.CERN.CH>
Date: Sunday, January 04, 1998 11:50 AM
Subject: TTree with TClonesArray

>
> As it has already been discussed a bunch of times on this mailing list
>it is not possible to the moment to derive *interpreted* classes from
TObject.
>It is related to the difficulties of "on-the-fly" construction of TObject
>virtual table. There are more details on roottalk digest.
>As this issue arises again and again (and undoubtedly is quite important)
it
>might be useful to add the discussion of it to ROOT manuals, if it is not
there
>yet.
> Regards, Pasha.
>---------------------------------------------------------------------------
-----
>William J. Deninger writes:
> > Hello,
> >
> > I'm having troubles with TTree::Fill() crashing ROOT with the following
> > example. I've noticed that if the split option in tree->Branch is set
to 0,
> > things do run. But I'm partial to having my tree automatically branched
if
> > possible. I'm I doing something wrong here?
> >
> > Thanks again for all you help.
> >
> > William J Deninger
> > deninger@uiuc.edu
> > //_______________________
> > // Test.C
> > {
> > gROOT->Reset("a");
> > TFile *hfile = new TFile("d:/data/test.root","RECREATE","G2073_073");
> > hfile->SetCompressionLevel(1);
> >
>> tree = new TTree("tree","test tree"); <--- forgot to show this line last
time....
> > Simple *raw;
> > tree->Branch("test","Simple",&raw,10000,1);
> > raw = new Simple;
> > tree->Fill();
> > hfile->Write();
> > }
> >
> > //_______________________
> > // Simple.h
> > #include "TObject.h"
> > #include "MPXPAIR.h"
> > #include "TClonesArray.h"
> > class Simple : public TObject
> > {
> > public:
> > Simple();
> > virtual ~Simple();
> > TClonesArray test;
> > ClassDef(Simple,1)
> > };
> > //_______________________
> > // Simple.cpp
> > #include "Simple.h"
> > ClassImp(Simple)
> > Simple::Simple() : test("MPXPAIR", 10)
> >

> > }
> > Simple::~Simple()
> > {
> > }
> >
> >
>