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.
5 // open input file and get the TTree
6 TFile orgFile(orgFileName, "READ");
8 TTree *orgAodTree = (TTree*)orgFile.Get("aodTree");
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();
15 // get the event within the new TTree
16 AliAODEvent *evNew = new AliAODEvent();
17 evNew->ReadFromTree(newAodTree);
19 // switch off one branch (and its subbranches!)
20 newAodTree->SetBranchStatus("tracks*", 0);
21 // remove TObject from the list
22 evNew->RemoveObject(evNew->GetTracks());
24 // delete old and write new UserInfo
25 newAodTree->GetUserInfo()->Clear();
26 newAodTree->GetUserInfo()->Add(evNew);
28 // write new TTree to file