]> git.uio.no Git - u/mrichter/AliRoot.git/blob - STEER/cloneAODTreeAndRemoveObject.C
Fix a problem with old UserInfo written to the cloned TTree.
[u/mrichter/AliRoot.git] / STEER / cloneAODTreeAndRemoveObject.C
1 void cloneAODTreeAndRemoveObject(const char *newFileName = "AliAOD_new.root", const char *orgFileName = "AliAOD.root") {
2   // This little macro takes an already created AOD file and clones it.
3   // After removing an old brach, the new TTree is written to a new file.
4
5   // open input file and get the TTree
6   TFile orgFile(orgFileName, "READ");
7   // get original TTree
8   TTree *orgAodTree = (TTree*)orgFile.Get("aodTree");
9
10   // open new output file
11   TFile *newFile = new TFile(newFileName, "RECREATE");
12   // clone old TTree (only clones branches that are switched on)
13   TTree *newAodTree = orgAodTree->CloneTree();
14
15   // get the event within the new TTree
16   AliAODEvent *evNew = new AliAODEvent();
17   evNew->ReadFromTree(newAodTree);
18
19   // switch off one branch (and its subbranches!)
20   newAodTree->SetBranchStatus("tracks*", 0);
21   // remove TObject from the list
22   evNew->RemoveObject(evNew->GetTracks());
23
24   // delete old and write new UserInfo
25   newAodTree->GetUserInfo()->Clear();
26   newAodTree->GetUserInfo()->Add(evNew);
27
28   // write new TTree to file
29   newAodTree->Write();
30
31   // close files
32   newFile->Close();
33   delete newFile;
34
35   orgFile.Close();
36 }