]>
Commit | Line | Data |
---|---|---|
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 | } |