]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG2/EBYE/macros/readBalanceFunction.C
Modifications in the output of the BF task (merging) - Michael Weber
[u/mrichter/AliRoot.git] / PWG2 / EBYE / macros / readBalanceFunction.C
CommitLineData
6432ac6a 1const TString gBFAnalysisType[7] = {"y","eta","qlong","qout","qside","qinv","phi"};
2
3void 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 23void 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//___________________________________________________________//
262void 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}