Re: [ROOT] TClonesArrays in TTrees

From: Denis NOUAIS (nouais@to.infn.it)
Date: Fri Nov 24 2000 - 16:37:35 MET


Hi Dave,

As far as I can understand (I'm not an expert) when your clones array is
created, You should not create the TLorentzVector with the 'new'
operator like you did:

> TLorentzVector *p = new TLorentzVector(1,2,3,4);

because the memory is already allocated.
You should create it directly in the array like that

for (int i = 0; i<n ; i++) {     
   new(*a[i]) TLorentzVector(1,2,3,4);                  
}

You can access your TLorentzVectors through the pointers a[i]
insted of 'p'

Well, it is explained in the page:
http://root.cern.ch/root/html225/TClonesArray.html
or in the Root User's Guide.

Denis

------------------------------------------------------------------------
 Istituto Nazionale di Fisica Nucleare | Office: A 39
 Via Pietro Giuria, 1                  | Phone: (+39)011-6707377/7359
 I-10125 TORINO (Italy)                | Fax:   (+39)011-6699579
------------------------------------------------------------------------
 at Cern: office 160-R-030, phone (+41)22-7672917/72918
------------------------------------------------------------------------
    
    


                                                               
On Fri, 24 Nov 2000, Dave Ireland wrote:

> Hi,
> 
> This is basically a plea for advice from a novice, so I apologise in
> advance if there is a simple answer. I have scoured the ROOT website and
> others, so this is really a last resort!
> 
> After successfully creating a tree of TLorentzVectors, I want to extend
> this to create a simple tree of TClonesArrays of TLorentzVectors, so I
> try to do this using the following code:-
> 
> // create file and tree...
> TFile *f = new TFile("zzz", "RECREATE");
> TTree *tree = new TTree("T", "Testing TClonesArrays");
> 
> // create pointer to TClonesArray
> TClonesArray *a = new TClonesArray("TLorentzVector");
> 
> // define branch in tree by passing the address of the pointer to the 
> // TClonesArray...
> tree->Branch("test branch", &a);
> 
> // create TLorentzVectors by some means (eventually to be part of a
> loop), e.g.
> TLorentzVector *p = new TLorentzVector(1,2,3,4);
> 
> //*****
> //***** WHAT CODE SHOULD GO HERE TO INSERT THE TLorentzVector OBJECT
> //***** INTO THE TClonesArray?????
> //*****
> //*****
> 
> // fill tree...
> tree->Fill();
> 
> // write tree to file...
> f->Write();
> 
> I have tried a few things, none of which were successful. I would be
> grateful for any suggestions.
> 
> Cheers,
> 
> Dave



This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:37 MET