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_display(Bool_t fromRaw = kFALSE, Bool_t showTracks = kTRUE)
23 if (!AliMpSegmentation::Instance()) AliMpCDB::LoadMpSegmentation();
24 if (!AliMpDDLStore::Instance()) AliMpCDB::LoadDDLStore();
27 printf("Loading field map...\n");
28 g_field = new AliMagFMaps("Maps","Maps", 1, 1., 10., AliMagFMaps::k5kG);
29 AliTracker::SetFieldMap(g_field, kFALSE);
30 AliMUONTrackExtrap::SetField(AliTracker::GetFieldMap());
37 if (gAliEveEvent == 0) {
38 printf("No alieve event: use alieve_init(...) \n");
42 if (g_currentEvent == gAliEveEvent->GetEventId()) {
43 if (g_fromRaw == fromRaw) {
44 printf("Same event... \n");
48 printf("Same event with digits.\n");
49 gAliEveEvent->GotoEvent(g_currentEvent);
51 printf("Same event with raw.\n");
52 gAliEveEvent->GotoEvent(g_currentEvent);
59 TString dataPath = TString(gAliEveEvent->GetTitle());
60 dataPath.Append("/rawmuon.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 rl->LoadRecPoints("MUON");
84 ct = rl->GetTreeR("MUON", false);
86 TString esdDataPath = TString(gAliEveEvent->GetTitle());
87 esdDataPath.Append("/AliESDs.root");
88 g_muon_data->LoadRecPointsFromESD(esdDataPath.Data());
91 ht = rl->GetTreeH("MUON", false);
92 g_muon_data->LoadHits(ht);
94 g_muon_last_event = gAliEveEvent;
96 g_currentEvent = g_muon_last_event->GetEventId();
98 gStyle->SetPalette(1, 0);
100 gEve->DisableRedraw();
102 TEveElementList* l = new TEveElementList("MUONChambers");
103 l->SetTitle("MUON chambers");
104 l->SetMainColor(Color_t(2));
107 for (Int_t ic = 0; ic < 14; ic++)
109 AliEveMUONChamber* mucha = new AliEveMUONChamber(ic);
111 mucha->SetFrameColor(2);
112 mucha->SetChamberID(ic);
114 mucha->SetDataSource(g_muon_data);
116 gEve->AddElement(mucha, l);
125 gEve->Redraw3D(kTRUE);
126 gEve->EnableRedraw();
129 //______________________________________________________________________________
132 AliRunLoader* rl = AliEveEventManager::AssertRunLoader();
133 rl->LoadTracks("MUON");
134 TTree* tt = rl->GetTreeT("MUON", false);
136 TClonesArray *tracks = 0;
137 tt->SetBranchAddress("AliEveMUONTrack",&tracks);
140 Int_t ntracks = tracks->GetEntriesFast();
141 //printf("Found %d tracks. \n",ntracks);
143 TEveTrackList* lt = new TEveTrackList("M-Tracks");
144 lt->SetMainColor(Color_t(6));
147 gEve->AddElement(lt);
149 TMatrixD smatrix(2,2);
157 Float_t zg[4] = { -1603.5, -1620.5, -1703.5, -1720.5 };
162 for (Int_t n = 0; n < ntracks; n++)
166 mt = (AliMUONTrack*) tracks->At(n);
170 AliEveMUONTrack* track = new AliEveMUONTrack(&rt, lt->GetPropagator());
172 track->MakeMUONTrack(mt);
174 gEve->AddElement(track, lt);
177 rl->UnloadTracks("MUON");
181 //______________________________________________________________________________
182 void MUON_trigger_tracks()
184 AliRunLoader* rl = AliEveEventManager::AssertRunLoader();
185 rl->LoadTracks("MUON");
186 TTree* tt = rl->GetTreeT("MUON", false);
188 TClonesArray *tracks = 0;
189 tt->SetBranchAddress("MUONTriggerTrack",&tracks);
192 Int_t ntracks = tracks->GetEntriesFast();
193 //printf("Found %d tracks. \n",ntracks);
195 TEveTrackList* lt = new TEveTrackList("MT-Tracks");
196 lt->SetMainColor(Color_t(4));
199 gEve->AddElement(lt);
201 TMatrixD smatrix(2,2);
209 Float_t zg[4] = { -1603.5, -1620.5, -1703.5, -1720.5 };
211 AliMUONTriggerTrack *mt;
214 for (Int_t n = 0; n < ntracks; n++)
218 mt = (AliMUONTriggerTrack*) tracks->At(n);
222 AliEveMUONTrack* track = new AliEveMUONTrack(&rt, lt->GetPropagator());
224 track->MakeMUONTriggerTrack(mt);
226 gEve->AddElement(track, lt);
229 rl->UnloadTracks("MUON");
233 //______________________________________________________________________________
234 void MUON_ESD_tracks()
236 AliESDEvent* esd = AliEveEventManager::AssertESD();
238 TEveTrackList* lt = new TEveTrackList("ESD-Tracks");
239 lt->SetMainColor(Color_t(6));
242 gEve->AddElement(lt);
246 Int_t nMuonTracks = esd->GetNumberOfMuonTracks();
247 for (Int_t n = 0; n < nMuonTracks; n++)
249 mt = esd->GetMuonTrack(n);
253 AliEveMUONTrack* track = new AliEveMUONTrack(&rt, lt->GetPropagator());
255 track->MakeESDTrack(mt);
257 gEve->AddElement(track, lt);
262 //______________________________________________________________________________
263 void MUON_Ref_tracks()
265 TString dataPathESD = TString(gAliEveEvent->GetTitle());
266 dataPathESD.Append("/AliESDs.root");
267 TString dataPathSIM = TString(gAliEveEvent->GetTitle());
268 dataPathSIM.Append("/");
270 AliMUONRecoCheck recoCheck(dataPathESD.Data(),dataPathSIM.Data());
271 AliMUONVTrackStore* trackRefStore = recoCheck.ReconstructibleTracks(gAliEveEvent->GetEventId());
272 TIter next(trackRefStore->CreateIterator());
273 AliMUONTrack* trackRef;
275 TEveTrackList* lt = new TEveTrackList("Ref-Tracks");
276 lt->SetMainColor(Color_t(6));
278 gEve->AddElement(lt);
282 while ( ( trackRef = static_cast<AliMUONTrack*>(next()) ) )
286 AliEveMUONTrack* track = new AliEveMUONTrack(&rt, lt->GetPropagator());
288 track->MakeRefTrack(trackRef);
290 gEve->AddElement(track, lt);
295 //______________________________________________________________________________
296 void MUON_MC_tracks()
298 Double_t RADDEG = 180.0/TMath::Pi();
300 AliRunLoader* rl = AliEveEventManager::AssertRunLoader();
301 rl->LoadKinematics();
302 AliStack* stack = rl->Stack();
304 Int_t nPrimary = stack->GetNprimary();
305 Int_t nTracks = stack->GetNtrack();
307 TEveTrackList* lt = new TEveTrackList("MC-Tracks");
308 lt->SetMainColor(Color_t(6));
311 gEve->AddElement(lt);
317 Int_t nHitTracks = g_muon_data->GetNTrackList();
319 for (Int_t i = 0; i < nHitTracks; i++)
321 index = g_muon_data->GetTrack(i);
322 if (index >= nTracks) {
323 cout << "TEveHit track index larger than number in stack!" << endl;
327 part = stack->Particle(index);
328 if (part->P() < 0.001) continue; // skip momenta < 1.0 MeV/c
331 AliEveMUONTrack* track = new AliEveMUONTrack(&rt, lt->GetPropagator());
333 track->MakeMCTrack(part);
335 gEve->AddElement(track, lt);
338 rl->UnloadKinematics();