7aa64edec1e0036fe9bf929e5971ce1ea849c168
[u/mrichter/AliRoot.git] / EVE / alice-macros / MUON_display.C
1 // $Id$
2 // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
3
4 /**************************************************************************
5  * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
6  * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for          *
7  * full copyright notice.                                                 *
8  **************************************************************************/
9 #include "TGLViewer.h"
10
11 namespace Alieve {
12 class AliEveMUONData;
13 class AliEveEventManager;
14 }
15
16 AliEveMUONData* g_muon_data = 0;
17 AliEveEventManager*    g_muon_last_event = 0;
18
19 Int_t g_currentEvent = -1;
20 Bool_t g_fromRaw = kFALSE;
21
22 void MUON_display(Bool_t fromRaw = kFALSE, Bool_t showTracks = kTRUE)
23 {
24
25   if (!AliMpSegmentation::Instance()) AliMpCDB::LoadMpSegmentation();
26   if (!AliMpDDLStore::Instance())     AliMpCDB::LoadDDLStore();
27
28   TTree* dt = 0;
29   TTree* ct = 0;
30   TTree* ht = 0;
31
32   if (gEvent == 0) {
33     printf("No alieve event: use alieve_init(...) \n");
34     return;
35   }
36
37   if (g_currentEvent == gEvent->GetEventId()) {
38     if (g_fromRaw == fromRaw) {
39       printf("Same event... \n");
40       return;
41     } else {
42       if (g_fromRaw) {
43         printf("Same event with digits.\n");
44         gEvent->GotoEvent(g_currentEvent);
45       } else {
46         printf("Same event with raw.\n");
47         gEvent->GotoEvent(g_currentEvent);
48       }
49     }
50   }
51
52   g_fromRaw = fromRaw;
53
54   TString dataPath = TString(gEvent->GetTitle());
55   dataPath.Append("/rawmuon.root");
56
57   AliRunLoader* rl =  AliEveEventManager::AssertRunLoader();
58   g_muon_data = new AliEveMUONData;
59
60   if (!fromRaw) {
61     rl->LoadDigits("MUON");
62     dt = rl->GetTreeD("MUON", false);
63     if (dt == 0) {
64       cout << "No digits produced!" << endl;
65     } else {
66       cout << "With aliroot digits!" << endl;
67       g_muon_data->LoadDigits(dt);
68     }
69   } else {
70     if (gSystem->AccessPathName(dataPath.Data(),kFileExists)) {
71       cout << "No raw data produced!" << endl;
72     } else {
73       cout << "With raw digits!" << endl;
74       g_muon_data->LoadRaw(dataPath.Data());
75     }
76   }
77
78   rl->LoadRecPoints("MUON");
79   ct = rl->GetTreeR("MUON", false);
80   g_muon_data->LoadRecPoints(ct);
81
82   rl->LoadHits("MUON");
83   ht = rl->GetTreeH("MUON", false);
84   g_muon_data->LoadHits(ht);
85
86   g_muon_last_event = gEvent;
87
88   g_currentEvent = g_muon_last_event->GetEventId();
89
90   gStyle->SetPalette(1, 0);
91
92   gEve->DisableRedraw();
93
94   TEveElementList* l = new TEveElementList("MUONChambers");
95   l->SetTitle("MUON chambers");
96   l->SetMainColor(Color_t(2));
97   gEve->AddElement(l);
98
99   for (Int_t ic = 0; ic < 14; ic++) {
100
101     AliEveMUONChamber* mucha = new AliEveMUONChamber(ic);
102
103     mucha->SetFrameColor(2);
104     mucha->SetChamberID(ic);
105
106     mucha->SetDataSource(g_muon_data);
107
108     gEve->AddElement(mucha, l);
109
110   }
111
112   if (showTracks) {
113     MUON_tracks();
114     MUON_trigger_tracks();
115     MUON_ESD_tracks();
116     MUON_Ref_tracks();
117     MUON_MC_tracks();
118   }
119
120   gEve->EnableRedraw();
121   gEve->Redraw3D(kTRUE);
122
123   /*
124   TGLViewer* view = dynamic_cast<TGLViewer*>(gEve->GetGLCanvas()->GetViewer3D());
125   view->ResetCamerasAfterNextUpdate();
126   gEve->GetGLCanvas()->Modified();
127   gEve->GetGLCanvas()->Update();
128   */
129 }
130
131 //______________________________________________________________________________
132 void MUON_tracks() {
133
134   AliRunLoader* rl =  AliEveEventManager::AssertRunLoader();
135   rl->LoadTracks("MUON");
136   TTree* tt = rl->GetTreeT("MUON", false);
137
138   TClonesArray *tracks = 0;
139   tt->SetBranchAddress("AliEveMUONTrack",&tracks);
140   tt->GetEntry(0);
141
142   Int_t ntracks = tracks->GetEntriesFast();
143   //printf("Found %d tracks. \n",ntracks);
144
145   TEveTrackList* lt = new TEveTrackList("M-Tracks");
146   lt->SetMainColor(Color_t(6));
147   //lt->SetMUON();
148
149   gEve->AddElement(lt);
150
151   TMatrixD smatrix(2,2);
152   TMatrixD sums(2,1);
153   TMatrixD res(2,1);
154
155   Float_t xRec, xRec0;
156   Float_t yRec, yRec0;
157   Float_t zRec, zRec0;
158
159   Float_t zg[4] = { -1603.5, -1620.5, -1703.5, -1720.5 };
160
161   AliMUONTrack *mt;
162   TEveRecTrack  rt;
163   Int_t count;
164   for (Int_t n = 0; n < ntracks; n++) {
165
166     count = 0;
167
168     mt = (AliMUONTrack*) tracks->At(n);
169
170     rt.label = n;
171
172     AliEveMUONTrack* track = new AliEveMUONTrack(&rt, lt->GetPropagator());
173
174     track->MakeMUONTrack(mt);
175
176     gEve->AddElement(track, lt);
177
178   }
179
180   rl->UnloadTracks("MUON");
181
182 }
183
184 //______________________________________________________________________________
185 void MUON_trigger_tracks() {
186
187   AliRunLoader* rl =  AliEveEventManager::AssertRunLoader();
188   rl->LoadTracks("MUON");
189   TTree* tt = rl->GetTreeT("MUON", false);
190
191   TClonesArray *tracks = 0;
192   tt->SetBranchAddress("MUONTriggerTrack",&tracks);
193   tt->GetEntry(0);
194
195   Int_t ntracks = tracks->GetEntriesFast();
196   //printf("Found %d tracks. \n",ntracks);
197
198   TEveTrackList* lt = new TEveTrackList("MT-Tracks");
199   lt->SetMainColor(Color_t(4));
200   //lt->SetMUON();
201
202   gEve->AddElement(lt);
203
204   TMatrixD smatrix(2,2);
205   TMatrixD sums(2,1);
206   TMatrixD res(2,1);
207
208   Float_t xRec, xRec0;
209   Float_t yRec, yRec0;
210   Float_t zRec, zRec0;
211
212   Float_t zg[4] = { -1603.5, -1620.5, -1703.5, -1720.5 };
213
214   AliMUONTriggerTrack *mt;
215   TEveRecTrack  rt;
216   Int_t count;
217   for (Int_t n = 0; n < ntracks; n++) {
218
219     count = 0;
220
221     mt = (AliMUONTriggerTrack*) tracks->At(n);
222
223     rt.label = n;
224
225     AliEveMUONTrack* track = new AliEveMUONTrack(&rt, lt->GetPropagator());
226
227     track->MakeMUONTriggerTrack(mt);
228
229     gEve->AddElement(track, lt);
230
231   }
232
233   rl->UnloadTracks("MUON");
234
235 }
236
237 //______________________________________________________________________________
238 void MUON_ESD_tracks() {
239
240   AliESDEvent* esd = AliEveEventManager::AssertESD();
241
242   TEveTrackList* lt = new TEveTrackList("ESD-Tracks");
243   lt->SetMainColor(Color_t(6));
244   //lt->SetMUON();
245
246   gEve->AddElement(lt);
247
248   AliESDMuonTrack *mt;
249   TEveRecTrack rt;
250   Int_t nMuonTracks = esd->GetNumberOfMuonTracks();
251   for (Int_t n = 0; n < nMuonTracks; n++) {
252
253     mt = esd->GetMuonTrack(n);
254
255     rt.label = n;
256
257     AliEveMUONTrack* track = new AliEveMUONTrack(&rt, lt->GetPropagator());
258
259     track->MakeESDTrack(mt);
260
261     gEve->AddElement(track, lt);
262
263   }
264
265 }
266
267 //______________________________________________________________________________
268 void MUON_Ref_tracks() {
269
270   TString dataPath = TString(gEvent->GetTitle());
271   dataPath.Append("/");
272
273   AliMUONRecoCheck recoCheck(dataPath.Data(),dataPath.Data());
274   AliMUONVTrackStore* trackRefStore = recoCheck.ReconstructibleTracks(gEvent->GetEventId());
275   TIter next(trackRefStore->CreateIterator());
276   AliMUONTrack* trackRef;
277
278   TEveTrackList* lt = new TEveTrackList("Ref-Tracks");
279   lt->SetMainColor(Color_t(6));
280
281   gEve->AddElement(lt);
282
283   TEveRecTrack rt;
284   Int_t i = 0;
285   while ( ( trackRef = static_cast<AliMUONTrack*>(next()) ) ) {
286
287     rt.label = i++;
288
289     AliEveMUONTrack* track = new AliEveMUONTrack(&rt, lt->GetPropagator());
290
291     track->MakeRefTrack(trackRef);
292
293     gEve->AddElement(track, lt);
294
295   }
296
297 }
298
299 //______________________________________________________________________________
300 void MUON_MC_tracks() {
301
302   Double_t RADDEG = 180.0/TMath::Pi();
303
304   AliRunLoader* rl =  AliEveEventManager::AssertRunLoader();
305   rl->LoadKinematics();
306   AliStack* stack = rl->Stack();
307
308   Int_t nPrimary = stack->GetNprimary();
309   Int_t nTracks  = stack->GetNtrack();
310
311   TEveTrackList* lt = new TEveTrackList("MC-Tracks");
312   lt->SetMainColor(Color_t(6));
313   //lt->SetMUON();
314
315   gEve->AddElement(lt);
316
317   Int_t pdgCode;
318   TParticle *part;
319   TEveRecTrack rt;
320
321   Int_t nHitTracks = g_muon_data->GetNTrackList();
322   Int_t index;
323   for (Int_t i = 0; i < nHitTracks; i++) {
324
325     index = g_muon_data->GetTrack(i);
326     if (index >= nTracks) {
327       cout << "TEveHit track index larger than number in stack!" << endl;
328       continue;
329     }
330
331     part = stack->Particle(index);
332     if (part->P() < 0.001) continue;  // skip momenta < 1.0 MeV/c
333     rt.label = i;
334
335     AliEveMUONTrack* track = new AliEveMUONTrack(&rt, lt->GetPropagator());
336
337     track->MakeMCTrack(part);
338
339     gEve->AddElement(track, lt);
340
341   }
342
343   rl->UnloadKinematics();
344
345 }
346