3 #include "dNdEtaCorrection.h"
7 //____________________________________________________________________
8 ClassImp(dNdEtaCorrection)
10 //____________________________________________________________________
11 dNdEtaCorrection::dNdEtaCorrection(Char_t* name) {
13 fName = TString(name);
15 hEtaVsVtx_meas = new TH2F("etaVsVtx_meas", "etaVsVtx_meas" ,80,-20,20,120,-6,6);
16 hEtaVsVtx_gene = new TH2F("etaVsVtx_gene", "etaVsVtx_gene" ,80,-20,20,120,-6,6);
17 hEtaVsVtx_corr = new TH2F("etaVsVtx_corr", "etaVsVtx_corr", 80,-20,20,120,-6,6);
19 hEtaVsVtx_ratio = new TH2F("etaVsVtx_ratio","etaVsVtx_ratio",80,-20,20,120,-6,6);
21 hEtaVsVtx_meas ->SetXTitle("vtx z [cm]"); hEtaVsVtx_meas ->SetYTitle("#eta");
22 hEtaVsVtx_gene ->SetXTitle("vtx z [cm]"); hEtaVsVtx_gene ->SetYTitle("#eta");
23 hEtaVsVtx_corr ->SetXTitle("vtx z [cm]"); hEtaVsVtx_corr ->SetYTitle("#eta");
24 hEtaVsVtx_ratio->SetXTitle("vtx z [cm]"); hEtaVsVtx_ratio->SetYTitle("#eta");
28 //____________________________________________________________________
30 dNdEtaCorrection::Finish() {
32 hEtaVsVtx_ratio->Divide(hEtaVsVtx_meas, hEtaVsVtx_gene, 1,1,"B");
33 hEtaVsVtx_corr->Divide(hEtaVsVtx_gene, hEtaVsVtx_meas, 1,1,"B");
35 Int_t nBinsVtx = hEtaVsVtx_corr->GetNbinsX();
36 Int_t nBinsEta = hEtaVsVtx_corr->GetNbinsY();
38 TH2F* tmp = (TH2F*)hEtaVsVtx_corr->Clone("tmp");
41 for (Int_t bx=0; bx<=nBinsVtx; bx++) {
42 for (Int_t by=0; by<=nBinsEta; by++) {
43 if (tmp->GetBinContent(bx,by)<0.2) {
44 hEtaVsVtx_corr->SetBinContent(bx,by,0);
45 hEtaVsVtx_corr->SetBinError(bx,by,0);
47 tmp->SetBinContent(bx,by,0);
50 tmp->SetBinContent(bx,by,1);
56 //____________________________________________________________________
58 dNdEtaCorrection::RemoveEdges(Float_t cut, Int_t nBinsVtx, Int_t nBinsEta) {
60 // remove edges of correction histogram by removing
61 // - bins with content bigger than cut
62 // - bins next to bins with zero bin content
64 Int_t nBinsX = hEtaVsVtx_corr->GetNbinsX();
65 Int_t nBinsY = hEtaVsVtx_corr->GetNbinsY();
67 // set bin content to zero for bins with content bigger than cut
68 for (Int_t bx=0; bx<=nBinsX; bx++) {
69 for (Int_t by=0; by<=nBinsY; by++) {
70 if (hEtaVsVtx_corr->GetBinContent(bx,by)>cut) {
71 hEtaVsVtx_corr->SetBinContent(bx,by,0);
72 hEtaVsVtx_corr->SetBinError(bx,by,0);
77 // set bin content to zero for bins next to bins with zero
78 TH2F* tmp = (TH2F*)hEtaVsVtx_corr->Clone("tmp");
82 Int_t nBinsVtxCount = 0;
83 Int_t nBinsEtaCount = 0;
85 if (nBinsVtxCount<nBinsVtx)
86 for (Int_t bx=0; bx<=nBinsX; bx++) {
87 for (Int_t by=0; by<=nBinsY; by++) {
88 if ((hEtaVsVtx_corr->GetBinContent(bx+1,by)==0)||
89 (hEtaVsVtx_corr->GetBinContent(bx-1,by)==0))
90 tmp->SetBinContent(bx,by,1);
94 if (nBinsEtaCount<nBinsEta)
95 for (Int_t bx=0; bx<=nBinsX; bx++) {
96 for (Int_t by=0; by<=nBinsY; by++) {
97 if ((hEtaVsVtx_corr->GetBinContent(bx,by+1)==0)||
98 (hEtaVsVtx_corr->GetBinContent(bx,by-1)==0))
99 tmp->SetBinContent(bx,by,1);
102 for (Int_t bx=0; bx<=nBinsX; bx++) {
103 for (Int_t by=0; by<=nBinsY; by++) {
104 if (tmp->GetBinContent(bx,by)==1) {
105 hEtaVsVtx_corr->SetBinContent(bx,by,0);
106 hEtaVsVtx_corr->SetBinError(bx,by,0);
112 if ((nBinsVtxCount>=nBinsVtx)&&(nBinsEtaCount>=nBinsEta)) done=kTRUE;
118 //____________________________________________________________________
120 dNdEtaCorrection::LoadHistograms(Char_t* fileName, Char_t* dir) {
122 TFile* fin = TFile::Open(fileName);
127 hEtaVsVtx_meas = (TH2F*)fin->Get(Form("%s/etaVsVtx_meas",dir));
128 hEtaVsVtx_gene = (TH2F*)fin->Get(Form("%s/etaVsVtx_gene",dir));
129 hEtaVsVtx_corr = (TH2F*)fin->Get(Form("%s/etaVsVtx_corr",dir));
131 hEtaVsVtx_ratio = (TH2F*)fin->Get(Form("%s/etaVsVtx_ratio",dir));
137 //____________________________________________________________________
139 dNdEtaCorrection::SaveHistograms() {
141 gDirectory->mkdir(fName.Data());
142 gDirectory->cd(fName.Data());
144 hEtaVsVtx_meas ->Write();
145 hEtaVsVtx_gene ->Write();
148 hEtaVsVtx_corr->Write();
151 hEtaVsVtx_ratio->Write();
154 gDirectory->cd("../");
157 //____________________________________________________________________
158 void dNdEtaCorrection::DrawHistograms()
160 TCanvas* canvas = new TCanvas("dNdEtaCorrection", "dNdEtaCorrection", 800, 800);
161 canvas->Divide(2, 2);
165 hEtaVsVtx_meas->Draw("COLZ");
169 hEtaVsVtx_gene->Draw("COLZ");
173 hEtaVsVtx_ratio->Draw("COLZ");
177 hEtaVsVtx_corr->Draw("COLZ");