What you do is not valid. You cannot have a struct with elements of different size and pass the address of the first element to build a branch. If you want to use a struct, you should create two branches in the case of your example. -a first branch with "id" -a second branch with all the other elements The clean solution is to create a class instead of a struct and pass the the address of a pointer to a class instance like we do in many examples. Using a class, you do not need to spell the individual members, they are know to the system. Rene Brun Matej Batic wrote: > > Hi all! > > I have some problems with filling tree. If I fill tree with struct with > one int and four doubles, then reading tree it seems that structure of > an event is not aligned properly. In case I fill tree with two ints and > four doubles, the problem dissappears. > > Please have a look at attached code. I use root 4.00/07 on Linux > 2.4.27-pre6 (x86_64 and i386 platforms) > > Thanks, > matej > > -- > Matej Batic ~~~~~~~~~~~~~~~~~~~~~~~~~~ > Dept. of Experimantal Particle Physics > Jozef Stefan Institute > Jamova 39, SI-1001 Ljubljana > Slovenia > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > > -------------------------------------------------------------------------------- > #include "TFile.h" > #include "TTree.h" > > struct MData { > int id; > double posX; > double posY; > double posZ; > double energy; > }; > > int spooky(char* rootfn){ > > MData data; > > dataFile = new TFile(rootfn,"RECREATE"); > dataTree = new TTree("tree","simulation data"); > dataTree->Branch("Events",&data.id,"id/I:posX/D:posY/D:posZ:energy"); > > > //fill with some numbers ... > for(int i=0; i<250; i++){ > data.id=i; > data.posX=i; > data.posY=0.52345*i; > data.posZ=i; > data.energy=234.123557*i; > dataTree->Fill(); > } > > dataFile->Write(); > dataFile->Close(); > > spookyread(rootfn); > > } > > int spookyread(char* rootfn){ > > dataFile = new TFile(rootfn,"READ"); > tree=(TTree*)gROOT->FindObject("tree"); > > for(int i=1;i<12;i++) tree->Show(i); > > dataFile->Close(); > }
This archive was generated by hypermail 2b29 : Sun Jan 02 2005 - 05:50:10 MET