4 #include <TClonesArray.h>
12 #include "AliCDBManager.h"
13 #include "AliCDBEntry.h"
14 #include "AliRawReader.h"
15 #include <AliTPCRawStreamV3.h>
16 #include "AliFMDRawReader.h"
17 #include "AliFMDParameters.h"
18 #include "AliFMDDigit.h"
19 #include "AliTPCAltroMapping.h"
20 #include "AliTriggerConfiguration.h"
21 #include "TAlienCollection.h"
22 #include "AliTriggerClass.h"
25 #include "AliVZERORawStream.h"
27 #include "AliITSsegmentationUpgrade.h"
28 #include "AliRunLoader.h"
30 #include "AliITSRecPointU.h"
31 #include "AliITSDigitUpgrade.h"
32 #include "TParticle.h"
33 #include "AliESDtrack.h"
34 #include "AliESDEvent.h"
35 #include "AliTrackReference.h"
38 #include "TGraphErrors.h"
40 #include <TGeoManager.h>
48 .L ~/ITSupgrade/CDRpics/FastVsSlowSim.C
49 ExtractOutputHistos(0,1);
52 .L ~/ITSupgrade/BuildDetector/DetectorK.cxx++
57 FastVsSlowSimEff(0,1);
58 FastVsSlowSimEff(1,1);
59 FastVsSlowSimEff(2,1);
60 FastVsSlowSimEff(3,1);
67 Int_t atLeastcorr = 3;
70 void FastVsSlowSim(Bool_t extract=1) {
73 ExtractOutputHistos(0,1);
79 Int_t colors[5]={1,2,3,4,6};
83 // new ideal Pixel properties?
85 Double_t etaCut = 0.9;
87 Double_t resRPhi = 0.0004;
88 Double_t resZ = 0.0004;
90 void FastVsSlowSimRes() {
94 gROOT->LoadMacro("~/fig_template.C"); // figure style
98 TCanvas *myCan = new TCanvas("myCan");
102 TPad *myPad = new TPad("myPad", "The pad",0,0,1,1);
103 myPadSetUp(myPad,0.15,0.04,0.04,0.15);
104 myPad->Draw(); myPad->cd();
105 myPad->SetGridx(); myPad->SetGridy(); myPad->SetLogx();
107 // TLegend *leg = new TLegend(0.7,160,20,290,"","brCDN");
108 TLegend *leg = new TLegend(0.44,160,1.7,290,"","brCDN");
110 leg->SetFillColor(0);
113 // Current ITS +++++++++++++++++++++++++++++++++++++++++
115 DetectorK its("ALICE","ITS");
116 its.MakeAliceCurrent(0,plusTPC);
117 its.SetMaxRadiusOfSlowDetectors(0.1);
118 its.SolveViaBilloir(0);
119 Int_t color=1; Int_t linewidth=2;
125 d[pi] = its.GetGraphPointingResolution(1,color,linewidth);
126 d[pi]->SetLineStyle(2);
127 // d[pi]->GetYaxis()->SetTitle("Pointing resolution #sigma [#mum]");
128 // d[pi]->SetTitle("Pointing resolution .vs. Pt");
129 // d[pi]->Draw("AC");
131 c[pi] = its.GetGraphPointingResolution(0,color,linewidth);
132 c[pi]->SetMinimum(-1);
135 leg->AddEntry(c[pi],"FastTool: Current ITS","l");
136 // leg->AddEntry(d[pi],"in z - Current ITS","l");
141 // Current ITS +++++++++++++++++++++++++++++++++++++++++
143 Int_t color=3; Int_t linewidth=2;
146 DetectorK its("ALICE","ITS");
147 its.MakeAliceCurrent(0,plusTPC);
149 its.SetRadius("bpipe",2.0);
150 its.AddLayer("spd0", 2.2,1,1,1);
152 its.SetRadius("spd0",2.2); its.SetRadiationLength("spd0",X0); its.SetResolution("spd0",resRPhi,resZ);
153 its.SetRadius("spd1",4.8); its.SetRadiationLength("spd1",X0); its.SetResolution("spd1",resRPhi,resZ);
154 its.SetRadius("spd2",9.1); its.SetRadiationLength("spd2",X0); its.SetResolution("spd2",resRPhi,resZ);
156 its.SetMaxRadiusOfSlowDetectors(0.1);
157 its.SolveViaBilloir(0);
159 d[pi] = its.GetGraphPointingResolution(1,color,linewidth);
160 d[pi]->SetLineStyle(2);
163 c[pi] = its.GetGraphPointingResolution(0,color,linewidth);
166 leg->AddEntry(c[pi],"FastTool: \"New SPDs\"","l");
167 // leg->AddEntry(d[pi],"in z - \"New SPDs\"","l");
171 // ALL NEW +++++++++++++++++++++++++++++++++++++++++++
173 color=2; Int_t linewidth=2;
177 // for a 0.8,0.2 weight configuration
179 DetectorK *itsU = new DetectorK((char*)"ALICE",(char*)"ITS");
181 itsU->AddLayer((char*)"bpipe", 2.0,0.0022); // beam pipe
182 itsU->AddLayer((char*)"vertex", 0, 0); // dummy vertex for matrix calculation
184 itsU->AddLayer("ddd1", 2.2 , X0, resRPhi, resZ);
185 itsU->AddLayer("ddd2", 3.8 , X0, resRPhi, resZ);
186 itsU->AddLayer("ddd3", 6.8 , X0, resRPhi, resZ);
187 itsU->AddLayer("ddd4", 12.4 , X0, resRPhi, resZ);
188 itsU->AddLayer("ddd5", 23.5 , X0, resRPhi, resZ);
189 itsU->AddLayer("ddd6", 39.6 , X0, resRPhi, resZ);
190 itsU->AddLayer("ddd7", 43.0 , X0, resRPhi, resZ);
192 if(plusTPC) itsU->AddTPC(0.1,0.1);
193 itsU->SetMaxRadiusOfSlowDetectors(0.1);
194 itsU->SolveViaBilloir(0);
198 d[pi] = itsU->GetGraphPointingResolution(1,color,linewidth);
199 d[pi]->SetLineStyle(2);
202 c[pi] = itsU->GetGraphPointingResolution(0,color,linewidth);
203 c[pi]->SetMaximum(150);
206 leg->AddEntry(c[pi],"FastTool: \"All New\" ","l");
207 // leg->AddEntry(d[pi],"in z - \"All New\" ","l");
210 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
214 TFile f1("root/FastVsSlow_CurrentITS-PbPb-fran.root");
215 TFile f2("root/FastVsSlow_NewSPDs-PbPb-fran.root");
216 TFile f3("root/FastVsSlow_AllNew-PbPb-fran.root");
217 TGraphErrors *dca1 = (TGraphErrors*)f1.Get("dca");
218 TGraphErrors *dca2 = (TGraphErrors*)f2.Get("dca");
219 TGraphErrors *dca3 = (TGraphErrors*)f3.Get("dca");
221 dca1->SetMarkerStyle(21); dca1->SetMarkerColor(1);
222 dca2->SetMarkerStyle(21); dca2->SetMarkerColor(3);
223 dca3->SetMarkerStyle(21); dca3->SetMarkerColor(2);
225 leg->AddEntry(dca1,"FullMC: Current ITS","PE");
226 leg->AddEntry(dca2,"FullMC: \"New SPDs\"","PE");
227 leg->AddEntry(dca3,"FullMC: \"All New\" ","PE");
229 dca1->Draw("APE"); dca1->SetMinimum(-1); dca1->SetMaximum(300);
238 myCan->SaveAs(Form("FastVsSlowSim-Res-%d.pdf",plusTPC));
239 myCan->SaveAs(Form("FastVsSlowSim-Res-%d.eps",plusTPC));
244 // ==============================================================================================
245 // ==============================================================================================
247 void FastVsSlowSimPtRes() {
251 gROOT->LoadMacro("~/fig_template.C"); // figure style
255 TCanvas *myCan = new TCanvas("myCan");
259 TPad *myPad = new TPad("myPad", "The pad",0,0,1,1);
260 myPadSetUp(myPad,0.15,0.04,0.04,0.15);
261 myPad->Draw(); myPad->cd();
262 myPad->SetGridx(); myPad->SetGridy(); myPad->SetLogx(); myPad->SetLogy();
265 TLegend *leg = new TLegend(0.44,0.13,0.1.7,0.9,"","brCDN");
266 leg->SetFillColor(0);
270 // Current ITS +++++++++++++++++++++++++++++++++++++++++
271 Int_t color=1; Int_t linewidth=2;
275 DetectorK its("ALICE","ITS");
276 its.MakeAliceCurrent(0,plusTPC);
277 its.SetMaxRadiusOfSlowDetectors(0.1);
278 its.SolveViaBilloir(0);
279 Int_t color=1; Int_t linewidth=2;
281 c[pi] = its.GetGraphMomentumResolution(color,linewidth);
284 leg->AddEntry(c[pi],"FastTool: Current ITS","l");
287 // Current ITS +++++++++++++++++++++++++++++++++++++++++
289 Int_t color=3; Int_t linewidth=2;
292 DetectorK its("ALICE","ITS");
293 its.MakeAliceCurrent(0,plusTPC);
295 its.SetRadius("bpipe",2.0);
296 its.AddLayer("spd0", 2.2,1,1,1);
298 its.SetRadius("spd0",2.2); its.SetRadiationLength("spd0",X0); its.SetResolution("spd0",resRPhi,resZ);
299 its.SetRadius("spd1",4.8); its.SetRadiationLength("spd1",X0); its.SetResolution("spd1",resRPhi,resZ);
300 its.SetRadius("spd2",9.1); its.SetRadiationLength("spd2",X0); its.SetResolution("spd2",resRPhi,resZ);
302 its.SetMaxRadiusOfSlowDetectors(0.1);
303 its.SolveViaBilloir(0);
305 c[pi] = its.GetGraphMomentumResolution(color,linewidth);
308 leg->AddEntry(c[pi],"FastTool: \"New SPDs\"","l");
311 // ALL NEW +++++++++++++++++++++++++++++++++++++++++++
313 color=2; Int_t linewidth=2;
317 // for a 0.8,0.2 weight configuration
319 DetectorK *itsU = new DetectorK((char*)"ALICE",(char*)"ITS");
321 itsU->AddLayer((char*)"bpipe", 2.0,0.0022); // beam pipe
322 itsU->AddLayer((char*)"vertex", 0, 0); // dummy vertex for matrix calculation
324 itsU->AddLayer("ddd1", 2.2 , X0, resRPhi, resZ);
325 itsU->AddLayer("ddd2", 3.8 , X0, resRPhi, resZ);
326 itsU->AddLayer("ddd3", 6.8 , X0, resRPhi, resZ);
327 itsU->AddLayer("ddd4", 12.4 , X0, resRPhi, resZ);
328 itsU->AddLayer("ddd5", 23.5 , X0, resRPhi, resZ);
329 itsU->AddLayer("ddd6", 39.6 , X0, resRPhi, resZ);
330 itsU->AddLayer("ddd7", 43.0 , X0, resRPhi, resZ);
332 if(plusTPC) itsU->AddTPC(0.1,0.1);
333 itsU->SetMaxRadiusOfSlowDetectors(0.1);
334 itsU->SolveViaBilloir(0);
338 c[pi] = itsU->GetGraphMomentumResolution(color,linewidth);
341 leg->AddEntry(c[pi],"FastTool: \"All New\" ","l");
343 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
347 TFile f1("root/FastVsSlow_CurrentITS-PbPb-fran.root");
348 TFile f2("root/FastVsSlow_NewSPDs-PbPb-fran.root");
349 TFile f3("root/FastVsSlow_AllNew-PbPb-fran.root");
351 TGraphErrors *gpt1 = (TGraphErrors*)f1.Get("dPt");
352 TGraphErrors *gpt2 = (TGraphErrors*)f2.Get("dPt");
353 TGraphErrors *gpt3 = (TGraphErrors*)f3.Get("dPt");
355 gpt1->SetMarkerStyle(21); gpt1->SetMarkerColor(1);
356 gpt2->SetMarkerStyle(21); gpt2->SetMarkerColor(3);
357 gpt3->SetMarkerStyle(21); gpt3->SetMarkerColor(2);
359 leg->AddEntry(gpt1,"FullMC: Current ITS","PE");
360 leg->AddEntry(gpt2,"FullMC: \"New SPDs\"","PE");
361 leg->AddEntry(gpt3,"FullMC: \"All New\" ","PE");
363 gpt1->Draw("APE"); gpt1->SetMinimum(0.1); gpt1->SetMaximum(20);
372 myCan->SaveAs(Form("FastVsSlowSim-PtRes-%d.pdf",plusTPC));
373 myCan->SaveAs(Form("FastVsSlowSim-PtRes-%d.eps",plusTPC));
381 // ==============================================================================================
382 // ==============================================================================================
384 void FastVsSlowSimEff(Int_t id=0,Int_t PbPb=0) {
386 Int_t mult = 2400; // 2800 // deducted from "Frackable"
392 gROOT->LoadMacro("~/fig_template.C"); // figure style
396 TCanvas *myCan = new TCanvas("myCan");
400 TPad *myPad = new TPad("myPad", "The pad",0,0,1,1);
401 myPadSetUp(myPad,0.15,0.04,0.04,0.15);
402 myPad->Draw(); myPad->cd();
403 myPad->SetGridx(); myPad->SetGridy();// myPad->SetLogx();
406 TLegend *leg = new TLegend(0.9,30,1.7,70,"","brCDN");
407 leg->SetFillColor(0);
413 // Current ITS +++++++++++++++++++++++++++++++++++++++++
414 Int_t color=1; Int_t linewidth=2;
418 DetectorK its("ALICE","ITS");
419 its.MakeAliceCurrent(0,plusTPC);
420 its.SetMaxRadiusOfSlowDetectors(0.01);
421 its.SetAtLeastCorr(atLeastcorr);
422 if (PbPb) its.SetdNdEtaCent(mult);
423 its.SolveViaBilloir(0);
424 Int_t color=1; Int_t linewidth=2;
427 c[pi] = its.GetGraphRecoEfficiency(0,color,linewidth);
429 c[pi] = its.GetGraphRecoPurity(0,color,linewidth);
431 c[pi] = its.GetGraphRecoFakes(0,color,linewidth);
435 leg->AddEntry(c[pi],"FastTool: Current ITS","l");
438 // NEW SPD +++++++++++++++++++++++++++++++++++++++++
440 Int_t color=3; Int_t linewidth=2;
443 DetectorK its("ALICE","ITS");
444 its.MakeAliceCurrent(0,plusTPC);
445 its.SetAtLeastCorr(atLeastcorr);
446 if (PbPb) its.SetdNdEtaCent(mult);
447 its.SetRadius("bpipe",2.0);
448 its.AddLayer("spd0", 2.2,1,1,1);
450 its.SetRadius("spd0",2.2); its.SetRadiationLength("spd0",X0); its.SetResolution("spd0",resRPhi,resZ);
451 its.SetRadius("spd1",4.8); its.SetRadiationLength("spd1",X0); its.SetResolution("spd1",resRPhi,resZ);
452 its.SetRadius("spd2",9.1); its.SetRadiationLength("spd2",X0); its.SetResolution("spd2",resRPhi,resZ);
454 its.SetMaxRadiusOfSlowDetectors(0.1);
455 its.SolveViaBilloir(0);
458 c[pi] = its.GetGraphRecoEfficiency(0,color,linewidth);
460 c[pi] = its.GetGraphRecoPurity(0,color,linewidth);
462 c[pi] = its.GetGraphRecoFakes(0,color,linewidth);
466 leg->AddEntry(c[pi],"FastTool: \"New SPDs\"","l");
469 // ALL NEW +++++++++++++++++++++++++++++++++++++++++++
471 color=4; Int_t linewidth=2;
475 // for a 0.8,0.2 weight configuration
477 DetectorK *itsU = new DetectorK((char*)"ALICE",(char*)"ITS");
478 itsU->SetAtLeastCorr(atLeastcorr);
479 itsU->AddLayer((char*)"bpipe", 2.0,0.0022); // beam pipe
480 itsU->AddLayer((char*)"vertex", 0, 0); // dummy vertex for matrix calculation
482 itsU->AddLayer("ddd1", 2.2 , X0, resRPhi, resZ);
483 itsU->AddLayer("ddd2", 3.8 , X0, resRPhi, resZ);
484 itsU->AddLayer("ddd3", 6.8 , X0, resRPhi, resZ);
485 itsU->AddLayer("ddd4", 12.4 , X0, resRPhi, resZ);
486 itsU->AddLayer("ddd5", 23.5 , X0, resRPhi, resZ);
487 itsU->AddLayer("ddd6", 39.6 , X0, resRPhi, resZ);
488 // itsU->AddLayer("ddd6", 42.6 , X0, resRPhi, resZ);
489 itsU->AddLayer("ddd7", 43.0 , X0, resRPhi, resZ);
490 // itsU->AddLayer("ddd8", 43.4 , X0, resRPhi, resZ);
493 if (PbPb) itsU->SetdNdEtaCent(mult);
494 if(plusTPC) itsU->AddTPC(0.1,0.1);
495 itsU->SetMaxRadiusOfSlowDetectors(0.1);
496 itsU->SolveViaBilloir(0);
500 c[pi] = itsU->GetGraphRecoEfficiency(0,color,linewidth);
502 c[pi] = itsU->GetGraphRecoPurity(0,color,linewidth);
504 c[pi] = itsU->GetGraphRecoFakes(0,color,linewidth);
507 leg->AddEntry(c[pi],"FastTool: \"All New\" ","l");
509 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
511 // ALL NEW - double outer layer +++++++++++++++++++++++++++++++++++++
513 color=2; Int_t linewidth=2;
517 // for a 0.8,0.2 weight configuration
519 DetectorK *itsU = new DetectorK((char*)"ALICE",(char*)"ITS");
520 itsU->SetAtLeastCorr(atLeastcorr);
521 itsU->AddLayer((char*)"bpipe", 2.0,0.0022); // beam pipe
522 itsU->AddLayer((char*)"vertex", 0, 0); // dummy vertex for matrix calculation
524 itsU->AddLayer("ddd1", 2.2 , X0, resRPhi, resZ);
525 itsU->AddLayer("ddd2", 3.8 , X0, resRPhi, resZ);
526 itsU->AddLayer("ddd3", 6.8 , X0, resRPhi, resZ);
527 itsU->AddLayer("ddd4", 12.4 , X0, resRPhi, resZ);
528 itsU->AddLayer("ddd5", 23.5 , X0, resRPhi, resZ);
529 itsU->AddLayer("ddd6", 39.6 , X0, resRPhi, resZ);
530 itsU->AddLayer("ddd8", 40.0 , X0, resRPhi, resZ);
531 itsU->AddLayer("ddd7", 43.0 , X0, resRPhi, resZ);
532 itsU->AddLayer("ddd9", 43.4 , X0, resRPhi, resZ);
535 if (PbPb) itsU->SetdNdEtaCent(mult);
536 if(plusTPC) itsU->AddTPC(0.1,0.1);
537 itsU->SetMaxRadiusOfSlowDetectors(0.1);
538 itsU->SolveViaBilloir(0);
542 c[pi] = itsU->GetGraphRecoEfficiency(0,color,linewidth);
544 c[pi] = itsU->GetGraphRecoPurity(0,color,linewidth);
546 c[pi] = itsU->GetGraphRecoFakes(0,color,linewidth);
549 leg->AddEntry(c[pi],"FastTool: \"All New\" (2x double layer)","l");
551 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
562 TFile f1(Form("root/FastVsSlow_CurrentITS-PbPb%s.root",h));
563 TFile f2(Form("root/FastVsSlow_NewSPDs-PbPb%s.root",h));
564 TFile f3(Form("root/FastVsSlow_AllNew-PbPb%s.root",h));
565 TFile f4(Form("root/FastVsSlow_AllNew-9-PbPb%s.root",h));
567 // TFile f1(Form("root/FastVsSlow_CurrentITS%s-fran.root",h));
568 // TFile f2(Form("root/FastVsSlow_NewSPDs%s-fran.root",h));
569 // TFile f3(Form("root/FastVsSlow_AllNew%s-fran.root",h));
576 eff1 = (TH1F*)f1.Get("efficiency");
577 eff2 = (TH1F*)f2.Get("efficiency");
578 eff3 = (TH1F*)f3.Get("efficiency");
579 eff4 = (TH1F*)f4.Get("efficiency");
580 eff1->GetYaxis()->SetTitle("efficiency (%)");
582 eff1 = (TH1F*)f1.Get("purity");
583 eff2 = (TH1F*)f2.Get("purity");
584 eff3 = (TH1F*)f3.Get("purity");
585 eff4 = (TH1F*)f4.Get("purity");
586 eff1->GetYaxis()->SetTitle("purity (%)");
588 eff1 = (TH1F*)f1.Get("annaEff");
589 eff2 = (TH1F*)f2.Get("annaEff");
590 eff3 = (TH1F*)f3.Get("annaEff");
591 eff4 = (TH1F*)f4.Get("annaEff");
592 eff1->GetYaxis()->SetTitle("Overall efficiency (%)");
594 eff1 = (TH1F*)f1.Get("fake");
595 eff2 = (TH1F*)f2.Get("fake");
596 eff3 = (TH1F*)f3.Get("fake");
597 eff4 = (TH1F*)f4.Get("fake");
598 eff1->GetYaxis()->SetTitle("Fake ratio (%)");
601 eff1->SetMarkerStyle(21); eff1->SetMarkerColor(1);
602 eff2->SetMarkerStyle(21); eff2->SetMarkerColor(3);
603 eff3->SetMarkerStyle(21); eff3->SetMarkerColor(4);
604 eff4->SetMarkerStyle(21); eff4->SetMarkerColor(2);
606 leg->AddEntry(eff1,"FullMC: Current ITS","PE");
607 leg->AddEntry(eff2,"FullMC: \"New SPDs\"","PE");
608 leg->AddEntry(eff3,"FullMC: \"All New\" ","PE");
609 leg->AddEntry(eff4,"FullMC: \"All New\" (2x double layer)","PE");
611 eff1->SetMinimum(0.4); eff1->SetMaximum(100);
613 eff2->DrawCopy("sameE");
614 eff4->DrawCopy("sameE");
615 eff3->DrawCopy("sameE");
622 eff2->DrawCopy("sameE");
623 eff4->DrawCopy("sameE");
624 eff3->DrawCopy("sameE");
634 pt = new TPaveText(0.4,0.1,1.76,30);
636 pt = new TPaveText(0.4,70,1.76,100);
638 pt->SetBorderSize(1); // no shadow
640 TText *t1 = pt->AddText("FastTool settings: "); t1->SetTextFont(32); // bold
642 pt->AddText(Form(" Tracked particles: Pions; Average rapidity: 0.45; dN_{ch}/d#eta = %d ",mult));
644 // pt->AddText("\"New SPDs\": layer radii: r = {2.2,4.8,9.1} cm");
645 // pt->AddText("\"All New\: layer radii: r = {2.2,3.8,6.8,...} cm");
646 // pt->AddText(Form(" New layer prop.: X/X_{0}=%1.1lf%%; #sigma_{r#phi,z}=%1.0lf#mum",X0*100,resZ*1e4));
648 TText *t2 = pt->AddText("FullMC settings: "); t2->SetTextFont(32); // bold
650 pt->AddText(" Generator: AliGenHIJINGpara (parametrized PbPb event)");
651 pt->AddText(" dN_{ch.pr.}/d#eta = 2070");
652 pt->AddText(" Track selection: Pions, |#eta|<0.9");
654 pt->AddText(" Generator: AliGenHijing (modified); #sqrt{s_{NN}} = 5.5 TeV");
655 pt->AddText(" dN_{ch.pr.}/d#eta = 2410; Impactparameter range: b#in(0,5) #rightarrow central PbPb ");
656 pt->AddText(" Track selection: Pions, |#eta|<0.9");
658 // pt->SetLabel("Settings");
659 pt->SetTextAlign(12);
668 myCan->SaveAs(Form("FastVsSlowSim-Eff-%d.pdf",id));
669 myCan->SaveAs(Form("FastVsSlowSim-Eff-%d.eps",id));
671 myCan->SaveAs(Form("FastVsSlowSim-Eff-PbPb-%d.pdf",id));
672 myCan->SaveAs(Form("FastVsSlowSim-Eff-PbPb-%d.eps",id));
682 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
683 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
684 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
685 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
686 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
690 void GetDetectorRadii(TArrayD *rmin,TArrayD *rmax) {
691 // Loads geometry of the ITS upgrade
692 AliITSsegmentationUpgrade *seg=new AliITSsegmentationUpgrade();
693 Int_t nlayers = seg->GetNLayers();
694 rmin->Set(nlayers); rmax->Set(nlayers);
695 for (Int_t i=0; i<nlayers; i++) {
696 rmin->AddAt(seg->GetRadius(i),i);
697 rmax->AddAt(seg->GetRadius(i)+seg->GetThickness(i),i);
701 void PrintDetectorGeometry() {
702 gSystem->Load("libITSUpgradeBase");
703 gSystem->Load("libITSUpgradeSim");
707 GetDetectorRadii(&rmin,&rmax);
708 for (Int_t i=0; i<rmin.GetSize(); i++) {
709 cout<<i<<": (rmin,rmax)=("<<rmin.At(i)<<","<<rmax.At(i)<<")cm"<<endl;
714 void CountTrackableMCs(TH1F *hAllMC=0, Bool_t onlyPrims=0,Bool_t onlyPion=0);
715 void CountPrimaries(TH1F *hMultCount);
718 void ExtractOutputHistos(Bool_t onlyPrims=0,Bool_t onlyPion=0,Int_t plotFlag=0) {
720 // gROOT->SetStyle("Plain");
721 gStyle->SetPalette(1);
723 const Int_t nbins=20;
724 Double_t ptmin=0.06;//04;
725 Double_t ptmax=2.0;//GeV
726 Double_t logxmin = TMath::Log10(ptmin);
727 Double_t logxmax = TMath::Log10(ptmax);
728 Double_t binwidth = (logxmax-logxmin)/(nbins+1);
732 for (Int_t i=1;i<=nbins;i++) {
733 xbins[i] = ptmin + TMath::Power(10,logxmin+(i)*binwidth);
734 // cout<<xbins[i]<<endl;
736 // TH1F *h = new TH1F("h","hist with log x axis",nbins,xbins);
738 TH1F *hMultCount = new TH1F("mult","averaged multiplicity (charg. prim)",80,-4.,4.);
739 hMultCount->GetXaxis()->SetTitle("eta");
740 hMultCount->GetYaxis()->SetTitle("N/d#eta");
742 TH1F *hAllMC = new TH1F("allMC","All Tracks MC primaries",nbins,xbins);
743 TH1F *hAllFound = new TH1F("allFound","All Tracks found",nbins,xbins);
744 TH1F *hImperfect = new TH1F("imperfect","Imperfect tracks",nbins,xbins);
745 TH1F *hPerfect = new TH1F("perfect","Perfect tracks",nbins,xbins);
746 TH1F *hEff = new TH1F("efficiency","Efficiency (Perfect tracks in \"ALL MC\")",nbins,xbins);
747 TH1F *hFake = new TH1F("fake","Fake tracks (Inperfect tracks in \"ALL MC\")",nbins,xbins);
748 TH1F *hPurity = new TH1F("purity","Purity (Perfect tracks in \"All Found\")",nbins,xbins);
749 TH1F *hAnna = new TH1F("annaEff","AnnalisaEff ",nbins,xbins);
750 TH1F *hNoMCTrack = new TH1F("noMCtrack","noMCtrack ",nbins,xbins);
752 TH1F *hEta = new TH1F("","",50,-2,2);
753 // TH1F *hEtaMC = new TH1F("","",50,-2,2);
755 TH2D *h2Ddca = new TH2D("dca2D","DCAvsPt2D",nbins,xbins,50,-0.05,0.05);
756 TH2D *h2Dpt = new TH2D("dPt2D","dPtdvsPt2D",nbins,xbins,50,-25,25);
758 // open run loader and load gAlice, kinematics and header
759 AliRunLoader* runLoader = AliRunLoader::Open("galice.root");
761 Error("Check kine", "getting run loader from file %s failed",
765 runLoader->LoadgAlice();
766 gAlice = runLoader->GetAliRun();
768 Error("Check kine", "no galice object found");
771 runLoader->LoadHeader();
772 runLoader->LoadKinematics();
774 TFile* esdFile = TFile::Open("AliESDs.root");
775 if (!esdFile || !esdFile->IsOpen()) {
776 Error("CheckESD", "opening ESD file %s failed", "AliESDs.root");
779 AliESDEvent *esd = new AliESDEvent();
780 TTree* tree = (TTree*) esdFile->Get("esdTree");
782 Error("CheckESD", "no ESD tree found");
785 esd->ReadFromTree(tree);
787 Int_t nTrackTotalMC = 0;
788 Int_t nTrackFound = 0;
789 Int_t nTrackImperfect = 0;
790 Int_t nTrackPerfect = 0;
791 Int_t nNoMCTrack = 0;
794 for(Int_t iEv =0; iEv<tree->GetEntries(); iEv++){
796 runLoader->GetEvent(iEv);
798 printf("+++ event %i (of %lld) +++++++++++++++++++++++ # ESDtracks: %d \n",iEv,tree->GetEntries()-1,esd->GetNumberOfTracks());
799 Int_t nESDtracks = esd->GetNumberOfTracks();
800 for (Int_t iTrack = 0; iTrack < nESDtracks; iTrack++) {
801 AliESDtrack* track = esd->GetTrack(iTrack);
802 if (!(iTrack%1000)) printf("event %i: ESD track count %d (of %d)\n",iEv,iTrack,nESDtracks);
804 Int_t label = track->GetLabel();
807 // Int_t ncl = track->GetITSclusters(idx);
810 // cout<< " ESD track label " << label;
811 // cout<<" ---> imperfect track (label "<<label<<"<0) !! -> track Pt: "<< track->Pt() << endl;
814 AliStack* stack = runLoader->Stack();
815 // nTrackTotalMC += stack->GetNprimary();
818 TParticle* particle = stack->Particle(TMath::Abs(label));
819 Double_t pt = track->Pt();
823 if (TMath::Abs(particle->Eta())>etaCut) continue;
825 Double_t ptMC = particle->Pt();
828 if (onlyPion && TMath::Abs(particle->GetPdgCode())!=211) continue;
830 if ( (!onlyPrims) || stack->IsPhysicalPrimary(TMath::Abs(label))) {
831 // cout<<" # clusters "<<ncl<<endl;
834 hAllFound->Fill(ptMC);
835 hEta->Fill(track->Eta());
839 hImperfect->Fill(ptMC);
842 hPerfect->Fill(ptMC);
848 // following only for "true tracks, pions
850 if(particle->Pt() < 0.001)continue;
851 if (TMath::Abs(particle->GetPdgCode())!=211) continue;
854 // Impact parameters for Pions only
855 Double_t dca = track->GetD(0,0,0.5);
856 h2Ddca->Fill(ptMC,dca);
858 // Pt resolution for Pions only
859 Double_t dPt = (pt-ptMC)/ptMC*100;
860 h2Dpt->Fill(ptMC,dPt);
865 hNoMCTrack->Fill(pt);
866 cout<<" according MC particle not found"<<endl;
869 } //entries track esd
873 runLoader->UnloadHeader();
874 runLoader->UnloadKinematics();
878 // Count trackable MC tracks
879 CountTrackableMCs(hAllMC, onlyPrims, onlyPion);
882 // Count trackable MC tracks
883 CountPrimaries(hMultCount);
897 // -- Global efficienies
899 nTrackTotalMC = hAllMC->GetEntries();
900 Double_t eff = ((Double_t)nTrackPerfect)/nTrackTotalMC;
901 printf("-> Total number of events: %lld -> MCtracks %d -> nPerfect %d -> Eff: %3.2lf \n",
902 tree->GetEntries(),nTrackTotalMC,nTrackPerfect,eff);
904 Double_t purity = ((Double_t)nTrackPerfect)/nTrackFound;
905 printf("-> Total number of events: %lld -> FoundTracks %d -> nPerfect %d -> Purity: %3.2lf \n",
906 tree->GetEntries(),nTrackFound,nTrackPerfect,purity);
908 // Efficiencies - and normalize to 100%
910 TF1 f1("f1","100+x*0",0.,1.e3);
912 hPurity->Divide(hPerfect,hAllFound,1,1,"b");
913 hPurity->Multiply(&f1);
914 hPurity->SetMarkerColor(kGreen);
915 hPurity->SetMarkerStyle(21);
916 hPurity->GetXaxis()->SetTitle("transverse momentum p_{t} (GeV)");
917 hPurity->SetStats(0);
919 hPurity->GetYaxis()->SetRangeUser(0,100);
920 hPurity->SetTitle("Efficiency & Purity");
922 hEff->Divide(hPerfect,hAllMC,1,1,"b");
924 hEff->GetXaxis()->SetTitle("transverse momentum p_{t} (GeV)");
925 hEff->SetMarkerColor(kBlue);
926 hEff->SetMarkerStyle(21);
929 hFake->Divide(hImperfect,hAllMC,1,1,"b");
930 hFake->Multiply(&f1);
931 hFake->GetXaxis()->SetTitle("transverse momentum p_{t} (GeV)");
932 hFake->SetMarkerColor(kRed);
933 hFake->SetMarkerStyle(21);
937 hAnna->Divide(hAllFound,hAllMC,1,1,"b");
938 hAnna->Multiply(&f1);
939 hAnna->GetXaxis()->SetTitle("transverse momentum p_{t} (GeV)");
940 hAnna->SetMarkerColor(kBlack);
941 hAnna->SetMarkerStyle(21);
944 TCanvas *c1 = new TCanvas("c1","NoMCTrackFound");//,200,10,900,900);
945 TVirtualPad *pad = c1->cd();
946 pad->SetGridx(); pad->SetGridy();
949 TCanvas *c2 = new TCanvas("c2","Eff&Purity");//,200,10,900,900);
950 TVirtualPad *pad = c2->cd();
951 pad->SetGridx(); pad->SetGridy();
955 hEff->Draw("Same E");
956 hFake->Draw("Same E");
957 hAnna->Draw("Same E");
959 TLegend *leg = new TLegend(0.1,0.8,0.6,0.9);leg->SetFillColor(0);
960 leg->AddEntry(hPurity,"Purity (\"Perfect tracks\" within \"Found Tracks\")","PE");
961 leg->AddEntry(hEff,"Efficiency (\"Perfect tracks\" within \"MC findable Tracks\")","PE");
962 leg->AddEntry(hFake,"Fake (\"Inperfect tracks\" within \"MC findable Tracks\")","PE");
963 leg->AddEntry(hAnna,"AnnaLisa - Efficiency (\"Found tracks\" within \"MC findable Tracks\")","PE");
968 hAllMC->GetXaxis()->SetTitle("transverse momentum p_{t} (GeV)");
969 hAllMC->Draw(); // MC pt distribution
970 hAllFound->SetLineColor(2);
971 hAllFound->Draw("same"); // MC pt distribution
977 .L ~/ITSupgrade/BuildDetector/DetectorK.cxx+
980 DetectorK its("ALICE","ITS");
981 its.MakeAliceAllNew(0);
982 its.SetMaxRadiusOfSlowDetectors(0.01);
983 its.SolveViaBilloir(0);
984 TGraph *c = its.GetGraphRecoEfficiency(0,3,2);
989 DetectorK its("ALICE","ITS");
990 its.MakeAliceCurrent(0,0);
991 its.SetMaxRadiusOfSlowDetectors(0.01);
992 its.SolveViaBilloir(0);
993 TGraph *c = its.GetGraphRecoEfficiency(0,4,2);
998 TCanvas *c3 = new TCanvas("c3","impact");//,200,10,900,900);
999 c3->Divide(2,1); c3->cd(1);
1002 // Impact parameter resolution ---------------
1003 h2Ddca->Draw("colz");
1004 h2Ddca->FitSlicesY() ;
1005 TH2D *dcaM = (TH2D*)gDirectory->Get("dca2D_1"); dcaM->Draw("same");
1006 TH2D *dcaRMS = (TH2D*)gDirectory->Get("dca2D_2"); //dcaRMS->Draw();
1007 TGraphErrors *d0 = new TGraphErrors();
1008 for (Int_t ibin =1; ibin<=dcaRMS->GetXaxis()->GetNbins(); ibin++) {
1009 d0->SetPoint( ibin-1,dcaRMS->GetBinCenter(ibin),dcaRMS->GetBinContent(ibin)*1e4); // microns
1010 d0->SetPointError(ibin-1,0,dcaRMS->GetBinError(ibin)*1e4); // microns
1012 d0->SetMarkerStyle(21);
1013 d0->SetMaximum(200); d0->SetMinimum(0);
1014 d0->GetXaxis()->SetTitle("transverse momentum p_{t} (GeV)");
1015 d0->GetYaxis()->SetTitle("R-#phi Pointing Resolution (#mum)");
1016 d0->SetName("dca"); d0->SetTitle("DCAvsPt");
1018 c3->cd(1); h2Ddca->Draw("surf2");
1019 c3->cd(2); d0->Draw("APE");
1021 // PT RESOLUTION ------------
1022 TCanvas *c4 = new TCanvas("c4","pt resolution");//,200,10,900,900);
1023 c4->Divide(2,1); c4->cd(1);
1025 h2Dpt->Draw("colz");
1026 h2Dpt->FitSlicesY() ;
1027 TH2D *dPtM = (TH2D*)gDirectory->Get("dPt2D_1"); dPtM->Draw("same");
1028 TH2D *dPtRMS = (TH2D*)gDirectory->Get("dPt2D_2"); // dPtRMS->Draw("");
1029 TGraphErrors *gPt = new TGraphErrors();
1030 for (Int_t ibin =1; ibin<=dPtRMS->GetXaxis()->GetNbins(); ibin++) {
1031 gPt->SetPoint( ibin-1,dPtRMS->GetBinCenter(ibin),dPtRMS->GetBinContent(ibin));
1032 gPt->SetPointError(ibin-1,0,dPtRMS->GetBinError(ibin));
1034 gPt->SetMarkerStyle(21);
1035 gPt->SetMaximum(20); gPt->SetMinimum(0);
1036 gPt->GetXaxis()->SetTitle("transverse momentum p_{t} (GeV)");
1037 gPt->GetYaxis()->SetTitle("relative momentum resolution (%)");
1038 gPt->SetName("dPt"); gPt->SetTitle("DPTvsPt");
1040 c4->cd(1); h2Dpt->Draw("surf2");
1041 c4->cd(2); gPt->Draw("APE");
1046 TFile f("histos.root","RECREATE");
1048 hMultCount->Write();
1051 hImperfect->Write();
1053 hNoMCTrack->Write();
1072 void CountTrackableMCs(TH1F *hAllMC, Bool_t onlyPrims,Bool_t onlyPion) {
1074 gSystem->Load("libITSUpgradeBase");
1075 gSystem->Load("libITSUpgradeSim");
1077 // open run loader and load gAlice, kinematics and header
1078 AliRunLoader* runLoader = AliRunLoader::Open("galice.root");
1080 Error("Check kine", "getting run loader from file %s failed",
1084 runLoader->LoadHeader();
1085 runLoader->LoadKinematics();
1086 runLoader->LoadTrackRefs();
1088 AliLoader *dl = runLoader->GetDetectorLoader("ITS");
1091 TTree *trackRefTree = 0x0;
1092 TClonesArray *trackRef = new TClonesArray("AliTrackReference",1000);
1094 // TH1F *hRef = new TH1F("","",100,0,100);
1095 TH1F *hR = new TH1F("","",100,0,100);
1096 if (hAllMC==0) hAllMC = new TH1F("","",100,0.1,2);
1097 Float_t ptmin = hAllMC->GetBinCenter(1)-hAllMC->GetBinWidth(1)/2;
1098 Float_t ptmax = hAllMC->GetBinCenter(hAllMC->GetNbinsX())+hAllMC->GetBinWidth(hAllMC->GetNbinsX())/2;
1099 // Int_t nAllMC = 0;
1101 // Detector geometry
1102 TArrayD rmin(0); TArrayD rmax(0);
1103 GetDetectorRadii(&rmin,&rmax);
1104 TArrayI nLaySigs(rmin.GetSize());
1106 printf("Counting trackable MC tracks ...\n");
1108 for(Int_t iEv =0; iEv<runLoader->GetNumberOfEvents(); iEv++){
1109 Int_t nTrackableTracks = 0;
1110 runLoader->GetEvent(iEv);
1111 AliStack* stack = runLoader->Stack();
1112 printf("+++ event %i (of %d) +++++++++++++++++++++++ # total MCtracks: %d \n",iEv,runLoader->GetNumberOfEvents()-1,stack->GetNtrack());
1114 trackRefTree=runLoader->TreeTR();
1115 TBranch *br = trackRefTree->GetBranch("TrackReferences");
1117 printf("no TR branch available , exiting \n");
1120 br->SetAddress(&trackRef);
1122 // init the trackRef tree
1123 trackRefTree=runLoader->TreeTR();
1124 trackRefTree->SetBranchAddress("TrackReferences",&trackRef);
1126 // Count trackable MC tracks
1127 for (Int_t iMC=0; iMC<stack->GetNtrack(); iMC++) {
1129 TParticle* particle = stack->Particle(iMC);
1130 if (TMath::Abs(particle->Eta())>etaCut) continue;
1131 if (onlyPrims && !stack->IsPhysicalPrimary(iMC)) continue;
1132 if (onlyPion && TMath::Abs(particle->GetPdgCode())!=211) continue;
1135 Bool_t isTrackable = 0;
1138 trackRefTree->GetEntry(stack->TreeKEntry(iMC));
1139 Int_t nref=trackRef->GetEntriesFast();
1140 for(Int_t iref =0; iref<nref; iref++){
1141 AliTrackReference *trR = (AliTrackReference*)trackRef->At(iref);
1143 if(trR->DetectorId()!=AliTrackReference::kITS) continue;
1144 Float_t radPos = trR->R();
1146 for (Int_t il=0; il<rmin.GetSize();il++) {
1147 if (radPos>=rmin.At(il)-0.1 && radPos<=rmax.At(il)+0.1) {
1148 // cout<<" in Layer "<<il<<" "<<radPos;
1149 nLaySigs.AddAt(1.,il);
1150 // cout<<" "<<nLaySigs.At(il)<<endl;
1155 if (nLaySigs.GetSum()>=3) {
1157 // cout<<nLaySigs.GetSum()<<endl;
1161 Double_t ptMC = particle->Pt();
1162 // Double_t etaMC = particle->Eta();
1163 // if (ptMC>ptmin&&ptMC<ptmax) {nTrackableTracks++;hAllMC->Fill(ptMC);}
1164 if (ptMC>ptmin) {nTrackableTracks++;hAllMC->Fill(ptMC);}
1169 } // entries tracks MC
1170 printf(" -> trackable MC tracks: %d (%d)\n",nTrackableTracks,hAllMC->GetEntries());
1176 runLoader->UnloadHeader();
1177 runLoader->UnloadKinematics();
1182 void CountPrimaries(TH1F *hMultCount) {
1184 if (hMultCount==0) hMultCount = new TH1F("mult","averaged multiplicity (charg. prim)",80,-4.,4.);
1186 AliRunLoader *rl = AliRunLoader::Open("galice.root");
1187 rl->SetKineFileName("Kinematics.root");
1189 rl->LoadKinematics();
1190 Int_t nEvents = rl->GetNumberOfEvents();
1191 cout<< "N events "<<nEvents<<endl;
1192 for(Int_t iEv=0; iEv<nEvents; iEv++){
1194 AliStack *s = rl->Stack();
1195 for(Int_t iP=0; iP<s->GetNtrack(); iP++ ){
1196 TParticle *p = s->Particle(iP);
1197 if (!(s->IsPhysicalPrimary(iP))) continue;
1198 Float_t eta = p->Eta();
1200 hMultCount->Fill(eta);
1205 hMultCount->DrawCopy();
1207 rl->UnloadKinematics();
1215 void plotMerged(Bool_t onlyPlot=0) {
1217 gStyle->SetPalette(1);
1219 TFile f("histoSum.root","UPDATE");
1221 TH1F* hAllMC = f.Get("allMC");
1222 TH1F* hAllFound= f.Get("allFound");
1223 TH1F* hImperfect= f.Get("imperfect");
1224 TH1F* hPerfect= f.Get("perfect");
1225 TH1F* hNoMCTrack= f.Get("noMCtrack");
1228 // have to be recalculated
1229 TH1F* hPurity = f.Get("purity");
1230 TH1F* hEff= f.Get("efficiency");
1231 TH1F* hFake= f.Get("fake");
1232 TH1F* hAnna= f.Get("annaEff");
1234 TH2D* h2Ddca= f.Get("dca2D");
1235 TGraphErrors *d0= f.Get("dca");
1237 TH2D* h2Dpt= f.Get("dPt2D");
1238 TGraphErrors *gPt= f.Get("dPt");
1242 /* // Get Errors right
1246 hImperfect->Sumw2();
1251 // Efficiencies - and normalize to 100%
1253 TF1 f1("f1","100+x*0",0.,1.e3);
1255 hPurity->Divide(hPerfect,hAllFound,1,1,"b");
1256 hPurity->Multiply(&f1);
1257 hPurity->SetMarkerColor(kGreen);
1258 hPurity->SetMarkerStyle(21);
1259 hPurity->GetXaxis()->SetTitle("transverse momentum p_{t} (GeV)");
1260 hPurity->SetStats(0);
1262 hPurity->GetYaxis()->SetRangeUser(0,100);
1263 hPurity->SetTitle("Efficiency & Purity");
1265 hEff->Divide(hPerfect,hAllMC,1,1,"b");
1266 hEff->Multiply(&f1);
1267 hEff->GetXaxis()->SetTitle("transverse momentum p_{t} (GeV)");
1268 hEff->SetMarkerColor(kBlue);
1269 hEff->SetMarkerStyle(21);
1272 hFake->Divide(hImperfect,hAllMC,1,1,"b");
1273 hFake->Multiply(&f1);
1274 hFake->GetXaxis()->SetTitle("transverse momentum p_{t} (GeV)");
1275 hFake->SetMarkerColor(kRed);
1276 hFake->SetMarkerStyle(21);
1279 hAnna->Divide(hAllFound,hAllMC,1,1,"b");
1280 hAnna->Multiply(&f1);
1281 hAnna->GetXaxis()->SetTitle("transverse momentum p_{t} (GeV)");
1282 hAnna->SetMarkerColor(kBlack);
1283 hAnna->SetMarkerStyle(21);
1287 // Impact parameter resolution ---------------
1288 TCanvas *c3 = new TCanvas("c3","impact");//,200,10,900,900);
1289 c3->Divide(2,1); c3->cd(1);
1290 h2Ddca->DrawCopy("colz");
1291 h2Ddca->FitSlicesY() ;
1292 TH2D *dcaM = (TH2D*)gDirectory->Get("dca2D_1"); dcaM->Draw("same");
1293 TH2D *dcaRMS = (TH2D*)gDirectory->Get("dca2D_2"); //dcaRMS->Draw();
1294 TGraphErrors *d0 = new TGraphErrors();
1295 for (Int_t ibin =1; ibin<=dcaRMS->GetXaxis()->GetNbins(); ibin++) {
1296 d0->SetPoint( ibin-1,dcaRMS->GetBinCenter(ibin),dcaRMS->GetBinContent(ibin)*1e4); // microns
1297 d0->SetPointError(ibin-1,0,dcaRMS->GetBinError(ibin)*1e4); // microns
1299 d0->SetMarkerStyle(21);
1300 d0->SetMaximum(200); d0->SetMinimum(0);
1301 d0->GetXaxis()->SetTitle("transverse momentum p_{t} (GeV)");
1302 d0->GetYaxis()->SetTitle("R-#phi Pointing Resolution (#mum)");
1303 d0->SetName("dca"); d0->SetTitle("DCAvsPt");
1304 // c3->cd(1); h2Ddca->Draw("surf2");
1305 c3->cd(2); d0->Draw("APE");
1307 // PT RESOLUTION ------------
1308 TCanvas *c4 = new TCanvas("c4","pt resolution");//,200,10,900,900);
1309 c4->Divide(2,1); c4->cd(1);
1310 h2Dpt->DrawCopy("colz");
1311 h2Dpt->FitSlicesY() ;
1312 TH2D *dPtM = (TH2D*)gDirectory->Get("dPt2D_1"); dPtM->Draw("same");
1313 TH2D *dPtRMS = (TH2D*)gDirectory->Get("dPt2D_2"); // dPtRMS->Draw("");
1314 TGraphErrors *gPt = new TGraphErrors();
1315 for (Int_t ibin =1; ibin<=dPtRMS->GetXaxis()->GetNbins(); ibin++) {
1316 gPt->SetPoint( ibin-1,dPtRMS->GetBinCenter(ibin),dPtRMS->GetBinContent(ibin));
1317 gPt->SetPointError(ibin-1,0,dPtRMS->GetBinError(ibin));
1319 gPt->SetMarkerStyle(21);
1320 gPt->SetMaximum(20); gPt->SetMinimum(0);
1321 gPt->GetXaxis()->SetTitle("transverse momentum p_{t} (GeV)");
1322 gPt->GetYaxis()->SetTitle("relative momentum resolution (%)");
1323 gPt->SetName("dPt"); gPt->SetTitle("DPTvsPt");
1324 // c4->cd(1); h2Dpt->Draw("surf2");
1325 c4->cd(2); gPt->Draw("APE");
1328 // overwrite with normalized graphs
1342 TCanvas *c2 = new TCanvas("c2","Eff&Purity");//,200,10,900,900);
1343 TVirtualPad *pad = c2->cd();
1344 pad->SetGridx(); pad->SetGridy();
1347 TLegend *leg = new TLegend(0.1,0.8,0.6,0.9);leg->SetFillColor(0);
1348 leg->AddEntry(hPurity,"Purity (\"Perfect tracks\" within \"Found Tracks\")","PE");
1349 leg->AddEntry(hEff,"Efficiency (\"Perfect tracks\" within \"MC findable Tracks\")","PE");
1350 leg->AddEntry(hFake,"Fake (\"Inperfect tracks\" within \"MC findable Tracks\")","PE");
1351 leg->AddEntry(hAnna,"AnnaLisa - Efficiency (\"Found tracks\" within \"MC findable Tracks\")","PE");
1354 hPurity->DrawCopy("E");
1355 hEff->DrawCopy("Same E");
1356 hFake->DrawCopy("Same E");
1357 hAnna->DrawCopy("Same E");
1360 c2->SaveAs("EffPlot.png");