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