Changing a branch in a tree

From: Scott Sampson (sampson@nevis1.nevis.columbia.edu)
Date: Tue Mar 23 1999 - 20:48:47 MET


I want to do the following: 

1)I have branch "a" in a tree. I want to change that branch name to "b".

2)Then I want to create a new branch named "a", and fill it with new 
  values.


Step (1) is easy. I just do 

TFile *g = new TFile("file.root","update");
TTree *tree = (TTree)g->Get("tree");

TBranch *br = tree->GetBranch("a");
br->SetObject("b","b/F");
g->cd();
tree->Write();

For step (2) I try

Float_t a;
TBranch *br2 = tree->Branch("a",&a,"a/F"); //create branch a

  Int_t nentries = tree->GetEntries();
   for (Int_t i=0; i<nentries;i++) {
     tree->GetEvent(i);
     a=(Float_t)(i);//assign some value to each entry
     br2->Fill();
   }
   g->cd();
   wgbr->Write();
   h2->Write();
   g->Close();

Problem: when I do h2->Scan("a:b") I find that "a" does not have the new 
value I assigned, but instead has the original value (i.e. the same values
as "b"). When I create a new branch with a branch name that did not
previously exist in that tree, then the values fill properly. so the
problem seems to be that I'm using a branch name that already exists. I
tried creating a new tree via the "CloneTree" member function, but even
with the "a" branch deactivated (tree->SetBranchStatus("a",0)) the cloned
tree header still has that branch name, just with 0 entries, so the above
problem remains. 

I guess my question is the following: is there any way to assign an
already existing variable a new value?

Scott Sampson



This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:43:30 MET