]>
Commit | Line | Data |
---|---|---|
4de874d1 | 1 | #include <math.h> |
2 | ||
3 | #include <TFile.h> | |
4 | #include <TTree.h> | |
5 | #include <TH2.h> | |
6 | ||
7 | #include "AliTPCParam.h" | |
8 | #include "AliSimDigits.h" | |
9 | ||
10 | #include "AliL3Defs.h" | |
11 | #include "AliL3Transform.h" | |
12 | #include "AliL3HoughPixel.h" | |
13 | #include "AliL3HoughTransformer.h" | |
14 | #include "AliL3HoughTrack.h" | |
15 | #include "AliL3TrackArray.h" | |
16 | ||
17 | ClassImp(AliL3HoughTransformer) | |
18 | ||
19 | AliL3HoughTransformer::AliL3HoughTransformer() | |
20 | { | |
21 | //Default constructor | |
22 | fTransform = 0; | |
23 | fEtaMin = 0; | |
24 | fEtaMax = 0; | |
25 | fSlice = 0; | |
26 | fPatch = 0; | |
27 | fRowContainer = 0; | |
28 | fPhiRowContainer = 0; | |
52a2a604 | 29 | fVolume=0; |
4de874d1 | 30 | fNumOfPadRows=0; |
31 | fContainerBounds=0; | |
32 | fNDigits=0; | |
33 | fIndex = 0; | |
34 | } | |
35 | ||
36 | ||
52a2a604 | 37 | AliL3HoughTransformer::AliL3HoughTransformer(Int_t slice,Int_t patch,Float_t *etarange) |
4de874d1 | 38 | { |
39 | //Constructor | |
40 | ||
41 | fTransform = new AliL3Transform(); | |
4de874d1 | 42 | |
43 | fEtaMin = etarange[0]; | |
44 | fEtaMax = etarange[1]; | |
45 | fSlice = slice; | |
46 | fPatch = patch; | |
4de874d1 | 47 | fNumOfPadRows=NRowsSlice; |
48 | } | |
49 | ||
52a2a604 | 50 | AliL3HoughTransformer::AliL3HoughTransformer(Int_t slice,Int_t patch,Double_t *etarange,Int_t n_eta_segments) |
51 | { | |
52 | ||
53 | fTransform = new AliL3Transform(); | |
54 | if(etarange) | |
55 | { | |
56 | //assumes you want to look at a given etaslice only | |
57 | fEtaMin = etarange[0]; | |
58 | fEtaMax = etarange[1]; | |
59 | } | |
60 | else | |
61 | { | |
62 | //transform in all etaslices | |
63 | fEtaMin = 0; | |
64 | fEtaMax = slice < 18 ? 0.9 : -0.9; | |
65 | } | |
66 | fNumEtaSegments = n_eta_segments; | |
67 | fSlice = slice; | |
68 | fPatch = patch; | |
69 | fNumOfPadRows = NRowsSlice; | |
70 | } | |
71 | ||
4de874d1 | 72 | |
73 | AliL3HoughTransformer::~AliL3HoughTransformer() | |
74 | { | |
75 | //Destructor | |
76 | if(fRowContainer) | |
77 | delete [] fRowContainer; | |
78 | if(fTransform) | |
79 | delete fTransform; | |
80 | if(fPhiRowContainer) | |
81 | delete [] fPhiRowContainer; | |
52a2a604 | 82 | if(fVolume) |
83 | delete [] fVolume; | |
4de874d1 | 84 | if(fIndex) |
85 | { | |
86 | for(Int_t i=0; i<fNDigits; i++) | |
87 | delete [] fIndex[i]; | |
88 | delete [] fIndex; | |
89 | } | |
90 | } | |
91 | ||
92 | void AliL3HoughTransformer::InitTemplates(TH2F *hist) | |
93 | { | |
94 | ||
95 | AliL3Digits *pixel; | |
96 | ||
97 | Int_t ymin = hist->GetYaxis()->GetFirst(); | |
98 | Int_t ymax = hist->GetYaxis()->GetLast(); | |
99 | Int_t nbinsy = hist->GetNbinsY(); | |
100 | ||
101 | fIndex = new Int_t*[fNDigits]; | |
102 | for(Int_t i=0; i<fNDigits; i++) | |
103 | fIndex[i] = new Int_t[nbinsy+1]; | |
104 | ||
105 | Int_t sector,row; | |
52a2a604 | 106 | |
4de874d1 | 107 | for(Int_t padrow = NRows[fPatch][0]; padrow <= NRows[fPatch][1]; padrow++) |
52a2a604 | 108 | { |
4de874d1 | 109 | |
110 | for(pixel=(AliL3Digits*)fRowContainer[padrow].first; pixel!=0; pixel=(AliL3Digits*)pixel->nextRowPixel) | |
111 | { | |
112 | Float_t xyz[3]; | |
113 | fTransform->Slice2Sector(fSlice,padrow,sector,row); | |
114 | fTransform->Raw2Local(xyz,sector,row,pixel->fPad,pixel->fTime); | |
115 | ||
116 | Double_t r_pix = sqrt(xyz[0]*xyz[0]+xyz[1]*xyz[1]); | |
117 | ||
118 | Double_t phi_pix = fTransform->GetPhi(xyz); | |
4de874d1 | 119 | Int_t index = pixel->fIndex; |
120 | if(index >= fNDigits) | |
121 | printf("AliL3HoughTransformer::InitTemplates : Index error! %d\n",index); | |
122 | for(Int_t p=ymin; p<=ymax; p++) | |
123 | { | |
124 | ||
125 | Double_t phi0 = hist->GetYaxis()->GetBinCenter(p); | |
126 | Double_t kappa = 2*sin(phi_pix-phi0)/r_pix; | |
52a2a604 | 127 | //printf("kappa %f phi0 %f\n",kappa,phi0); |
4de874d1 | 128 | Int_t bin = hist->FindBin(kappa,phi0); |
129 | if(fIndex[index][p]!=0) | |
130 | printf("AliL3HoughTransformer::InitTemplates : Overlapping indexes\n"); | |
131 | fIndex[index][p] = bin; | |
132 | } | |
133 | } | |
134 | } | |
135 | ||
136 | } | |
137 | ||
138 | ||
139 | void AliL3HoughTransformer::CountBins() | |
140 | { | |
141 | ||
142 | Int_t middle_row = 87; //middle of the slice | |
143 | ||
144 | Double_t r_in_bundle = fTransform->Row2X(middle_row); | |
145 | // Double_t phi_min = (fSlice*20 - 10)*ToRad; | |
146 | //Double_t phi_max = (fSlice*20 + 10)*ToRad; | |
147 | Double_t phi_min = -15*ToRad; | |
148 | Double_t phi_max = 15*ToRad; | |
149 | ||
150 | Double_t phi_slice = (phi_max - phi_min)/fNPhiSegments; | |
151 | Double_t min_phi0 = 10000; | |
152 | Double_t max_phi0 = 0; | |
153 | Double_t min_kappa = 100000; | |
154 | Double_t max_kappa = 0; | |
155 | ||
156 | Int_t xbin = 60; | |
157 | Int_t ybin = 60; | |
158 | Float_t xrange[2] = {-0.006 , 0.006}; //Pt 0.2-> | |
159 | Float_t yrange[2] = {-0.26 , 0.26}; //slice 2 0.55->0.88 | |
160 | ||
161 | TH2F *histo = new TH2F("histo","Parameter space",xbin,xrange[0],xrange[1],ybin,yrange[0],yrange[1]); | |
162 | ||
163 | for(Int_t padrow=NRows[fPatch][0]; padrow <= NRows[fPatch][1]; padrow++) | |
164 | { | |
165 | for(Int_t pad=0; pad < fTransform->GetNPads(padrow); pad++) | |
166 | { | |
167 | for(Int_t time = 0; time < fTransform->GetNTimeBins(); time++) | |
168 | { | |
169 | Float_t xyz[3]; | |
170 | Int_t sector,row; | |
171 | fTransform->Slice2Sector(fSlice,padrow,sector,row); | |
172 | fTransform->Raw2Global(xyz,sector,row,pad,time); | |
173 | Double_t eta = fTransform->GetEta(xyz); | |
174 | if(eta < fEtaMin || eta > fEtaMax) continue; | |
175 | fTransform->Global2Local(xyz,sector); | |
176 | Double_t r_pix = sqrt(xyz[0]*xyz[0]+xyz[1]*xyz[1]); | |
177 | Double_t phi_pix = fTransform->GetPhi(xyz); | |
178 | ||
179 | for(Int_t p=0; p<=fNPhiSegments; p++) | |
180 | { | |
181 | Double_t phi_in_bundle = phi_min + p*phi_slice; | |
182 | ||
183 | Double_t tanPhi0 = (r_pix*sin(phi_in_bundle)-r_in_bundle*sin(phi_pix))/(r_pix*cos(phi_in_bundle)-r_in_bundle*cos(phi_pix)); | |
184 | ||
185 | Double_t phi0 = atan(tanPhi0); | |
186 | // if(phi0 < 0.55 || phi0 > 0.88) continue; | |
187 | ||
188 | //if(phi0 < 0) phi0 = phi0 +2*Pi; | |
189 | //Double_t kappa = sin(phi_in_bundle - phi0)*2/r_in_bundle; | |
190 | ||
191 | Double_t angle = phi_pix - phi0; | |
192 | Double_t kappa = 2*sin(angle)/r_pix; | |
193 | histo->Fill(kappa,phi0,1); | |
194 | if(phi0 < min_phi0) | |
195 | min_phi0 = phi0; | |
196 | if(phi0 > max_phi0) | |
197 | max_phi0 = phi0; | |
198 | if(kappa < min_kappa) | |
199 | min_kappa = kappa; | |
200 | if(kappa > max_kappa) | |
201 | max_kappa = kappa; | |
202 | ||
203 | } | |
204 | ||
205 | } | |
206 | ||
207 | } | |
208 | ||
209 | } | |
210 | Int_t count=0,bi=0; | |
211 | ||
212 | Int_t xmin = histo->GetXaxis()->GetFirst(); | |
213 | Int_t xmax = histo->GetXaxis()->GetLast(); | |
214 | Int_t ymin = histo->GetYaxis()->GetFirst(); | |
215 | Int_t ymax = histo->GetYaxis()->GetLast(); | |
216 | ||
217 | ||
218 | for(Int_t xbin=xmin+1; xbin<xmax; xbin++) | |
219 | { | |
220 | for(Int_t ybin=ymin+1; ybin<ymax; ybin++) | |
221 | { | |
222 | bi++; | |
223 | Int_t bin = histo->GetBin(xbin,ybin); | |
224 | if(histo->GetBinContent(bin)>0) | |
225 | count++; | |
226 | } | |
227 | } | |
228 | ||
229 | ||
230 | printf("Number of possible tracks in this region %d, bins %d\n",count,bi); | |
231 | printf("Phi, min %f max %f\n",min_phi0,max_phi0); | |
232 | printf("Kappa, min %f max %f\n",min_kappa,max_kappa); | |
233 | histo->Draw("box"); | |
234 | } | |
235 | ||
236 | ||
52a2a604 | 237 | void AliL3HoughTransformer::Transform2Circle(TH2F *hist,Int_t eta_index) |
4de874d1 | 238 | { |
239 | //Transformation is done with respect to local coordinates in slice. | |
240 | //Transform every pixel into whole phirange, using parametrisation: | |
241 | //kappa = 2*sin(phi-phi0)/R | |
e4c21048 | 242 | //Assumes you run InitTemplates firstly!!!! |
4de874d1 | 243 | |
244 | AliL3Digits *pix1; | |
e4c21048 | 245 | |
4de874d1 | 246 | Int_t nbinsy = hist->GetNbinsY(); |
247 | ||
52a2a604 | 248 | Int_t totsignal=0,vol_index; |
249 | if(fNumEtaSegments==1) | |
250 | eta_index=0; //only looking in one etaslice. | |
251 | ||
4de874d1 | 252 | for(Int_t padrow = NRows[fPatch][0]; padrow <= NRows[fPatch][1]; padrow++) |
253 | { | |
52a2a604 | 254 | vol_index = eta_index*fNumOfPadRows + padrow; |
255 | //for(pix1=(AliL3Digits*)fRowContainer[padrow].first; pix1!=0; pix1=(AliL3Digits*)pix1->nextRowPixel) | |
256 | for(pix1=(AliL3Digits*)fVolume[vol_index].first; pix1!=0; pix1=(AliL3Digits*)pix1->fNextVolumePixel) | |
4de874d1 | 257 | { |
258 | ||
259 | Short_t signal = pix1->fCharge; | |
260 | Int_t index = pix1->fIndex; | |
52a2a604 | 261 | if(index < 0) continue; //This pixel has been removed. |
262 | totsignal += signal; | |
4de874d1 | 263 | for(Int_t p=0; p <= nbinsy; p++) |
264 | hist->AddBinContent(fIndex[index][p],signal); | |
265 | ||
266 | } | |
267 | ||
268 | } | |
269 | ||
52a2a604 | 270 | printf("Total signal %d\n",totsignal); |
4de874d1 | 271 | } |
272 | ||
273 | /* | |
274 | void AliL3HoughTransformer::Transform2Circle(TH2F *hist) | |
275 | { | |
276 | //Transformation is done with respect to local coordinates in slice. | |
277 | //Transform every pixel into whole phirange, using parametrisation: | |
278 | //kappa = 2*sin(phi-phi0)/R | |
279 | ||
280 | printf("Transforming 1 pixel only\n"); | |
281 | ||
282 | AliL3Digits *pix1; | |
283 | Int_t sector,row; | |
284 | ||
285 | Int_t ymin = hist->GetYaxis()->GetFirst(); | |
286 | Int_t ymax = hist->GetYaxis()->GetLast(); | |
287 | ||
288 | for(Int_t padrow = NRows[fPatch][0]; padrow <= NRows[fPatch][1]; padrow++) | |
289 | { | |
290 | ||
291 | for(pix1=(AliL3Digits*)fRowContainer[padrow].first; pix1!=0; pix1=(AliL3Digits*)pix1->nextRowPixel) | |
292 | { | |
293 | ||
294 | Float_t xyz[3]; | |
295 | fTransform->Slice2Sector(fSlice,padrow,sector,row); | |
296 | fTransform->Raw2Local(xyz,sector,row,pix1->fPad,pix1->fTime); | |
297 | ||
298 | Double_t r_pix = sqrt(xyz[0]*xyz[0]+xyz[1]*xyz[1]); | |
299 | ||
300 | Double_t phi_pix = fTransform->GetPhi(xyz); | |
301 | Short_t signal = pix1->fCharge; | |
302 | ||
303 | for(Int_t p=ymin+1; p<=ymax; p++) | |
304 | { | |
305 | Double_t phi0 = hist->GetYaxis()->GetBinCenter(p); | |
306 | Double_t kappa = 2*sin(phi_pix-phi0)/r_pix; | |
307 | hist->Fill(kappa,phi0,signal); | |
308 | } | |
309 | ||
310 | } | |
311 | ||
312 | } | |
313 | ||
314 | ||
315 | } | |
316 | */ | |
317 | ||
318 | void AliL3HoughTransformer::TransformLines2Circle(TH2F *hist,AliL3TrackArray *tracks) | |
319 | { | |
320 | ||
321 | for(Int_t i=0; i<tracks->GetNTracks(); i++) | |
322 | { | |
323 | AliL3HoughTrack *track = (AliL3HoughTrack*)tracks->GetCheckedTrack(i); | |
324 | if(!track) {printf("AliL3HoughTransformer::TransformLines2Circle : NO TRACK IN ARRAY\n"); continue;} | |
325 | ||
326 | Double_t xmin = fTransform->Row2X(track->GetFirstRow()); | |
327 | Double_t xmax = fTransform->Row2X(track->GetLastRow()); | |
328 | ||
329 | Double_t a = -1./tan(track->GetPsiLine()); | |
330 | Double_t b = track->GetDLine()/sin(track->GetPsiLine()); | |
331 | ||
332 | Double_t ymin = a*xmin + b; | |
333 | Double_t ymax = a*xmax + b; | |
334 | ||
335 | Double_t middle_x = xmin + (xmax-xmin)/2; | |
336 | Double_t middle_y = ymin + (ymax-ymin)/2; | |
337 | ||
338 | Double_t r_middle = sqrt(middle_x*middle_x + middle_y*middle_y); | |
339 | Double_t phi = atan2(middle_y,middle_x); | |
340 | Double_t phi0 = 2*phi - track->GetPsiLine(); | |
341 | Double_t kappa = 2*sin(phi-phi0)/r_middle; | |
342 | hist->Fill(kappa,phi0,track->GetWeight()); | |
343 | ||
344 | } | |
345 | ||
346 | ||
347 | } | |
348 | ||
349 | void AliL3HoughTransformer::Transform2Line(TH2F *hist,Int_t ref_row,Int_t *rowrange,Double_t *phirange,TH2F *raw) | |
350 | { | |
351 | //Transform every pixel into histogram, using parametrisation: | |
352 | //D = x*cos(psi) + y*sin(psi) | |
353 | ||
354 | // printf("In Transform; rowrange %d %d ref_row %d phirange %f %f\n",rowrange[0],rowrange[1],ref_row,phirange[0],phirange[1]); | |
355 | ||
356 | AliL3Digits *pix1; | |
357 | ||
358 | Int_t xmin = hist->GetXaxis()->GetFirst(); | |
359 | Int_t xmax = hist->GetXaxis()->GetLast(); | |
360 | ||
361 | Double_t x0 = fTransform->Row2X(ref_row); | |
362 | Double_t y0 = 0; | |
363 | ||
364 | Int_t sector,row; | |
365 | //for(Int_t padrow = NRows[fPatch][0]; padrow <= NRows[fPatch][1]; padrow++) | |
366 | ||
367 | Double_t phi_min = -10*ToRad; | |
368 | Double_t phi_max = 10*ToRad; | |
369 | Double_t delta_phi = (phi_max-phi_min)/fNPhiSegments; | |
370 | ||
371 | ||
372 | Int_t phi_min_index = (Int_t)((phirange[0]*ToRad-phi_min)/delta_phi); | |
373 | Int_t phi_max_index = (Int_t)((phirange[1]*ToRad-phi_min)/delta_phi); | |
374 | ||
375 | ||
376 | Int_t index; | |
377 | ||
378 | for(Int_t phi=phi_min_index; phi <= phi_max_index; phi++) | |
379 | { | |
380 | for(Int_t padrow = rowrange[0]; padrow <= rowrange[1]; padrow++) | |
381 | { | |
382 | ||
383 | index = phi*fNumOfPadRows + padrow; | |
384 | //printf("Looping index %d\n",index); | |
385 | if(index > fContainerBounds || index < 0) | |
386 | { | |
387 | printf("AliL3HoughTransformer::Transform2Line : index %d out of range \n",index); | |
388 | return; | |
389 | } | |
52a2a604 | 390 | for(pix1=(AliL3Digits*)fRowContainer[padrow].first; pix1!=0; pix1=(AliL3Digits*)pix1->nextRowPixel) |
391 | //for(pix1=(AliL3Digits*)fPhiRowContainer[index].first; pix1!=0; pix1=(AliL3Digits*)pix1->nextPhiRowPixel) | |
4de874d1 | 392 | { |
393 | //printf("Transforming pixel in index %d pad %d time %d padrow %d\n",index,pix1->fPad,pix1->fTime,padrow); | |
394 | Float_t xyz[3]; | |
395 | fTransform->Slice2Sector(fSlice,padrow,sector,row); | |
396 | fTransform->Raw2Local(xyz,sector,row,pix1->fPad,pix1->fTime); | |
397 | ||
398 | if(raw) | |
399 | raw->Fill(xyz[0],xyz[1],pix1->fCharge); | |
400 | ||
401 | xyz[0] = xyz[0]-x0; | |
402 | xyz[1] = xyz[1]-y0; | |
403 | ||
404 | //printf("calculating..."); | |
405 | for(Int_t d=xmin+1; d<=xmax; d++) | |
406 | { | |
407 | Double_t psi = hist->GetXaxis()->GetBinCenter(d); | |
408 | Double_t D = xyz[0]*cos(psi) + xyz[1]*sin(psi); | |
409 | ||
410 | Short_t signal = pix1->fCharge; | |
411 | hist->Fill(psi,D,signal); | |
412 | //printf("Filling histo, psi %f D %f\n",psi,D); | |
413 | } | |
414 | //printf("done\n"); | |
415 | } | |
416 | //printf(" done\n"); | |
417 | } | |
418 | ||
419 | } | |
420 | ||
421 | } | |
422 | ||
423 | void AliL3HoughTransformer::GetPixels(Char_t *rootfile,TH2F *hist) | |
424 | { | |
425 | ||
426 | TFile *file = new TFile(rootfile); | |
427 | file->cd(); | |
428 | ||
429 | AliTPCParam *param=(AliTPCParam *)file->Get("75x40_100x60"); | |
430 | TTree *t=(TTree*)file->Get("TreeD_75x40_100x60"); | |
431 | ||
432 | AliSimDigits da, *digarr=&da; | |
433 | t->GetBranch("Segment")->SetAddress(&digarr); | |
434 | Stat_t num_of_entries=t->GetEntries(); | |
435 | ||
436 | Int_t digit_counter=0; | |
437 | Float_t xyz[3]; | |
52a2a604 | 438 | Double_t eta; |
4de874d1 | 439 | |
440 | Int_t nrows = NRows[fPatch][1] - NRows[fPatch][0] + 1; | |
441 | printf("nrows %d slice %d patch %d\n",nrows,fSlice,fPatch); | |
442 | ||
443 | if(fRowContainer) | |
444 | delete [] fRowContainer; | |
445 | fRowContainer = new AliL3HoughContainer[fNumOfPadRows]; | |
446 | memset(fRowContainer,0,fNumOfPadRows*sizeof(AliL3HoughContainer)); | |
447 | ||
448 | ||
52a2a604 | 449 | //fContainerBounds = (fNPhiSegments+1)*(fNumOfPadRows+1); |
450 | //printf("Allocating %d bytes to container of size %d\n",fContainerBounds*sizeof(AliL3HoughContainer),fContainerBounds); | |
4de874d1 | 451 | |
52a2a604 | 452 | /* |
453 | if(fPhiRowContainer) | |
454 | delete [] fPhiRowContainer; | |
455 | fPhiRowContainer = new AliL3HoughContainer[fContainerBounds]; | |
456 | memset(fPhiRowContainer,0,fContainerBounds*sizeof(AliL3HoughContainer)); | |
457 | */ | |
458 | fContainerBounds = (fNumEtaSegments+1)*(fNumOfPadRows+1); | |
459 | if(fVolume) | |
460 | delete [] fVolume; | |
461 | fVolume = new AliL3HoughContainer[fContainerBounds]; | |
462 | memset(fVolume,0,fContainerBounds*sizeof(AliL3HoughContainer)); | |
463 | /* | |
464 | Double_t phi_min = -10*ToRad; | |
465 | Double_t phi_max = 10*ToRad; | |
466 | Double_t delta_phi = (phi_max-phi_min)/fNPhiSegments; | |
467 | */ | |
468 | Double_t eta_slice = (fEtaMax-fEtaMin)/fNumEtaSegments; | |
4de874d1 | 469 | Int_t index; |
470 | digit_counter=0; | |
471 | ||
52a2a604 | 472 | printf("\nLoading ALL pixels in slice\n\n"); |
473 | ||
4de874d1 | 474 | for (Int_t i=0; i<num_of_entries; i++) |
475 | { | |
476 | t->GetEvent(i); | |
477 | Int_t sector; | |
478 | Int_t row; | |
479 | param->AdjustSectorRow(digarr->GetID(),sector,row); | |
480 | Int_t slice,padrow; | |
481 | fTransform->Sector2Slice(slice,padrow,sector,row); | |
482 | if(slice != fSlice) continue; | |
483 | if(padrow < NRows[fPatch][0]) continue; | |
484 | if(padrow > NRows[fPatch][1]) break; | |
485 | digarr->First(); | |
486 | do { | |
487 | Int_t time=digarr->CurrentRow(); | |
488 | Int_t pad=digarr->CurrentColumn(); | |
489 | Short_t signal=digarr->CurrentDigit(); | |
490 | if(time < param->GetMaxTBin()-1 && time > 0) | |
491 | if(digarr->GetDigit(time-1,pad) <= param->GetZeroSup() | |
492 | && digarr->GetDigit(time+1,pad) <= param->GetZeroSup()) | |
493 | continue; | |
494 | ||
495 | ||
496 | fTransform->Raw2Global(xyz,sector,row,pad,time); | |
497 | eta = fTransform->GetEta(xyz); | |
52a2a604 | 498 | |
4de874d1 | 499 | if(eta < fEtaMin || eta > fEtaMax) continue; |
500 | fTransform->Global2Local(xyz,sector); | |
501 | ||
502 | ||
52a2a604 | 503 | //phi = fTransform->GetPhi(xyz); |
4de874d1 | 504 | if(hist) |
505 | hist->Fill(xyz[0],xyz[1],signal); | |
506 | ||
507 | AliL3Digits *dig = new AliL3Digits; | |
508 | dig->fIndex = digit_counter; | |
509 | digit_counter++; | |
510 | dig->fCharge = signal; | |
511 | dig->fPad = pad; | |
512 | dig->fTime = time; | |
513 | ||
514 | if(fRowContainer[padrow].first == NULL) | |
515 | fRowContainer[padrow].first = (void*)dig; | |
516 | else | |
517 | ((AliL3Digits*)(fRowContainer[padrow].last))->nextRowPixel=dig; | |
518 | fRowContainer[padrow].last = (void*)dig; | |
519 | ||
52a2a604 | 520 | //thisHit->etaIndex=(Int_t)((thisHit->GetEta()-fEtaMin)/etaSlice + 1); |
521 | Int_t eta_index = (Int_t)((eta-fEtaMin)/eta_slice); | |
522 | index = eta_index*fNumOfPadRows + padrow; | |
523 | if(index > fContainerBounds || index < 0) | |
4de874d1 | 524 | { |
52a2a604 | 525 | |
526 | //printf("AliL3HoughTransformer::GetPixels : index out of range %d %d eta_index %d padrow %d\n",index,fContainerBounds,eta_index,padrow); | |
4de874d1 | 527 | continue; |
528 | } | |
52a2a604 | 529 | |
530 | if(fVolume[index].first == NULL) | |
531 | fVolume[index].first = (void*)dig; | |
4de874d1 | 532 | else |
52a2a604 | 533 | ((AliL3Digits*)(fVolume[index].last))->fNextVolumePixel = dig; |
534 | fVolume[index].last = (void*)dig; | |
4de874d1 | 535 | |
52a2a604 | 536 | /* |
537 | Int_t phi_index = (Int_t)((phi-phi_min)/delta_phi); | |
538 | index = phi_index*fNumOfPadRows + padrow; | |
539 | if(phi_index > fContainerBounds || phi_index < 0) | |
540 | { | |
541 | printf("AliL3HoughTransform::GetPixels : index out of range %d\n",phi_index); | |
542 | continue; | |
543 | } | |
544 | ||
545 | if(fPhiRowContainer[index].first == NULL) | |
546 | fPhiRowContainer[index].first = (void*)dig; | |
547 | else | |
548 | ((AliL3Digits*)(fPhiRowContainer[index].last))->nextPhiRowPixel = dig; | |
549 | fPhiRowContainer[index].last=(void*)dig; | |
550 | */ | |
4de874d1 | 551 | }while (digarr->Next()); |
552 | ||
553 | } | |
554 | ||
555 | fNDigits = digit_counter; | |
556 | printf("digitcounter %d\n",digit_counter); | |
557 | printf("Allocated %d bytes to pixels\n",digit_counter*sizeof(AliL3Digits)); | |
558 | file->Close(); | |
559 | delete file; | |
560 | ||
561 | } |