Hi Kate, Thanks for sending me your test macro and your file. I have modified your macro to make it working. see below. Note the following: If you want to read one or a few subbranches, you have two possibilities: 1- the most efficient Get a pointer to the branch(es), eg TBranch *brevnt = amstree->GetBranch("Eventno"); Set the branch address int evnt; brevnt->SetAddress(&evnt); In the loop on entries, do: brevnt->GetEntry(i); //this will fill evnt 2- slightly slower (example shown below) Disable all branches Activate the branch(es) you want to read Set the branch address In the loop on entries, do: amstree->GetEntry(i); //only active branches will be read //============your macro slightly modified void testread() { TFile file("prv3.root"); TTree *amstree = (TTree*)file->Get("AMSRoot"); int nevent = amstree->GetEntries(); printf("nevent %d\n",nevent); int evtno = 0; amstree->SetBranchStatus("*",0); amstree->SetBranchStatus("Eventno",1); amstree->SetBranchAddress("Eventno", &evtno); nevent = 10; for(int i=0;i<nevent;i++) { amstree->GetEntry(i); printf("i %d, evtno=%d\n",i,evtno); } } Rene Brun Kate Scholberg wrote: > > > You should not declare the variable as int* if it is an int. > > In your case, if you just want to read the branch "EventNo", do: > > static int evtnr; > > TBranch *branch = amstree->GetBranch("EventNo"); > > branch->SetAddress(&evtnr); > > branch->GetEntry(0); to read the first entry > > now the variable evtnr should contain the value of EventNo for the first > > entry. > > It is in general a bad idea to use local variables to store the result > > of a Tree entry. You better put your variable(s) inside a class. > > That is what TTree::MakeClass is doing for you. > > > > It is likely that you did not declare int evtnr as a static variable. > > In case you exit/enter again from/in the function where this variable is > > declared, the variable has been destroyed meanwhile. > > Yes, I know! This is just a tiny test CINT program to check the > action of GetEntry. I don't believe the int gets destroyed because it > never leaves the scope (doesn't matter if I put address of int or of > pointer, tried both, still nothing read). .. I am not understanding > something, though.. what does SetBranchAddress do in the two cases? > > In the main compiled code I'm trying to debug, the variable to be read is > static. The read still does not work (supposedly it *used* to work, though, > which I do not understand!) > > Kate.
This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:50:51 MET