8 Alieve::MUONData* g_muon_data = 0;
9 Alieve::Event* g_muon_last_event = 0;
11 Int_t g_currentEvent = -1;
12 Bool_t g_fromRaw = kFALSE;
14 void MUON_display(Bool_t fromRaw = kFALSE, Bool_t showTracks = kTRUE)
17 if (!AliMpSegmentation::Instance()) AliMpCDB::LoadMpSegmentation();
18 if (!AliMpDDLStore::Instance()) AliMpCDB::LoadDDLStore();
24 if (Alieve::gEvent == 0) {
25 printf("No alieve event: use alieve_init(...) \n");
29 if (g_currentEvent == Alieve::gEvent->GetEventId()) {
30 if (g_fromRaw == fromRaw) {
31 printf("Same event... \n");
35 printf("Same event with digits.\n");
36 Alieve::gEvent->GotoEvent(g_currentEvent);
38 printf("Same event with raw.\n");
39 Alieve::gEvent->GotoEvent(g_currentEvent);
46 TString dataPath = TString(Alieve::gEvent->GetTitle());
47 dataPath.Append("/rawmuon.root");
49 AliRunLoader* rl = Alieve::Event::AssertRunLoader();
50 g_muon_data = new Alieve::MUONData;
53 rl->LoadDigits("MUON");
54 dt = rl->GetTreeD("MUON", false);
56 cout << "No digits produced!" << endl;
58 cout << "With aliroot digits!" << endl;
59 g_muon_data->LoadDigits(dt);
62 if (gSystem->AccessPathName(dataPath.Data(),kFileExists)) {
63 cout << "No raw data produced!" << endl;
65 cout << "With raw digits!" << endl;
66 g_muon_data->LoadRaw(dataPath.Data());
70 rl->LoadRecPoints("MUON");
71 ct = rl->GetTreeR("MUON", false);
72 g_muon_data->LoadRecPoints(ct);
75 ht = rl->GetTreeH("MUON", false);
76 g_muon_data->LoadHits(ht);
78 g_muon_last_event = Alieve::gEvent;
80 g_currentEvent = g_muon_last_event->GetEventId();
82 gStyle->SetPalette(1, 0);
84 gReve->DisableRedraw();
86 Reve::RenderElementList* l = new Reve::RenderElementList("MUONChambers");
87 l->SetTitle("MUON chambers");
88 l->SetMainColor(Color_t(2));
89 gReve->AddRenderElement(l);
91 for (Int_t ic = 0; ic < 14; ic++) {
93 Alieve::MUONChamber* mucha = new Alieve::MUONChamber(ic);
95 mucha->SetFrameColor(2);
96 mucha->SetChamberID(ic);
98 mucha->SetDataSource(g_muon_data);
100 gReve->AddRenderElement(mucha, l);
106 MUON_trigger_tracks();
112 gReve->EnableRedraw();
113 gReve->Redraw3D(kTRUE);
116 TGLViewer* view = dynamic_cast<TGLViewer*>(gReve->GetGLCanvas()->GetViewer3D());
117 view->ResetCamerasAfterNextUpdate();
118 gReve->GetGLCanvas()->Modified();
119 gReve->GetGLCanvas()->Update();
123 //_____________________________________________________________________________
126 AliRunLoader* rl = Alieve::Event::AssertRunLoader();
127 rl->LoadTracks("MUON");
128 TTree* tt = rl->GetTreeT("MUON", false);
130 TClonesArray *tracks = 0;
131 tt->SetBranchAddress("MUONTrack",&tracks);
134 Int_t ntracks = tracks->GetEntriesFast();
135 //printf("Found %d tracks. \n",ntracks);
137 Reve::TrackList* lt = new Reve::TrackList("M-Tracks");
138 lt->SetMainColor(Color_t(6));
141 gReve->AddRenderElement(lt);
143 TMatrixD smatrix(2,2);
151 Float_t zg[4] = { -1603.5, -1620.5, -1703.5, -1720.5 };
156 for (Int_t n = 0; n < ntracks; n++) {
160 mt = (AliMUONTrack*) tracks->At(n);
164 Alieve::MUONTrack* track = new Alieve::MUONTrack(&rt, lt->GetRnrStyle());
166 track->MakeMUONTrack(mt);
168 gReve->AddRenderElement(track, lt);
172 rl->UnloadTracks("MUON");
176 //_____________________________________________________________________________
177 void MUON_trigger_tracks() {
179 AliRunLoader* rl = Alieve::Event::AssertRunLoader();
180 rl->LoadTracks("MUON");
181 TTree* tt = rl->GetTreeT("MUON", false);
183 TClonesArray *tracks = 0;
184 tt->SetBranchAddress("MUONTriggerTrack",&tracks);
187 Int_t ntracks = tracks->GetEntriesFast();
188 //printf("Found %d tracks. \n",ntracks);
190 Reve::TrackList* lt = new Reve::TrackList("MT-Tracks");
191 lt->SetMainColor(Color_t(4));
194 gReve->AddRenderElement(lt);
196 TMatrixD smatrix(2,2);
204 Float_t zg[4] = { -1603.5, -1620.5, -1703.5, -1720.5 };
206 AliMUONTriggerTrack *mt;
209 for (Int_t n = 0; n < ntracks; n++) {
213 mt = (AliMUONTriggerTrack*) tracks->At(n);
217 Alieve::MUONTrack* track = new Alieve::MUONTrack(&rt, lt->GetRnrStyle());
219 track->MakeMUONTriggerTrack(mt);
221 gReve->AddRenderElement(track, lt);
225 rl->UnloadTracks("MUON");
229 //_____________________________________________________________________________
230 void MUON_ESD_tracks() {
232 AliESDEvent* esd = Alieve::Event::AssertESD();
234 Reve::TrackList* lt = new Reve::TrackList("ESD-Tracks");
235 lt->SetMainColor(Color_t(6));
238 gReve->AddRenderElement(lt);
242 Int_t nMuonTracks = esd->GetNumberOfMuonTracks();
243 for (Int_t n = 0; n < nMuonTracks; n++) {
245 mt = esd->GetMuonTrack(n);
249 Alieve::MUONTrack* track = new Alieve::MUONTrack(&rt, lt->GetRnrStyle());
251 track->MakeESDTrack(mt);
253 gReve->AddRenderElement(track, lt);
259 //_____________________________________________________________________________
260 void MUON_Ref_tracks() {
262 TString dataPath = TString(Alieve::gEvent->GetTitle());
263 dataPath.Append("/");
265 AliMUONRecoCheck recoCheck(dataPath.Data(),dataPath.Data());
266 AliMUONVTrackStore* trackRefStore = recoCheck.ReconstructibleTracks(Alieve::gEvent->GetEventId());
267 TIter next(trackRefStore->CreateIterator());
268 AliMUONTrack* trackRef;
270 Reve::TrackList* lt = new Reve::TrackList("Ref-Tracks");
271 lt->SetMainColor(Color_t(6));
273 gReve->AddRenderElement(lt);
277 while ( ( trackRef = static_cast<AliMUONTrack*>(next()) ) ) {
281 Alieve::MUONTrack* track = new Alieve::MUONTrack(&rt, lt->GetRnrStyle());
283 track->MakeRefTrack(trackRef);
285 gReve->AddRenderElement(track, lt);
291 //_____________________________________________________________________________
292 void MUON_MC_tracks() {
294 Double_t RADDEG = 180.0/TMath::Pi();
296 AliRunLoader* rl = Alieve::Event::AssertRunLoader();
297 rl->LoadKinematics();
298 AliStack* stack = rl->Stack();
300 Int_t nPrimary = stack->GetNprimary();
301 Int_t nTracks = stack->GetNtrack();
303 Reve::TrackList* lt = new Reve::TrackList("MC-Tracks");
304 lt->SetMainColor(Color_t(6));
307 gReve->AddRenderElement(lt);
313 Int_t nHitTracks = g_muon_data->GetNTrackList();
315 for (Int_t i = 0; i < nHitTracks; i++) {
317 index = g_muon_data->GetTrack(i);
318 if (index >= nTracks) {
319 cout << "Hit track index larger than number in stack!" << endl;
323 part = stack->Particle(index);
324 if (part->P() < 0.001) continue; // skip momenta < 1.0 MeV/c
327 Alieve::MUONTrack* track = new Alieve::MUONTrack(&rt, lt->GetRnrStyle());
329 track->MakeMCTrack(part);
331 gReve->AddRenderElement(track, lt);
335 rl->UnloadKinematics();