Method IsPhysicalPrimary(Int_t i) added. The routine returns kTRUE in case
[u/mrichter/AliRoot.git] / PWG0 / CreateESDChain.C
CommitLineData
dc740de4 1/* $Id$ */
2
3// Helper macros for creating chains
4
5TChain* CreateESDChainFromDir(const char* aDataDir, Int_t aRuns = 20, Int_t offset = 0, Bool_t aAddHeader = kTRUE)
539b6cb4 6{
dc740de4 7 // creates chain of files in a given directory. The structure is expected as:
8 // <aDataDir>/<dir0>/AliESDs.root
9 // <aDataDir>/<dir0>/galice.root (when <aAddHeader> flag is set)
10 // <aDataDir>/<dir1>/AliESDs.root
11 // <aDataDir>/<dir1>/galice.root (when <aAddHeader> flag is set)
12 // ...
13
539b6cb4 14 if (!aDataDir)
15 return 0;
16
17 TChain* chain = new TChain("esdTree");
18 TChain* chaingAlice = 0;
19
20 if (aAddHeader != kFALSE)
21 chaingAlice = new TChain("TE");
22
23 TString execDir(gSystem->pwd());
24 TSystemDirectory* baseDir = new TSystemDirectory(".", aDataDir);
25 TList* dirList = baseDir->GetListOfFiles();
26 Int_t nDirs = dirList->GetEntries();
27 gSystem->cd(execDir);
28
49dc84d9 29 Int_t count = 0;
30
539b6cb4 31 for (Int_t iDir=0; iDir<nDirs; ++iDir)
32 {
33 TSystemFile* presentDir = (TSystemFile*) dirList->At(iDir);
34 if (!presentDir || !presentDir->IsDirectory() || strcmp(presentDir->GetName(), ".") == 0 || strcmp(presentDir->GetName(), "..") == 0)
35 continue;
36
dc740de4 37 if (offset > 0)
38 {
39 --offset;
40 continue;
41 }
42
49dc84d9 43 if (count++ == aRuns)
44 break;
45
539b6cb4 46 TString presentDirName(aDataDir);
47 presentDirName += "/";
48 presentDirName += presentDir->GetName();
49
50 chain->Add(presentDirName + "/AliESDs.root/esdTree");
51
52 if (aAddHeader != kFALSE)
53 chaingAlice->Add(presentDirName + "/galice.root/TE");
54 }
55
56 if (aAddHeader != kFALSE)
57 chain->AddFriend(chaingAlice);
58
59 return chain;
60}
37dbb69e 61
62TChain* CreateESDChainFromList(const char* listFile, Int_t aRuns = 20, Bool_t aAddHeader = kTRUE)
63{
dc740de4 64 // Creates a chain from a file which contains a list of ESD files
65 // if <aAddHeader> is set, the filename of the galice.root file is created by replacing
66 // AliESDs to galice in the esd file name
67
37dbb69e 68 if (!listFile)
69 return 0;
70
71 TChain* chain = new TChain("esdTree");
72 TChain* chaingAlice = 0;
73
74 if (aAddHeader != kFALSE)
75 chaingAlice = new TChain("TE");
76
77 // Open the input stream
78 ifstream in;
79 in.open(listFile);
80
81 Int_t count = 0;
82
83 // Read the input list of files and add them to the chain
84 TString esdfile;
85 while(in.good()) {
86 in >> esdfile;
87 if (!esdfile.Contains("root")) continue; // protection
88
89 if (count++ == aRuns)
90 break;
91
92 // add esd file
93 chain->Add(esdfile);
94
95 // add header
96 if (aAddHeader != kFALSE)
97 {
98 esdfile.ReplaceAll("AliESDs", "galice");
99 chaingAlice->Add(esdfile + "/TE");
100 }
101 }
102
103 in.close();
104
105 chain->Lookup();
106
107 if (aAddHeader != kFALSE)
108 {
109 chaingAlice->Lookup();
110 chain->AddFriend(chaingAlice);
111 }
112
113 return chain;
114}