Re: [ROOT] Question about TClonesArray and copy

From: Rene Brun (Rene.Brun@cern.ch)
Date: Mon Sep 15 2003 - 10:03:02 MEST


Hi Thomas,

You must make an implicit loop on the objects in the array. You should not
assume
that the objects are consecutive.
Note that, like for any Root collection, you can do:
  TClonesArray *a1; //your source array
  TClonesArray *a2 = (TClonesArray*)a1->Clone();

Rene Brun

Thomas Bretz wrote:
> 
> Dear all,
> 
> I want to copy a TClonesArray from array1 to array2:
> 
> class MyClass:public TObject { public: Double_t d; };
> 
> TClonesArray a1("MyClass", 20);
> TClonesArray a2("MyClass", 10);
> 
> // call "new (a1[i]) MyClass;" for all entries in a1 and a2
> 
> Is it enough to do:
> a2.ExpandCreate(a1.GetEntriesFast());
> memcpy(&a2, &a1, sizeof(a1));
> 
> or must I do something like:
> const Int_t n = a1.GetEntriesFast();
> a2.InitSize(n);
> for (int i=0; i<n; i++)
>     a2.d = a1.d;
> 
> BTW: MyClass contains plain values (basic data types) _only_.
> 
> Thanks in advance,
> Thomas.



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