]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG2/FORWARD/analysis/AliFMDDndeta.cxx
Updates for SPD QA
[u/mrichter/AliRoot.git] / PWG2 / FORWARD / analysis / AliFMDDndeta.cxx
CommitLineData
c5058a61 1
2#include "AliFMDDndeta.h"
3#include "TFile.h"
4#include "AliLog.h"
5#include "TH1.h"
6#include "AliFMDAnaParameters.h"
7e2bf482 7#include "AliFMDAnaCalibSharingEfficiency.h"
c5058a61 8#include "TStyle.h"
9//#include "TObjArray.h"
10#include "TCanvas.h"
11#include "TLine.h"
12#include "TPad.h"
13#include "iostream"
14#include "TMath.h"
15#include "TLegend.h"
16#include "TLatex.h"
17ClassImp(AliFMDDndeta)
18//_____________________________________________________________________
19
20AliFMDDndeta::AliFMDDndeta()
21: TObject(),
22 fList(0),
23 fMultList(),
24 fNbinsToCut(2),
25 fVtxCut(10),
26 fIsInit(kFALSE),
27 fIsGenerated(),
ae26bdd7 28 fPrimEvents(),
29 fEvents(),
30 fPrimdNdeta()
c5058a61 31{
32
33}
34//_____________________________________________________________________
35void AliFMDDndeta::SetNames(Analysis what) {
36
37 switch(what) {
38 case kHits :
39 fPrimEvents.Form("nMCEventsNoCuts"); //was nMCEvents
40 fEvents.Form("nEvents");
41 fPrimdNdeta.Form("hMultvsEtaNoCuts");
42 break;
7e2bf482 43 case kHitsTrVtx :
44 fPrimEvents.Form("nMCEvents");
45 fEvents.Form("nEvents");
46 fPrimdNdeta.Form("hMultvsEtaNoCuts");
47 break;
c5058a61 48 case kMult :
49 fPrimEvents.Form("nMCEventsNoCuts");
50 fEvents.Form("nEvents");
51 fPrimdNdeta.Form("hMultvsEtaNoCuts");
52 break;
53 case kMultTrVtx :
54 fPrimEvents.Form("nMCEvents");
55 fEvents.Form("nEvents");
56 fPrimdNdeta.Form("hMultvsEta");
57 break;
58 default:
59 break;
60 }
61}
62//_____________________________________________________________________
63const char* AliFMDDndeta::GetAnalysisName(Analysis what, UShort_t det, Char_t ring, Int_t vtxbin) {
64
ae26bdd7 65 const char* name = "";
c5058a61 66
67 switch(what) {
68 case kHits :
69 name = Form("hits_NoCuts_FMD%d%c_vtxbin%d_proj",det,ring,vtxbin); //NoCuts added
70 break;
7e2bf482 71 case kHitsTrVtx :
72 name = Form("hits_FMD%d%c_vtxbin%d_proj",det,ring,vtxbin);
73 break;
c5058a61 74 case kMult :
75 name = Form("dNdeta_FMD%d%c_vtxbin%d_proj",det,ring,vtxbin);
76 break;
77 case kMultTrVtx :
78 name = Form("dNdeta_FMD%d%c_TrVtx_vtxbin%d_proj",det,ring,vtxbin);
79 break;
80 default:
81 break;
82 }
83 //std::cout<<name.Data()<<std::endl;
84 return name;
85}
86//_____________________________________________________________________
87const char* AliFMDDndeta::GetPrimName(Analysis what, UShort_t det, Char_t ring, Int_t vtxbin) {
88
ae26bdd7 89 const char* name = "";
c5058a61 90
91 switch(what) {
92 case kHits :
93 name = Form("hMCHits_nocuts_FMD%d%c_vtxbin%d",det,ring,vtxbin); //nocuts added
94 break;
7e2bf482 95 case kHitsTrVtx :
96 name = Form("hMCHits_FMD%d%c_vtxbin%d",det,ring,vtxbin);
97 break;
c5058a61 98 case kMult :
99 name = Form("primmult_vtxbin%d",vtxbin);
100 break;
101 case kMultTrVtx :
102 name = Form("primmult_NoCuts_vtxbin%d",vtxbin);
103 break;
104 default:
105 break;
106 }
107 return name;
108}
109//_____________________________________________________________________
110void AliFMDDndeta::GenerateHits() {
111
112 AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
113 TH2F* hTmp = pars->GetBackgroundCorrection(1,'I',0);
114 Int_t nVertexBins = pars->GetNvtxBins();
115 Int_t nEtaBins = hTmp->GetNbinsX();
116 Float_t etaMin = hTmp->GetXaxis()->GetXmin();
117 Float_t etaMax = hTmp->GetXaxis()->GetXmax();
118
119 for(Int_t i = 0; i<nVertexBins;i++) {
120 TH1F* hHits = new TH1F(Form("hMCHits_vtxbin%d",i),Form("hHits_vtxbin%d",i),nEtaBins,etaMin,etaMax);
121 hHits->Sumw2();
122 fMultList.Add(hHits);
123 }
124
125 for(Int_t det = 1; det<=3; det++) {
126 Int_t maxRing = (det == 1 ? 0 : 1);
127 for(Int_t ring = 0;ring<=maxRing;ring++) {
128
129 Char_t ringChar = (ring == 0 ? 'I' : 'O');
130 for(Int_t v=0; v< nVertexBins; v++) {
131 TH1F* hits = (TH1F*)fList->FindObject(GetPrimName(kHits,det,ringChar,v));
132
133 Int_t nNonZero = 0, nNonZeroInData = 0;
134
135 //removing edges
136 for(Int_t i =1;i<=hits->GetNbinsX();i++) {
137 if(hits->GetBinContent(i) !=0)
138 nNonZero++;
139 }
140
141 TH1F* sumMultHist = (TH1F*)fMultList.FindObject(Form("hMCHits_vtxbin%d",v));
142 for(Int_t i =1;i<=sumMultHist->GetNbinsX();i++) {
143 if(hits->GetBinContent(i) == 0 ) continue;
144
145 nNonZeroInData++;
146
147 if(nNonZeroInData <=fNbinsToCut || nNonZeroInData > (nNonZero - fNbinsToCut)) {
148 continue;
149 }
150 if(sumMultHist->GetBinContent(i) == 0 && hits->GetBinContent(i) != 0){
151 sumMultHist->SetBinContent(i,hits->GetBinContent(i));
152 sumMultHist->SetBinError(i,hits->GetBinError(i));
153 }
154 else {
155
156
157 Float_t sumofw = (1/TMath::Power(hits->GetBinError(i),2)) + (1/TMath::Power(sumMultHist->GetBinError(i),2));
158 Float_t wav = (hits->GetBinContent(i)*(1/TMath::Power(hits->GetBinError(i),2)) + sumMultHist->GetBinContent(i)*(1/TMath::Power(sumMultHist->GetBinError(i),2)))/sumofw;
159 Float_t error = 1/TMath::Sqrt(sumofw);
160 sumMultHist->SetBinContent(i, wav);
161 sumMultHist->SetBinError(i, error);
162 }
163 }
164 }
165 }
166 }
167}
168
169//_____________________________________________________________________
170void AliFMDDndeta::Init(const Char_t* filename) {
171
172 TFile* fin = TFile::Open(filename);
173
174 if(!fin) {
175 AliWarning("No file - aborting !");
176 return;
177 }
c5058a61 178 AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
707ec2bd 179 //pars->Init();
c5058a61 180
707ec2bd 181 fList = (TList*)fin->Get(Form("%s/BackgroundCorrected",pars->GetDndetaAnalysisName()));
182
183 if(!fList) //an old file ? Perhaps...
184 fList = (TList*)fin->Get("BackgroundCorrected");
185
c5058a61 186 fIsGenerated[kHits] = kFALSE;
187 fIsGenerated[kMult] = kFALSE;
188 fIsGenerated[kMultTrVtx] = kFALSE;
189
190 fIsInit = kTRUE;
191}
192//_____________________________________________________________________
193void AliFMDDndeta::GenerateMult(Analysis what) {
194
195
196 if(!fIsInit) {
197 AliWarning("Not initialised - call Init to remedy");
198 return;
199 }
200
201 if(fIsGenerated[what]) {
202 AliWarning("Already generated - have a look at the results!");
203 return;
204 }
205 else fIsGenerated[what] = kTRUE;
206
207 SetNames(what);
208
209 if(what == kHits)
210 GenerateHits();
211
212 TH1I* hMCEvents = (TH1I*)fList->FindObject(fPrimEvents.Data());
213
214 AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
215
216 TH2F* hTmp = pars->GetBackgroundCorrection(1,'I',0);
217 Int_t nVertexBins = pars->GetNvtxBins();
218 Int_t nEtaBins = hTmp->GetNbinsX();
219 Float_t etaMin = hTmp->GetXaxis()->GetXmin();
220 Float_t etaMax = hTmp->GetXaxis()->GetXmax();
221
222 for(Int_t i = 0; i<nVertexBins;i++) {
223 TH1F* hMult = new TH1F(Form("hMult_vtxbin%d",i),Form("hMult_vtxbin%d",i),nEtaBins,etaMin,etaMax);
224 hMult->Sumw2();
225 fMultList.Add(hMult);
226 }
227
228 for(Int_t det = 1; det<=3;det++) {
229 Int_t maxRing = (det == 1 ? 0 : 1);
230 for(Int_t iring = 0; iring<=maxRing; iring++) {
231 Char_t ringChar = (iring == 0 ? 'I' : 'O');
232 TH1F* hRingMult= new TH1F(Form("hRingMult_FMD%d%c",det,ringChar),Form("hRingMult_FMD%d%c",det,ringChar),nEtaBins,etaMin,etaMax);
233 fMultList.Add(hRingMult);
234 }
235 }
236 TH1I* hEvents = (TH1I*)fList->FindObject(fEvents.Data());
237 TH1F* hPrimVtx = 0;
238
239
240
241 for(Int_t det = 1; det<=3; det++) {
242 Int_t maxRing = (det == 1 ? 0 : 1);
243 for(Int_t ring = 0;ring<=maxRing;ring++) {
244
245 Char_t ringChar = (ring == 0 ? 'I' : 'O');
246 for(Int_t v=0; v< nVertexBins; v++) {
247 if(det == 1) {
248 if(what == kHits)
249 hPrimVtx = (TH1F*)fMultList.FindObject(Form("hMCHits_vtxbin%d",v));
250 else
251 hPrimVtx = (TH1F*)fList->FindObject(GetPrimName(what,det,ringChar,v));
252
253
254 Float_t nPrimevents = hMCEvents->GetBinContent(v+1);
255 Float_t xb = hPrimVtx->GetNbinsX();
256 Float_t xr = hPrimVtx->GetXaxis()->GetXmax() - hPrimVtx->GetXaxis()->GetXmin();
257 hPrimVtx->Scale(xb / xr );
258 if(nPrimevents > 0)
259 hPrimVtx->Scale(1/nPrimevents);
260
261 }
262
263 Double_t delta = 2*pars->GetVtxCutZ()/pars->GetNvtxBins();
264 Float_t vtxZ1 = (delta*v) - pars->GetVtxCutZ();
265 Float_t vtxZ2 = (delta*(v+1)) - pars->GetVtxCutZ();
266
267 if(vtxZ1<(-1*fVtxCut) || vtxZ2 >fVtxCut)
268 continue;
269 Float_t nEvents = (Float_t)hEvents->GetBinContent(v+1);
270
271 //TH1F* multhistproj = (TH1F*)fList->FindObject(Form("dNdeta_FMD%d%c_vtxbin%d_proj",det,ringChar,v));
272 TH1F* multhistproj = (TH1F*)fList->FindObject(GetAnalysisName(what,det,ringChar,v));
273 if(nEvents)
274 multhistproj->Scale(1/nEvents);
275 Float_t xnBins = multhistproj->GetNbinsX();
276 Float_t xrange = multhistproj->GetXaxis()->GetXmax() - multhistproj->GetXaxis()->GetXmin();
277 multhistproj->Scale(xnBins / xrange);
278
279
280
281 Int_t nNonZero = 0, nNonZeroInData = 0;
282
283 //removing edges
284
285 for(Int_t i =1;i<=multhistproj->GetNbinsX();i++) {
286 if(multhistproj->GetBinContent(i) !=0)
287 nNonZero++;
288 }
7e2bf482 289 Int_t nBinsOld = fNbinsToCut;
707ec2bd 290 // if(det == 2 && ringChar =='I') {
291 // fNbinsToCut = 1;
292 // }
c5058a61 293 TH1F* hRingMult = (TH1F*)fMultList.FindObject(Form("hRingMult_FMD%d%c",det,ringChar));
294
295 for(Int_t i=1; i<=hRingMult->GetNbinsX(); i++) {
296 if(multhistproj->GetBinContent(i)!=0) {
297 nNonZeroInData++;
298 if(nNonZeroInData <=fNbinsToCut || nNonZeroInData > (nNonZero - fNbinsToCut)) {
299 continue;
300 }
301 Float_t oldweight = 0;
302 Float_t oldwav = 0;
303 if(hRingMult->GetBinError(i)>0) {
304 oldweight = 1/TMath::Power(hRingMult->GetBinError(i),2);
305 oldwav = oldweight*hRingMult->GetBinContent(i);
7e2bf482 306 }
c5058a61 307 Float_t weight = 1/TMath::Power(multhistproj->GetBinError(i),2);
308 Float_t wav = oldwav + weight*multhistproj->GetBinContent(i);
309 Float_t sumofw = oldweight + weight;
310 if(sumofw) {
311 Float_t error = 1/TMath::Sqrt(sumofw);
312
313 hRingMult->SetBinContent(i,wav/sumofw);
314 hRingMult->SetBinError(i,error);
315
316 }
317 }
318 }
319 nNonZeroInData = 0;
320
321 TH1F* sumMultHist = (TH1F*)fMultList.FindObject(Form("hMult_vtxbin%d",v));
ae26bdd7 322
c5058a61 323 for(Int_t i =1;i<=sumMultHist->GetNbinsX();i++) {
7e2bf482 324 if(multhistproj->GetBinContent(i) != 0 ) {
325 nNonZeroInData++;
c5058a61 326
7e2bf482 327 if(nNonZeroInData <=fNbinsToCut || nNonZeroInData > (nNonZero - fNbinsToCut)) {
328 continue;
329 }
330 if(sumMultHist->GetBinContent(i) == 0 && multhistproj->GetBinContent(i) != 0){
c5058a61 331 sumMultHist->SetBinContent(i,multhistproj->GetBinContent(i));
332 sumMultHist->SetBinError(i,multhistproj->GetBinError(i));
333 }
334 else {
335
336
337 Float_t sumofw = (1/TMath::Power(multhistproj->GetBinError(i),2)) + (1/TMath::Power(sumMultHist->GetBinError(i),2));
338 Float_t wav = (multhistproj->GetBinContent(i)*(1/TMath::Power(multhistproj->GetBinError(i),2)) + sumMultHist->GetBinContent(i)*(1/TMath::Power(sumMultHist->GetBinError(i),2)))/sumofw;
339 Float_t error = 1/TMath::Sqrt(sumofw);
340 sumMultHist->SetBinContent(i, wav);
341 sumMultHist->SetBinError(i, error);
342 }
343
344
7e2bf482 345 }
c5058a61 346 }
7e2bf482 347 fNbinsToCut = nBinsOld;
c5058a61 348 }
7e2bf482 349
c5058a61 350 }
351 }
352
353 TH1F* sumMult = new TH1F("hSumMult","hSumMult",nEtaBins,etaMin,etaMax);
354 sumMult->Sumw2();
355 fMultList.Add(sumMult);
356 TH1F* primMult = new TH1F("hPrimMult","hPrimMult",nEtaBins,etaMin,etaMax);
357 primMult->Sumw2();
358 fMultList.Add(primMult);
359
360 Float_t wav = 0, sumofw=0, weight = 0, primwav = 0, primsumofw=0, primweight = 0;//, etaofbin = 0;
361 for(Int_t i =1; i<=sumMult->GetNbinsX();i++) {
362
363 for(Int_t v = 0; v<nVertexBins;v++) {
364 if(what == kHits)
365 hPrimVtx = (TH1F*)fMultList.FindObject(Form("hMCHits_vtxbin%d",v));
366 else
367 hPrimVtx = (TH1F*)fList->FindObject(GetPrimName(what,0,0,v));
368 TH1F* sumMultHist = (TH1F*)fMultList.FindObject(Form("hMult_vtxbin%d",v));
369 //etaofbin += sumMultHist->GetBinCenter(i);
370 // if( hPrimVtx->GetBinContent(i)!=0 && hPrimVtx->GetBinError(i)>0.001 && sumMultHist->GetBinContent(i)!=0) {
371 if( hPrimVtx->GetBinContent(i)!=0) {
372 primweight = 1/TMath::Power(hPrimVtx->GetBinError(i),2);
373 primwav = primwav + primweight*hPrimVtx->GetBinContent(i);
374 primsumofw = primsumofw + primweight;
375 }
376 if(sumMultHist->GetBinContent(i)!=0) {
377
378 weight = 1/TMath::Power(sumMultHist->GetBinError(i),2);
379 wav = wav + weight*sumMultHist->GetBinContent(i);
380 sumofw = sumofw + weight;
381 }
382
383 }
384 if( primsumofw !=0 ) {// && sumofw !=0) {
385 Float_t primerror = 1/TMath::Sqrt(primsumofw);
386
387 primMult->SetBinContent(i,primwav/primsumofw);
388 primMult->SetBinError(i,primerror);
389 }
390 else {
391 primMult->SetBinContent(i,0);
392 primMult->SetBinError(i,0);
393 }
394
395 if(sumofw) {
396
397 Float_t error = 1/TMath::Sqrt(sumofw);
398
399 sumMult->SetBinContent(i,wav/sumofw);
400 sumMult->SetBinError(i,error);
401 }
402
403
404 wav = 0;
405 sumofw = 0;
406 weight = 0;
407 primwav = 0;
408 primsumofw = 0;
409 primweight = 0;
410
411 }
412
413}
414//_____________________________________________________________________
415void AliFMDDndeta::DrawDndeta(Analysis what, Int_t rebin) {
416
417 if(!fIsInit) {
418 AliWarning("Not initialised - call Init to remedy");
419 return;
420 }
421
422 if(!fIsGenerated[what]) {
423 AliWarning("Not generated - generate first then draw!");
424 return;
425 }
426
427 SetNames(what);
428
429 AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
430 TCanvas* c1 = new TCanvas("cvertexbins","Overlaps",1400,800);
431 c1->Divide(5,2);
432 Int_t nVertexBins = pars->GetNvtxBins();
433
434 TH1I* hEvents = (TH1I*)fList->FindObject(fEvents.Data());
435 TH1I* hMCEvents = (TH1I*)fList->FindObject(fPrimEvents.Data());
436
437 TH1F* hPrimVtx = 0;
438 for(Int_t det = 1; det<=3; det++) {
439 Int_t maxRing = (det == 1 ? 0 : 1);
440 for(Int_t ring = 0;ring<=maxRing;ring++) {
441 for(Int_t v=0; v< nVertexBins; v++) {
442 Char_t ringChar = (ring == 0 ? 'I' : 'O');
443 Double_t delta = 2*pars->GetVtxCutZ()/pars->GetNvtxBins();
444 Float_t vtxZ1 = (delta*v) - pars->GetVtxCutZ();
445 Float_t vtxZ2 = (delta*(v+1)) - pars->GetVtxCutZ();
446
447 if(vtxZ1<(-1*fVtxCut) || vtxZ2 >fVtxCut)
448 continue;
449 Float_t nEvents = (Float_t)hEvents->GetBinContent(v+1);
450
451 TH1F* multhistproj = (TH1F*)fList->FindObject(GetAnalysisName(what,det,ringChar,v));
452
453 c1->cd(v+1);
454
455 if(det==1) {
456 multhistproj->SetMarkerStyle(20);
457 multhistproj->SetMarkerColor(1);
458 }
459 if(det==2 && ringChar=='I') {
460 multhistproj->SetMarkerStyle(21);
461 multhistproj->SetMarkerColor(2);
462 }
463 if(det==2 && ringChar=='O') {
464 multhistproj->SetMarkerStyle(3);
465 multhistproj->SetMarkerColor(3);
466 }
467 if(det==3 && ringChar=='I') {
468 multhistproj->SetMarkerStyle(22);
469 multhistproj->SetMarkerColor(4);
470 }
471 if(det==3 && ringChar=='O') {
472 multhistproj->SetMarkerStyle(23);
473 multhistproj->SetMarkerColor(6);
474 }
475
476
477
478 if(det == 1) {
479 if(what == kHits)
480 hPrimVtx = (TH1F*)fMultList.FindObject(Form("hMCHits_vtxbin%d",v));
481 else
482 hPrimVtx = (TH1F*)fList->FindObject(GetPrimName(what,det,ringChar,v));
483
484 hPrimVtx->SetTitle("");
485 TLatex* l = new TLatex(0.14,0.92,Form("Vtx range [%.1f, %.1f], %d events",vtxZ1,vtxZ2,(Int_t)nEvents));
486 l->SetNDC(kTRUE);
487 hPrimVtx->SetFillColor(kGray);
488 hPrimVtx->SetLabelFont(132,"xyz");
489 hPrimVtx->SetStats(0000);
490 hPrimVtx->GetXaxis()->SetTitle("#eta");
7e2bf482 491 hPrimVtx->GetYaxis()->SetRangeUser(0,15);
c5058a61 492 hPrimVtx->DrawCopy("E3");
493 l->Draw();
494 multhistproj->DrawCopy("same");
495
496 }
497 else
498 multhistproj->DrawCopy("same");
499
500
501 }
502 }
503 }
504
505 for(Int_t v=0; v< nVertexBins; v++) {
506 TH1F* sumMultHist = (TH1F*)fMultList.FindObject(Form("hMult_vtxbin%d",v));
507 c1->cd(v+1);
508 sumMultHist->SetMarkerStyle(25);
509 sumMultHist->DrawCopy("same");
510
511 }
512 TH1F* primMult = (TH1F*)fMultList.FindObject("hPrimMult");
513 TH1F* sumMult = (TH1F*)fMultList.FindObject("hSumMult");
514 sumMult->SetMarkerStyle(23);
515 sumMult->SetMarkerColor(kRed);
516 for(Int_t det = 1; det<=3;det++) {
517 Int_t maxRing = (det == 1 ? 0 : 1);
518 for(Int_t iring = 0; iring<=maxRing; iring++) {
519 Char_t ringChar = (iring == 0 ? 'I' : 'O');
520 TH1F* hRingMult= (TH1F*)fMultList.FindObject(Form("hRingMult_FMD%d%c",det,ringChar));
521 hRingMult->Add(primMult,-1);
522 hRingMult->Divide(primMult);
523 }
524 }
525
526
527 //TH1F* hPrim = (TH1F*)fList->FindObject(fPrimEvents.Data());
528 // TFile testhit("/home/canute/ALICE/Simulations/TestOfAnalysis2/hitsdist.root");
529 // TH1F* hHitCor = (TH1F*)testhit.Get("selectedHits");
530 // hHitCor->Sumw2();
531 // sumMult->Divide(hHitCor);
532 TH1F* hPrim = (TH1F*)fList->FindObject(fPrimdNdeta.Data());
533 Float_t nPrimevents = hMCEvents->GetEntries();
534 //std::cout<<hMCEvents->GetEntries()<<std::endl;
535 Float_t xb = hPrim->GetNbinsX();
536 Float_t xr = hPrim->GetXaxis()->GetXmax() - hPrim->GetXaxis()->GetXmin();
537 //std::cout<<xb/xr<<std::endl;
538 hPrim->Scale(xb / xr );
539 if(nPrimevents > 0)
540 hPrim->Scale(1/nPrimevents);
541
ae26bdd7 542 /*
543 TFile testin("/home/canute/ALICE/FMDanalysis/GridAnalysis/fmd_dNdeta_hits.root","READ");
7e2bf482 544 // TFile testin("/home/canute/ALICE/FMDanalysis/productionData/fmd_dNdeta_hits.root","READ");
c5058a61 545 TH1F* hcorrect = (TH1F*)testin.Get("hReldif");
546 hcorrect->SetName("djarnis");
547 std::cout<<hcorrect<<std::endl;
548 for(Int_t bb = 1;bb<=hcorrect->GetNbinsX();bb++) {
549 hcorrect->SetBinContent(bb,hcorrect->GetBinContent(bb)+1);
550 }
551
552 sumMult->Divide(hcorrect);
553 //delete hcorrect;
ae26bdd7 554 */
c5058a61 555
556 sumMult->Rebin(rebin);
557 sumMult->Scale(1/rebin);
558 primMult->Rebin(rebin);
559 primMult->Scale(1/rebin);
560 hPrim->Rebin(rebin);
561 hPrim->Scale(1/rebin);
562 if(what != kHits)
563 primMult = hPrim;
564 TH1F* hReldif = (TH1F*)sumMult->Clone("hReldif");
565 hReldif->Add(primMult,-1);
566 hReldif->Divide(primMult);
567 // hReldif->Add(hPrim,-1);
568 // hReldif->Divide(hPrim);
569
570 TCanvas* c2 = new TCanvas("dN/deta","dN/deta",640,960);
571 c2->Divide(1,2);//,0,0);
572 c2->cd(2);
573 gPad->SetGridy();
574 gPad->SetGridx();
575 hReldif->SetTitle("");
576 hReldif->GetYaxis()->SetTitle("Relative difference");
577 hReldif->GetYaxis()->SetRangeUser(-0.2,0.2);
578 hReldif->SetStats(0000);
579 hReldif->GetXaxis()->SetTitle("#eta");
580 hReldif->DrawCopy();
581 TLine* zeroLine = new TLine(-6,0,6,0);
582 zeroLine->SetLineWidth(2);
583 zeroLine->SetLineColor(kBlack);
584 zeroLine->Draw();
585 hPrim->SetTitle("");
586 hPrim->SetLabelFont(132,"xyz");
587 hPrim->SetFillColor(kGray);
588 primMult->SetFillColor(kBlue);
589 c2->cd(1);
590 gPad->SetGridy();
591 gPad->SetGridx();
592 hPrim->GetYaxis()->SetRangeUser(2,10);
593 //hPrim->GetYaxis()->SetRangeUser(0,20);
594 hPrim->SetStats(0000);
595 hPrim->GetXaxis()->SetTitle("#eta");
ae26bdd7 596 sumMult->SetTitle("");
597 sumMult->SetStats(kFALSE);
c5058a61 598 sumMult->DrawCopy("PE");
ae26bdd7 599 if(what != kHits)
600 hPrim->DrawCopy("E3same");
601 if(what == kHits)
602 primMult->DrawCopy("E3same");
c5058a61 603 hPrim->GetXaxis()->SetTitle("#eta");
604
605 hPrim->SetMarkerStyle(8);
ae26bdd7 606 if(what != kHits)
607 hPrim->DrawCopy("PE3same");
c5058a61 608 sumMult->DrawCopy("PEsame");
609 std::cout<<"FMD 1 "<<sumMult->Integral(sumMult->FindBin(3),sumMult->FindBin(5),"width")<<std::endl;
7e2bf482 610 /*TFile* itsfile = TFile::Open(itsfilename);
c5058a61 611 if(itsfile) {
612 //itsfile->cd();
613
614 //TList* itslist = (TList*)itsfile->Get("ITS_analysis");
615 //TH1F* itshist0 = (TH1F*)itslist->FindObject("dndeta_check_0");
616 //TH1F* itshist1 = (TH1F*)itslist->FindObject("dndeta_check_1");
617 //TH1F* itshist2 = (TH1F*)itslist->FindObject("dndeta_check_2");
618 TH1F* itshist0 = (TH1F*)itsfile->Get("dndeta/dNdEta");
619 TH1F* itshist1= (TH1F*)itsfile->Get("dndeta/dNdEta_1");
620 TH1F* itshist2 = (TH1F*)itsfile->Get("dndeta/dNdEta_2");
621 itshist0->SetMarkerStyle(27);
622 itshist1->SetMarkerStyle(28);
623 itshist2->SetMarkerStyle(30);
624 itshist0->DrawCopy("same");
625 itshist1->DrawCopy("same");
626 itshist2->DrawCopy("same");
627
628 }
629 */
630
631
7e2bf482 632 TLegend* leg = new TLegend(0.35,0.2,0.65,0.35,"");
ae26bdd7 633 if(what != kHits)
634 leg->AddEntry(hPrim,"Primary","pf");
635 else
636 leg->AddEntry(primMult,"Hits","pf");
7e2bf482 637 //leg->AddEntry(primMult,"Analysed prim","f");
c5058a61 638 leg->AddEntry(sumMult,"Analysis","p");
639 leg->Draw();
640 TString species;
641
642 switch(what) {
643 case kMult:
644 species.Form("mult");
645 break;
646 case kMultTrVtx:
647 species.Form("mult_TrVtx");
648 break;
649 case kHits:
650 species.Form("hits");
651 break;
652 default:
653 AliWarning("no valid Analysis entry!");
654 break;
655 }
656 TFile fout(Form("fmd_dNdeta_%s.root",species.Data()),"recreate");
657 sumMult->Write();
658 hReldif->Write();
659 fMultList.Write();
660 fout.Close();
661
7e2bf482 662}
663//_____________________________________________________________________
664void AliFMDDndeta::CreateSharingEfficiency(const Char_t* filename, Bool_t store) {
665
666 Init(filename);
667 AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
668 //pars->Init(kTRUE,AliFMDAnaParameters::kBackgroundCorrection);
669 Int_t nVertexBins = pars->GetNvtxBins();
670
671 SetNames(kHits);
672 TH1I* hEvents = (TH1I*)fList->FindObject(fEvents.Data());
673 TH1I* hPrimEvents = (TH1I*)fList->FindObject(fPrimEvents.Data());
674
675 SetNames(kHitsTrVtx);
676 TH1I* hEventsTrVtx = (TH1I*)fList->FindObject(fEvents.Data());
677 TH1I* hPrimEventsTrVtx = (TH1I*)fList->FindObject(fPrimEvents.Data());
678
679 AliFMDAnaCalibSharingEfficiency* sharEff = new AliFMDAnaCalibSharingEfficiency();
680
681 for(Int_t det = 1; det<=3; det++) {
682 Int_t maxRing = (det == 1 ? 0 : 1);
683 for(Int_t ring = 0;ring<=maxRing;ring++) {
684 Char_t ringChar = (ring == 0 ? 'I' : 'O');
685 for(Int_t v=0; v< nVertexBins; v++) {
686 TH1F* hHits = (TH1F*)fList->FindObject(GetAnalysisName(kHits,det, ringChar, v));
687 TH1F* hHitsTrVtx = (TH1F*)fList->FindObject(GetAnalysisName(kHitsTrVtx,det, ringChar, v));
688 TH1F* hMCHits = (TH1F*)fList->FindObject(GetPrimName(kHits,det, ringChar, v));
689 TH1F* hMCHitsTrVtx = (TH1F*)fList->FindObject(GetPrimName(kHitsTrVtx,det, ringChar, v));
690
691 TH1F* hCorrection = (TH1F*)hHits->Clone(Form("hCorrection_FMD%d%c_vtx%d"));
692 TH1F* hCorrectionTrVtx = (TH1F*)hHitsTrVtx->Clone(Form("hCorrection_FMD%d%c_vtx%d"));
693
694 hCorrection->Scale(1./(Float_t)hEvents->GetBinContent(v+1));
695 hMCHits->Scale(1./(Float_t)hPrimEvents->GetBinContent(v+1));
696 hCorrectionTrVtx->Scale(1./(Float_t)hEventsTrVtx->GetBinContent(v+1));
697 hMCHitsTrVtx->Scale(1./(Float_t)hPrimEventsTrVtx->GetBinContent(v+1));
698 hCorrection->Divide(hMCHits);
699 hCorrectionTrVtx->Divide(hMCHitsTrVtx);
700
701 sharEff->SetSharingEff(det,ringChar,v,hCorrection);
702 sharEff->SetSharingEffTrVtx(det,ringChar,v,hCorrectionTrVtx);
703 // std::cout<<hHits<<" "<<hHitsTrVtx<<" "<<hPrim<<" "<<hPrimTrVtx<<std::endl;
704
705 }
706 }
707 }
708
709 if(store) {
710 TFile fsharing(pars->GetPath(pars->GetSharingEffID()),"RECREATE");
711 sharEff->Write(AliFMDAnaParameters::GetSharingEffID());
712 fsharing.Close();
713 }
714
c5058a61 715}
716
717//_____________________________________________________________________
718//
719// EOF
720//