hi - you need to pass to TTree::Branch a pointer to pointer to TClonesArray.
I modified your macro such that it does what you want. -best, pasha
{
// a test for ClonesArrays
gSystem.Load("$ROOTSYS/lib/libPhysics.so");
TClonesArray* a = new TClonesArray("TLorentzVector", 10);
Int_t j;
TFile * f = new TFile("test.root", "RECREATE");
TTree * t = new TTree("tt", "test tree");
cout << t->Branch("j", & j, "j/I", 2048) << endl; // ok!
cout << t->Branch("a", & a, 2048, 1) << endl; // nil - but why?
for (j = 0; j < 2049; j++) {
for (Int_t i = 0; i < 10; i++) {
new((*a)[i]) TLorentzVector;
}
t->Fill();
a->Clear();
}
t->Write();
delete f;
}
Martin Weber wrote:
>
> Hi,
>
> why can't I create a branch clones object with the following code:
>
> {
> // a test for ClonesArrays
> gSystem.Load("$ROOTSYS/lib/libPhysics.so");
> gSystem.Load("$ROOTSYS/lib/libProof.so");
> TClonesArray a("TLorentzVector", 10);
> Int_t j;
> TFile * f = new TFile("test.root", "RECREATE");
> TTree * t = new TTree("tt", "test tree");
> cout << t->Branch("j", & j, "j/I", 2048) << endl; // ok!
> cout << t->Branch("a", & a, 2048, 1) << endl; // nil - but why?
> for (j = 0; j < 2049; j++) {
> for (Int_t i = 0; i < 10; i++) {
> new(a[i]) TLorentzVector;
> }
> t->Fill();
> a.Clear();
> }
> t->Write();
> f->Close();
> delete f;
> }
>
> The file "test.root" only contains a branch for j, but not for the
> ClonesArray. Why does it work e.g. in the "Event" example, where the
> ClonesArray is a member of the class Event?
>
> ROOT version: 2.23/09
> setenv ROOTSYS "/afs/cern.ch/na49/library.4/ROOT/new/i386_redhat51/root"
>
> Martin
This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:18 MET