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