forked from alisw/AliRoot
-
Notifications
You must be signed in to change notification settings - Fork 0
/
CopyAli.C
108 lines (98 loc) · 2.59 KB
/
CopyAli.C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
////////////////////////////////////////////////////////////////////////
//
// name: CopyAli.C
// date: 17.3.2002
// last update: 21.3.2002
// author: Jiri Chudoba
// version: 1.0
//
// description:
// copy some alice objects from 1 file to another
//
// ToDo:
// add support for more events in 1 file
//
//
// Note:
// copied objects are not deleted, I assume that the root
// session is exited after this copy
//
// Example:
// aliroot -b -q CopyAli.C\("galice.root","TreeK.root",0,1,1,1\)
//
// History:
//
// 21.3.02 - first version
//
////////////////////////////////////////////////////////////////////////
#if !defined(__CINT__) || defined(__MAKECINT__)
#include "iostream.h"
#include "TTree.h"
#include "TBranch.h"
#include "TDirectory.h"
#include "TFile.h"
#include "AliRun.h"
#include "TParticle.h"
#include "AliHeader.h"
#include "TObjArray.h"
#include "TString.h"
#endif
void CopyAli(TString fnOrig="rfio:galice.root", TString fnNew="galice_new.root",Int_t iEvent = 0, Bool_t copygAlice=kTRUE,Bool_t copyTreeK = kFALSE)
{
TFile *fileOrig = TFile::Open(fnOrig);
if (!fileOrig->IsOpen()) {
cerr<<"Cannot open input file "<<fnOrig.Data()<<endl;
return;
}
// AliRun *gAlice;
if (gAlice) {delete gAlice; gAlice = 0;}
gAlice = (AliRun*)(fileOrig->Get("gAlice"));
if (!gAlice) {
cerr<<"Cannot read gAlice from the input file"<<endl;
return;
}
Int_t nAllTracks = gAlice->GetEvent(iEvent);
cout<<"nAllTracks = "<<nAllTracks<<endl;
// Open the new file
TFile *fileNew = TFile::Open(fnNew,"update");
if (!fileNew->IsOpen()) {
cerr<<"Cannot open output file "<<fnNew.Data()<<endl;
return;
}
if (copygAlice) {
cout<<"Copy gAlice: ";
gAlice->Write();
cout<<"done"<<endl;
TTree *treeE = gAlice->TreeE();
if (!treeE) {
cerr<<"No TreeE found for event "<<iEvent<<endl;
return;
}
cout<<"Copy TreeE: ";
AliHeader *header = new AliHeader();
treeE->SetBranchAddress("Header", &header);
treeE->SetBranchStatus("*",1);
TTree *treeENew = treeE->CloneTree();
treeENew->Write();
cout<<"done"<<endl;
if (copyTreeK) {
cout<<"Copy TreeK: ";
TTree *treeK = gAlice->TreeK();
if (!treeK) {
cerr<<"No TreeK found for event "<<iEvent<<endl;
return;
}
TParticle *particle = new TParticle();
treeK->SetBranchAddress("Particles",&particle);
treeK->SetBranchStatus("*",1);
TTree *treeKNew = treeK->CloneTree();
treeKNew->Write();
cout<<"done"<<endl;
}
delete gAlice;
gAlice = 0;
fileNew->Close();
fileOrig->Close();
delete fileNew;
delete fileOrig;
}