1 //Author: Anders Strand Vestbo
2 //Last Modified: 28.6.01
8 #include "AliL3Histogram.h"
9 #include "AliL3TrackArray.h"
10 #include "AliL3HoughTrack.h"
11 #include "AliL3HoughMaxFinder.h"
13 ClassImp(AliL3HoughMaxFinder)
16 AliL3HoughMaxFinder::AliL3HoughMaxFinder()
25 AliL3HoughMaxFinder::AliL3HoughMaxFinder(Char_t *histotype,AliL3Histogram *hist)
29 //fTracks = new AliL3TrackArray("AliL3HoughTrack");
30 if(strcmp(histotype,"KappaPhi")==0) fHistoType='c';
31 if(strcmp(histotype,"DPsi")==0) fHistoType='l';
38 AliL3HoughMaxFinder::~AliL3HoughMaxFinder()
44 void AliL3HoughMaxFinder::FindAbsMaxima(Int_t &max_xbin,Int_t &max_ybin)
48 printf("AliL3HoughMaxFinder::FindAbsMaxima : No histogram!\n");
51 AliL3Histogram *hist = fCurrentHisto;
53 Int_t xmin = hist->GetFirstXbin();
54 Int_t xmax = hist->GetLastXbin();
55 Int_t ymin = hist->GetFirstYbin();
56 Int_t ymax = hist->GetLastYbin();
58 Stat_t value,max_value=0;
60 for(Int_t xbin=xmin; xbin<=xmax; xbin++)
62 for(Int_t ybin=ymin; ybin<=ymax; ybin++)
64 bin = hist->GetBin(xbin,ybin);
65 value = hist->GetBinContent(bin);
77 AliL3TrackArray *AliL3HoughMaxFinder::FindBigMaxima(AliL3Histogram *hist)
80 Int_t xmin = hist->GetFirstXbin();
81 Int_t xmax = hist->GetLastXbin();
82 Int_t ymin = hist->GetFirstYbin();
83 Int_t ymax = hist->GetLastYbin();
84 Int_t bin[25],bin_index;
87 AliL3TrackArray *tracks = new AliL3TrackArray("AliL3HoughTrack");
88 AliL3HoughTrack *track;
90 for(Int_t xbin=xmin+2; xbin<xmax-3; xbin++)
92 for(Int_t ybin=ymin+2; ybin<ymax-3; ybin++)
95 for(Int_t xb=xbin-2; xb<=xbin+2; xb++)
97 for(Int_t yb=ybin-2; yb<=ybin+2; yb++)
99 bin[bin_index]=hist->GetBin(xb,yb);
100 value[bin_index]=hist->GetBinContent(bin[bin_index]);
105 if(value[12]==0) continue;
109 if(value[b] > value[12] || b==bin_index) break;
116 Double_t max_x = hist->GetBinCenterX(xbin);
117 Double_t max_y = hist->GetBinCenterY(ybin);
118 track = (AliL3HoughTrack*)tracks->NextTrack();
119 track->SetTrackParameters(max_x,max_y,(Int_t)value[12]);
129 AliL3TrackArray *AliL3HoughMaxFinder::FindMaxima(AliL3Histogram *hist,Int_t *rowrange,Int_t ref_row)
131 //Locate all the maxima in input histogram.
132 //Maxima is defined as bins with more entries than the
133 //immediately neighbouring bins.
135 Int_t xmin = hist->GetFirstXbin();
136 Int_t xmax = hist->GetLastXbin();
137 Int_t ymin = hist->GetFirstYbin();
138 Int_t ymax = hist->GetLastYbin();
139 Int_t bin[9],track_counter=0;
142 AliL3TrackArray *tracks = new AliL3TrackArray("AliL3HoughTrack");
143 AliL3HoughTrack *track;
145 for(Int_t xbin=xmin+1; xbin<xmax-1; xbin++)
147 for(Int_t ybin=ymin+1; ybin<ymax-1; ybin++)
149 bin[0] = hist->GetBin(xbin-1,ybin-1);
150 bin[1] = hist->GetBin(xbin,ybin-1);
151 bin[2] = hist->GetBin(xbin+1,ybin-1);
152 bin[3] = hist->GetBin(xbin-1,ybin);
153 bin[4] = hist->GetBin(xbin,ybin);
154 bin[5] = hist->GetBin(xbin+1,ybin);
155 bin[6] = hist->GetBin(xbin-1,ybin+1);
156 bin[7] = hist->GetBin(xbin,ybin+1);
157 bin[8] = hist->GetBin(xbin+1,ybin+1);
158 value[0] = hist->GetBinContent(bin[0]);
159 value[1] = hist->GetBinContent(bin[1]);
160 value[2] = hist->GetBinContent(bin[2]);
161 value[3] = hist->GetBinContent(bin[3]);
162 value[4] = hist->GetBinContent(bin[4]);
163 value[5] = hist->GetBinContent(bin[5]);
164 value[6] = hist->GetBinContent(bin[6]);
165 value[7] = hist->GetBinContent(bin[7]);
166 value[8] = hist->GetBinContent(bin[8]);
168 if(value[4] <= fThreshold) continue;//central bin below threshold
170 if(value[4]>value[0] && value[4]>value[1] && value[4]>value[2]
171 && value[4]>value[3] && value[4]>value[5] && value[4]>value[6]
172 && value[4]>value[7] && value[4]>value[8])
174 //Found a local maxima
175 Float_t max_x = hist->GetBinCenterX(xbin);
176 Float_t max_y = hist->GetBinCenterY(ybin);
178 track = (AliL3HoughTrack*)tracks->NextTrack();
184 track->SetTrackParameters(max_x,max_y,(Int_t)value[4]);
187 track->SetLineParameters(max_x,max_y,(Int_t)value[4],rowrange,ref_row);
190 printf("AliL3HoughMaxFinder: Error in tracktype\n");
198 continue; //not a maxima
206 AliL3TrackArray *AliL3HoughMaxFinder::LookForPeaks(AliL3Histogram *hist,Int_t nbins)
209 AliL3TrackArray *tracks = new AliL3TrackArray("AliL3HoughTrack");
210 AliL3HoughTrack *track;
211 Int_t xmin = hist->GetFirstXbin();
212 Int_t xmax = hist->GetLastXbin();
213 Int_t ymin = hist->GetFirstYbin();
214 Int_t ymax = hist->GetLastYbin();
217 for(Int_t xbin=xmin+nbins; xbin <= xmax - nbins; xbin++)
219 for(Int_t ybin=ymin+nbins; ybin <= ymax - nbins; ybin++)
222 for(Int_t xbin_loc = xbin-nbins; xbin_loc <= xbin+nbins; xbin_loc++)
224 for(Int_t ybin_loc = ybin-nbins; ybin_loc <= ybin+nbins; ybin_loc++)
226 Int_t bin_loc = hist->GetBin(xbin_loc,ybin_loc);
227 weight_loc += (Int_t)hist->GetBinContent(bin_loc);
233 track = (AliL3HoughTrack*)tracks->NextTrack();
234 track->SetTrackParameters(hist->GetBinCenterX(xbin),hist->GetBinCenterY(ybin),weight_loc);
241 AliL3HoughTrack *track1,*track2;
243 for(Int_t i=1; i<tracks->GetNTracks(); i++)
245 track1 = (AliL3HoughTrack*)tracks->GetCheckedTrack(i);
246 if(!track1) continue;
247 Int_t xbin1 = hist->FindXbin(track1->GetKappa());
248 Int_t ybin1 = hist->FindXbin(track1->GetPhi0());
249 for(Int_t j=0; j < i; j++)
251 track2 = (AliL3HoughTrack*)tracks->GetCheckedTrack(j);
252 if(!track2) continue;
253 Int_t xbin2 = hist->FindXbin(track2->GetKappa());
254 Int_t ybin2 = hist->FindYbin(track2->GetPhi0());
255 if(abs(xbin1-xbin2) < 10 && abs(ybin1-ybin2) < 10)
267 AliL3HoughTrack *AliL3HoughMaxFinder::CalculatePeakInWindow(Int_t *maxbin,Int_t t0,Int_t t1,Double_t t2,Int_t t3)
269 //Try to expand the area around the maxbin +- t0
273 printf("AliL3HoughMaxFinder::LocatePeak : No histogram\n");
276 AliL3Histogram *hist = fCurrentHisto;
277 Int_t xmin = hist->GetFirstXbin();
278 Int_t xmax = hist->GetLastXbin();
279 Int_t ymin = hist->GetFirstYbin();
280 Int_t ymax = hist->GetLastYbin();
282 Int_t xlow = maxbin[0]-t0;
285 Int_t xup = maxbin[0]+t0;
288 Int_t ylow = maxbin[1]-t0;
291 Int_t yup = maxbin[1]+t0;
295 Int_t nbinsx = hist->GetNbinsX()+1;
297 Int_t *m = new Int_t[nbinsx];
298 Int_t *m_low = new Int_t[nbinsx];
299 Int_t *m_up = new Int_t[nbinsx];
303 Int_t max_x=0,sum=0,max_xbin=0,bin;
305 for(Int_t xbin=xlow; xbin<=xup; xbin++)
307 for(Int_t ybin=ylow; ybin <= yup; ybin++)
310 for(Int_t y=ybin; y <= ybin+t1; y++)
312 if(y>yup) break; //reached the upper limit in y.
314 bin = hist->GetBin(xbin,y);
315 sum += (Int_t)hist->GetBinContent(bin);
318 if(sum > m[xbin]) //Max value locally in this xbin
322 m_up[xbin]=ybin + t1;
327 if(m[xbin] > max_x) //Max value globally in x-direction
330 max_x = m[xbin];//sum;
333 //printf("max_xbin %d max_x %d m_low %d m_up %d\n",max_xbin,max_x,m_low[max_xbin],m_up[max_xbin]);
334 //printf("ylow %f yup %f\n",hist->GetBinCenterY(m_low[max_xbin]),hist->GetBinCenterY(m_up[max_xbin]));
336 //Determine a width in the x-direction
337 Int_t x_low=0,x_up=0;
338 for(Int_t xbin=max_xbin-1; xbin >= xmin; xbin--)
340 if(m[xbin] < max_x*t2)
346 for(Int_t xbin = max_xbin+1; xbin <=xmax; xbin++)
348 if(m[xbin] < max_x*t2)
354 printf("x_low %d x_up %d\n",x_low,x_up);
356 Double_t top=0,butt=0,value,x_peak;
357 if(x_up - x_low + 1 > t3)
360 printf("\nxrange out if limit x_up %d x_low %d\n\n",x_low,x_up);
365 x_peak = hist->GetBinCenterX(max_xbin);
370 //printf("xlow %f xup %f\n",hist->GetBinCenterX(x_low),hist->GetBinCenterX(x_up));
371 //printf("Spread in x %d\n",x_up-x_low +1);
373 //Now, calculate the center of mass in x-direction
374 for(Int_t xbin=x_low; xbin <= x_up; xbin++)
376 value = hist->GetBinCenterX(xbin);
377 top += value*m[xbin];
384 //Find the peak in y direction:
385 Int_t x_l = hist->FindXbin(x_peak);
386 if(hist->GetBinCenterX(x_l) > x_peak)
391 if(hist->GetBinCenterX(x_l) > x_peak || hist->GetBinCenterX(x_u) <= x_peak)
392 printf("\nAliL3HoughMaxFinder::FindPeak : Wrong xrange %f %f %f\n\n",hist->GetBinCenterX(x_l),x_peak,hist->GetBinCenterX(x_u));
394 //printf("\nxlow %f xup %f\n",hist->GetBinCenterX(x_l),hist->GetBinCenterX(x_u));
398 //printf("ylow %f yup %f\n",hist->GetBinCenterY(m_low[x_l]),hist->GetBinCenterY(m_up[x_l]));
399 //printf("ylow %f yup %f\n",hist->GetBinCenterY(m_low[x_u]),hist->GetBinCenterY(m_up[x_u]));
401 for(Int_t ybin=m_low[x_l]; ybin <= m_up[x_l]; ybin++)
403 value = hist->GetBinCenterY(ybin);
404 bin = hist->GetBin(x_l,ybin);
405 top += value*hist->GetBinContent(bin);
406 butt += hist->GetBinContent(bin);
408 Double_t y_peak_low = top/butt;
410 //printf("y_peak_low %f\n",y_peak_low);
413 for(Int_t ybin=m_low[x_u]; ybin <= m_up[x_u]; ybin++)
415 value = hist->GetBinCenterY(ybin);
416 bin = hist->GetBin(x_u,ybin);
417 top += value*hist->GetBinContent(bin);
418 butt += hist->GetBinContent(bin);
420 Double_t y_peak_up = top/butt;
422 //printf("y_peak_up %f\n",y_peak_up);
424 Double_t x_value_up = hist->GetBinCenterX(x_u);
425 Double_t x_value_low = hist->GetBinCenterX(x_l);
427 Double_t y_peak = (y_peak_low*(x_value_up - x_peak) + y_peak_up*(x_peak - x_value_low))/(x_value_up - x_value_low);
431 bin = hist->FindBin(x_peak,y_peak);
432 Int_t weight = (Int_t)hist->GetBinContent(bin);
434 AliL3HoughTrack *track = new AliL3HoughTrack();
435 track->SetTrackParameters(x_peak,y_peak,weight);
437 //Reset area around peak
438 for(Int_t xbin=x_low; xbin<=x_up; xbin++)
440 for(Int_t ybin=m_low[xbin]; ybin<=m_up[xbin]; ybin++)
442 bin = hist->GetBin(xbin,ybin);
443 hist->SetBinContent(bin,0);
456 AliL3HoughTrack *AliL3HoughMaxFinder::FindPeakLine(Double_t rho,Double_t theta)
458 //Peak finder based on a second line transformation on kappa-phi space,
459 //to use as a baseline.
463 printf("AliL3HoughTransformer::FindPeakLine : No input histogram\n");
467 //get the line parameters:
468 Double_t a = -1./tan(theta);
469 Double_t b = rho/sin(theta);
471 printf("rho %f theta %f\n",rho,theta);
472 //now, start looking along the line.
473 Int_t xmin = fCurrentHisto->GetFirstXbin();
474 Int_t xmax = fCurrentHisto->GetLastXbin();
478 for(Int_t xbin=xmin; xbin<=xmax; xbin++)
480 Double_t x = fCurrentHisto->GetBinCenterX(xbin);
481 Double_t y = a*x + b;
482 Int_t bin = fCurrentHisto->FindBin(x,y);
483 //printf("x %f y %f weight %d\n",x,y,fCurrentHisto->GetBinContent(bin));
484 if(fCurrentHisto->GetBinContent(bin) > max_weight)
486 max_weight = (Int_t)fCurrentHisto->GetBinContent(bin);
492 AliL3HoughTrack *track = new AliL3HoughTrack();
493 track->SetTrackParameters(max_bin[0],max_bin[1],max_weight);
499 void AliL3HoughMaxFinder::FindPeak1(Float_t *xpeaks,Float_t *ypeaks,Int_t &n)
501 //testing mutliple peakfinding
503 Int_t max_entries = n;
507 printf("AliL3HoughMaxFinder::FindPeak1 : No input histogram\n");
514 Int_t xmin = fCurrentHisto->GetFirstXbin();
515 Int_t xmax = fCurrentHisto->GetLastXbin();
516 Int_t ymin = fCurrentHisto->GetFirstYbin();
517 Int_t ymax = fCurrentHisto->GetLastYbin();
518 Int_t nbinsx = fCurrentHisto->GetNbinsX()+1;
520 AxisWindow **windowPt = new AxisWindow*[nbinsx];
521 AxisWindow **anotherPt = new AxisWindow*[nbinsx];
523 for(Int_t i=0; i<nbinsx; i++)
525 windowPt[i] = new AxisWindow;
526 bzero((void*)windowPt[i],sizeof(AxisWindow));
527 anotherPt[i] = windowPt[i];
530 for(Int_t xbin=xmin; xbin<=xmax; xbin++)
533 for(Int_t ybin=ymin; ybin<=ymax-y_window; ybin++)
535 Int_t sum_in_window=0;
536 for(Int_t b=ybin; b<ybin+y_window; b++)
539 Int_t bin = fCurrentHisto->GetBin(xbin,b);
540 sum_in_window += (Int_t)fCurrentHisto->GetBinContent(bin);
543 if(sum_in_window > max_sum)
545 max_sum = sum_in_window;
546 windowPt[xbin]->ymin = ybin;
547 windowPt[xbin]->ymax = ybin + y_window;
548 windowPt[xbin]->weight = sum_in_window;
549 windowPt[xbin]->xbin = xbin;
554 //Sort the windows according to the weight
555 SortPeaks(windowPt,0,nbinsx);
557 //for(Int_t i=0; i<nbinsx; i++)
558 //printf("xbin %f weight %d\n",fCurrentHisto->GetBinCenterX(windowPt[i]->xbin),windowPt[i]->weight);
561 for(Int_t i=0; i<nbinsx; i++)
564 Int_t xbin = windowPt[i]->xbin;
566 if(xbin<xmin || xbin > xmax-1) continue;
568 //Check if this is really a peak
569 if(anotherPt[xbin-1]->weight > windowPt[i]->weight ||
570 anotherPt[xbin+1]->weight > windowPt[i]->weight)
573 for(Int_t j=windowPt[i]->ymin; j<windowPt[i]->ymax; j++)
575 //Calculate the mean in y direction:
576 Int_t bin = fCurrentHisto->GetBin(windowPt[i]->xbin,j);
577 top += (fCurrentHisto->GetBinCenterY(j))*(fCurrentHisto->GetBinContent(bin));
578 butt += fCurrentHisto->GetBinContent(bin);
580 xpeaks[n] = fCurrentHisto->GetBinCenterX(windowPt[i]->xbin);
581 ypeaks[n] = top/butt;
583 if(n==max_entries) break;
587 //Improve the peaks by including the region around in x.
589 for(Int_t i=0; i<n; i++)
591 Int_t xbin = fCurrentHisto->FindXbin(xpeaks[i]);
592 if(xbin - x_bin_sides < xmin || xbin + x_bin_sides > xmax) continue;
595 for(Int_t j=xbin-x_bin_sides; j<=xbin+x_bin_sides; j++)
597 if(anotherPt[j]->ymin > anotherPt[xbin]->ymax) continue;
598 if(anotherPt[j]->ymax < anotherPt[xbin]->ymin) continue;
599 top += fCurrentHisto->GetBinCenterX(j)*anotherPt[j]->weight;
600 butt += anotherPt[j]->weight;
601 for(Int_t k=anotherPt[j]->ymin; k<anotherPt[j]->ymax; k++)
603 Int_t bin = fCurrentHisto->GetBin(j,k);
604 ytop += (fCurrentHisto->GetBinCenterY(k))*(fCurrentHisto->GetBinContent(bin));
605 ybutt += fCurrentHisto->GetBinContent(bin);
608 xpeaks[i] = top/butt;
609 ypeaks[i] = ytop/ybutt;
612 for(Int_t i=0; i<nbinsx; i++)
619 void AliL3HoughMaxFinder::SortPeaks(struct AxisWindow **a,Int_t first,Int_t last)
621 //General sorting routine
622 //Sort according to PeakCompare()
624 static struct AxisWindow *tmp;
625 static int i; // "static" to save stack space
628 while (last - first > 1) {
632 while (++i < last && PeakCompare(a[i], a[first]) < 0)
634 while (--j > first && PeakCompare(a[j], a[first]) > 0)
650 if (j - first < last - (j + 1)) {
651 SortPeaks(a, first, j);
652 first = j + 1; // QSort(j + 1, last);
654 SortPeaks(a, j + 1, last);
655 last = j; // QSort(first, j);
661 Int_t AliL3HoughMaxFinder::PeakCompare(struct AxisWindow *a,struct AxisWindow *b)
663 if(a->weight < b->weight) return 1;
664 if(a->weight > b->weight) return -1;
669 AliL3HoughTrack *AliL3HoughMaxFinder::FindPeak(Int_t t1,Double_t t2,Int_t t3)
671 //Attempt of a more sophisticated peak finder.
672 //Finds the best peak in the histogram, and returns the corresponding
677 printf("AliL3HoughMaxFinder::FindPeak : No histogram!!\n");
680 AliL3Histogram *hist = fCurrentHisto;
682 Int_t xmin = hist->GetFirstXbin();
683 Int_t xmax = hist->GetLastXbin();
684 Int_t ymin = hist->GetFirstYbin();
685 Int_t ymax = hist->GetLastYbin();
686 Int_t nbinsx = hist->GetNbinsX()+1;
688 Int_t *m = new Int_t[nbinsx];
689 Int_t *m_low = new Int_t[nbinsx];
690 Int_t *m_up = new Int_t[nbinsx];
693 recompute: //this is a goto.
695 for(Int_t i=0; i<nbinsx; i++)
702 Int_t max_x=0,sum=0,max_xbin=0,bin;
704 for(Int_t xbin=xmin; xbin<=xmax; xbin++)
706 for(Int_t ybin=ymin; ybin <= ymax - t1; ybin++)
709 for(Int_t y=ybin; y <= ybin+t1; y++)
713 bin = hist->GetBin(xbin,y);
714 sum += (Int_t)hist->GetBinContent(bin);
717 if(sum > m[xbin]) //Max value locally in this xbin
721 m_up[xbin]=ybin + t1;
726 if(m[xbin] > max_x) //Max value globally in x-direction
729 max_x = m[xbin];//sum;
732 //printf("max_xbin %d max_x %d m_low %d m_up %d\n",max_xbin,max_x,m_low[max_xbin],m_up[max_xbin]);
733 //printf("ylow %f yup %f\n",hist->GetBinCenterY(m_low[max_xbin]),hist->GetBinCenterY(m_up[max_xbin]));
735 //Determine a width in the x-direction
736 Int_t x_low=0,x_up=0;
738 for(Int_t xbin=max_xbin-1; xbin >= xmin; xbin--)
740 if(m[xbin] < max_x*t2)
746 for(Int_t xbin = max_xbin+1; xbin <=xmax; xbin++)
748 if(m[xbin] < max_x*t2)
755 Double_t top=0,butt=0,value,x_peak;
756 if(x_up - x_low + 1 > t3)
759 printf("\nxrange out if limit x_up %d x_low %d t1 %d\n\n",x_low,x_up,t1);
764 x_peak = hist->GetBinCenterX(max_xbin);
769 //printf("xlow %f xup %f\n",hist->GetBinCenterX(x_low),hist->GetBinCenterX(x_up));
770 //printf("Spread in x %d\n",x_up-x_low +1);
772 //Now, calculate the center of mass in x-direction
773 for(Int_t xbin=x_low; xbin <= x_up; xbin++)
775 value = hist->GetBinCenterX(xbin);
776 top += value*m[xbin];
783 //Find the peak in y direction:
784 Int_t x_l = hist->FindXbin(x_peak);
785 if(hist->GetBinCenterX(x_l) > x_peak)
790 if(hist->GetBinCenterX(x_l) > x_peak || hist->GetBinCenterX(x_u) <= x_peak)
791 printf("\nAliL3HoughMaxFinder::FindPeak : Wrong xrange %f %f %f\n\n",hist->GetBinCenterX(x_l),x_peak,hist->GetBinCenterX(x_u));
793 //printf("\nxlow %f xup %f\n",hist->GetBinCenterX(x_l),hist->GetBinCenterX(x_u));
797 //printf("ylow %f yup %f\n",hist->GetBinCenterY(m_low[x_l]),hist->GetBinCenterY(m_up[x_l]));
798 //printf("ylow %f yup %f\n",hist->GetBinCenterY(m_low[x_u]),hist->GetBinCenterY(m_up[x_u]));
800 for(Int_t ybin=m_low[x_l]; ybin <= m_up[x_l]; ybin++)
802 value = hist->GetBinCenterY(ybin);
803 bin = hist->GetBin(x_l,ybin);
804 top += value*hist->GetBinContent(bin);
805 butt += hist->GetBinContent(bin);
807 Double_t y_peak_low = top/butt;
809 //printf("y_peak_low %f\n",y_peak_low);
812 for(Int_t ybin=m_low[x_u]; ybin <= m_up[x_u]; ybin++)
814 value = hist->GetBinCenterY(ybin);
815 bin = hist->GetBin(x_u,ybin);
816 top += value*hist->GetBinContent(bin);
817 butt += hist->GetBinContent(bin);
819 Double_t y_peak_up = top/butt;
821 //printf("y_peak_up %f\n",y_peak_up);
823 Double_t x_value_up = hist->GetBinCenterX(x_u);
824 Double_t x_value_low = hist->GetBinCenterX(x_l);
826 Double_t y_peak = (y_peak_low*(x_value_up - x_peak) + y_peak_up*(x_peak - x_value_low))/(x_value_up - x_value_low);
830 bin = hist->FindBin(x_peak,y_peak);
831 Int_t weight = (Int_t)hist->GetBinContent(bin);
833 AliL3HoughTrack *track = new AliL3HoughTrack();
834 track->SetTrackParameters(x_peak,y_peak,weight);