]>
Commit | Line | Data |
---|---|---|
75ec0f41 | 1 | #include "dNdEtaAnalysis.h" |
2 | ||
3 | //____________________________________________________________________ | |
4 | ClassImp(dNdEtaAnalysis); | |
5 | ||
6 | //____________________________________________________________________ | |
7 | dNdEtaAnalysis::dNdEtaAnalysis(Char_t* name) { | |
8 | ||
9 | fName = TString(name); | |
10 | ||
11 | hEtaVsVtx = new TH2F("eta_vs_vtx","",80,-20,20,120,-6,6); | |
12 | hVtx = (TH1F*)hEtaVsVtx->ProjectionX("vtx"); | |
13 | hdNdEta = (TH1F*)hEtaVsVtx->ProjectionY("dNdEta"); | |
14 | ||
15 | hEtaVsVtx->SetXTitle("vtx z [cm]"); | |
16 | hEtaVsVtx->SetYTitle("#eta"); | |
17 | hVtx->SetXTitle("vtx z [cm]"); | |
18 | hdNdEta->SetXTitle("#eta"); | |
19 | hdNdEta->SetYTitle("dN/d#eta"); | |
20 | ||
21 | hEtaVsVtx->Sumw2(); | |
22 | hVtx->Sumw2(); | |
23 | ||
24 | } | |
25 | ||
26 | //____________________________________________________________________ | |
27 | void | |
28 | dNdEtaAnalysis::FillTrack(Float_t vtx, Float_t eta, Float_t weight) { | |
29 | hEtaVsVtx->Fill(vtx, eta, weight); | |
30 | } | |
31 | ||
32 | //____________________________________________________________________ | |
33 | void | |
34 | dNdEtaAnalysis::FillEvent(Float_t vtx) { | |
35 | hVtx->Fill(vtx); | |
36 | } | |
37 | ||
38 | //____________________________________________________________________ | |
39 | void | |
40 | dNdEtaAnalysis::Finish() { | |
41 | ||
42 | // first normalize with n events (per vtx) | |
43 | for (Int_t i_vtx=0; i_vtx<=hVtx->GetNbinsX(); i_vtx++) { | |
44 | Float_t nEvents = hVtx->GetBinContent(i_vtx); | |
45 | Float_t nEventsError = hVtx->GetBinError(i_vtx); | |
46 | ||
47 | if (nEvents==0) continue; | |
48 | ||
49 | for (Int_t i_eta=0; i_eta<=hEtaVsVtx->GetNbinsY(); i_eta++) { | |
50 | Float_t value = hEtaVsVtx->GetBinContent(i_vtx, i_eta)/nEvents; | |
51 | if (value==0) continue; | |
52 | Float_t error = hEtaVsVtx->GetBinError(i_vtx, i_eta)/nEvents; | |
53 | error = TMath::Sqrt(TMath::Power(hEtaVsVtx->GetBinError(i_vtx, i_eta)/ | |
54 | hEtaVsVtx->GetBinContent(i_vtx, i_eta),2) + | |
55 | TMath::Power(nEventsError/nEvents,2)); | |
56 | hEtaVsVtx->SetBinContent(i_vtx, i_eta, value); | |
57 | hEtaVsVtx->SetBinError(i_vtx, i_eta, error); | |
58 | } | |
59 | } | |
60 | ||
61 | // then take the wieghted average for each eta | |
62 | // is this the right way to do it??? | |
63 | for (Int_t i_eta=0; i_eta<=hEtaVsVtx->GetNbinsY(); i_eta++) { | |
64 | Float_t sum = 0; | |
65 | Float_t sumError2 = 0; | |
66 | Int_t nMeasurements = 0; | |
67 | ||
68 | Float_t sum_xw = 0; | |
69 | Float_t sum_w = 0; | |
70 | ||
71 | for (Int_t i_vtx=0; i_vtx<=hVtx->GetNbinsX(); i_vtx++) { | |
72 | if (hVtx->GetBinContent(i_vtx)==0) continue; | |
73 | if (hEtaVsVtx->GetBinContent(i_vtx, i_eta)==0) continue; | |
74 | ||
75 | Float_t w = 1/TMath::Power(hEtaVsVtx->GetBinError(i_vtx, i_eta),2); | |
76 | sum_xw = sum_xw + hEtaVsVtx->GetBinContent(i_vtx, i_eta)*w; | |
77 | sum_w = sum_w + w; | |
78 | ||
79 | sum = sum + hEtaVsVtx->GetBinContent(i_vtx, i_eta); | |
80 | sumError2 = sumError2 + TMath::Power(hEtaVsVtx->GetBinError(i_vtx, i_eta),2); | |
81 | nMeasurements++; | |
82 | } | |
83 | Float_t dndeta = 0; | |
84 | Float_t error = 0; | |
85 | ||
86 | if (nMeasurements!=0) { | |
87 | dndeta = sum/Float_t(nMeasurements); | |
88 | error = TMath::Sqrt(sumError2)/Float_t(nMeasurements); | |
89 | ||
90 | dndeta = sum_xw/sum_w; | |
91 | error = 1/TMath::Sqrt(sum_w); | |
92 | ||
93 | dndeta = dndeta/hdNdEta->GetBinWidth(i_eta); | |
94 | error = error/hdNdEta->GetBinWidth(i_eta); | |
95 | ||
96 | hdNdEta->SetBinContent(i_eta, dndeta); | |
97 | hdNdEta->SetBinError(i_eta, error); | |
98 | } | |
99 | ||
100 | } | |
101 | } | |
102 | ||
103 | ||
104 | ||
105 | //____________________________________________________________________ | |
106 | void | |
107 | dNdEtaAnalysis::SaveHistograms() { | |
108 | ||
109 | gDirectory->mkdir(fName.Data()); | |
110 | gDirectory->cd(fName.Data()); | |
111 | ||
112 | hEtaVsVtx ->Write(); | |
113 | hVtx ->Write(); | |
114 | hdNdEta ->Write(); | |
115 | ||
116 | gDirectory->cd("../"); | |
117 | } | |
118 |