2 #include "AliFMDDndeta.h"
6 #include "AliFMDAnaParameters.h"
7 #include "AliFMDAnaCalibSharingEfficiency.h"
9 //#include "TObjArray.h"
12 #include "TGraphErrors.h"
18 #include "TProfile2D.h"
19 #include "TProfile3D.h"
26 #define SMALLNUMBER 0.0001
28 ClassImp(AliFMDDndeta)
29 //_____________________________________________________________________
31 AliFMDDndeta::AliFMDDndeta()
45 AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
46 /* fDataObject = new TProfile3D("dataObject","dataObject",
47 pars->GetNetaBins(),-6,6,
49 pars->GetNvtxBins(),-0.5,pars->GetNvtxBins()-0.5);
50 fDataObject->SetXTitle("#eta");
51 fDataObject->SetYTitle("#varphi [radians]");
52 fDataObject->SetZTitle("v_{z} [cm]");*/
54 fAnalysisNames[0] = "Hits";
55 fAnalysisNames[1] = "HitsTrVtx";
56 fAnalysisNames[2] = "dNdeta";
57 fAnalysisNames[3] = "dNdetaTrVtx";
58 fAnalysisNames[4] = "dNdetaNSD";
60 for(Int_t i=0; i<5;i++)
61 fMultList[i] = new TList();
63 //_____________________________________________________________________
64 void AliFMDDndeta::SetNames(Analysis what) {
65 // Set names of histograms from analysis
69 fPrimEvents.Form("nMCEventsNoCuts"); //was nMCEvents
70 fEvents.Form("nEvents");
71 fPrimdNdeta.Form("hMultvsEtaNoCuts");
74 fPrimEvents.Form("nMCEvents");
75 fEvents.Form("nEvents");
76 fPrimdNdeta.Form("hMultvsEtaNoCuts");
79 fPrimEvents.Form("nMCEventsNoCuts");
80 fEvents.Form("nEvents");
81 fPrimdNdeta.Form("hMultvsEtaNoCuts");
84 fPrimEvents.Form("nMCEvents");
85 fEvents.Form("nEvents");
86 fPrimdNdeta.Form("hMultvsEta");
89 fPrimEvents.Form("nMCEventsNSDNoCuts");
90 fEvents.Form("nNSDEvents");
91 fPrimdNdeta.Form("hMultvsEtaNSDNoCuts");
98 //_____________________________________________________________________
99 const char* AliFMDDndeta::GetAnalysisName(Analysis what, UShort_t det, Char_t ring, Int_t vtxbin) {
100 //Get names of histograms
101 const char* name = "";
105 name = Form("hits_NoCuts_FMD%d%c_vtxbin%d_proj",det,ring,vtxbin); //NoCuts added
108 name = Form("hits_FMD%d%c_vtxbin%d_proj",det,ring,vtxbin);
111 name = Form("dNdeta_FMD%d%c_vtxbin%d_proj",det,ring,vtxbin);
114 name = Form("dNdeta_FMD%d%c_TrVtx_vtxbin%d_proj",det,ring,vtxbin);
117 name = Form("dNdetaNSD_FMD%d%c_vtxbin%d_proj",det,ring,vtxbin);
123 //std::cout<<name.Data()<<std::endl;
126 //_____________________________________________________________________
127 const char* AliFMDDndeta::GetPrimName(Analysis what, UShort_t det, Char_t ring, Int_t vtxbin) {
128 //Get names of primaries
129 const char* name = "";
133 name = Form("hMCHits_nocuts_FMD%d%c_vtxbin%d",det,ring,vtxbin); //nocuts added
136 name = Form("hMCHits_FMD%d%c_vtxbin%d",det,ring,vtxbin);
139 name = Form("primmult_vtxbin%d",vtxbin);
142 name = Form("primmult_NoCuts_vtxbin%d",vtxbin);
145 name = Form("primmult_NSD_vtxbin%d",vtxbin);
152 //_____________________________________________________________________
153 void AliFMDDndeta::GenerateHits(Analysis what) {
154 //Generate the hits distributions
155 AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
156 TH2F* hTmp = pars->GetBackgroundCorrection(1,'I',0);
157 Int_t nVertexBins = pars->GetNvtxBins();
158 Int_t nEtaBins = hTmp->GetNbinsX();
159 Float_t etaMin = hTmp->GetXaxis()->GetXmin();
160 Float_t etaMax = hTmp->GetXaxis()->GetXmax();
162 for(Int_t i = 0; i<nVertexBins;i++) { //
163 TH1F* hHits = new TH1F(Form("hMCHits_vtxbin%d_%s",i,fAnalysisNames[what]),Form("hHits_vtxbin%d_%s",i,fAnalysisNames[what]),nEtaBins,etaMin,etaMax);
165 fMultList[what]->Add(hHits);
168 for(Int_t det = 1; det<=3; det++) {
169 Int_t maxRing = (det == 1 ? 0 : 1);
170 for(Int_t ring = 0;ring<=maxRing;ring++) {
172 Char_t ringChar = (ring == 0 ? 'I' : 'O');
173 for(Int_t v=0; v< nVertexBins; v++) {
174 TH1F* hits = (TH1F*)fList->FindObject(GetPrimName(what,det,ringChar,v));
176 Int_t nNonZero = 0, nNonZeroInData = 0;
179 for(Int_t i =1;i<=hits->GetNbinsX();i++) {
180 if(hits->GetBinContent(i) !=0)
184 TH1F* sumMultHist = (TH1F*)fMultList[what]->FindObject(Form("hMCHits_vtxbin%d_%s",v,fAnalysisNames[what]));
185 for(Int_t i =1;i<=sumMultHist->GetNbinsX();i++) {
186 if(hits->GetBinContent(i) == 0 ) continue;
190 if(nNonZeroInData <=fNbinsToCut || nNonZeroInData > (nNonZero - fNbinsToCut)) {
193 if(sumMultHist->GetBinContent(i) < SMALLNUMBER && TMath::Abs(hits->GetBinContent(i)) > 0){
194 sumMultHist->SetBinContent(i,hits->GetBinContent(i));
195 sumMultHist->SetBinError(i,hits->GetBinError(i));
200 Float_t sumofw = (1/TMath::Power(hits->GetBinError(i),2)) + (1/TMath::Power(sumMultHist->GetBinError(i),2));
201 Float_t wav = (hits->GetBinContent(i)*(1/TMath::Power(hits->GetBinError(i),2)) + sumMultHist->GetBinContent(i)*(1/TMath::Power(sumMultHist->GetBinError(i),2)))/sumofw;
202 Float_t error = 1/TMath::Sqrt(sumofw);
203 sumMultHist->SetBinContent(i, wav);
204 sumMultHist->SetBinError(i, error);
212 //_____________________________________________________________________
213 void AliFMDDndeta::Init(const Char_t* filename) {
214 //Initialize everything from file
215 TFile* fin = TFile::Open(filename);
218 AliWarning("No file - exiting !");
221 AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
224 TList* list = (TList*)fin->Get(Form("%s/BackgroundCorrected",pars->GetDndetaAnalysisName()));
226 if(!list) //an old file ? Perhaps...
227 list = (TList*)fin->Get("BackgroundCorrected");
232 //_____________________________________________________________________
233 void AliFMDDndeta::Init(TList* list) {
234 //Initialize everything from TList
237 AliWarning("No list - exiting !");
241 fList = (TList*)list->Clone("inputList");
243 fIsGenerated[kHits] = kFALSE;
244 fIsGenerated[kMult] = kFALSE;
245 fIsGenerated[kMultTrVtx] = kFALSE;
246 fIsGenerated[kHitsTrVtx] = kFALSE;
247 fIsGenerated[kMultNSD] = kFALSE;
251 //_____________________________________________________________________
252 void AliFMDDndeta::GenerateMult(Analysis what) {
256 AliWarning("Not initialised - call Init to remedy");
260 if(fIsGenerated[what]) {
261 AliWarning("Already generated - have a look at the results!");
264 else fIsGenerated[what] = kTRUE;
268 if(what == kHits || what == kHitsTrVtx)
271 TH1I* hMCEvents = (TH1I*)fList->FindObject(fPrimEvents.Data());
273 AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
275 TH2F* hTmp = pars->GetBackgroundCorrection(1,'I',0);
276 Int_t nVertexBins = pars->GetNvtxBins();
277 Int_t nEtaBins = hTmp->GetNbinsX();
278 Float_t etaMin = hTmp->GetXaxis()->GetXmin();
279 Float_t etaMax = hTmp->GetXaxis()->GetXmax();
281 for(Int_t i = 0; i<nVertexBins;i++) {
282 TH1F* hMult = new TH1F(Form("hMult_vtxbin%d_%s",i,fAnalysisNames[what]),Form("hMult_vtxbin%d_%s",i,fAnalysisNames[what]),nEtaBins,etaMin,etaMax);
284 fMultList[what]->Add(hMult);
287 for(Int_t det = 1; det<=3;det++) {
288 Int_t maxRing = (det == 1 ? 0 : 1);
289 for(Int_t iring = 0; iring<=maxRing; iring++) {
290 Char_t ringChar = (iring == 0 ? 'I' : 'O');
291 //Int_t nsec = (iring == 0 ? 20 : 40);
292 TH1F* hRingMult= new TH1F(Form("hRingMult_FMD%d%c_%s",det,ringChar,fAnalysisNames[what]),Form("hRingMult_FMD%d%c_%s",det,ringChar,fAnalysisNames[what]),nEtaBins,etaMin,etaMax);
293 fMultList[what]->Add(hRingMult);
294 // TProfile* phiprofile = new TProfile(Form("dNdphiFMD%d%c",det,ringChar), Form("dNdphiFMD%d%c;#Phi",det,ringChar), nsec , 0, 2*TMath::Pi());
295 //fMultList[what]->Add(phiprofile);
298 TH1I* hEvents = (TH1I*)fList->FindObject(fEvents.Data());
303 for(Int_t det = 1; det<=3; det++) {
304 Int_t maxRing = (det == 1 ? 0 : 1);
305 for(Int_t ring = 0;ring<=maxRing;ring++) {
307 Char_t ringChar = (ring == 0 ? 'I' : 'O');
308 for(Int_t v=0; v< nVertexBins; v++) {
310 if(what == kHits || what == kHitsTrVtx)
311 hPrimVtx = (TH1F*)fMultList[what]->FindObject(Form("hMCHits_vtxbin%d_%s",v,fAnalysisNames[what]));
313 hPrimVtx = (TH1F*)fList->FindObject(GetPrimName(what,det,ringChar,v));
316 Float_t nPrimevents = hMCEvents->GetBinContent(v+1);
317 Float_t xb = hPrimVtx->GetNbinsX();
318 Float_t xr = hPrimVtx->GetXaxis()->GetXmax() - hPrimVtx->GetXaxis()->GetXmin();
319 hPrimVtx->Scale(xb / xr );
321 hPrimVtx->Scale(1/nPrimevents);
325 Double_t delta = 2*pars->GetVtxCutZ()/pars->GetNvtxBins();
326 Float_t vtxZ1 = (delta*v) - pars->GetVtxCutZ();
327 Float_t vtxZ2 = (delta*(v+1)) - pars->GetVtxCutZ();
329 if(vtxZ1< fVtxCut1 || vtxZ2 >fVtxCut2)
331 Float_t nEvents = (Float_t)hEvents->GetBinContent(v+1);
333 //TH1F* multhistproj = (TH1F*)fList->FindObject(Form("dNdeta_FMD%d%c_vtxbin%d_proj",det,ringChar,v));
340 TH1F* multhistproj = (TH1F*)fList->FindObject(GetAnalysisName(what,det,ringChar,v));
342 multhistproj->Scale(1/nEvents);
343 Float_t xnBins = multhistproj->GetNbinsX();
344 Float_t xrange = multhistproj->GetXaxis()->GetXmax() - multhistproj->GetXaxis()->GetXmin();
345 multhistproj->Scale(xnBins / xrange);
347 TH2F* multhist = (TH2F*)fList->FindObject(Form("dNdeta_FMD%d%c_vtxbin%d",det,ringChar,v));
351 // multhist->Scale(1/nEvents);
352 /* for(Int_t i=1;i<=multhist->GetNbinsX();i++) {
353 for(Int_t j=1;j<=multhist->GetNbinsY();j++) {
355 if (multhist->GetBinContent(i,j) <= 0.0001) continue;
356 //std::cout<<multhist->GetBinContent(i,j)<<std::endl;
357 fDataObject->Fill(multhist->GetXaxis()->GetBinCenter(i),
358 multhist->GetYaxis()->GetBinCenter(j),
360 multhist->GetBinContent(i,j), multhist->GetBinError(i,j));
361 //fDataObject->SetBinContent(i,j,v,multhist->GetBinContent(i,j));
362 //fDataObject->SetBinError(i,j,v,multhist->GetBinError(i,j));
367 // multhist->Scale(1/nEvents);
368 //if(ringChar == 'O')
369 // multhist->RebinY(2);
372 Int_t nNonZero = 0, nNonZeroInData = 0;
374 for(Int_t i =1;i<=multhistproj->GetNbinsX();i++) {
375 if(multhistproj->GetBinContent(i) !=0)
378 Int_t nBinsOld = fNbinsToCut;
379 if(det == 1 && ringChar =='I') {
382 TH1F* hRingMult = (TH1F*)fMultList[what]->FindObject(Form("hRingMult_FMD%d%c_%s",det,ringChar,fAnalysisNames[what]));
384 for(Int_t i=1; i<=hRingMult->GetNbinsX(); i++) {
385 if(multhistproj->GetBinContent(i)!=0) {
387 if(nNonZeroInData <=fNbinsToCut || nNonZeroInData > (nNonZero - fNbinsToCut)) {
390 Float_t oldweight = 0;
392 if(hRingMult->GetBinError(i)>0) {
393 oldweight = 1/TMath::Power(hRingMult->GetBinError(i),2);
394 oldwav = oldweight*hRingMult->GetBinContent(i);
396 Float_t weight = 1/TMath::Power(multhistproj->GetBinError(i),2);
397 Float_t wav = oldwav + weight*multhistproj->GetBinContent(i);
398 Float_t sumofw = oldweight + weight;
400 Float_t error = 1/TMath::Sqrt(sumofw);
402 hRingMult->SetBinContent(i,wav/sumofw);
403 hRingMult->SetBinError(i,error);
410 TH1F* sumMultHist = (TH1F*)fMultList[what]->FindObject(Form("hMult_vtxbin%d_%s",v,fAnalysisNames[what]));
412 for(Int_t i =1;i<=sumMultHist->GetNbinsX();i++) {
413 if(multhistproj->GetBinContent(i) != 0 ) {
416 if(nNonZeroInData <=fNbinsToCut || nNonZeroInData > (nNonZero - fNbinsToCut)) {
419 if(sumMultHist->GetBinContent(i) < SMALLNUMBER && TMath::Abs(multhistproj->GetBinContent(i)) > 0){
420 sumMultHist->SetBinContent(i,multhistproj->GetBinContent(i));
421 sumMultHist->SetBinError(i,multhistproj->GetBinError(i));
426 Float_t sumofw = (1/TMath::Power(multhistproj->GetBinError(i),2)) + (1/TMath::Power(sumMultHist->GetBinError(i),2));
427 Float_t wav = (multhistproj->GetBinContent(i)*(1/TMath::Power(multhistproj->GetBinError(i),2)) + sumMultHist->GetBinContent(i)*(1/TMath::Power(sumMultHist->GetBinError(i),2)))/sumofw;
428 Float_t error = 1/TMath::Sqrt(sumofw);
429 sumMultHist->SetBinContent(i, wav);
430 sumMultHist->SetBinError(i, error);
436 fNbinsToCut = nBinsOld;
442 TH1F* sumMult = new TH1F(Form("dNdeta_%s",fAnalysisNames[what]),Form("dNdeta_%s",fAnalysisNames[what]),nEtaBins,etaMin,etaMax);
444 fMultList[what]->Add(sumMult);
445 TH1F* primMult = new TH1F(Form("primary_%s",fAnalysisNames[what]),Form("primary_%s",fAnalysisNames[what]),nEtaBins,etaMin,etaMax);
447 fMultList[what]->Add(primMult);
449 Float_t wav = 0, sumofw=0, weight = 0, primwav = 0, primsumofw=0, primweight = 0;//, etaofbin = 0;
450 for(Int_t i =1; i<=sumMult->GetNbinsX();i++) {
452 for(Int_t v = 0; v<nVertexBins;v++) {
453 if(what == kHits || what == kHitsTrVtx)
454 hPrimVtx = (TH1F*)fMultList[what]->FindObject(Form("hMCHits_vtxbin%d_%s",v,fAnalysisNames[what]));
456 hPrimVtx = (TH1F*)fList->FindObject(GetPrimName(what,0,0,v));
457 TH1F* sumMultHist = (TH1F*)fMultList[what]->FindObject(Form("hMult_vtxbin%d_%s",v,fAnalysisNames[what]));
458 //etaofbin += sumMultHist->GetBinCenter(i);
459 // if( hPrimVtx->GetBinContent(i)!=0 && hPrimVtx->GetBinError(i)>0.001 && sumMultHist->GetBinContent(i)!=0) {
460 if( TMath::Abs(hPrimVtx->GetBinContent(i)) > 0) {
461 primweight = 1/TMath::Power(hPrimVtx->GetBinError(i),2);
462 primwav = primwav + primweight*hPrimVtx->GetBinContent(i);
463 primsumofw = primsumofw + primweight;
465 if(TMath::Abs(sumMultHist->GetBinContent(i)) > 0) {
467 weight = 1/TMath::Power(sumMultHist->GetBinError(i),2);
468 wav = wav + weight*sumMultHist->GetBinContent(i);
469 sumofw = sumofw + weight;
473 if( primsumofw !=0 ) {// && sumofw !=0) {
474 Float_t primerror = 1/TMath::Sqrt(primsumofw);
476 primMult->SetBinContent(i,primwav/primsumofw);
477 primMult->SetBinError(i,primerror);
480 primMult->SetBinContent(i,0);
481 primMult->SetBinError(i,0);
486 Float_t error = 1/TMath::Sqrt(sumofw);
488 sumMult->SetBinContent(i,wav/sumofw);
489 sumMult->SetBinError(i,error);
503 //_____________________________________________________________________
504 void AliFMDDndeta::DrawDndeta(Analysis what, Int_t rebin, Bool_t realdata) {
507 AliWarning("Not initialised - call Init to remedy");
511 if(!fIsGenerated[what]) {
512 AliWarning("Not generated - generate first then draw!");
518 Float_t x[19] = {0.125,0.375,0.625,0.875,1.125,1.375,1.625,1.875,2.125,2.375,
519 2.625,2.875,3.125,3.375,3.625,3.875,4.125,4.375,4.625};
520 Float_t x2[19] = {-0.125,-0.375,-0.625,-0.875,-1.125,-1.375,-1.625,-1.875,
521 -2.125,-2.375,-2.625,-2.875,-3.125,-3.375,-3.625,-3.875,
522 -4.125,-4.375,-4.625};
525 Float_t y[19] = {3.48, 3.38, 3.52, 3.68, 3.71, 3.86, 3.76, 3.66, 3.72 ,3.69,
526 3.56, 3.41, 3.15, 3.09, 2.74, 2.73, 2.32, 1.99, 1.69};
528 Float_t ey[19] = {0.07,0.07,0.07,0.07,0.07,0.07,0.07,0.07,0.07,0.07,0.07,
529 0.07,0.07,0.08,0.08,0.09,0.09,0.1,0.13};
531 TGraphErrors* graph = new TGraphErrors(19,x,y,NULL,ey);
532 TGraphErrors* graph2 = new TGraphErrors(19,x2,y,NULL,ey);
534 Float_t xinel[19] = {0.125, 0.375, 0.625, 0.875, 1.125, 1.375, 1.625, 1.875, 2.125, 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.125, 4.375, 4.625};
535 Float_t xinel2[19] = {-0.125, -0.375, -0.625, -0.875, -1.125, -1.375, -1.625, -1.875, -2.125, -2.375, -2.625, -2.875, -3.125, -3.375, -3.625, -3.875, -4.125, -4.375, -4.625};
536 Float_t yinel[19] = {3.14, 3.04, 3.17, 3.33, 3.33, 3.53, 3.46, 3.41, 3.45, 3.39, 3.07, 3.07, 2.93, 2.93, 2.55, 2.48, 2.18, 1.91, 1.52};
537 Float_t eyinel[19] = {0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.08, 0.08, 0.09, 0.09, 0.1, 0.13};
538 TGraphErrors* graphinel = new TGraphErrors(19,xinel,yinel,NULL,eyinel);
539 TGraphErrors* graphinel2 = new TGraphErrors(19,xinel2,yinel,NULL,eyinel);
541 graph->SetMarkerStyle(22);
542 graph->SetMarkerColor(kBlue);
543 graphinel->SetMarkerStyle(20);
544 graphinel->SetMarkerColor(kGreen);
545 graphinel2->SetMarkerStyle(24);
546 graphinel2->SetMarkerColor(kGreen);
548 graph2->SetMarkerStyle(26);
549 graph2->SetMarkerColor(kBlue);
550 graphinel->GetHistogram()->SetStats(kFALSE);
551 graphinel2->GetHistogram()->SetStats(kFALSE);
556 AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
557 TCanvas* c1 = new TCanvas("cvertexbins","Overlaps",1400,800);
559 TCanvas* cCorrections;
560 TCanvas* cCorrectionsPhi;
562 cCorrections = new TCanvas("corrections","Correction vs Eta",1400,800);
563 cCorrections->Divide(5,2);
565 cCorrectionsPhi = new TCanvas("correctionsPhi","Correction vs Phi",1400,800);
566 cCorrectionsPhi->Divide(5,2);
568 //TCanvas* cphi = new TCanvas("dNdphi","dNdphi",1280,1024);
569 // cphi->Divide(3,2);
571 Int_t nVertexBins = pars->GetNvtxBins();
573 TH1I* hEvents = (TH1I*)fList->FindObject(fEvents.Data());
575 TH1I* hMCEvents = (TH1I*)fList->FindObject(fPrimEvents.Data());
578 for(Int_t det = 1; det<=3; det++) {
579 Int_t maxRing = (det == 1 ? 0 : 1);
580 for(Int_t ring = 0;ring<=maxRing;ring++) {
583 for(Int_t v=0; v< nVertexBins; v++) {
584 Char_t ringChar = (ring == 0 ? 'I' : 'O');
585 Double_t delta = 2*pars->GetVtxCutZ()/pars->GetNvtxBins();
586 Float_t vtxZ1 = (delta*v) - pars->GetVtxCutZ();
587 Float_t vtxZ2 = (delta*(v+1)) - pars->GetVtxCutZ();
589 if(vtxZ1<fVtxCut1 || vtxZ2 >fVtxCut2)
591 Float_t nEvents = (Float_t)hEvents->GetBinContent(v+1);
593 TH2F* hBgCor = pars->GetBackgroundCorrection(det,ringChar,v);
595 TH1D* hBgProj = hBgCor->ProjectionX(Form("hBgProj_FMD%d%c_vtxbin%d",det,ringChar,v));
596 TH1D* hBgProjPhi = hBgCor->ProjectionY(Form("hBgProjPhi_FMD%d%c_vtxbin%d",det,ringChar,v));
598 hBgProjPhi->SetName(Form("FMD%d%c",det,ringChar));
599 hBgProjPhi->SetTitle("");//Form("FMD%d",det));
600 hBgProj->SetTitle("");
601 //Float_t scalefactor = (hBgProj->GetXaxis()->GetXmax() - hBgProj->GetXaxis()->GetXmin()) / (Float_t)hBgProj->GetNbinsX();
602 Float_t scalefactor = 1/(Float_t)hBgCor->GetNbinsY();
604 Float_t nFilledEtaBins = 0;
606 for(Int_t jj = 1; jj<=hBgProj->GetNbinsX(); jj++) {
607 if(hBgProj->GetBinContent(jj) > 0.01)
611 Float_t scalefactorPhi = 1/nFilledEtaBins;
614 hBgProj->Scale(scalefactor);
615 cCorrections->cd(v+1);
617 hBgProj->SetMarkerColor(det + 2*ring);
618 hBgProj->SetMarkerStyle(19 + det + 2*ring );
620 if((det + 2*ring) == 5) hBgProj->SetMarkerColor(det + 2*ring+1);
621 if((19 + det + 2*ring ) == 24) hBgProj->SetMarkerStyle(29 );
624 hBgProj->GetYaxis()->SetRangeUser(0,4);
625 hBgProj->SetStats(kFALSE);
626 hBgProj->SetXTitle("#eta");
627 hBgProj->DrawCopy("PE");
628 TLatex* l = new TLatex(0.14,0.92,Form("Vtx range [%.1f, %.1f]",vtxZ1,vtxZ2));
633 hBgProj->DrawCopy("PEsame");
635 hBgProjPhi->Scale(scalefactorPhi);
636 cCorrectionsPhi->cd(v+1);
637 hBgProjPhi->SetMarkerColor(det + 2*ring);
638 hBgProjPhi->SetMarkerStyle(19 + det + 2*ring );
639 if((det + 2*ring) == 5) hBgProjPhi->SetMarkerColor(det + 2*ring+1);
640 if((19 + det + 2*ring ) == 24) hBgProjPhi->SetMarkerStyle(29 );
642 hBgProjPhi->GetYaxis()->SetRangeUser(1,5);
643 hBgProjPhi->SetStats(kFALSE);
645 hBgProjPhi->SetXTitle("#Phi");
646 hBgProjPhi->DrawCopy("PE");
651 hBgProjPhi->DrawCopy("PEsame");
657 TH1F* multhistproj = (TH1F*)fList->FindObject(GetAnalysisName(what,det,ringChar,v));
662 multhistproj->SetMarkerStyle(20);
663 multhistproj->SetMarkerColor(1);
665 if(det==2 && ringChar=='I') {
666 multhistproj->SetMarkerStyle(21);
667 multhistproj->SetMarkerColor(2);
669 if(det==2 && ringChar=='O') {
670 multhistproj->SetMarkerStyle(3);
671 multhistproj->SetMarkerColor(3);
673 if(det==3 && ringChar=='I') {
674 multhistproj->SetMarkerStyle(22);
675 multhistproj->SetMarkerColor(4);
677 if(det==3 && ringChar=='O') {
678 multhistproj->SetMarkerStyle(23);
679 multhistproj->SetMarkerColor(6);
685 if(what == kHits || what == kHitsTrVtx)
686 hPrimVtx = (TH1F*)fMultList[what]->FindObject(Form("hMCHits_vtxbin%d_%s",v,fAnalysisNames[what]));
688 hPrimVtx = (TH1F*)fList->FindObject(GetPrimName(what,det,ringChar,v));
689 // std::cout<<hPrimVtx<<" "<<kHits<<" "<<kHitsTrVtx<<" "<<what<<std::endl;
690 //std::cout<<Form("hMCHits_vtxbin%d_%s",v,fAnalysisNames[what])<<std::endl;
691 hPrimVtx->SetTitle("");
692 TLatex* l = new TLatex(0.14,0.92,Form("Vtx range [%.1f, %.1f], %d events",vtxZ1,vtxZ2,(Int_t)nEvents));
694 hPrimVtx->SetFillColor(kGray);
695 hPrimVtx->SetLabelFont(132,"xyz");
696 hPrimVtx->SetStats(0000);
697 hPrimVtx->GetXaxis()->SetTitle("#eta");
698 hPrimVtx->GetYaxis()->SetRangeUser(0,6);
699 hPrimVtx->DrawCopy("E3");
701 multhistproj->DrawCopy("same");
702 if(what != kMultNSD) {
703 graphinel->Draw("sameP");
704 graphinel2->Draw("sameP");
708 graph->Draw("sameP");
709 graph2->Draw("sameP");
713 multhistproj->DrawCopy("same");
720 //Legends for corrections
722 for(Int_t v=0; v< nVertexBins; v++) {
723 TPad* pad= (TPad*)cCorrectionsPhi->cd(v+1);
724 pad->BuildLegend(0.15,0.45,0.45,0.9);
725 Double_t delta = 2*pars->GetVtxCutZ()/pars->GetNvtxBins();
726 Float_t vtxZ1 = (delta*v) - pars->GetVtxCutZ();
727 Float_t vtxZ2 = (delta*(v+1)) - pars->GetVtxCutZ();
728 TLatex* l = new TLatex(0.14,0.92,Form("Vtx range [%.1f, %.1f]",vtxZ1,vtxZ2));
733 for(Int_t v=0; v< nVertexBins; v++) {
734 TH1F* sumMultHist = (TH1F*)fMultList[what]->FindObject(Form("hMult_vtxbin%d_%s",v,fAnalysisNames[what]));
736 sumMultHist->SetMarkerStyle(25);
737 sumMultHist->DrawCopy("same");
740 TH1F* primMult = (TH1F*)fMultList[what]->FindObject(Form("primary_%s",fAnalysisNames[what]));
741 TH1F* sumMult = (TH1F*)fMultList[what]->FindObject(Form("dNdeta_%s",fAnalysisNames[what]));
742 sumMult->SetMarkerStyle(23);
743 sumMult->SetMarkerColor(kRed);
744 for(Int_t det = 1; det<=3;det++) {
745 Int_t maxRing = (det == 1 ? 0 : 1);
746 for(Int_t iring = 0; iring<=maxRing; iring++) {
747 Char_t ringChar = (iring == 0 ? 'I' : 'O');
748 TH1F* hRingMult= (TH1F*)fMultList[what]->FindObject(Form("hRingMult_FMD%d%c_%s",det,ringChar,fAnalysisNames[what]));
749 hRingMult->Add(primMult,-1);
750 hRingMult->Divide(primMult);
755 TH1D* hSPDana = (TH1D*)fList->FindObject(Form("dNdeta_SPD_vtxbin%d_proj",5));
757 for(Int_t nn = 0; nn < pars->GetNvtxBins() ; nn++) {
758 TH1D* hSPDanalysis = (TH1D*)fList->FindObject(Form("dNdeta_SPD_vtxbin%d_proj",nn));
759 TH1D* hSPDanalysisTrVtx = (TH1D*)fList->FindObject(Form("dNdetaTrVtx_SPD_vtxbin%d_proj",nn));
760 TH1D* hSPDanalysisNSD = (TH1D*)fList->FindObject(Form("dNdetaNSD_SPD_vtxbin%d_proj",nn));
762 Float_t nEventsSPD = (Float_t)hEvents->GetBinContent(nn+1);
764 hSPDanalysis->Scale(1/nEventsSPD);
765 hSPDanalysisTrVtx->Scale(1/nEventsSPD);
766 hSPDanalysisNSD->Scale(1/nEventsSPD);
769 TH1F* hSPDcombi = new TH1F("SPDcombi","SPDcombi",hSPDana->GetNbinsX(),hSPDana->GetXaxis()->GetXmin(),hSPDana->GetXaxis()->GetXmax());
770 TH1D* hSPDanalysis = 0;
771 for(Int_t kk = 1; kk <=hSPDana->GetNbinsX(); kk++) {
772 Float_t weight = 0, wav=0,sumofw = 0;
773 for(Int_t nn = 0; nn < pars->GetNvtxBins() ; nn++) {
775 hSPDanalysis = (TH1D*)fList->FindObject(Form("dNdeta_SPD_vtxbin%d_proj",nn));
777 hSPDanalysis = (TH1D*)fList->FindObject(Form("dNdetaNSD_SPD_vtxbin%d_proj",nn));
778 if(TMath::Abs(hSPDanalysis->GetBinCenter(kk)) > 2)
780 Float_t mult = hSPDanalysis->GetBinContent(kk);
781 Float_t error = hSPDanalysis->GetBinError(kk);
783 if(mult > 0 && hSPDanalysis->GetBinContent(kk-1) < SMALLNUMBER)
785 if(mult > 0 && hSPDanalysis->GetBinContent(kk-2) < SMALLNUMBER)
788 if(mult > 0 && hSPDanalysis->GetBinContent(kk+1) < SMALLNUMBER)
790 if(mult > 0 && hSPDanalysis->GetBinContent(kk+2) < SMALLNUMBER)
794 weight = 1/TMath::Power(error,2);
795 wav = wav + weight*mult;
796 sumofw = sumofw + weight;
802 Float_t errorTotal = 1/TMath::Sqrt(sumofw);
803 hSPDcombi->SetBinContent(kk,wav/sumofw);
804 hSPDcombi->SetBinError(kk,errorTotal);
809 Float_t xb1 = hSPDcombi->GetNbinsX();
810 Float_t xr1 = hSPDcombi->GetXaxis()->GetXmax() - hSPDcombi->GetXaxis()->GetXmin();
811 hSPDcombi->Scale(xb1 / xr1);
812 //hSPDcombi->Rebin(rebin);
813 //hSPDcombi->Scale(1/(Float_t)rebin);
814 //RebinHistogram(hSPDcombi,rebin);
815 hSPDcombi->SetMarkerStyle(29);
816 hSPDcombi->SetMarkerColor(kBlue);
817 hSPDcombi->DrawCopy("same");
821 //TH1F* hPrim = (TH1F*)fList->FindObject(fPrimEvents.Data());
822 // TFile testhit("/home/canute/ALICE/Simulations/TestOfAnalysis2/hitsdist.root");
823 // TH1F* hHitCor = (TH1F*)testhit.Get("selectedHits");
825 // sumMult->Divide(hHitCor);
826 TH1F* hPrim = (TH1F*)fList->FindObject(fPrimdNdeta.Data());
827 Float_t nPrimevents = hMCEvents->GetEntries();
828 //std::cout<<hMCEvents->GetEntries()<<std::endl;
829 Float_t xb = hPrim->GetNbinsX();
830 Float_t xr = hPrim->GetXaxis()->GetXmax() - hPrim->GetXaxis()->GetXmin();
831 //std::cout<<xb/xr<<std::endl;
832 hPrim->Scale(xb / xr );
834 hPrim->Scale(1/nPrimevents);
837 // primMult->Rebin(rebin);
838 // primMult->Scale(1/rebin);
839 // hPrim->Rebin(rebin);
840 // hPrim->Scale(1/rebin);
841 if(what != kHits && what != kHitsTrVtx)
844 // hReldif->Add(hPrim,-1);
845 // hReldif->Divide(hPrim);
849 /////////////*******************New thing!!!
851 //TH3D* hist3d = (TH3D*)fDataObject->ProjectionXYZ("hist3d");
852 // fDataObject->Sumw2();
853 //TH2F* projeta = (TH2F*)fDataObject->Project3D("yx");
855 // TProfile2D* projeta = fDataObject->Project3DProfile("yx");
856 // projeta->SetSumw2();
857 //TProfile* etaprofile = projeta->ProfileX("dNdeta_profile");
858 //TProfile* etaprofile = projeta->ProfileX("dNdeta_profile");
859 // TH1* etaprofile = projeta->ProjectionX("dNdeta_profile");
860 //TProfile* etaprofile = fDataObject->ProfileX();
862 TCanvas* ctest = new TCanvas("test","test",1200,600);
865 fDataObject->DrawCopy("box");
867 projeta->DrawCopy("colz");
869 etaprofile->DrawCopy();
871 //sumMult->Rebin(rebin);
872 TH1F* hReldif = (TH1F*)sumMult->Clone("hReldif");
874 RebinHistogram(sumMult,rebin);
876 RebinHistogram(primMult,rebin);
877 RebinHistogram(hReldif,rebin);
880 hReldif->Add(primMult,-1);
881 hReldif->Divide(primMult);
882 TCanvas* c2 = new TCanvas("dN/deta","dN/deta",640,960);
883 c2->Divide(1,2);//,0,0);
889 hReldif->SetTitle("");
890 hReldif->GetYaxis()->SetTitle("Relative difference");
891 hReldif->GetYaxis()->SetRangeUser(-0.2,0.2);
892 hReldif->SetStats(0000);
893 hReldif->GetXaxis()->SetTitle("#eta");
897 TH1F* hReldifSPD = (TH1F*)hSPDcombi->Clone("hReldifSPD");
899 RebinHistogram(hSPDcombi,rebin);
901 RebinHistogram(hReldifSPD,rebin);
904 hReldifSPD->Add(primMult,-1);
905 hReldifSPD->Divide(primMult);
906 hReldifSPD->DrawCopy("same");
908 TLine* zeroLine = new TLine(-4,0,6,0);
909 zeroLine->SetLineWidth(2);
910 zeroLine->SetLineColor(kBlack);
913 hPrim->SetLabelFont(132,"xyz");
914 hPrim->SetFillColor(kGray);
915 primMult->SetFillColor(kBlue);
921 hPrim->GetYaxis()->SetRangeUser(2,10);
922 //hPrim->GetYaxis()->SetRangeUser(0,20);
923 hPrim->SetStats(0000);
924 hPrim->GetXaxis()->SetTitle("#eta");
925 sumMult->SetTitle("");
926 sumMult->SetStats(kFALSE);
927 sumMult->SetXTitle("#eta");
928 sumMult->SetYTitle("#frac{dN}{d#eta_{ch}}");
929 // sumMult->GetYaxis()->SetRangeUser
930 //sumMult->Scale(1/(Float_t)rebin);
931 sumMult->DrawCopy("PE");
933 TH1F* sumMultSystPos = (TH1F*)sumMult->Clone("systerrorsPos");
934 TH1F* sumMultSystNeg = (TH1F*)sumMult->Clone("systerrorsNeg");
935 for(Int_t jj = 1;jj <=sumMultSystPos->GetNbinsX();jj++) {
936 if(sumMultSystPos->GetBinCenter(jj) < 0) {
937 sumMultSystPos->SetBinError(jj,0);
938 sumMultSystPos->SetBinContent(jj,0);
942 if(sumMultSystPos->GetBinContent(jj) > 0)
943 sumMultSystPos->SetBinError(jj,TMath::Sqrt(TMath::Power(sumMultSystPos->GetBinError(jj),2)+TMath::Power(0.1*sumMultSystPos->GetBinContent(jj),2)));
945 for(Int_t jj = 1;jj <=sumMultSystNeg->GetNbinsX();jj++) {
946 if(sumMultSystNeg->GetBinCenter(jj) > 0) {
947 sumMultSystNeg->SetBinError(jj,0);
948 sumMultSystNeg->SetBinContent(jj,0);
952 if(sumMultSystNeg->GetBinContent(jj) > 0)
953 sumMultSystNeg->SetBinError(jj,TMath::Sqrt(TMath::Power(sumMultSystNeg->GetBinError(jj),2)+TMath::Power(0.1*sumMultSystNeg->GetBinContent(jj),2)));
958 sumMultSystPos->SetFillColor(18);
959 sumMultSystNeg->SetFillColor(18);
960 sumMultSystPos->DrawCopy("sameE5");
961 sumMultSystNeg->DrawCopy("sameE5");
966 if(what != kHits && what != kHitsTrVtx && hPrim->GetEntries())
967 hPrim->DrawCopy("E3same");
968 if(what == kHits || what == kHitsTrVtx)
969 primMult->DrawCopy("E3same");
970 hPrim->GetXaxis()->SetTitle("#eta");
972 TH1F* hMirror = new TH1F("hMirror","mirrored",sumMult->GetNbinsX(),sumMult->GetXaxis()->GetXmin(),sumMult->GetXaxis()->GetXmax());
974 for(Int_t i=0.5*sumMult->GetNbinsX(); i<=sumMult->GetNbinsX(); i++) {
975 Float_t eta = sumMult->GetBinCenter(i);
976 Float_t value = sumMult->GetBinContent(i);
977 Float_t error = sumMult->GetBinError(i);
979 hMirror->SetBinContent(hMirror->FindBin(-1*eta),value);
980 hMirror->SetBinError(hMirror->FindBin(-1*eta),error);
983 TH1F* hReldifLR = (TH1F*)sumMult->Clone("hReldifLeftRight");
984 hReldifLR->Add(hMirror,-1);
985 hReldifLR->Divide(hMirror);
988 hReldifLR->GetYaxis()->SetRangeUser(-0.2,0.2);
990 hReldifLR->SetYTitle("Relative difference left-right");
991 hReldifLR->SetLabelSize(2*hReldifLR->GetLabelSize("X"),"X");
992 hReldifLR->SetLabelSize(2*hReldifLR->GetLabelSize("Y"),"Y");
993 hReldifLR->SetTitleSize(2*hReldifLR->GetTitleSize("X"),"X");
994 hReldifLR->SetTitleSize(2*hReldifLR->GetTitleSize("Y"),"Y");
995 hReldifLR->SetTitleOffset(0.7*hReldifLR->GetTitleOffset("X"),"X");
996 hReldifLR->SetTitleOffset(0.5*hReldifLR->GetTitleOffset("Y"),"Y");
1000 hReldifLR->DrawCopy();
1003 hMirror->SetMarkerStyle(25);
1005 hPrim->SetMarkerStyle(8);
1007 //graph2->Draw("P");
1008 TH1F* hPythiaMB = 0;
1011 if(pars->GetEnergy() == AliFMDAnaParameters::k7000)
1012 fpyt = TFile::Open("/home/canute/ALICE/FMDanalysis/FirstAnalysis/pythia_study/pythiahists7000.root","READ");
1013 else if(pars->GetEnergy() == AliFMDAnaParameters::k900)
1014 fpyt = TFile::Open("/home/canute/ALICE/FMDanalysis/FirstAnalysis/pythia_study/pythiahists900.root","READ");
1018 hPythiaMB = (TH1F*)fpyt->Get("hPythiaMB");
1021 std::cout<<"no pythia for this energy"<<std::endl;
1023 if(what != kHits && what != kHitsTrVtx) {
1024 if(hPrim->GetEntries() != 0 && !realdata)
1025 hPrim->DrawCopy("PE3same");
1027 //graph->Draw("PEsame");
1028 //graph2->Draw("PEsame");
1029 if(what != kMultNSD) {
1030 graphinel->Draw("PEsame");
1031 graphinel2->Draw("PEsame");
1034 graph->Draw("PEsame");
1035 graph2->Draw("PEsame");
1044 sumMult->DrawCopy("PEsame");
1048 hSPDcombi->DrawCopy("same");
1050 hMirror->DrawCopy("PEsame");
1052 TLegend* leg = new TLegend(0.3,0.2,0.7,0.45,"");
1054 if(what != kHits && what != kHitsTrVtx)
1055 leg->AddEntry(hPrim,"Primary","pf");
1057 leg->AddEntry(primMult,"Hits","pf");
1061 leg->AddEntry(sumMult,"FMD INEL","p");
1062 else if(what == kMultTrVtx)
1063 leg->AddEntry(sumMult,"FMD TrVtx","p");
1064 else if(what == kMultNSD)
1065 leg->AddEntry(sumMult,"FMD NSD","p");
1070 leg->AddEntry(hMirror,"FMD INEL","p");
1071 else if(what == kMultTrVtx)
1072 leg->AddEntry(hMirror,"FMD TrVtx","p");
1073 else if(what == kMultNSD)
1074 leg->AddEntry(hMirror,"FMD NSD","p");
1076 if(what == kMultNSD) {
1077 leg->AddEntry(graph,"UA5 NSD","p");
1078 leg->AddEntry(graph2,"Mirror UA5 NSD","p"); }
1079 else if(what == kMult) {
1080 leg->AddEntry(graphinel,"UA5 INEL","p");
1081 leg->AddEntry(graphinel2,"Mirror UA5 INEL","p");
1083 //leg->AddEntry(hPythiaMB,"Pythia MB","l");
1084 leg->AddEntry(hSPDcombi,"HHD SPD clusters","p");
1091 TH1F* hRatioMultPythia = 0;
1092 TH1F* hRatioMultUA5 = 0;
1096 if(hPythiaMB->GetNbinsX() != sumMult->GetNbinsX())
1097 ratio = (Float_t)sumMult->GetNbinsX() / (Float_t)hPythiaMB->GetNbinsX();
1098 hRatioMultPythia = (TH1F*)sumMult->Clone("hRatioMultPythia");
1099 hRatioMultUA5 = (TH1F*)sumMult->Clone("hRatioMultUA5");
1101 hRatioMultPythia->Rebin(ratio);
1102 hRatioMultPythia->Scale(1/ratio);
1105 hPythiaMB->Rebin(1/ratio);
1106 hPythiaMB->Scale(ratio);
1109 //hRatioMultPythia->Divide(hPythiaMB);
1111 for(Int_t j=1;j<=hRatioMultUA5->GetNbinsX(); j++) {
1112 Float_t data = hRatioMultUA5->GetBinContent(j);
1113 Float_t errordata = hRatioMultUA5->GetBinError(j);
1115 Float_t ua5error = 0;
1118 if(hRatioMultUA5->GetBinCenter(j) > 0) {
1119 Double_t* xv = graphinel->GetX();
1120 Double_t* yv = graphinel->GetY();
1121 Double_t* eyv = graphinel->GetEY();
1123 for(Int_t kk =0; kk<graphinel->GetN();kk++) {
1124 if(xv[kk] < hRatioMultUA5->GetBinCenter(j) && xv[kk+1] > hRatioMultUA5->GetBinCenter(j)) {
1132 Double_t* xv = graphinel2->GetX();
1133 Double_t* yv = graphinel2->GetY();
1134 Double_t* eyv = graphinel->GetEY();
1136 for(Int_t kk =0; kk<graphinel2->GetN();kk++) {
1137 if(xv[kk+1] < hRatioMultUA5->GetBinCenter(j) && xv[kk] > hRatioMultUA5->GetBinCenter(j)) {
1147 ratio2 = data / ua5;
1148 Float_t errorratio = 0;
1149 if(ua5 != 0 && data !=0)
1150 errorratio = ratio2*TMath::Sqrt(TMath::Power(ua5error/ua5,2)+TMath::Power(errordata/data,2));
1151 hRatioMultUA5->SetBinContent(j,ratio2);
1152 hRatioMultUA5->SetBinError(j,errorratio);
1157 if(what == kMultNSD)
1158 tmp1 = (TGraphErrors*)graph->Clone("UA5tmp");
1160 tmp1 = (TGraphErrors*)graphinel->Clone("UA5tmp");
1162 tmp1->Fit("pol8","Q0","Q0",1.5,6);
1163 TF1* hFit = tmp1->GetFunction("pol8");
1164 for(Int_t ii = hRatioMultUA5->GetNbinsX() / 2; ii<hRatioMultUA5->GetNbinsX();ii++) {
1165 if(hRatioMultUA5->GetBinContent(ii) > 0) {
1166 Float_t errorratio = hRatioMultUA5->GetBinError(ii) / hRatioMultUA5->GetBinContent(ii);
1167 hRatioMultUA5->SetBinContent(ii,
1168 hRatioMultUA5->GetBinContent(ii) /
1169 ((hRatioMultUA5->GetBinCenter(ii) > 4.8) ? hFit->Eval(hRatioMultUA5->GetBinCenter(ii-1)) : hFit->Eval(hRatioMultUA5->GetBinCenter(ii))));
1170 hRatioMultUA5->SetBinError(ii,hRatioMultUA5->GetBinContent(ii) * TMath::Sqrt(0.02*0.02 + TMath::Power(errorratio,2)));
1178 if(what == kMultNSD)
1179 tmp2 = (TGraphErrors*)graph2->Clone("UA5tmp2");
1181 tmp2 = (TGraphErrors*)graphinel2->Clone("UA5tmp2");
1183 //tmp2->Fit("pol8","Q0","Q0",-3.7,-1.5);
1184 tmp2->Fit("pol7","Q0","Q0",-3.7,0);
1185 hFit = tmp2->GetFunction("pol7");
1186 for(Int_t ii = 0; ii<hRatioMultUA5->GetNbinsX()/2;ii++) {
1187 if(hRatioMultUA5->GetBinContent(ii) > 0) {
1188 Float_t errorratio = hRatioMultUA5->GetBinError(ii) / hRatioMultUA5->GetBinContent(ii);
1189 hRatioMultUA5->SetBinContent(ii,hRatioMultUA5->GetBinContent(ii) / hFit->Eval(hRatioMultUA5->GetBinCenter(ii)) );
1190 hRatioMultUA5->SetBinError(ii,hRatioMultUA5->GetBinContent(ii) * TMath::Sqrt(0.02*0.02 + TMath::Power(errorratio,2)));
1195 graphinel->GetHistogram()->SetStats(kFALSE);
1196 graphinel2->GetHistogram()->SetStats(kFALSE);
1206 TLine* oneLine = new TLine(-4,1,6,1);
1207 oneLine->SetLineWidth(2);
1209 hRatioMultUA5->SetMarkerColor(kGreen);
1210 hRatioMultUA5->SetMarkerStyle(20);
1211 hRatioMultUA5->GetYaxis()->SetRangeUser(0.75,1.25);
1213 hRatioMultUA5->SetYTitle("Ratio FMD/UA5");
1214 hRatioMultUA5->SetLabelSize(2*hRatioMultUA5->GetLabelSize("X"),"X");
1215 hRatioMultUA5->SetLabelSize(2*hRatioMultUA5->GetLabelSize("Y"),"Y");
1216 hRatioMultUA5->SetTitleSize(2*hRatioMultUA5->GetTitleSize("X"),"X");
1217 hRatioMultUA5->SetTitleSize(2*hRatioMultUA5->GetTitleSize("Y"),"Y");
1218 hRatioMultUA5->SetTitleOffset(0.7*hRatioMultUA5->GetTitleOffset("X"),"X");
1219 hRatioMultUA5->SetTitleOffset(0.5*hRatioMultUA5->GetTitleOffset("Y"),"Y");
1223 hRatioMultUA5->DrawCopy();
1224 //hRatioMultPythia->DrawCopy("same");
1225 oneLine->Draw("same");
1228 TCanvas* cPaper = new TCanvas("FMD_SPD_UA5","FMD_SPD_UA5",800,600);
1231 sumMult->DrawCopy();
1232 sumMultSystPos->DrawCopy("sameE5");
1233 sumMultSystNeg->DrawCopy("sameE5");
1234 //hTestdNdeta->DrawCopy("same");
1235 hSPDcombi->DrawCopy("same");
1236 if(what != kMultNSD) {
1237 graphinel->Draw("PEsame");
1238 graphinel2->Draw("PEsame");
1241 graph->Draw("PEsame");
1242 graph2->Draw("PEsame");
1245 sumMult->DrawCopy("PEsame");
1248 c2->Print("fmdana.png");
1253 species.Form("mult");
1256 species.Form("mult_TrVtx");
1259 species.Form("hits");
1262 species.Form("hits_TrVtx");
1265 species.Form("mult_NSD");
1269 AliWarning("no valid Analysis entry!");
1272 TFile fout(Form("fmd_dNdeta_%s.root",species.Data()),"recreate");
1273 if(hRatioMultPythia)
1274 hRatioMultPythia->Write();
1276 graph->Write("UA5nsd");
1277 graph2->Write("UA5mirrornsd");
1278 graphinel->Write("UA5inel");
1279 graphinel2->Write("UA5mirrorinel");
1283 fMultList[what]->Write();
1285 //fDataObject->Write();
1289 //_____________________________________________________________________
1290 void AliFMDDndeta::CreateSharingEfficiency(const Char_t* filename, Bool_t store) {
1291 //Generate sharing efficiency
1293 AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
1294 //pars->Init(kTRUE,AliFMDAnaParameters::kBackgroundCorrection);
1295 Int_t nVertexBins = pars->GetNvtxBins();
1298 TH1I* hEvents = (TH1I*)fList->FindObject(fEvents.Data());
1299 TH1I* hPrimEvents = (TH1I*)fList->FindObject(fPrimEvents.Data());
1301 SetNames(kHitsTrVtx);
1302 TH1I* hEventsTrVtx = (TH1I*)fList->FindObject(fEvents.Data());
1303 TH1I* hPrimEventsTrVtx = (TH1I*)fList->FindObject(fPrimEvents.Data());
1305 AliFMDAnaCalibSharingEfficiency* sharEff = new AliFMDAnaCalibSharingEfficiency();
1307 for(Int_t det = 1; det<=3; det++) {
1308 Int_t maxRing = (det == 1 ? 0 : 1);
1309 for(Int_t ring = 0;ring<=maxRing;ring++) {
1310 Char_t ringChar = (ring == 0 ? 'I' : 'O');
1311 for(Int_t v=0; v< nVertexBins; v++) {
1312 TH1F* hHits = (TH1F*)fList->FindObject(GetAnalysisName(kHits,det, ringChar, v));
1313 TH1F* hHitsTrVtx = (TH1F*)fList->FindObject(GetAnalysisName(kHitsTrVtx,det, ringChar, v));
1314 TH1F* hMCHits = (TH1F*)fList->FindObject(GetPrimName(kHits,det, ringChar, v));
1315 TH1F* hMCHitsTrVtx = (TH1F*)fList->FindObject(GetPrimName(kHitsTrVtx,det, ringChar, v));
1317 TH1F* hCorrection = (TH1F*)hHits->Clone(Form("hCorrection_FMD%d%c_vtx%d"));
1318 TH1F* hCorrectionTrVtx = (TH1F*)hHitsTrVtx->Clone(Form("hCorrection_FMD%d%c_vtx%d"));
1319 if(hEvents->GetBinContent(v+1))
1320 hCorrection->Scale(1./(Float_t)hEvents->GetBinContent(v+1));
1321 if(hPrimEvents->GetBinContent(v+1))
1322 hMCHits->Scale(1./(Float_t)hPrimEvents->GetBinContent(v+1));
1323 if(hEventsTrVtx->GetBinContent(v+1))
1324 hCorrectionTrVtx->Scale(1./(Float_t)hEventsTrVtx->GetBinContent(v+1));
1325 if(hPrimEventsTrVtx->GetBinContent(v+1))
1326 hMCHitsTrVtx->Scale(1./(Float_t)hPrimEventsTrVtx->GetBinContent(v+1));
1328 hCorrection->Divide(hMCHits);
1329 hCorrectionTrVtx->Divide(hMCHitsTrVtx);
1331 //sharEff->SetSharingEff(det,ringChar,v,hCorrection);
1332 sharEff->SetSharingEff(det,ringChar,v,hCorrection);
1333 sharEff->SetSharingEffTrVtx(det,ringChar,v,hCorrectionTrVtx);
1335 // std::cout<<hHits<<" "<<hHitsTrVtx<<" "<<hPrim<<" "<<hPrimTrVtx<<std::endl;
1342 TFile fsharing(pars->GetPath(pars->GetSharingEffID()),"RECREATE");
1343 sharEff->Write(AliFMDAnaParameters::GetSharingEffID());
1348 //_____________________________________________________________________
1349 void AliFMDDndeta::RebinHistogram(TH1F* hist, Int_t rebin) {
1352 if(hist->GetNbinsX()%rebin) {
1353 std::cout<<"cannot rebin "<<hist->GetNbinsX()%rebin<< "is not zero"<<std::endl;
1357 TH1F* cloneHist = (TH1F*)hist->Clone();
1358 cloneHist->Rebin(rebin);
1360 Int_t nBinsNew = hist->GetNbinsX() / rebin;
1362 for(Int_t i =1;i<=nBinsNew; i++) {
1363 Float_t bincontent = 0;
1365 Float_t sumformean = 0;
1367 for(Int_t j=1; j<=rebin;j++) {
1368 if(hist->GetBinContent((i-1)*rebin + j) > 0) {
1369 bincontent = bincontent + hist->GetBinContent((i-1)*rebin + j);
1371 Float_t weight = 1 / TMath::Power(hist->GetBinError((i-1)*rebin + j),2);
1372 sumofw = sumofw + weight;
1373 sumformean = sumformean + weight*hist->GetBinContent((i-1)*rebin + j);
1378 if(bincontent > 0 ) {
1379 cloneHist->SetBinContent(i,sumformean / sumofw);
1380 cloneHist->SetBinError(i,TMath::Sqrt(sumformean));//TMath::Sqrt(1/sumofw));
1384 for(Int_t i =1;i<=nBinsNew; i++) {
1385 hist->SetBinContent(i,cloneHist->GetBinContent(i));
1390 //_____________________________________________________________________