]>
Commit | Line | Data |
---|---|---|
c5058a61 | 1 | |
2 | #include "AliFMDDndeta.h" | |
3 | #include "TFile.h" | |
4 | #include "AliLog.h" | |
5 | #include "TH1.h" | |
6 | #include "AliFMDAnaParameters.h" | |
7e2bf482 | 7 | #include "AliFMDAnaCalibSharingEfficiency.h" |
c5058a61 | 8 | #include "TStyle.h" |
9 | //#include "TObjArray.h" | |
10 | #include "TCanvas.h" | |
11 | #include "TLine.h" | |
2dcdd4eb | 12 | #include "TGraphErrors.h" |
541c19ed | 13 | #include "TGraphAsymmErrors.h" |
c5058a61 | 14 | #include "TPad.h" |
15 | #include "iostream" | |
059c7c6b | 16 | #include "TH3.h" |
c5058a61 | 17 | #include "TMath.h" |
059c7c6b | 18 | #include "TProfile.h" |
19 | #include "TProfile2D.h" | |
20 | #include "TProfile3D.h" | |
c5058a61 | 21 | #include "TLegend.h" |
059c7c6b | 22 | #include "TPad.h" |
c5058a61 | 23 | #include "TLatex.h" |
059c7c6b | 24 | #include "TStyle.h" |
25 | #include "TF1.h" | |
2dcdd4eb | 26 | |
27 | #define SMALLNUMBER 0.0001 | |
28 | ||
c5058a61 | 29 | ClassImp(AliFMDDndeta) |
30 | //_____________________________________________________________________ | |
31 | ||
32 | AliFMDDndeta::AliFMDDndeta() | |
33 | : TObject(), | |
34 | fList(0), | |
35 | fMultList(), | |
36 | fNbinsToCut(2), | |
2dcdd4eb | 37 | fVtxCut1(-10), |
38 | fVtxCut2(10), | |
c5058a61 | 39 | fIsInit(kFALSE), |
40 | fIsGenerated(), | |
ae26bdd7 | 41 | fPrimEvents(), |
42 | fEvents(), | |
059c7c6b | 43 | fPrimdNdeta(), |
44 | fDrawAll(kFALSE) | |
c5058a61 | 45 | { |
541c19ed | 46 | //AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance(); |
059c7c6b | 47 | /* fDataObject = new TProfile3D("dataObject","dataObject", |
48 | pars->GetNetaBins(),-6,6, | |
49 | 20,0,2*TMath::Pi(), | |
50 | pars->GetNvtxBins(),-0.5,pars->GetNvtxBins()-0.5); | |
51 | fDataObject->SetXTitle("#eta"); | |
52 | fDataObject->SetYTitle("#varphi [radians]"); | |
53 | fDataObject->SetZTitle("v_{z} [cm]");*/ | |
54 | ||
70d74659 | 55 | fAnalysisNames[0] = "Hits"; |
56 | fAnalysisNames[1] = "HitsTrVtx"; | |
57 | fAnalysisNames[2] = "dNdeta"; | |
58 | fAnalysisNames[3] = "dNdetaTrVtx"; | |
059c7c6b | 59 | fAnalysisNames[4] = "dNdetaNSD"; |
2dcdd4eb | 60 | |
059c7c6b | 61 | for(Int_t i=0; i<5;i++) |
70d74659 | 62 | fMultList[i] = new TList(); |
c5058a61 | 63 | } |
64 | //_____________________________________________________________________ | |
65 | void AliFMDDndeta::SetNames(Analysis what) { | |
2dcdd4eb | 66 | // Set names of histograms from analysis |
c5058a61 | 67 | |
68 | switch(what) { | |
69 | case kHits : | |
70 | fPrimEvents.Form("nMCEventsNoCuts"); //was nMCEvents | |
71 | fEvents.Form("nEvents"); | |
72 | fPrimdNdeta.Form("hMultvsEtaNoCuts"); | |
73 | break; | |
7e2bf482 | 74 | case kHitsTrVtx : |
75 | fPrimEvents.Form("nMCEvents"); | |
76 | fEvents.Form("nEvents"); | |
77 | fPrimdNdeta.Form("hMultvsEtaNoCuts"); | |
78 | break; | |
c5058a61 | 79 | case kMult : |
80 | fPrimEvents.Form("nMCEventsNoCuts"); | |
81 | fEvents.Form("nEvents"); | |
82 | fPrimdNdeta.Form("hMultvsEtaNoCuts"); | |
83 | break; | |
84 | case kMultTrVtx : | |
85 | fPrimEvents.Form("nMCEvents"); | |
86 | fEvents.Form("nEvents"); | |
87 | fPrimdNdeta.Form("hMultvsEta"); | |
88 | break; | |
059c7c6b | 89 | case kMultNSD : |
90 | fPrimEvents.Form("nMCEventsNSDNoCuts"); | |
91 | fEvents.Form("nNSDEvents"); | |
92 | fPrimdNdeta.Form("hMultvsEtaNSDNoCuts"); | |
93 | break; | |
94 | ||
c5058a61 | 95 | default: |
96 | break; | |
97 | } | |
98 | } | |
99 | //_____________________________________________________________________ | |
100 | const char* AliFMDDndeta::GetAnalysisName(Analysis what, UShort_t det, Char_t ring, Int_t vtxbin) { | |
2dcdd4eb | 101 | //Get names of histograms |
ae26bdd7 | 102 | const char* name = ""; |
c5058a61 | 103 | |
104 | switch(what) { | |
105 | case kHits : | |
106 | name = Form("hits_NoCuts_FMD%d%c_vtxbin%d_proj",det,ring,vtxbin); //NoCuts added | |
107 | break; | |
7e2bf482 | 108 | case kHitsTrVtx : |
109 | name = Form("hits_FMD%d%c_vtxbin%d_proj",det,ring,vtxbin); | |
110 | break; | |
c5058a61 | 111 | case kMult : |
112 | name = Form("dNdeta_FMD%d%c_vtxbin%d_proj",det,ring,vtxbin); | |
113 | break; | |
114 | case kMultTrVtx : | |
115 | name = Form("dNdeta_FMD%d%c_TrVtx_vtxbin%d_proj",det,ring,vtxbin); | |
116 | break; | |
059c7c6b | 117 | case kMultNSD : |
118 | name = Form("dNdetaNSD_FMD%d%c_vtxbin%d_proj",det,ring,vtxbin); | |
119 | break; | |
120 | ||
c5058a61 | 121 | default: |
122 | break; | |
123 | } | |
124 | //std::cout<<name.Data()<<std::endl; | |
125 | return name; | |
126 | } | |
127 | //_____________________________________________________________________ | |
128 | const char* AliFMDDndeta::GetPrimName(Analysis what, UShort_t det, Char_t ring, Int_t vtxbin) { | |
2dcdd4eb | 129 | //Get names of primaries |
ae26bdd7 | 130 | const char* name = ""; |
c5058a61 | 131 | |
132 | switch(what) { | |
133 | case kHits : | |
134 | name = Form("hMCHits_nocuts_FMD%d%c_vtxbin%d",det,ring,vtxbin); //nocuts added | |
135 | break; | |
7e2bf482 | 136 | case kHitsTrVtx : |
137 | name = Form("hMCHits_FMD%d%c_vtxbin%d",det,ring,vtxbin); | |
138 | break; | |
c5058a61 | 139 | case kMult : |
140 | name = Form("primmult_vtxbin%d",vtxbin); | |
141 | break; | |
142 | case kMultTrVtx : | |
143 | name = Form("primmult_NoCuts_vtxbin%d",vtxbin); | |
144 | break; | |
059c7c6b | 145 | case kMultNSD : |
146 | name = Form("primmult_NSD_vtxbin%d",vtxbin); | |
147 | break; | |
c5058a61 | 148 | default: |
149 | break; | |
150 | } | |
151 | return name; | |
152 | } | |
153 | //_____________________________________________________________________ | |
2dcdd4eb | 154 | void AliFMDDndeta::GenerateHits(Analysis what) { |
155 | //Generate the hits distributions | |
c5058a61 | 156 | AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance(); |
157 | TH2F* hTmp = pars->GetBackgroundCorrection(1,'I',0); | |
158 | Int_t nVertexBins = pars->GetNvtxBins(); | |
159 | Int_t nEtaBins = hTmp->GetNbinsX(); | |
160 | Float_t etaMin = hTmp->GetXaxis()->GetXmin(); | |
161 | Float_t etaMax = hTmp->GetXaxis()->GetXmax(); | |
162 | ||
059c7c6b | 163 | for(Int_t i = 0; i<nVertexBins;i++) { // |
70d74659 | 164 | TH1F* hHits = new TH1F(Form("hMCHits_vtxbin%d_%s",i,fAnalysisNames[what]),Form("hHits_vtxbin%d_%s",i,fAnalysisNames[what]),nEtaBins,etaMin,etaMax); |
c5058a61 | 165 | hHits->Sumw2(); |
70d74659 | 166 | fMultList[what]->Add(hHits); |
c5058a61 | 167 | } |
2dcdd4eb | 168 | |
c5058a61 | 169 | for(Int_t det = 1; det<=3; det++) { |
170 | Int_t maxRing = (det == 1 ? 0 : 1); | |
171 | for(Int_t ring = 0;ring<=maxRing;ring++) { | |
172 | ||
173 | Char_t ringChar = (ring == 0 ? 'I' : 'O'); | |
174 | for(Int_t v=0; v< nVertexBins; v++) { | |
2dcdd4eb | 175 | TH1F* hits = (TH1F*)fList->FindObject(GetPrimName(what,det,ringChar,v)); |
c5058a61 | 176 | |
177 | Int_t nNonZero = 0, nNonZeroInData = 0; | |
178 | ||
179 | //removing edges | |
180 | for(Int_t i =1;i<=hits->GetNbinsX();i++) { | |
181 | if(hits->GetBinContent(i) !=0) | |
182 | nNonZero++; | |
183 | } | |
184 | ||
70d74659 | 185 | TH1F* sumMultHist = (TH1F*)fMultList[what]->FindObject(Form("hMCHits_vtxbin%d_%s",v,fAnalysisNames[what])); |
c5058a61 | 186 | for(Int_t i =1;i<=sumMultHist->GetNbinsX();i++) { |
187 | if(hits->GetBinContent(i) == 0 ) continue; | |
188 | ||
189 | nNonZeroInData++; | |
190 | ||
191 | if(nNonZeroInData <=fNbinsToCut || nNonZeroInData > (nNonZero - fNbinsToCut)) { | |
192 | continue; | |
193 | } | |
2dcdd4eb | 194 | if(sumMultHist->GetBinContent(i) < SMALLNUMBER && TMath::Abs(hits->GetBinContent(i)) > 0){ |
c5058a61 | 195 | sumMultHist->SetBinContent(i,hits->GetBinContent(i)); |
196 | sumMultHist->SetBinError(i,hits->GetBinError(i)); | |
197 | } | |
198 | else { | |
199 | ||
200 | ||
201 | Float_t sumofw = (1/TMath::Power(hits->GetBinError(i),2)) + (1/TMath::Power(sumMultHist->GetBinError(i),2)); | |
202 | Float_t wav = (hits->GetBinContent(i)*(1/TMath::Power(hits->GetBinError(i),2)) + sumMultHist->GetBinContent(i)*(1/TMath::Power(sumMultHist->GetBinError(i),2)))/sumofw; | |
203 | Float_t error = 1/TMath::Sqrt(sumofw); | |
204 | sumMultHist->SetBinContent(i, wav); | |
205 | sumMultHist->SetBinError(i, error); | |
206 | } | |
207 | } | |
208 | } | |
209 | } | |
210 | } | |
211 | } | |
212 | ||
213 | //_____________________________________________________________________ | |
214 | void AliFMDDndeta::Init(const Char_t* filename) { | |
2dcdd4eb | 215 | //Initialize everything from file |
c5058a61 | 216 | TFile* fin = TFile::Open(filename); |
217 | ||
218 | if(!fin) { | |
2dcdd4eb | 219 | AliWarning("No file - exiting !"); |
c5058a61 | 220 | return; |
221 | } | |
c5058a61 | 222 | AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance(); |
707ec2bd | 223 | //pars->Init(); |
c5058a61 | 224 | |
541c19ed | 225 | TList* list = (TList*)fin->Get(Form("%s/BackgroundCorrected",pars->GetDndetaAnalysisName().Data())); |
2dcdd4eb | 226 | |
227 | if(!list) //an old file ? Perhaps... | |
228 | list = (TList*)fin->Get("BackgroundCorrected"); | |
70d74659 | 229 | |
2dcdd4eb | 230 | Init(list); |
707ec2bd | 231 | |
2dcdd4eb | 232 | } |
233 | //_____________________________________________________________________ | |
234 | void AliFMDDndeta::Init(TList* list) { | |
235 | //Initialize everything from TList | |
236 | ||
237 | if(!list) { | |
238 | AliWarning("No list - exiting !"); | |
239 | return; | |
240 | } | |
70d74659 | 241 | |
242 | fList = (TList*)list->Clone("inputList"); | |
707ec2bd | 243 | |
c5058a61 | 244 | fIsGenerated[kHits] = kFALSE; |
245 | fIsGenerated[kMult] = kFALSE; | |
246 | fIsGenerated[kMultTrVtx] = kFALSE; | |
2dcdd4eb | 247 | fIsGenerated[kHitsTrVtx] = kFALSE; |
059c7c6b | 248 | fIsGenerated[kMultNSD] = kFALSE; |
c5058a61 | 249 | |
250 | fIsInit = kTRUE; | |
251 | } | |
252 | //_____________________________________________________________________ | |
253 | void AliFMDDndeta::GenerateMult(Analysis what) { | |
2dcdd4eb | 254 | //Generate dNdeta |
c5058a61 | 255 | |
256 | if(!fIsInit) { | |
257 | AliWarning("Not initialised - call Init to remedy"); | |
258 | return; | |
259 | } | |
260 | ||
261 | if(fIsGenerated[what]) { | |
262 | AliWarning("Already generated - have a look at the results!"); | |
263 | return; | |
264 | } | |
265 | else fIsGenerated[what] = kTRUE; | |
266 | ||
267 | SetNames(what); | |
268 | ||
2dcdd4eb | 269 | if(what == kHits || what == kHitsTrVtx) |
270 | GenerateHits(what); | |
c5058a61 | 271 | |
272 | TH1I* hMCEvents = (TH1I*)fList->FindObject(fPrimEvents.Data()); | |
273 | ||
274 | AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance(); | |
275 | ||
276 | TH2F* hTmp = pars->GetBackgroundCorrection(1,'I',0); | |
277 | Int_t nVertexBins = pars->GetNvtxBins(); | |
278 | Int_t nEtaBins = hTmp->GetNbinsX(); | |
279 | Float_t etaMin = hTmp->GetXaxis()->GetXmin(); | |
280 | Float_t etaMax = hTmp->GetXaxis()->GetXmax(); | |
281 | ||
282 | for(Int_t i = 0; i<nVertexBins;i++) { | |
70d74659 | 283 | TH1F* hMult = new TH1F(Form("hMult_vtxbin%d_%s",i,fAnalysisNames[what]),Form("hMult_vtxbin%d_%s",i,fAnalysisNames[what]),nEtaBins,etaMin,etaMax); |
c5058a61 | 284 | hMult->Sumw2(); |
70d74659 | 285 | fMultList[what]->Add(hMult); |
c5058a61 | 286 | } |
287 | ||
288 | for(Int_t det = 1; det<=3;det++) { | |
289 | Int_t maxRing = (det == 1 ? 0 : 1); | |
290 | for(Int_t iring = 0; iring<=maxRing; iring++) { | |
291 | Char_t ringChar = (iring == 0 ? 'I' : 'O'); | |
059c7c6b | 292 | //Int_t nsec = (iring == 0 ? 20 : 40); |
70d74659 | 293 | 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); |
294 | fMultList[what]->Add(hRingMult); | |
059c7c6b | 295 | // TProfile* phiprofile = new TProfile(Form("dNdphiFMD%d%c",det,ringChar), Form("dNdphiFMD%d%c;#Phi",det,ringChar), nsec , 0, 2*TMath::Pi()); |
296 | //fMultList[what]->Add(phiprofile); | |
c5058a61 | 297 | } |
298 | } | |
059c7c6b | 299 | TH1I* hEvents = (TH1I*)fList->FindObject(fEvents.Data()); |
c5058a61 | 300 | TH1F* hPrimVtx = 0; |
301 | ||
302 | ||
303 | ||
304 | for(Int_t det = 1; det<=3; det++) { | |
305 | Int_t maxRing = (det == 1 ? 0 : 1); | |
306 | for(Int_t ring = 0;ring<=maxRing;ring++) { | |
307 | ||
308 | Char_t ringChar = (ring == 0 ? 'I' : 'O'); | |
309 | for(Int_t v=0; v< nVertexBins; v++) { | |
310 | if(det == 1) { | |
2dcdd4eb | 311 | if(what == kHits || what == kHitsTrVtx) |
70d74659 | 312 | hPrimVtx = (TH1F*)fMultList[what]->FindObject(Form("hMCHits_vtxbin%d_%s",v,fAnalysisNames[what])); |
c5058a61 | 313 | else |
314 | hPrimVtx = (TH1F*)fList->FindObject(GetPrimName(what,det,ringChar,v)); | |
315 | ||
316 | ||
317 | Float_t nPrimevents = hMCEvents->GetBinContent(v+1); | |
318 | Float_t xb = hPrimVtx->GetNbinsX(); | |
319 | Float_t xr = hPrimVtx->GetXaxis()->GetXmax() - hPrimVtx->GetXaxis()->GetXmin(); | |
320 | hPrimVtx->Scale(xb / xr ); | |
321 | if(nPrimevents > 0) | |
322 | hPrimVtx->Scale(1/nPrimevents); | |
323 | ||
324 | } | |
325 | ||
326 | Double_t delta = 2*pars->GetVtxCutZ()/pars->GetNvtxBins(); | |
327 | Float_t vtxZ1 = (delta*v) - pars->GetVtxCutZ(); | |
328 | Float_t vtxZ2 = (delta*(v+1)) - pars->GetVtxCutZ(); | |
329 | ||
2dcdd4eb | 330 | if(vtxZ1< fVtxCut1 || vtxZ2 >fVtxCut2) |
c5058a61 | 331 | continue; |
332 | Float_t nEvents = (Float_t)hEvents->GetBinContent(v+1); | |
333 | ||
334 | //TH1F* multhistproj = (TH1F*)fList->FindObject(Form("dNdeta_FMD%d%c_vtxbin%d_proj",det,ringChar,v)); | |
059c7c6b | 335 | |
336 | ||
337 | ||
338 | ||
339 | ||
340 | ||
341 | TH1F* multhistproj = (TH1F*)fList->FindObject(GetAnalysisName(what,det,ringChar,v)); | |
c5058a61 | 342 | if(nEvents) |
343 | multhistproj->Scale(1/nEvents); | |
344 | Float_t xnBins = multhistproj->GetNbinsX(); | |
345 | Float_t xrange = multhistproj->GetXaxis()->GetXmax() - multhistproj->GetXaxis()->GetXmin(); | |
346 | multhistproj->Scale(xnBins / xrange); | |
347 | ||
541c19ed | 348 | //TH2F* multhist = (TH2F*)fList->FindObject(Form("dNdeta_FMD%d%c_vtxbin%d",det,ringChar,v)); |
c5058a61 | 349 | |
350 | ||
059c7c6b | 351 | //if(nEvents) |
352 | // multhist->Scale(1/nEvents); | |
353 | /* for(Int_t i=1;i<=multhist->GetNbinsX();i++) { | |
354 | for(Int_t j=1;j<=multhist->GetNbinsY();j++) { | |
355 | ||
356 | if (multhist->GetBinContent(i,j) <= 0.0001) continue; | |
357 | //std::cout<<multhist->GetBinContent(i,j)<<std::endl; | |
358 | fDataObject->Fill(multhist->GetXaxis()->GetBinCenter(i), | |
359 | multhist->GetYaxis()->GetBinCenter(j), | |
360 | v, | |
361 | multhist->GetBinContent(i,j), multhist->GetBinError(i,j)); | |
362 | //fDataObject->SetBinContent(i,j,v,multhist->GetBinContent(i,j)); | |
363 | //fDataObject->SetBinError(i,j,v,multhist->GetBinError(i,j)); | |
364 | } | |
365 | } | |
366 | */ | |
367 | //if(nEvents) | |
368 | // multhist->Scale(1/nEvents); | |
369 | //if(ringChar == 'O') | |
370 | // multhist->RebinY(2); | |
c5058a61 | 371 | //removing edges |
372 | ||
059c7c6b | 373 | Int_t nNonZero = 0, nNonZeroInData = 0; |
374 | ||
c5058a61 | 375 | for(Int_t i =1;i<=multhistproj->GetNbinsX();i++) { |
376 | if(multhistproj->GetBinContent(i) !=0) | |
377 | nNonZero++; | |
378 | } | |
7e2bf482 | 379 | Int_t nBinsOld = fNbinsToCut; |
4b8bdb60 | 380 | //if(det == 1 && ringChar =='I') { |
381 | // fNbinsToCut = 0; | |
382 | // } | |
70d74659 | 383 | TH1F* hRingMult = (TH1F*)fMultList[what]->FindObject(Form("hRingMult_FMD%d%c_%s",det,ringChar,fAnalysisNames[what])); |
c5058a61 | 384 | |
385 | for(Int_t i=1; i<=hRingMult->GetNbinsX(); i++) { | |
386 | if(multhistproj->GetBinContent(i)!=0) { | |
387 | nNonZeroInData++; | |
388 | if(nNonZeroInData <=fNbinsToCut || nNonZeroInData > (nNonZero - fNbinsToCut)) { | |
389 | continue; | |
390 | } | |
391 | Float_t oldweight = 0; | |
392 | Float_t oldwav = 0; | |
393 | if(hRingMult->GetBinError(i)>0) { | |
394 | oldweight = 1/TMath::Power(hRingMult->GetBinError(i),2); | |
395 | oldwav = oldweight*hRingMult->GetBinContent(i); | |
7e2bf482 | 396 | } |
c5058a61 | 397 | Float_t weight = 1/TMath::Power(multhistproj->GetBinError(i),2); |
398 | Float_t wav = oldwav + weight*multhistproj->GetBinContent(i); | |
399 | Float_t sumofw = oldweight + weight; | |
400 | if(sumofw) { | |
401 | Float_t error = 1/TMath::Sqrt(sumofw); | |
402 | ||
403 | hRingMult->SetBinContent(i,wav/sumofw); | |
404 | hRingMult->SetBinError(i,error); | |
405 | ||
406 | } | |
407 | } | |
408 | } | |
409 | nNonZeroInData = 0; | |
410 | ||
70d74659 | 411 | TH1F* sumMultHist = (TH1F*)fMultList[what]->FindObject(Form("hMult_vtxbin%d_%s",v,fAnalysisNames[what])); |
ae26bdd7 | 412 | |
c5058a61 | 413 | for(Int_t i =1;i<=sumMultHist->GetNbinsX();i++) { |
7e2bf482 | 414 | if(multhistproj->GetBinContent(i) != 0 ) { |
415 | nNonZeroInData++; | |
c5058a61 | 416 | |
7e2bf482 | 417 | if(nNonZeroInData <=fNbinsToCut || nNonZeroInData > (nNonZero - fNbinsToCut)) { |
418 | continue; | |
419 | } | |
2dcdd4eb | 420 | if(sumMultHist->GetBinContent(i) < SMALLNUMBER && TMath::Abs(multhistproj->GetBinContent(i)) > 0){ |
c5058a61 | 421 | sumMultHist->SetBinContent(i,multhistproj->GetBinContent(i)); |
422 | sumMultHist->SetBinError(i,multhistproj->GetBinError(i)); | |
423 | } | |
424 | else { | |
425 | ||
426 | ||
427 | Float_t sumofw = (1/TMath::Power(multhistproj->GetBinError(i),2)) + (1/TMath::Power(sumMultHist->GetBinError(i),2)); | |
428 | Float_t wav = (multhistproj->GetBinContent(i)*(1/TMath::Power(multhistproj->GetBinError(i),2)) + sumMultHist->GetBinContent(i)*(1/TMath::Power(sumMultHist->GetBinError(i),2)))/sumofw; | |
429 | Float_t error = 1/TMath::Sqrt(sumofw); | |
430 | sumMultHist->SetBinContent(i, wav); | |
431 | sumMultHist->SetBinError(i, error); | |
432 | } | |
433 | ||
434 | ||
7e2bf482 | 435 | } |
c5058a61 | 436 | } |
7e2bf482 | 437 | fNbinsToCut = nBinsOld; |
c5058a61 | 438 | } |
7e2bf482 | 439 | |
c5058a61 | 440 | } |
441 | } | |
442 | ||
70d74659 | 443 | TH1F* sumMult = new TH1F(Form("dNdeta_%s",fAnalysisNames[what]),Form("dNdeta_%s",fAnalysisNames[what]),nEtaBins,etaMin,etaMax); |
c5058a61 | 444 | sumMult->Sumw2(); |
70d74659 | 445 | fMultList[what]->Add(sumMult); |
446 | TH1F* primMult = new TH1F(Form("primary_%s",fAnalysisNames[what]),Form("primary_%s",fAnalysisNames[what]),nEtaBins,etaMin,etaMax); | |
c5058a61 | 447 | primMult->Sumw2(); |
70d74659 | 448 | fMultList[what]->Add(primMult); |
c5058a61 | 449 | |
450 | Float_t wav = 0, sumofw=0, weight = 0, primwav = 0, primsumofw=0, primweight = 0;//, etaofbin = 0; | |
451 | for(Int_t i =1; i<=sumMult->GetNbinsX();i++) { | |
452 | ||
453 | for(Int_t v = 0; v<nVertexBins;v++) { | |
2dcdd4eb | 454 | if(what == kHits || what == kHitsTrVtx) |
70d74659 | 455 | hPrimVtx = (TH1F*)fMultList[what]->FindObject(Form("hMCHits_vtxbin%d_%s",v,fAnalysisNames[what])); |
c5058a61 | 456 | else |
457 | hPrimVtx = (TH1F*)fList->FindObject(GetPrimName(what,0,0,v)); | |
70d74659 | 458 | TH1F* sumMultHist = (TH1F*)fMultList[what]->FindObject(Form("hMult_vtxbin%d_%s",v,fAnalysisNames[what])); |
c5058a61 | 459 | //etaofbin += sumMultHist->GetBinCenter(i); |
460 | // if( hPrimVtx->GetBinContent(i)!=0 && hPrimVtx->GetBinError(i)>0.001 && sumMultHist->GetBinContent(i)!=0) { | |
2dcdd4eb | 461 | if( TMath::Abs(hPrimVtx->GetBinContent(i)) > 0) { |
c5058a61 | 462 | primweight = 1/TMath::Power(hPrimVtx->GetBinError(i),2); |
463 | primwav = primwav + primweight*hPrimVtx->GetBinContent(i); | |
464 | primsumofw = primsumofw + primweight; | |
465 | } | |
2dcdd4eb | 466 | if(TMath::Abs(sumMultHist->GetBinContent(i)) > 0) { |
c5058a61 | 467 | |
468 | weight = 1/TMath::Power(sumMultHist->GetBinError(i),2); | |
469 | wav = wav + weight*sumMultHist->GetBinContent(i); | |
470 | sumofw = sumofw + weight; | |
471 | } | |
472 | ||
473 | } | |
474 | if( primsumofw !=0 ) {// && sumofw !=0) { | |
475 | Float_t primerror = 1/TMath::Sqrt(primsumofw); | |
476 | ||
477 | primMult->SetBinContent(i,primwav/primsumofw); | |
478 | primMult->SetBinError(i,primerror); | |
479 | } | |
480 | else { | |
481 | primMult->SetBinContent(i,0); | |
482 | primMult->SetBinError(i,0); | |
483 | } | |
484 | ||
485 | if(sumofw) { | |
486 | ||
487 | Float_t error = 1/TMath::Sqrt(sumofw); | |
488 | ||
489 | sumMult->SetBinContent(i,wav/sumofw); | |
490 | sumMult->SetBinError(i,error); | |
491 | } | |
492 | ||
2dcdd4eb | 493 | |
c5058a61 | 494 | wav = 0; |
495 | sumofw = 0; | |
496 | weight = 0; | |
497 | primwav = 0; | |
498 | primsumofw = 0; | |
499 | primweight = 0; | |
500 | ||
501 | } | |
502 | ||
503 | } | |
504 | //_____________________________________________________________________ | |
541c19ed | 505 | void AliFMDDndeta::DrawDndeta(Analysis what, Int_t rebin, Bool_t realdata, TString pythiafile) { |
2dcdd4eb | 506 | //Draw everything |
c5058a61 | 507 | if(!fIsInit) { |
508 | AliWarning("Not initialised - call Init to remedy"); | |
509 | return; | |
510 | } | |
511 | ||
512 | if(!fIsGenerated[what]) { | |
513 | AliWarning("Not generated - generate first then draw!"); | |
514 | return; | |
515 | } | |
541c19ed | 516 | AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance(); |
c5058a61 | 517 | SetNames(what); |
059c7c6b | 518 | //UA5 data NSD |
519 | Float_t x[19] = {0.125,0.375,0.625,0.875,1.125,1.375,1.625,1.875,2.125,2.375, | |
520 | 2.625,2.875,3.125,3.375,3.625,3.875,4.125,4.375,4.625}; | |
521 | Float_t x2[19] = {-0.125,-0.375,-0.625,-0.875,-1.125,-1.375,-1.625,-1.875, | |
522 | -2.125,-2.375,-2.625,-2.875,-3.125,-3.375,-3.625,-3.875, | |
523 | -4.125,-4.375,-4.625}; | |
524 | ||
525 | ||
526 | Float_t y[19] = {3.48, 3.38, 3.52, 3.68, 3.71, 3.86, 3.76, 3.66, 3.72 ,3.69, | |
527 | 3.56, 3.41, 3.15, 3.09, 2.74, 2.73, 2.32, 1.99, 1.69}; | |
528 | ||
529 | 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, | |
530 | 0.07,0.07,0.08,0.08,0.09,0.09,0.1,0.13}; | |
531 | ||
532 | TGraphErrors* graph = new TGraphErrors(19,x,y,NULL,ey); | |
533 | TGraphErrors* graph2 = new TGraphErrors(19,x2,y,NULL,ey); | |
534 | //UA5 data INEL | |
535 | 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}; | |
536 | 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}; | |
537 | 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}; | |
538 | 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}; | |
539 | TGraphErrors* graphinel = new TGraphErrors(19,xinel,yinel,NULL,eyinel); | |
540 | TGraphErrors* graphinel2 = new TGraphErrors(19,xinel2,yinel,NULL,eyinel); | |
541 | ||
542 | graph->SetMarkerStyle(22); | |
543 | graph->SetMarkerColor(kBlue); | |
544 | graphinel->SetMarkerStyle(20); | |
545 | graphinel->SetMarkerColor(kGreen); | |
546 | graphinel2->SetMarkerStyle(24); | |
547 | graphinel2->SetMarkerColor(kGreen); | |
548 | //graph->Draw("P"); | |
549 | graph2->SetMarkerStyle(26); | |
550 | graph2->SetMarkerColor(kBlue); | |
551 | graphinel->GetHistogram()->SetStats(kFALSE); | |
552 | graphinel2->GetHistogram()->SetStats(kFALSE); | |
553 | ||
554 | ||
555 | //End UA5 data | |
c5058a61 | 556 | |
541c19ed | 557 | //Published ALICE data |
558 | // Plot: p7742_d1x1y1 | |
559 | TGraphAsymmErrors* p7742_d1x1y1 = 0; | |
560 | double p7742_d1x1y1_xval[] = { -1.3, -1.1, -0.9, -0.7, -0.5, -0.3, -0.1, 0.1, 0.3, | |
561 | 0.5, 0.7, 0.9, 1.1, 1.3 }; | |
562 | double p7742_d1x1y1_xerrminus[] = { 0.09999999999999987, 0.09999999999999987, 0.09999999999999998, 0.10000000000000009, 0.09999999999999998, 0.10000000000000003, 0.1, 0.1, 0.09999999999999998, | |
563 | 0.09999999999999998, 0.09999999999999998, 0.09999999999999998, 0.10000000000000009, 0.10000000000000009 }; | |
564 | double p7742_d1x1y1_xerrplus[] = { 0.10000000000000009, 0.10000000000000009, 0.09999999999999998, 0.09999999999999998, 0.09999999999999998, 0.09999999999999998, 0.1, 0.1, 0.10000000000000003, | |
565 | 0.09999999999999998, 0.10000000000000009, 0.09999999999999998, 0.09999999999999987, 0.09999999999999987 }; | |
566 | double p7742_d1x1y1_yval[] = { 3.28, 3.28, 3.22, 3.12, 3.06, 3.02, 2.98, 3.02, 3.02, | |
567 | 3.05, 3.15, 3.21, 3.26, 3.33 }; | |
568 | double p7742_d1x1y1_yerrminus[] = { 0.06324555320336758, 0.06324555320336758, 0.06324555320336758, 0.06324555320336758, 0.06324555320336758, 0.05385164807134505, 0.05385164807134505, 0.05385164807134505, 0.05385164807134505, | |
569 | 0.06324555320336758, 0.06324555320336758, 0.06324555320336758, 0.06324555320336758, 0.06324555320336758 }; | |
570 | double p7742_d1x1y1_yerrplus[] = { 0.08246211251235322, 0.08246211251235322, 0.08246211251235322, 0.08246211251235322, 0.08246211251235322, 0.08246211251235322, 0.07280109889280519, 0.08246211251235322, 0.08246211251235322, | |
571 | 0.08246211251235322, 0.08246211251235322, 0.08246211251235322, 0.08246211251235322, 0.08246211251235322 }; | |
572 | int p7742_d1x1y1_numpoints = 14; | |
573 | p7742_d1x1y1 = new TGraphAsymmErrors(p7742_d1x1y1_numpoints, p7742_d1x1y1_xval, p7742_d1x1y1_yval, p7742_d1x1y1_xerrminus, p7742_d1x1y1_xerrplus, p7742_d1x1y1_yerrminus, p7742_d1x1y1_yerrplus); | |
574 | p7742_d1x1y1->SetName("/HepData/7742/d1x1y1"); | |
575 | p7742_d1x1y1->SetTitle("/HepData/7742/d1x1y1"); | |
576 | p7742_d1x1y1->SetMarkerStyle(21); | |
577 | p7742_d1x1y1->SetMarkerColor(kRed); | |
578 | // p7742_d1x1y1->Draw("Psame"); | |
579 | ||
580 | ||
581 | ||
582 | ||
583 | //End official data | |
584 | ||
585 | ||
586 | ||
587 | ||
588 | TH1I* hEvents = (TH1I*)fList->FindObject(fEvents.Data()); | |
589 | ||
590 | TH1I* hMCEvents = (TH1I*)fList->FindObject(fPrimEvents.Data()); | |
591 | ||
592 | //SPD part | |
593 | TH1D* hSPDana = (TH1D*)fList->FindObject(Form("dNdeta_SPD_vtxbin%d_proj",5)); | |
594 | ||
595 | for(Int_t nn = 0; nn < pars->GetNvtxBins() ; nn++) { | |
596 | TH1D* hSPDanalysis = (TH1D*)fList->FindObject(Form("dNdeta_SPD_vtxbin%d_proj",nn)); | |
597 | TH1D* hSPDanalysisTrVtx = (TH1D*)fList->FindObject(Form("dNdetaTrVtx_SPD_vtxbin%d_proj",nn)); | |
598 | TH1D* hSPDanalysisNSD = (TH1D*)fList->FindObject(Form("dNdetaNSD_SPD_vtxbin%d_proj",nn)); | |
599 | ||
600 | Float_t nEventsSPD = (Float_t)hEvents->GetBinContent(nn+1); | |
601 | ||
602 | hSPDanalysis->Scale(1/nEventsSPD); | |
603 | hSPDanalysisTrVtx->Scale(1/nEventsSPD); | |
604 | hSPDanalysisNSD->Scale(1/nEventsSPD); | |
605 | } | |
606 | ||
607 | TH1F* hSPDcombi = new TH1F("SPDcombi","SPDcombi",hSPDana->GetNbinsX(),hSPDana->GetXaxis()->GetXmin(),hSPDana->GetXaxis()->GetXmax()); | |
608 | TH1D* hSPDanalysis = 0; | |
609 | for(Int_t kk = 1; kk <=hSPDana->GetNbinsX(); kk++) { | |
610 | Float_t weight = 0, wav=0,sumofw = 0; | |
611 | for(Int_t nn = 0; nn < pars->GetNvtxBins() ; nn++) { | |
612 | if(what == kMult) | |
613 | hSPDanalysis = (TH1D*)fList->FindObject(Form("dNdeta_SPD_vtxbin%d_proj",nn)); | |
614 | else if(what == kMultNSD) | |
615 | hSPDanalysis = (TH1D*)fList->FindObject(Form("dNdetaNSD_SPD_vtxbin%d_proj",nn)); | |
616 | else if(what == kMultTrVtx) | |
617 | hSPDanalysis = (TH1D*)fList->FindObject(Form("dNdetaTrVtx_SPD_vtxbin%d_proj",nn)); | |
618 | else continue; | |
619 | ||
620 | if(TMath::Abs(hSPDanalysis->GetBinCenter(kk)) > 2) | |
621 | continue; | |
622 | Float_t mult = hSPDanalysis->GetBinContent(kk); | |
623 | Float_t error = hSPDanalysis->GetBinError(kk); | |
624 | ||
625 | if(mult > 0 && hSPDanalysis->GetBinContent(kk-1) < SMALLNUMBER) | |
626 | continue; | |
627 | if(mult > 0 && hSPDanalysis->GetBinContent(kk-2) < SMALLNUMBER) | |
628 | continue; | |
629 | ||
630 | if(mult > 0 && hSPDanalysis->GetBinContent(kk+1) < SMALLNUMBER) | |
631 | continue; | |
632 | if(mult > 0 && hSPDanalysis->GetBinContent(kk+2) < SMALLNUMBER) | |
633 | continue; | |
634 | ||
635 | if(mult > 0) { | |
636 | weight = 1/TMath::Power(error,2); | |
637 | wav = wav + weight*mult; | |
638 | sumofw = sumofw + weight; | |
639 | } | |
640 | ||
641 | } | |
642 | ||
643 | if(sumofw && wav) { | |
644 | Float_t errorTotal = 1/TMath::Sqrt(sumofw); | |
645 | hSPDcombi->SetBinContent(kk,wav/sumofw); | |
646 | hSPDcombi->SetBinError(kk,errorTotal); | |
647 | } | |
648 | } | |
649 | ||
650 | ||
651 | Float_t xb1 = hSPDcombi->GetNbinsX(); | |
652 | Float_t xr1 = hSPDcombi->GetXaxis()->GetXmax() - hSPDcombi->GetXaxis()->GetXmin(); | |
653 | hSPDcombi->Scale(xb1 / xr1); | |
654 | //hSPDcombi->Rebin(rebin); | |
655 | //hSPDcombi->Scale(1/(Float_t)rebin); | |
656 | //RebinHistogram(hSPDcombi,rebin); | |
657 | hSPDcombi->SetMarkerStyle(29); | |
658 | hSPDcombi->SetMarkerColor(kBlue); | |
659 | //hSPDcombi->DrawCopy("same"); | |
660 | ||
661 | ||
c5058a61 | 662 | TCanvas* c1 = new TCanvas("cvertexbins","Overlaps",1400,800); |
663 | c1->Divide(5,2); | |
541c19ed | 664 | TCanvas* cCorrections = 0; |
665 | TCanvas* cCorrectionsPhi = 0; | |
059c7c6b | 666 | if(fDrawAll) { |
667 | cCorrections = new TCanvas("corrections","Correction vs Eta",1400,800); | |
668 | cCorrections->Divide(5,2); | |
669 | ||
670 | cCorrectionsPhi = new TCanvas("correctionsPhi","Correction vs Phi",1400,800); | |
671 | cCorrectionsPhi->Divide(5,2); | |
672 | } | |
673 | //TCanvas* cphi = new TCanvas("dNdphi","dNdphi",1280,1024); | |
674 | // cphi->Divide(3,2); | |
675 | ||
c5058a61 | 676 | Int_t nVertexBins = pars->GetNvtxBins(); |
677 | ||
c5058a61 | 678 | |
059c7c6b | 679 | //Int_t npadphi = 0; |
c5058a61 | 680 | TH1F* hPrimVtx = 0; |
681 | for(Int_t det = 1; det<=3; det++) { | |
682 | Int_t maxRing = (det == 1 ? 0 : 1); | |
683 | for(Int_t ring = 0;ring<=maxRing;ring++) { | |
059c7c6b | 684 | // npadphi++; |
685 | ||
c5058a61 | 686 | for(Int_t v=0; v< nVertexBins; v++) { |
687 | Char_t ringChar = (ring == 0 ? 'I' : 'O'); | |
688 | Double_t delta = 2*pars->GetVtxCutZ()/pars->GetNvtxBins(); | |
689 | Float_t vtxZ1 = (delta*v) - pars->GetVtxCutZ(); | |
690 | Float_t vtxZ2 = (delta*(v+1)) - pars->GetVtxCutZ(); | |
691 | ||
2dcdd4eb | 692 | if(vtxZ1<fVtxCut1 || vtxZ2 >fVtxCut2) |
c5058a61 | 693 | continue; |
694 | Float_t nEvents = (Float_t)hEvents->GetBinContent(v+1); | |
059c7c6b | 695 | if(fDrawAll) { |
696 | TH2F* hBgCor = pars->GetBackgroundCorrection(det,ringChar,v); | |
697 | if(hBgCor) { | |
698 | TH1D* hBgProj = hBgCor->ProjectionX(Form("hBgProj_FMD%d%c_vtxbin%d",det,ringChar,v)); | |
699 | TH1D* hBgProjPhi = hBgCor->ProjectionY(Form("hBgProjPhi_FMD%d%c_vtxbin%d",det,ringChar,v)); | |
700 | ||
701 | hBgProjPhi->SetName(Form("FMD%d%c",det,ringChar)); | |
702 | hBgProjPhi->SetTitle("");//Form("FMD%d",det)); | |
703 | hBgProj->SetTitle(""); | |
704 | //Float_t scalefactor = (hBgProj->GetXaxis()->GetXmax() - hBgProj->GetXaxis()->GetXmin()) / (Float_t)hBgProj->GetNbinsX(); | |
705 | Float_t scalefactor = 1/(Float_t)hBgCor->GetNbinsY(); | |
706 | ||
707 | Float_t nFilledEtaBins = 0; | |
708 | ||
709 | for(Int_t jj = 1; jj<=hBgProj->GetNbinsX(); jj++) { | |
710 | if(hBgProj->GetBinContent(jj) > 0.01) | |
711 | nFilledEtaBins++; | |
712 | } | |
713 | ||
714 | Float_t scalefactorPhi = 1/nFilledEtaBins; | |
715 | ||
716 | ||
717 | hBgProj->Scale(scalefactor); | |
718 | cCorrections->cd(v+1); | |
719 | ||
720 | hBgProj->SetMarkerColor(det + 2*ring); | |
721 | hBgProj->SetMarkerStyle(19 + det + 2*ring ); | |
722 | ||
723 | if((det + 2*ring) == 5) hBgProj->SetMarkerColor(det + 2*ring+1); | |
724 | if((19 + det + 2*ring ) == 24) hBgProj->SetMarkerStyle(29 ); | |
725 | ||
726 | if(det == 1) { | |
727 | hBgProj->GetYaxis()->SetRangeUser(0,4); | |
728 | hBgProj->SetStats(kFALSE); | |
729 | hBgProj->SetXTitle("#eta"); | |
730 | hBgProj->DrawCopy("PE"); | |
731 | TLatex* l = new TLatex(0.14,0.92,Form("Vtx range [%.1f, %.1f]",vtxZ1,vtxZ2)); | |
732 | l->SetNDC(kTRUE); | |
733 | l->Draw(); | |
734 | } | |
735 | else | |
736 | hBgProj->DrawCopy("PEsame"); | |
737 | ||
738 | hBgProjPhi->Scale(scalefactorPhi); | |
739 | cCorrectionsPhi->cd(v+1); | |
740 | hBgProjPhi->SetMarkerColor(det + 2*ring); | |
741 | hBgProjPhi->SetMarkerStyle(19 + det + 2*ring ); | |
742 | if((det + 2*ring) == 5) hBgProjPhi->SetMarkerColor(det + 2*ring+1); | |
743 | if((19 + det + 2*ring ) == 24) hBgProjPhi->SetMarkerStyle(29 ); | |
744 | if(det == 1) { | |
745 | hBgProjPhi->GetYaxis()->SetRangeUser(1,5); | |
746 | hBgProjPhi->SetStats(kFALSE); | |
747 | ||
748 | hBgProjPhi->SetXTitle("#Phi"); | |
749 | hBgProjPhi->DrawCopy("PE"); | |
750 | ||
751 | ||
752 | } | |
753 | else | |
754 | hBgProjPhi->DrawCopy("PEsame"); | |
755 | ||
756 | } | |
757 | ||
758 | } | |
759 | ||
c5058a61 | 760 | TH1F* multhistproj = (TH1F*)fList->FindObject(GetAnalysisName(what,det,ringChar,v)); |
761 | ||
762 | c1->cd(v+1); | |
763 | ||
764 | if(det==1) { | |
765 | multhistproj->SetMarkerStyle(20); | |
766 | multhistproj->SetMarkerColor(1); | |
767 | } | |
768 | if(det==2 && ringChar=='I') { | |
769 | multhistproj->SetMarkerStyle(21); | |
770 | multhistproj->SetMarkerColor(2); | |
771 | } | |
772 | if(det==2 && ringChar=='O') { | |
773 | multhistproj->SetMarkerStyle(3); | |
774 | multhistproj->SetMarkerColor(3); | |
775 | } | |
776 | if(det==3 && ringChar=='I') { | |
777 | multhistproj->SetMarkerStyle(22); | |
778 | multhistproj->SetMarkerColor(4); | |
779 | } | |
780 | if(det==3 && ringChar=='O') { | |
781 | multhistproj->SetMarkerStyle(23); | |
782 | multhistproj->SetMarkerColor(6); | |
783 | } | |
784 | ||
785 | ||
786 | ||
787 | if(det == 1) { | |
2dcdd4eb | 788 | if(what == kHits || what == kHitsTrVtx) |
059c7c6b | 789 | hPrimVtx = (TH1F*)fMultList[what]->FindObject(Form("hMCHits_vtxbin%d_%s",v,fAnalysisNames[what])); |
c5058a61 | 790 | else |
791 | hPrimVtx = (TH1F*)fList->FindObject(GetPrimName(what,det,ringChar,v)); | |
059c7c6b | 792 | // std::cout<<hPrimVtx<<" "<<kHits<<" "<<kHitsTrVtx<<" "<<what<<std::endl; |
793 | //std::cout<<Form("hMCHits_vtxbin%d_%s",v,fAnalysisNames[what])<<std::endl; | |
c5058a61 | 794 | hPrimVtx->SetTitle(""); |
795 | TLatex* l = new TLatex(0.14,0.92,Form("Vtx range [%.1f, %.1f], %d events",vtxZ1,vtxZ2,(Int_t)nEvents)); | |
796 | l->SetNDC(kTRUE); | |
797 | hPrimVtx->SetFillColor(kGray); | |
798 | hPrimVtx->SetLabelFont(132,"xyz"); | |
799 | hPrimVtx->SetStats(0000); | |
800 | hPrimVtx->GetXaxis()->SetTitle("#eta"); | |
059c7c6b | 801 | hPrimVtx->GetYaxis()->SetRangeUser(0,6); |
c5058a61 | 802 | hPrimVtx->DrawCopy("E3"); |
803 | l->Draw(); | |
804 | multhistproj->DrawCopy("same"); | |
541c19ed | 805 | |
806 | TH1D* hSPDanavtxbin = (TH1D*)fList->FindObject(Form("dNdeta_SPD_vtxbin%d_proj",v)); | |
807 | hSPDanavtxbin->SetMarkerColor(kBlue); | |
808 | hSPDanavtxbin->SetMarkerStyle(kStar); | |
809 | hSPDanavtxbin->Scale(xb1 / xr1); | |
810 | hSPDanavtxbin->DrawCopy("same"); | |
811 | ||
059c7c6b | 812 | if(what != kMultNSD) { |
813 | graphinel->Draw("sameP"); | |
814 | graphinel2->Draw("sameP"); | |
815 | } | |
816 | else | |
817 | { | |
818 | graph->Draw("sameP"); | |
819 | graph2->Draw("sameP"); | |
820 | } | |
c5058a61 | 821 | } |
822 | else | |
823 | multhistproj->DrawCopy("same"); | |
824 | ||
825 | ||
826 | } | |
827 | } | |
828 | } | |
829 | ||
059c7c6b | 830 | //Legends for corrections |
831 | if(fDrawAll) { | |
832 | for(Int_t v=0; v< nVertexBins; v++) { | |
833 | TPad* pad= (TPad*)cCorrectionsPhi->cd(v+1); | |
834 | pad->BuildLegend(0.15,0.45,0.45,0.9); | |
835 | Double_t delta = 2*pars->GetVtxCutZ()/pars->GetNvtxBins(); | |
836 | Float_t vtxZ1 = (delta*v) - pars->GetVtxCutZ(); | |
837 | Float_t vtxZ2 = (delta*(v+1)) - pars->GetVtxCutZ(); | |
838 | TLatex* l = new TLatex(0.14,0.92,Form("Vtx range [%.1f, %.1f]",vtxZ1,vtxZ2)); | |
839 | l->SetNDC(kTRUE); | |
840 | l->Draw(); | |
841 | } | |
842 | } | |
c5058a61 | 843 | for(Int_t v=0; v< nVertexBins; v++) { |
70d74659 | 844 | TH1F* sumMultHist = (TH1F*)fMultList[what]->FindObject(Form("hMult_vtxbin%d_%s",v,fAnalysisNames[what])); |
c5058a61 | 845 | c1->cd(v+1); |
846 | sumMultHist->SetMarkerStyle(25); | |
847 | sumMultHist->DrawCopy("same"); | |
848 | ||
849 | } | |
70d74659 | 850 | TH1F* primMult = (TH1F*)fMultList[what]->FindObject(Form("primary_%s",fAnalysisNames[what])); |
851 | TH1F* sumMult = (TH1F*)fMultList[what]->FindObject(Form("dNdeta_%s",fAnalysisNames[what])); | |
c5058a61 | 852 | sumMult->SetMarkerStyle(23); |
853 | sumMult->SetMarkerColor(kRed); | |
854 | for(Int_t det = 1; det<=3;det++) { | |
855 | Int_t maxRing = (det == 1 ? 0 : 1); | |
856 | for(Int_t iring = 0; iring<=maxRing; iring++) { | |
857 | Char_t ringChar = (iring == 0 ? 'I' : 'O'); | |
70d74659 | 858 | TH1F* hRingMult= (TH1F*)fMultList[what]->FindObject(Form("hRingMult_FMD%d%c_%s",det,ringChar,fAnalysisNames[what])); |
c5058a61 | 859 | hRingMult->Add(primMult,-1); |
860 | hRingMult->Divide(primMult); | |
861 | } | |
862 | } | |
863 | ||
541c19ed | 864 | |
059c7c6b | 865 | // End of SPD |
866 | ||
c5058a61 | 867 | |
868 | //TH1F* hPrim = (TH1F*)fList->FindObject(fPrimEvents.Data()); | |
869 | // TFile testhit("/home/canute/ALICE/Simulations/TestOfAnalysis2/hitsdist.root"); | |
870 | // TH1F* hHitCor = (TH1F*)testhit.Get("selectedHits"); | |
871 | // hHitCor->Sumw2(); | |
872 | // sumMult->Divide(hHitCor); | |
873 | TH1F* hPrim = (TH1F*)fList->FindObject(fPrimdNdeta.Data()); | |
874 | Float_t nPrimevents = hMCEvents->GetEntries(); | |
875 | //std::cout<<hMCEvents->GetEntries()<<std::endl; | |
876 | Float_t xb = hPrim->GetNbinsX(); | |
877 | Float_t xr = hPrim->GetXaxis()->GetXmax() - hPrim->GetXaxis()->GetXmin(); | |
878 | //std::cout<<xb/xr<<std::endl; | |
879 | hPrim->Scale(xb / xr ); | |
880 | if(nPrimevents > 0) | |
881 | hPrim->Scale(1/nPrimevents); | |
882 | ||
2dcdd4eb | 883 | |
884 | // primMult->Rebin(rebin); | |
885 | // primMult->Scale(1/rebin); | |
886 | // hPrim->Rebin(rebin); | |
887 | // hPrim->Scale(1/rebin); | |
888 | if(what != kHits && what != kHitsTrVtx) | |
c5058a61 | 889 | primMult = hPrim; |
70d74659 | 890 | |
c5058a61 | 891 | // hReldif->Add(hPrim,-1); |
892 | // hReldif->Divide(hPrim); | |
893 | ||
059c7c6b | 894 | |
895 | ||
896 | /////////////*******************New thing!!! | |
897 | ||
898 | //TH3D* hist3d = (TH3D*)fDataObject->ProjectionXYZ("hist3d"); | |
899 | // fDataObject->Sumw2(); | |
900 | //TH2F* projeta = (TH2F*)fDataObject->Project3D("yx"); | |
901 | ||
902 | // TProfile2D* projeta = fDataObject->Project3DProfile("yx"); | |
903 | // projeta->SetSumw2(); | |
904 | //TProfile* etaprofile = projeta->ProfileX("dNdeta_profile"); | |
905 | //TProfile* etaprofile = projeta->ProfileX("dNdeta_profile"); | |
906 | // TH1* etaprofile = projeta->ProjectionX("dNdeta_profile"); | |
907 | //TProfile* etaprofile = fDataObject->ProfileX(); | |
908 | /* | |
909 | TCanvas* ctest = new TCanvas("test","test",1200,600); | |
910 | ctest->Divide(3); | |
911 | ctest->cd(1); | |
912 | fDataObject->DrawCopy("box"); | |
913 | ctest->cd(2); | |
914 | projeta->DrawCopy("colz"); | |
915 | ctest->cd(3); | |
916 | etaprofile->DrawCopy(); | |
917 | */ | |
70d74659 | 918 | //sumMult->Rebin(rebin); |
919 | TH1F* hReldif = (TH1F*)sumMult->Clone("hReldif"); | |
920 | if(rebin != 1) { | |
921 | RebinHistogram(sumMult,rebin); | |
ba77343d | 922 | if(!realdata) { |
923 | RebinHistogram(primMult,rebin); | |
924 | RebinHistogram(hReldif,rebin); | |
925 | } | |
70d74659 | 926 | } |
927 | hReldif->Add(primMult,-1); | |
928 | hReldif->Divide(primMult); | |
c5058a61 | 929 | TCanvas* c2 = new TCanvas("dN/deta","dN/deta",640,960); |
930 | c2->Divide(1,2);//,0,0); | |
931 | c2->cd(2); | |
2dcdd4eb | 932 | gPad->Divide(1,2); |
933 | gPad->cd(1); | |
c5058a61 | 934 | gPad->SetGridy(); |
935 | gPad->SetGridx(); | |
936 | hReldif->SetTitle(""); | |
937 | hReldif->GetYaxis()->SetTitle("Relative difference"); | |
938 | hReldif->GetYaxis()->SetRangeUser(-0.2,0.2); | |
939 | hReldif->SetStats(0000); | |
940 | hReldif->GetXaxis()->SetTitle("#eta"); | |
ba77343d | 941 | |
c5058a61 | 942 | hReldif->DrawCopy(); |
059c7c6b | 943 | //SPD Rel dif |
944 | TH1F* hReldifSPD = (TH1F*)hSPDcombi->Clone("hReldifSPD"); | |
945 | if(rebin != 1) { | |
946 | RebinHistogram(hSPDcombi,rebin); | |
947 | if(!realdata) { | |
948 | RebinHistogram(hReldifSPD,rebin); | |
949 | } | |
950 | } | |
951 | hReldifSPD->Add(primMult,-1); | |
952 | hReldifSPD->Divide(primMult); | |
953 | hReldifSPD->DrawCopy("same"); | |
954 | ||
955 | TLine* zeroLine = new TLine(-4,0,6,0); | |
c5058a61 | 956 | zeroLine->SetLineWidth(2); |
957 | zeroLine->SetLineColor(kBlack); | |
958 | zeroLine->Draw(); | |
959 | hPrim->SetTitle(""); | |
960 | hPrim->SetLabelFont(132,"xyz"); | |
961 | hPrim->SetFillColor(kGray); | |
962 | primMult->SetFillColor(kBlue); | |
70d74659 | 963 | |
964 | ||
c5058a61 | 965 | c2->cd(1); |
966 | gPad->SetGridy(); | |
967 | gPad->SetGridx(); | |
968 | hPrim->GetYaxis()->SetRangeUser(2,10); | |
969 | //hPrim->GetYaxis()->SetRangeUser(0,20); | |
970 | hPrim->SetStats(0000); | |
971 | hPrim->GetXaxis()->SetTitle("#eta"); | |
ae26bdd7 | 972 | sumMult->SetTitle(""); |
973 | sumMult->SetStats(kFALSE); | |
059c7c6b | 974 | sumMult->SetXTitle("#eta"); |
975 | sumMult->SetYTitle("#frac{dN}{d#eta_{ch}}"); | |
70d74659 | 976 | // sumMult->GetYaxis()->SetRangeUser |
2dcdd4eb | 977 | //sumMult->Scale(1/(Float_t)rebin); |
c5058a61 | 978 | sumMult->DrawCopy("PE"); |
059c7c6b | 979 | //Syst errors |
980 | TH1F* sumMultSystPos = (TH1F*)sumMult->Clone("systerrorsPos"); | |
981 | TH1F* sumMultSystNeg = (TH1F*)sumMult->Clone("systerrorsNeg"); | |
982 | for(Int_t jj = 1;jj <=sumMultSystPos->GetNbinsX();jj++) { | |
983 | if(sumMultSystPos->GetBinCenter(jj) < 0) { | |
984 | sumMultSystPos->SetBinError(jj,0); | |
985 | sumMultSystPos->SetBinContent(jj,0); | |
986 | continue; | |
987 | } | |
988 | ||
989 | if(sumMultSystPos->GetBinContent(jj) > 0) | |
990 | sumMultSystPos->SetBinError(jj,TMath::Sqrt(TMath::Power(sumMultSystPos->GetBinError(jj),2)+TMath::Power(0.1*sumMultSystPos->GetBinContent(jj),2))); | |
991 | } | |
992 | for(Int_t jj = 1;jj <=sumMultSystNeg->GetNbinsX();jj++) { | |
993 | if(sumMultSystNeg->GetBinCenter(jj) > 0) { | |
994 | sumMultSystNeg->SetBinError(jj,0); | |
995 | sumMultSystNeg->SetBinContent(jj,0); | |
996 | continue; | |
997 | } | |
998 | ||
999 | if(sumMultSystNeg->GetBinContent(jj) > 0) | |
1000 | sumMultSystNeg->SetBinError(jj,TMath::Sqrt(TMath::Power(sumMultSystNeg->GetBinError(jj),2)+TMath::Power(0.1*sumMultSystNeg->GetBinContent(jj),2))); | |
1001 | } | |
1002 | ||
1003 | ||
1004 | ||
1005 | sumMultSystPos->SetFillColor(18); | |
1006 | sumMultSystNeg->SetFillColor(18); | |
541c19ed | 1007 | //sumMultSystPos->DrawCopy("sameE5"); |
1008 | //sumMultSystNeg->DrawCopy("sameE5"); | |
059c7c6b | 1009 | //End syst errors |
1010 | ||
1011 | ||
1012 | ||
2dcdd4eb | 1013 | if(what != kHits && what != kHitsTrVtx && hPrim->GetEntries()) |
ae26bdd7 | 1014 | hPrim->DrawCopy("E3same"); |
2dcdd4eb | 1015 | if(what == kHits || what == kHitsTrVtx) |
ae26bdd7 | 1016 | primMult->DrawCopy("E3same"); |
c5058a61 | 1017 | hPrim->GetXaxis()->SetTitle("#eta"); |
1018 | ||
2dcdd4eb | 1019 | TH1F* hMirror = new TH1F("hMirror","mirrored",sumMult->GetNbinsX(),sumMult->GetXaxis()->GetXmin(),sumMult->GetXaxis()->GetXmax()); |
1020 | ||
1021 | for(Int_t i=0.5*sumMult->GetNbinsX(); i<=sumMult->GetNbinsX(); i++) { | |
1022 | Float_t eta = sumMult->GetBinCenter(i); | |
1023 | Float_t value = sumMult->GetBinContent(i); | |
1024 | Float_t error = sumMult->GetBinError(i); | |
1025 | if(value > 0) { | |
1026 | hMirror->SetBinContent(hMirror->FindBin(-1*eta),value); | |
1027 | hMirror->SetBinError(hMirror->FindBin(-1*eta),error); | |
1028 | } | |
1029 | } | |
1030 | TH1F* hReldifLR = (TH1F*)sumMult->Clone("hReldifLeftRight"); | |
1031 | hReldifLR->Add(hMirror,-1); | |
1032 | hReldifLR->Divide(hMirror); | |
1033 | c2->cd(2); | |
1034 | gPad->cd(1); | |
059c7c6b | 1035 | hReldifLR->GetYaxis()->SetRangeUser(-0.2,0.2); |
1036 | ||
1037 | hReldifLR->SetYTitle("Relative difference left-right"); | |
1038 | hReldifLR->SetLabelSize(2*hReldifLR->GetLabelSize("X"),"X"); | |
1039 | hReldifLR->SetLabelSize(2*hReldifLR->GetLabelSize("Y"),"Y"); | |
1040 | hReldifLR->SetTitleSize(2*hReldifLR->GetTitleSize("X"),"X"); | |
1041 | hReldifLR->SetTitleSize(2*hReldifLR->GetTitleSize("Y"),"Y"); | |
1042 | hReldifLR->SetTitleOffset(0.7*hReldifLR->GetTitleOffset("X"),"X"); | |
1043 | hReldifLR->SetTitleOffset(0.5*hReldifLR->GetTitleOffset("Y"),"Y"); | |
1044 | ||
1045 | ||
1046 | if(realdata) | |
1047 | hReldifLR->DrawCopy(); | |
1048 | zeroLine->Draw(); | |
2dcdd4eb | 1049 | c2->cd(1); |
1050 | hMirror->SetMarkerStyle(25); | |
1051 | ||
c5058a61 | 1052 | hPrim->SetMarkerStyle(8); |
2dcdd4eb | 1053 | |
2dcdd4eb | 1054 | //graph2->Draw("P"); |
1055 | TH1F* hPythiaMB = 0; | |
059c7c6b | 1056 | |
541c19ed | 1057 | TFile* fpyt = 0; |
4b8bdb60 | 1058 | |
541c19ed | 1059 | if(!pythiafile.Contains("none")) |
1060 | fpyt = TFile::Open(pythiafile); | |
4b8bdb60 | 1061 | |
059c7c6b | 1062 | if(realdata ) { |
541c19ed | 1063 | if(fpyt && !pythiafile.Contains("none")) { |
059c7c6b | 1064 | hPythiaMB = (TH1F*)fpyt->Get("hPythiaMB"); |
1065 | } | |
1066 | else | |
1067 | std::cout<<"no pythia for this energy"<<std::endl; | |
2dcdd4eb | 1068 | } |
1069 | if(what != kHits && what != kHitsTrVtx) { | |
1070 | if(hPrim->GetEntries() != 0 && !realdata) | |
1071 | hPrim->DrawCopy("PE3same"); | |
1072 | if(realdata) { | |
1073 | //graph->Draw("PEsame"); | |
1074 | //graph2->Draw("PEsame"); | |
059c7c6b | 1075 | if(what != kMultNSD) { |
1076 | graphinel->Draw("PEsame"); | |
1077 | graphinel2->Draw("PEsame"); | |
541c19ed | 1078 | p7742_d1x1y1->Draw("PEsame"); |
059c7c6b | 1079 | } |
1080 | else{ | |
1081 | graph->Draw("PEsame"); | |
1082 | graph2->Draw("PEsame"); | |
1083 | ||
1084 | } | |
1085 | ||
2dcdd4eb | 1086 | } |
1087 | ||
1088 | } | |
2dcdd4eb | 1089 | |
c5058a61 | 1090 | |
059c7c6b | 1091 | sumMult->DrawCopy("PEsame"); |
c5058a61 | 1092 | |
1093 | ||
059c7c6b | 1094 | |
1095 | hSPDcombi->DrawCopy("same"); | |
1096 | if(realdata) | |
1097 | hMirror->DrawCopy("PEsame"); | |
1098 | ||
1099 | TLegend* leg = new TLegend(0.3,0.2,0.7,0.45,""); | |
2dcdd4eb | 1100 | if(!realdata) { |
1101 | if(what != kHits && what != kHitsTrVtx) | |
1102 | leg->AddEntry(hPrim,"Primary","pf"); | |
1103 | else | |
1104 | leg->AddEntry(primMult,"Hits","pf"); | |
1105 | } | |
059c7c6b | 1106 | |
1107 | if(what == kMult) | |
1108 | leg->AddEntry(sumMult,"FMD INEL","p"); | |
1109 | else if(what == kMultTrVtx) | |
1110 | leg->AddEntry(sumMult,"FMD TrVtx","p"); | |
1111 | else if(what == kMultNSD) | |
1112 | leg->AddEntry(sumMult,"FMD NSD","p"); | |
2dcdd4eb | 1113 | |
1114 | ||
2dcdd4eb | 1115 | if(realdata) { |
059c7c6b | 1116 | if(what == kMult) |
541c19ed | 1117 | leg->AddEntry(hMirror,"Mirror FMD INEL","p"); |
059c7c6b | 1118 | else if(what == kMultTrVtx) |
541c19ed | 1119 | leg->AddEntry(hMirror,"Mirror FMD TrVtx","p"); |
059c7c6b | 1120 | else if(what == kMultNSD) |
541c19ed | 1121 | leg->AddEntry(hMirror,"Mirror FMD NSD","p"); |
059c7c6b | 1122 | |
1123 | if(what == kMultNSD) { | |
1124 | leg->AddEntry(graph,"UA5 NSD","p"); | |
1125 | leg->AddEntry(graph2,"Mirror UA5 NSD","p"); } | |
1126 | else if(what == kMult) { | |
2dcdd4eb | 1127 | leg->AddEntry(graphinel,"UA5 INEL","p"); |
1128 | leg->AddEntry(graphinel2,"Mirror UA5 INEL","p"); | |
059c7c6b | 1129 | } |
1130 | //leg->AddEntry(hPythiaMB,"Pythia MB","l"); | |
541c19ed | 1131 | leg->AddEntry(hSPDcombi,"HHD SPD clusters","p"); |
1132 | leg->AddEntry(p7742_d1x1y1,"ALICE INEL published","p"); | |
2dcdd4eb | 1133 | |
1134 | } | |
c5058a61 | 1135 | leg->Draw(); |
2dcdd4eb | 1136 | |
1137 | c2->cd(2); | |
1138 | gPad->cd(2); | |
1139 | TH1F* hRatioMultPythia = 0; | |
1140 | TH1F* hRatioMultUA5 = 0; | |
541c19ed | 1141 | TH1F* hRatioMultUA5_rebin5 = new TH1F("hRatioMultUA5_rebin5","hRatioMultUA5_rebin5",sumMult->GetNbinsX(),sumMult->GetXaxis()->GetXmin(),sumMult->GetXaxis()->GetXmax()); |
1142 | ||
1143 | Double_t xval=0, yval=0; | |
1144 | Int_t ipos=0; | |
1145 | for(Int_t bb =hRatioMultUA5_rebin5->FindBin(0); bb<=hRatioMultUA5_rebin5->GetNbinsX();bb++) { | |
1146 | ||
1147 | ||
1148 | ||
1149 | xval=yval=0; | |
1150 | ||
1151 | if(hRatioMultUA5_rebin5->GetBinCenter(bb) >= 0) { | |
1152 | ||
1153 | graphinel->GetPoint(ipos,xval,yval); | |
1154 | ||
1155 | if(yval>0) { | |
1156 | hRatioMultUA5_rebin5->SetBinContent(bb,yval); | |
1157 | hRatioMultUA5_rebin5->SetBinError(bb,graphinel->GetErrorY(ipos)); | |
1158 | if(hRatioMultUA5_rebin5->GetBinCenter(bb) < 4) { | |
1159 | hRatioMultUA5_rebin5->SetBinContent(hRatioMultUA5_rebin5->FindBin(-1*hRatioMultUA5_rebin5->GetBinCenter(bb)),yval); | |
1160 | hRatioMultUA5_rebin5->SetBinError(hRatioMultUA5_rebin5->FindBin(-1*hRatioMultUA5_rebin5->GetBinCenter(bb)),graphinel->GetErrorY(ipos)); | |
1161 | ||
1162 | } | |
1163 | ipos++; | |
1164 | } | |
1165 | } | |
1166 | } | |
1167 | ||
1168 | ||
1169 | ||
2dcdd4eb | 1170 | if(realdata) { |
1171 | ||
1172 | Float_t ratio = 1; | |
541c19ed | 1173 | if(hPythiaMB) { |
1174 | if(hPythiaMB->GetNbinsX() != sumMult->GetNbinsX()) | |
1175 | ratio = (Float_t)sumMult->GetNbinsX() / (Float_t)hPythiaMB->GetNbinsX(); | |
1176 | } | |
1177 | ||
2dcdd4eb | 1178 | hRatioMultPythia = (TH1F*)sumMult->Clone("hRatioMultPythia"); |
1179 | hRatioMultUA5 = (TH1F*)sumMult->Clone("hRatioMultUA5"); | |
1180 | if(ratio > 1) { | |
1181 | hRatioMultPythia->Rebin(ratio); | |
1182 | hRatioMultPythia->Scale(1/ratio); | |
1183 | } | |
541c19ed | 1184 | if(ratio < 1 && hPythiaMB) { |
2dcdd4eb | 1185 | hPythiaMB->Rebin(1/ratio); |
1186 | hPythiaMB->Scale(ratio); | |
1187 | } | |
1188 | ||
059c7c6b | 1189 | //hRatioMultPythia->Divide(hPythiaMB); |
1190 | /* | |
2dcdd4eb | 1191 | for(Int_t j=1;j<=hRatioMultUA5->GetNbinsX(); j++) { |
1192 | Float_t data = hRatioMultUA5->GetBinContent(j); | |
1193 | Float_t errordata = hRatioMultUA5->GetBinError(j); | |
1194 | Float_t ua5 = 0; | |
1195 | Float_t ua5error = 0; | |
1196 | ||
1197 | ||
1198 | if(hRatioMultUA5->GetBinCenter(j) > 0) { | |
70d74659 | 1199 | Double_t* xv = graphinel->GetX(); |
1200 | Double_t* yv = graphinel->GetY(); | |
1201 | Double_t* eyv = graphinel->GetEY(); | |
2dcdd4eb | 1202 | |
1203 | for(Int_t kk =0; kk<graphinel->GetN();kk++) { | |
70d74659 | 1204 | if(xv[kk] < hRatioMultUA5->GetBinCenter(j) && xv[kk+1] > hRatioMultUA5->GetBinCenter(j)) { |
1205 | ua5 = yv[kk]; | |
1206 | ua5error = eyv[kk]; | |
2dcdd4eb | 1207 | } |
1208 | } | |
1209 | ||
1210 | } | |
1211 | else { | |
70d74659 | 1212 | Double_t* xv = graphinel2->GetX(); |
1213 | Double_t* yv = graphinel2->GetY(); | |
1214 | Double_t* eyv = graphinel->GetEY(); | |
2dcdd4eb | 1215 | |
1216 | for(Int_t kk =0; kk<graphinel2->GetN();kk++) { | |
70d74659 | 1217 | if(xv[kk+1] < hRatioMultUA5->GetBinCenter(j) && xv[kk] > hRatioMultUA5->GetBinCenter(j)) { |
1218 | ua5 = yv[kk]; | |
1219 | ua5error = eyv[kk]; | |
2dcdd4eb | 1220 | } |
1221 | } | |
1222 | ||
1223 | } | |
1224 | ||
1225 | Float_t ratio2 = 1; | |
1226 | if(ua5> 0) { | |
1227 | ratio2 = data / ua5; | |
1228 | Float_t errorratio = 0; | |
1229 | if(ua5 != 0 && data !=0) | |
1230 | errorratio = ratio2*TMath::Sqrt(TMath::Power(ua5error/ua5,2)+TMath::Power(errordata/data,2)); | |
1231 | hRatioMultUA5->SetBinContent(j,ratio2); | |
1232 | hRatioMultUA5->SetBinError(j,errorratio); | |
1233 | } | |
059c7c6b | 1234 | |
1235 | */ | |
541c19ed | 1236 | if(rebin !=5) { |
059c7c6b | 1237 | TGraphErrors* tmp1; |
1238 | if(what == kMultNSD) | |
1239 | tmp1 = (TGraphErrors*)graph->Clone("UA5tmp"); | |
1240 | else | |
1241 | tmp1 = (TGraphErrors*)graphinel->Clone("UA5tmp"); | |
1242 | ||
1243 | tmp1->Fit("pol8","Q0","Q0",1.5,6); | |
1244 | TF1* hFit = tmp1->GetFunction("pol8"); | |
1245 | for(Int_t ii = hRatioMultUA5->GetNbinsX() / 2; ii<hRatioMultUA5->GetNbinsX();ii++) { | |
1246 | if(hRatioMultUA5->GetBinContent(ii) > 0) { | |
1247 | Float_t errorratio = hRatioMultUA5->GetBinError(ii) / hRatioMultUA5->GetBinContent(ii); | |
1248 | hRatioMultUA5->SetBinContent(ii, | |
1249 | hRatioMultUA5->GetBinContent(ii) / | |
1250 | ((hRatioMultUA5->GetBinCenter(ii) > 4.8) ? hFit->Eval(hRatioMultUA5->GetBinCenter(ii-1)) : hFit->Eval(hRatioMultUA5->GetBinCenter(ii)))); | |
1251 | hRatioMultUA5->SetBinError(ii,hRatioMultUA5->GetBinContent(ii) * TMath::Sqrt(0.02*0.02 + TMath::Power(errorratio,2))); | |
1252 | ||
1253 | ||
1254 | } | |
1255 | ||
1256 | } | |
1257 | ||
1258 | TGraphErrors* tmp2; | |
1259 | if(what == kMultNSD) | |
1260 | tmp2 = (TGraphErrors*)graph2->Clone("UA5tmp2"); | |
1261 | else | |
1262 | tmp2 = (TGraphErrors*)graphinel2->Clone("UA5tmp2"); | |
2dcdd4eb | 1263 | |
059c7c6b | 1264 | //tmp2->Fit("pol8","Q0","Q0",-3.7,-1.5); |
1265 | tmp2->Fit("pol7","Q0","Q0",-3.7,0); | |
1266 | hFit = tmp2->GetFunction("pol7"); | |
1267 | for(Int_t ii = 0; ii<hRatioMultUA5->GetNbinsX()/2;ii++) { | |
1268 | if(hRatioMultUA5->GetBinContent(ii) > 0) { | |
1269 | Float_t errorratio = hRatioMultUA5->GetBinError(ii) / hRatioMultUA5->GetBinContent(ii); | |
1270 | hRatioMultUA5->SetBinContent(ii,hRatioMultUA5->GetBinContent(ii) / hFit->Eval(hRatioMultUA5->GetBinCenter(ii)) ); | |
1271 | hRatioMultUA5->SetBinError(ii,hRatioMultUA5->GetBinContent(ii) * TMath::Sqrt(0.02*0.02 + TMath::Power(errorratio,2))); | |
1272 | ||
1273 | } | |
1274 | ||
1275 | ||
1276 | graphinel->GetHistogram()->SetStats(kFALSE); | |
1277 | graphinel2->GetHistogram()->SetStats(kFALSE); | |
1278 | ||
1279 | } | |
541c19ed | 1280 | } |
1281 | else hRatioMultUA5->Divide(hRatioMultUA5_rebin5); | |
059c7c6b | 1282 | //} |
1283 | ||
1284 | ||
1285 | ||
1286 | gPad->SetGridx(); | |
1287 | gPad->SetGridy(); | |
1288 | TLine* oneLine = new TLine(-4,1,6,1); | |
1289 | oneLine->SetLineWidth(2); | |
2dcdd4eb | 1290 | |
2dcdd4eb | 1291 | hRatioMultUA5->SetMarkerColor(kGreen); |
1292 | hRatioMultUA5->SetMarkerStyle(20); | |
059c7c6b | 1293 | hRatioMultUA5->GetYaxis()->SetRangeUser(0.75,1.25); |
1294 | ||
1295 | hRatioMultUA5->SetYTitle("Ratio FMD/UA5"); | |
1296 | hRatioMultUA5->SetLabelSize(2*hRatioMultUA5->GetLabelSize("X"),"X"); | |
1297 | hRatioMultUA5->SetLabelSize(2*hRatioMultUA5->GetLabelSize("Y"),"Y"); | |
1298 | hRatioMultUA5->SetTitleSize(2*hRatioMultUA5->GetTitleSize("X"),"X"); | |
1299 | hRatioMultUA5->SetTitleSize(2*hRatioMultUA5->GetTitleSize("Y"),"Y"); | |
1300 | hRatioMultUA5->SetTitleOffset(0.7*hRatioMultUA5->GetTitleOffset("X"),"X"); | |
1301 | hRatioMultUA5->SetTitleOffset(0.5*hRatioMultUA5->GetTitleOffset("Y"),"Y"); | |
1302 | ||
1303 | ||
1304 | ||
1305 | hRatioMultUA5->DrawCopy(); | |
1306 | //hRatioMultPythia->DrawCopy("same"); | |
2dcdd4eb | 1307 | oneLine->Draw("same"); |
1308 | } | |
059c7c6b | 1309 | |
1310 | TCanvas* cPaper = new TCanvas("FMD_SPD_UA5","FMD_SPD_UA5",800,600); | |
1311 | cPaper->cd(); | |
1312 | ||
1313 | sumMult->DrawCopy(); | |
541c19ed | 1314 | //sumMultSystPos->DrawCopy("sameE5"); |
1315 | // sumMultSystNeg->DrawCopy("sameE5"); | |
059c7c6b | 1316 | //hTestdNdeta->DrawCopy("same"); |
541c19ed | 1317 | //hSPDcombi->DrawCopy("same"); |
1318 | p7742_d1x1y1->Draw("PEsame"); | |
1319 | ||
1320 | TLegend* leg2 = new TLegend(0.3,0.2,0.7,0.45,""); | |
1321 | if(what == kMult) | |
1322 | leg2->AddEntry(sumMult,"FMD INEL","p"); | |
1323 | else if(what == kMultTrVtx) | |
1324 | leg2->AddEntry(sumMult,"FMD TrVtx","p"); | |
1325 | else if(what == kMultNSD) | |
1326 | leg2->AddEntry(sumMult,"FMD NSD","p"); | |
1327 | ||
1328 | if(realdata) { | |
1329 | ||
1330 | /* if(what == kMult) | |
1331 | leg2->AddEntry(hMirror,"Mirror FMD INEL","p"); | |
1332 | else if(what == kMultTrVtx) | |
1333 | leg2->AddEntry(hMirror,"FMD TrVtx","p"); | |
1334 | else if(what == kMultNSD) | |
1335 | leg2->AddEntry(hMirror,"FMD NSD","p");*/ | |
1336 | ||
1337 | if(what == kMultNSD) { | |
1338 | leg2->AddEntry(graph,"UA5 NSD","p"); | |
1339 | leg2->AddEntry(graph2,"Mirror UA5 NSD","p"); } | |
1340 | else if(what == kMult) { | |
1341 | leg2->AddEntry(graphinel,"UA5 INEL","p"); | |
1342 | leg2->AddEntry(graphinel2,"Mirror UA5 INEL","p"); | |
1343 | } | |
1344 | //leg2->AddEntry(hPythiaMB,"Pythia MB","l"); | |
1345 | //leg2->AddEntry(hSPDcombi,"HHD SPD clusters","p"); | |
1346 | leg2->AddEntry(p7742_d1x1y1,"ALICE INEL published","p"); | |
1347 | ||
1348 | } | |
1349 | leg2->Draw(); | |
1350 | ||
1351 | ||
1352 | ||
059c7c6b | 1353 | if(what != kMultNSD) { |
1354 | graphinel->Draw("PEsame"); | |
1355 | graphinel2->Draw("PEsame"); | |
1356 | } | |
1357 | else { | |
1358 | graph->Draw("PEsame"); | |
1359 | graph2->Draw("PEsame"); | |
1360 | } | |
1361 | ||
1362 | sumMult->DrawCopy("PEsame"); | |
2dcdd4eb | 1363 | c2->cd(1); |
059c7c6b | 1364 | |
1365 | c2->Print("fmdana.png"); | |
c5058a61 | 1366 | TString species; |
1367 | ||
1368 | switch(what) { | |
1369 | case kMult: | |
541c19ed | 1370 | species = "mult"; |
c5058a61 | 1371 | break; |
1372 | case kMultTrVtx: | |
541c19ed | 1373 | species = "mult_TrVtx"; |
c5058a61 | 1374 | break; |
1375 | case kHits: | |
541c19ed | 1376 | species = "hits"; |
c5058a61 | 1377 | break; |
2dcdd4eb | 1378 | case kHitsTrVtx: |
541c19ed | 1379 | species = "hits_TrVtx"; |
2dcdd4eb | 1380 | break; |
059c7c6b | 1381 | case kMultNSD: |
541c19ed | 1382 | species = "mult_NSD"; |
059c7c6b | 1383 | break; |
1384 | ||
c5058a61 | 1385 | default: |
1386 | AliWarning("no valid Analysis entry!"); | |
1387 | break; | |
1388 | } | |
1389 | TFile fout(Form("fmd_dNdeta_%s.root",species.Data()),"recreate"); | |
2dcdd4eb | 1390 | if(hRatioMultPythia) |
1391 | hRatioMultPythia->Write(); | |
1392 | hPrim->Write(); | |
059c7c6b | 1393 | graph->Write("UA5nsd"); |
1394 | graph2->Write("UA5mirrornsd"); | |
1395 | graphinel->Write("UA5inel"); | |
1396 | graphinel2->Write("UA5mirrorinel"); | |
c5058a61 | 1397 | sumMult->Write(); |
059c7c6b | 1398 | hSPDcombi->Write(); |
c5058a61 | 1399 | hReldif->Write(); |
70d74659 | 1400 | fMultList[what]->Write(); |
2dcdd4eb | 1401 | c2->Write(); |
059c7c6b | 1402 | //fDataObject->Write(); |
c5058a61 | 1403 | fout.Close(); |
1404 | ||
7e2bf482 | 1405 | } |
1406 | //_____________________________________________________________________ | |
1407 | void AliFMDDndeta::CreateSharingEfficiency(const Char_t* filename, Bool_t store) { | |
2dcdd4eb | 1408 | //Generate sharing efficiency |
7e2bf482 | 1409 | Init(filename); |
1410 | AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance(); | |
1411 | //pars->Init(kTRUE,AliFMDAnaParameters::kBackgroundCorrection); | |
1412 | Int_t nVertexBins = pars->GetNvtxBins(); | |
1413 | ||
1414 | SetNames(kHits); | |
1415 | TH1I* hEvents = (TH1I*)fList->FindObject(fEvents.Data()); | |
1416 | TH1I* hPrimEvents = (TH1I*)fList->FindObject(fPrimEvents.Data()); | |
1417 | ||
1418 | SetNames(kHitsTrVtx); | |
1419 | TH1I* hEventsTrVtx = (TH1I*)fList->FindObject(fEvents.Data()); | |
1420 | TH1I* hPrimEventsTrVtx = (TH1I*)fList->FindObject(fPrimEvents.Data()); | |
1421 | ||
1422 | AliFMDAnaCalibSharingEfficiency* sharEff = new AliFMDAnaCalibSharingEfficiency(); | |
1423 | ||
1424 | for(Int_t det = 1; det<=3; det++) { | |
1425 | Int_t maxRing = (det == 1 ? 0 : 1); | |
1426 | for(Int_t ring = 0;ring<=maxRing;ring++) { | |
1427 | Char_t ringChar = (ring == 0 ? 'I' : 'O'); | |
1428 | for(Int_t v=0; v< nVertexBins; v++) { | |
1429 | TH1F* hHits = (TH1F*)fList->FindObject(GetAnalysisName(kHits,det, ringChar, v)); | |
1430 | TH1F* hHitsTrVtx = (TH1F*)fList->FindObject(GetAnalysisName(kHitsTrVtx,det, ringChar, v)); | |
1431 | TH1F* hMCHits = (TH1F*)fList->FindObject(GetPrimName(kHits,det, ringChar, v)); | |
1432 | TH1F* hMCHitsTrVtx = (TH1F*)fList->FindObject(GetPrimName(kHitsTrVtx,det, ringChar, v)); | |
1433 | ||
541c19ed | 1434 | TH1F* hCorrection = (TH1F*)hHits->Clone(Form("hCorrection_FMD%d%c_vtx%d",det, ringChar, v)); |
1435 | TH1F* hCorrectionTrVtx = (TH1F*)hHitsTrVtx->Clone(Form("hCorrection_FMD%d%c_vtx%d",det, ringChar, v)); | |
059c7c6b | 1436 | if(hEvents->GetBinContent(v+1)) |
1437 | hCorrection->Scale(1./(Float_t)hEvents->GetBinContent(v+1)); | |
1438 | if(hPrimEvents->GetBinContent(v+1)) | |
1439 | hMCHits->Scale(1./(Float_t)hPrimEvents->GetBinContent(v+1)); | |
1440 | if(hEventsTrVtx->GetBinContent(v+1)) | |
1441 | hCorrectionTrVtx->Scale(1./(Float_t)hEventsTrVtx->GetBinContent(v+1)); | |
1442 | if(hPrimEventsTrVtx->GetBinContent(v+1)) | |
1443 | hMCHitsTrVtx->Scale(1./(Float_t)hPrimEventsTrVtx->GetBinContent(v+1)); | |
7e2bf482 | 1444 | |
7e2bf482 | 1445 | hCorrection->Divide(hMCHits); |
1446 | hCorrectionTrVtx->Divide(hMCHitsTrVtx); | |
1447 | ||
059c7c6b | 1448 | //sharEff->SetSharingEff(det,ringChar,v,hCorrection); |
7e2bf482 | 1449 | sharEff->SetSharingEff(det,ringChar,v,hCorrection); |
1450 | sharEff->SetSharingEffTrVtx(det,ringChar,v,hCorrectionTrVtx); | |
059c7c6b | 1451 | |
7e2bf482 | 1452 | // std::cout<<hHits<<" "<<hHitsTrVtx<<" "<<hPrim<<" "<<hPrimTrVtx<<std::endl; |
1453 | ||
1454 | } | |
1455 | } | |
1456 | } | |
1457 | ||
1458 | if(store) { | |
1459 | TFile fsharing(pars->GetPath(pars->GetSharingEffID()),"RECREATE"); | |
1460 | sharEff->Write(AliFMDAnaParameters::GetSharingEffID()); | |
1461 | fsharing.Close(); | |
1462 | } | |
1463 | ||
c5058a61 | 1464 | } |
2dcdd4eb | 1465 | //_____________________________________________________________________ |
1466 | void AliFMDDndeta::RebinHistogram(TH1F* hist, Int_t rebin) { | |
1467 | //Clever rebinner | |
1468 | ||
1469 | if(hist->GetNbinsX()%rebin) { | |
1470 | std::cout<<"cannot rebin "<<hist->GetNbinsX()%rebin<< "is not zero"<<std::endl; | |
1471 | return; | |
c5058a61 | 1472 | |
2dcdd4eb | 1473 | } |
1474 | TH1F* cloneHist = (TH1F*)hist->Clone(); | |
1475 | cloneHist->Rebin(rebin); | |
1476 | ||
1477 | Int_t nBinsNew = hist->GetNbinsX() / rebin; | |
1478 | ||
1479 | for(Int_t i =1;i<=nBinsNew; i++) { | |
1480 | Float_t bincontent = 0; | |
1481 | Float_t sumofw = 0; | |
1482 | Float_t sumformean = 0; | |
1483 | Int_t nBins = 0; | |
1484 | for(Int_t j=1; j<=rebin;j++) { | |
1485 | if(hist->GetBinContent((i-1)*rebin + j) > 0) { | |
1486 | bincontent = bincontent + hist->GetBinContent((i-1)*rebin + j); | |
1487 | nBins++; | |
1488 | Float_t weight = 1 / TMath::Power(hist->GetBinError((i-1)*rebin + j),2); | |
1489 | sumofw = sumofw + weight; | |
1490 | sumformean = sumformean + weight*hist->GetBinContent((i-1)*rebin + j); | |
1491 | ||
1492 | } | |
1493 | } | |
1494 | ||
1495 | if(bincontent > 0 ) { | |
1496 | cloneHist->SetBinContent(i,sumformean / sumofw); | |
1497 | cloneHist->SetBinError(i,TMath::Sqrt(sumformean));//TMath::Sqrt(1/sumofw)); | |
1498 | } | |
1499 | } | |
1500 | hist->Rebin(rebin); | |
1501 | for(Int_t i =1;i<=nBinsNew; i++) { | |
1502 | hist->SetBinContent(i,cloneHist->GetBinContent(i)); | |
1503 | } | |
1504 | ||
1505 | ||
1506 | } | |
c5058a61 | 1507 | //_____________________________________________________________________ |
1508 | // | |
1509 | // EOF | |
1510 | // |