Hi Axel and other root masters :)
thanks for explanation, now I understant.
It might be a good idea to add this info (interrators cannot be saved
into TFile and here's how to deal with it) into Chapter14 of the
UserGuide. I found some notice about "//!" in the chaper about IO (page
174, UG ver 3.05), however even from that I would not decode that it
concerns iterrators and how....
thanks for the great root (the more I know it the more I appreciate the
developers...) and excellent support
cheers
0ndrej
>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