2 // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
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 **************************************************************************/
11 class AliEveEventManager;
13 AliEveMUONData *g_muon_data = 0;
14 AliEveEventManager *g_muon_last_event = 0;
16 Int_t g_currentEvent = -1;
17 Bool_t g_fromRaw = kFALSE;
20 void MUON_display(Bool_t fromRaw = kFALSE, Bool_t showTracks = kTRUE)
22 if (!AliMpSegmentation::Instance()) AliMpCDB::LoadMpSegmentation();
23 if (!AliMpDDLStore::Instance()) AliMpCDB::LoadDDLStore();
30 printf("No alieve event: use alieve_init(...) \n");
34 if (g_currentEvent == gEvent->GetEventId()) {
35 if (g_fromRaw == fromRaw) {
36 printf("Same event... \n");
40 printf("Same event with digits.\n");
41 gEvent->GotoEvent(g_currentEvent);
43 printf("Same event with raw.\n");
44 gEvent->GotoEvent(g_currentEvent);
51 TString dataPath = TString(gEvent->GetTitle());
52 dataPath.Append("/rawmuon.root");
54 AliRunLoader* rl = AliEveEventManager::AssertRunLoader();
55 g_muon_data = new AliEveMUONData;
58 rl->LoadDigits("MUON");
59 dt = rl->GetTreeD("MUON", false);
61 cout << "No digits produced!" << endl;
63 cout << "With aliroot digits!" << endl;
64 g_muon_data->LoadDigits(dt);
67 if (gSystem->AccessPathName(dataPath.Data(),kFileExists)) {
68 cout << "No raw data produced!" << endl;
70 cout << "With raw digits!" << endl;
71 g_muon_data->LoadRaw(dataPath.Data());
75 rl->LoadRecPoints("MUON");
76 ct = rl->GetTreeR("MUON", false);
77 g_muon_data->LoadRecPoints(ct);
80 ht = rl->GetTreeH("MUON", false);
81 g_muon_data->LoadHits(ht);
83 g_muon_last_event = gEvent;
85 g_currentEvent = g_muon_last_event->GetEventId();
87 gStyle->SetPalette(1, 0);
89 gEve->DisableRedraw();
91 TEveElementList* l = new TEveElementList("MUONChambers");
92 l->SetTitle("MUON chambers");
93 l->SetMainColor(Color_t(2));
96 for (Int_t ic = 0; ic < 14; ic++)
98 AliEveMUONChamber* mucha = new AliEveMUONChamber(ic);
100 mucha->SetFrameColor(2);
101 mucha->SetChamberID(ic);
103 mucha->SetDataSource(g_muon_data);
105 gEve->AddElement(mucha, l);
110 MUON_trigger_tracks();
116 gEve->Redraw3D(kTRUE);
117 gEve->EnableRedraw();
120 //______________________________________________________________________________
123 AliRunLoader* rl = AliEveEventManager::AssertRunLoader();
124 rl->LoadTracks("MUON");
125 TTree* tt = rl->GetTreeT("MUON", false);
127 TClonesArray *tracks = 0;
128 tt->SetBranchAddress("AliEveMUONTrack",&tracks);
131 Int_t ntracks = tracks->GetEntriesFast();
132 //printf("Found %d tracks. \n",ntracks);
134 TEveTrackList* lt = new TEveTrackList("M-Tracks");
135 lt->SetMainColor(Color_t(6));
138 gEve->AddElement(lt);
140 TMatrixD smatrix(2,2);
148 Float_t zg[4] = { -1603.5, -1620.5, -1703.5, -1720.5 };
153 for (Int_t n = 0; n < ntracks; n++)
157 mt = (AliMUONTrack*) tracks->At(n);
161 AliEveMUONTrack* track = new AliEveMUONTrack(&rt, lt->GetPropagator());
163 track->MakeMUONTrack(mt);
165 gEve->AddElement(track, lt);
168 rl->UnloadTracks("MUON");
172 //______________________________________________________________________________
173 void MUON_trigger_tracks()
175 AliRunLoader* rl = AliEveEventManager::AssertRunLoader();
176 rl->LoadTracks("MUON");
177 TTree* tt = rl->GetTreeT("MUON", false);
179 TClonesArray *tracks = 0;
180 tt->SetBranchAddress("MUONTriggerTrack",&tracks);
183 Int_t ntracks = tracks->GetEntriesFast();
184 //printf("Found %d tracks. \n",ntracks);
186 TEveTrackList* lt = new TEveTrackList("MT-Tracks");
187 lt->SetMainColor(Color_t(4));
190 gEve->AddElement(lt);
192 TMatrixD smatrix(2,2);
200 Float_t zg[4] = { -1603.5, -1620.5, -1703.5, -1720.5 };
202 AliMUONTriggerTrack *mt;
205 for (Int_t n = 0; n < ntracks; n++)
209 mt = (AliMUONTriggerTrack*) tracks->At(n);
213 AliEveMUONTrack* track = new AliEveMUONTrack(&rt, lt->GetPropagator());
215 track->MakeMUONTriggerTrack(mt);
217 gEve->AddElement(track, lt);
220 rl->UnloadTracks("MUON");
224 //______________________________________________________________________________
225 void MUON_ESD_tracks()
227 AliESDEvent* esd = AliEveEventManager::AssertESD();
229 TEveTrackList* lt = new TEveTrackList("ESD-Tracks");
230 lt->SetMainColor(Color_t(6));
233 gEve->AddElement(lt);
237 Int_t nMuonTracks = esd->GetNumberOfMuonTracks();
238 for (Int_t n = 0; n < nMuonTracks; n++)
240 mt = esd->GetMuonTrack(n);
244 AliEveMUONTrack* track = new AliEveMUONTrack(&rt, lt->GetPropagator());
246 track->MakeESDTrack(mt);
248 gEve->AddElement(track, lt);
253 //______________________________________________________________________________
254 void MUON_Ref_tracks()
256 TString dataPath = TString(gEvent->GetTitle());
257 dataPath.Append("/");
259 AliMUONRecoCheck recoCheck(dataPath.Data(),dataPath.Data());
260 AliMUONVTrackStore* trackRefStore = recoCheck.ReconstructibleTracks(gEvent->GetEventId());
261 TIter next(trackRefStore->CreateIterator());
262 AliMUONTrack* trackRef;
264 TEveTrackList* lt = new TEveTrackList("Ref-Tracks");
265 lt->SetMainColor(Color_t(6));
267 gEve->AddElement(lt);
271 while ( ( trackRef = static_cast<AliMUONTrack*>(next()) ) )
275 AliEveMUONTrack* track = new AliEveMUONTrack(&rt, lt->GetPropagator());
277 track->MakeRefTrack(trackRef);
279 gEve->AddElement(track, lt);
284 //______________________________________________________________________________
285 void MUON_MC_tracks()
287 Double_t RADDEG = 180.0/TMath::Pi();
289 AliRunLoader* rl = AliEveEventManager::AssertRunLoader();
290 rl->LoadKinematics();
291 AliStack* stack = rl->Stack();
293 Int_t nPrimary = stack->GetNprimary();
294 Int_t nTracks = stack->GetNtrack();
296 TEveTrackList* lt = new TEveTrackList("MC-Tracks");
297 lt->SetMainColor(Color_t(6));
300 gEve->AddElement(lt);
306 Int_t nHitTracks = g_muon_data->GetNTrackList();
308 for (Int_t i = 0; i < nHitTracks; i++)
310 index = g_muon_data->GetTrack(i);
311 if (index >= nTracks) {
312 cout << "TEveHit track index larger than number in stack!" << endl;
316 part = stack->Particle(index);
317 if (part->P() < 0.001) continue; // skip momenta < 1.0 MeV/c
320 AliEveMUONTrack* track = new AliEveMUONTrack(&rt, lt->GetPropagator());
322 track->MakeMCTrack(part);
324 gEve->AddElement(track, lt);
327 rl->UnloadKinematics();