1 void hough(char *rootfile,int patch,Bool_t MC=false)
7 Float_t xrange[2] = {-0.006 , 0.006}; //Pt 0.2->
8 //Float_t yrange[2] = {-0.17 , 0.17}; //slice 2 0.55->0.88
9 Float_t yrange[2] = {-0.26 , 0.26};// -15 - 15
10 //Float_t yrange[2] = {0.55 , 0.88}; //slice 2 0.55->0.88
11 TH2F *hist = new TH2F("hist","Parameter space",xbin,xrange[0],xrange[1],ybin,yrange[0],yrange[1]);
12 hist->GetXaxis()->SetTitle("#kappa [cm^{-1}]");
13 hist->GetYaxis()->SetTitle("#Phi [rad]");
16 Int_t xr[2] = {0,250};
17 Int_t yr[2] = {-125,125};
18 TH1F *ntracks = new TH1F("ntracks","",100,0,200);
19 TH2F *raw = new TH2F("raw","",250,xr[0],xr[1],250,yr[0],yr[1]);
20 TH2F *road = new TH2F("road","",250,0,250,250,yr[0],yr[1]);
21 TH2F *fake = new TH2F("fake","",250,0,250,250,-125,125);
22 TH2F *peaks = new TH2F("peaks","",xbin,xrange[0],xrange[1],ybin,yrange[0],yrange[1]);
23 peaks->SetMarkerStyle(3);
24 peaks->SetMarkerColor(2);
26 int slice = 2,n_phi_segments=30;
27 float eta[2] = {0.3,0.4};
28 //float eta[2] = {0.03,0.04};
30 AliL3HoughTransformer *a = new AliL3HoughTransformer(slice,patch,eta,n_phi_segments);
31 a->GetPixels(rootfile,raw);
32 a->InitTemplates(hist);
34 //a->Transform2Circle(hist,78);
36 a->Transform2Circle(hist);
38 printf("Transformation done in %f ms\n",sw.CpuTime()*1000);
40 AliL3HoughMaxFinder *b = new AliL3HoughMaxFinder("KappaPhi");
41 //b->SetThreshold(10000);
42 //AliL3TrackArray *tracks = b->FindMaxima(hist);
44 AliL3TrackArray *tracks = b->FindPeak(hist,2,0.95,2);
46 AliL3HoughEval *c = new AliL3HoughEval(a);
47 printf("number of peaks before %d\n",tracks->GetNTracks());
50 for(int i=0; i<tracks->GetNTracks(); i++)
52 AliL3HoughTrack *track = (AliL3HoughTrack*)tracks->GetCheckedTrack(i);
53 if(!track) printf("no track\n");
54 printf("Pt %f Phi %f kappa %f weigth %d charge %d\n",track->GetPt(),track->GetPhi0(),track->GetKappa(),track->GetNHits(),track->GetCharge());
57 //c->LookInsideRoad(a,tracks,road,fake,ntracks);
58 c->LookInsideRoad(tracks);
59 printf("Number of trackcandidates %d\n",tracks->GetNTracks());
61 AliL3Transform *transform = new AliL3Transform();
62 Int_t NRows[5][2] = {{ 0, 45},{46,77},{78,109},{110,141},{142,173}};
63 for(Int_t i=0; i<tracks->GetNTracks(); i++)
65 AliL3HoughTrack *track = (AliL3HoughTrack*)tracks->GetCheckedTrack(i);
66 if(!track) {printf("NO TRACK\n"); continue;}
67 peaks->Fill(track->GetKappa(),track->GetPhi0(),1);
68 //for(int row=0; row<174; row++)
69 for(int row=NRows[patch][0]; row<=NRows[patch][1]; row++)
72 track->GetCrossingPoint(row,xyz);
73 //track->GetCrossingPoint(slice,row,xyz);
74 //printf("Track does not cross line at row %d\n",row);
75 //transform->Local2Global(xyz,slice);
76 road->Fill(xyz[0],xyz[1],1);
78 //float an[2] = {track->GetPhi0(),0};
79 //transform->Local2GlobalAngle(an,slice);
80 printf("pt %f phi0 %f weight %d\n",track->GetPt(),track->GetPhi0(),track->GetWeight());
84 TCanvas *c1 = new TCanvas("c1","",900,900);
89 // peaks->Draw("same");
91 // TCanvas *c2 = new TCanvas("c2","",2);
95 //TCanvas *c3 = new TCanvas("c3","",2);
96 //road->SetMarkerStyle(5);
97 //road->SetMarkerColor(3);
99 road->SetMarkerStyle(9);
102 TCanvas *c4 = new TCanvas("c4","",2);
105 TCanvas *c5 = new TCanvas("c5","",2);
113 //----------------------------------------------------------------------------
116 TFile *file = new TFile(rootfile);
119 gAlice = (AliRun*)file->Get("gAlice");
122 TClonesArray *particles=gAlice->Particles();
123 Int_t n=particles->GetEntriesFast();
124 Float_t torad=TMath::Pi()/180;
125 Float_t phi_min = slice*20 - 10;
126 Float_t phi_max = slice*20 + 10;
128 for (Int_t j=0; j<n; j++) {
129 TParticle *p=(TParticle*)particles->UncheckedAt(j);
130 if (p->GetFirstMother()>=0) continue; //secondary particle
131 if(p->Eta() < eta[0] || p->Eta() > eta[1]) continue;
132 Double_t ptg=p->Pt(),pxg=p->Px(),pyg=p->Py(),pzg=p->Pz();
133 Double_t phi_part = TMath::ATan2(pyg,pxg);
134 if (phi_part < 0) phi_part += 2*TMath::Pi();
136 if(phi_part < phi_min*torad || phi_part > phi_max*torad) {continue;}
137 if(ptg<0.100) continue;
139 printf("Generated particle %d, with pt %f phi %f\n",p->GetPdgCode(),ptg,phi_part);