Dear ROOTers and ROOT developers,
I have problem in storing TObjArray into ROOT file under ROOT 2.00/12. The
macro is very simple, I try to save TObjArray in ROOT file, then read it back,
and test what have I read. Macro and it output is attached below.
Thanks in advance,
Alexander.
void bug(void)
{
printf("Example 1: Storing TObjArray with 0 entries.\n");
f1 = new TFile("f.root","RECREATE");
o1 = new TObjArray;
f1 -> ls();
o1 -> Write("o1");
f1 -> ls();
f1 -> Close();
printf("---------\n");
// Reding back.
f1 = new TFile("f.root");
f1 ->ls();
o1 = (TObjArray*)f1->Get("o1");
if( NULL==o1 )
printf("Can not find object\n");
else
printf("Entries = %d\n",o1 -> GetEntries());
printf("===================================\n");
printf("Example 2: Storing TObjArray with four entries.\n");
f1 = new TFile("f.root","RECREATE");
o1 = new TObjArray;
o1 -> Add(new TObject);
o1 -> Add(new TObject);
o1 -> Add(new TObject);
o1 -> Add(new TObject);
printf("Entries = %d\n",o1 -> GetEntries());
f1 -> ls();
o1 -> Write("o1");
f1 -> ls();
f1 -> Close();
printf("---------\n");
// Reading back.
f1 = new TFile("f.root");
f1 ->ls();
o1 = (TObjArray*)f1->Get("o1");
if( NULL==o1 )
printf("Can not find object\n");
else
printf("Entries = %d\n",o1 -> GetEntries());
printf("===================================\n");
}
Output:
root [0] .x bug.C
TFile** f.root
TFile* f.root
TFile** f.root
TFile* f.root
---------
TFile** f.root
TFile* f.root
Can not find object
===================================
Entries = 4
TFile** f.root
TFile* f.root
TFile** f.root
TFile* f.root
KEY: TObject o1;2 Basic ROOT object
KEY: TObject o1;2 Basic ROOT object
KEY: TObject o1;2 Basic ROOT object
KEY: TObject o1;1 Basic ROOT object
---------
TFile** f.root
TFile* f.root
KEY: TObject o1;2 Basic ROOT object
KEY: TObject o1;2 Basic ROOT object
KEY: TObject o1;2 Basic ROOT object
KEY: TObject o1;1 Basic ROOT object
Entries = 0
===================================
NULL
root [1] .q