]>
Commit | Line | Data |
---|---|---|
6432ac6a | 1 | const TString gBFAnalysisType[7] = {"y","eta","qlong","qout","qside","qinv","phi"}; |
2 | ||
3 | void readBalanceFunction(Bool_t bHistos = kTRUE, TString inFile = "AnalysisResults.root") { | |
4 | // Macro to read the output of the BF analysis: MW: CHANGE THIS!!!! | |
5 | //i) Prints and draws the final BF output | |
6 | //ii) Plots the QA part of the analysis | |
7 | //iii) store BF in output file | |
8 | //Author: Panos.Christakoglou@cern.ch, m.weber@cern.ch | |
a114d234 | 9 | //Loading the needed libraries |
10 | gSystem->Load("libProofPlayer.so"); | |
11 | gSystem->Load("libANALYSIS.so"); | |
12 | gSystem->Load("libANALYSISalice.so"); | |
13 | gSystem->Load("libPWG2ebye.so"); | |
14 | ||
a114d234 | 15 | //Draw BF |
6432ac6a | 16 | drawBF(bHistos,inFile); |
61483909 | 17 | |
18 | //Merge the output | |
a114d234 | 19 | //mergeOutput("/alice/cern.ch/user/p/pchrist/Balance/pp/7TeV/LHC10b/output/"); |
20 | } | |
21 | ||
22 | //___________________________________________________________// | |
6432ac6a | 23 | void drawBF(Bool_t bHistos = kTRUE, TString inFile = "AnalysisResults.root") { |
24 | //Function to draw the BF objects and write them into the output file | |
25 | ||
26 | Int_t maximumCanvases = 10; | |
27 | Int_t iCanvas = 0; | |
28 | TCanvas *cQA[10]; | |
29 | TCanvas *cBF[10]; | |
30 | TCanvas *cBFS[10]; | |
31 | ||
32 | // get the file | |
33 | TFile *f = TFile::Open(inFile.Data()); | |
a114d234 | 34 | if(!f) { |
35 | Printf("File not found!!!"); | |
36 | break; | |
37 | } | |
38 | ||
6432ac6a | 39 | // get the BF output directory |
40 | TDirectoryFile *dir = dynamic_cast<TDirectoryFile *>(f->Get("PWG2EbyE.outputBalanceFunctionAnalysis")); | |
a114d234 | 41 | if(!dir) { |
42 | Printf("Output directory not found!!!"); | |
43 | break; | |
44 | } | |
45 | ||
6432ac6a | 46 | // loop over all lists and plot the BF and QA |
47 | TList *list = NULL; | |
48 | TString listName; | |
49 | TIter nextkey( dir->GetListOfKeys() ); | |
50 | TKey *key; | |
51 | ||
52 | AliBalance *bf[10][7]; | |
53 | AliBalance *bfs[10][7]; | |
54 | TGraphErrors *gbf[10][7]; | |
55 | TGraphErrors *gbfs[10][7]; | |
56 | ||
57 | TH1D *fHistP[7]; //N+ | |
58 | TH1D *fHistN[7]; //N- | |
59 | TH1D *fHistPN[7]; //N+- | |
60 | TH1D *fHistNP[7]; //N-+ | |
61 | TH1D *fHistPP[7]; //N++ | |
62 | TH1D *fHistNN[7]; //N-- | |
63 | ||
64 | while ( (key = (TKey*)nextkey())) { | |
65 | ||
66 | list = (TList*)key->ReadObj(); | |
67 | listName = TString(list->GetName()); | |
68 | ||
69 | cout<<"Processing list "<<listName<<endl; | |
70 | ||
71 | // ---------------------------------------------------- | |
72 | // plot QA histograms | |
73 | if(listName.Contains("QA")){ | |
74 | ||
75 | iCanvas ++; | |
76 | if(iCanvas == 10) {cout<<"TOO MANY LISTS --> increase MAXIMUM"<<endl; return;} | |
77 | cQA[iCanvas] = new TCanvas(listName,listName); | |
78 | cQA[iCanvas]->Divide(3,3); | |
79 | ||
80 | cQA[iCanvas]->cd(1); | |
81 | TH1F* histVx = (TH1F*)list->FindObject("fHistVx"); | |
82 | if(histVx){ | |
83 | histVx->SetFillColor(9); | |
84 | histVx->Draw(); | |
85 | } | |
86 | cQA[iCanvas]->cd(2); | |
87 | TH1F* histVy = (TH1F*)list->FindObject("fHistVy"); | |
88 | if(histVy){ | |
89 | histVy->SetFillColor(9); | |
90 | histVy->Draw(); | |
91 | } | |
92 | ||
93 | cQA[iCanvas]->cd(3); | |
94 | TH1F* histVz = (TH1F*)list->FindObject("fHistVz"); | |
95 | if(histVz){ | |
96 | histVz->SetFillColor(9); | |
97 | histVz->Draw(); | |
98 | } | |
99 | ||
100 | cQA[iCanvas]->cd(4); | |
101 | TH1F* histEventStats = (TH1F*)list->FindObject("fHistEventStats"); | |
102 | if(histEventStats){ | |
103 | histEventStats->SetFillColor(9); | |
104 | histEventStats->Draw(); | |
105 | } | |
106 | ||
107 | cQA[iCanvas]->cd(5); | |
108 | cQA[iCanvas]->cd(5)->SetLogz(); | |
109 | TH2F* histClus = (TH2F*)list->FindObject("fHistClus"); | |
110 | if(histClus) histClus->Draw("colz"); | |
111 | ||
112 | cQA[iCanvas]->cd(6); | |
113 | cQA[iCanvas]->cd(6)->SetLogz(); | |
114 | TH2F* histDCA = (TH2F*)list->FindObject("fHistDCA"); | |
115 | if(histDCA) histDCA->Draw("colz"); | |
116 | ||
117 | cQA[iCanvas]->cd(7); | |
118 | TH1F* histPt = (TH1F*)list->FindObject("fHistPt"); | |
119 | if(histPt){ | |
120 | histPt->SetFillColor(9); | |
121 | histPt->Draw(); | |
122 | } | |
123 | ||
124 | cQA[iCanvas]->cd(8); | |
125 | TH1F* histEta = (TH1F*)list->FindObject("fHistEta"); | |
126 | if(histEta){ | |
127 | histEta->SetFillColor(9); | |
128 | histEta->Draw(); | |
129 | } | |
130 | ||
131 | cQA[iCanvas]->cd(9); | |
132 | TH1F* histPhi = (TH1F*)list->FindObject("fHistPhi"); | |
133 | if(histPhi){ | |
134 | histPhi->SetFillColor(9); | |
135 | histPhi->Draw(); | |
136 | } | |
137 | } | |
138 | // ---------------------------------------------------- | |
139 | ||
140 | // ---------------------------------------------------- | |
141 | // calculate and plot BF | |
142 | if(listName.Contains("BF_")){ | |
143 | cBF[iCanvas] = new TCanvas(listName,listName); | |
144 | cBF[iCanvas]->Divide(3,3); | |
145 | ||
146 | for(Int_t a = 0; a < 7; a++){ | |
147 | ||
148 | cout<<"ANALYSE "<<gBFAnalysisType[a]<<endl; | |
149 | ||
150 | // create the BF object | |
151 | bf[iCanvas][a] = new AliBalance(); | |
152 | ||
153 | fHistP[a] = (TH1D*)list->FindObject(Form("fHistP%s",gBFAnalysisType[a].Data())); | |
154 | fHistN[a] = (TH1D*)list->FindObject(Form("fHistP%s",gBFAnalysisType[a].Data())); | |
155 | fHistPP[a] = (TH1D*)list->FindObject(Form("fHistPP%s",gBFAnalysisType[a].Data())); | |
156 | fHistPN[a] = (TH1D*)list->FindObject(Form("fHistPN%s",gBFAnalysisType[a].Data())); | |
157 | fHistNP[a] = (TH1D*)list->FindObject(Form("fHistNP%s",gBFAnalysisType[a].Data())); | |
158 | fHistNN[a] = (TH1D*)list->FindObject(Form("fHistNN%s",gBFAnalysisType[a].Data())); | |
159 | ||
160 | // set the binning (p1 doesn't play a role --> 0) | |
161 | bf[iCanvas][a]->SetNumberOfBins(a,fHistNN[a]->GetNbinsX()); | |
162 | bf[iCanvas][a]->SetInterval(0,0,a,fHistNN[a]->GetBinCenter(1) - fHistNN[a]->GetBinWidth(1)/2,fHistNN[a]->GetBinCenter(fHistNN[a]->GetNbinsX()) + fHistNN[a]->GetBinWidth(1)/2); | |
163 | ||
164 | // set the members for each bin in histogram | |
165 | for(Int_t ibin = 1; ibin <= fHistNN[a]->GetNbinsX(); ibin++){ | |
166 | bf[iCanvas][a]->SetNpp(a,ibin-1,fHistPP[a]->GetBinContent(ibin)); | |
167 | bf[iCanvas][a]->SetNpn(a,ibin-1,fHistPN[a]->GetBinContent(ibin)); | |
168 | bf[iCanvas][a]->SetNnp(a,ibin-1,fHistNP[a]->GetBinContent(ibin)); | |
169 | bf[iCanvas][a]->SetNnn(a,ibin-1,fHistNN[a]->GetBinContent(ibin)); | |
170 | } | |
171 | bf[iCanvas][a]->SetNp(a,fHistP[a]->GetEntries()); | |
172 | bf[iCanvas][a]->SetNn(a,fHistN[a]->GetEntries()); | |
173 | ||
174 | gbf[iCanvas][a] = bf[iCanvas][a]->drawBalance(a); | |
175 | gbf[iCanvas][a]->SetName(Form("%s_BF_%s",listName.Data(),gBFAnalysisType[a].Data())); | |
176 | ||
177 | cBF[iCanvas]->cd(a+1); | |
178 | gbf[iCanvas][a]->SetMarkerStyle(20); | |
179 | ||
180 | if(!bHistos){ | |
181 | gbf[iCanvas][a]->Draw("AP"); | |
182 | } | |
183 | else{ | |
184 | fHistPP[a]->Draw(); | |
185 | fHistPN[a]->SetLineColor(2); | |
186 | fHistPN[a]->Draw("same"); | |
187 | fHistNP[a]->SetLineColor(4); | |
188 | fHistNP[a]->Draw("same"); | |
189 | fHistNN[a]->SetLineColor(8); | |
190 | fHistNN[a]->Draw("same"); | |
191 | } | |
192 | } | |
193 | } | |
194 | // ---------------------------------------------------- | |
195 | ||
196 | // ---------------------------------------------------- | |
197 | // calculate and plot BF (shuffled) | |
198 | if(listName.Contains("BFShuffled")){ | |
199 | ||
200 | cBFS[iCanvas] = new TCanvas(listName,listName); | |
201 | cBFS[iCanvas]->Divide(3,3); | |
202 | ||
203 | for(Int_t a = 0; a < 7; a++){ | |
204 | ||
205 | // create the BF object | |
206 | bfs[iCanvas][a] = new AliBalance(); | |
207 | ||
208 | fHistP[a] = (TH1D*)list->FindObject(Form("fHistP%s_shuffle",gBFAnalysisType[a].Data())); | |
209 | fHistN[a] = (TH1D*)list->FindObject(Form("fHistP%s_shuffle",gBFAnalysisType[a].Data())); | |
210 | fHistPP[a] = (TH1D*)list->FindObject(Form("fHistPP%s_shuffle",gBFAnalysisType[a].Data())); | |
211 | fHistPN[a] = (TH1D*)list->FindObject(Form("fHistPN%s_shuffle",gBFAnalysisType[a].Data())); | |
212 | fHistNP[a] = (TH1D*)list->FindObject(Form("fHistNP%s_shuffle",gBFAnalysisType[a].Data())); | |
213 | fHistNN[a] = (TH1D*)list->FindObject(Form("fHistNN%s_shuffle",gBFAnalysisType[a].Data())); | |
214 | ||
215 | // set the binning (p1 doesn't play a role --> 0) | |
216 | bfs[iCanvas][a]->SetNumberOfBins(a,fHistNN[a]->GetNbinsX()); | |
217 | bfs[iCanvas][a]->SetInterval(0,0,a,fHistNN[a]->GetBinCenter(1) - fHistNN[a]->GetBinWidth(1)/2,fHistNN[a]->GetBinCenter(fHistNN[a]->GetNbinsX()) + fHistNN[a]->GetBinWidth(1)/2); | |
218 | ||
219 | // set the members for each bin in histogram | |
220 | for(Int_t ibin = 1; ibin <= fHistNN[a]->GetNbinsX(); ibin++){ | |
221 | bfs[iCanvas][a]->SetNpp(a,ibin-1,fHistPP[a]->GetBinContent(ibin)); | |
222 | bfs[iCanvas][a]->SetNpn(a,ibin-1,fHistPN[a]->GetBinContent(ibin)); | |
223 | bfs[iCanvas][a]->SetNnp(a,ibin-1,fHistNP[a]->GetBinContent(ibin)); | |
224 | bfs[iCanvas][a]->SetNnn(a,ibin-1,fHistNN[a]->GetBinContent(ibin)); | |
225 | } | |
226 | bfs[iCanvas][a]->SetNp(a,fHistP[a]->GetEntries()); | |
227 | bfs[iCanvas][a]->SetNn(a,fHistN[a]->GetEntries()); | |
228 | ||
229 | gbfs[iCanvas][a] = bf[iCanvas][a]->drawBalance(a); | |
230 | gbfs[iCanvas][a]->SetName(Form("%s_BF_%s",listName.Data(),gBFAnalysisType[a].Data())); | |
231 | ||
232 | cBFS[iCanvas]->cd(a+1); | |
233 | gbfs[iCanvas][a]->SetMarkerStyle(20); | |
234 | if(!bHistos){ | |
235 | gbf[iCanvas][a]->Draw("AP"); | |
236 | } | |
237 | else{ | |
238 | fHistPP[a]->Draw(); | |
239 | fHistPN[a]->SetLineColor(2); | |
240 | fHistPN[a]->Draw("same"); | |
241 | fHistNP[a]->SetLineColor(4); | |
242 | fHistNP[a]->Draw("same"); | |
243 | fHistNN[a]->SetLineColor(8); | |
244 | fHistNN[a]->Draw("same"); | |
245 | } | |
246 | } | |
247 | } | |
248 | // ---------------------------------------------------- | |
a114d234 | 249 | } |
250 | ||
6432ac6a | 251 | TFile *fOut = TFile::Open(Form("Histograms_%s",inFile.Data()),"RECREATE"); |
252 | fOut->cd(); | |
253 | for(Int_t i = 0; i < iCanvas; i++){ | |
254 | for(Int_t a = 0; a < 7; a++){ | |
255 | gbf[iCanvas][a]->Write(); | |
256 | gbfs[iCanvas][a]->Write(); | |
257 | } | |
258 | } | |
61483909 | 259 | } |
260 | ||
261 | //___________________________________________________________// | |
262 | void mergeOutput(const char* outputDir) { | |
263 | //Function to merge the output of the sub-jobs | |
61483909 | 264 | //Create a BF object |
265 | AliBalance *bf = new AliBalance(); | |
266 | ||
267 | //connect to AliEn's API services | |
268 | TGrid::Connect("alien://"); | |
269 | ||
270 | //Getting the output dir from the env. variable | |
271 | //(JDL field: JDLVariables={"OutputDir"};) | |
272 | TGridResult* result = gGrid->Query(outputDir,"*/root_archive.zip","","-l 1000"); | |
273 | ||
274 | Int_t nEntries = result->GetEntries(); | |
275 | ||
276 | TString alienUrl; | |
277 | TDirectoryFile *dirSubJob; | |
278 | ||
279 | TString gCutName[4] = {"Total","Offline trigger", | |
280 | "Vertex","Analyzed"}; | |
281 | TH1F *fHistEventStats = new TH1F("fHistEventStats", | |
282 | "Event statistics;;N_{events}", | |
283 | 4,0.5,4.5); | |
284 | for(Int_t i = 1; i <= 4; i++) | |
285 | fHistEventStats->GetXaxis()->SetBinLabel(i,gCutName[i-1].Data()); | |
286 | ||
287 | AliESDtrackCuts *bfTrackCuts = new AliESDtrackCuts("bfTrackCuts"); | |
288 | for(Int_t i = 0; i < nEntries; i++) { | |
289 | alienUrl = result->GetKey(i,"turl"); | |
290 | alienUrl += "#AnalysisResults.root"; | |
291 | Printf("Opening file: %s",alienUrl.Data()); | |
292 | TFile *file = TFile::Open(alienUrl.Data()); | |
293 | dirSubJob = dynamic_cast<TDirectoryFile *>(file->Get("PWG2EbyE.outputBalanceFunctionAnalysis.root")); | |
294 | ||
295 | //merge BF | |
296 | AliBalance *bfSubJob = dynamic_cast<AliBalance *>(dirSubJob->Get("AliBalance")); | |
a114d234 | 297 | //bfSubJob->PrintResults(); |
61483909 | 298 | bf->Merge(bfSubJob); |
299 | //delete bfSubJob; | |
300 | ||
301 | //merge event stats | |
302 | TList *listSubJob = dynamic_cast<TList *>(dirSubJob->Get("listQA")); | |
303 | fHistEventStats->Add(dynamic_cast<TH1F *>(listSubJob->At(0))); | |
304 | ||
305 | bfTrackCuts = dynamic_cast<AliESDtrackCuts *>(listSubJob->At(1)); | |
306 | delete listSubJob; | |
307 | } | |
308 | ||
309 | //Create the output file | |
310 | TString outputFile = "AnalysisResults.Merged.root"; | |
311 | TFile *foutput = TFile::Open(outputFile.Data(),"recreate"); | |
312 | TDirectoryFile *dirOutput = new TDirectoryFile(); | |
313 | dirOutput->SetName("PWG2EbyE.outputBalanceFunctionAnalysis.root"); | |
314 | //dirOutput->cd(); | |
315 | dirOutput->Add(bf); | |
316 | TList *list = new TList(); | |
317 | list->SetName("listQA"); | |
318 | list->Add(fHistEventStats); | |
319 | list->Add(bfTrackCuts); | |
320 | dirOutput->Add(list); | |
321 | dirOutput->Write(); | |
322 | bf->Write(); | |
323 | list->Write(); | |
324 | foutput->Close(); | |
325 | ||
326 | //cout<<alienUrl.Data()<<endl; | |
327 | } |