2 #include "AliFMDDndeta.h"
6 #include "AliFMDAnaParameters.h"
7 #include "AliFMDAnaCalibSharingEfficiency.h"
9 //#include "TObjArray.h"
12 #include "TGraphErrors.h"
19 #define SMALLNUMBER 0.0001
21 ClassImp(AliFMDDndeta)
22 //_____________________________________________________________________
24 AliFMDDndeta::AliFMDDndeta()
37 fAnalysisNames[0] = "Hits";
38 fAnalysisNames[1] = "HitsTrVtx";
39 fAnalysisNames[2] = "dNdeta";
40 fAnalysisNames[3] = "dNdetaTrVtx";
42 for(Int_t i=0; i<4;i++)
43 fMultList[i] = new TList();
45 //_____________________________________________________________________
46 void AliFMDDndeta::SetNames(Analysis what) {
47 // Set names of histograms from analysis
51 fPrimEvents.Form("nMCEventsNoCuts"); //was nMCEvents
52 fEvents.Form("nEvents");
53 fPrimdNdeta.Form("hMultvsEtaNoCuts");
56 fPrimEvents.Form("nMCEvents");
57 fEvents.Form("nEvents");
58 fPrimdNdeta.Form("hMultvsEtaNoCuts");
61 fPrimEvents.Form("nMCEventsNoCuts");
62 fEvents.Form("nEvents");
63 fPrimdNdeta.Form("hMultvsEtaNoCuts");
66 fPrimEvents.Form("nMCEvents");
67 fEvents.Form("nEvents");
68 fPrimdNdeta.Form("hMultvsEta");
74 //_____________________________________________________________________
75 const char* AliFMDDndeta::GetAnalysisName(Analysis what, UShort_t det, Char_t ring, Int_t vtxbin) {
76 //Get names of histograms
77 const char* name = "";
81 name = Form("hits_NoCuts_FMD%d%c_vtxbin%d_proj",det,ring,vtxbin); //NoCuts added
84 name = Form("hits_FMD%d%c_vtxbin%d_proj",det,ring,vtxbin);
87 name = Form("dNdeta_FMD%d%c_vtxbin%d_proj",det,ring,vtxbin);
90 name = Form("dNdeta_FMD%d%c_TrVtx_vtxbin%d_proj",det,ring,vtxbin);
95 //std::cout<<name.Data()<<std::endl;
98 //_____________________________________________________________________
99 const char* AliFMDDndeta::GetPrimName(Analysis what, UShort_t det, Char_t ring, Int_t vtxbin) {
100 //Get names of primaries
101 const char* name = "";
105 name = Form("hMCHits_nocuts_FMD%d%c_vtxbin%d",det,ring,vtxbin); //nocuts added
108 name = Form("hMCHits_FMD%d%c_vtxbin%d",det,ring,vtxbin);
111 name = Form("primmult_vtxbin%d",vtxbin);
114 name = Form("primmult_NoCuts_vtxbin%d",vtxbin);
121 //_____________________________________________________________________
122 void AliFMDDndeta::GenerateHits(Analysis what) {
123 //Generate the hits distributions
124 AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
125 TH2F* hTmp = pars->GetBackgroundCorrection(1,'I',0);
126 Int_t nVertexBins = pars->GetNvtxBins();
127 Int_t nEtaBins = hTmp->GetNbinsX();
128 Float_t etaMin = hTmp->GetXaxis()->GetXmin();
129 Float_t etaMax = hTmp->GetXaxis()->GetXmax();
131 for(Int_t i = 0; i<nVertexBins;i++) {
132 TH1F* hHits = new TH1F(Form("hMCHits_vtxbin%d_%s",i,fAnalysisNames[what]),Form("hHits_vtxbin%d_%s",i,fAnalysisNames[what]),nEtaBins,etaMin,etaMax);
134 fMultList[what]->Add(hHits);
137 for(Int_t det = 1; det<=3; det++) {
138 Int_t maxRing = (det == 1 ? 0 : 1);
139 for(Int_t ring = 0;ring<=maxRing;ring++) {
141 Char_t ringChar = (ring == 0 ? 'I' : 'O');
142 for(Int_t v=0; v< nVertexBins; v++) {
143 TH1F* hits = (TH1F*)fList->FindObject(GetPrimName(what,det,ringChar,v));
145 Int_t nNonZero = 0, nNonZeroInData = 0;
148 for(Int_t i =1;i<=hits->GetNbinsX();i++) {
149 if(hits->GetBinContent(i) !=0)
153 TH1F* sumMultHist = (TH1F*)fMultList[what]->FindObject(Form("hMCHits_vtxbin%d_%s",v,fAnalysisNames[what]));
154 for(Int_t i =1;i<=sumMultHist->GetNbinsX();i++) {
155 if(hits->GetBinContent(i) == 0 ) continue;
159 if(nNonZeroInData <=fNbinsToCut || nNonZeroInData > (nNonZero - fNbinsToCut)) {
162 if(sumMultHist->GetBinContent(i) < SMALLNUMBER && TMath::Abs(hits->GetBinContent(i)) > 0){
163 sumMultHist->SetBinContent(i,hits->GetBinContent(i));
164 sumMultHist->SetBinError(i,hits->GetBinError(i));
169 Float_t sumofw = (1/TMath::Power(hits->GetBinError(i),2)) + (1/TMath::Power(sumMultHist->GetBinError(i),2));
170 Float_t wav = (hits->GetBinContent(i)*(1/TMath::Power(hits->GetBinError(i),2)) + sumMultHist->GetBinContent(i)*(1/TMath::Power(sumMultHist->GetBinError(i),2)))/sumofw;
171 Float_t error = 1/TMath::Sqrt(sumofw);
172 sumMultHist->SetBinContent(i, wav);
173 sumMultHist->SetBinError(i, error);
181 //_____________________________________________________________________
182 void AliFMDDndeta::Init(const Char_t* filename) {
183 //Initialize everything from file
184 TFile* fin = TFile::Open(filename);
187 AliWarning("No file - exiting !");
190 AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
193 TList* list = (TList*)fin->Get(Form("%s/BackgroundCorrected",pars->GetDndetaAnalysisName()));
195 if(!list) //an old file ? Perhaps...
196 list = (TList*)fin->Get("BackgroundCorrected");
203 //_____________________________________________________________________
204 void AliFMDDndeta::Init(TList* list) {
205 //Initialize everything from TList
208 AliWarning("No list - exiting !");
212 fList = (TList*)list->Clone("inputList");
214 fIsGenerated[kHits] = kFALSE;
215 fIsGenerated[kMult] = kFALSE;
216 fIsGenerated[kMultTrVtx] = kFALSE;
217 fIsGenerated[kHitsTrVtx] = kFALSE;
221 //_____________________________________________________________________
222 void AliFMDDndeta::GenerateMult(Analysis what) {
226 AliWarning("Not initialised - call Init to remedy");
230 if(fIsGenerated[what]) {
231 AliWarning("Already generated - have a look at the results!");
234 else fIsGenerated[what] = kTRUE;
238 if(what == kHits || what == kHitsTrVtx)
241 TH1I* hMCEvents = (TH1I*)fList->FindObject(fPrimEvents.Data());
243 AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
245 TH2F* hTmp = pars->GetBackgroundCorrection(1,'I',0);
246 Int_t nVertexBins = pars->GetNvtxBins();
247 Int_t nEtaBins = hTmp->GetNbinsX();
248 Float_t etaMin = hTmp->GetXaxis()->GetXmin();
249 Float_t etaMax = hTmp->GetXaxis()->GetXmax();
251 for(Int_t i = 0; i<nVertexBins;i++) {
252 TH1F* hMult = new TH1F(Form("hMult_vtxbin%d_%s",i,fAnalysisNames[what]),Form("hMult_vtxbin%d_%s",i,fAnalysisNames[what]),nEtaBins,etaMin,etaMax);
254 fMultList[what]->Add(hMult);
257 for(Int_t det = 1; det<=3;det++) {
258 Int_t maxRing = (det == 1 ? 0 : 1);
259 for(Int_t iring = 0; iring<=maxRing; iring++) {
260 Char_t ringChar = (iring == 0 ? 'I' : 'O');
261 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);
262 fMultList[what]->Add(hRingMult);
265 TH1I* hEvents = (TH1I*)fList->FindObject(fEvents.Data());
270 for(Int_t det = 1; det<=3; det++) {
271 Int_t maxRing = (det == 1 ? 0 : 1);
272 for(Int_t ring = 0;ring<=maxRing;ring++) {
274 Char_t ringChar = (ring == 0 ? 'I' : 'O');
275 for(Int_t v=0; v< nVertexBins; v++) {
277 if(what == kHits || what == kHitsTrVtx)
278 hPrimVtx = (TH1F*)fMultList[what]->FindObject(Form("hMCHits_vtxbin%d_%s",v,fAnalysisNames[what]));
280 hPrimVtx = (TH1F*)fList->FindObject(GetPrimName(what,det,ringChar,v));
283 Float_t nPrimevents = hMCEvents->GetBinContent(v+1);
284 Float_t xb = hPrimVtx->GetNbinsX();
285 Float_t xr = hPrimVtx->GetXaxis()->GetXmax() - hPrimVtx->GetXaxis()->GetXmin();
286 hPrimVtx->Scale(xb / xr );
288 hPrimVtx->Scale(1/nPrimevents);
292 Double_t delta = 2*pars->GetVtxCutZ()/pars->GetNvtxBins();
293 Float_t vtxZ1 = (delta*v) - pars->GetVtxCutZ();
294 Float_t vtxZ2 = (delta*(v+1)) - pars->GetVtxCutZ();
296 if(vtxZ1< fVtxCut1 || vtxZ2 >fVtxCut2)
298 Float_t nEvents = (Float_t)hEvents->GetBinContent(v+1);
300 //TH1F* multhistproj = (TH1F*)fList->FindObject(Form("dNdeta_FMD%d%c_vtxbin%d_proj",det,ringChar,v));
301 TH1F* multhistproj = (TH1F*)fList->FindObject(GetAnalysisName(what,det,ringChar,v));
303 multhistproj->Scale(1/nEvents);
304 Float_t xnBins = multhistproj->GetNbinsX();
305 Float_t xrange = multhistproj->GetXaxis()->GetXmax() - multhistproj->GetXaxis()->GetXmin();
306 multhistproj->Scale(xnBins / xrange);
310 Int_t nNonZero = 0, nNonZeroInData = 0;
314 for(Int_t i =1;i<=multhistproj->GetNbinsX();i++) {
315 if(multhistproj->GetBinContent(i) !=0)
318 Int_t nBinsOld = fNbinsToCut;
319 // if(det == 2 && ringChar =='I') {
322 TH1F* hRingMult = (TH1F*)fMultList[what]->FindObject(Form("hRingMult_FMD%d%c_%s",det,ringChar,fAnalysisNames[what]));
324 for(Int_t i=1; i<=hRingMult->GetNbinsX(); i++) {
325 if(multhistproj->GetBinContent(i)!=0) {
327 if(nNonZeroInData <=fNbinsToCut || nNonZeroInData > (nNonZero - fNbinsToCut)) {
330 Float_t oldweight = 0;
332 if(hRingMult->GetBinError(i)>0) {
333 oldweight = 1/TMath::Power(hRingMult->GetBinError(i),2);
334 oldwav = oldweight*hRingMult->GetBinContent(i);
336 Float_t weight = 1/TMath::Power(multhistproj->GetBinError(i),2);
337 Float_t wav = oldwav + weight*multhistproj->GetBinContent(i);
338 Float_t sumofw = oldweight + weight;
340 Float_t error = 1/TMath::Sqrt(sumofw);
342 hRingMult->SetBinContent(i,wav/sumofw);
343 hRingMult->SetBinError(i,error);
350 TH1F* sumMultHist = (TH1F*)fMultList[what]->FindObject(Form("hMult_vtxbin%d_%s",v,fAnalysisNames[what]));
352 for(Int_t i =1;i<=sumMultHist->GetNbinsX();i++) {
353 if(multhistproj->GetBinContent(i) != 0 ) {
356 if(nNonZeroInData <=fNbinsToCut || nNonZeroInData > (nNonZero - fNbinsToCut)) {
359 if(sumMultHist->GetBinContent(i) < SMALLNUMBER && TMath::Abs(multhistproj->GetBinContent(i)) > 0){
360 sumMultHist->SetBinContent(i,multhistproj->GetBinContent(i));
361 sumMultHist->SetBinError(i,multhistproj->GetBinError(i));
366 Float_t sumofw = (1/TMath::Power(multhistproj->GetBinError(i),2)) + (1/TMath::Power(sumMultHist->GetBinError(i),2));
367 Float_t wav = (multhistproj->GetBinContent(i)*(1/TMath::Power(multhistproj->GetBinError(i),2)) + sumMultHist->GetBinContent(i)*(1/TMath::Power(sumMultHist->GetBinError(i),2)))/sumofw;
368 Float_t error = 1/TMath::Sqrt(sumofw);
369 sumMultHist->SetBinContent(i, wav);
370 sumMultHist->SetBinError(i, error);
376 fNbinsToCut = nBinsOld;
382 TH1F* sumMult = new TH1F(Form("dNdeta_%s",fAnalysisNames[what]),Form("dNdeta_%s",fAnalysisNames[what]),nEtaBins,etaMin,etaMax);
384 fMultList[what]->Add(sumMult);
385 TH1F* primMult = new TH1F(Form("primary_%s",fAnalysisNames[what]),Form("primary_%s",fAnalysisNames[what]),nEtaBins,etaMin,etaMax);
387 fMultList[what]->Add(primMult);
389 Float_t wav = 0, sumofw=0, weight = 0, primwav = 0, primsumofw=0, primweight = 0;//, etaofbin = 0;
390 for(Int_t i =1; i<=sumMult->GetNbinsX();i++) {
392 for(Int_t v = 0; v<nVertexBins;v++) {
393 if(what == kHits || what == kHitsTrVtx)
394 hPrimVtx = (TH1F*)fMultList[what]->FindObject(Form("hMCHits_vtxbin%d_%s",v,fAnalysisNames[what]));
396 hPrimVtx = (TH1F*)fList->FindObject(GetPrimName(what,0,0,v));
397 TH1F* sumMultHist = (TH1F*)fMultList[what]->FindObject(Form("hMult_vtxbin%d_%s",v,fAnalysisNames[what]));
398 //etaofbin += sumMultHist->GetBinCenter(i);
399 // if( hPrimVtx->GetBinContent(i)!=0 && hPrimVtx->GetBinError(i)>0.001 && sumMultHist->GetBinContent(i)!=0) {
400 if( TMath::Abs(hPrimVtx->GetBinContent(i)) > 0) {
401 primweight = 1/TMath::Power(hPrimVtx->GetBinError(i),2);
402 primwav = primwav + primweight*hPrimVtx->GetBinContent(i);
403 primsumofw = primsumofw + primweight;
405 if(TMath::Abs(sumMultHist->GetBinContent(i)) > 0) {
407 weight = 1/TMath::Power(sumMultHist->GetBinError(i),2);
408 wav = wav + weight*sumMultHist->GetBinContent(i);
409 sumofw = sumofw + weight;
413 if( primsumofw !=0 ) {// && sumofw !=0) {
414 Float_t primerror = 1/TMath::Sqrt(primsumofw);
416 primMult->SetBinContent(i,primwav/primsumofw);
417 primMult->SetBinError(i,primerror);
420 primMult->SetBinContent(i,0);
421 primMult->SetBinError(i,0);
426 Float_t error = 1/TMath::Sqrt(sumofw);
428 sumMult->SetBinContent(i,wav/sumofw);
429 sumMult->SetBinError(i,error);
443 //_____________________________________________________________________
444 void AliFMDDndeta::DrawDndeta(Analysis what, Int_t rebin, Bool_t realdata) {
447 AliWarning("Not initialised - call Init to remedy");
451 if(!fIsGenerated[what]) {
452 AliWarning("Not generated - generate first then draw!");
458 AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
459 TCanvas* c1 = new TCanvas("cvertexbins","Overlaps",1400,800);
461 Int_t nVertexBins = pars->GetNvtxBins();
463 TH1I* hEvents = (TH1I*)fList->FindObject(fEvents.Data());
464 TH1I* hMCEvents = (TH1I*)fList->FindObject(fPrimEvents.Data());
467 for(Int_t det = 1; det<=3; det++) {
468 Int_t maxRing = (det == 1 ? 0 : 1);
469 for(Int_t ring = 0;ring<=maxRing;ring++) {
470 for(Int_t v=0; v< nVertexBins; v++) {
471 Char_t ringChar = (ring == 0 ? 'I' : 'O');
472 Double_t delta = 2*pars->GetVtxCutZ()/pars->GetNvtxBins();
473 Float_t vtxZ1 = (delta*v) - pars->GetVtxCutZ();
474 Float_t vtxZ2 = (delta*(v+1)) - pars->GetVtxCutZ();
476 if(vtxZ1<fVtxCut1 || vtxZ2 >fVtxCut2)
478 Float_t nEvents = (Float_t)hEvents->GetBinContent(v+1);
480 TH1F* multhistproj = (TH1F*)fList->FindObject(GetAnalysisName(what,det,ringChar,v));
485 multhistproj->SetMarkerStyle(20);
486 multhistproj->SetMarkerColor(1);
488 if(det==2 && ringChar=='I') {
489 multhistproj->SetMarkerStyle(21);
490 multhistproj->SetMarkerColor(2);
492 if(det==2 && ringChar=='O') {
493 multhistproj->SetMarkerStyle(3);
494 multhistproj->SetMarkerColor(3);
496 if(det==3 && ringChar=='I') {
497 multhistproj->SetMarkerStyle(22);
498 multhistproj->SetMarkerColor(4);
500 if(det==3 && ringChar=='O') {
501 multhistproj->SetMarkerStyle(23);
502 multhistproj->SetMarkerColor(6);
508 if(what == kHits || what == kHitsTrVtx)
509 hPrimVtx = (TH1F*)fMultList[what]->FindObject(Form("hMCHits_vtxbin%d_%s",v,Form("primary_%s",fAnalysisNames[what])));
511 hPrimVtx = (TH1F*)fList->FindObject(GetPrimName(what,det,ringChar,v));
513 hPrimVtx->SetTitle("");
514 TLatex* l = new TLatex(0.14,0.92,Form("Vtx range [%.1f, %.1f], %d events",vtxZ1,vtxZ2,(Int_t)nEvents));
516 hPrimVtx->SetFillColor(kGray);
517 hPrimVtx->SetLabelFont(132,"xyz");
518 hPrimVtx->SetStats(0000);
519 hPrimVtx->GetXaxis()->SetTitle("#eta");
520 hPrimVtx->GetYaxis()->SetRangeUser(0,15);
521 hPrimVtx->DrawCopy("E3");
523 multhistproj->DrawCopy("same");
527 multhistproj->DrawCopy("same");
534 for(Int_t v=0; v< nVertexBins; v++) {
535 TH1F* sumMultHist = (TH1F*)fMultList[what]->FindObject(Form("hMult_vtxbin%d_%s",v,fAnalysisNames[what]));
537 sumMultHist->SetMarkerStyle(25);
538 sumMultHist->DrawCopy("same");
541 TH1F* primMult = (TH1F*)fMultList[what]->FindObject(Form("primary_%s",fAnalysisNames[what]));
542 TH1F* sumMult = (TH1F*)fMultList[what]->FindObject(Form("dNdeta_%s",fAnalysisNames[what]));
543 sumMult->SetMarkerStyle(23);
544 sumMult->SetMarkerColor(kRed);
545 for(Int_t det = 1; det<=3;det++) {
546 Int_t maxRing = (det == 1 ? 0 : 1);
547 for(Int_t iring = 0; iring<=maxRing; iring++) {
548 Char_t ringChar = (iring == 0 ? 'I' : 'O');
549 TH1F* hRingMult= (TH1F*)fMultList[what]->FindObject(Form("hRingMult_FMD%d%c_%s",det,ringChar,fAnalysisNames[what]));
550 hRingMult->Add(primMult,-1);
551 hRingMult->Divide(primMult);
556 //TH1F* hPrim = (TH1F*)fList->FindObject(fPrimEvents.Data());
557 // TFile testhit("/home/canute/ALICE/Simulations/TestOfAnalysis2/hitsdist.root");
558 // TH1F* hHitCor = (TH1F*)testhit.Get("selectedHits");
560 // sumMult->Divide(hHitCor);
561 TH1F* hPrim = (TH1F*)fList->FindObject(fPrimdNdeta.Data());
562 Float_t nPrimevents = hMCEvents->GetEntries();
563 //std::cout<<hMCEvents->GetEntries()<<std::endl;
564 Float_t xb = hPrim->GetNbinsX();
565 Float_t xr = hPrim->GetXaxis()->GetXmax() - hPrim->GetXaxis()->GetXmin();
566 //std::cout<<xb/xr<<std::endl;
567 hPrim->Scale(xb / xr );
569 hPrim->Scale(1/nPrimevents);
572 TFile testin("/home/canute/ALICE/FMDanalysis/GridAnalysis/fmd_dNdeta_hits.root","READ");
573 // TFile testin("/home/canute/ALICE/FMDanalysis/productionData/fmd_dNdeta_hits.root","READ");
574 TH1F* hcorrect = (TH1F*)testin.Get("hReldif");
575 hcorrect->SetName("djarnis");
576 std::cout<<hcorrect<<std::endl;
577 for(Int_t bb = 1;bb<=hcorrect->GetNbinsX();bb++) {
578 hcorrect->SetBinContent(bb,hcorrect->GetBinContent(bb)+1);
581 sumMult->Divide(hcorrect);
586 // primMult->Rebin(rebin);
587 // primMult->Scale(1/rebin);
588 // hPrim->Rebin(rebin);
589 // hPrim->Scale(1/rebin);
590 if(what != kHits && what != kHitsTrVtx)
593 // hReldif->Add(hPrim,-1);
594 // hReldif->Divide(hPrim);
598 //sumMult->Rebin(rebin);
599 TH1F* hReldif = (TH1F*)sumMult->Clone("hReldif");
601 RebinHistogram(sumMult,rebin);
603 RebinHistogram(primMult,rebin);
604 RebinHistogram(hReldif,rebin);
607 hReldif->Add(primMult,-1);
608 hReldif->Divide(primMult);
609 TCanvas* c2 = new TCanvas("dN/deta","dN/deta",640,960);
610 c2->Divide(1,2);//,0,0);
616 hReldif->SetTitle("");
617 hReldif->GetYaxis()->SetTitle("Relative difference");
618 hReldif->GetYaxis()->SetRangeUser(-0.2,0.2);
619 hReldif->SetStats(0000);
620 hReldif->GetXaxis()->SetTitle("#eta");
623 TLine* zeroLine = new TLine(-6,0,6,0);
624 zeroLine->SetLineWidth(2);
625 zeroLine->SetLineColor(kBlack);
628 hPrim->SetLabelFont(132,"xyz");
629 hPrim->SetFillColor(kGray);
630 primMult->SetFillColor(kBlue);
636 hPrim->GetYaxis()->SetRangeUser(2,10);
637 //hPrim->GetYaxis()->SetRangeUser(0,20);
638 hPrim->SetStats(0000);
639 hPrim->GetXaxis()->SetTitle("#eta");
640 sumMult->SetTitle("");
641 sumMult->SetStats(kFALSE);
642 // sumMult->GetYaxis()->SetRangeUser
643 //sumMult->Scale(1/(Float_t)rebin);
644 sumMult->DrawCopy("PE");
645 if(what != kHits && what != kHitsTrVtx && hPrim->GetEntries())
646 hPrim->DrawCopy("E3same");
647 if(what == kHits || what == kHitsTrVtx)
648 primMult->DrawCopy("E3same");
649 hPrim->GetXaxis()->SetTitle("#eta");
651 TH1F* hMirror = new TH1F("hMirror","mirrored",sumMult->GetNbinsX(),sumMult->GetXaxis()->GetXmin(),sumMult->GetXaxis()->GetXmax());
653 for(Int_t i=0.5*sumMult->GetNbinsX(); i<=sumMult->GetNbinsX(); i++) {
654 Float_t eta = sumMult->GetBinCenter(i);
655 Float_t value = sumMult->GetBinContent(i);
656 Float_t error = sumMult->GetBinError(i);
658 hMirror->SetBinContent(hMirror->FindBin(-1*eta),value);
659 hMirror->SetBinError(hMirror->FindBin(-1*eta),error);
662 TH1F* hReldifLR = (TH1F*)sumMult->Clone("hReldifLeftRight");
663 hReldifLR->Add(hMirror,-1);
664 hReldifLR->Divide(hMirror);
668 hReldifLR->DrawCopy("same");
670 hMirror->SetMarkerStyle(25);
672 hPrim->SetMarkerStyle(8);
674 Float_t x[19] = {0.125,0.375,0.625,0.875,1.125,1.375,1.625,1.875,2.125,2.375,
675 2.625,2.875,3.125,3.375,3.625,3.875,4.125,4.375,4.625};
676 Float_t x2[19] = {-0.125,-0.375,-0.625,-0.875,-1.125,-1.375,-1.625,-1.875,
677 -2.125,-2.375,-2.625,-2.875,-3.125,-3.375,-3.625,-3.875,
678 -4.125,-4.375,-4.625};
681 Float_t y[19] = {3.48, 3.38, 3.52, 3.68, 3.71, 3.86, 3.76, 3.66, 3.72 ,3.69,
682 3.56, 3.41, 3.15, 3.09, 2.74, 2.73, 2.32, 1.99, 1.69};
684 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,
685 0.07,0.07,0.08,0.08,0.09,0.09,0.1,0.13};
687 TGraphErrors* graph = new TGraphErrors(19,x,y,NULL,ey);
688 TGraphErrors* graph2 = new TGraphErrors(19,x2,y,NULL,ey);
690 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};
691 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};
692 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};
693 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};
694 TGraphErrors* graphinel = new TGraphErrors(19,xinel,yinel,NULL,eyinel);
695 TGraphErrors* graphinel2 = new TGraphErrors(19,xinel2,yinel,NULL,eyinel);
697 graph->SetMarkerStyle(22);
698 graph->SetMarkerColor(kBlue);
699 graphinel->SetMarkerStyle(20);
700 graphinel->SetMarkerColor(kGreen);
701 graphinel2->SetMarkerStyle(24);
702 graphinel2->SetMarkerColor(kGreen);
704 graph2->SetMarkerStyle(26);
705 graph2->SetMarkerColor(kBlue);
708 TFile fpyt("/home/canute/ALICE/FMDanalysis/FirstAnalysis/pythia_study/pythiahists.root","READ");
711 hPythiaMB = (TH1F*)fpyt.Get("hPythiaMB");
712 hPythiaMB->DrawCopy("same");
714 std::cout<<hPythiaMB<<std::endl;
716 if(what != kHits && what != kHitsTrVtx) {
717 if(hPrim->GetEntries() != 0 && !realdata)
718 hPrim->DrawCopy("PE3same");
720 //graph->Draw("PEsame");
721 //graph2->Draw("PEsame");
722 graphinel->Draw("PEsame");
723 graphinel2->Draw("PEsame");
727 sumMult->DrawCopy("PEsame");
729 hMirror->DrawCopy("PEsame");
730 // std::cout<<"FMD 1 "<<sumMult->Integral(sumMult->FindBin(3),sumMult->FindBin(5),"width")<<std::endl;
732 //c2->SaveAs("dNdeta_fmd.png");
733 /*TFile* itsfile = TFile::Open(itsfilename);
737 //TList* itslist = (TList*)itsfile->Get("ITS_analysis");
738 //TH1F* itshist0 = (TH1F*)itslist->FindObject("dndeta_check_0");
739 //TH1F* itshist1 = (TH1F*)itslist->FindObject("dndeta_check_1");
740 //TH1F* itshist2 = (TH1F*)itslist->FindObject("dndeta_check_2");
741 TH1F* itshist0 = (TH1F*)itsfile->Get("dndeta/dNdEta");
742 TH1F* itshist1= (TH1F*)itsfile->Get("dndeta/dNdEta_1");
743 TH1F* itshist2 = (TH1F*)itsfile->Get("dndeta/dNdEta_2");
744 itshist0->SetMarkerStyle(27);
745 itshist1->SetMarkerStyle(28);
746 itshist2->SetMarkerStyle(30);
747 itshist0->DrawCopy("same");
748 itshist1->DrawCopy("same");
749 itshist2->DrawCopy("same");
755 TLegend* leg = new TLegend(0.35,0.2,0.65,0.45,"");
757 if(what != kHits && what != kHitsTrVtx)
758 leg->AddEntry(hPrim,"Primary","pf");
760 leg->AddEntry(primMult,"Hits","pf");
762 //leg->AddEntry(primMult,"Analysed prim","f");
765 leg->AddEntry(sumMult,"Analysis","p");
767 leg->AddEntry(hMirror,"Mirror Analysis","p");
768 //leg->AddEntry(graph,"UA5 NSD","p");
769 //leg->AddEntry(graph2,"Mirror UA5 NSD","p");
770 leg->AddEntry(graphinel,"UA5 INEL","p");
771 leg->AddEntry(graphinel2,"Mirror UA5 INEL","p");
772 leg->AddEntry(hPythiaMB,"Pythia MB","l");
779 TH1F* hRatioMultPythia = 0;
780 TH1F* hRatioMultUA5 = 0;
784 if(hPythiaMB->GetNbinsX() != sumMult->GetNbinsX())
785 ratio = (Float_t)sumMult->GetNbinsX() / (Float_t)hPythiaMB->GetNbinsX();
786 hRatioMultPythia = (TH1F*)sumMult->Clone("hRatioMultPythia");
787 hRatioMultUA5 = (TH1F*)sumMult->Clone("hRatioMultUA5");
789 hRatioMultPythia->Rebin(ratio);
790 hRatioMultPythia->Scale(1/ratio);
793 hPythiaMB->Rebin(1/ratio);
794 hPythiaMB->Scale(ratio);
797 hRatioMultPythia->Divide(hPythiaMB);
799 for(Int_t j=1;j<=hRatioMultUA5->GetNbinsX(); j++) {
800 Float_t data = hRatioMultUA5->GetBinContent(j);
801 Float_t errordata = hRatioMultUA5->GetBinError(j);
803 Float_t ua5error = 0;
806 if(hRatioMultUA5->GetBinCenter(j) > 0) {
807 Double_t* xv = graphinel->GetX();
808 Double_t* yv = graphinel->GetY();
809 Double_t* eyv = graphinel->GetEY();
811 for(Int_t kk =0; kk<graphinel->GetN();kk++) {
812 if(xv[kk] < hRatioMultUA5->GetBinCenter(j) && xv[kk+1] > hRatioMultUA5->GetBinCenter(j)) {
820 Double_t* xv = graphinel2->GetX();
821 Double_t* yv = graphinel2->GetY();
822 Double_t* eyv = graphinel->GetEY();
824 for(Int_t kk =0; kk<graphinel2->GetN();kk++) {
825 if(xv[kk+1] < hRatioMultUA5->GetBinCenter(j) && xv[kk] > hRatioMultUA5->GetBinCenter(j)) {
836 Float_t errorratio = 0;
837 if(ua5 != 0 && data !=0)
838 errorratio = ratio2*TMath::Sqrt(TMath::Power(ua5error/ua5,2)+TMath::Power(errordata/data,2));
839 hRatioMultUA5->SetBinContent(j,ratio2);
840 hRatioMultUA5->SetBinError(j,errorratio);
848 TLine* oneLine = new TLine(-6,1,6,1);
849 hRatioMultPythia->DrawCopy();
850 hRatioMultUA5->SetMarkerColor(kGreen);
851 hRatioMultUA5->SetMarkerStyle(20);
852 hRatioMultUA5->DrawCopy("same");
853 oneLine->Draw("same");
860 species.Form("mult");
863 species.Form("mult_TrVtx");
866 species.Form("hits");
869 species.Form("hits");
872 AliWarning("no valid Analysis entry!");
875 TFile fout(Form("fmd_dNdeta_%s.root",species.Data()),"recreate");
877 hRatioMultPythia->Write();
881 fMultList[what]->Write();
886 //_____________________________________________________________________
887 void AliFMDDndeta::CreateSharingEfficiency(const Char_t* filename, Bool_t store) {
888 //Generate sharing efficiency
890 AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
891 //pars->Init(kTRUE,AliFMDAnaParameters::kBackgroundCorrection);
892 Int_t nVertexBins = pars->GetNvtxBins();
895 TH1I* hEvents = (TH1I*)fList->FindObject(fEvents.Data());
896 TH1I* hPrimEvents = (TH1I*)fList->FindObject(fPrimEvents.Data());
898 SetNames(kHitsTrVtx);
899 TH1I* hEventsTrVtx = (TH1I*)fList->FindObject(fEvents.Data());
900 TH1I* hPrimEventsTrVtx = (TH1I*)fList->FindObject(fPrimEvents.Data());
902 AliFMDAnaCalibSharingEfficiency* sharEff = new AliFMDAnaCalibSharingEfficiency();
904 for(Int_t det = 1; det<=3; det++) {
905 Int_t maxRing = (det == 1 ? 0 : 1);
906 for(Int_t ring = 0;ring<=maxRing;ring++) {
907 Char_t ringChar = (ring == 0 ? 'I' : 'O');
908 for(Int_t v=0; v< nVertexBins; v++) {
909 TH1F* hHits = (TH1F*)fList->FindObject(GetAnalysisName(kHits,det, ringChar, v));
910 TH1F* hHitsTrVtx = (TH1F*)fList->FindObject(GetAnalysisName(kHitsTrVtx,det, ringChar, v));
911 TH1F* hMCHits = (TH1F*)fList->FindObject(GetPrimName(kHits,det, ringChar, v));
912 TH1F* hMCHitsTrVtx = (TH1F*)fList->FindObject(GetPrimName(kHitsTrVtx,det, ringChar, v));
914 TH1F* hCorrection = (TH1F*)hHits->Clone(Form("hCorrection_FMD%d%c_vtx%d"));
915 TH1F* hCorrectionTrVtx = (TH1F*)hHitsTrVtx->Clone(Form("hCorrection_FMD%d%c_vtx%d"));
917 hCorrection->Scale(1./(Float_t)hEvents->GetBinContent(v+1));
918 hMCHits->Scale(1./(Float_t)hPrimEvents->GetBinContent(v+1));
919 hCorrectionTrVtx->Scale(1./(Float_t)hEventsTrVtx->GetBinContent(v+1));
920 hMCHitsTrVtx->Scale(1./(Float_t)hPrimEventsTrVtx->GetBinContent(v+1));
921 hCorrection->Divide(hMCHits);
922 hCorrectionTrVtx->Divide(hMCHitsTrVtx);
924 sharEff->SetSharingEff(det,ringChar,v,hCorrection);
925 sharEff->SetSharingEffTrVtx(det,ringChar,v,hCorrectionTrVtx);
926 // std::cout<<hHits<<" "<<hHitsTrVtx<<" "<<hPrim<<" "<<hPrimTrVtx<<std::endl;
933 TFile fsharing(pars->GetPath(pars->GetSharingEffID()),"RECREATE");
934 sharEff->Write(AliFMDAnaParameters::GetSharingEffID());
939 //_____________________________________________________________________
940 void AliFMDDndeta::RebinHistogram(TH1F* hist, Int_t rebin) {
943 if(hist->GetNbinsX()%rebin) {
944 std::cout<<"cannot rebin "<<hist->GetNbinsX()%rebin<< "is not zero"<<std::endl;
948 TH1F* cloneHist = (TH1F*)hist->Clone();
949 cloneHist->Rebin(rebin);
951 Int_t nBinsNew = hist->GetNbinsX() / rebin;
953 for(Int_t i =1;i<=nBinsNew; i++) {
954 Float_t bincontent = 0;
956 Float_t sumformean = 0;
958 for(Int_t j=1; j<=rebin;j++) {
959 if(hist->GetBinContent((i-1)*rebin + j) > 0) {
960 bincontent = bincontent + hist->GetBinContent((i-1)*rebin + j);
962 Float_t weight = 1 / TMath::Power(hist->GetBinError((i-1)*rebin + j),2);
963 sumofw = sumofw + weight;
964 sumformean = sumformean + weight*hist->GetBinContent((i-1)*rebin + j);
969 if(bincontent > 0 ) {
970 cloneHist->SetBinContent(i,sumformean / sumofw);
971 cloneHist->SetBinError(i,TMath::Sqrt(sumformean));//TMath::Sqrt(1/sumofw));
975 for(Int_t i =1;i<=nBinsNew; i++) {
976 hist->SetBinContent(i,cloneHist->GetBinContent(i));
981 //_____________________________________________________________________