Hi Pierpaolo, Currently, I do not support an array of pointers to TClonesArray when splitting the branches (this could be added). I propose the following turn around. - Declare your member pBLtrack[36 to be non persistent with: TClonesArray *pBLtrack[36]; //! 36 identical clonesarray - Create your top level branch as you do now. - Make a loop on your 36 elements, creating a branch for each, giving the address of pBLtrack[i] (may be you need a member function in Event returning the address. Rene Brun Pierpaolo Righini wrote: > > Hi Rene, > > many thanks and sorry to disturb you again but unfortunately i suspetc I'm > forced to put the array (or > TList) in the top class, I mean I cannot use the constructor > T.Branch(list) because my tree should contain an event class (similarly to > the example in $ROOTSYS/test/Event.*) so that I have to use something like > TBranch *branch = tree->Branch("event", "Event", &event,bsize, split); > and then it is inside the Event.h that I tried to put the array of > clonesarray: > > class Event : public TObject{ > Int_t nmu; > Int_t nTTtrk; > Int_t nCStrk; > Int_t nSStrk; > Int_t nBLtrk[36]; > EventHeader evthdr; > TClonesArray *pTTtrack; // three different clonesarray > TClonesArray *pCStrack; // of tracks (use different > TClonesArray *pSStrack; // classes) > TClonesArray *pBLtrack[36]; // 36 identical clonesarray (same > // class) > > static TClonesArray *gTTtrack; > static TClonesArray *gCStrack; > static TClonesArray *gSStrack; > static TClonesArray *gBLtrack[36]; > ...................................... > > while in Event.cpp: > > TClonesArray *Event::gTTtrack = 0; > TClonesArray *Event::gCStrack = 0; > TClonesArray *Event::gSStrack = 0; > TClonesArray *Event::gBLtrack[36] = {0,0,0,......,0; > Event::Event(){ > ..................................... > for (Int_t i=0;i<36;i++) { > if (!gBLtrack[i]) gBLtrack[i] = new TClonesArray("BLtrack"); > pBLtrack[i]=gBLtrack[i]; > nBLtrk[i]=0; > } > ...... > } > void Event::AddBLtrack(i,.....){ > TClonesArray &bl_tr=*pBLtrack[i]; > new(bl_tr[nBLtrk[i]++]) BLtrack(.......) > } > .......................... > void Event::Clear(Option_t *option){ > for (Int_t i=0;i<36;i++) { > pBLtrack[i]->Clear(option); > nBLtrk[i]=0; > } > } > .......................... > void Event::Reset(Option_t *option){ > for (Int_t i=0;i<36;i++) { > delete gBLtrack[i]; gBLtrack[i] = 0; > } > > } > > In such a way the program runs and ends normally but then the > clonesarray pBLtrack[i] results to be empty. I was not able to use the > TList in these conditions as well. > > On Mon, 1 Oct 2001, Rene Brun wrote: > > > Hi Pierpaolo, > > > > I suggest the following: > > > > { > > TList *list = new TList(); > > for (Int_t i=0;i<36;i++) { > > TClonesArray *carray = new TClonesArray("myclass",...); > > char name[32]; > > sprintf(name,"ftracks%d",i); > > carray->SetName(name); > > list->Add(carray); > > } > > > > TTree T("T",".."); > > T.Branch(list); > > T.Print(); > > } > > > > This special Branch constructor takes a dynamic TList as input. > > The TList may contain TClonesArray or any other object. > > It is better than hardwired pointers or arrays in the top level class. > > > > Rene Brun > > > > Pierpaolo Righini wrote: > > > > > > Hello, > > > I have to write a root tree with events containing, each one, many tracks > > > that are identical for what concerns the informations contained (i.e. the > > > class definition is the same for all of them) but that should be tagged > > > differently because they came from different part of the apparatus. So > > > I would like to see them splitted using for example the TTree viewer. > > > > > > I tried to do an array of TClonesArray with > > > > > > TClonesArray *ftrack[36]; > > > > > > instead of > > > > > > TClonesArray *f1track; > > > TClonesArray *f2track; > > > ....................... > > > TClonesArray *f36track; > > > > > > in my Event class, but it seems not to work properly. Is there the chance > > > to do that? Many thanks in any cases. > > > > > > Pierpaolo > > > > Pierpaolo
This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:51:02 MET