Re: [ROOT] deleting an object from TClonesArray

From: Rene Brun (Rene.Brun@cern.ch)
Date: Tue Dec 10 2002 - 22:09:42 MET


Hi Anne-Silvie,

You should not use TClonesArray::Remove when the array
is a branch of a Tree. You must find another solution.

Rene Brun

On Mon, 9 Dec 2002, Anne-Sylvie Nicollerat wrote:

> Hello,
> 
> I am filling a TClonesArray with an object named TEgammaBasicClusters,
> having a TLorentzVector for one of its member variable, _Momentum.
> I would like to remove all the clusters having a _Momentum pt smaller
> than 40.
> 
> For that I wrote the following code:
> 
> TClonesArray *clusters=new TClonesArray("TEgammaBasicCluster");
> 
> ...(the TclonesArray is then initialized reading a tree)...
> tree->SetBranchAddress("TEgammaBasicCluster",&clusters);
> 
> for(Int_t i=0;i<nentries;i++)
> {
>   clusters->Delete();
> 
>   cout << "Processing entry number " << i << " cluser size: " <<
>     clusters->GetEntries() << endl;
> 
>   tree->GetEntry(i);
> 
>   for(Int_t j=0;j<clusters->GetEntries(); ++j)
>     {
>       TLorentzVector vec = ((TEgammaBasicCluster
> *)(*clusters)[j])->_Momentum;
>       cout << "pt before: " << vec.Pt() << endl;
> 
>       if(vec.Pt()<40)
>         {
>           clusters->Remove(((TEgammaBasicCluster *)(*clusters)[j]));
>           cout << "pt removed: " << vec.Pt() << endl;
>         }
>           cout << "********************************** " << endl;
>     }
> 
> Here is for instance the print statement that I get:
> 
> size before 35
> pt before: 40.5209
> **********************************
> pt before: 23.9048
> pt removed: 23.9048
> **********************************
> pt before: 3.43218
> pt removed: 3.43218
> **********************************
> pt before: 6.72141
> pt removed: 6.72141
> **********************************
> pt before: 4.60063
> pt removed: 4.60063
> **********************************
> pt before: 0.577762
> pt removed: 0.577762
> **********************************
> pt before: 2.98151
> pt removed: 2.98151
> **********************************
> pt before: 1.01181
> pt removed: 1.01181
> **********************************
> pt before: 0.532288
> pt removed: 0.532288
> **********************************
> pt before: 0.314125
> pt removed: 0.314125
> **********************************
> pt before: 0.297861
> pt removed: 0.297861
> **********************************
> pt before: 0.268139
> pt removed: 0.268139
> **********************************
> pt before: 0.231922
> pt removed: 0.231922
> **********************************
> pt before: 0.638586
> pt removed: 0.638586
> **********************************
> pt before: 0.360809
> pt removed: 0.360809
> **********************************
> pt before: 0.322122
> pt removed: 0.322122
> **********************************
> pt before: 0.181829
> pt removed: 0.181829
> **********************************
> pt before: 0.205891
> pt removed: 0.205891
> **********************************
> size after 18
> 
> so you see that it is reducing the size of the array from 35 to 18 but
> still all teh times it goes in the second if statement, it seems not to
> remove the clusters ?
> I was wondering if I was correctly initializing my TClonesArray ?
> 
> Mabye there is a better way to do it ??
> Any idea ?
> 
> Thanks a lot, cheers
> 
> Anne-Sylvie
> 
> 



This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:51:23 MET