]> git.uio.no Git - u/mrichter/AliRoot.git/blame_incremental - EVE/alice-macros/MUON_displaySimu.C
Updated information
[u/mrichter/AliRoot.git] / EVE / alice-macros / MUON_displaySimu.C
... / ...
CommitLineData
1// $Id: MUON_display.C 24485 2008-03-13 15:27:38Z mtadel $
2// Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
3
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 **************************************************************************/
9
10class AliEveMUONData;
11class AliEveEventManager;
12
13AliEveMUONData *g_muon_data = 0;
14AliEveEventManager *g_muon_last_event = 0;
15
16Int_t g_currentEvent = -1;
17Bool_t g_fromRaw = kFALSE;
18
19AliMagFMaps *g_field = 0;
20
21void MUON_displaySimu(Bool_t fromRaw = kFALSE, Bool_t showTracks = kTRUE)
22{
23 //
24 // display from simulated digits (or produced raw data)
25 // tracks: ESD, Refs, MC
26 //
27
28 if (!AliMpSegmentation::Instance()) AliMpCDB::LoadMpSegmentation();
29 if (!AliMpDDLStore::Instance()) AliMpCDB::LoadDDLStore();
30
31 if (g_field == 0) {
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());
36 }
37
38 TTree* dt = 0;
39 TTree* ct = 0;
40 TTree* ht = 0;
41
42 if (gAliEveEvent == 0) {
43 printf("No alieve event: use alieve_init(...) \n");
44 return;
45 }
46
47 if (g_currentEvent == gAliEveEvent->GetEventId()) {
48 if (g_fromRaw == fromRaw) {
49 printf("Same event... \n");
50 return;
51 } else {
52 if (g_fromRaw) {
53 printf("Same event with digits.\n");
54 gAliEveEvent->GotoEvent(g_currentEvent);
55 } else {
56 printf("Same event with raw.\n");
57 gAliEveEvent->GotoEvent(g_currentEvent);
58 }
59 }
60 }
61
62 g_fromRaw = fromRaw;
63
64 TString dataPath = TString(gAliEveEvent->GetTitle());
65 dataPath.Append("/rawmuon.root");
66
67 AliRunLoader* rl = AliEveEventManager::AssertRunLoader();
68 g_muon_data = new AliEveMUONData;
69
70 if (!fromRaw) {
71 rl->LoadDigits("MUON");
72 dt = rl->GetTreeD("MUON", false);
73 if (dt == 0) {
74 cout << "No digits produced!" << endl;
75 } else {
76 cout << "With aliroot digits!" << endl;
77 g_muon_data->LoadDigits(dt);
78 }
79 } else {
80 if (gSystem->AccessPathName(dataPath.Data(),kFileExists)) {
81 cout << "No raw data produced!" << endl;
82 } else {
83 cout << "With raw digits!" << endl;
84 g_muon_data->LoadRaw(dataPath.Data());
85 }
86 }
87
88 rl->LoadRecPoints("MUON");
89 ct = rl->GetTreeR("MUON", false);
90
91 TString esdDataPath = TString(gAliEveEvent->GetTitle());
92 esdDataPath.Append("/AliESDs.root");
93 g_muon_data->LoadRecPointsFromESD(esdDataPath.Data());
94
95 rl->LoadHits("MUON");
96 ht = rl->GetTreeH("MUON", false);
97 g_muon_data->LoadHits(ht);
98
99 g_muon_last_event = gAliEveEvent;
100
101 g_currentEvent = g_muon_last_event->GetEventId();
102
103 gStyle->SetPalette(1, 0);
104
105 gEve->DisableRedraw();
106
107 TEveElementList* l = new TEveElementList("MUONChambers");
108 l->SetTitle("MUON chambers");
109 l->SetMainColor(Color_t(2));
110 gEve->AddElement(l);
111
112 for (Int_t ic = 0; ic < 14; ic++)
113 {
114 AliEveMUONChamber* mucha = new AliEveMUONChamber(ic);
115
116 mucha->SetFrameColor(2);
117 mucha->SetChamberID(ic);
118
119 mucha->SetDataSource(g_muon_data);
120
121 gEve->AddElement(mucha, l);
122 }
123
124 if (showTracks) {
125 MUON_ESD_tracks();
126 MUON_Ref_tracks();
127 MUON_MC_tracks();
128 }
129
130 gEve->Redraw3D(kTRUE);
131 gEve->EnableRedraw();
132}
133
134//______________________________________________________________________________
135void MUON_ESD_tracks()
136{
137 AliESDEvent* esd = AliEveEventManager::AssertESD();
138
139 TEveTrackList* lt = new TEveTrackList("ESD-Tracks");
140 lt->SetMainColor(Color_t(6));
141 //lt->SetMUON();
142
143 gEve->AddElement(lt);
144
145 AliESDMuonTrack *mt;
146 TEveRecTrack rt;
147 Int_t nMuonTracks = esd->GetNumberOfMuonTracks();
148 Int_t nTrack = 0;
149 for (Int_t n = 0; n < nMuonTracks; n++)
150 {
151 mt = esd->GetMuonTrack(n);
152
153 if (mt->GetNHit() == 0) continue;
154 nTrack++;
155
156 rt.fLabel = n;
157
158 AliEveMUONTrack* track = new AliEveMUONTrack(&rt, lt->GetPropagator());
159
160 track->MakeESDTrack(mt);
161
162 gEve->AddElement(track, lt);
163 }
164
165}
166
167//______________________________________________________________________________
168void MUON_Ref_tracks()
169{
170 TString dataPathESD = TString(gAliEveEvent->GetTitle());
171 dataPathESD.Append("/AliESDs.root");
172 TString dataPathSIM = TString(gAliEveEvent->GetTitle());
173 dataPathSIM.Append("/");
174
175 AliMUONRecoCheck recoCheck(dataPathESD.Data(),dataPathSIM.Data());
176 AliMUONVTrackStore* trackRefStore = recoCheck.ReconstructibleTracks(gAliEveEvent->GetEventId());
177 TIter next(trackRefStore->CreateIterator());
178 AliMUONTrack* trackRef;
179
180 TEveTrackList* lt = new TEveTrackList("Ref-Tracks");
181 lt->SetMainColor(Color_t(6));
182
183 gEve->AddElement(lt);
184
185 TEveRecTrack rt;
186 Int_t i = 0;
187 while ( ( trackRef = static_cast<AliMUONTrack*>(next()) ) )
188 {
189 rt.fLabel = i++;
190
191 AliEveMUONTrack* track = new AliEveMUONTrack(&rt, lt->GetPropagator());
192
193 track->MakeRefTrack(trackRef);
194
195 gEve->AddElement(track, lt);
196 }
197
198}
199
200//______________________________________________________________________________
201void MUON_MC_tracks()
202{
203 Double_t RADDEG = 180.0/TMath::Pi();
204
205 AliRunLoader* rl = AliEveEventManager::AssertRunLoader();
206 rl->LoadKinematics();
207 AliStack* stack = rl->Stack();
208
209 Int_t nPrimary = stack->GetNprimary();
210 Int_t nTracks = stack->GetNtrack();
211
212 TEveTrackList* lt = new TEveTrackList("MC-Tracks");
213 lt->SetMainColor(Color_t(6));
214 //lt->SetMUON();
215
216 gEve->AddElement(lt);
217
218 Int_t pdgCode;
219 TParticle *part;
220 TEveRecTrack rt;
221
222 Int_t nHitTracks = g_muon_data->GetNTrackList();
223 Int_t index;
224 for (Int_t i = 0; i < nHitTracks; i++)
225 {
226 index = g_muon_data->GetTrack(i);
227 if (index >= nTracks) {
228 cout << "TEveHit track index larger than number in stack!" << endl;
229 continue;
230 }
231
232 part = stack->Particle(index);
233 if (part->P() < 0.001) continue; // skip momenta < 1.0 MeV/c
234 rt.fLabel = i;
235
236 AliEveMUONTrack* track = new AliEveMUONTrack(&rt, lt->GetPropagator());
237
238 track->MakeMCTrack(part);
239
240 gEve->AddElement(track, lt);
241 }
242
243 rl->UnloadKinematics();
244}
245