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