1 // $Id: MUON_display.C 24485 2008-03-13 15:27:38Z mtadel $
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;
19 AliMagFMaps *g_field = 0;
21 void MUON_displaySimu(Bool_t fromRaw = kFALSE, Bool_t showTracks = kTRUE, Bool_t clustersFromESD = kTRUE)
24 // display from simulated digits (or produced raw data)
25 // tracks: ESD, Refs, MC
28 if (!AliMpSegmentation::Instance()) AliMpCDB::LoadMpSegmentation();
29 if (!AliMpDDLStore::Instance()) AliMpCDB::LoadDDLStore();
32 printf("Loading field map...\n");
33 g_field = new AliMagFMaps("Maps","Maps", 1, 1., 10., AliMagFMaps::k5kG);
34 AliTracker::SetFieldMap(g_field, kFALSE);
35 AliMUONTrackExtrap::SetField(AliTracker::GetFieldMap());
42 if (gAliEveEvent == 0) {
43 printf("No alieve event: use alieve_init(...) \n");
47 if (g_currentEvent == gAliEveEvent->GetEventId()) {
48 if (g_fromRaw == fromRaw) {
49 printf("Same event... \n");
53 printf("Same event with digits.\n");
54 gAliEveEvent->GotoEvent(g_currentEvent);
56 printf("Same event with raw.\n");
57 gAliEveEvent->GotoEvent(g_currentEvent);
64 TString dataPath = TString(gAliEveEvent->GetTitle());
65 dataPath.Append("/rawmuon.root");
67 AliRunLoader* rl = AliEveEventManager::AssertRunLoader();
68 g_muon_data = new AliEveMUONData;
71 rl->LoadDigits("MUON");
72 dt = rl->GetTreeD("MUON", false);
74 cout << "No digits produced!" << endl;
76 cout << "With aliroot digits!" << endl;
77 g_muon_data->LoadDigits(dt);
80 if (gSystem->AccessPathName(dataPath.Data(),kFileExists)) {
81 cout << "No raw data produced!" << endl;
83 cout << "With raw digits!" << endl;
84 g_muon_data->LoadRaw(dataPath.Data());
88 TString esdDataPath = TString(gAliEveEvent->GetTitle());
89 esdDataPath.Append("/AliESDs.root");
90 if (clustersFromESD) {
91 g_muon_data->LoadRecPointsFromESD(esdDataPath.Data());
93 rl->LoadRecPoints("MUON");
94 ct = rl->GetTreeR("MUON", false);
95 g_muon_data->LoadRecPoints(ct);
99 ht = rl->GetTreeH("MUON", false);
100 g_muon_data->LoadHits(ht);
102 g_muon_last_event = gAliEveEvent;
104 g_currentEvent = g_muon_last_event->GetEventId();
106 gStyle->SetPalette(1, 0);
108 gEve->DisableRedraw();
110 TEveElementList* l = new TEveElementList("MUONChambers");
111 l->SetTitle("MUON chambers");
115 for (Int_t ic = 0; ic < 14; ic++)
117 AliEveMUONChamber* mucha = new AliEveMUONChamber(ic);
119 mucha->SetFrameColor(2);
120 mucha->SetChamberID(ic);
122 mucha->SetDataSource(g_muon_data);
124 gEve->AddElement(mucha, l);
133 gEve->Redraw3D(kTRUE);
134 gEve->EnableRedraw();
137 //______________________________________________________________________________
138 void MUON_ESD_tracks()
140 AliESDEvent* esd = AliEveEventManager::AssertESD();
142 TEveTrackList* lt = new TEveTrackList("ESD-Tracks");
146 gEve->AddElement(lt);
150 Int_t nMuonTracks = esd->GetNumberOfMuonTracks();
152 for (Int_t n = 0; n < nMuonTracks; n++)
154 mt = esd->GetMuonTrack(n);
156 if (mt->GetNHit() == 0) continue;
161 AliEveMUONTrack* track = new AliEveMUONTrack(&rt, lt->GetPropagator());
163 track->MakeESDTrack(mt);
165 gEve->AddElement(track, lt);
170 //______________________________________________________________________________
171 void MUON_Ref_tracks()
173 TString dataPathESD = TString(gAliEveEvent->GetTitle());
174 dataPathESD.Append("/AliESDs.root");
175 TString dataPathSIM = TString(gAliEveEvent->GetTitle());
176 dataPathSIM.Append("/");
178 AliMUONRecoCheck recoCheck(dataPathESD.Data(),dataPathSIM.Data());
179 AliMUONVTrackStore* trackRefStore = recoCheck.ReconstructibleTracks(gAliEveEvent->GetEventId());
180 TIter next(trackRefStore->CreateIterator());
181 AliMUONTrack* trackRef;
183 TEveTrackList* lt = new TEveTrackList("Ref-Tracks");
186 gEve->AddElement(lt);
190 while ( ( trackRef = static_cast<AliMUONTrack*>(next()) ) )
194 AliEveMUONTrack* track = new AliEveMUONTrack(&rt, lt->GetPropagator());
196 track->MakeRefTrack(trackRef);
198 gEve->AddElement(track, lt);
203 //______________________________________________________________________________
204 void MUON_MC_tracks()
206 Double_t RADDEG = 180.0/TMath::Pi();
208 AliRunLoader* rl = AliEveEventManager::AssertRunLoader();
209 rl->LoadKinematics();
210 AliStack* stack = rl->Stack();
212 Int_t nPrimary = stack->GetNprimary();
213 Int_t nTracks = stack->GetNtrack();
215 TEveTrackList* lt = new TEveTrackList("MC-Tracks");
219 gEve->AddElement(lt);
225 Int_t nHitTracks = g_muon_data->GetNTrackList();
227 for (Int_t i = 0; i < nHitTracks; i++)
229 index = g_muon_data->GetTrack(i);
230 if (index >= nTracks) {
231 cout << "TEveHit track index larger than number in stack!" << endl;
235 part = stack->Particle(index);
236 if (part->P() < 0.001) continue; // skip momenta < 1.0 MeV/c
239 AliEveMUONTrack* track = new AliEveMUONTrack(&rt, lt->GetPropagator());
241 track->MakeMCTrack(part);
243 gEve->AddElement(track, lt);
246 rl->UnloadKinematics();