]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EVE/alice-macros/MUON_displaySimu.C
In muon-related macros in EVE:
[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 class AliEveMUONData;
16 class AliEveEventManager;
17
18 AliEveMUONData     *g_muon_data       = 0;
19
20 Int_t  g_currentEvent = -1;
21 Bool_t g_fromRaw      = kFALSE;
22
23
24 void MUON_displaySimu(Bool_t fromRaw = kFALSE, Bool_t showTracks = kTRUE, Bool_t clustersFromESD = kTRUE)
25 {
26   //
27   // display from simulated digits (or produced raw data) 
28   // tracks: ESD, Refs, MC
29   // 
30
31   if (!AliMpSegmentation::Instance()) AliMpCDB::LoadMpSegmentation();
32   if (!AliMpDDLStore::Instance())     AliMpCDB::LoadDDLStore();
33
34   // set the magnetic field for track extrapolations
35   AliEveEventManager::AssertMagField();
36   AliMUONTrackExtrap::SetField();
37
38   TTree* dt = 0;
39   TTree* ct = 0;
40   TTree* ht = 0;
41
42   if (AliEveEventManager::GetMaster() == 0) {
43     printf("No alieve event: use alieve_init(...) \n");
44     return;
45   }
46
47   if (g_currentEvent == AliEveEventManager::GetMaster()->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         AliEveEventManager::GetMaster()->GotoEvent(g_currentEvent);
55       } else {
56         printf("Same event with raw.\n");
57         AliEveEventManager::GetMaster()->GotoEvent(g_currentEvent);
58       }
59     }
60   }
61
62   g_fromRaw = fromRaw;
63
64   TString dataPath = TString(AliEveEventManager::GetMaster()->GetTitle());
65   dataPath.Append("/raw.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(AliEveEventManager::GetMaster()->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_currentEvent = AliEveEventManager::GetMaster()->GetEventId();
103
104   gStyle->SetPalette(1, 0);
105
106   gEve->DisableRedraw();
107
108   TEveElementList* l = new TEveElementList("MUONChambers");
109   l->SetTitle("MUON chambers");
110   l->SetMainColor(2);
111   gEve->AddElement(l);
112
113   for (Int_t ic = 0; ic < 14; ic++)
114   {
115     AliEveMUONChamber* mucha = new AliEveMUONChamber(ic);
116
117     mucha->SetFrameColor(2);
118     mucha->SetChamberID(ic);
119
120     mucha->SetDataSource(g_muon_data);
121
122     gEve->AddElement(mucha, l);
123   }
124
125   if (showTracks) {
126     MUON_ESD_tracks();
127     MUON_Ref_tracks();
128     MUON_MC_tracks();
129   }
130
131   gEve->Redraw3D(kTRUE);
132   gEve->EnableRedraw();
133 }
134
135 //______________________________________________________________________________
136 void MUON_ESD_tracks()
137 {
138   AliESDEvent* esd = AliEveEventManager::AssertESD();
139
140   TEveTrackList* lt = new TEveTrackList("ESD-Tracks");
141   lt->SetMainColor(6);
142   //lt->SetMUON();
143
144   gEve->AddElement(lt);
145
146   AliESDMuonTrack *mt;
147   TEveRecTrack rt;
148   Int_t nMuonTracks = esd->GetNumberOfMuonTracks();
149   Int_t nTrack = 0;
150   for (Int_t n = 0; n < nMuonTracks; n++)
151   {
152     mt = esd->GetMuonTrack(n);
153
154     if (mt->GetNHit() == 0) continue;
155     nTrack++;
156
157     rt.fLabel = n;
158
159     AliEveMUONTrack* track = new AliEveMUONTrack(&rt, lt->GetPropagator());
160
161     track->MakeESDTrack(mt);
162
163     gEve->AddElement(track, lt);
164   }
165
166 }
167
168 //______________________________________________________________________________
169 void MUON_Ref_tracks()
170 {
171   TString dataPathESD = TString(AliEveEventManager::GetMaster()->GetTitle());
172   dataPathESD.Append("/AliESDs.root");
173   TString dataPathSIM = TString(AliEveEventManager::GetMaster()->GetTitle());
174   dataPathSIM.Append("/");
175
176   AliMUONRecoCheck recoCheck(dataPathESD.Data(),dataPathSIM.Data());
177   AliMUONVTrackStore* trackRefStore = recoCheck.ReconstructibleTracks(AliEveEventManager::GetMaster()->GetEventId());
178   TIter next(trackRefStore->CreateIterator());
179   AliMUONTrack* trackRef;
180
181   TEveTrackList* lt = new TEveTrackList("Ref-Tracks");
182   lt->SetMainColor(6);
183
184   gEve->AddElement(lt);
185
186   TEveRecTrack rt;
187   Int_t i = 0;
188   while ( ( trackRef = static_cast<AliMUONTrack*>(next()) ) )
189   {
190     rt.fLabel = i++;
191
192     AliEveMUONTrack* track = new AliEveMUONTrack(&rt, lt->GetPropagator());
193
194     track->MakeRefTrack(trackRef);
195
196     gEve->AddElement(track, lt);
197   }
198
199 }
200
201 //______________________________________________________________________________
202 void MUON_MC_tracks()
203 {
204   Double_t RADDEG = 180.0/TMath::Pi();
205
206   AliRunLoader* rl =  AliEveEventManager::AssertRunLoader();
207   rl->LoadKinematics();
208   AliStack* stack = rl->Stack();
209
210   Int_t nPrimary = stack->GetNprimary();
211   Int_t nTracks  = stack->GetNtrack();
212
213   TEveTrackList* lt = new TEveTrackList("MC-Tracks");
214   lt->SetMainColor(6);
215   //lt->SetMUON();
216
217   gEve->AddElement(lt);
218
219   Int_t pdgCode;
220   TParticle *part;
221   TEveRecTrack rt;
222
223   Int_t nHitTracks = g_muon_data->GetNTrackList();
224   Int_t index;
225   for (Int_t i = 0; i < nHitTracks; i++)
226   {
227     index = g_muon_data->GetTrack(i);
228     if (index >= nTracks) {
229       cout << "TEveHit track index larger than number in stack!" << endl;
230       continue;
231     }
232
233     part = stack->Particle(index);
234     if (part->P() < 0.001) continue;  // skip momenta < 1.0 MeV/c
235     rt.fLabel = i;
236
237     AliEveMUONTrack* track = new AliEveMUONTrack(&rt, lt->GetPropagator());
238
239     track->MakeMCTrack(part);
240
241     gEve->AddElement(track, lt);
242   }
243
244   rl->UnloadKinematics();
245 }
246