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;
15 Int_t g_currentEvent = -1;
16 Bool_t g_fromRaw = kFALSE;
19 void MUON_displaySimu(Bool_t fromRaw = kFALSE, Bool_t showTracks = kTRUE, Bool_t clustersFromESD = kTRUE)
22 // display from simulated digits (or produced raw data)
23 // tracks: ESD, Refs, MC
26 if (!AliMpSegmentation::Instance()) AliMpCDB::LoadMpSegmentation();
27 if (!AliMpDDLStore::Instance()) AliMpCDB::LoadDDLStore();
29 // set the magnetic field for track extrapolations
30 AliEveEventManager::AssertMagField();
31 AliMUONTrackExtrap::SetField();
37 if (AliEveEventManager::GetMaster() == 0) {
38 printf("No alieve event: use alieve_init(...) \n");
42 if (g_currentEvent == AliEveEventManager::GetMaster()->GetEventId()) {
43 if (g_fromRaw == fromRaw) {
44 printf("Same event... \n");
48 printf("Same event with digits.\n");
49 AliEveEventManager::GetMaster()->GotoEvent(g_currentEvent);
51 printf("Same event with raw.\n");
52 AliEveEventManager::GetMaster()->GotoEvent(g_currentEvent);
59 TString dataPath = TString(AliEveEventManager::GetMaster()->GetTitle());
60 dataPath.Append("/raw.root");
62 AliRunLoader* rl = AliEveEventManager::AssertRunLoader();
63 g_muon_data = new AliEveMUONData;
66 rl->LoadDigits("MUON");
67 dt = rl->GetTreeD("MUON", false);
69 cout << "No digits produced!" << endl;
71 cout << "With aliroot digits!" << endl;
72 g_muon_data->LoadDigits(dt);
75 if (gSystem->AccessPathName(dataPath.Data(),kFileExists)) {
76 cout << "No raw data produced!" << endl;
78 cout << "With raw digits!" << endl;
79 g_muon_data->LoadRaw(dataPath.Data());
83 TString esdDataPath = TString(AliEveEventManager::GetMaster()->GetTitle());
84 esdDataPath.Append("/AliESDs.root");
85 if (clustersFromESD) {
86 g_muon_data->LoadRecPointsFromESD(esdDataPath.Data());
88 rl->LoadRecPoints("MUON");
89 ct = rl->GetTreeR("MUON", false);
90 g_muon_data->LoadRecPoints(ct);
94 ht = rl->GetTreeH("MUON", false);
95 g_muon_data->LoadHits(ht);
97 g_currentEvent = AliEveEventManager::GetMaster()->GetEventId();
99 gStyle->SetPalette(1, 0);
101 gEve->DisableRedraw();
103 TEveElementList* l = new TEveElementList("MUONChambers");
104 l->SetTitle("MUON chambers");
108 for (Int_t ic = 0; ic < 14; ic++)
110 AliEveMUONChamber* mucha = new AliEveMUONChamber(ic);
112 mucha->SetFrameColor(2);
113 mucha->SetChamberID(ic);
115 mucha->SetDataSource(g_muon_data);
117 gEve->AddElement(mucha, l);
126 gEve->Redraw3D(kTRUE);
127 gEve->EnableRedraw();
130 //______________________________________________________________________________
131 void MUON_ESD_tracks()
133 AliESDEvent* esd = AliEveEventManager::AssertESD();
135 TEveTrackList* lt = new TEveTrackList("ESD-Tracks");
139 gEve->AddElement(lt);
143 Int_t nMuonTracks = esd->GetNumberOfMuonTracks();
145 for (Int_t n = 0; n < nMuonTracks; n++)
147 mt = esd->GetMuonTrack(n);
149 if (mt->GetNHit() == 0) continue;
154 AliEveMUONTrack* track = new AliEveMUONTrack(&rt, lt->GetPropagator());
156 track->MakeESDTrack(mt);
158 gEve->AddElement(track, lt);
163 //______________________________________________________________________________
164 void MUON_Ref_tracks()
166 TString dataPathESD = TString(AliEveEventManager::GetMaster()->GetTitle());
167 dataPathESD.Append("/AliESDs.root");
168 TString dataPathSIM = TString(AliEveEventManager::GetMaster()->GetTitle());
169 dataPathSIM.Append("/");
171 AliMUONRecoCheck recoCheck(dataPathESD.Data(),dataPathSIM.Data());
172 AliMUONVTrackStore* trackRefStore = recoCheck.ReconstructibleTracks(AliEveEventManager::GetMaster()->GetEventId());
173 TIter next(trackRefStore->CreateIterator());
174 AliMUONTrack* trackRef;
176 TEveTrackList* lt = new TEveTrackList("Ref-Tracks");
179 gEve->AddElement(lt);
183 while ( ( trackRef = static_cast<AliMUONTrack*>(next()) ) )
187 AliEveMUONTrack* track = new AliEveMUONTrack(&rt, lt->GetPropagator());
189 track->MakeRefTrack(trackRef);
191 gEve->AddElement(track, lt);
196 //______________________________________________________________________________
197 void MUON_MC_tracks()
199 Double_t RADDEG = 180.0/TMath::Pi();
201 AliRunLoader* rl = AliEveEventManager::AssertRunLoader();
202 rl->LoadKinematics();
203 AliStack* stack = rl->Stack();
205 Int_t nPrimary = stack->GetNprimary();
206 Int_t nTracks = stack->GetNtrack();
208 TEveTrackList* lt = new TEveTrackList("MC-Tracks");
212 gEve->AddElement(lt);
218 Int_t nHitTracks = g_muon_data->GetNTrackList();
220 for (Int_t i = 0; i < nHitTracks; i++)
222 index = g_muon_data->GetTrack(i);
223 if (index >= nTracks) {
224 cout << "TEveHit track index larger than number in stack!" << endl;
228 part = stack->Particle(index);
229 if (part->P() < 0.001) continue; // skip momenta < 1.0 MeV/c
232 AliEveMUONTrack* track = new AliEveMUONTrack(&rt, lt->GetPropagator());
234 track->MakeMCTrack(part);
236 gEve->AddElement(track, lt);
239 rl->UnloadKinematics();