1 void hough_merge(char *rootfile,Bool_t MC=false)
7 Float_t xrange[2] = {-0.006 , 0.006}; //Pt 0.1->4GeV 0.006-0.006
8 //Float_t yrange[2] = {-0.17 , 0.17}; //slice 2 0.55->0.88
9 Float_t yrange[2] = {-0.26 , 0.26}; //slice 2 0.55->0.88
10 //Float_t yrange[2] = {0.55 , 0.88}; //slice 2 0.55->0.88
12 Int_t xr[2] = {0,250};
13 Int_t yr[2] = {-125,125};
14 TH1F *ntracks = new TH1F("ntracks","",100,0,200);
15 TH2F *raw = new TH2F("raw","",250,xr[0],xr[1],250,yr[0],yr[1]);
16 TH2F *road = new TH2F("road","",250,0,250,250,yr[0],yr[1]);
17 TH2F *fake = new TH2F("fake","",300,0,300,250,-125,125);
18 TH2F *peaks = new TH2F("peaks","",xbin,xrange[0],xrange[1],ybin,yrange[0],yrange[1]);
19 peaks->SetMarkerStyle(3);
20 peaks->SetMarkerColor(2);
22 int slice = 2,patch=0,n_phi_segments=40;
23 float eta[2] = {0.3,0.4};
24 // float eta[2] = {0.04,0.05};
26 AliL3HoughTransformer *a;
27 AliL3HoughMaxFinder *b;
28 AliL3HoughEval *c = new AliL3HoughEval(slice);
29 AliL3HoughMerge *d = new AliL3HoughMerge(slice);
31 for(int pat=0; pat<5; pat++)
33 a = new AliL3HoughTransformer(slice,pat,eta,n_phi_segments);
34 hist = new TH2F("hist","Parameter space",xbin,xrange[0],xrange[1],ybin,yrange[0],yrange[1]);
35 a->GetPixels(rootfile,raw);
36 a->Transform2Circle(hist,87);
38 b = new AliL3HoughMaxFinder("KappaPsi");
39 AliL3TrackArray *tracks = b->FindMaxima(hist);
41 c->LookInsideRoad(tracks);
42 d->FillTracks(tracks,pat);
49 TH2F *merge_hist = new TH2F("merge_hist","Parameter space",xbin,xrange[0],xrange[1],ybin,yrange[0],yrange[1]);
51 d->FillHisto(merge_hist);
54 b = new AliL3HoughMaxFinder(slice,pat);
55 b->FindMaxima(merge_hist);
57 AliL3TrackArray *mtrs = b->GetTracks();
59 c->CompareMC(rootfile,mtrs,eta);
61 AliL3Transform *transform = new AliL3Transform();
62 for(int tr=0; tr<mtrs->GetNTracks(); tr++)
64 AliL3HoughTrack *t = (AliL3HoughTrack*)mtrs->GetCheckedTrack(tr);
65 if(!t) {printf("NO TRACK11\n"); continue;}
66 if(t->GetMCid() < 0) {printf("Track %d was fake, weigth %d\n",tr,t->GetNHits()); continue;}
67 printf("Found pt %f weigth %d\n",t->GetPt(),t->GetNHits());
68 //printf("charge %f\n",t->GetCharge());
69 for(Int_t j=0; j<174; j++)
72 if(!t->GetCrossingPoint(j,xyz))
74 printf("Track does not cross line\n");
77 road->Fill(xyz[0],xyz[1],1);
85 TCanvas *c1 = new TCanvas("c1","",800,800);
89 merge_hist->Draw("box");
91 //TCanvas *c2 = new TCanvas("c2","",2);
95 //TCanvas *c3 = new TCanvas("c3","",2);
97 road->SetMarkerStyle(7);
103 //----------------------------------------------------------------------------
106 TFile *file = new TFile(rootfile);
109 gAlice = (AliRun*)file->Get("gAlice");
112 TClonesArray *particles=gAlice->Particles();
113 Int_t n=particles->GetEntriesFast();
114 Float_t torad=TMath::Pi()/180;
115 Float_t phi_min = slice*20 - 10;
116 Float_t phi_max = slice*20 + 10;
118 for (Int_t j=0; j<n; j++) {
119 TParticle *p=(TParticle*)particles->UncheckedAt(j);
120 if (p->GetFirstMother()>=0) continue; //secondary particle
121 if(p->Eta() < eta[0] || p->Eta() > eta[1]) continue;
122 Double_t ptg=p->Pt(),pxg=p->Px(),pyg=p->Py(),pzg=p->Pz();
123 Double_t phi_part = TMath::ATan2(pyg,pxg);
124 if (phi_part < 0) phi_part += 2*TMath::Pi();
126 if(phi_part < phi_min*torad || phi_part > phi_max*torad) {continue;}
127 if(ptg<0.100) continue;
129 for(int m=0; m<mtrs->GetNTracks(); m++)
131 AliL3HoughTrack *tra = (AliL3HoughTrack*)mtrs->GetCheckedTrack(m);
132 if(tra->GetMCid() != j) continue;
134 double dPt = fabs(ptg-tra->GetPt());
135 float phi0[2] = {tra->GetPhi0(),0};
136 transform->Local2GlobalAngle(phi0,slice);
137 double dPhi0 = fabs(phi_part-phi0[0]);
138 printf("Difference Pt %f Phi0 %f\n",dPt,dPhi0);
141 if(!found) printf("Track %d was not found\n",j);
142 printf("Generated particle %d, with pt %f phi %f\n",p->GetPdgCode(),ptg,phi_part);