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 **************************************************************************/
10 /// \ingroup evemacros
11 /// \file MUON_displayData.C
13 /// \author B. Vulpescu, LPC
15 #if !defined(__CINT__) || defined(__MAKECINT__)
16 #include <Riostream.h>
22 #include <TEveManager.h>
23 #include <TEveElement.h>
24 #include <TEveTrack.h>
27 #include <AliMpSegmentation.h>
28 #include <AliMpDDLStore.h>
30 #include <AliMUONTrackExtrap.h>
31 #include <AliRunLoader.h>
32 #include <AliESDEvent.h>
33 #include <AliESDMuonTrack.h>
34 #include <AliEveEventManager.h>
35 #include <AliEveMUONData.h>
36 #include <AliEveMUONChamber.h>
37 #include <AliEveMUONTrack.h>
41 class AliEveEventManager;
43 AliEveMUONData *g_muon_data = 0;
45 Int_t g_currentEvent = -1;
46 Bool_t g_fromRaw = kFALSE;
48 void MUON_ESD_tracks();
50 void MUON_displayData(Bool_t fromRaw = kFALSE, Bool_t showTracks = kTRUE, Bool_t clustersFromESD = kTRUE)
53 // display from real data, eventually with recreated digits
57 if (!AliMpSegmentation::Instance()) AliMpCDB::LoadMpSegmentation();
58 if (!AliMpDDLStore::Instance()) AliMpCDB::LoadDDLStore();
60 // set the magnetic field for track extrapolations
61 AliEveEventManager::AssertMagField();
62 AliMUONTrackExtrap::SetField();
68 if (AliEveEventManager::GetMaster() == 0) {
69 printf("No alieve event: use alieve_init(...) \n");
73 if (g_currentEvent == AliEveEventManager::GetMaster()->GetEventId()) {
74 if (g_fromRaw == fromRaw) {
75 printf("Same event... \n");
79 printf("Same event with digits.\n");
80 AliEveEventManager::GetMaster()->GotoEvent(g_currentEvent);
82 printf("Same event with raw.\n");
83 AliEveEventManager::GetMaster()->GotoEvent(g_currentEvent);
90 TString dataPath = TString(AliEveEventManager::GetMaster()->GetTitle());
91 dataPath.Append("/raw.root");
93 AliRunLoader* rl = AliEveEventManager::AssertRunLoader();
94 g_muon_data = new AliEveMUONData;
97 rl->LoadDigits("MUON");
98 dt = rl->GetTreeD("MUON", false);
100 AliInfoGeneral("MUON_displayData.C", "No digits produced!");
102 AliInfoGeneral("MUON_displayData.C", "With aliroot digits!");
103 g_muon_data->LoadDigits(dt);
106 if (gSystem->AccessPathName(dataPath.Data(),kFileExists)) {
107 AliInfoGeneral("MUON_displayData.C", "No raw data produced!");
109 AliInfoGeneral("MUON_displayData.C", "With raw digits!");
110 g_muon_data->LoadRaw(dataPath.Data());
114 TString esdDataPath = TString(AliEveEventManager::GetMaster()->GetTitle());
115 esdDataPath.Append("/AliESDs.root");
116 if (clustersFromESD) {
117 g_muon_data->LoadRecPointsFromESD(esdDataPath.Data());
119 rl->LoadRecPoints("MUON");
120 ct = rl->GetTreeR("MUON", false);
121 g_muon_data->LoadRecPoints(ct);
124 g_currentEvent = AliEveEventManager::GetMaster()->GetEventId();
126 gStyle->SetPalette(1, 0);
128 gEve->DisableRedraw();
130 TEveElementList* l = new TEveElementList("MUONChambers");
131 l->SetTitle("MUON chambers");
135 for (Int_t ic = 0; ic < 14; ic++)
137 AliEveMUONChamber* mucha = new AliEveMUONChamber(ic);
139 mucha->SetFrameColor(2);
140 mucha->SetChamberID(ic);
142 mucha->SetDataSource(g_muon_data);
144 l->AddElement(mucha);
151 gEve->Redraw3D(kTRUE);
152 gEve->EnableRedraw();
155 //______________________________________________________________________________
156 void MUON_ESD_tracks()
158 AliESDEvent* esd = AliEveEventManager::AssertESD();
160 // TEveTrackList* lt = new TEveTrackList("ESD-Tracks");
161 AliEveMUONTrackList* lt = new AliEveMUONTrackList("ESD-Tracks");
165 gEve->AddElement(lt);
169 Int_t nMuonTracks = esd->GetNumberOfMuonTracks();
171 for (Int_t n = 0; n < nMuonTracks; n++)
173 mt = esd->GetMuonTrack(n);
175 if (mt->GetNHit() == 0) continue;
180 AliEveMUONTrack* track = new AliEveMUONTrack(&rt, lt->GetPropagator());
182 track->MakeESDTrack(mt);
184 lt->AddElement(track);
186 lt->HackMomentumLimits();