]>
Commit | Line | Data |
---|---|---|
3fd01708 | 1 | #if !defined(__CINT__) || defined(__MAKECINT__) |
2 | #include <TCanvas.h> | |
3 | #include <TClassTable.h> | |
4 | #include <TGraph.h> | |
5 | #include <TGraph2D.h> | |
6 | #include <TGeoManager.h> | |
7 | #include <TH1.h> | |
8 | #include <TInterpreter.h> | |
9 | #include "AliCDBManager.h" | |
10 | #include "AliGeomManager.h" | |
11 | #include "AliHeader.h" | |
12 | #include "AliITS.h" | |
13 | #include "AliITSDetTypeRec.h" | |
14 | #include "AliITSgeom.h" | |
15 | #include "AliITSRecPoint.h" | |
16 | #include "AliRun.h" | |
17 | #endif | |
18 | ||
00fe805a | 19 | Int_t ShowITSHitsRecPoints(Bool_t align=kFALSE, |
3fd01708 | 20 | TString alignfile="ITSfullv11Misalignment.root") |
21 | { | |
22 | /////////////////////////////////////////////////////////////////////// | |
23 | // Macro to check clusters and hits in the 6 ITS layers // | |
24 | /////////////////////////////////////////////////////////////////////// | |
25 | ||
26 | if (gClassTable->GetID("AliRun") < 0) { | |
27 | gInterpreter->ExecuteMacro("loadlibs.C"); | |
28 | } | |
29 | else { | |
30 | if(gAlice){ | |
33c3c91a | 31 | delete AliRunLoader::Instance(); |
3fd01708 | 32 | delete gAlice; |
33 | gAlice=0; | |
34 | } | |
35 | } | |
36 | // Set OCDB if needed | |
37 | AliCDBManager* man = AliCDBManager::Instance(); | |
38 | if (!man->IsDefaultStorageSet()) { | |
39 | printf("Setting a local default storage and run number 0\n"); | |
162637e4 | 40 | man->SetDefaultStorage("local://$ALICE_ROOT/OCDB"); |
3fd01708 | 41 | man->SetRun(0); |
42 | } | |
43 | else { | |
44 | printf("Using deafult storage \n"); | |
45 | } | |
46 | ||
47 | // retrives geometry | |
48 | if(!gGeoManager){ | |
49 | AliGeomManager::LoadGeometry("geometry.root"); | |
50 | } | |
443c185f | 51 | |
3fd01708 | 52 | if(align) { |
53 | TFile f(alignfile.Data()); | |
54 | TClonesArray* ar = (TClonesArray*)f.Get("ITSAlignObjs"); | |
55 | AliGeomManager::ApplyAlignObjsToGeom(*ar); | |
56 | f.Close(); | |
443c185f | 57 | } else { |
58 | AliGeomManager::ApplyAlignObjsFromCDB("ITS"); | |
3fd01708 | 59 | } |
60 | ||
61 | AliRunLoader* rl = AliRunLoader::Open("galice.root"); | |
62 | if (rl == 0x0){ | |
63 | cerr<<"Can not open session RL=NULL"<< endl; | |
64 | return -1; | |
65 | } | |
66 | Int_t retval = rl->LoadgAlice(); | |
67 | if (retval){ | |
68 | cerr<<"LoadgAlice returned error"<<endl; | |
69 | return -1; | |
70 | } | |
71 | gAlice=rl->GetAliRun(); | |
72 | ||
73 | retval = rl->LoadHeader(); | |
74 | if (retval){ | |
75 | cerr<<"LoadHeader returned error"<<endl; | |
76 | return -1; | |
77 | } | |
78 | ||
79 | ||
80 | AliITSLoader* ITSloader = (AliITSLoader*) rl->GetLoader("ITSLoader"); | |
81 | if(!ITSloader){ | |
82 | cerr<<"ITS loader not found"<<endl; | |
83 | return -1; | |
84 | } | |
85 | ITSloader->LoadRecPoints("read"); | |
86 | ITSloader->LoadHits("read"); | |
87 | ||
88 | ||
89 | Float_t cluglo[3]={0.,0.,0.}; | |
90 | AliITS *ITS = (AliITS*)gAlice->GetModule("ITS"); | |
91 | ITS->SetTreeAddress(); | |
92 | AliITSgeom *geom = ITS->GetITSgeom(); | |
93 | AliITSDetTypeRec* detTypeRec = new AliITSDetTypeRec(); | |
94 | detTypeRec->SetITSgeom(ITSloader->GetITSgeom()); | |
95 | detTypeRec->SetDefaults(); | |
96 | ||
97 | Int_t modmin=geom->GetStartDet(0); | |
98 | Int_t modmax=geom->GetLastDet(2); | |
99 | Int_t totmod=modmax-modmin; | |
100 | Float_t xlim[6]={4.5,7.5,16.,26.,40.,45.}; | |
101 | Float_t zlim[6]={15.,15.,22.,30.,45.,55.}; | |
102 | ||
103 | TH1F* hlayer=new TH1F("hlayer","",6,0.5,6.5); | |
104 | TH1F** hmod=new TH1F*[6]; | |
105 | TH1F** hxl=new TH1F*[6]; | |
106 | TH1F** hzl=new TH1F*[6]; | |
107 | TH1F** hxg=new TH1F*[6]; | |
108 | TH1F** hyg=new TH1F*[6]; | |
109 | TH2F** hxyg=new TH2F*[6]; | |
110 | TH2F** hxygHits=new TH2F*[6]; | |
111 | TH1F** hzg=new TH1F*[6]; | |
112 | TH1F** hr=new TH1F*[6]; | |
113 | TH1F** hphi=new TH1F*[6]; | |
114 | TH1F** hq=new TH1F*[6]; | |
115 | ||
116 | Char_t name[10]; | |
117 | for(Int_t iLay=0;iLay<6;iLay++){ | |
118 | sprintf(name,"hmod%d",iLay+1); | |
119 | hmod[iLay]=new TH1F(name,"",totmod,modmin-0.5,modmax+0.5); | |
120 | hmod[iLay]->GetXaxis()->SetTitle("Module"); | |
121 | hmod[iLay]->GetXaxis()->CenterTitle(); | |
122 | sprintf(name,"hxloc%d",iLay+1); | |
123 | hxl[iLay]=new TH1F(name,"",100,-4.,4.); | |
124 | hxl[iLay]->GetXaxis()->SetTitle("Xloc (cm)"); | |
125 | hxl[iLay]->GetXaxis()->CenterTitle(); | |
126 | sprintf(name,"hzloc%d",iLay+1); | |
127 | hzl[iLay]=new TH1F(name,"",100,-4.,4.); | |
128 | hzl[iLay]->GetXaxis()->SetTitle("Zloc (cm)"); | |
129 | hzl[iLay]->GetXaxis()->CenterTitle(); | |
130 | sprintf(name,"hxgl%d",iLay+1); | |
131 | hxg[iLay]=new TH1F(name,"",100,-xlim[iLay],xlim[iLay]); | |
132 | hxg[iLay]->GetXaxis()->SetTitle("Xglob (cm)"); | |
133 | hxg[iLay]->GetXaxis()->CenterTitle(); | |
134 | sprintf(name,"hygl%d",iLay+1); | |
135 | hyg[iLay]=new TH1F(name,"",100,-xlim[iLay],xlim[iLay]); | |
136 | hyg[iLay]->GetXaxis()->SetTitle("Yglob (cm)"); | |
137 | hyg[iLay]->GetXaxis()->CenterTitle(); | |
138 | sprintf(name,"hxygl%d",iLay+1); | |
139 | hxyg[iLay]=new TH2F(name,"",1000,-xlim[iLay],xlim[iLay],1000,-xlim[iLay],xlim[iLay]); | |
140 | hxyg[iLay]->GetXaxis()->SetTitle("Xglob (cm)"); | |
141 | hxyg[iLay]->GetYaxis()->SetTitle("Yglob (cm)"); | |
142 | sprintf(name,"hxygHitsl%d",iLay+1); | |
143 | hxygHits[iLay]=new TH2F(name,"",1000,-xlim[iLay],xlim[iLay],1000,-xlim[iLay],xlim[iLay]); | |
144 | sprintf(name,"hzgl%d",iLay+1); | |
145 | hzg[iLay]=new TH1F(name,"",100,-zlim[iLay],zlim[iLay]); | |
146 | hzg[iLay]->GetXaxis()->SetTitle("Zglob (cm)"); | |
147 | hzg[iLay]->GetXaxis()->CenterTitle(); | |
148 | sprintf(name,"hr%d",iLay+1); | |
149 | hr[iLay]=new TH1F(name,"",100,0.,50.); | |
150 | hr[iLay]->GetXaxis()->SetTitle("r (cm)"); | |
151 | hr[iLay]->GetXaxis()->CenterTitle(); | |
152 | sprintf(name,"hphi%d",iLay+1); | |
153 | hphi[iLay]=new TH1F(name,"",100,-TMath::Pi(),TMath::Pi()); | |
154 | hphi[iLay]->GetXaxis()->SetTitle("#varphi (rad)"); | |
155 | hphi[iLay]->GetXaxis()->CenterTitle(); | |
156 | sprintf(name,"hq%d",iLay+1); | |
157 | hq[iLay]=new TH1F(name,"",100,0.,300.); | |
158 | hq[iLay]->GetXaxis()->SetTitle("Charge (keV)"); | |
159 | hq[iLay]->GetXaxis()->CenterTitle(); | |
160 | } | |
161 | ||
162 | TGraph **gpts=new TGraph*[3]; | |
163 | TGraph2D **gpts3d=new TGraph2D*[3]; | |
164 | TGraph **gRP=new TGraph*[6]; | |
165 | TGraph **gHend=new TGraph*[6]; | |
166 | TGraph **gHstart=new TGraph*[6]; | |
167 | for(Int_t i=0;i<3;i++){ | |
168 | gpts[i]=new TGraph(0); | |
169 | gpts3d[i]=new TGraph2D(0); | |
170 | } | |
171 | for(Int_t i=0;i<6;i++){ | |
172 | gRP[i]=new TGraph(0); | |
173 | gRP[i]->GetXaxis()->SetTitle("global x [cm]"); | |
174 | gRP[i]->GetYaxis()->SetTitle("global y [cm]"); | |
175 | gHend[i]=new TGraph(0); | |
176 | gHstart[i]=new TGraph(0); | |
177 | } | |
178 | Int_t totev=rl->GetNumberOfEvents(); | |
179 | printf("Total Number of events = %d\n",totev); | |
180 | ||
181 | Int_t iRP[6]={0},iH[6]={0}; | |
182 | ||
183 | for(Int_t iev=0;iev<totev;iev++){ | |
184 | rl->GetEvent(iev); | |
185 | TTree *TR = ITSloader->TreeR(); | |
186 | TClonesArray *ITSrec = detTypeRec->RecPoints(); | |
187 | TBranch *branch = 0; | |
188 | if(TR && ITSrec){ | |
189 | branch = ITSloader->TreeR()->GetBranch("ITSRecPoints"); | |
190 | if(branch)branch->SetAddress(&ITSrec); | |
191 | } | |
192 | TTree *TH = ITSloader->TreeH(); | |
193 | TClonesArray *hits=new TClonesArray("AliITShit",10000); | |
194 | TH->SetBranchAddress("ITS",&hits); | |
195 | ||
196 | Int_t nparticles = rl->GetHeader()->GetNtrack(); | |
197 | cout<<"Event #"<<iev<<" #Particles="<<nparticles<<endl; | |
198 | ||
199 | ||
200 | Int_t ipt=0; | |
201 | for(Int_t subd=0;subd<3;subd++){ | |
202 | ||
203 | Int_t first = geom->GetStartDet(subd); | |
204 | Int_t last = geom->GetLastDet(subd); | |
205 | ||
206 | for (Int_t mod=first; mod<=last; mod++){ | |
207 | detTypeRec->ResetRecPoints(); | |
208 | branch->GetEvent(mod); | |
209 | Int_t nrecp = ITSrec->GetEntries(); | |
210 | if(nrecp>0){ | |
211 | for(Int_t irec=0;irec<nrecp;irec++) { | |
212 | AliITSRecPoint *recp = (AliITSRecPoint*)ITSrec->At(irec); | |
213 | Int_t lay=recp->GetLayer(); | |
214 | hlayer->Fill(lay); | |
215 | recp->GetGlobalXYZ(cluglo); | |
216 | Float_t rad=TMath::Sqrt(cluglo[0]*cluglo[0]+cluglo[1]*cluglo[1]); | |
217 | Float_t phi=TMath::ATan2(cluglo[1],cluglo[0]); | |
218 | if(iev<3){ | |
219 | gpts[iev]->SetPoint(ipt,cluglo[0],cluglo[1]); | |
220 | gpts3d[iev]->SetPoint(ipt,cluglo[0],cluglo[1],cluglo[2]); | |
221 | ipt++; | |
222 | } | |
223 | gRP[lay]->SetPoint(iRP[lay],cluglo[0],cluglo[1]); iRP[lay]++; | |
224 | hmod[lay]->Fill(mod); | |
225 | hzl[lay]->Fill(recp->GetDetLocalZ()); | |
226 | hxl[lay]->Fill(recp->GetDetLocalX()); | |
227 | hzg[lay]->Fill(cluglo[2]); | |
228 | hyg[lay]->Fill(cluglo[1]); | |
229 | hxyg[lay]->Fill(cluglo[0],cluglo[1]); | |
230 | hxg[lay]->Fill(cluglo[0]); | |
231 | hr[lay]->Fill(rad); | |
232 | hphi[lay]->Fill(phi); | |
233 | hq[lay]->Fill(recp->GetQ()); | |
234 | } | |
235 | } | |
236 | } | |
237 | } | |
238 | ||
239 | ||
240 | cout<<" Now read hits "<<endl; | |
241 | ||
242 | Int_t nentrHits=(Int_t)TH->GetEntries(); | |
243 | for (Int_t i=0; i<nentrHits; i++) { | |
244 | TH->GetEvent(i); | |
245 | Int_t nhit=hits->GetEntriesFast(); | |
246 | for (Int_t ih=0; ih<nhit; ih++) { | |
247 | AliITShit *h=(AliITShit*)hits->UncheckedAt(ih); | |
248 | if(h->StatusExiting()) { | |
249 | Double_t xl,yl,zl,tl,xl0,yl0,zl0,tl0; | |
250 | h->GetPositionL(xl,yl,zl,tl); | |
251 | h->GetPositionL0(xl0,yl0,zl0,tl0); | |
252 | //if(TMath::Abs(yl-yl0)<0.0290) continue; | |
253 | hxygHits[h->GetLayer()-1]->Fill(h->GetXG(),h->GetYG()); | |
254 | gHend[h->GetLayer()-1]->SetPoint(iH[h->GetLayer()-1],h->GetXG(),h->GetYG()); | |
255 | Double_t x0,y0,z0,t0; | |
256 | h->GetPositionG0(x0,y0,z0,t0); | |
257 | gHstart[h->GetLayer()-1]->SetPoint(iH[h->GetLayer()-1],x0,y0); | |
258 | iH[h->GetLayer()-1]++; | |
259 | //printf("layer %d hit length xy %f hit length yl %f\n",h->GetLayer()-1,TMath::Sqrt((x0-h->GetXG())*(x0-h->GetXG())+(y0-h->GetYG())*(y0-h->GetYG())),TMath::Abs(yl-yl0)); | |
260 | } | |
261 | } | |
262 | } | |
263 | } | |
264 | ||
265 | ||
266 | TCanvas **c=new TCanvas*[6]; | |
267 | Char_t ctit[30]; | |
268 | for(Int_t iLay=0;iLay<6;iLay++){ | |
269 | sprintf(name,"can%d",iLay+1); | |
270 | sprintf(ctit,"Layer %d",iLay+1); | |
271 | c[iLay]=new TCanvas(name,ctit,1200,900); | |
272 | c[iLay]->Divide(3,3,0.001,0.001); | |
273 | c[iLay]->cd(1); | |
274 | hmod[iLay]->Draw(); | |
275 | c[iLay]->cd(2); | |
276 | hxl[iLay]->Draw(); | |
277 | c[iLay]->cd(3); | |
278 | hzl[iLay]->Draw(); | |
279 | c[iLay]->cd(4); | |
280 | hxg[iLay]->Draw(); | |
281 | c[iLay]->cd(5); | |
282 | hyg[iLay]->Draw(); | |
283 | c[iLay]->cd(6); | |
284 | hzg[iLay]->Draw(); | |
285 | c[iLay]->cd(7); | |
286 | hr[iLay]->Draw(); | |
287 | c[iLay]->cd(8); | |
288 | hphi[iLay]->Draw(); | |
289 | c[iLay]->cd(9); | |
290 | hxyg[iLay]->Draw(); | |
291 | } | |
292 | ||
293 | TCanvas *cev0; | |
294 | cev0=new TCanvas("cev0","Event 0",600,600); | |
295 | gpts[0]->SetMarkerStyle(7); | |
296 | gpts[0]->SetTitle(0); | |
297 | gpts[0]->Draw("AP"); | |
298 | ||
299 | TCanvas *cev1; | |
300 | cev1=new TCanvas("cev1","Event 1",600,600); | |
301 | gpts[1]->SetMarkerStyle(7); | |
302 | gpts[1]->SetTitle(0); | |
303 | gpts[1]->Draw("AP"); | |
304 | ||
305 | TCanvas *cev2; | |
306 | cev2=new TCanvas("cev2","Event 2",600,600); | |
307 | gpts[2]->SetMarkerStyle(7); | |
308 | gpts[2]->SetTitle(0); | |
309 | gpts[2]->Draw("AP"); | |
310 | ||
311 | TCanvas *chr = new TCanvas("chr","chr"); | |
312 | chr->Divide(3,2); | |
313 | for(Int_t i=0;i<6;i++) { | |
314 | chr->cd(i+1); | |
315 | gHend[i]->SetMarkerStyle(7); | |
316 | gHend[i]->SetMarkerColor(1); | |
317 | gHend[i]->Draw("A,P"); | |
318 | gHstart[i]->SetMarkerStyle(7); | |
319 | gHstart[i]->SetMarkerColor(4); | |
320 | gHstart[i]->Draw("P"); | |
321 | gRP[i]->SetMarkerStyle(7); | |
322 | gRP[i]->SetMarkerColor(2); | |
323 | gRP[i]->Draw("P"); | |
324 | } | |
325 | ||
326 | ||
327 | return 0; | |
328 | } | |
329 | ||
330 | ||
00fe805a | 331 | Int_t ShowITSHitsRecPointsNtuple(Bool_t align=kFALSE, |
3fd01708 | 332 | TString alignfile="ITSfullv11Misalignment.root") |
333 | { | |
334 | /////////////////////////////////////////////////////////////////////// | |
335 | // Macro to check clusters and hits in the 6 ITS layers // | |
336 | // Creates also ntuple // | |
337 | /////////////////////////////////////////////////////////////////////// | |
338 | ||
339 | if (gClassTable->GetID("AliRun") < 0) { | |
340 | gInterpreter->ExecuteMacro("loadlibs.C"); | |
341 | } | |
342 | else { | |
343 | if(gAlice){ | |
33c3c91a | 344 | delete AliRunLoader::Instance(); |
3fd01708 | 345 | delete gAlice; |
346 | gAlice=0; | |
347 | } | |
348 | } | |
349 | // Set OCDB if needed | |
350 | AliCDBManager* man = AliCDBManager::Instance(); | |
351 | if (!man->IsDefaultStorageSet()) { | |
352 | printf("Setting a local default storage and run number 0\n"); | |
162637e4 | 353 | man->SetDefaultStorage("local://$ALICE_ROOT/OCDB"); |
3fd01708 | 354 | man->SetRun(0); |
355 | } | |
356 | else { | |
357 | printf("Using deafult storage \n"); | |
358 | } | |
359 | ||
360 | // retrives geometry | |
361 | if(!gGeoManager){ | |
362 | AliGeomManager::LoadGeometry("geometry.root"); | |
363 | } | |
364 | if(align) { | |
365 | TFile f(alignfile.Data()); | |
366 | TClonesArray* ar = (TClonesArray*)f.Get("ITSAlignObjs"); | |
367 | AliGeomManager::ApplyAlignObjsToGeom(*ar); | |
368 | f.Close(); | |
443c185f | 369 | } else { |
370 | AliGeomManager::ApplyAlignObjsFromCDB("ITS"); | |
3fd01708 | 371 | } |
372 | ||
443c185f | 373 | |
3fd01708 | 374 | AliRunLoader* rl = AliRunLoader::Open("galice.root"); |
375 | if (rl == 0x0){ | |
376 | cerr<<"Can not open session RL=NULL"<< endl; | |
377 | return -1; | |
378 | } | |
379 | Int_t retval = rl->LoadgAlice(); | |
380 | if (retval){ | |
381 | cerr<<"LoadgAlice returned error"<<endl; | |
382 | return -1; | |
383 | } | |
384 | gAlice=rl->GetAliRun(); | |
385 | ||
386 | retval = rl->LoadHeader(); | |
387 | if (retval){ | |
388 | cerr<<"LoadHeader returned error"<<endl; | |
389 | return -1; | |
390 | } | |
391 | ||
392 | ||
393 | AliITSLoader* ITSloader = (AliITSLoader*) rl->GetLoader("ITSLoader"); | |
394 | if(!ITSloader){ | |
395 | cerr<<"ITS loader not found"<<endl; | |
396 | return -1; | |
397 | } | |
398 | ITSloader->LoadRecPoints("read"); | |
399 | ITSloader->LoadHits("read"); | |
400 | ||
401 | ||
402 | Float_t cluglo[3]={0.,0.,0.}; | |
403 | AliITS *ITS = (AliITS*)gAlice->GetModule("ITS"); | |
404 | ITS->SetTreeAddress(); | |
405 | AliITSgeom *geom = ITS->GetITSgeom(); | |
406 | AliITSDetTypeRec* detTypeRec = new AliITSDetTypeRec(); | |
407 | detTypeRec->SetITSgeom(ITSloader->GetITSgeom()); | |
408 | detTypeRec->SetDefaults(); | |
409 | ||
410 | Int_t modmin=geom->GetStartDet(0); | |
411 | Int_t modmax=geom->GetLastDet(2); | |
412 | Int_t totmod=modmax-modmin; | |
413 | Float_t xlim[6]={4.5,7.5,16.,26.,40.,45.}; | |
414 | Float_t zlim[6]={15.,15.,22.,30.,45.,55.}; | |
415 | ||
416 | TH1F* hlayer=new TH1F("hlayer","",6,0.5,6.5); | |
417 | TH1F** hmod=new TH1F*[6]; | |
418 | TH1F** hxl=new TH1F*[6]; | |
419 | TH1F** hzl=new TH1F*[6]; | |
420 | TH1F** hxg=new TH1F*[6]; | |
421 | TH1F** hyg=new TH1F*[6]; | |
422 | TH2F** hxyg=new TH2F*[6]; | |
423 | TH2F** hxygHits=new TH2F*[6]; | |
424 | TH1F** hzg=new TH1F*[6]; | |
425 | TH1F** hr=new TH1F*[6]; | |
426 | TH1F** hphi=new TH1F*[6]; | |
427 | TH1F** hq=new TH1F*[6]; | |
428 | ||
429 | Char_t name[10]; | |
430 | for(Int_t iLay=0;iLay<6;iLay++){ | |
431 | sprintf(name,"hmod%d",iLay+1); | |
432 | hmod[iLay]=new TH1F(name,"",totmod,modmin-0.5,modmax+0.5); | |
433 | hmod[iLay]->GetXaxis()->SetTitle("Module"); | |
434 | hmod[iLay]->GetXaxis()->CenterTitle(); | |
435 | sprintf(name,"hxloc%d",iLay+1); | |
436 | hxl[iLay]=new TH1F(name,"",100,-4.,4.); | |
437 | hxl[iLay]->GetXaxis()->SetTitle("Xloc (cm)"); | |
438 | hxl[iLay]->GetXaxis()->CenterTitle(); | |
439 | sprintf(name,"hzloc%d",iLay+1); | |
440 | hzl[iLay]=new TH1F(name,"",100,-4.,4.); | |
441 | hzl[iLay]->GetXaxis()->SetTitle("Zloc (cm)"); | |
442 | hzl[iLay]->GetXaxis()->CenterTitle(); | |
443 | sprintf(name,"hxgl%d",iLay+1); | |
444 | hxg[iLay]=new TH1F(name,"",100,-xlim[iLay],xlim[iLay]); | |
445 | hxg[iLay]->GetXaxis()->SetTitle("Xglob (cm)"); | |
446 | hxg[iLay]->GetXaxis()->CenterTitle(); | |
447 | sprintf(name,"hygl%d",iLay+1); | |
448 | hyg[iLay]=new TH1F(name,"",100,-xlim[iLay],xlim[iLay]); | |
449 | hyg[iLay]->GetXaxis()->SetTitle("Yglob (cm)"); | |
450 | hyg[iLay]->GetXaxis()->CenterTitle(); | |
451 | sprintf(name,"hxygl%d",iLay+1); | |
452 | hxyg[iLay]=new TH2F(name,"",1000,-xlim[iLay],xlim[iLay],1000,-xlim[iLay],xlim[iLay]); | |
453 | hxyg[iLay]->GetXaxis()->SetTitle("Xglob (cm)"); | |
454 | hxyg[iLay]->GetYaxis()->SetTitle("Yglob (cm)"); | |
455 | sprintf(name,"hxygHitsl%d",iLay+1); | |
456 | hxygHits[iLay]=new TH2F(name,"",1000,-xlim[iLay],xlim[iLay],1000,-xlim[iLay],xlim[iLay]); | |
457 | sprintf(name,"hzgl%d",iLay+1); | |
458 | hzg[iLay]=new TH1F(name,"",100,-zlim[iLay],zlim[iLay]); | |
459 | hzg[iLay]->GetXaxis()->SetTitle("Zglob (cm)"); | |
460 | hzg[iLay]->GetXaxis()->CenterTitle(); | |
461 | sprintf(name,"hr%d",iLay+1); | |
462 | hr[iLay]=new TH1F(name,"",100,0.,50.); | |
463 | hr[iLay]->GetXaxis()->SetTitle("r (cm)"); | |
464 | hr[iLay]->GetXaxis()->CenterTitle(); | |
465 | sprintf(name,"hphi%d",iLay+1); | |
466 | hphi[iLay]=new TH1F(name,"",100,-TMath::Pi(),TMath::Pi()); | |
467 | hphi[iLay]->GetXaxis()->SetTitle("#varphi (rad)"); | |
468 | hphi[iLay]->GetXaxis()->CenterTitle(); | |
469 | sprintf(name,"hq%d",iLay+1); | |
470 | hq[iLay]=new TH1F(name,"",100,0.,300.); | |
471 | hq[iLay]->GetXaxis()->SetTitle("Charge (keV)"); | |
472 | hq[iLay]->GetXaxis()->CenterTitle(); | |
473 | } | |
474 | ||
475 | TGraph **gpts=new TGraph*[3]; | |
476 | TGraph2D **gpts3d=new TGraph2D*[3]; | |
477 | TGraph **gRP=new TGraph*[6]; | |
478 | TGraph **gHend=new TGraph*[6]; | |
479 | TGraph **gHstart=new TGraph*[6]; | |
480 | for(Int_t i=0;i<3;i++){ | |
481 | gpts[i]=new TGraph(0); | |
482 | gpts3d[i]=new TGraph2D(0); | |
483 | } | |
484 | for(Int_t i=0;i<6;i++){ | |
485 | gRP[i]=new TGraph(0); | |
486 | gRP[i]->GetXaxis()->SetTitle("global x [cm]"); | |
487 | gRP[i]->GetYaxis()->SetTitle("global y [cm]"); | |
488 | gHend[i]=new TGraph(0); | |
489 | gHstart[i]=new TGraph(0); | |
490 | } | |
491 | Int_t totev=rl->GetNumberOfEvents(); | |
492 | printf("Total Number of events = %d\n",totev); | |
493 | ||
494 | Int_t iRP[6]={0},iH[6]={0}; | |
495 | ||
496 | TNtuple *nt = new TNtuple("nt","ntuple","lay:mod:deltaxl:deltax:deltay:deltaz:phi:z:xl:hlength"); | |
497 | ||
498 | for(Int_t iev=0;iev<totev;iev++){ | |
499 | rl->GetEvent(iev); | |
500 | TTree *TR = ITSloader->TreeR(); | |
501 | TClonesArray *ITSrec = detTypeRec->RecPoints(); | |
502 | TBranch *branch = 0; | |
503 | if(TR && ITSrec){ | |
504 | branch = ITSloader->TreeR()->GetBranch("ITSRecPoints"); | |
505 | if(branch)branch->SetAddress(&ITSrec); | |
506 | } | |
507 | TTree *TH = ITSloader->TreeH(); | |
508 | TClonesArray *hits=new TClonesArray("AliITShit",10000); | |
509 | TH->SetBranchAddress("ITS",&hits); | |
510 | ||
511 | Int_t nparticles = rl->GetHeader()->GetNtrack(); | |
512 | cout<<"Event #"<<iev<<" #Particles="<<nparticles<<endl; | |
513 | ||
514 | ||
515 | Int_t ipt=0; | |
516 | for(Int_t subd=0;subd<3;subd++){ | |
517 | ||
518 | Int_t first = geom->GetStartDet(subd); | |
519 | Int_t last = geom->GetLastDet(subd); | |
520 | ||
521 | for (Int_t mod=first; mod<=last; mod++){ | |
522 | detTypeRec->ResetRecPoints(); | |
523 | branch->GetEvent(mod); | |
524 | Int_t nrecp = ITSrec->GetEntries(); | |
525 | if(nrecp>0){ | |
526 | for(Int_t irec=0;irec<nrecp;irec++) { | |
527 | AliITSRecPoint *recp = (AliITSRecPoint*)ITSrec->At(irec); | |
528 | Int_t lay=recp->GetLayer(); | |
529 | hlayer->Fill(lay); | |
530 | recp->GetGlobalXYZ(cluglo); | |
531 | Float_t rad=TMath::Sqrt(cluglo[0]*cluglo[0]+cluglo[1]*cluglo[1]); | |
532 | Float_t phi=TMath::ATan2(cluglo[1],cluglo[0]); | |
533 | if(cluglo[2]>0) {gRP[lay]->SetPoint(iRP[lay],cluglo[0],cluglo[1]); iRP[lay]++;} | |
534 | hmod[lay]->Fill(mod); | |
535 | hzl[lay]->Fill(recp->GetDetLocalZ()); | |
536 | hxl[lay]->Fill(recp->GetDetLocalX()); | |
537 | hzg[lay]->Fill(cluglo[2]); | |
538 | hyg[lay]->Fill(cluglo[1]); | |
539 | hxyg[lay]->Fill(cluglo[0],cluglo[1]); | |
540 | hxg[lay]->Fill(cluglo[0]); | |
541 | hr[lay]->Fill(rad); | |
542 | hphi[lay]->Fill(phi); | |
543 | hq[lay]->Fill(recp->GetQ()); | |
544 | ||
545 | Double_t hlength=0.; | |
546 | for(Int_t jhits=0;jhits<TH->GetEntries();jhits++) { | |
547 | TH->GetEvent(jhits); | |
548 | Int_t nhit=hits->GetEntriesFast(); | |
549 | for (Int_t ih=0; ih<nhit; ih++) { | |
550 | AliITShit *h=(AliITShit*)hits->UncheckedAt(ih); | |
551 | if(h->GetTrack()!=recp->GetLabel(0)) continue; | |
552 | if(h->GetLayer()-1!=lay) continue; | |
553 | if(h->GetModule()!=mod) continue; | |
554 | //hxygHits[h->GetLayer()-1]->Fill(h->GetXG(),h->GetYG()); | |
555 | //gHend[h->GetLayer()-1]->SetPoint(iH[h->GetLayer()-1],h->GetXG(),h->GetYG()); | |
556 | Double_t x0,y0,z0,t0; | |
557 | Double_t x,y,z,t; | |
558 | h->GetPositionG0(x0,y0,z0,t0); | |
559 | h->GetPositionG(x,y,z,t); | |
560 | //gHstart[h->GetLayer()-1]->SetPoint(iH[h->GetLayer()-1],x0,y0); | |
561 | //iH[h->GetLayer()-1]++; | |
562 | Double_t xl,yl,zl,tl,xl0,yl0,zl0,tl0; | |
563 | h->GetPositionL(xl,yl,zl,tl); | |
564 | h->GetPositionL0(xl0,yl0,zl0,tl0); | |
565 | hlength += TMath::Abs(yl-yl0); | |
566 | if(!h->StatusExiting()) continue; | |
567 | nt->Fill(lay, | |
568 | mod, | |
569 | 1.e4*(0.5*(xl+xl0)-recp->GetDetLocalX()), | |
570 | 1.e4*(0.5*(x+x0)-cluglo[0]),1.e4*(0.5*(y+y0)-cluglo[1]), | |
571 | 1.e4*(0.5*(z+z0)-cluglo[2]), | |
572 | phi, | |
573 | cluglo[2], | |
574 | recp->GetDetLocalX(), | |
575 | hlength); | |
576 | hlength = 0.; | |
577 | } | |
578 | } | |
579 | ||
580 | ||
581 | } | |
582 | } | |
583 | } | |
584 | } | |
585 | ||
586 | ||
587 | } | |
588 | ||
589 | ||
590 | TCanvas **c=new TCanvas*[6]; | |
591 | Char_t ctit[30]; | |
592 | for(Int_t iLay=0;iLay<6;iLay++){ | |
593 | sprintf(name,"can%d",iLay+1); | |
594 | sprintf(ctit,"Layer %d",iLay+1); | |
595 | c[iLay]=new TCanvas(name,ctit,1200,900); | |
596 | c[iLay]->Divide(3,3,0.001,0.001); | |
597 | c[iLay]->cd(1); | |
598 | hmod[iLay]->Draw(); | |
599 | c[iLay]->cd(2); | |
600 | hxl[iLay]->Draw(); | |
601 | c[iLay]->cd(3); | |
602 | hzl[iLay]->Draw(); | |
603 | c[iLay]->cd(4); | |
604 | hxg[iLay]->Draw(); | |
605 | c[iLay]->cd(5); | |
606 | hyg[iLay]->Draw(); | |
607 | c[iLay]->cd(6); | |
608 | hzg[iLay]->Draw(); | |
609 | c[iLay]->cd(7); | |
610 | hr[iLay]->Draw(); | |
611 | c[iLay]->cd(8); | |
612 | hphi[iLay]->Draw(); | |
613 | c[iLay]->cd(9); | |
614 | hxyg[iLay]->Draw(); | |
615 | } | |
616 | ||
617 | TCanvas *cev0; | |
618 | cev0=new TCanvas("cev0","Event 0",600,600); | |
619 | gpts[0]->SetMarkerStyle(7); | |
620 | gpts[0]->SetTitle(0); | |
621 | gpts[0]->Draw("AP"); | |
622 | ||
623 | TCanvas *cev1; | |
624 | cev1=new TCanvas("cev1","Event 1",600,600); | |
625 | gpts[1]->SetMarkerStyle(7); | |
626 | gpts[1]->SetTitle(0); | |
627 | gpts[1]->Draw("AP"); | |
628 | ||
629 | TCanvas *cev2; | |
630 | cev2=new TCanvas("cev2","Event 2",600,600); | |
631 | gpts[2]->SetMarkerStyle(7); | |
632 | gpts[2]->SetTitle(0); | |
633 | gpts[2]->Draw("AP"); | |
634 | ||
635 | TFile *out= new TFile("ntHitsRecPoints.root","recreate"); | |
636 | nt->Write(); | |
637 | out->Close(); | |
638 | ||
639 | return 0; | |
640 | } |