]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EVE/alice-macros/MUON_displaySimu.C
- introduction of gain scenarios (e.g. OROC only - for homogeneous gain in 11h)
[u/mrichter/AliRoot.git] / EVE / alice-macros / MUON_displaySimu.C
1 // $Id$
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
10 /// \ingroup evemacros
11 /// \file MUON_displaySimu.C
12 ///
13 /// \author B. Vulpescu, LPC
14
15 #if !defined(__CINT__) || defined(__MAKECINT__)
16 #include <Riostream.h>
17 #include <Rtypes.h>
18 #include <TTree.h>
19 #include <TStyle.h>
20 #include <TString.h>
21 #include <TSystem.h>
22 #include <TEveManager.h>
23 #include <TEveElement.h>
24 #include <TEveTrack.h>
25
26 #include <AliLog.h>
27 #include <AliMpSegmentation.h>
28 #include <AliMpDDLStore.h>
29 #include <AliMpCDB.h>
30 #include <AliMUONRecoCheck.h>
31 #include <AliMUONTrack.h>
32 #include <AliMUONTrackExtrap.h>
33 #include <AliMUONVTrackStore.h>
34 #include <AliStack.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>
42 #else
43 class AliEveMUONData;
44 class AliEveEventManager;
45 #endif
46
47 AliEveMUONData     *g_muon_data       = 0;
48
49 Int_t  g_currentEvent = -1;
50 Bool_t g_fromRaw      = kFALSE;
51
52 void MUON_ESD_tracks();
53 void MUON_Ref_tracks();
54 void MUON_MC_tracks();
55
56 void MUON_displaySimu(Bool_t fromRaw = kFALSE, Bool_t showTracks = kTRUE, Bool_t clustersFromESD = kTRUE)
57 {
58   //
59   // display from simulated digits (or produced raw data) 
60   // tracks: ESD, Refs, MC
61   // 
62
63   if (!AliMpSegmentation::Instance()) AliMpCDB::LoadMpSegmentation();
64   if (!AliMpDDLStore::Instance())     AliMpCDB::LoadDDLStore();
65
66   // set the magnetic field for track extrapolations
67   AliEveEventManager::AssertMagField();
68   AliMUONTrackExtrap::SetField();
69
70   TTree* dt = 0;
71   TTree* ct = 0;
72   TTree* ht = 0;
73
74   if (AliEveEventManager::GetMaster() == 0) {
75     printf("No alieve event: use alieve_init(...) \n");
76     return;
77   }
78
79   if (g_currentEvent == AliEveEventManager::GetMaster()->GetEventId()) {
80     if (g_fromRaw == fromRaw) {
81       printf("Same event... \n");
82       return;
83     } else {
84       if (g_fromRaw) {
85         printf("Same event with digits.\n");
86         AliEveEventManager::GetMaster()->GotoEvent(g_currentEvent);
87       } else {
88         printf("Same event with raw.\n");
89         AliEveEventManager::GetMaster()->GotoEvent(g_currentEvent);
90       }
91     }
92   }
93
94   g_fromRaw = fromRaw;
95
96   TString dataPath = TString(AliEveEventManager::GetMaster()->GetTitle());
97   dataPath.Append("/raw.root");
98
99   AliRunLoader* rl =  AliEveEventManager::AssertRunLoader();
100   g_muon_data = new AliEveMUONData;
101
102   if (!fromRaw) {
103     rl->LoadDigits("MUON");
104     dt = rl->GetTreeD("MUON", false);
105     if (dt == 0) {
106       AliInfoGeneral("MUON_displaySimu.C", "No digits produced!");
107     } else {
108       AliInfoGeneral("MUON_displaySimu.C", "With aliroot digits!");
109       g_muon_data->LoadDigits(dt);
110     }
111   } else {
112     if (gSystem->AccessPathName(dataPath.Data(),kFileExists)) {
113       AliInfoGeneral("MUON_displaySimu.C", "No raw data produced!");
114     } else {
115       AliInfoGeneral("MUON_displaySimu.C", "With raw digits!");
116       g_muon_data->LoadRaw(dataPath.Data());
117     }
118   }
119
120   TString esdDataPath = TString(AliEveEventManager::GetMaster()->GetTitle());
121   esdDataPath.Append("/AliESDs.root");
122   if (clustersFromESD) {
123     g_muon_data->LoadRecPointsFromESD(esdDataPath.Data());
124   } else {
125     rl->LoadRecPoints("MUON");
126     ct = rl->GetTreeR("MUON", false);
127     g_muon_data->LoadRecPoints(ct);
128   }
129   
130   rl->LoadHits("MUON");
131   ht = rl->GetTreeH("MUON", false);
132   g_muon_data->LoadHits(ht);
133   
134   g_currentEvent = AliEveEventManager::GetMaster()->GetEventId();
135
136   gStyle->SetPalette(1, 0);
137
138   gEve->DisableRedraw();
139
140   TEveElementList* l = new TEveElementList("MUONChambers");
141   l->SetTitle("MUON chambers");
142   l->SetMainColor(2);
143   gEve->AddElement(l);
144
145   for (Int_t ic = 0; ic < 14; ic++)
146   {
147     AliEveMUONChamber* mucha = new AliEveMUONChamber(ic);
148
149     mucha->SetFrameColor(2);
150     mucha->SetChamberID(ic);
151
152     mucha->SetDataSource(g_muon_data);
153
154     gEve->AddElement(mucha, l);
155   }
156
157   if (showTracks) {
158     MUON_ESD_tracks();
159     MUON_Ref_tracks();
160     MUON_MC_tracks();
161   }
162
163   gEve->Redraw3D(kTRUE);
164   gEve->EnableRedraw();
165 }
166
167 //______________________________________________________________________________
168 void MUON_ESD_tracks()
169 {
170   AliESDEvent* esd = AliEveEventManager::AssertESD();
171
172   TEveTrackList* lt = new TEveTrackList("ESD-Tracks");
173   lt->SetMainColor(6);
174   //lt->SetMUON();
175
176   gEve->AddElement(lt);
177
178   AliESDMuonTrack *mt;
179   TEveRecTrack rt;
180   Int_t nMuonTracks = esd->GetNumberOfMuonTracks();
181   Int_t nTrack = 0;
182   for (Int_t n = 0; n < nMuonTracks; n++)
183   {
184     mt = esd->GetMuonTrack(n);
185
186     if (mt->GetNHit() == 0) continue;
187     nTrack++;
188
189     rt.fLabel = n;
190
191     AliEveMUONTrack* track = new AliEveMUONTrack(&rt, lt->GetPropagator());
192
193     track->MakeESDTrack(mt);
194
195     gEve->AddElement(track, lt);
196   }
197
198 }
199
200 //______________________________________________________________________________
201 void MUON_Ref_tracks()
202 {
203   TString dataPathESD = TString(AliEveEventManager::GetMaster()->GetTitle());
204   dataPathESD.Append("/AliESDs.root");
205   TString dataPathSIM = TString(AliEveEventManager::GetMaster()->GetTitle());
206   dataPathSIM.Append("/");
207
208   AliMUONRecoCheck recoCheck(dataPathESD.Data(),dataPathSIM.Data());
209   AliMUONVTrackStore* trackRefStore = recoCheck.ReconstructibleTracks(AliEveEventManager::GetMaster()->GetEventId());
210   TIter next(trackRefStore->CreateIterator());
211   AliMUONTrack* trackRef;
212
213   TEveTrackList* lt = new TEveTrackList("Ref-Tracks");
214   lt->SetMainColor(6);
215
216   gEve->AddElement(lt);
217
218   TEveRecTrack rt;
219   Int_t i = 0;
220   while ( ( trackRef = static_cast<AliMUONTrack*>(next()) ) )
221   {
222     rt.fLabel = i++;
223
224     AliEveMUONTrack* track = new AliEveMUONTrack(&rt, lt->GetPropagator());
225
226     track->MakeRefTrack(trackRef);
227
228     gEve->AddElement(track, lt);
229   }
230
231 }
232
233 //______________________________________________________________________________
234 void MUON_MC_tracks()
235 {
236   AliRunLoader* rl =  AliEveEventManager::AssertRunLoader();
237   rl->LoadKinematics();
238   AliStack* stack = rl->Stack();
239
240   Int_t nTracks  = stack->GetNtrack();
241
242   TEveTrackList* lt = new TEveTrackList("MC-Tracks");
243   lt->SetMainColor(6);
244   //lt->SetMUON();
245
246   gEve->AddElement(lt);
247
248   TParticle *part;
249   TEveRecTrack rt;
250
251   Int_t nHitTracks = g_muon_data->GetNTrackList();
252   Int_t index;
253   for (Int_t i = 0; i < nHitTracks; i++)
254   {
255     index = g_muon_data->GetTrack(i);
256     if (index >= nTracks) {
257       AliInfoGeneral("MUON_displaySimu.C", "TEveHit track index larger than number in stack!");
258       continue;
259     }
260
261     part = stack->Particle(index);
262     if (part->P() < 0.001) continue;  // skip momenta < 1.0 MeV/c
263     rt.fLabel = i;
264
265     AliEveMUONTrack* track = new AliEveMUONTrack(&rt, lt->GetPropagator());
266
267     track->MakeMCTrack(part);
268
269     gEve->AddElement(track, lt);
270   }
271
272   rl->UnloadKinematics();
273 }
274