+ TH1F* hEventsAllNSD = (TH1F*)fListOfPrimaries.FindObject("EventsAllNSD");
+ TH1F* hEventsSelectedVtxDivByTr = (TH1F*)hEventsSelectedVtx->Clone("hEventsSelectedVtxDivByTr");
+ TH1F* hEventsSelectedNSDVtxDivByNSD = (TH1F*)hEventsSelectedNSDVtx->Clone("hEventsSelectedNSDVtxDivByNSD");
+
+ fListOfHits.Add(hEventsSelectedVtxDivByTr);
+ fListOfHits.Add(hEventsSelectedNSDVtxDivByNSD);
+ hEventsSelectedNSDVtxDivByNSD->Divide(hEventsSelectedNSD);
+ hEventsSelectedVtxDivByTr->Divide(hEventsSelectedTrigger);
+
+ for(Int_t v=0;v<fNvtxBins ; v++) {
+ TH2F* hAnalysedInner = (TH2F*)fListOfPrimaries.FindObject(Form("Analysed_FMD%c_vtx%d",'I',v));
+ TH2F* hAnalysedOuter = (TH2F*)fListOfPrimaries.FindObject(Form("Analysed_FMD%c_vtx%d",'O',v));
+ TH2F* hAnalysedNSDInner = (TH2F*)fListOfPrimaries.FindObject( Form("AnalysedNSD_FMD%c_vtx%d",'I',v));
+ TH2F* hAnalysedNSDOuter = (TH2F*)fListOfPrimaries.FindObject( Form("AnalysedNSD_FMD%c_vtx%d",'O',v));
+
+ TH2F* hInelInner = (TH2F*)fListOfPrimaries.FindObject(Form("Inel_FMD%c_vtx%d",'I',v));
+ TH2F* hInelOuter = (TH2F*)fListOfPrimaries.FindObject(Form("Inel_FMD%c_vtx%d",'O',v));
+ TH2F* hNSDInner = (TH2F*)fListOfPrimaries.FindObject( Form("NSD_FMD%c_vtx%d",'I',v));
+ TH2F* hNSDOuter = (TH2F*)fListOfPrimaries.FindObject( Form("NSD_FMD%c_vtx%d",'O',v));
+ // hAnalysedInner->Scale((hEventsSelected->GetBinContent(v+1) == 0 ? 0 : 1/hEventsSelected->GetBinContent(v+1)));
+ //hAnalysedOuter->Scale((hEventsSelected->GetBinContent(v+1) == 0 ? 0 : 1/hEventsSelected->GetBinContent(v+1)));
+
+ hAnalysedInner->Scale((hEventsSelectedTrigger->GetBinContent(v+1) == 0 ? 0 : 1/hEventsSelectedTrigger->GetBinContent(v+1)));
+
+ hAnalysedOuter->Scale((hEventsSelectedTrigger->GetBinContent(v+1) == 0 ? 0 : 1/hEventsSelectedTrigger->GetBinContent(v+1)));
+ hAnalysedNSDInner->Scale((hEventsSelectedNSD->GetBinContent(v+1) == 0 ? 0 : 1/hEventsSelectedNSD->GetBinContent(v+1)));
+
+ hAnalysedNSDOuter->Scale((hEventsSelectedNSD->GetBinContent(v+1) == 0 ? 0 : 1/hEventsSelectedNSD->GetBinContent(v+1)));
+
+
+
+ hInelInner->Scale((hEventsAll->GetBinContent(v+1) == 0 ? 0 : 1/hEventsAll->GetBinContent(v+1)));
+ hInelOuter->Scale((hEventsAll->GetBinContent(v+1) == 0 ? 0 : 1/hEventsAll->GetBinContent(v+1)));
+
+ hNSDInner->Scale((hEventsAllNSD->GetBinContent(v+1) == 0 ? 0 : 1/hEventsAllNSD->GetBinContent(v+1)));
+ hNSDOuter->Scale((hEventsAllNSD->GetBinContent(v+1) == 0 ? 0 : 1/hEventsAllNSD->GetBinContent(v+1)));
+
+
+ hAnalysedInner->Divide(hInelInner);
+ hAnalysedOuter->Divide(hInelOuter);
+
+ hAnalysedNSDInner->Divide(hNSDInner);
+ hAnalysedNSDOuter->Divide(hNSDOuter);
+
+ fEventSelectionEff->SetCorrection("INEL",v,'I',hAnalysedInner);
+ fEventSelectionEff->SetCorrection("INEL",v,'O',hAnalysedOuter);
+ //NSD
+ fEventSelectionEff->SetCorrection("NSD",v,'I',hAnalysedNSDInner);
+ fEventSelectionEff->SetCorrection("NSD",v,'O',hAnalysedNSDOuter);
+
+ //FMD dead channels
+ TH1F* hFMDReadChannels = (TH1F*)fListOfHits.FindObject(Form("hFMDReadChannels_vtx%d",v));
+
+ TH1F* hFMDAllChannels = (TH1F*)fListOfHits.FindObject(Form("hFMDAllChannels_vtx%d",v));
+ if(hFMDReadChannels) {
+ TH1F* hFMDDeadCorrection = (TH1F*)hFMDReadChannels->Clone("hFMDDeadCorrection");
+ hFMDDeadCorrection->Divide(hFMDAllChannels);
+ fBackground->SetFMDDeadCorrection(v,hFMDDeadCorrection);
+ fListOfCorrection.Add(hFMDDeadCorrection);
+ }
+ else AliWarning("No Dead Channel Correction generated");
+
+ }
+
+ Float_t vtxEff = 1;
+ if(hEventsSelectedTrigger->GetEntries())
+ vtxEff = hEventsSelectedVtx->GetEntries() / hEventsSelectedTrigger->GetEntries();
+ fEventSelectionEff->SetVtxToTriggerRatio(vtxEff);