added correction for events with vertex but 0 tracks
[u/mrichter/AliRoot.git] / PWG0 / esdTrackCuts / printStats.C
1 void printStats(const char* fileName = "trackCuts.root")
2 {
3   TFile::Open(fileName);
4   
5   fTriggerStats = (TH1*) gFile->Get("fTriggerStats");
6
7   // !MB1 + MB1
8   Int_t allEvents = fTriggerStats->GetBinContent(1) + fTriggerStats->GetBinContent(2);
9
10   // MB2
11   Int_t triggeredEvents = fTriggerStats->GetBinContent(3);
12
13   Printf("Triggered %d out of %d events (%.2f %%)", triggeredEvents, allEvents, 100.0 * triggeredEvents / allEvents);
14
15   fVertex = (TH1*) gFile->Get("fVertex");
16   Int_t eventsVertex = fVertex->GetEntries();
17
18   Printf("%d events have a vertex out of %d triggered (%.2f %%)", eventsVertex, triggeredEvents, 100.0 * eventsVertex / triggeredEvents);
19
20   fStatsPrim = (TH1*) gFile->Get("fTrackCutsPrimaries/cut_statistics");
21
22   Int_t tracksPrim = fStatsPrim->GetBinContent(1);
23   Int_t tracksPrimAc = tracksPrim - fStatsPrim->GetBinContent(2);
24
25   fStatsSec = (TH1*) gFile->Get("fTrackCutsSecondaries/cut_statistics");
26
27   Int_t tracksSec = fStatsSec->GetBinContent(1);
28   Int_t tracksSecAc = tracksSec - fStatsSec->GetBinContent(2);
29
30   fPrimStats = (TH1*) gFile->Get("fPrimStats");
31
32   if (fPrimStats->GetBinContent(5) + fPrimStats->GetBinContent(7) != fStatsPrim->GetBinContent(2))
33     Printf("UNEXPECTED: %f != %f", fPrimStats->GetBinContent(5) + fPrimStats->GetBinContent(7), fStatsPrim->GetBinContent(2));
34
35   Float_t notLostPrimaries = 100.0 * fPrimStats->GetBinContent(7) / (fPrimStats->GetBinContent(5) + fPrimStats->GetBinContent(7));
36
37   Printf("Accepted %d out of %d primary tracks (%.2f %%)", tracksPrimAc, tracksPrim, 100.0 * tracksPrimAc / tracksPrim);
38   Printf("Per Event: %.2f out of %.2f", (Float_t) tracksPrimAc / eventsVertex, (Float_t) tracksPrim / eventsVertex);
39
40   Printf("Among the non accepted ones %.2f %% are from primaries that have been found with other tracks", notLostPrimaries);
41
42   Printf("Accepted %d out of %d secondary tracks (%.2f %%)", tracksSecAc, tracksSec, 100.0 * tracksSecAc / tracksSec);
43   Printf("Per Event: %.2f out of %.2f", (Float_t) tracksSecAc / eventsVertex, (Float_t) tracksSec / eventsVertex);
44
45   Printf("Before cuts: %.2f %% of the tracks are secondaries", 100.0 * tracksSec / (tracksPrim + tracksSec));
46
47   Printf("After cuts: %.2f %% of the tracks are secondaries", 100.0 * tracksSecAc / (tracksPrimAc + tracksSecAc));
48 }
49
50 void ComparePlots(const char* fileName1, const char* fileName2, const char* dirName1 = "AliESDtrackCuts/before_cuts", const char* dirName2 = 0)
51 {
52   file1 = TFile::Open(fileName1);
53   file2 = TFile::Open(fileName2);
54
55   if (!dirName2)
56     dirName1 = dirName2;
57
58   dir1 = file1->GetDirectory(dirName1);
59   dir2 = file2->GetDirectory(dirName2);
60
61   keyList = dir1->GetListOfKeys();
62   TIter iter(keyList);
63
64   TKey* key = 0;
65   while ((key = (TKey*) iter())) {
66     TH1* hist1 = (TH1*) dir1->Get(key->GetName());
67     TH1* hist2 = (TH1*) dir2->Get(key->GetName());
68
69     if (hist1->Integral() > 0)
70       hist1->Scale(1.0 / hist1->Integral());
71     if (hist2->Integral())
72       hist2->Scale(1.0 / hist2->Integral());
73
74     TString name(key->GetName());
75
76     c = new TCanvas(Form("%s_canvas", key->GetName()), key->GetName(), 600, 400);
77
78     hist1->Draw();
79     hist2->SetLineColor(2);
80     hist2->Draw("SAME");
81
82     /* this does not work, although given here: http://pcroot.cern.ch/root/html/THistPainter.html ;-)
83     TPaveStats *st = (TPaveStats*) hist1->FindObject("stats");
84     st->SetTextColor(2);
85     st->SetY1NDC(st->GetY1NDC() - 0.2);
86     st->SetY2NDC(st->GetY2NDC() - 0.2);
87     */
88
89     Float_t min = 0.9 * TMath::Min(hist1->GetMinimum(), hist2->GetMinimum());
90
91     if (name.Contains("cov") || name.Contains("dXY") || name.Contains("dZ")) {
92       min += 1e-6;
93       c->cd(1)->SetLogy();
94       if (name.Contains("cov")) 
95         hist1->GetXaxis()->SetRangeUser(0, 5);
96     }
97
98     hist1->GetYaxis()->SetRangeUser(min, 1.1 * TMath::Max(hist1->GetMaximum(), hist2->GetMaximum()));
99
100     c->SaveAs(Form("%s.gif", key->GetName()));
101
102     //break;
103   }
104 }
105