]> git.uio.no Git - u/mrichter/AliRoot.git/blame - EVE/alice-macros/muon_all.C
Changed default point-size in accordance with the new convention.
[u/mrichter/AliRoot.git] / EVE / alice-macros / muon_all.C
CommitLineData
34ea2f0a 1void muon_all() {
2
3 AliRunLoader* rl = Alieve::Event::AssertRunLoader();
4
5 rl->LoadDigits("MUON");
6 rl->LoadRecPoints("MUON");
7 rl->LoadTracks("MUON");
8
9 TTree* dt = rl->GetTreeD("MUON", false);
10 TTree* ct = rl->GetTreeR("MUON", false);
11 TTree* tt = rl->GetTreeT("MUON", false);
12
13 Alieve::MUONDigitsInfo* di = new Alieve::MUONDigitsInfo();
14 di->SetDTree(dt);
15 di->SetRTree(ct);
16 di->SetTTree(tt);
17
18 gStyle->SetPalette(1, 0);
19
20 rl->LoadgAlice();
21 gAlice = rl->GetAliRun();
22 AliMUON *pMUON = (AliMUON*)gAlice->GetModule("MUON");
23 const AliMUONGeometryTransformer* kGeomTransformer = pMUON->GetGeometryTransformer();
24
25 char name[128];
26 char title[128];
27
5b96ea20 28 gReve->DisableRedraw();
29
34ea2f0a 30 /* CHAMBERS */
31
32 sprintf(name,"M-Chambers");
33 Reve::RenderElementList* lch = new Reve::RenderElementList(name);
34 lch->SetTitle(title);
35 lch->SetMainColor((Color_t)2);
5b96ea20 36 gReve->AddRenderElement(lch);
34ea2f0a 37
38 for (Int_t i = 1; i <= 14; i++) {
39
40 Alieve::MUONModule* mch = new Alieve::MUONModule(i, -2, di, 0, 0, (Color_t)2);
5b96ea20 41 gReve->AddRenderElement(lch, mch);
34ea2f0a 42
43 }
44 /*
45 // draw pads in the trigger chambers
46 for (Int_t i = 11; i <= 14; i++) {
47
48 Alieve::MUONModule* mch1 = new Alieve::MUONModule(i, -3, di, 0, 0, (Color_t)2);
5b96ea20 49 gReve->AddRenderElement(lch, mch1);
34ea2f0a 50
51 Alieve::MUONModule* mch2 = new Alieve::MUONModule(i, -4, di, 0, 0, (Color_t)2);
5b96ea20 52 gReve->AddRenderElement(lch, mch2);
34ea2f0a 53
54 }
55 */
34ea2f0a 56
57 /* DIGITS */
58
34ea2f0a 59 for (Int_t iSta = 1; iSta <= 7; iSta++) {
60
61 for (Int_t iCha = 1; iCha <= 2; iCha++) {
62
63 sprintf(name,"M-ST%1dCH%1d/Digits",iSta,iCha);
64
65 Reve::RenderElementList* ld = new Reve::RenderElementList(name);
66
67 if (iSta <= 5) {
68 sprintf(title,"Station %1d chamber %1d (tracking)",iSta,iCha);
69 } else {
70 sprintf(title,"Station %1d chamber %1d (trigger)",iSta,iCha);
71 }
72
73 ld->SetTitle(title);
74 ld->SetMainColor((Color_t)4);
5b96ea20 75 gReve->AddRenderElement(ld);
34ea2f0a 76
77 Int_t iChamber = (iSta-1) * 2 + iCha;
78
79 AliMpDEIterator itd;
80 for ( itd.First(iChamber-1); ! itd.IsDone(); itd.Next() ) {
81
82 Int_t detElemId = itd.CurrentDE();
83
84 for (Int_t iCat = 1; iCat <=2; iCat++) {
85
86 Alieve::MUONModule* md = new Alieve::MUONModule(detElemId, iCat, di, 1, 0, (Color_t)2);
5b96ea20 87 gReve->AddRenderElement(ld, md);
34ea2f0a 88
89 }
90
91 }
34ea2f0a 92
93 }
94
95 }
96
97 /* CLUSTERS */
98
99 for (Int_t iSta = 1; iSta <= 5; iSta++) {
100
101 for (Int_t iCha = 1; iCha <= 2; iCha++) {
102
103 sprintf(name,"M-ST%1dCH%1d/Clusters",iSta,iCha);
104
105 Reve::RenderElementList* lc = new Reve::RenderElementList(name);
106
107 if (iSta <= 5) {
108 sprintf(title,"Station %1d chamber %1d (tracking)",iSta,iCha);
109 } else {
110 sprintf(title,"Station %1d chamber %1d (trigger)",iSta,iCha);
111 }
112
113 lc->SetTitle(title);
114 lc->SetMainColor((Color_t)4);
5b96ea20 115 gReve->AddRenderElement(lc);
34ea2f0a 116
117 Int_t iChamber = (iSta-1) * 2 + iCha;
118
119 AliMpDEIterator itc;
120 for ( itc.First(iChamber-1); ! itc.IsDone(); itc.Next() ) {
121
122 Int_t detElemId = itc.CurrentDE();
123
124 Alieve::MUONModule* mc = new Alieve::MUONModule(detElemId, 0, di, 0, 1, (Color_t)2);
5b96ea20 125 gReve->AddRenderElement(lc, mc);
34ea2f0a 126
127 }
128
34ea2f0a 129 }
130
131 }
132
34ea2f0a 133 /* TRACKS */
134
135 /* Get the z positions of the trigger chambers */
136
137 Float_t xg, yg, zg[4];
138
139 // MT11 = ST6CH1, detElemId = 1100 ... 1117
140 // MT12 = ST6CH2, detElemId = 1200 ... 1217
141 // MT21 = ST7CH1, detElemId = 1300 ... 1317
142 // MT22 = ST7CH2, detElemId = 1400 ... 1417
143
144 kGeomTransformer->Local2Global(1100, 0, 0, 0, xg, yg, zg[0]);
145 kGeomTransformer->Local2Global(1200, 0, 0, 0, xg, yg, zg[1]);
146 kGeomTransformer->Local2Global(1300, 0, 0, 0, xg, yg, zg[2]);
147 kGeomTransformer->Local2Global(1400, 0, 0, 0, xg, yg, zg[3]);
148
149 /* from tracking chambers */
150
151 TMatrixD smatrix(2,2);
152 TMatrixD sums(2,1);
153 TMatrixD res(2,1);
154
155 TClonesArray *tracks = 0;
156 tt->SetBranchAddress("MUONTrack",&tracks);
157 tt->GetEntry(0); // load event 0
158
159 Int_t ntracks = tracks->GetEntriesFast();
160 printf("Found %d tracks. \n",ntracks);
161
162 Reve::TrackList* lt = new Reve::TrackList("M-Tracks");
163 lt->SetMainColor(Color_t(6));
164
5b96ea20 165 gReve->AddRenderElement(lt);
34ea2f0a 166
167 Float_t xRec, xRec0;
168 Float_t yRec, yRec0;
169 Float_t zRec, zRec0;
170
171 AliMUONTrack *mt;
172 Reve::RecTrack rt;
173 Int_t count = 0;
174 for (Int_t n = 0; n < ntracks; n++) {
175
176 mt = (AliMUONTrack*) tracks->At(n);
177
178 printf("Match trigger %d \n",mt->GetMatchTrigger());
179
180 rt.label = n;
181
182 Reve::Track* track = new Reve::Track(&rt, lt->GetRnrStyle());
183
184 if (mt->GetMatchTrigger()) {
185 track->SetName(Form("MUONTrack %2d (MT)", rt.label));
186 track->SetLineColor(7);
187 } else {
188 track->SetName(Form("MUONTrack %2d ", rt.label));
189 track->SetLineColor(6);
190 }
191
192 AliMUONTrackParam *trackParam = mt->GetTrackParamAtVertex();
193 xRec0 = trackParam->GetNonBendingCoor();
194 yRec0 = trackParam->GetBendingCoor();
195 zRec0 = trackParam->GetZ();
196
197 track->SetPoint(count,zRec0,yRec0,xRec0);
198 count++;
199
200 Float_t xr[20], yr[20], zr[20];
201 for (Int_t i = 0; i < 10; i++) xr[i]=yr[i]=zr[i]=0.0;
202
203 Int_t nTrackHits = mt->GetNTrackHits();
204 printf("Nhits = %d \n",nTrackHits);
205 for (Int_t iHit = 0; iHit < nTrackHits; iHit++){
206 trackParamAtHit = mt->GetTrackParamAtHit();
207 trackParam = (AliMUONTrackParam*) trackParamAtHit->At(iHit);
208 xRec = trackParam->GetNonBendingCoor();
209 yRec = trackParam->GetBendingCoor();
210 zRec = trackParam->GetZ();
211
212 //printf("Hit %d x %f y %f z %f \n",iHit,xRec,yRec,zRec);
213
214 xr[iHit] = xRec;
215 yr[iHit] = yRec;
216 zr[iHit] = zRec;
217
218 track->SetPoint(count,zRec,yRec,xRec);
219 count++;
220
221 }
222
223 Float_t xrc[20], yrc[20], zrc[20];
224 Int_t nrc = 0;
225 if (mt->GetMatchTrigger()) {
226
227 for (Int_t i = 0; i < nTrackHits; i++) {
228 if (TMath::Abs(zr[i]) > 1000.0) {
229 //printf("Hit %d x %f y %f z %f \n",iHit,xr[i],yr[i],zr[i]);
230 xrc[nrc] = xr[i];
231 yrc[nrc] = yr[i];
232 zrc[nrc] = zr[i];
233 nrc++;
234 }
235 }
236
237 Double_t xv, yv;
238 Float_t ax, bx, ay, by;
239
240 // fit x-z
241 smatrix.Zero();
242 sums.Zero();
243 for (Int_t i = 0; i < nrc; i++) {
244 xv = (Double_t)zrc[i];
245 yv = (Double_t)xrc[i];
246 //printf("x-z: xv %f yv %f \n",xv,yv);
247 smatrix(0,0) += 1.0;
248 smatrix(1,1) += xv*xv;
249 smatrix(0,1) += xv;
250 smatrix(1,0) += xv;
251 sums(0,0) += yv;
252 sums(1,0) += xv*yv;
253 }
254 res = smatrix.Invert() * sums;
255 ax = res(0,0);
256 bx = res(1,0);
257
258 // fit y-z
259 smatrix.Zero();
260 sums.Zero();
261 for (Int_t i = 0; i < nrc; i++) {
262 xv = (Double_t)zrc[i];
263 yv = (Double_t)yrc[i];
264 //printf("y-z: xv %f yv %f \n",xv,yv);
265 smatrix(0,0) += 1.0;
266 smatrix(1,1) += xv*xv;
267 smatrix(0,1) += xv;
268 smatrix(1,0) += xv;
269 sums(0,0) += yv;
270 sums(1,0) += xv*yv;
271 }
272 res = smatrix.Invert() * sums;
273 ay = res(0,0);
274 by = res(1,0);
275
276 Float_t xtc, ytc, ztc;
277 for (Int_t ii = 0; ii < 4; ii++) {
278
279 ztc = zg[ii];
280 ytc = ay+by*zg[ii];
281 xtc = ax+bx*zg[ii];
282
283 //printf("tc: x %f y %f z %f \n",xtc,ytc,ztc);
284
285 track->SetPoint(count,ztc,ytc,xtc);
286 count++;
287
288 }
289
290 }
291
5b96ea20 292 gReve->AddRenderElement(lt, track);
34ea2f0a 293
294 }
295
5b96ea20 296 gReve->EnableRedraw();
34ea2f0a 297
298}