Re: [ROOT] TClonesArrays in TTrees

From: Rene Brun (Rene.Brun@cern.ch)
Date: Fri Nov 24 2000 - 15:31:42 MET


Hi Dave,
I have modified your example below to be a script executable
from an interactive Root session.
do
  root > .x Dave.C
  root > tree->Draw("test.fE");

We give a complete example of TClonesArray with a Tree at
 $ROOTSYS/test/mainEvent.cxx, Event.cxx

Rene Brun

//------------script Dave.C
{

   // load library libPhysics that contains TLorentzVector
   // this lib is not linked by default
   gSystem->Load("libPhysics");

   // create file and tree...
   TFile *f = new TFile("zzz.root", "RECREATE");
   TTree *tree = new TTree("T", "Testing TClonesArrays");

   // create pointer to TClonesArray
   TClonesArray *a = new TClonesArray("TLorentzVector");
   TClonesArray &aa = *a;

   // define branch in tree by passing the address of the pointer to the 
   // TClonesArray...
   tree->Branch("test", &a);

   // create 1000 TLorentzVectors in a loop.
   for (Int_t i=0;i<1000;i++) {
      new(aa[i]) TLorentzVector(1,2,3,i);
   }

   // fill tree... (likely to be in a loop)
   tree->Fill();

   // write tree to file...
   f->Write();
   //delete f;
}

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
> 
>   --------------------------------------------------------------------------------
> 
>   Dave Ireland <d.ireland@physics.gla.ac.uk>
>   Nuclear Physics Group
>   Department of Physics and Astronomy
>   University of Glasgow
> 
>   Dave Ireland
>   Nuclear Physics Group                <d.ireland@physics.gla.ac.uk>
>   Department of Physics and Astronomy
>   University of Glasgow
>   University Avenue                    Fax: (+44/0) 141 330 5889
>   Glasgow                              Work: (+44/0) 141 339 8855 ext. 0981
>   Scotland                             Netscape Conference Address
>   G12 8QQ
>   Great Britain
>   Additional Information:
>   Last Name     Ireland
>   First Name    Dave
>   Version       2.1



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