]>
Commit | Line | Data |
---|---|---|
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 | 10 | class AliEveMUONData; |
11 | class AliEveEventManager; | |
f6ee486c | 12 | |
cb4245bb | 13 | AliEveMUONData *g_muon_data = 0; |
cb4245bb | 14 | |
15 | Int_t g_currentEvent = -1; | |
16 | Bool_t g_fromRaw = kFALSE; | |
f6ee486c | 17 | |
f6ee486c | 18 | |
af2d8a68 | 19 | void 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 | 135 | void 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 | 168 | void 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 | 201 | void 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 |