Improved QAchecker and plots for DQM
[u/mrichter/AliRoot.git] / TOF / AliTOFanalyzeMatchingV2Phenix.C
CommitLineData
8a072bac 1#ifndef __CINT__
2#include "TFile.h"
3#include "TTask.h"
4#include "TTree.h"
5#include "TSystem.h"
6#include "TROOT.h"
7#include "TFolder.h"
8#include "TBenchmark.h"
9#include "AliTOFTrackV2.h"
10#endif
11
12
13Int_t AliTOFanalyzeMatchingV2Phenix()
14{
15 // Read TPC and TRD reconstructed tracks and matched
16 // with TOF digits
17 // origin: F. Pierella | pierella@bo.infn.it
18 // Analysis done a la TOF in PHENIX
19
20 gROOT->Reset();
21 gStyle->SetOptStat(0);
22 gStyle->SetOptTitle(0);
23 gStyle->SetPalette(1);
24 gStyle->SetCanvasColor(33);
25 gStyle->SetFrameFillColor(18);
26
27
28 gBenchmark->Start("AliTOFanalyzeMatchingV2");
29
30
31 if(gAlice){
32 delete gAlice;
33 gAlice=0;
34 }
35 else{
36 // Dynamically link some shared libs
37 if(gClassTable->GetID("AliRun") < 0) {
38 gROOT->LoadMacro("$ALICE_ROOT/macros/loadlibs.C");
39 loadlibs();
40 } // end if
41 }
42
43 // ==================>histos
44 TH2F *hpvsm = new TH2F("hpvsm"," ",170,-0.5,1.2,400,-4.,4.);
45 hpvsm->GetXaxis()->SetTitle("mass [GeV/c^{2}]");
46 hpvsm->GetYaxis()->SetTitle("charge*momentum [GeV/c]");
47
48 TH2F *hdEdXvsp = new TH2F("hdEdXvsp"," ",400,-4.,4.,1000,0.,1000.);
49 hdEdXvsp->GetYaxis()->SetTitle("dE/dX [au]");
50 hdEdXvsp->GetXaxis()->SetTitle("charge*momentum [GeV/c]");
51
52 TH2F *hdEdXvsabsp = new TH2F("hdEdXvsabsp"," ",400,0.,4.,100,0.,1000.);
53 hdEdXvsabsp->GetYaxis()->SetTitle("dE/dX [au]");
54 hdEdXvsabsp->GetXaxis()->SetTitle("momentum [GeV/c]");
55
56 TH2F *hinvpvstof= new TH2F("hinvpvstof"," ",300,10.,40.,400,-4.,4.);
57 hinvpvstof->GetYaxis()->SetTitle("charge/momentum [(GeV/c)^{-1}]");
58 hinvpvstof->GetXaxis()->SetTitle("Time of flight [ns]");
59
60 TH2F *htofvsp = new TH2F("htofvsp"," ",400,0.,4.,300,10.,40.);
61 htofvsp->GetYaxis()->SetTitle("Time of flight [ns]");
62 htofvsp->GetXaxis()->SetTitle("momentum [GeV/c]");
63
64 TH2F *hsqmvsp = new TH2F("hsqmvsp"," ",400,-4.,4.,130,-0.1,1.2);
65 hsqmvsp->GetYaxis()->SetTitle("mass^{2} (GeV/c^{2})^{2}");
66 hsqmvsp->GetXaxis()->SetTitle("charge*momentum [GeV/c]");
67
68
69 TH2F *hinvbgvsp = new TH2F("hinvbgvsp"," ",400,-4.,4.,50,0.,5);
70 hinvbgvsp->GetXaxis()->SetTitle("charge*momentum [GeV/c]");
71 hinvbgvsp->GetYaxis()->SetTitle("1/(#beta #gamma)");
72
73 TH2F *hpvstofde = new TH2F("hpvstofde"," ",350,-5,30.,400,-4.,4.);
74 hpvstofde->GetXaxis()->SetTitle("Time-of-flight difference from electron [ns]");
75 hpvstofde->GetYaxis()->SetTitle("charge*momentum [GeV/c]");
76
77
78 TH2F *hinvpvstofde = new TH2F("hinvpvstofde"," ",350,-5,30.,400,-4.,4.);
79 hinvpvstofde->GetXaxis()->SetTitle("Time-of-flight difference from electron [ns]");
80 hinvpvstofde->GetYaxis()->SetTitle("charge/momentum [(GeV/c)^{-1}]");
81 // =======================================> done
82
83
84
85 // chain in the case of more events
86 TChain ch("T");
87 ch.Add("tofTracks*.root"); // use wildcards
88
89 TClonesArray *arr = new TClonesArray("AliTOFTrackV2");
90 T->GetBranch("tracks")->SetAutoDelete(kFALSE);
91 T->SetBranchAddress("tracks",&arr);
92 Int_t nentries = (Int_t)(T->GetEntries());
93 cout << "number of events " << nentries << endl;
94 for (Int_t ev=0;ev<nentries;ev++) {
95 arr->Clear();
96 T->GetEntry(ev);
97 Int_t ntracks = arr->GetEntriesFast();
98 cout << ntracks << endl;
99 for (Int_t i=0;i<ntracks;i++) {
100 AliTOFTrackV2 *toftrack = (AliTOFTrackV2*)arr->At(i);
101 if(toftrack->GetTrackLabel()<0) continue; // reject fake
102
103 Float_t momTPC=toftrack->GetPTPC(); // signed momentum
104 if(toftrack->GetPdgCode()<0) momTPC=-momTPC;
105 Int_t pdgCode=toftrack->GetPdgCode();
106 //if(TMath::Abs(pdgCode)!=211) continue;
107 hdEdXvsp->Fill(momTPC,toftrack->GetdEdX());
108 hdEdXvsabsp->Fill(TMath::Abs(momTPC),toftrack->GetdEdX());
109
110 Int_t matchStatus=toftrack->GetMatchingStatus();
111 Float_t tof=toftrack->GetTof();
112 if(matchStatus==3 || matchStatus==4){ // track has a tof
113 htofvsp->Fill(TMath::Abs(momTPC),tof);
114 hinvpvstof->Fill(tof,1./momTPC);
115 } // if(matchStatus==3 || matchStatus==4)
116
117 Float_t length=toftrack->GetLength();
118 // starting mass calculation/ only possible with track length
119 if(length>0. && (matchStatus==3 || matchStatus==4)) // to be skipped when track length will be in the Kalman
120 {
121 Float_t squareMass=momTPC*momTPC*((29.9792*tof/length)*(29.9792*tof/length)-1);
122 hsqmvsp->Fill(momTPC,TMath::Abs(squareMass));
123 Float_t dummy=squareMass;
124 if(dummy<0) dummy=-dummy;
125 Float_t mass=TMath::Sqrt(dummy);
126 if(squareMass<0) mass=-mass;
127 hpvsm->Fill(mass,momTPC);
128 Float_t invbg=TMath::Sqrt(dummy)/TMath::Abs(momTPC);
129 hinvbgvsp->Fill(momTPC,invbg);
130 Float_t betaEl=TMath::Abs(momTPC)/TMath::Sqrt(momTPC*momTPC+0.000510999*0.000510999);
131 Float_t tofEl=length/(betaEl*29.9792); // [ns]
132 hpvstofde->Fill((tof-tofEl),momTPC);
133 hinvpvstofde->Fill((tof-tofEl),1./momTPC);
134 } // if(toftrack->GetLength()>0.)
135
136 } // end loop on tracks
137 } // end loop on 'events'
138
139 gStyle->SetPalette(1);
140 gStyle->SetCanvasColor(10);
141 gStyle->SetFrameFillColor(10);
142
143 //TPaveLabel pl;
144
145 TCanvas* c1 = new TCanvas("c1", "TOF a la PHENIX (I)",210, 210, 740, 690);
146 c1->SetFillColor(10);
147 c1->cd();
148 gPad->SetGrid();
149 c1->SetHighLightColor(2);
150 c1->SetFillColor(10);
151 c1->SetBorderSize(2);
152
153 c1->Divide(2,2);
154 c1->cd(1);
155 gPad->SetGridx();
156 gPad->SetGridy();
157 hpvsm->Draw("contz");
158
159 //Float_t x1=0.67, y1=0.875, x2=0.85, y2=0.95;
160 /*hpvsm->Draw("contz");*/
161 //pl.DrawPaveLabel(x1,y1,x2,y2,"CONTZ","brNDC");
162
163
164
165 c1->cd(2);
166 gPad->SetGridx();
167 gPad->SetGridy();
168 hdEdXvsp->Draw();
169 c1->cd(3);
170 gPad->SetGridx();
171 gPad->SetGridy();
172 hinvpvstof->Draw();
173 c1->cd(4);
174 gPad->SetGridx();
175 gPad->SetGridy();
176 htofvsp->Draw();
177
178 TCanvas* c2 = new TCanvas("c2", "TOF a la PHENIX (II)", 210, 210, 740, 690);
179 c2->SetFillColor(10);
180 c2->cd();
181
182 //gStyle->SetOptStat(0);
183 c2->SetHighLightColor(2);
184 c2->SetFillColor(10);
185 c2->SetBorderSize(2);
186 c2->SetGridy();
187 c2->Divide(2,2);
188
189
190 c2->cd(1);
191 gPad->SetGridx();
192 gPad->SetGridy();
193 hsqmvsp->Draw("contz");
194
195 c2->cd(2);
196 gPad->SetGridx();
197 gPad->SetGridy();
198 hinvbgvsp->Draw();
199
200
201 c2->cd(3);
202 gPad->SetGridx();
203 gPad->SetGridy();
204 gPad->SetLogx();
205 hdEdXvsabsp->Draw();
206
207
208 c2->cd(4);
209 gPad->SetGridx();
210 gPad->SetGridy();
211 hpvstofde->Draw();
212
213
214 TCanvas* c2b = new TCanvas("c2b", " ", 210, 210, 740, 690);
215 c2b->SetFillColor(10);
216 c2b->cd();
217 //gStyle->SetOptStat(0);
218 c2b->SetHighLightColor(2);
219 c2b->SetFillColor(10);
220 c2b->SetBorderSize(2);
221 c2b->SetGridy();
222 c2b->Divide(2,2);
223 c2b->cd(1);
224 gPad->SetGridx();
225 gPad->SetGridy();
226 hinvpvstofde->SetFillColor(33);
227 hinvpvstofde->SetFillStyle(3001);
228 hinvpvstofde->Draw();
229 c2b->cd(2);
230 gPad->SetGridx();
231 gPad->SetGridy();
232 hpvstofde->Draw();
233
234
235
236 TCanvas* c3 = new TCanvas("c3", "TOF a la PHENIX (II)", 210, 210, 740, 690);
237 c3->SetFillColor(10);
238 c3->cd();
239
240 //gStyle->SetOptStat(0);
241 c3->SetHighLightColor(2);
242 c3->SetFillColor(10);
243 c3->SetBorderSize(2);
244 c3->SetGridy();
245 c3->Divide(2,2);
246 c3->cd(1);
247 gPad->SetGridx();
248 gPad->SetGridy();
249 hpvsm->Draw("contz");
250
251 c3->cd(2);
252 gPad->SetGridx();
253 gPad->SetGridy();
254 hsqmvsp->Draw("contz");
255
256 c3->cd(3);
257 gPad->SetGridx();
258 gPad->SetGridy();
259 gPad->SetLogx();
260 hdEdXvsabsp->Draw();
261
262}