Re: [ROOT] TClonesArray of Event objects

From: Dr. John Krane (jkrane@fnal.gov)
Date: Wed Jul 02 2003 - 15:05:04 MEST


Hi all,

I too am having terrible difficulty that I suspect is coming from 
TClonesArray.  (I didn't compile ROOT in debug mode, so my Totalview 
cannot show me what happens when I tree->Fill.)  I have .Dump() output 
for the stuff going into the Branch and all looks as I expect.

My problems occured after my initial tests with TClonesArray were 
successful.  I don't remember changing my branch objects after my test, 
I just started making <vector>s of branches and objects, all of which 
look like they are working fine.

Perhaps Tommaso and I are falling into the same traps, but I don't think 
our code is doing things the same way.

    - John

Tommaso Chiarusi wrote:

>On Tue, 1 Jul 2003, Philippe Canal wrote:
>
>  
>
>>>I think that the problem resides in the destruction of the Event objects
>>>at the end of the loop. But I don't know why,  since when I fill the
>>>TClonesArray of Event objects, it should copy the objects..., shouldn't
>>>it?
>>>      
>>>
>>yes except that in $ROOTSYS/test/Event.h the copy constructor has not been
>>implemented and the default one (provided by the compiler) is wrong due to
>>the usage of pointers.  Worse the design of that class assume (but do not
>>enforce) that it is basically a singleton.
>>So unless you change those quirks, you will have some trouble keeping
>>several 'Event' around.
>>
>>Cheers,
>>Philippe
>>
>>    
>>
>
>Hi,
>I indeed  provided a Copy constructor for the Event class: 
>
>//---------
>
>Event::Event(const Event& event)
>{
>   // Create  an Event object by copying the tracks from a second event.
>   // When the constructor is invoked for the first time, the class static
>   // variable fgTracks is 0 and the TClonesArray fgTracks is created.
>   //	
>
>
>   if (!fgTracks) fgTracks = new TClonesArray("Track", 1000);
>   fTracks = fgTracks;
>   fNtrack = 0;
>   fH      = 0;
>   Int_t i0,i1;
>   for (i0 = 0; i0 < 4; i0++) {
>	  for (i1 = 0; i1 < 4; i1++) {
>	     fMatrix[i0][i1] = 0.0;
>	  }
>   }
>   for (i0 = 0; i0 <10; i0++) fMeasures[i0] = 0;
>   fClosestDistance = 0;
>   fEventName = 0;
>   fWebHistogram.SetAction(this);
>
>
>  int ntra = event.GetNtrack();
>  for(int nt = 0;nt<ntra;nt++)
>    {
>	Track *t = (Track*)event.GetTracks()->UncheckedAt(nt);
>	AddTrack(*t);
>    }
>
>
>}
>
>//---------
>But the result (segmentation violation) remains the same....
>I also tried to use an STL vector instead of the TClonesArray but the 
>segmentation keeps on....
>
>Any idea?
>Thank you very much,
>Tommaso
>
>  
>



This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:13 MET