]>
Commit | Line | Data |
---|---|---|
89cc6a31 | 1 | void ZDCtest (Int_t detector=0, Int_t evTot = 0) |
2 | { | |
3 | delete gAlice; | |
4 | gAlice=0; | |
5 | // Dynamically link some shared libs | |
6 | if (gClassTable->GetID("AliRun") < 0) { | |
7 | gROOT->LoadMacro("loadlibs.C"); | |
8 | loadlibs(); | |
9 | } | |
10 | ||
11 | // Connect the Root Galice file containing Geometry, Kine, Hits and Digits | |
5a881c97 | 12 | TFile *file = (TFile*)gROOT->GetListOfFiles()->FindObject("galice.root"); |
89cc6a31 | 13 | if (!file) { |
14 | printf("\n Creating galice.root \n"); | |
5a881c97 | 15 | file = new TFile("galice.root"); |
89cc6a31 | 16 | } else { |
17 | printf("\n galice.root found in file list"); | |
18 | } | |
19 | file->ls(); | |
20 | ||
21 | // Get AliRun object from file or create it if not on file | |
22 | if (!gAlice) { | |
23 | gAlice = (AliRun*)file->Get("gAlice"); | |
24 | if (gAlice) printf("AliRun object found on file\n"); | |
25 | if (!gAlice) { | |
26 | printf("\n create new gAlice object"); | |
27 | gAlice = new AliRun("gAlice","Alice test program"); | |
28 | } | |
29 | } | |
30 | file->ls(); | |
31 | ||
32 | // Create some histograms | |
33 | ||
34 | TH2F *hspotzn = new TH2F("hspotzn","Y vs X on ZN front face",100,-4.,4.,100,-4.,4.); | |
35 | hspotzn -> SetXTitle("X on ZN"); | |
36 | hspotzn -> SetYTitle("Y on ZN"); | |
37 | TH2F *hspotzp = new TH2F("hspotzp","Y vs X on ZP front face",100,-12.,12.,100,-12.,12.); | |
38 | hspotzp -> SetXTitle("X on ZP"); | |
39 | hspotzp -> SetYTitle("Y on ZP"); | |
40 | TH2F *hspotzem = new TH2F("hspotzem","Y vs X on ZEM front face",100,-4.,4.,100,-4.,4.); | |
41 | hspotzem -> SetXTitle("X on ZEM"); | |
42 | hspotzem -> SetYTitle("Y on ZEM"); | |
43 | ||
44 | TH1F *hEzn = new TH1F("hEzn","Energy deposited in ZN",100,0,4.e3); | |
45 | hEzn -> SetXTitle("E (GeV)"); | |
46 | TH1F *hLzn = new TH1F("hLzn", "Total light in ZN ",100,0,4.e3); | |
47 | hLzn -> SetXTitle("phe"); | |
48 | TH1F *hPMCzn = new TH1F("hPMCzn", "Light in common PM ",100,0,1.e3); | |
49 | hPMCzn -> SetXTitle("phe"); | |
50 | TH1F *hPMQ1zn = new TH1F("hPMQ1zn","Light in quadrant 1 PM",100,0,1.e3); | |
51 | hPMQ1zn -> SetXTitle("phe"); | |
52 | TH1F *hPMQ2zn = new TH1F("hPMQ2zn","Light in quadrant 2 PM",100,0,1.e3); | |
53 | hPMQ2zn -> SetXTitle("phe"); | |
54 | TH1F *hPMQ3zn = new TH1F("hPMQ3zn","Light in quadrant 3 PM",100,0,1.e3); | |
55 | hPMQ3zn -> SetXTitle("phe"); | |
56 | TH1F *hPMQ4zn = new TH1F("hPMQ4zn","Light in quadrant 4 PM",100,0,1.e3); | |
57 | hPMQ4zn -> SetXTitle("phe"); | |
58 | ||
59 | TH1F *hEzp = new TH1F("hEzp","Energy deposited in ZP",100,0,4.e3); | |
60 | hEzp -> SetXTitle("E (GeV)"); | |
61 | TH1F *hLzp = new TH1F("hLzp", "Total light in ZP ",100,0,4.e3); | |
62 | hLzp -> SetXTitle("phe"); | |
63 | TH1F *hPMCzp = new TH1F("hPMCzp","Light in common PM ",100,0,1.e3); | |
64 | hPMCzp -> SetXTitle("phe"); | |
65 | TH1F *hPMQ1zp = new TH1F("hPMQ1zp","Light in quadrant 1 PM",100,0,1.e3); | |
66 | hPMQ1zp -> SetXTitle("phe"); | |
67 | TH1F *hPMQ2zp = new TH1F("hPMQ2zp","Light in quadrant 2 PM",100,0,1.e3); | |
68 | hPMQ2zp -> SetXTitle("phe"); | |
69 | TH1F *hPMQ3zp = new TH1F("hPMQ3zp","Light in quadrant 3 PM",100,0,1.e3); | |
70 | hPMQ3zp -> SetXTitle("phe"); | |
71 | TH1F *hPMQ4zp = new TH1F("hPMQ4zp","Light in quadrant 4 PM",100,0,1.e3); | |
72 | hPMQ4zp -> SetXTitle("phe"); | |
73 | ||
74 | ||
5a881c97 | 75 | TH1F *hEzem = new TH1F("hEzem","Energy deposited in ZEM",100,0,5.e3); |
89cc6a31 | 76 | hEzem -> SetXTitle("E (GeV)"); |
5a881c97 | 77 | TH1F *hPMzem = new TH1F("hPMzem","Light produced in ZEM PM",100,0,5.e3); |
89cc6a31 | 78 | hPMzem -> SetXTitle("phe"); |
79 | ||
80 | // | |
81 | ||
82 | TH1F *dPMCzn = new TH1F("dPMCzn","Common PM ",100,0,1.e3); | |
83 | dPMCzn -> SetXTitle("ADC channels"); | |
84 | TH1F *dPMQ1zn = new TH1F("dPMQ1zn","Quadrant 1 PM",100,0,1.e3); | |
85 | dPMQ1zn -> SetXTitle("ADC channels"); | |
86 | TH1F *dPMQ2zn = new TH1F("dPMQ2zn","Quadrant 2 PM",100,0,1.e3); | |
87 | dPMQ2zn -> SetXTitle("ADC channels"); | |
88 | TH1F *dPMQ3zn = new TH1F("dPMQ3zn","Quadrant 3 PM",100,0,1.e3); | |
89 | dPMQ3zn -> SetXTitle("ADC channels"); | |
90 | TH1F *dPMQ4zn = new TH1F("dPMQ4zn","Quadrant 4 PM",100,0,1.e3); | |
91 | dPMQ4zn -> SetXTitle("ADC channels"); | |
92 | TH1F *dZN = new TH1F("dZN","Total light in ZN",100,0,1.e3); | |
93 | dZN -> SetXTitle("ADC channels"); | |
94 | ||
95 | TH1F *dPMCzp = new TH1F("dPMCzp","Common PM ",100,0,1.e3); | |
96 | dPMCzp -> SetXTitle("ADC channels"); | |
97 | TH1F *dPMQ1zp = new TH1F("dPMQ1zp","Quadrant 1 PM",100,0,1.e3); | |
98 | dPMQ1zp -> SetXTitle("ADC channels"); | |
99 | TH1F *dPMQ2zp = new TH1F("dPMQ2zp","Quadrant 2 PM",100,0,1.e3); | |
100 | dPMQ2zp -> SetXTitle("ADC channels"); | |
101 | TH1F *dPMQ3zp = new TH1F("dPMQ3zp","Quadrant 3 PM",100,0,1.e3); | |
102 | dPMQ3zp -> SetXTitle("ADC channels"); | |
103 | TH1F *dPMQ4zp = new TH1F("dPMQ4zp","Quadrant 4 PM",100,0,1.e3); | |
104 | dPMQ4zp -> SetXTitle("ADC channels"); | |
105 | TH1F *dZP = new TH1F("dZP","Total light in ZP",100,0,1.e3); | |
106 | dZP -> SetXTitle("ADC channels"); | |
107 | ||
108 | TH1F *dZEM = new TH1F("dZEM","Total light in ZEM",100,0,1.e3); | |
109 | dZEM -> SetXTitle("ADC channels"); | |
110 | ||
111 | // | |
112 | // Loop over events | |
113 | // | |
5a881c97 | 114 | // NB -> Il TClonesArray delle particelle va inizializzato prima del loop |
115 | TParticle *particle; | |
116 | TClonesArray *Particles = gAlice->Particles(); | |
89cc6a31 | 117 | |
118 | for (Int_t evNumber=0; evNumber<evTot; evNumber++){ | |
119 | ||
120 | // Import the Kine and Hits Trees for the event evNumber in the file | |
121 | Int_t nparticles = gAlice->GetEvent(evNumber); | |
122 | if (nparticles <= 0) return; | |
123 | printf("\n --- nparticles = %d\n",nparticles); | |
124 | ||
125 | Float_t energy, EtotZN=0, EtotZP=0, LightCzn=0, LightCzp=0, LtotZN=0, LtotZP=0; | |
126 | Int_t nbytes=0, nbytesd=0, ipart, nhits, ndigits, pdgcode, ADCzn, ADCzp; | |
89cc6a31 | 127 | AliZDCHit *ZDChit; |
128 | AliZDCDigit *ZDCdigit; | |
129 | ||
130 | // Get pointers to Alice detectors and Hits containers | |
131 | AliDetector *ZDC = gAlice->GetDetector("ZDC"); | |
89cc6a31 | 132 | if (ZDC) { |
133 | TClonesArray *ZDChits = ZDC->Hits(); | |
5a881c97 | 134 | // TClonesArray *ZDCdigits = ZDC->Digits(); |
89cc6a31 | 135 | } |
136 | ||
137 | // # of entries in Hits tree | |
138 | TTree *TH = gAlice->TreeH(); | |
139 | Int_t ntracks = TH->GetEntries(); | |
140 | ||
141 | // # of entries in Digits tree | |
5a881c97 | 142 | // TTree *TD = gAlice->TreeD(); |
143 | // Int_t ndigen = TD->GetEntries(); | |
144 | ||
145 | // gAlice->ResetDigits(); | |
146 | // nbytesd += TD->GetEvent(ndigen-1); | |
147 | ||
148 | // if (ZDC) { | |
149 | // ndigits = ZDCdigits->GetEntries(); | |
150 | // printf("\n Digits Tree --- # of entries: %d; # of digits: %d\n",ndigen, ndigits); | |
151 | // } | |
152 | // for(Int_t digit=0; digit<ndigits; digit++) { | |
153 | // ZDCdigit = (AliZDCDigit*)ZDCdigits->UncheckedAt(digit); | |
154 | // printf("\n Digit# %d, fDetector = %d, fVolume = %d, fADCValue = %f\n", | |
155 | // digit,ZDCdigit->fDetector,ZDCdigit->fQuadrant,ZDCdigit->fADCValue); | |
156 | // } | |
89cc6a31 | 157 | |
158 | // Start loop on tracks in the hits containers | |
159 | for (Int_t track=0; track<ntracks; track++) { | |
160 | gAlice->ResetHits(); | |
161 | nbytes += TH->GetEvent(track); | |
162 | ||
163 | if (ZDC) { | |
164 | // nhits = ZDChits->GetEntries(); | |
165 | // nhits = ZDChits->GetLast()+1; | |
166 | nhits = ZDChits->GetEntriesFast(); | |
167 | // printf("\n Hits Tree --- Event %d track %d nhits %d\n",evNumber,track,nhits); | |
168 | ||
169 | particle = (TParticle*)Particles->UncheckedAt(track); | |
170 | // pdgcode = particle->GetPdgCode(); | |
171 | // printf("\nParticle %d\n",pdgcode); | |
172 | ||
173 | for(Int_t hit=0; hit<nhits; hit++) { | |
174 | ZDChit = (AliZDCHit*)ZDChits->UncheckedAt(hit); | |
175 | ||
176 | // Print of the hits | |
177 | // printf("\nHit # %d, fVolume = %d %d\n",hit,ZDChit->fVolume[0],ZDChit->fVolume[1]); | |
178 | // printf("Primary energy = %f, Secondary Flag = %d\n",ZDChit->fPrimKinEn,ZDChit->fSFlag); | |
179 | // printf("Impact point -> %f %f\n",ZDChit->fXImpact,ZDChit->fYImpact); | |
180 | // printf("Energy = %f, Light in quadrant = %f, Light in common PM = %f\n\n", | |
181 | // ZDChit->fEnergy,ZDChit->fLightPMQ,ZDChit->fLightPMC); | |
182 | ||
183 | // Filling histos | |
184 | if(ZDChit->fVolume[0]==1) { //ZN | |
185 | if(ZDChit->fVolume[1]==1)hPMQ1zn->Fill(ZDChit->fLightPMQ); | |
186 | if(ZDChit->fVolume[1]==2)hPMQ2zn->Fill(ZDChit->fLightPMQ); | |
187 | if(ZDChit->fVolume[1]==3)hPMQ3zn->Fill(ZDChit->fLightPMQ); | |
188 | if(ZDChit->fVolume[1]==4)hPMQ4zn->Fill(ZDChit->fLightPMQ); | |
189 | EtotZN += ZDChit->fEnergy; | |
190 | LtotZN += (ZDChit->fLightPMQ) + (ZDChit->fLightPMC); | |
191 | LightCzn += ZDChit->fLightPMC; | |
192 | hspotzn->Fill(ZDChit->fXImpact,ZDChit->fYImpact); | |
193 | } | |
194 | if(ZDChit->fVolume[0]==2) { //ZP | |
195 | if(ZDChit->fVolume[1]==1)hPMQ1zp->Fill(ZDChit->fLightPMQ); | |
196 | if(ZDChit->fVolume[1]==2)hPMQ2zp->Fill(ZDChit->fLightPMQ); | |
197 | if(ZDChit->fVolume[1]==3)hPMQ3zp->Fill(ZDChit->fLightPMQ); | |
198 | if(ZDChit->fVolume[1]==4)hPMQ4zp->Fill(ZDChit->fLightPMQ); | |
199 | EtotZP += ZDChit->fEnergy; | |
200 | LtotZP += (ZDChit->fLightPMQ) + (ZDChit->fLightPMC); | |
201 | LightCzp += ZDChit->fLightPMC; | |
202 | hspotzp->Fill(ZDChit->fXImpact,ZDChit->fYImpact); | |
203 | } | |
204 | if(ZDChit->fVolume[0]==3) { //ZEM | |
205 | hEzem->Fill(ZDChit->fEnergy); | |
5a881c97 | 206 | hPMzem->Fill(ZDChit->fLightPMC); |
89cc6a31 | 207 | hspotzem->Fill(ZDChit->fXImpact,ZDChit->fYImpact); |
208 | } | |
209 | ||
210 | } | |
211 | if(nhits!=0){ | |
212 | hEzn->Fill(EtotZN); | |
213 | hLzn->Fill(LtotZN); | |
214 | hPMCzn->Fill(LightCzn); | |
215 | hEzp->Fill(EtotZP); | |
216 | hLzp->Fill(LtotZP); | |
217 | hPMCzp->Fill(LightCzp); | |
5a881c97 | 218 | // printf("\n Histos var -> Ezn = %f, Lzn = %f, Ezp = %f, Lzp = %f \n\n", |
219 | // EtotZN, LtotZN, EtotZP, LtotZP); | |
89cc6a31 | 220 | } |
221 | }//ZDC | |
222 | }//Track loop | |
223 | }//Hit loop | |
224 | ||
225 | // Control prints | |
226 | ||
227 | ||
228 | if(detector == 1){ // ZN histos | |
229 | TCanvas *c1 = new TCanvas("c1","ZN hits",0,10,580,700); | |
230 | c1->cd(); | |
231 | TPad *pad1= new TPad("pad1"," ",0.01,0.51,0.99,0.99); | |
232 | TPad *pad2= new TPad("pad2"," ",0.01,0.01,0.49,0.49); | |
233 | TPad *pad3= new TPad("pad3"," ",0.51,0.01,0.99,0.49); | |
234 | pad1->SetFillColor(18); | |
235 | pad2->SetFillColor(18); | |
236 | pad3->SetFillColor(18); | |
237 | pad1->Draw(); | |
238 | pad2->Draw(); | |
239 | pad3->Draw(); | |
240 | pad1->cd(); | |
241 | hspotzn->Draw(); | |
242 | pad2->cd(); | |
243 | hEzn->Draw(); | |
244 | pad3->cd(); | |
245 | hPMCzn->Draw(); | |
246 | ||
247 | TCanvas *c2 = new TCanvas("c2","ZN hits",600,10,600,700); | |
248 | c2->cd(); | |
249 | TPad *pad4= new TPad("pad4"," ",0.01,0.51,0.49,0.99); | |
250 | TPad *pad5= new TPad("pad5"," ",0.51,0.51,0.99,0.99); | |
251 | TPad *pad6= new TPad("pad6"," ",0.01,0.01,0.49,0.49); | |
252 | TPad *pad7= new TPad("pad7"," ",0.51,0.01,0.99,0.49); | |
253 | pad4->SetFillColor(18); | |
254 | pad5->SetFillColor(18); | |
255 | pad6->SetFillColor(18); | |
256 | pad7->SetFillColor(18); | |
257 | pad4->Draw(); | |
258 | pad5->Draw(); | |
259 | pad6->Draw(); | |
260 | pad7->Draw(); | |
261 | pad4->cd(); | |
262 | hPMQ1zn->Draw(); | |
263 | pad5->cd(); | |
264 | hPMQ2zn->Draw(); | |
265 | pad6->cd(); | |
266 | hPMQ3zn->Draw(); | |
267 | pad7->cd(); | |
268 | hPMQ4zn->Draw(); | |
269 | ||
270 | TCanvas *c3 = new TCanvas("c3","ZN hits",300,10,600,700); | |
271 | c3->cd(); | |
272 | hLzn->Draw(); | |
273 | } | |
274 | ||
275 | if(detector == 2){ // ZP histos | |
276 | TCanvas *c1 = new TCanvas("c1","ZP hits",0,10,580,700); | |
277 | c1->cd(); | |
278 | TPad *pad1= new TPad("pad1"," ",0.01,0.51,0.99,0.99); | |
279 | TPad *pad2= new TPad("pad2"," ",0.01,0.01,0.49,0.49); | |
280 | TPad *pad3= new TPad("pad3"," ",0.51,0.01,0.99,0.49); | |
281 | pad1->SetFillColor(18); | |
282 | pad2->SetFillColor(18); | |
283 | pad3->SetFillColor(18); | |
284 | pad1->Draw(); | |
285 | pad2->Draw(); | |
286 | pad3->Draw(); | |
287 | pad1->cd(); | |
288 | hspotzp->Draw(); | |
289 | pad2->cd(); | |
290 | hEzp->Draw(); | |
291 | pad3->cd(); | |
292 | hPMCzp->Draw(); | |
293 | ||
294 | TCanvas *c2 = new TCanvas("c2","ZP hits",600,10,600,700); | |
295 | c2->cd(); | |
296 | TPad *pad4= new TPad("pad4"," ",0.01,0.51,0.49,0.99); | |
297 | TPad *pad5= new TPad("pad5"," ",0.51,0.51,0.99,0.99); | |
298 | TPad *pad6= new TPad("pad6"," ",0.01,0.01,0.49,0.49); | |
299 | TPad *pad7= new TPad("pad7"," ",0.51,0.01,0.99,0.49); | |
300 | pad4->SetFillColor(18); | |
301 | pad5->SetFillColor(18); | |
302 | pad6->SetFillColor(18); | |
303 | pad7->SetFillColor(18); | |
304 | pad4->Draw(); | |
305 | pad5->Draw(); | |
306 | pad6->Draw(); | |
307 | pad7->Draw(); | |
308 | pad4->cd(); | |
309 | hPMQ1zp->Draw(); | |
310 | pad5->cd(); | |
311 | hPMQ2zp->Draw(); | |
312 | pad6->cd(); | |
313 | hPMQ3zp->Draw(); | |
314 | pad7->cd(); | |
315 | hPMQ4zp->Draw(); | |
316 | ||
317 | TCanvas *c3 = new TCanvas("c3","ZP hits",300,10,600,700); | |
318 | c3->cd(); | |
319 | hLzp->Draw(); | |
320 | } | |
321 | ||
322 | if(detector == 3){ // ZEM histos | |
323 | TCanvas *c1 = new TCanvas("c1","ZEM hits",0,10,580,700); | |
324 | c1->cd(); | |
325 | TPad *pad1= new TPad("pad1"," ",0.01,0.51,0.99,0.99); | |
326 | TPad *pad2= new TPad("pad2"," ",0.01,0.01,0.99,0.49); | |
327 | pad1->SetFillColor(18); | |
328 | pad2->SetFillColor(18); | |
329 | pad1->Draw(); | |
330 | pad2->Draw(); | |
331 | pad1->cd(); | |
332 | hspotzem->Draw(); | |
333 | pad2->cd(); | |
334 | hEzem->Draw(); | |
335 | ||
336 | TCanvas *c2 = new TCanvas("c2","ZEM hits",600,10,600,700); | |
337 | c2->cd(); | |
338 | hPMzem->Draw(); | |
339 | } | |
340 | // file->Close(); | |
341 | } |