[ROOT] deleting an object from TClonesArray

From: Anne-Sylvie Nicollerat (Anne-Sylvie.Nicollerat@cern.ch)
Date: Mon Dec 09 2002 - 10:48:07 MET


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