]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EVE/alice-macros/MUON_displaySimu.C
bug fix.
[u/mrichter/AliRoot.git] / EVE / alice-macros / MUON_displaySimu.C
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
10 class AliEveMUONData;
11 class AliEveEventManager;
12
13 AliEveMUONData     *g_muon_data       = 0;
14 AliEveEventManager *g_muon_last_event = 0;
15
16 Int_t  g_currentEvent = -1;
17 Bool_t g_fromRaw      = kFALSE;
18
19 AliMagFMaps *g_field = 0;
20
21 void MUON_displaySimu(Bool_t fromRaw = kFALSE, Bool_t showTracks = kTRUE, Bool_t clustersFromESD = 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   TString esdDataPath = TString(gAliEveEvent->GetTitle());
89   esdDataPath.Append("/AliESDs.root");
90   if (clustersFromESD) {
91     g_muon_data->LoadRecPointsFromESD(esdDataPath.Data());
92   } else {
93     rl->LoadRecPoints("MUON");
94     ct = rl->GetTreeR("MUON", false);
95     g_muon_data->LoadRecPoints(ct);
96   }
97   
98   rl->LoadHits("MUON");
99   ht = rl->GetTreeH("MUON", false);
100   g_muon_data->LoadHits(ht);
101   
102   g_muon_last_event = gAliEveEvent;
103
104   g_currentEvent = g_muon_last_event->GetEventId();
105
106   gStyle->SetPalette(1, 0);
107
108   gEve->DisableRedraw();
109
110   TEveElementList* l = new TEveElementList("MUONChambers");
111   l->SetTitle("MUON chambers");
112   l->SetMainColor(2);
113   gEve->AddElement(l);
114
115   for (Int_t ic = 0; ic < 14; ic++)
116   {
117     AliEveMUONChamber* mucha = new AliEveMUONChamber(ic);
118
119     mucha->SetFrameColor(2);
120     mucha->SetChamberID(ic);
121
122     mucha->SetDataSource(g_muon_data);
123
124     gEve->AddElement(mucha, l);
125   }
126
127   if (showTracks) {
128     MUON_ESD_tracks();
129     MUON_Ref_tracks();
130     MUON_MC_tracks();
131   }
132
133   gEve->Redraw3D(kTRUE);
134   gEve->EnableRedraw();
135 }
136
137 //______________________________________________________________________________
138 void MUON_ESD_tracks()
139 {
140   AliESDEvent* esd = AliEveEventManager::AssertESD();
141
142   TEveTrackList* lt = new TEveTrackList("ESD-Tracks");
143   lt->SetMainColor(6);
144   //lt->SetMUON();
145
146   gEve->AddElement(lt);
147
148   AliESDMuonTrack *mt;
149   TEveRecTrack rt;
150   Int_t nMuonTracks = esd->GetNumberOfMuonTracks();
151   Int_t nTrack = 0;
152   for (Int_t n = 0; n < nMuonTracks; n++)
153   {
154     mt = esd->GetMuonTrack(n);
155
156     if (mt->GetNHit() == 0) continue;
157     nTrack++;
158
159     rt.fLabel = n;
160
161     AliEveMUONTrack* track = new AliEveMUONTrack(&rt, lt->GetPropagator());
162
163     track->MakeESDTrack(mt);
164
165     gEve->AddElement(track, lt);
166   }
167
168 }
169
170 //______________________________________________________________________________
171 void MUON_Ref_tracks()
172 {
173   TString dataPathESD = TString(gAliEveEvent->GetTitle());
174   dataPathESD.Append("/AliESDs.root");
175   TString dataPathSIM = TString(gAliEveEvent->GetTitle());
176   dataPathSIM.Append("/");
177
178   AliMUONRecoCheck recoCheck(dataPathESD.Data(),dataPathSIM.Data());
179   AliMUONVTrackStore* trackRefStore = recoCheck.ReconstructibleTracks(gAliEveEvent->GetEventId());
180   TIter next(trackRefStore->CreateIterator());
181   AliMUONTrack* trackRef;
182
183   TEveTrackList* lt = new TEveTrackList("Ref-Tracks");
184   lt->SetMainColor(6);
185
186   gEve->AddElement(lt);
187
188   TEveRecTrack rt;
189   Int_t i = 0;
190   while ( ( trackRef = static_cast<AliMUONTrack*>(next()) ) )
191   {
192     rt.fLabel = i++;
193
194     AliEveMUONTrack* track = new AliEveMUONTrack(&rt, lt->GetPropagator());
195
196     track->MakeRefTrack(trackRef);
197
198     gEve->AddElement(track, lt);
199   }
200
201 }
202
203 //______________________________________________________________________________
204 void MUON_MC_tracks()
205 {
206   Double_t RADDEG = 180.0/TMath::Pi();
207
208   AliRunLoader* rl =  AliEveEventManager::AssertRunLoader();
209   rl->LoadKinematics();
210   AliStack* stack = rl->Stack();
211
212   Int_t nPrimary = stack->GetNprimary();
213   Int_t nTracks  = stack->GetNtrack();
214
215   TEveTrackList* lt = new TEveTrackList("MC-Tracks");
216   lt->SetMainColor(6);
217   //lt->SetMUON();
218
219   gEve->AddElement(lt);
220
221   Int_t pdgCode;
222   TParticle *part;
223   TEveRecTrack rt;
224
225   Int_t nHitTracks = g_muon_data->GetNTrackList();
226   Int_t index;
227   for (Int_t i = 0; i < nHitTracks; i++)
228   {
229     index = g_muon_data->GetTrack(i);
230     if (index >= nTracks) {
231       cout << "TEveHit track index larger than number in stack!" << endl;
232       continue;
233     }
234
235     part = stack->Particle(index);
236     if (part->P() < 0.001) continue;  // skip momenta < 1.0 MeV/c
237     rt.fLabel = i;
238
239     AliEveMUONTrack* track = new AliEveMUONTrack(&rt, lt->GetPropagator());
240
241     track->MakeMCTrack(part);
242
243     gEve->AddElement(track, lt);
244   }
245
246   rl->UnloadKinematics();
247 }
248