1 /*************************************************************************
2 * Macro correctSPDdNdEta *
3 * To read data and correction histograms produced with *
4 * AliAnalysisTaskSPDdNdEta and apply corrections to data *
6 * Author: M. Nicassio (INFN Bari) *
7 * Contact: Maria.Nicassio@ba.infn.it, Domenico.Elia@ba.infn.it *
8 **************************************************************************/
10 #include "Riostream.h"
20 #include "TLegendEntry.h"
23 void correctSPDdNdEtapp (Char_t* fileRaw, Char_t* fileCorr, Char_t* fileMC, Char_t* fileAccPb,
24 Bool_t kPrimariesTest, Bool_t kAccPb,
25 Int_t binVtxStart, Int_t binVtxStop,
26 Double_t cutAccPb, Double_t cutAcc, Double_t cutBkg,
27 Double_t cutAlgEff, Double_t cutDec, Double_t cutVtx, Double_t cutTrig) {
29 //lim vtx: 5-15 ->[-10cm,10cm[; 0-20 ->[-20cm,20cm[
31 gStyle->SetOptLogy(kFALSE);
32 gStyle->SetFrameLineWidth(2);
33 gStyle->SetFrameFillColor(0);
34 gStyle->SetCanvasColor(0);
35 gStyle->SetPadColor(0);
36 gStyle->SetHistLineWidth(2);
37 gStyle->SetLabelSize(0.05, "x");
38 gStyle->SetLabelSize(0.05, "y");
39 gStyle->SetTitleSize(0.05, "x");
40 gStyle->SetTitleSize(0.05, "y");
41 gStyle->SetTitleOffset(1.1, "x");
42 gStyle->SetTitleOffset(0.9, "y");
43 gStyle->SetPadBottomMargin(0.14);
44 gStyle->SetPalette(1,0);
45 gStyle->SetTitleFillColor(0);
46 gStyle->SetStatColor(0);
49 TFile *f_accPb = new TFile(fileAccPb);
50 TFile *f_corr = new TFile(fileCorr);
51 TFile *f_MC = new TFile(fileMC);
52 TFile *f_raw = new TFile(fileRaw);
54 TList *l_corr = (TList*)f_corr->Get("cOutput");
55 TList *l_MC = (TList*)f_MC->Get("cOutput");
56 TList *l_raw = (TList*)f_raw->Get("cOutput");
58 //Corrections at track level
60 TH2F *hBackgroundCorr = new TH2F("backgroundCorr","Background correction",60,-3.,3.,20,-20.,20.);
61 hBackgroundCorr->Sumw2();
62 TH2F *hBackgroundCorrNum = (TH2F*)l_corr->At(32);
71 TH2F *hBackgroundCorrDen = (TH2F*)l_corr->At(corrHistoName);
72 hBackgroundCorr->Divide(hBackgroundCorrNum,hBackgroundCorrDen,1.,1.);
74 for (Int_t ieta=0; ieta<60; ieta++) {
75 for (Int_t jz=0; jz<20; jz++) {
76 Float_t den = hBackgroundCorrNum->GetBinContent(ieta+1,jz+1);
78 Float_t num = hBackgroundCorrDen->GetBinContent(ieta+1,jz+1)-den;
79 hBackgroundCorr->SetBinError(ieta+1,jz+1,(TMath::Sqrt(num)/den)/TMath::Power(hBackgroundCorr->GetBinContent(ieta+1,jz+1),2));
81 hBackgroundCorr->SetBinError(ieta+1,jz+1,0);
86 //Algorithm efficiency
87 TH2F *hTrackletRecEff = new TH2F("efficiencyCorr","Tracklet algorithm + SPD efficiency",60,-3,3,20,-20,20);
88 hTrackletRecEff->Sumw2();
89 TH2F *hTrackletEffCorr_num = new TH2F(*((TH2F*)l_corr->At(34)));
90 hTrackletEffCorr_num->Rebin2D(2,2,"");
91 hTrackletRecEff->Divide(hBackgroundCorrNum,hTrackletEffCorr_num,1.,1.,"b"); // 1/Efficiency=correction_weight
93 //Correction for particles that do not reach the sensitive layer
94 TH2F *hDecPartLay2Corr = new TH2F("decPartLay2Corr","Correction for particles not reaching the detector",60,-3.,3.,20,-20.,20.);
95 hDecPartLay2Corr->Sumw2();
96 TH2F *hPrimaries_evtTrVtx = new TH2F(*((TH2F*) l_corr->At(35)));
97 TH2F *hDetectablePrimariesLay2_evtTrVtx = new TH2F(*((TH2F*) l_corr->At(36)));
98 hDetectablePrimariesLay2_evtTrVtx->Rebin2D(2,2,"");
99 hDecPartLay2Corr->Divide(hDetectablePrimariesLay2_evtTrVtx,hPrimaries_evtTrVtx,1.,1.,"b");
102 TH2F *hAccCorr = new TH2F("accCorr_test","SPD acceptance correction",120,-3,3,40,-20,20);
105 TH2F *hAccNum = new TH2F(*((TH2F*)l_corr->At(34)));
107 TH2F *hAccDen = new TH2F(*((TH2F*)l_corr->At(36)));
111 hAccCorr->Divide(hAccNum,hAccDen,1.,1.,"b");
112 TH2F *hAccCorrRebin = new TH2F(*hAccCorr);
113 hAccCorrRebin->Sumw2();
114 // hAccCorrRebin->Rebin2D();
116 TH2F *hAccCorrPb = (TH2F*) f_accPb->Get("AccTrac");
118 //Vertex-trigger correction
119 TH2F *hVertexTrigCorrEtaNum = (TH2F*)l_corr->At(37);
120 TH2F *hTriggerCorrEta_norm = (TH2F*)l_corr->At(38);
121 TH2F *hVertexCorrEta_norm = (TH2F*)l_corr->At(35);
122 TH2F *hTrigCorrEtaNumNSD = (TH2F*)l_corr->At(39);
124 TH2F *hVertexCorrEta = new TH2F("vertexCorrEta","",60,-3.,3.,20,-20.,20.);
125 hVertexCorrEta->Sumw2();
126 hVertexCorrEta->Divide(hVertexCorrEta_norm,hTriggerCorrEta_norm,1.,1.,"b");
128 TH2F *hTriggerCorrEta = new TH2F("triggerCorrEta","",60,-3.,3.,20,-20.,20.);
129 hTriggerCorrEta->Sumw2();
130 hTriggerCorrEta->Divide(hTriggerCorrEta_norm,hVertexTrigCorrEtaNum,1.,1.,"b");
132 TH2F *hVertexTrigCorrEta = new TH2F("vertexTrigEtaCorr","Correction for MB trigger and vertexer inefficiency",60,-3.,3.,20,-20.,20.);
133 hVertexTrigCorrEta->Sumw2();
134 hVertexTrigCorrEta->Divide(hVertexCorrEta_norm,hVertexTrigCorrEtaNum,1.,1.,"b");
136 TH2F *hVertexTrigCorrEtaNSD = new TH2F("vertexTrigEtaCorrNSD","",60,-3.,3.,20,-20.,20.);
137 hVertexTrigCorrEtaNSD->Sumw2();
138 hVertexTrigCorrEtaNSD->Divide(hTrigCorrEtaNumNSD,hVertexCorrEta_norm,1.,1.);
140 TH2F *hTrigCorrEtaNSD = new TH2F("triggerCorrEtaNSD","",60,-3.,3.,20,-20.,20.);
141 hTrigCorrEtaNSD->Divide(hTriggerCorrEta_norm,hTrigCorrEtaNumNSD,1.,1.);
142 TH2F *hTrigCorrEtaNSDInv = new TH2F("triggerCorrEtaNSDInv","",60,-3.,3.,20,-20.,20.);
143 hTrigCorrEtaNSDInv->Divide(hTrigCorrEtaNumNSD,hTriggerCorrEta_norm,1.,1.);
145 TH2F *hTracksinTriggeredEvts_NSD = new TH2F(*(TH2F*)l_corr->At(40));
146 for (Int_t ieta=0; ieta<60; ieta++) {
147 for (Int_t jz=0; jz<20; jz++) {
148 Float_t den = hTrigCorrEtaNumNSD->GetBinContent(ieta+1,jz+1);
150 Float_t acc=hTracksinTriggeredEvts_NSD->GetBinContent(ieta+1,jz+1)/hTrigCorrEtaNumNSD->GetBinContent(ieta+1,jz+1);
151 Float_t binerr = TMath::Sqrt(acc*(1-acc)/den);
152 Float_t nonbinerr = TMath::Sqrt(hTriggerCorrEta_norm->GetBinContent(ieta+1,jz+1)-hTracksinTriggeredEvts_NSD->GetBinContent(ieta+1,jz+1))/den;
153 hTrigCorrEtaNSD->SetBinError(ieta+1,jz+1,TMath::Sqrt(TMath::Power(binerr,2)+TMath::Power(nonbinerr,2)));
155 hTrigCorrEtaNSD->SetBinError(ieta+1,jz+1,0);
160 //Corrections at event level
161 TH2F *hVertexTrigCorrNum = (TH2F*)l_corr->At(41);
162 TH2F *hTriggerCorr_norm = (TH2F*)l_corr->At(43);
163 TH2F *hVertexCorr_norm = (TH2F*)l_corr->At(42);
164 TH2F *hTriggerCorrNumNSD = (TH2F*)l_corr->At(44);
166 Int_t nBinMultCorr = 28;
167 Double_t binLimMultCorr[nBinMultCorr+1];
168 for (Int_t i = 0; i<nBinMultCorr+1; ++i) {
169 if (i<21) binLimMultCorr[i] = (Double_t) i;
170 else if (i<27) binLimMultCorr[i] = (Double_t) 20 +5*(i-20);
171 else if (i==27) binLimMultCorr[i] = 100;
172 else if (i==28) binLimMultCorr[i] = 200;
176 TH2F *hVertexCorr = new TH2F("vertexCorr","Vertex inefficiency correction",nBinMultCorr,binLimMultCorr,20,-20.,20.);
177 hVertexCorr->Sumw2();
178 hVertexCorr->Divide(hVertexCorr_norm,hTriggerCorr_norm,1.,1.,"b");
180 TH2F *hTriggerCorr = new TH2F("triggerCorr","MB trigger correction - inelastic events",nBinMultCorr,binLimMultCorr,20,-20.,20.);
181 hTriggerCorr->Sumw2();
182 hTriggerCorr->Divide(hTriggerCorr_norm,hVertexTrigCorrNum,1.,1.,"b");
184 TH2F *hTriggerCorrNSD = new TH2F("triggerCorrNSD","MB trigger correction - NSD events",nBinMultCorr,binLimMultCorr,20,-20.,20.);
185 hTriggerCorrNSD->Sumw2();
186 hTriggerCorrNSD->Divide(hTriggerCorr_norm,hTriggerCorrNumNSD,1.,1.);
187 TH2F *hTriggerCorrNSD2 = new TH2F("triggerCorrNSD2","",nBinMultCorr,binLimMultCorr,20,-20.,20.);
188 hTriggerCorrNSD2->Sumw2();
189 hTriggerCorrNSD2->Divide(hTriggerCorrNumNSD,hTriggerCorr_norm,1.,1.);
192 TH2F *hTriggeredEvts_NSD = new TH2F(*(TH2F*)l_corr->At(45));
193 for (Int_t im=0; im<28; im++) {
194 for (Int_t jz=0; jz<20; jz++) {
195 Float_t den = hTriggerCorrNumNSD->GetBinContent(im+1,jz+1);
197 Float_t acc=hTriggeredEvts_NSD->GetBinContent(im+1,jz+1)/hTriggerCorrNumNSD->GetBinContent(im+1,jz+1);
198 Float_t binerr = TMath::Sqrt(acc*(1-acc)/den);
199 Float_t nonbinerr = TMath::Sqrt(hTriggerCorr_norm->GetBinContent(im+1,jz+1)-hTriggeredEvts_NSD->GetBinContent(im+1,jz+1))/den;
200 hTriggerCorrNSD->SetBinError(im+1,jz+1,TMath::Sqrt(TMath::Power(binerr,2)+TMath::Power(nonbinerr,2)));
202 hTriggerCorrNSD->SetBinError(im+1,jz+1,0);
207 TH2F *hVertexMC2D = (TH2F*)l_MC->At(41);
208 TH1D *hMCvertex = new TH1D(*(hVertexMC2D->ProjectionY("MCvertex",0,-1,"e"))); //MC vertex distrib all events
209 // hMCvertex->Draw();
214 TH2F *hSPDEta_2Draw_accBin = new TH2F(*((TH2F*)l_raw->At(2)));
215 hSPDEta_2Draw_accBin->SetNameTitle("SPDEta_2Draw_accBin","");
216 TH2F *hSPDEta_2Draw = new TH2F(*((TH2F*)l_raw->At(2)));
217 hSPDEta_2Draw->SetNameTitle("SPDEta_2Draw","Reconstructed tracklets");
220 TH2F *hESDVertexvsNtracklets = new TH2F(*((TH2F*)l_raw->At(0)));
221 hESDVertexvsNtracklets->SetNameTitle("ESDVertexvsNtracklets","Triggered events with vertex");
222 TH2F *hESDVertexvsNtracklets_trigEvts = new TH2F(*((TH2F*)l_raw->At(1)));
223 hESDVertexvsNtracklets_trigEvts->SetNameTitle("ESDVertexvsNtracklets_trigEvts","Triggered events");
225 TH2F *hESDVertexvsNtracklets_Corr = new TH2F("ESDVertexvsNtracklets_Corr","",nBinMultCorr,binLimMultCorr,20,-20.,20.);
226 TH2F *hESDVertexvsNtracklets_CorrNSD = new TH2F("ESDVertexvsNtracklets_CorrNSD","",nBinMultCorr,binLimMultCorr,20,-20.,20.);
228 TH1D *hSPDvertex = (TH1D*)l_raw->At(19);
229 if (kPrimariesTest) {
230 hSPDEta_2Draw = new TH2F(*((TH2F*)l_MC->At(32)));
231 hSPDEta_2Draw->SetNameTitle("SPDEta_2Draw","");
232 hESDVertexvsNtracklets = new TH2F(*((TH2F*)l_MC->At(42)));
233 hESDVertexvsNtracklets_trigEvts = new TH2F(*((TH2F*)l_MC->At(43)));
235 hSPDvertex = hVertexCorr_norm->ProjectionY("MCvertex_RV",0,-1,"e");
238 if (!kPrimariesTest) hSPDEta_2Draw->Rebin2D(2,2,"");
242 //Computing the percentage of triggered events with vertex and tracklet mult!=0 for each rec vertex bin
243 //to distribute triggered events with tracklet mult = 0 in vertex bins.
244 TH1F* fHistZdistribTrigVtxEvt = new TH1F("fHistZdistribTrigVtxEvt", "",20,-20.,20.);
245 fHistZdistribTrigVtxEvt->Sumw2();
246 for (Int_t ivtx=0; ivtx<20; ivtx++) {
247 Float_t fracZ = (hESDVertexvsNtracklets->ProjectionY("_y",2,hESDVertexvsNtracklets->GetNbinsX()+1,"e"))->GetBinContent(ivtx+1)/
248 Float_t (hESDVertexvsNtracklets->ProjectionY("_y",2,hESDVertexvsNtracklets->GetNbinsX()+1,"e")->Integral(0,hESDVertexvsNtracklets->GetNbinsY()+1));
250 fHistZdistribTrigVtxEvt->SetBinContent(ivtx+1,fracZ);
251 //cout<<" Fractions of rec events: Num "<<hESDVertexvsNtracklets->ProjectionY("_y",2,hESDVertexvsNtracklets->GetNbinsX()+1,"e")->GetBinContent(ivtx+1)<<
252 // " Den "<<hESDVertexvsNtracklets->ProjectionY("_y",2,hESDVertexvsNtracklets->GetNbinsX()+1,"e")->Integral(0,hESDVertexvsNtracklets->GetNbinsY()+1)<<
253 // " Frac: "<<fracZ<<endl;
256 //Computing the MC correction for the previous %
257 TH1F* fHistEvtCorrFactor = new TH1F("fHistEvtCorrFactor", "",20,-20.,20.);
258 fHistEvtCorrFactor->Sumw2();
259 for (Int_t ivtx=0; ivtx<20; ivtx++) {
261 Float_t fracZnum = (hTriggerCorr_norm->GetBinContent(1,ivtx+1))/Float_t(hTriggerCorr_norm->ProjectionY("_y",1,1,"e")->Integral(0,hTriggerCorr_norm->GetNbinsY()+1));
263 //cout<<"Vertex bin "<<ivtx+1<<" Content per bin "<<hTriggerCorr_norm->GetBinContent(1,ivtx+1)<<" Integral "<<hTriggerCorr_norm->ProjectionY("_y",1,1,"e")->Integral(0,hTriggerCorr_norm->GetNbinsY()+1)<<" MC fraction of triggered events in 0-multiplicity bin "<<fracZnum<<endl;
265 Float_t fracZden = ((hVertexCorr_norm->ProjectionY("_y",2,hVertexCorr_norm->GetNbinsX()+1,"e"))->GetBinContent(ivtx+1))/Float_t(hVertexCorr_norm->ProjectionY("_y",2,hVertexCorr_norm->GetNbinsX()+1,"e")->Integral(0,hVertexCorr_norm->GetNbinsY()+1));
267 //cout<<" MC fraction of rec events (multSPD>0). Num "<<(hVertexCorr_norm->ProjectionY("_y",2,hVertexCorr_norm->GetNbinsX()+1,"e"))->GetBinContent(ivtx+1)<<" Den "<<hVertexCorr_norm->ProjectionY("_y",2,hVertexCorr_norm->GetNbinsX()+1,"e")->Integral(0,hVertexCorr_norm->GetNbinsY()+1)<<" fractions "<<fracZden<<endl;
270 Float_t ratioerr =0.;
272 ratio = fracZnum/fracZden;
275 fHistEvtCorrFactor->SetBinContent(ivtx+1,ratio);
276 fHistEvtCorrFactor->SetBinError(ivtx+1,ratioerr);
280 TH1F* hprod = new TH1F("prod", "",20,-20.,20.);
283 hprod->Multiply(fHistEvtCorrFactor,fHistZdistribTrigVtxEvt,1.,1.);
288 if (kPrimariesTest) {
289 histoNameRV = 46; //MC pseudorapidity, MC vertex
291 histoNameRV = 47; //MC pseudorapidity, rec vertex
294 TH2F *Eta_RV = (TH2F*)l_MC->At(histoNameRV);
295 TH2F *Eta = (TH2F*)l_MC->At(48);
298 TH1D *hdNdEta_RV = new TH1D("dNdEta_RV","Pseudorapidity ",60,-3,3);
299 hdNdEta_RV=Eta_RV->ProjectionX("dNdEta_RV",binVtxStart+1,binVtxStop,"e");
300 Double_t nEvtsRec=hSPDvertex->Integral(binVtxStart+1,binVtxStop);
301 cout<<"Number of reconstructed events: "<<nEvtsRec <<endl;
302 hdNdEta_RV->Scale(10./nEvtsRec);
304 TH1D *hdNdEta_Trigg = new TH1D("dNdEta_Trigg","Pseudorapidity ",60,-3,3);
305 TH2F *hEta_Trigg = new TH2F(*((TH2F*)l_MC->At(38)));
306 hdNdEta_Trigg=hEta_Trigg->ProjectionX("dNdEta_Trigg",0,-1,"e");
307 Double_t nEvtsTrigg=0;
308 nEvtsTrigg =hTriggerCorr_norm->Integral();
309 hdNdEta_Trigg->Scale(10./nEvtsTrigg);
310 cout<<"Number of triggered events: "<<nEvtsTrigg <<endl;
311 TH1D *hdNdEta = new TH1D("dNdEta","Pseudorapidity ",60,-3.,3.);
312 TH1D *hdNdEta10 = new TH1D("dNdEta10","Pseudorapidity ",60,-3.,3.);
314 hdNdEta = Eta->ProjectionX("dNdEta",0,-1,"e");
315 hdNdEta10 = Eta->ProjectionX("dNdEta10",binVtxStart+1,binVtxStop,"e");
316 Double_t nEvtsTot=hMCvertex->Integral(0,hMCvertex->GetNbinsX()+1);
317 Double_t nEvtsTot10= hMCvertex->Integral(binVtxStart+1,binVtxStop);
319 cout<<"Number of generated events in +-20cm: "<<nEvtsTot <<endl;
320 cout<<"Number of generated events in +-10cm: "<<nEvtsTot10 <<endl;
322 hdNdEta->Scale(10./nEvtsTot);
323 hdNdEta10->Scale(10./nEvtsTot10);
324 hdNdEta->GetXaxis()->SetTitle("Pseudorapidity #eta");
325 hdNdEta->GetYaxis()->SetTitle("dN_{ch}/d#eta");
328 TH1F *hdNdEtaNSD = (TH1F*)l_MC->At(51);
331 TH1F *hProcessType = (TH1F*)l_MC->At(52);
332 nEvtsNSD =hProcessType->GetBinContent(2);
333 // cout<<"NSD"<<endl;
334 cout<<"Number of generated NSD events in +-20cm: "<<nEvtsNSD <<endl;
335 hdNdEtaNSD->Scale(10./nEvtsNSD);
337 for (Int_t ibin=0; ibin<60; ibin++) hdNdEtaNSD->SetBinError(ibin+1,0);
339 TH1F *hdNdEtaMCInel = (TH1F*)l_MC->At(49);
340 TH1F *hdNdEtaMCNSD = (TH1F*)l_MC->At(69);
341 Double_t ntracksInel = hdNdEtaMCInel->GetBinContent(4);
342 Double_t ntracksNSD = hdNdEtaMCNSD->GetBinContent(4);
343 cout<<"dNdEtaMCInel: "<<ntracksInel/nEvtsTot<<endl;
344 cout<<"dNdEtaMCNSD: "<<ntracksNSD/nEvtsNSD<<endl;
346 //Corrected distributions
347 TH2F *hSPDEta_2D_bkgCorr = new TH2F("SPDEta_2D_bkgCorr", "",60,-3.,3.,20,-20.,20.);
348 hSPDEta_2D_bkgCorr->Sumw2();
349 TH2F *hSPDEta_2D_bkgEffCorr = new TH2F("SPDEta_2D_bkgEffCorr", "",60,-3.,3.,20,-20.,20.);
350 hSPDEta_2D_bkgEffCorr->Sumw2();
351 TH2F *hSPDEta_2D_bkgEffAccCorr = new TH2F("SPDEta_2D_bkgEffAccCorr", "",120,-3.,3.,40,-20.,20.);
352 hSPDEta_2D_bkgEffAccCorr->Sumw2();
353 TH2F *hSPDEta_2D_fullyCorr = new TH2F("SPDEta_2D_fullyCorr", "",60,-3.,3.,20,-20.,20.);
354 hSPDEta_2D_fullyCorr->Sumw2();
355 TH2F *hSPDEta_2D_triggeredEvts = new TH2F("SPDEta_2D_triggeredEvts","",60,-3.,3.,20,-20.,20.);
356 hSPDEta_2D_triggeredEvts->Sumw2();
357 TH2F *hSPDEta_2D_allEvts = new TH2F("SPDEta_2D_allEvts","",60,-3.,3.,20,-20.,20.);
358 hSPDEta_2D_allEvts->Sumw2();
359 TH2F *hSPDEta_2D_NSDEvts = new TH2F("SPDEta_2D_NSDEvts","",60,-3.,3.,20,-20.,20.);
360 hSPDEta_2D_NSDEvts->Sumw2();
363 TH1F *hnorm_bkgEffAccCorr = new TH1F("norm_bkgEffAccCorr", "",60,-3.,3.);
364 hnorm_bkgEffAccCorr->Sumw2();
365 TH1F *hnorm_fullyCorr = new TH1F("norm_fullyCorr", "",60,-3.,3.);
366 hnorm_fullyCorr->Sumw2();
367 TH1F *hnorm_triggered = new TH1F("norm_triggered", "",60,-3.,3.);
368 hnorm_triggered->Sumw2();
369 TH1F *hnorm = new TH1F("norm", "",60,-3.,3.);
371 TH1F *hnormNSD = new TH1F("normNSD", "",60,-3.,3.);
374 TH1F *hnorm_gen = new TH1F("norm_gen", "",60,-3.,3.);
378 TH1F *hdNdEta_raw = new TH1F("dNdEta_raw","", 60,-3.,3.);
379 hdNdEta_raw->Sumw2();
380 hdNdEta_raw->Add(hSPDEta_2Draw->ProjectionX("SPDEta_2Draw_x",binVtxStart+1,binVtxStop,"e"));
381 hdNdEta_raw->Scale(10./nEvtsRec);
383 TH1F *hdNdEta_bkgCorr = new TH1F("dNdEta_bkgCorr","", 60,-3.,3.);
384 hdNdEta_bkgCorr->Sumw2();
385 TH1F *hdNdEta_bkgEffCorr = new TH1F("dNdEta_bkgEffCorr","", 60,-3.,3.);
386 hdNdEta_bkgEffCorr->Sumw2();
387 TH1F *hdNdEta_bkgEffAccCorr = new TH1F("dNdEta_bkgEffAccCorr","", 60,-3.,3.);
388 hdNdEta_bkgEffAccCorr->Sumw2();
389 TH1F *hdNdEta_fullyCorr = new TH1F("dNdEta_fullyCorr","", 60,-3.,3.);
390 hdNdEta_fullyCorr->Sumw2();
391 TH1F *hdNdEta_triggeredEvts = new TH1F("dNdEta_triggeredEvts","", 60,-3.,3.);
392 hdNdEta_triggeredEvts->Sumw2();
393 TH1F *hdNdEta_allEvts = new TH1F("dNdEta_allEvts","", 60,-3.,3.);
394 hdNdEta_allEvts->Sumw2();
395 TH1F *hdNdEta_NSDEvts = new TH1F("dNdEta_NSDEvts","", 60,-3.,3.);
396 hdNdEta_NSDEvts->Sumw2();
398 //Cutting either on weights or on relative errors of weights
400 for (Int_t jeta=0; jeta<120; jeta++) {
401 for (Int_t kvtx=0; kvtx<40; kvtx++) {
402 if (hAccCorrPb->GetBinContent(jeta+1,kvtx+1) < cutAccPb) {
403 hAccCorrPb->SetBinContent(jeta+1,kvtx+1,0.);
404 hAccCorrPb->SetBinError(jeta+1,kvtx+1,0.);
408 for (Int_t jeta=0; jeta<60; jeta++) {
409 for (Int_t kvtx=0; kvtx<20; kvtx++) {
411 Float_t relErr = hAccCorr->GetBinError(jeta+1,kvtx+1)/hAccCorr->GetBinContent(jeta+1,kvtx+1);
413 hAccCorr->SetBinContent(jeta+1,kvtx+1,0.);
414 hAccCorr->SetBinError(jeta+1,kvtx+1,0.);
417 Float_t relBinErr = hBackgroundCorr->GetBinError(jeta+1,kvtx+1)/hBackgroundCorr->GetBinContent(jeta+1,kvtx+1);
418 if (relBinErr>cutBkg) {
419 hBackgroundCorr->SetBinContent(jeta+1,kvtx+1,0.);
420 hBackgroundCorr->SetBinError(jeta+1,kvtx+1,0.);
423 relBinErr = hTrackletRecEff->GetBinError(jeta+1,kvtx+1)/hTrackletRecEff->GetBinContent(jeta+1,kvtx+1);
424 if (relBinErr>cutAlgEff) {
425 hTrackletRecEff->SetBinContent(jeta+1,kvtx+1,0.);
426 hTrackletRecEff->SetBinError(jeta+1,kvtx+1,0.);
429 relBinErr = hDecPartLay2Corr->GetBinError(jeta+1,kvtx+1)/hDecPartLay2Corr->GetBinContent(jeta+1,kvtx+1);
430 if (relBinErr>cutDec) {
431 hDecPartLay2Corr->SetBinContent(jeta+1,kvtx+1,0.);
432 hDecPartLay2Corr->SetBinError(jeta+1,kvtx+1,0.);
435 relBinErr = hVertexCorrEta->GetBinError(jeta+1,kvtx+1)/hVertexCorrEta->GetBinContent(jeta+1,kvtx+1);
436 if (relBinErr>cutVtx) {
437 hVertexCorrEta->SetBinContent(jeta+1,kvtx+1,0.);
438 hVertexCorrEta->SetBinError(jeta+1,kvtx+1,0.);
440 relBinErr = hTriggerCorrEta->GetBinError(jeta+1,kvtx+1)/hTriggerCorrEta->GetBinContent(jeta+1,kvtx+1);
441 if (relBinErr>cutTrig) {
442 hTriggerCorrEta->SetBinContent(jeta+1,kvtx+1,0.);
443 hTriggerCorrEta->SetBinError(jeta+1,kvtx+1,0.);
445 relBinErr = hTrigCorrEtaNSD->GetBinError(jeta+1,kvtx+1)/hTrigCorrEtaNSD->GetBinContent(jeta+1,kvtx+1);
446 if (relBinErr>cutTrig) {
447 hTrigCorrEtaNSD->SetBinContent(jeta+1,kvtx+1,0.);
448 hTrigCorrEtaNSD->SetBinError(jeta+1,kvtx+1,0.);
450 if (hAccCorr->GetBinContent(jeta+1,kvtx+1)==0) {
451 hDecPartLay2Corr->SetBinContent(jeta+1,kvtx+1,0.); //show these correction only in bins inside the SPD acceptance
452 hDecPartLay2Corr->SetBinError(jeta+1,kvtx+1,0.);
453 hVertexTrigCorrEta->SetBinContent(jeta+1,kvtx+1,0.);
454 hVertexTrigCorrEta->SetBinError(jeta+1,kvtx+1,0.);
455 hVertexTrigCorrEtaNSD->SetBinContent(jeta+1,kvtx+1,0.);
456 hVertexTrigCorrEtaNSD->SetBinError(jeta+1,kvtx+1,0.);
457 hTrigCorrEtaNSDInv->SetBinContent(jeta+1,kvtx+1,0.);
458 hTrigCorrEtaNSDInv->SetBinError(jeta+1,kvtx+1,0.);
464 //Apply corrections at
466 hSPDEta_2D_bkgCorr->Add(hSPDEta_2Draw);
467 hSPDEta_2D_bkgCorr->Multiply(hBackgroundCorr);
468 hSPDEta_2D_bkgEffCorr->Divide(hSPDEta_2D_bkgCorr,hTrackletRecEff,1.,1.);
470 hSPDEta_2D_bkgEffAccCorr->Divide(hSPDEta_2Draw_accBin,hAccCorrPb,1.,1.);
471 hSPDEta_2D_bkgEffAccCorr->Rebin2D(2,2,"");
473 hSPDEta_2D_bkgEffAccCorr->Rebin2D(2,2,"");
474 hSPDEta_2D_bkgEffAccCorr->Divide(hSPDEta_2Draw,hAccCorr,1.,1.);
475 // hSPDEta_2D_bkgEffAccCorr->Divide(hSPDEta_2Draw_accBin,hAccCorr,1.,1.);
477 // hSPDEta_2D_bkgEffAccCorr->Rebin2D(2,2,"");
478 hSPDEta_2D_bkgEffAccCorr->Multiply(hBackgroundCorr);
479 hSPDEta_2D_bkgEffAccCorr->Divide(hTrackletRecEff);
480 hSPDEta_2D_fullyCorr->Add(hSPDEta_2D_bkgEffAccCorr);
481 hSPDEta_2D_fullyCorr->Divide(hDecPartLay2Corr);
482 hSPDEta_2D_triggeredEvts->Add(hSPDEta_2D_fullyCorr);
483 hSPDEta_2D_triggeredEvts->Divide(hVertexCorrEta);
484 hSPDEta_2D_allEvts->Add(hSPDEta_2D_triggeredEvts);
485 hSPDEta_2D_allEvts->Divide(hTriggerCorrEta);
486 hSPDEta_2D_NSDEvts->Add(hSPDEta_2D_triggeredEvts);
487 hSPDEta_2D_NSDEvts->Divide(hTrigCorrEtaNSD);
490 Double_t evtTrigNoTracklets = hESDVertexvsNtracklets_trigEvts->ProjectionY("_y",1,1,"e")->Integral(0,hESDVertexvsNtracklets_trigEvts->GetNbinsY()+1);
491 cout<<"Number of events triggered with tracklet multiplicity = 0: "<<evtTrigNoTracklets<<endl;
492 for (Int_t ivtx=0;ivtx<20;ivtx++) {
493 hESDVertexvsNtracklets_trigEvts->SetBinContent(1,ivtx+1,(hprod->GetBinContent(ivtx+1))*(evtTrigNoTracklets));
494 hESDVertexvsNtracklets_trigEvts->SetBinError(1,ivtx+1,TMath::Sqrt((TMath::Power(hprod->GetBinContent(ivtx+1),2)*evtTrigNoTracklets)+(TMath::Power(evtTrigNoTracklets,2)*TMath::Power(hprod->GetBinError(ivtx+1),2))));
495 // cout<<"bincont "<<hESDVertexvsNtracklets_trigEvts->GetBinContent(1,ivtx+1)<<" binerr "<<hESDVertexvsNtracklets_trigEvts->GetBinError(1,ivtx+1)<<endl;
498 hESDVertexvsNtracklets_Corr->Add(hESDVertexvsNtracklets_trigEvts);
499 hESDVertexvsNtracklets_Corr->Divide(hTriggerCorr);
500 hESDVertexvsNtracklets_CorrNSD->Add(hESDVertexvsNtracklets_trigEvts);
501 hESDVertexvsNtracklets_CorrNSD->Divide(hTriggerCorrNSD);
503 //Filling normalization histograms
505 TH1D *hSPDvertexCorr_y = new TH1D("SPDvertexCorr_y","",20,-20,20);
506 hSPDvertexCorr_y = hESDVertexvsNtracklets_Corr->ProjectionY("SPDvertexCorr_y",0,-1,"e");
507 cout<<"Number of events (tracklets corrected)"<<hSPDvertexCorr_y->Integral(binVtxStart+1,binVtxStop)<<endl;
508 for (Int_t ivtx=binVtxStart; ivtx<binVtxStop; ivtx++) {
509 Double_t nEvtsivtx = hSPDvertex->GetBinContent(ivtx+1);
510 Double_t nEvtsivtxCorr = hSPDvertexCorr_y->GetBinContent(ivtx+1);
511 Double_t nEvtsivtxCorr_triggered = hESDVertexvsNtracklets_trigEvts->ProjectionY("_y",0,-1,"e")->GetBinContent(ivtx+1);
513 Double_t nEvtsivtxCorr_NSD = hESDVertexvsNtracklets_CorrNSD->ProjectionY("_y",0,-1,"e")->GetBinContent(ivtx+1);
515 //Double_t nEvtGen = hMCvertex->GetBinContent(ivtx+1);
516 //cout<<"iBinVtx: "<<ivtx<<" nEvtsGen-> "<<nEvtGen<<" nEvtsCorr-> "<<nEvtsivtxCorr<<endl;
517 for (Int_t jeta=0; jeta<60; jeta++) {
518 if (hSPDEta_2D_bkgEffAccCorr->GetBinContent(jeta+1,ivtx+1)!=0.)
519 hnorm_bkgEffAccCorr->Fill(hBackgroundCorr->GetXaxis()->GetBinCenter(jeta+1),nEvtsivtx);
520 if (hSPDEta_2D_fullyCorr->GetBinContent(jeta+1,ivtx+1)!=0.)
521 hnorm_fullyCorr->Fill(hBackgroundCorr->GetXaxis()->GetBinCenter(jeta+1),nEvtsivtx);
522 if (hSPDEta_2D_triggeredEvts->GetBinContent(jeta+1,ivtx+1)!=0.)
523 hnorm_triggered->Fill(hBackgroundCorr->GetXaxis()->GetBinCenter(jeta+1),nEvtsivtxCorr_triggered);
524 if (hSPDEta_2D_allEvts->GetBinContent(jeta+1,ivtx+1)!=0.)
525 hnorm->Fill(hBackgroundCorr->GetXaxis()->GetBinCenter(jeta+1),nEvtsivtxCorr);
526 if (hSPDEta_2D_NSDEvts->GetBinContent(jeta+1,ivtx+1)!=0.)
527 hnormNSD->Fill(hBackgroundCorr->GetXaxis()->GetBinCenter(jeta+1),nEvtsivtxCorr_NSD);
531 for (Int_t jeta=0; jeta<60; jeta++) {
532 hnorm_bkgEffAccCorr->SetBinError(jeta+1,TMath::Sqrt(hnorm_bkgEffAccCorr->GetBinContent(jeta+1)));
533 hnorm_fullyCorr->SetBinError(jeta+1,TMath::Sqrt(hnorm_fullyCorr->GetBinContent(jeta+1)));
534 hnorm_triggered->SetBinError(jeta+1,TMath::Sqrt(hnorm_triggered->GetBinContent(jeta+1)));
535 hnorm->SetBinError(jeta+1,TMath::Sqrt(hnorm->GetBinContent(jeta+1)));
536 hnormNSD->SetBinError(jeta+1,TMath::Sqrt(hnorm->GetBinContent(jeta+1)));
539 hdNdEta_bkgCorr->Add(hSPDEta_2D_bkgCorr->ProjectionX("SPDEta_2D_bkgCorr_x",binVtxStart+1,binVtxStop,"e"));
540 hdNdEta_bkgCorr->Scale(1./nEvtsRec);
541 hdNdEta_bkgEffCorr->Add(hSPDEta_2D_bkgEffCorr->ProjectionX("SPDEta_2D_bkgEffCorr_x",binVtxStart+1,binVtxStop,"e"));
542 hdNdEta_bkgEffCorr->Scale(1./nEvtsRec);
543 hdNdEta_bkgEffAccCorr->Divide(hSPDEta_2D_bkgEffAccCorr->ProjectionX("SPDEta_2D_bkgEffAccCorr_x",binVtxStart+1,binVtxStop,"e"),hnorm_bkgEffAccCorr);
544 hdNdEta_fullyCorr->Divide(hSPDEta_2D_fullyCorr->ProjectionX("SPDEta_2D_fullyCorr_x",binVtxStart+1,binVtxStop,"e"),hnorm_fullyCorr);
545 hdNdEta_triggeredEvts->Divide(hSPDEta_2D_triggeredEvts->ProjectionX("SPDEta_2D_triggeredEvts_x",binVtxStart+1,binVtxStop,"e"),hnorm_triggered);
546 hdNdEta_allEvts->Divide(hSPDEta_2D_allEvts->ProjectionX("SPDEta_2D_allEvts_x",binVtxStart+1,binVtxStop,"e"),hnorm);
547 hdNdEta_NSDEvts->Divide(hSPDEta_2D_NSDEvts->ProjectionX("SPDEta_2D_NSDEvts_x",binVtxStart+1,binVtxStop,"e"),hnormNSD);
549 hdNdEta_bkgCorr->Scale(10.);
550 hdNdEta_bkgEffCorr->Scale(10.);
551 hdNdEta_bkgEffAccCorr->Scale(10.);
552 hdNdEta_fullyCorr->Scale(10.);
553 hdNdEta_triggeredEvts->Scale(10.);
554 hdNdEta_allEvts->Scale(10.);
555 hdNdEta_NSDEvts->Scale(10.);
557 TH1F* hRationorm=new TH1F("rationorm","",60,-3,3);
558 hRationorm->Add(hnorm);
559 hRationorm->Scale(1./nEvtsTot10);
561 TH1D *hdNdEta_test = new TH1D("dNdEta_test","Pseudorapidity ",60,-3,3);
562 TH2F *hMask_allEvts = new TH2F("Mask_allEvts","",60,-3,3,20,-20,20);
563 hMask_allEvts->Sumw2();
565 TH2F *Eta_test = new TH2F("Eta_test","",60,-3.,3.,20,-20.,20.);
566 if (kPrimariesTest) {
567 for (Int_t kvtx=0; kvtx<20; kvtx++) {
568 for (Int_t jeta=0; jeta<60; jeta++) {
569 if (hSPDEta_2D_allEvts->GetBinContent(jeta+1,kvtx+1)!=0) {
570 hMask_allEvts->SetBinContent(jeta+1,kvtx+1,1);
575 Eta_test->Multiply(Eta,hMask_allEvts,1.,1.);
576 hdNdEta_test->Divide(Eta_test->ProjectionX("eta_x",binVtxStart+1,binVtxStop,"e"),hnorm,1.,1.);
577 hdNdEta_test->Scale(10.);
580 // Generated/corrected ratios
581 TH2F* hRatiodNdEta2D=new TH2F("ratiodNdEta2D","",60,-3,3,20,-20,20);
582 // hRatiodNdEta2D->Divide(hSPDEta_2D_fullyCorr,Eta_RV,1.,1.);
583 if (kPrimariesTest) hRatiodNdEta2D->Divide(hSPDEta_2D_allEvts,Eta_test,1.,1.);
584 else hRatiodNdEta2D->Divide(hSPDEta_2D_allEvts,Eta,1.,1.);
586 TH1F* hRatiodNdEta=new TH1F("ratiodNdEta","",60,-3,3);
587 hRatiodNdEta->GetXaxis()->SetTitle("Pseudorapidity #eta");
588 hRatiodNdEta->GetYaxis()->SetTitle("Generated/Corrected");
590 TH1F* hRatiodNdEta10=new TH1F("ratiodNdEta10","",60,-3,3);
591 hRatiodNdEta10->Divide(hdNdEta,hdNdEta10);
593 // hRatiodNdEta10->Draw();
595 TH1F* hRatiodNdEtaNSD=new TH1F("ratiodNdEtaNSD","",60,-3,3);
596 hRatiodNdEtaNSD->GetXaxis()->SetTitle("Pseudorapidity #eta");
597 hRatiodNdEtaNSD->GetYaxis()->SetTitle("Generated/Corrected");
599 TH1F* hRatiodNdEta_vertex=new TH1F("ratiodNdEta_vertex","",60,-3,3);
600 TH1F* hRatiodNdEta_triggered=new TH1F("ratiodNdEta_triggered","",60,-3,3);
602 for (Int_t i=0;i<60;i++) hdNdEta->SetBinError(i+1,0.);
603 for (Int_t i=0;i<60;i++) hdNdEta_RV->SetBinError(i+1,0.);
605 if (kPrimariesTest) hRatiodNdEta->Divide(hdNdEta_test,hdNdEta_allEvts,1.,1.);
606 else hRatiodNdEta->Divide(hdNdEta,hdNdEta_allEvts,1.,1.);
607 hRatiodNdEtaNSD->Divide(hdNdEtaNSD,hdNdEta_NSDEvts,1.,1.);
608 hRatiodNdEta_vertex->Divide(hdNdEta_RV,hdNdEta_fullyCorr,1.,1.);
609 hRatiodNdEta_triggered->Divide(hdNdEta_Trigg,hdNdEta_triggeredEvts,1.,1.);
613 //Draw a canvas with correction maps at track level
614 TCanvas *ccorr = new TCanvas("c1","Tracklet level corrections and data");
617 hBackgroundCorr->GetXaxis()->SetTitle("Pseudorapidity #eta");
618 hBackgroundCorr->GetYaxis()->SetTitle("z_{vertex} [cm]");
619 hBackgroundCorr->GetXaxis()->SetRangeUser(-2,2);
620 hBackgroundCorr->GetYaxis()->SetRangeUser(-10.,8.);
621 hBackgroundCorr->SetMinimum(0.);
622 hBackgroundCorr->SetMaximum(1.);
623 hBackgroundCorr->Draw("colz");
625 hTrackletRecEff->GetXaxis()->SetTitle("Pseudorapidity #eta");
626 hTrackletRecEff->GetYaxis()->SetTitle("z_{vertex} [cm]");
627 hTrackletRecEff->GetXaxis()->SetRangeUser(-2,2);
628 hTrackletRecEff->GetYaxis()->SetRangeUser(-10.,8.);
629 hTrackletRecEff->Draw("colz");
631 hAccCorr->GetXaxis()->SetTitle("Pseudorapidity #eta");
632 hAccCorr->GetYaxis()->SetTitle("z_{vertex} [cm]");
633 hAccCorr->GetXaxis()->SetRangeUser(-2,2);
634 hAccCorr->GetYaxis()->SetRangeUser(-10.,8.);
635 hAccCorr->Draw("colz");
637 hDecPartLay2Corr->GetXaxis()->SetTitle("Pseudorapidity #eta");
638 hDecPartLay2Corr->GetYaxis()->SetTitle("z_{vertex} [cm]");
639 hDecPartLay2Corr->GetXaxis()->SetRangeUser(-2,2);
640 hDecPartLay2Corr->GetYaxis()->SetRangeUser(-10.,8.);
641 hDecPartLay2Corr->SetMinimum(0.9);
642 hDecPartLay2Corr->SetMaximum(1.);
643 hDecPartLay2Corr->Draw("colz");
645 hVertexTrigCorrEta->GetXaxis()->SetTitle("Pseudorapidity #eta");
646 hVertexTrigCorrEta->GetYaxis()->SetTitle("z_{vertex} [cm]");
647 hVertexTrigCorrEta->GetXaxis()->SetRangeUser(-2,2);
648 hVertexTrigCorrEta->GetYaxis()->SetRangeUser(-10.,8.);
649 hVertexTrigCorrEta->SetMinimum(0.99);
650 hVertexTrigCorrEta->SetMaximum(1.01);
651 hVertexTrigCorrEta->Draw("colz");
653 hSPDEta_2Draw->GetXaxis()->SetTitle("Pseudorapidity #eta");
654 hSPDEta_2Draw->GetYaxis()->SetTitle("z_{vertex} [cm]");
655 hSPDEta_2Draw->GetXaxis()->SetRangeUser(-2,2);
656 hSPDEta_2Draw->GetYaxis()->SetRangeUser(-10.,8.);
657 hSPDEta_2Draw->Draw("colz");
659 //Draw a canvas with correction maps at event level
660 TCanvas *ccorrev = new TCanvas("c2","Event level corrections and data");
661 ccorrev->Divide(3,3);
663 hVertexCorr->GetXaxis()->SetTitle("Tracklet multiplicity");
664 hVertexCorr->GetYaxis()->SetTitle("z_{MCvtx} [cm]");
665 hVertexCorr->GetXaxis()->SetRangeUser(0.,20.);
666 hVertexCorr->Draw("colz");
668 hTriggerCorr->GetXaxis()->SetTitle("Tracklet multiplicity");
669 hTriggerCorr->GetYaxis()->SetTitle("z_{MCvtx} [cm]");
670 hTriggerCorr->GetXaxis()->SetRangeUser(0.,20.);
671 hTriggerCorr->Draw("colz");
673 hTriggerCorrNSD->GetXaxis()->SetTitle("Tracklet multiplicity");
674 hTriggerCorrNSD->GetYaxis()->SetTitle("z_{MCvtx} [cm]");
675 hTriggerCorrNSD->GetXaxis()->SetRangeUser(0.,20.);
676 hTriggerCorrNSD->Draw("colz");
678 fHistZdistribTrigVtxEvt->GetYaxis()->SetTitle("Fraction of rec events per vertex bin");
679 fHistZdistribTrigVtxEvt->GetXaxis()->SetTitle("z_{SPDvtx} [cm]");
680 fHistZdistribTrigVtxEvt->Draw();
682 fHistEvtCorrFactor->GetYaxis()->SetTitle("Correction weight");
683 fHistEvtCorrFactor->GetXaxis()->SetTitle("z_{MCvtx} [cm]");
684 fHistEvtCorrFactor->Draw();
686 hESDVertexvsNtracklets->GetYaxis()->SetTitle("z_{SPDvtx} [cm]");
687 hESDVertexvsNtracklets->GetXaxis()->SetTitle("Tracklet mulitplicity");
688 hESDVertexvsNtracklets->GetXaxis()->SetRangeUser(0.,20.);
689 hESDVertexvsNtracklets->Draw("colz");
691 hESDVertexvsNtracklets_trigEvts->GetYaxis()->SetTitle("z_{SPDvtx} [cm]");
692 hESDVertexvsNtracklets_trigEvts->GetXaxis()->SetTitle("Tracklet mulitplicity");
693 hESDVertexvsNtracklets_trigEvts->GetXaxis()->SetRangeUser(0.,20.);
694 hESDVertexvsNtracklets_trigEvts->Draw("colz"); //bin mult=0 already distributed in z
697 hdNdEta_raw->SetLineColor(kGreen);
698 hdNdEta_raw->SetLineWidth(3);
700 hdNdEta_RV->SetLineWidth(3);
701 hdNdEta_RV->SetMinimum(0.);
702 hdNdEta_RV->SetMaximum(max);
703 hdNdEta_RV->SetLineColor(kRed);
704 // hdNdEta_RV->Draw("histo");
705 hdNdEta->SetLineWidth(3);
706 hdNdEta->SetMinimum(0.);
707 hdNdEta->SetMaximum(max);
710 hdNdEta->Draw("histo");
711 // hdNdEta_RV->Draw("histo,same");
713 hdNdEta_raw->Draw("histo,same");
715 hdNdEta_bkgCorr->SetMarkerStyle(21);
716 hdNdEta_bkgCorr->SetMarkerColor(kBlue);
718 hdNdEta_bkgCorr->Draw("same,p,histo");
720 hdNdEta_bkgEffCorr->SetMarkerStyle(22);
721 hdNdEta_bkgEffCorr->SetMarkerColor(kGreen);
723 hdNdEta_bkgEffAccCorr->SetMarkerStyle(23);
724 hdNdEta_bkgEffAccCorr->SetMarkerColor(kRed);
726 hdNdEta_bkgEffCorr->Draw("p,same,e");
727 hdNdEta_bkgEffAccCorr->Draw("p,same,e");
728 hdNdEta_fullyCorr->SetMarkerStyle(20);
729 hdNdEta_fullyCorr->SetMarkerColor(kBlue);
730 hdNdEta_fullyCorr->Draw("p,same,e");
732 hdNdEta_triggeredEvts->SetMarkerStyle(21);
733 hdNdEta_triggeredEvts->SetMarkerColor(kOrange);
734 hdNdEta_triggeredEvts->Draw("p,same,e");
736 hdNdEta_allEvts->SetMarkerStyle(21);
737 hdNdEta_allEvts->SetMarkerColor(kRed);
738 hdNdEta_allEvts->Draw("p,same,e");
740 TLegend *leg1 = new TLegend(0.2,0.7,0.7,0.9,NULL,"brNDC");
741 leg1->SetFillColor(0);
742 leg1->SetTextFont(62);
743 leg1->SetTextSize(0.0304569);
744 TLegendEntry *entry1=leg1->AddEntry(hdNdEta_raw,"Reconstructed","l");
745 entry1=leg1->AddEntry(hdNdEta,"Generated","l");
746 entry1=leg1->AddEntry(hdNdEta_bkgCorr,"Bkg corrected","p");
747 entry1=leg1->AddEntry(hdNdEta_bkgEffCorr,"Bkg+AlgEff+SPDEff corrected","p");
748 entry1=leg1->AddEntry(hdNdEta_bkgEffAccCorr,"Bkg+AlgEff+SPDAccEff corrected","p");
749 entry1=leg1->AddEntry(hdNdEta_fullyCorr,"Corrected (triggered events with vertex)","p");
750 entry1=leg1->AddEntry(hdNdEta_triggeredEvts,"Corrected (triggered events)","p");
751 entry1=leg1->AddEntry(hdNdEta_allEvts,"Corrected (all events)","p");
757 hdNdEta->Draw("histo");
758 hdNdEta_NSDEvts->SetMarkerStyle(21);
759 hdNdEtaNSD->SetLineColor(kGreen);
760 hdNdEta_allEvts->Draw("p,same,e");
761 hdNdEta_NSDEvts->Draw("same,p,e");
762 hdNdEtaNSD->Draw("histo,same");
764 TLegend *leg2 = new TLegend(0.3,0.7,0.7,0.9,NULL,"brNDC");
765 leg2->SetFillColor(0);
766 leg2->SetTextFont(62);
768 TLegendEntry *entry2=leg2->AddEntry(hdNdEta_allEvts,"Corrected INEL","p");
769 entry2=leg2->AddEntry(hdNdEta_NSDEvts,"Corrected NSD","p");
770 entry2=leg2->AddEntry(hdNdEta,"Generated INEL","l");
771 entry2=leg2->AddEntry(hdNdEtaNSD,"Generated NSD","l");
775 //Trigger-vertex efficiency
776 TH1F* fHistMultAllNonDiff = (TH1F*)l_MC->At(63);
777 TH1F* fHistMultAllSingleDiff = (TH1F*)l_MC->At(64);
778 TH1F* fHistMultAllDoubleDiff = (TH1F*)l_MC->At(65);
779 TH1F* fHistMultTrVtxNonDiff = (TH1F*)l_MC->At(66);
780 TH1F* fHistMultTrVtxSingleDiff = (TH1F*)l_MC->At(67);
781 TH1F* fHistMultTrVtxDoubleDiff = (TH1F*)l_MC->At(68);
783 TH1F* fHistTrigVtxEffvsMultEtacutNonDiff = new TH1F("fHistTrigVtxEffvsMultEtacutNonDiff","",20,-0.5,19.5);
784 fHistTrigVtxEffvsMultEtacutNonDiff->GetXaxis()->SetTitle("Multiplicity in |#eta|<1.4");
785 fHistTrigVtxEffvsMultEtacutNonDiff->GetYaxis()->SetTitle("Efficiency");
786 fHistTrigVtxEffvsMultEtacutNonDiff->Sumw2();
787 TH1F* fHistTrigVtxEffvsMultEtacutSingleDiff = new TH1F("fHistTrigVtxEffvsMultEtacutSingleDiff","",20,-0.5,19.5);
788 fHistTrigVtxEffvsMultEtacutSingleDiff->Sumw2();
789 TH1F* fHistTrigVtxEffvsMultEtacutDoubleDiff = new TH1F("fHistTrigVtxEffvsMultEtacutDoubleDiff","",20,-0.5,19.5);
790 fHistTrigVtxEffvsMultEtacutDoubleDiff->Sumw2();
791 fHistTrigVtxEffvsMultEtacutNonDiff->Divide(fHistMultTrVtxNonDiff,fHistMultAllNonDiff,1.,1.);
792 fHistTrigVtxEffvsMultEtacutSingleDiff->Divide(fHistMultTrVtxSingleDiff,fHistMultAllSingleDiff,1.,1.);
793 fHistTrigVtxEffvsMultEtacutDoubleDiff->Divide(fHistMultTrVtxDoubleDiff,fHistMultAllDoubleDiff,1.,1.);
797 fHistTrigVtxEffvsMultEtacutNonDiff->SetMarkerStyle(2);
798 fHistTrigVtxEffvsMultEtacutSingleDiff->SetMarkerStyle(25);
799 fHistTrigVtxEffvsMultEtacutDoubleDiff->SetMarkerStyle(24);
800 fHistTrigVtxEffvsMultEtacutNonDiff->GetYaxis()->SetRangeUser(0.,1.1);
801 fHistTrigVtxEffvsMultEtacutNonDiff->GetXaxis()->SetRangeUser(0.,10);
802 fHistTrigVtxEffvsMultEtacutNonDiff->Draw("p,histo");
803 fHistTrigVtxEffvsMultEtacutSingleDiff->Draw("same,p,histo");
804 fHistTrigVtxEffvsMultEtacutDoubleDiff->Draw("same,p,histo");
806 TLegend *leg3 = new TLegend(0.3,0.2,0.7,0.4444,NULL,"brNDC");
807 leg3->SetTextFont(62);
808 leg3->SetFillColor(0);
809 TLegendEntry *entry3=leg3->AddEntry(fHistTrigVtxEffvsMultEtacutNonDiff,"Non-diffractive","p");
810 entry3=leg3->AddEntry(fHistTrigVtxEffvsMultEtacutSingleDiff,"Single-diffractive","p");
811 entry3=leg3->AddEntry(fHistTrigVtxEffvsMultEtacutDoubleDiff,"Double-diffractive","p");
815 TH1F* hProcessTypeTriggered = (TH1F*)l_MC->At(53);
816 Float_t nInelTriggered = hProcessTypeTriggered->GetBinContent(3);
817 // Float_t nNSDTriggered = hProcessTypeTriggered->GetBinContent(2);
818 Float_t nNDTriggered = hProcessTypeTriggered->GetBinContent(1);
819 Float_t nSDTriggered = hProcessTypeTriggered->GetBinContent(4);
820 Float_t nDDTriggered = hProcessTypeTriggered->GetBinContent(5);
821 Float_t nND = hProcessType->GetBinContent(1);
822 Float_t nSD = hProcessType->GetBinContent(4);
823 Float_t nDD = hProcessType->GetBinContent(5);
825 cout<<"Number of events: Inel-->"<<hProcessType->GetBinContent(3)<<" ND-->"<<nND<<" SD-->"<<nSD<<" DD-->"<<nDD<<endl;
827 cout<<"Trigger efficiencies: Inel-->"<<nInelTriggered/nEvtsTot<<" ND-->"<<nNDTriggered/nND<<" SD-->"<<nSDTriggered/nSD<<" DD-->"<<nDDTriggered/nDD<<endl;
830 hRatiodNdEtaNSD->GetYaxis()->SetRangeUser(0.9,1.1);
831 hRatiodNdEtaNSD->GetXaxis()->SetRangeUser(-2.,1.9);
832 hRatiodNdEtaNSD->Draw();
834 hRatiodNdEta->GetYaxis()->SetRangeUser(0.9,1.1);
835 hRatiodNdEta->GetXaxis()->SetRangeUser(-2.,1.9);
836 hRatiodNdEta->Draw();
841 TFile *fout= new TFile("SPDdNdEta.root","RECREATE");
846 hBackgroundCorr->Write();
847 hTrackletRecEff->Write();
848 hDecPartLay2Corr->Write();
850 hSPDEta_2Draw_accBin->Write();
851 hSPDEta_2Draw->Write();
854 hSPDvertexCorr_y->Write();
855 hSPDEta_2D_bkgCorr->Write();
856 hSPDEta_2D_bkgEffCorr->Write();
857 hSPDEta_2D_bkgEffAccCorr->Write();
858 hSPDEta_2D_fullyCorr->Write();
859 hSPDEta_2D_triggeredEvts->Write();
860 hSPDEta_2D_allEvts->Write();
861 hSPDEta_2D_NSDEvts->Write();
863 hnorm_bkgEffAccCorr->Write();
864 hnorm_triggered->Write();
869 hVertexCorr->Write();
870 hTriggerCorr->Write();
871 hTriggerCorrNSD->Write();
872 hTriggerCorrNSD2->Write();
874 hVertexCorrEta->Write();
875 hTriggerCorrEta->Write();
876 hVertexTrigCorrEta->Write();
877 hVertexTrigCorrEtaNSD->Write();
878 hTrigCorrEtaNSD->Write();
879 hTrigCorrEtaNSDInv->Write();
881 fHistZdistribTrigVtxEvt->Write();
882 fHistEvtCorrFactor->Write();
884 hESDVertexvsNtracklets->Write();
885 hESDVertexvsNtracklets_trigEvts->Write();
886 hESDVertexvsNtracklets_Corr->Write();
887 hESDVertexvsNtracklets_CorrNSD->Write();
891 hdNdEta_bkgCorr->Write();
892 hdNdEta_bkgEffCorr->Write();
893 hdNdEta_bkgEffAccCorr->Write();
894 hdNdEta_fullyCorr->Write();
895 hdNdEta_triggeredEvts->Write();
896 hdNdEta_allEvts->Write();
897 hdNdEta_NSDEvts->Write();
899 hdNdEta_raw->Write();
901 hRatiodNdEta->Write();
902 hRatiodNdEtaNSD->Write();
903 hRatiodNdEta_triggered->Write();
904 hRatiodNdEta_vertex->Write();
905 hRatiodNdEta2D->Write();
914 hRatiodNdEta10->Write();
916 fHistTrigVtxEffvsMultEtacutNonDiff->Write();
917 fHistTrigVtxEffvsMultEtacutSingleDiff->Write();
918 fHistTrigVtxEffvsMultEtacutDoubleDiff->Write();