]>
Commit | Line | Data |
---|---|---|
1 | void test(char *file="/prog/alice/data/Rawdata/1_patch/pp/event_0/",bool bin=true) | |
2 | { | |
3 | AliL3Logger l; | |
4 | // l.UnSet(AliL3Logger::kDebug); | |
5 | // l.UnSet(AliL3Logger::kAll); | |
6 | l.Set(AliL3Logger::kAll); | |
7 | //l.UseStdout(); | |
8 | l.UseStream(); | |
9 | ||
10 | Int_t fNEtaSegments = 1; | |
11 | ||
12 | Char_t histname[50]; | |
13 | Int_t i; | |
14 | ||
15 | int slice=1,patch=0; | |
16 | ||
17 | fHoughTransformer = new AliL3HoughTransformer(slice,patch,fNEtaSegments); | |
18 | fMemHandler = new AliL3FileHandler(); | |
19 | fMaxFinder = new AliL3HoughMaxFinder("KappaPhi"); | |
20 | ||
21 | fTransform = new AliL3Transform(); | |
22 | ||
23 | fHoughTransformer->CreateHistograms();//64,-0.012,0.012,64,-0.26,0.26); | |
24 | fHoughTransformer->SetThreshold(10); | |
25 | fTracks = new AliL3TrackArray("AliL3HoughTrack"); | |
26 | ||
27 | TH2F *road = new TH2F("road","",250,0,250,250,-125,125); | |
28 | TH2F *peaks = new TH2F("peaks","",64,-0.006,0.006,64,-0.26,0.26); | |
29 | peaks->SetMarkerStyle(3); | |
30 | peaks->SetMarkerColor(2); | |
31 | road->SetMarkerStyle(5); | |
32 | road->SetMarkerColor(2); | |
33 | ||
34 | Char_t name[256]; | |
35 | ||
36 | UInt_t ndigits=0; | |
37 | AliL3DigitRowData *digits =0; | |
38 | ||
39 | if(bin) //read data from binary files | |
40 | { | |
41 | Char_t fPath[256]; | |
42 | strcpy(fPath,file); | |
43 | fMemHandler->Free(); | |
44 | sprintf(name,"%sdigits_%d_%d.raw",fPath,slice,patch); | |
45 | fMemHandler->SetBinaryInput(name); | |
46 | digits = (AliL3DigitRowData *)fMemHandler->CompBinary2Memory(ndigits); | |
47 | fMemHandler->CloseBinaryInput(); | |
48 | } | |
49 | else //read data from root file | |
50 | { | |
51 | const Int_t NRows[6][2] = {{0,31},{32,63},{64,91},{92,119},{120,143},{144,175}}; | |
52 | const int nr[2] = {0,175}; | |
53 | fMemHandler->Free(); | |
54 | fMemHandler->SetAliInput(file); | |
55 | fMemHandler->Init(slice,patch,NRows[patch]); | |
56 | fMemHandler->Init(fTransform); | |
57 | digits=(AliL3DigitRowData *)fMemHandler->AliDigits2Memory(ndigits); | |
58 | fMemHandler->CloseAliInput(); | |
59 | } | |
60 | ||
61 | fHoughTransformer->SetInputData(ndigits,digits); | |
62 | fEval = new AliL3HoughEval(); | |
63 | fEval->InitTransformer(fHoughTransformer); | |
64 | //fEval->SetNumOfRowsToMiss(0); | |
65 | //fEval->SetNumOfPadsToLook(2); | |
66 | //fEval->RemoveFoundTracks(); | |
67 | AliL3HoughTrack *track; | |
68 | AliL3Histogram *histo; | |
69 | Int_t good_count; | |
70 | int eind=0; | |
71 | while(1) | |
72 | { | |
73 | printf("Transforming\n"); | |
74 | double init = AliL3Benchmark::GetCpuTime(); | |
75 | fHoughTransformer->TransformCircle(); | |
76 | double final = AliL3Benchmark::GetCpuTime(); | |
77 | printf("done in %f ms\n",(final-init)*1000); | |
78 | good_count=0; | |
79 | for(Int_t e=0; e<fNEtaSegments; e++) | |
80 | { | |
81 | histo = (AliL3Histogram*)fHoughTransformer->GetHistogram(e); | |
82 | if(!histo) continue; | |
83 | ||
84 | fMaxFinder->SetHistogram(histo); | |
85 | Int_t n=10; | |
86 | Int_t weight[10]; | |
87 | Float_t x[10]; | |
88 | Float_t y[10]; | |
89 | fMaxFinder->FindPeak1(x,y,weight,n); | |
90 | track = new AliL3HoughTrack(); | |
91 | track->SetTrackParameters(x[0],y[0],1); | |
92 | ||
93 | // if(!fEval->LookInsideRoad(track,e)) | |
94 | // continue; | |
95 | ||
96 | ||
97 | if(e==eind) | |
98 | { | |
99 | for(int t=0; t<176; t++) | |
100 | { | |
101 | if(t%10) continue; | |
102 | float xyz_tr[3]; | |
103 | track->GetCrossingPoint(t,xyz_tr); | |
104 | road->Fill(xyz_tr[0],xyz_tr[1],1); | |
105 | } | |
106 | } | |
107 | delete track; | |
108 | ||
109 | } | |
110 | ||
111 | break; | |
112 | if(good_count==0) | |
113 | break; | |
114 | } | |
115 | ||
116 | ||
117 | image = new AliL3Histogram("image","",250,0,250,250,-125,125); | |
118 | fEval->DisplayEtaSlice(eind,image); | |
119 | ||
120 | c1 = new TCanvas("c1","",1000,500); | |
121 | c1->Divide(2); | |
122 | c1->cd(1); | |
123 | histo = (AliL3Histogram*)fHoughTransformer->GetHistogram(eind); | |
124 | if(!histo) | |
125 | {printf("No histogram\n"); return;} | |
126 | histo->Draw("box"); | |
127 | ||
128 | peaks->Draw("same"); | |
129 | c1->cd(2); | |
130 | image->Draw(""); | |
131 | road->Draw("same"); | |
132 | } | |
133 | ||
134 | void process(char *digitfile="/prog/alice/data/Rawdata/6_patch/hg_42105_s1-3/",bool bin=true,char *trackfile="good_tracks") | |
135 | { | |
136 | AliL3Logger l; | |
137 | // l.UnSet(AliL3Logger::kDebug); | |
138 | // l.UnSet(AliL3Logger::kAll); | |
139 | //l.Set(AliL3Logger::kError); | |
140 | //l.UseStdout(); | |
141 | l.UseStream(); | |
142 | ||
143 | double torad = 3.1415/180; | |
144 | int slice=1; | |
145 | a = new AliL3Hough(digitfile,bin,100); | |
146 | a->ReadData(slice); | |
147 | a->Transform(); | |
148 | a->AddAllHistograms(); | |
149 | a->FindTrackCandidates(); | |
150 | a->Evaluate(3); | |
151 | a->MergePatches(); | |
152 | ||
153 | //a->MergeInternally(); | |
154 | ||
155 | //tracks = (AliL3TrackArray*)(a->GetInterMerger())->GetOutTracks(); | |
156 | //tracks = (AliL3TrackArray*)(a->GetMerger())->GetOutTracks(); | |
157 | tracks = (AliL3TrackArray*)a->GetTracks(0); | |
158 | //a->GetEval(0)->CompareMC(tracks,"good_tracks_hg4000_s1"); | |
159 | ||
160 | ||
161 | d = new AliL3HoughDisplay(); | |
162 | d->SetTracks(tracks); | |
163 | UInt_t size; | |
164 | int patch = 0; | |
165 | data = (AliL3DigitRowData*)a->GetMemHandler(patch)->GetDataPointer(size); | |
166 | //d->ShowData(data,size,slice,patch); | |
167 | //return; | |
168 | d->DisplayEvent(); | |
169 | //return; | |
170 | ||
171 | for(int i=0; i<tracks->GetNTracks(); i++) | |
172 | { | |
173 | AliL3HoughTrack *track = (AliL3HoughTrack*)tracks->GetCheckedTrack(i); | |
174 | if(!track) continue; | |
175 | printf("found pt %f phi0 %f eta %f weight %d rowange %d %d\n",track->GetPt(),track->GetPhi0(),track->GetEta(),track->GetWeight(),track->GetFirstRow(),track->GetLastRow()); | |
176 | } | |
177 | return; | |
178 | ||
179 | } | |
180 | ||
181 | void HistogramParticles(char *trackfile) | |
182 | { | |
183 | struct GoodTrack | |
184 | { | |
185 | ||
186 | Int_t label; | |
187 | Double_t eta; | |
188 | Int_t code; | |
189 | Double_t px,py,pz; | |
190 | Double_t pt; | |
191 | Int_t nhits; | |
192 | }; | |
193 | struct GoodTrack goodtracks[15000]; | |
194 | Int_t nt=0; | |
195 | ifstream in(trackfile); | |
196 | if(in) | |
197 | { | |
198 | printf("Reading good tracks from file %s\n",trackfile); | |
199 | while (in>>goodtracks[nt].label>>goodtracks[nt].code>> | |
200 | goodtracks[nt].px>>goodtracks[nt].py>>goodtracks[nt].pz>> | |
201 | goodtracks[nt].pt>>goodtracks[nt].eta>>goodtracks[nt].nhits) | |
202 | { | |
203 | nt++; | |
204 | if (nt==15000) | |
205 | { | |
206 | cerr<<"Too many good tracks"<<endl; | |
207 | break; | |
208 | } | |
209 | } | |
210 | } | |
211 | ||
212 | int fNEtaSegments = 150; | |
213 | Double_t etaslice = (0.9 - 0)/fNEtaSegments; | |
214 | Int_t *particles = new Int_t[fNEtaSegments]; | |
215 | for(Int_t i=0; i<fNEtaSegments; i++) | |
216 | particles[i]=0; | |
217 | ||
218 | for(Int_t i=0; i<nt; i++) | |
219 | { | |
220 | //if(goodtracks[i].nhits < 150) continue; | |
221 | if(goodtracks[i].pt < 0.5) continue; | |
222 | Int_t particleindex = (Int_t)(goodtracks[i].eta/etaslice); | |
223 | if(particleindex < 0 || particleindex >= fNEtaSegments) continue; | |
224 | particles[particleindex]++; | |
225 | } | |
226 | ||
227 | hist = new TH1F("hist","",21,0,20); | |
228 | for(int i=0; i<fNEtaSegments; i++) | |
229 | hist->Fill(particles[i]); | |
230 | ||
231 | ||
232 | c1 = new TCanvas("c1","",2); | |
233 | hist->Draw(); | |
234 | ||
235 | } |