improved GenEventHeader() method in case of AOD
[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   // switch off one branch (and its subbranches!)
10   orgAodTree->SetBranchStatus("tracks*", 0);
11
12   // open new output file
13   TFile *newFile = new TFile(newFileName, "RECREATE");
14   // clone old TTree (only clones branches that are switched on)
15   TTree *newAodTree = orgAodTree->CloneTree();
16
17   // get the event within the new TTree
18   AliAODEvent *evNew = new AliAODEvent();
19   evNew->ReadFromTree(newAodTree);
20
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 }