]>
Commit | Line | Data |
---|---|---|
d810d0de | 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 * | |
51346b82 | 7 | * full copyright notice. * |
d810d0de | 8 | **************************************************************************/ |
9 | #include "AliEveTRDLoaderImp.h" | |
10 | #include "AliEveTRDModuleImp.h" | |
edf0c4a0 | 11 | |
12 | //#include "AliTRDv1.h" | |
13 | ||
84aff7a4 | 14 | #include <TEveManager.h> |
edf0c4a0 | 15 | |
16 | #include "TFile.h" | |
17 | #include "TTree.h" | |
18 | ||
19 | #include <TGButton.h> | |
20 | ||
21 | #include "AliLog.h" | |
22 | #include "AliRun.h" | |
23 | #include "AliRunLoader.h" | |
24 | #include "AliLoader.h" | |
25 | #include "AliTRDrawData.h" | |
26 | #include "AliRawReaderRoot.h" | |
27 | #include "AliRawReaderDate.h" | |
28 | ||
29 | #include "AliTRDv1.h" | |
30 | #include "AliTRDhit.h" | |
31 | #include "AliTRDdigitsManager.h" | |
d810d0de | 32 | |
edf0c4a0 | 33 | using namespace std; |
34 | ||
d810d0de | 35 | ClassImp(AliEveTRDLoaderSim) |
36 | ClassImp(AliEveTRDLoaderRaw) | |
37 | ClassImp(AliEveTRDLoaderSimEditor) | |
38 | //ClassImp(TRDLoaderRawEditor) | |
edf0c4a0 | 39 | |
40 | /////////////////////////////////////////////////////////// | |
d810d0de | 41 | ///////////// AliEveTRDLoaderSim ///////////////////// |
edf0c4a0 | 42 | /////////////////////////////////////////////////////////// |
43 | ||
44 | ||
45 | //________________________________________________________ | |
d810d0de | 46 | AliEveTRDLoaderSim::AliEveTRDLoaderSim(const Text_t* n, const Text_t* t) : AliEveTRDLoader(n, t) |
edf0c4a0 | 47 | { |
48 | fRunLoader = 0x0; | |
49 | } | |
50 | ||
51 | //________________________________________________________ | |
d810d0de | 52 | AliEveTRDLoaderSim::~AliEveTRDLoaderSim() |
edf0c4a0 | 53 | {} |
54 | ||
55 | //________________________________________________________ | |
d810d0de | 56 | Bool_t AliEveTRDLoaderSim::GoToEvent(int ev) |
edf0c4a0 | 57 | { |
58 | if(!fChildren.size()){ | |
59 | AliWarning("Please select first the chamber that you want to monitor from \"Chamber(s) selector\"."); | |
60 | return kFALSE; | |
61 | } | |
62 | if(!kLoadHits && !kLoadDigits && !kLoadClusters && !kLoadTracks){ | |
63 | AliWarning("Please select first the type of data that you want to monitor and then hit the \"Load\" button."); | |
64 | return kFALSE; | |
65 | } | |
51346b82 | 66 | |
edf0c4a0 | 67 | fEvent = ev; |
68 | ||
69 | if(!fRunLoader){ | |
70 | AliError("RunLoader not initialized."); | |
71 | return kFALSE; | |
72 | } | |
73 | fRunLoader->UnloadAll("TRD"); | |
74 | Unload(); | |
51346b82 | 75 | |
edf0c4a0 | 76 | if(fRunLoader->GetEvent(ev)) return kFALSE; |
77 | TTree *t = 0x0; | |
78 | if(kLoadHits){ | |
79 | fRunLoader->LoadHits("TRD", "READ"); | |
80 | t = fRunLoader->GetTreeH("TRD", kFALSE); | |
81 | if(!t) return kFALSE; | |
82 | fTRD->SetTreeAddress(); | |
83 | if(!LoadHits(t)) return kFALSE; | |
84 | } | |
85 | if(kLoadDigits){ | |
86 | fRunLoader->LoadDigits("TRD", "READ"); | |
87 | t = fRunLoader->GetTreeD("TRD", kFALSE); | |
88 | if(!t) return kFALSE; | |
89 | fTRD->SetTreeAddress(); | |
90 | if(!LoadDigits(t)) return kFALSE; | |
91 | } | |
92 | if(kLoadClusters){ | |
93 | fRunLoader->LoadRecPoints("TRD", "READ"); | |
94 | t = fRunLoader->GetTreeR("TRD", kFALSE); | |
95 | if(!t) return kFALSE; | |
96 | if(!LoadClusters(t)) return kFALSE; | |
97 | } | |
98 | if(kLoadTracks){ | |
99 | fRunLoader->LoadTracks("TRD", "READ"); | |
100 | t = fRunLoader->GetTreeT("TRD", kFALSE); | |
101 | if(!t) return kFALSE; | |
102 | if(!LoadTracklets(t)) return kFALSE; | |
103 | } | |
104 | ||
84aff7a4 | 105 | gEve->Redraw3D(); |
edf0c4a0 | 106 | return kTRUE; |
107 | } | |
108 | ||
109 | ||
110 | //________________________________________________________ | |
d810d0de | 111 | Bool_t AliEveTRDLoaderSim::LoadHits(TTree *tH) |
edf0c4a0 | 112 | { |
113 | Info("LoadHits()", "Loading ..."); | |
114 | if(!fChildren.size()) return kTRUE; | |
51346b82 | 115 | |
d810d0de | 116 | AliEveTRDChamber *chmb = 0x0; |
edf0c4a0 | 117 | AliTRDhit *hit = 0x0; |
118 | Int_t d; | |
119 | for(int iTrack=0; iTrack<tH->GetEntries(); iTrack++){ | |
120 | gAlice->ResetHits(); | |
121 | if(!tH->GetEvent(iTrack)) continue; | |
122 | hit = (AliTRDhit*)fTRD->FirstHit(-1); | |
123 | if(!hit) continue; | |
124 | d = hit->GetDetector(); | |
125 | chmb = GetChamber(d); | |
126 | while(hit){ | |
127 | if(d != hit->GetDetector()){ | |
128 | d = hit->GetDetector(); | |
129 | chmb = GetChamber(d); | |
130 | } | |
131 | if(chmb) chmb->AddHit(hit); | |
132 | hit = (AliTRDhit*)fTRD->NextHit(); | |
133 | } | |
134 | } | |
135 | return kTRUE; | |
136 | } | |
137 | ||
138 | //________________________________________________________ | |
d810d0de | 139 | Bool_t AliEveTRDLoaderSim::Open(const char *filename, const char *dir) |
edf0c4a0 | 140 | { |
141 | //Info("Open()", ""); | |
142 | ||
51346b82 | 143 | |
edf0c4a0 | 144 | fFilename = filename; |
145 | fDir = dir; | |
146 | fDir += "/"; | |
51346b82 | 147 | |
edf0c4a0 | 148 | fRunLoader = AliRunLoader::GetRunLoader(); |
149 | if(!fRunLoader) fRunLoader = AliRunLoader::Open(filename, | |
150 | AliConfig::GetDefaultEventFolderName(),"read"); | |
151 | if(!fRunLoader){ | |
152 | AliError("Couldn't find run loader"); | |
153 | return kFALSE; | |
154 | } | |
155 | fRunLoader->SetDirName(fDir); | |
51346b82 | 156 | |
edf0c4a0 | 157 | gAlice = fRunLoader->GetAliRun(); |
158 | if(!gAlice) fRunLoader->LoadgAlice(); | |
159 | if(!gAlice){ | |
160 | AliError("Couldn't find gAlice object"); | |
161 | return kFALSE; | |
162 | } | |
163 | fTRD = (AliTRDv1*)gAlice->GetDetector("TRD"); | |
164 | if(!fTRD){ | |
165 | AliError("Couldn't find TRD"); | |
166 | return kFALSE; | |
167 | } | |
51346b82 | 168 | |
edf0c4a0 | 169 | return kTRUE; |
170 | } | |
171 | ||
51346b82 | 172 | |
edf0c4a0 | 173 | |
174 | /////////////////////////////////////////////////////////// | |
d810d0de | 175 | ///////////// AliEveTRDLoaderRaw ///////////////////// |
edf0c4a0 | 176 | /////////////////////////////////////////////////////////// |
177 | ||
178 | ||
179 | //________________________________________________________ | |
d810d0de | 180 | AliEveTRDLoaderRaw::AliEveTRDLoaderRaw(const Text_t* n, const Text_t* t) : AliEveTRDLoader(n, t) |
edf0c4a0 | 181 | { |
182 | fRawDateReader = 0x0; | |
183 | fRawRootReader = 0x0; | |
184 | fRaw = 0x0; | |
185 | fDataRoot = kTRUE; | |
186 | fEventOld = -1; | |
187 | } | |
188 | ||
189 | //________________________________________________________ | |
d810d0de | 190 | AliEveTRDLoaderRaw::~AliEveTRDLoaderRaw() |
edf0c4a0 | 191 | { |
192 | ||
193 | } | |
194 | ||
195 | ||
196 | //________________________________________________________ | |
d810d0de | 197 | Bool_t AliEveTRDLoaderRaw::Open(const char *filename, const char *dir) |
edf0c4a0 | 198 | { |
199 | // Info("Open()", Form("Open %s/%s", dir, filename)); | |
200 | fFilename = filename; | |
201 | fDir = dir; | |
202 | fDir += "/"; | |
203 | ||
204 | ||
205 | if(fRaw) delete fRaw; | |
206 | fRaw = new AliTRDrawData(); | |
51346b82 | 207 | |
edf0c4a0 | 208 | if(fDataRoot){ |
209 | if(fRawRootReader) delete fRawRootReader; | |
210 | fRawRootReader = new AliRawReaderRoot(filename); | |
211 | } else { | |
212 | if(fRawDateReader) delete fRawDateReader; | |
213 | fRawDateReader = new AliRawReaderDate(fDir+fFilename); | |
214 | } | |
215 | ||
216 | return kTRUE; | |
217 | } | |
218 | ||
219 | //________________________________________________________ | |
d810d0de | 220 | void AliEveTRDLoaderRaw::SetDataType(TRDDataTypes type) |
edf0c4a0 | 221 | { |
222 | fDataRoot = (type == kRawRoot) ? kTRUE : kFALSE; | |
223 | } | |
224 | ||
225 | //________________________________________________________ | |
d810d0de | 226 | Bool_t AliEveTRDLoaderRaw::GoToEvent(int ev) |
edf0c4a0 | 227 | { |
228 | if(!fChildren.size()){ | |
229 | AliWarning("Please select first the chamber that you want to monitor from \"Chamber(s) selector\"."); | |
230 | return kFALSE; | |
231 | } | |
232 | ||
d810d0de | 233 | static const TEveException eH("AliEveTRDLoader::GotoEvent "); |
edf0c4a0 | 234 | if(fRawRootReader == 0x0) throw(eH + "data file not opened."); |
235 | ||
236 | ||
237 | if(ev == fEventOld) return kTRUE; | |
238 | Bool_t checkEnd; | |
239 | if(ev < fEventOld) { | |
240 | fRawRootReader->RewindEvents(); | |
241 | fEventOld = -1; | |
242 | checkEnd = kFALSE; | |
243 | } else checkEnd = kTRUE; | |
51346b82 | 244 | |
edf0c4a0 | 245 | do NextEvent(); while(fEventOld != ev && !(checkEnd == kTRUE && fEventOld == 0)); |
246 | LoadEvent(); | |
84aff7a4 | 247 | gEve->Redraw3D(); |
248 | //gEve->EnableRedraw(); | |
edf0c4a0 | 249 | return kTRUE; |
250 | } | |
251 | ||
252 | //________________________________________________________ | |
d810d0de | 253 | Bool_t AliEveTRDLoaderRaw::LoadEvent() |
edf0c4a0 | 254 | { |
255 | Info("LoadEvent()", "Loading ..."); | |
51346b82 | 256 | |
d810d0de | 257 | static const TEveException eH("AliEveTRDLoader::LoadEvent "); |
edf0c4a0 | 258 | if(fRawRootReader == 0x0) throw(eH + "data file not opened."); |
259 | ||
260 | ||
261 | fRawRootReader->Reset(); | |
262 | ||
d810d0de | 263 | AliEveTRDChamber *chmb; |
edf0c4a0 | 264 | AliTRDdigitsManager *dm; |
265 | dm = fRaw->Raw2Digits(fRawRootReader); | |
266 | ||
267 | for(int idet=0; idet<540; idet++){ | |
268 | if(!(chmb=GetChamber(idet))) continue; | |
269 | chmb->LoadDigits(dm); | |
270 | } | |
271 | return kTRUE; | |
272 | } | |
273 | ||
274 | //________________________________________________________ | |
d810d0de | 275 | void AliEveTRDLoaderRaw::NextEvent(Bool_t rewindOnEnd) |
edf0c4a0 | 276 | { |
d810d0de | 277 | static const TEveException eH("AliEveTRDLoader::NextEvent "); |
edf0c4a0 | 278 | if(fRawRootReader == 0x0) throw(eH + "data file not opened."); |
279 | ||
280 | ||
281 | if(fRawRootReader->NextEvent() == kTRUE) ++fEventOld; | |
282 | else { | |
283 | if(fEventOld == -1) throw(eH + "no events available."); | |
284 | if(rewindOnEnd) { | |
285 | Warning("NextEvent()", Form("Reached end of stream (event=%d), rewinding to first event.", fEventOld)); | |
286 | fRawRootReader->RewindEvents(); | |
287 | fRawRootReader->NextEvent(); | |
288 | fEventOld = 0; | |
289 | } else throw(eH + "last event reached."); | |
290 | } | |
291 | } | |
292 | ||
293 | ||
294 | ||
295 | /////////////////////////////////////////////////////////// | |
d810d0de | 296 | ///////////// AliEveTRDLoaderSimEditor ///////////////////// |
edf0c4a0 | 297 | /////////////////////////////////////////////////////////// |
298 | ||
299 | //________________________________________________________ | |
d810d0de | 300 | AliEveTRDLoaderSimEditor::AliEveTRDLoaderSimEditor(const TGWindow* p, Int_t width, Int_t height, UInt_t options, Pixel_t back) : TGedFrame(p, width, height, options | kVerticalFrame, back) |
edf0c4a0 | 301 | { |
d810d0de | 302 | MakeTitle("AliEveTRDLoaderSim"); |
51346b82 | 303 | |
edf0c4a0 | 304 | // "Data selector" group frame |
305 | TGGroupFrame *fGroupFrame = new TGGroupFrame(this,"Data selector"); | |
306 | fLoadHits = new TGCheckButton(fGroupFrame," Hits"); | |
d810d0de | 307 | fLoadHits->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, "Toggle(=0)"); |
edf0c4a0 | 308 | fGroupFrame->AddFrame(fLoadHits, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2)); |
51346b82 | 309 | |
edf0c4a0 | 310 | fLoadDigits = new TGCheckButton(fGroupFrame," Digits"); |
d810d0de | 311 | fLoadDigits->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, "Toggle(=1)"); |
edf0c4a0 | 312 | fGroupFrame->AddFrame(fLoadDigits, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2)); |
313 | ||
314 | fLoadClusters = new TGCheckButton(fGroupFrame," Clusters"); | |
d810d0de | 315 | fLoadClusters->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, "Toggle(=2)"); |
edf0c4a0 | 316 | fGroupFrame->AddFrame(fLoadClusters, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2)); |
317 | ||
318 | fLoadTracks = new TGCheckButton(fGroupFrame," Tracklets "); | |
d810d0de | 319 | fLoadTracks->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, "Toggle(=3)"); |
edf0c4a0 | 320 | fGroupFrame->AddFrame(fLoadTracks, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2)); |
321 | ||
322 | fGroupFrame->SetLayoutManager(new TGVerticalLayout(fGroupFrame)); | |
323 | // fGroupFrame->Resize(164,116); | |
324 | AddFrame(fGroupFrame, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2)); | |
325 | } | |
326 | ||
327 | //________________________________________________________ | |
d810d0de | 328 | AliEveTRDLoaderSimEditor::~AliEveTRDLoaderSimEditor() |
edf0c4a0 | 329 | {} |
330 | ||
331 | //_________________________________________________________ | |
d810d0de | 332 | void AliEveTRDLoaderSimEditor::SetModel(TObject* obj) |
edf0c4a0 | 333 | { |
d810d0de | 334 | fM = dynamic_cast<AliEveTRDLoaderSim*>(obj); |
edf0c4a0 | 335 | |
336 | Bool_t kFile = kTRUE; | |
337 | if(fM->fFilename.CompareTo("") == 0) kFile = kFALSE; | |
338 | ||
339 | /* printf("\thits %s\n", fM->kLoadHits ? "true" : "false"); | |
340 | printf("\tdigits %s\n", fM->kLoadDigits ? "true" : "false"); | |
341 | printf("\tclusters %s\n", fM->kLoadClusters ? "true" : "false"); | |
342 | printf("\ttracklets %s\n", fM->kLoadTracks ? "true" : "false");*/ | |
343 | fLoadHits->SetEnabled(kFile); | |
344 | if(kFile) fLoadHits->SetState(fM->kLoadHits ? kButtonDown : kButtonUp); | |
345 | fLoadDigits->SetEnabled(kFile); | |
346 | if(kFile) fLoadDigits->SetState(fM->kLoadDigits ? kButtonDown : kButtonUp); | |
347 | fLoadClusters->SetEnabled(kFile); | |
348 | if(kFile) fLoadClusters->SetState(fM->kLoadClusters ? kButtonDown : kButtonUp); | |
349 | fLoadTracks->SetEnabled(kFile); | |
350 | if(kFile) fLoadTracks->SetState(fM->kLoadTracks ? kButtonDown : kButtonUp); | |
351 | } | |
352 | ||
353 | //________________________________________________________ | |
d810d0de | 354 | void AliEveTRDLoaderSimEditor::Toggle(Int_t id) |
edf0c4a0 | 355 | { |
356 | switch(id){ | |
357 | case 0: | |
358 | fM->kLoadHits = fLoadHits->IsDown() ? kTRUE : kFALSE; | |
359 | break; | |
360 | case 1: | |
361 | fM->kLoadDigits = fLoadDigits->IsDown() ? kTRUE : kFALSE; | |
362 | break; | |
363 | case 2: | |
364 | fM->kLoadClusters = fLoadClusters->IsDown() ? kTRUE : kFALSE; | |
365 | break; | |
366 | case 3: | |
367 | fM->kLoadTracks = fLoadTracks->IsDown() ? kTRUE : kFALSE; | |
368 | break; | |
369 | } | |
370 | } | |
371 | ||
372 | /////////////////////////////////////////////////////////// | |
373 | ///////////// TRDLoaderRawEditor ///////////////////// | |
374 | /////////////////////////////////////////////////////////// | |
375 | ||
376 | // //________________________________________________________ | |
377 | // TRDLoaderRawEditor::TRDLoaderRawEditor(const TGWindow* p, Int_t width, Int_t height, UInt_t options, Pixel_t back) : TGedFrame(p, width, height, options | kVerticalFrame, back) | |
378 | // { | |
d810d0de | 379 | // MakeTitle("AliEveTRDLoaderRaw"); |
edf0c4a0 | 380 | // } |
51346b82 | 381 | // |
edf0c4a0 | 382 | // void TRDLoaderRawEditor::SetModel(TObject* obj) |
383 | // { | |
384 | // Info("SetModel()", ""); | |
d810d0de | 385 | // fM = dynamic_cast<AliEveTRDLoaderRaw*>(obj); |
edf0c4a0 | 386 | // } |