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_displaySimu.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 <AliMUONRecoCheck.h>
31 #include <AliMUONTrack.h>
32 #include <AliMUONTrackExtrap.h>
33 #include <AliMUONVTrackStore.h>
35 #include <AliRunLoader.h>
36 #include <AliESDEvent.h>
37 #include <AliESDMuonTrack.h>
38 #include <AliEveEventManager.h>
39 #include <AliEveMUONData.h>
40 #include <AliEveMUONChamber.h>
41 #include <AliEveMUONTrack.h>
44 class AliEveEventManager;
47 AliEveMUONData *g_muon_data = 0;
49 Int_t g_currentEvent = -1;
50 Bool_t g_fromRaw = kFALSE;
52 void MUON_ESD_tracks();
53 void MUON_Ref_tracks();
54 void MUON_MC_tracks();
56 void MUON_displaySimu(Bool_t fromRaw = kFALSE, Bool_t showTracks = kTRUE, Bool_t clustersFromESD = kTRUE)
59 // display from simulated digits (or produced raw data)
60 // tracks: ESD, Refs, MC
63 if (!AliMpSegmentation::Instance()) AliMpCDB::LoadMpSegmentation();
64 if (!AliMpDDLStore::Instance()) AliMpCDB::LoadDDLStore();
66 // set the magnetic field for track extrapolations
67 AliEveEventManager::AssertMagField();
68 AliMUONTrackExtrap::SetField();
74 if (AliEveEventManager::GetMaster() == 0) {
75 printf("No alieve event: use alieve_init(...) \n");
79 if (g_currentEvent == AliEveEventManager::GetMaster()->GetEventId()) {
80 if (g_fromRaw == fromRaw) {
81 printf("Same event... \n");
85 printf("Same event with digits.\n");
86 AliEveEventManager::GetMaster()->GotoEvent(g_currentEvent);
88 printf("Same event with raw.\n");
89 AliEveEventManager::GetMaster()->GotoEvent(g_currentEvent);
96 TString dataPath = TString(AliEveEventManager::GetMaster()->GetTitle());
97 dataPath.Append("/raw.root");
99 AliRunLoader* rl = AliEveEventManager::AssertRunLoader();
100 g_muon_data = new AliEveMUONData;
103 rl->LoadDigits("MUON");
104 dt = rl->GetTreeD("MUON", false);
106 AliInfoGeneral("MUON_displaySimu.C", "No digits produced!");
108 AliInfoGeneral("MUON_displaySimu.C", "With aliroot digits!");
109 g_muon_data->LoadDigits(dt);
112 if (gSystem->AccessPathName(dataPath.Data(),kFileExists)) {
113 AliInfoGeneral("MUON_displaySimu.C", "No raw data produced!");
115 AliInfoGeneral("MUON_displaySimu.C", "With raw digits!");
116 g_muon_data->LoadRaw(dataPath.Data());
120 TString esdDataPath = TString(AliEveEventManager::GetMaster()->GetTitle());
121 esdDataPath.Append("/AliESDs.root");
122 if (clustersFromESD) {
123 g_muon_data->LoadRecPointsFromESD(esdDataPath.Data());
125 rl->LoadRecPoints("MUON");
126 ct = rl->GetTreeR("MUON", false);
127 g_muon_data->LoadRecPoints(ct);
130 rl->LoadHits("MUON");
131 ht = rl->GetTreeH("MUON", false);
132 g_muon_data->LoadHits(ht);
134 g_currentEvent = AliEveEventManager::GetMaster()->GetEventId();
136 gStyle->SetPalette(1, 0);
138 gEve->DisableRedraw();
140 TEveElementList* l = new TEveElementList("MUONChambers");
141 l->SetTitle("MUON chambers");
145 for (Int_t ic = 0; ic < 14; ic++)
147 AliEveMUONChamber* mucha = new AliEveMUONChamber(ic);
149 mucha->SetFrameColor(2);
150 mucha->SetChamberID(ic);
152 mucha->SetDataSource(g_muon_data);
154 gEve->AddElement(mucha, l);
163 gEve->Redraw3D(kTRUE);
164 gEve->EnableRedraw();
167 //______________________________________________________________________________
168 void MUON_ESD_tracks()
170 AliESDEvent* esd = AliEveEventManager::AssertESD();
172 TEveTrackList* lt = new TEveTrackList("ESD-Tracks");
176 gEve->AddElement(lt);
180 Int_t nMuonTracks = esd->GetNumberOfMuonTracks();
182 for (Int_t n = 0; n < nMuonTracks; n++)
184 mt = esd->GetMuonTrack(n);
186 if (mt->GetNHit() == 0) continue;
191 AliEveMUONTrack* track = new AliEveMUONTrack(&rt, lt->GetPropagator());
193 track->MakeESDTrack(mt);
195 gEve->AddElement(track, lt);
200 //______________________________________________________________________________
201 void MUON_Ref_tracks()
203 TString dataPathESD = TString(AliEveEventManager::GetMaster()->GetTitle());
204 dataPathESD.Append("/AliESDs.root");
205 TString dataPathSIM = TString(AliEveEventManager::GetMaster()->GetTitle());
206 dataPathSIM.Append("/");
208 AliMUONRecoCheck recoCheck(dataPathESD.Data(),dataPathSIM.Data());
209 AliMUONVTrackStore* trackRefStore = recoCheck.ReconstructibleTracks(AliEveEventManager::GetMaster()->GetEventId());
210 TIter next(trackRefStore->CreateIterator());
211 AliMUONTrack* trackRef;
213 TEveTrackList* lt = new TEveTrackList("Ref-Tracks");
216 gEve->AddElement(lt);
220 while ( ( trackRef = static_cast<AliMUONTrack*>(next()) ) )
224 AliEveMUONTrack* track = new AliEveMUONTrack(&rt, lt->GetPropagator());
226 track->MakeRefTrack(trackRef);
228 gEve->AddElement(track, lt);
233 //______________________________________________________________________________
234 void MUON_MC_tracks()
236 AliRunLoader* rl = AliEveEventManager::AssertRunLoader();
237 rl->LoadKinematics();
238 AliStack* stack = rl->Stack();
240 Int_t nTracks = stack->GetNtrack();
242 TEveTrackList* lt = new TEveTrackList("MC-Tracks");
246 gEve->AddElement(lt);
251 Int_t nHitTracks = g_muon_data->GetNTrackList();
253 for (Int_t i = 0; i < nHitTracks; i++)
255 index = g_muon_data->GetTrack(i);
256 if (index >= nTracks) {
257 AliInfoGeneral("MUON_displaySimu.C", "TEveHit track index larger than number in stack!");
261 part = stack->Particle(index);
262 if (part->P() < 0.001) continue; // skip momenta < 1.0 MeV/c
265 AliEveMUONTrack* track = new AliEveMUONTrack(&rt, lt->GetPropagator());
267 track->MakeMCTrack(part);
269 gEve->AddElement(track, lt);
272 rl->UnloadKinematics();