Hi 0ndrej (with a "zero", interesting), > > TClonesArray *fParticles; // Array with particles > > TIter *fpart_iter; //! caching the current ptr to The important part is the "!" after the comment, which tells root not to save this member. The other puzzle: if you create a TFile beforehand, root will use that to cache / auto-save whatever tree you're dealing with - i.e. it will try to write that tree to file, and it will fail because one of your classes has a TIter member. Adding //! will prevent root from taking this member into account when writing (you mark that member as non-persistent), and now you can place your file creation wherever you want. Axel. > -----Original Message----- > From: owner-roottalk@pcroot.cern.ch > [mailto:owner-roottalk@pcroot.cern.ch]On Behalf Of 0ndrej Chvala > Sent: Wednesday, October 15, 2003 8:01 PM > To: Philippe Canal; roottalk@pcroot.cern.ch > Subject: Re: [ROOT] cannot create object of class TIter > > > Hi Philippe, > > Thanks for explanation, I just found that if I do not create the TFile > beforehand, it sudenly works, which puzzled me. > However I do not understand how should I modify the class to allow > saving the data into a TFile - your code looks same as the original. > Should I write my own streamer without the fpart_iter? > > thanks for help, best regards > 0ndrej > > Philippe Canal wrote: > > >Hi Ondrej, > > > >A TIter object can not be saved onto a file (hence the system > you not even > >try to look it up). > >As a workaround (and a clarification of your code anyway, just > modify your > >class as follow: > > > > TClonesArray *fParticles; // Array with particles > > TIter *fpart_iter; //! caching the current ptr to > >iterator > > > >-----Original Message----- > >From: owner-roottalk@pcroot.cern.ch [mailto:owner-roottalk@pcroot.cern.ch]On >Behalf Of 0ndrej Chvala >Sent: Wednesday, October 15, 2003 7:05 AM >To: roottalk@pcroot.cern.ch >Subject: [ROOT] cannot create object of class TIter > > >Dear rooters, > >I have 2 classes, one describes an event and the other a track in that >event. The event contains a TClonesArray with the tracks and the iterrator: > > TClonesArray *fParticles; // Array with particles > TIter *fpart_iter; // ptr to iterator > >When an new event is created, the TClonesArray is created: > > fParticles = new TClonesArray("TBigDSWriteParticle",1000); > fpart_iter = new TIter(fParticles); > >The classes can be compiled, loaded into root runtime, but when I try to >make a branch, it complaints: >root [0] .L /cern/root/lib/libEG.so >root [1] .L /cern/root/lib/libPhysics.so >root [2] .L ../lib/libmicro.so >root [3] TFile *tfile= new TFile("/tmp/dsttest.root","RECREATE"); >root [4] TTree *tft = new TTree("tft",""); >root [5] tfile->SetCompressionLevel(2); >root [6] TBigDSWriteEvent *myevent=new TBigDSWriteEvent(); >root [7] TBigDSWriteParticle *mypart; >root [8] >tft->Branch("TBigDSWriteEvent","TBigDSWriteEvent",&myevent,5000000,1); >Error in <TClass::New>: cannot create object of class TIter > >The source codes are atached. > >Any help is greatly welcomed, I already tried to use other container >objects (TList, TObjArray), asked whom I can around but I'm still stucked. > >Thank you >0ndrej Chvala, NA49 << File: TBigDSWriteEvent.h >> << File: >TBigDSWriteParticle.h >> << File: TBigDSWriteEvent.cxx >> << File: >TBigDSWriteParticle.cxx >> > > >
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:16 MET